All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-12  2:50 ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  2:50 UTC (permalink / raw)
  To: Bjorn Helgaas, linux-pci, linux-kernel; +Cc: Deucher, Alexander, Zytaruk, Kelly

Hi Helgaas,

Some AMD GPUs have hardware support for graphics SR-IOV.
If the SR-IOV capable GPU is plugged into the SR-IOV incapable
platform. It would cause a problem on PCI resource allocation in
current Linux kernel.

Therefore in order to allow the PF (Physical Function) device of
SR-IOV capable GPU to work on the SR-IOV incapable platform,
it is required to verify conditions for initializing BAR resources
on AMD SR-IOV capable GPUs.

If the device is an AMD graphics device and it supports
SR-IOV it will require a large amount of resources.
Before calling sriov_init() must ensure that the system
BIOS also supports SR-IOV and that system BIOS has been
able to allocate enough resources.
If the VF BARs are zero then the system BIOS does not
support SR-IOV or it could not allocate the resources
and this platform will not support AMD graphics SR-IOV.
Therefore do not call sriov_init().
If the system BIOS does support SR-IOV then the VF BARs
will be properly initialized to non-zero values.

Below is the patch against to Kernel 4.8 & 4.9. Please review.

I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
quirks.c are for specific devices and one or more device ID are defined
for the specific devices. However my patch is for all AMD SR-IOV
capable GPUs, that includes all existing and future AMD server GPUs.
So it doesn't seem like a good fit to put the fix in quirks.c.



Signed-off-by: Collins Cheng <collins.cheng@amd.com>
---
 drivers/pci/iov.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 60 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index e30f05c..e4f1405 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
 		msleep(100);
 }
 
+/*
+ * pci_vf_bar_valid - check if VF BARs have resource allocated
+ * @dev: the PCI device
+ * @pos: register offset of SR-IOV capability in PCI config space
+ * Returns true any VF BAR has resource allocated, false
+ * if all VF BARs are empty.
+ */
+static bool pci_vf_bar_valid(struct pci_dev *dev, int pos)
+{
+	int i;
+	u32 bar_value;
+	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
+			PCI_BASE_ADDRESS_MEM_TYPE_64 |
+			PCI_BASE_ADDRESS_MEM_PREFETCH);
+
+	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
+		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
+		if (bar_value & bar_size_mask)
+			return true;
+	}
+
+	return false;
+}
+
+/*
+ * is_amd_display_adapter - check if it is an AMD/ATI GPU device
+ * @dev: the PCI device
+ *
+ * Returns true if device is an AMD/ATI display adapter,
+ * otherwise return false.
+ */
+
+static bool is_amd_display_adapter(struct pci_dev *dev)
+{
+	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
+		(dev->vendor == PCI_VENDOR_ID_ATI ||
+		dev->vendor == PCI_VENDOR_ID_AMD));
+}
+
 /**
  * pci_iov_init - initialize the IOV capability
  * @dev: the PCI device
@@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
 		return -ENODEV;
 
 	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
-	if (pos)
-		return sriov_init(dev, pos);
-
+	if (pos) {
+	/*
+	 * If the device is an AMD graphics device and it supports
+	 * SR-IOV it will require a large amount of resources.
+	 * Before calling sriov_init() must ensure that the system
+	 * BIOS also supports SR-IOV and that system BIOS has been
+	 * able to allocate enough resources.
+	 * If the VF BARs are zero then the system BIOS does not
+	 * support SR-IOV or it could not allocate the resources
+	 * and this platform will not support AMD graphics SR-IOV.
+	 * Therefore do not call sriov_init().
+	 * If the system BIOS does support SR-IOV then the VF BARs
+	 * will be properly initialized to non-zero values.
+	 */
+		if (is_amd_display_adapter(dev)) {
+			if (pci_vf_bar_valid(dev, pos))
+				return sriov_init(dev, pos);
+		} else {
+			return sriov_init(dev, pos);
+		}
+	}
 	return -ENODEV;
 }
 
-- 
1.9.1



-Collins Cheng

^ permalink raw reply related	[flat|nested] 43+ messages in thread

* [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-12  2:50 ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  2:50 UTC (permalink / raw)
  To: Bjorn Helgaas, linux-pci, linux-kernel; +Cc: Deucher, Alexander, Zytaruk, Kelly

Hi Helgaas,

Some AMD GPUs have hardware support for graphics SR-IOV.
If the SR-IOV capable GPU is plugged into the SR-IOV incapable
platform. It would cause a problem on PCI resource allocation in
current Linux kernel.

Therefore in order to allow the PF (Physical Function) device of
SR-IOV capable GPU to work on the SR-IOV incapable platform,
it is required to verify conditions for initializing BAR resources
on AMD SR-IOV capable GPUs.

If the device is an AMD graphics device and it supports
SR-IOV it will require a large amount of resources.
Before calling sriov_init() must ensure that the system
BIOS also supports SR-IOV and that system BIOS has been
able to allocate enough resources.
If the VF BARs are zero then the system BIOS does not
support SR-IOV or it could not allocate the resources
and this platform will not support AMD graphics SR-IOV.
Therefore do not call sriov_init().
If the system BIOS does support SR-IOV then the VF BARs
will be properly initialized to non-zero values.

Below is the patch against to Kernel 4.8 & 4.9. Please review.

I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
quirks.c are for specific devices and one or more device ID are defined
for the specific devices. However my patch is for all AMD SR-IOV
capable GPUs, that includes all existing and future AMD server GPUs.
So it doesn't seem like a good fit to put the fix in quirks.c.



Signed-off-by: Collins Cheng <collins.cheng@amd.com>
---
 drivers/pci/iov.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++=
+---
 1 file changed, 60 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index e30f05c..e4f1405 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
 		msleep(100);
 }
=20
+/*
+ * pci_vf_bar_valid - check if VF BARs have resource allocated
+ * @dev: the PCI device
+ * @pos: register offset of SR-IOV capability in PCI config space
+ * Returns true any VF BAR has resource allocated, false
+ * if all VF BARs are empty.
+ */
+static bool pci_vf_bar_valid(struct pci_dev *dev, int pos)
+{
+	int i;
+	u32 bar_value;
+	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
+			PCI_BASE_ADDRESS_MEM_TYPE_64 |
+			PCI_BASE_ADDRESS_MEM_PREFETCH);
+
+	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
+		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
+		if (bar_value & bar_size_mask)
+			return true;
+	}
+
+	return false;
+}
+
+/*
+ * is_amd_display_adapter - check if it is an AMD/ATI GPU device
+ * @dev: the PCI device
+ *
+ * Returns true if device is an AMD/ATI display adapter,
+ * otherwise return false.
+ */
+
+static bool is_amd_display_adapter(struct pci_dev *dev)
+{
+	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
+		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
+		dev->vendor =3D=3D PCI_VENDOR_ID_AMD));
+}
+
 /**
  * pci_iov_init - initialize the IOV capability
  * @dev: the PCI device
@@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
 		return -ENODEV;
=20
 	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
-	if (pos)
-		return sriov_init(dev, pos);
-
+	if (pos) {
+	/*
+	 * If the device is an AMD graphics device and it supports
+	 * SR-IOV it will require a large amount of resources.
+	 * Before calling sriov_init() must ensure that the system
+	 * BIOS also supports SR-IOV and that system BIOS has been
+	 * able to allocate enough resources.
+	 * If the VF BARs are zero then the system BIOS does not
+	 * support SR-IOV or it could not allocate the resources
+	 * and this platform will not support AMD graphics SR-IOV.
+	 * Therefore do not call sriov_init().
+	 * If the system BIOS does support SR-IOV then the VF BARs
+	 * will be properly initialized to non-zero values.
+	 */
+		if (is_amd_display_adapter(dev)) {
+			if (pci_vf_bar_valid(dev, pos))
+				return sriov_init(dev, pos);
+		} else {
+			return sriov_init(dev, pos);
+		}
+	}
 	return -ENODEV;
 }
=20
--=20
1.9.1



-Collins Cheng

^ permalink raw reply related	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  2:50 ` Cheng, Collins
  (?)
@ 2017-05-12  3:20 ` Alex Williamson
  2017-05-12  3:42     ` Cheng, Collins
  2017-05-12  3:44     ` Zytaruk, Kelly
  -1 siblings, 2 replies; 43+ messages in thread
From: Alex Williamson @ 2017-05-12  3:20 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

On Fri, 12 May 2017 02:50:32 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Helgaas,
> 
> Some AMD GPUs have hardware support for graphics SR-IOV.
> If the SR-IOV capable GPU is plugged into the SR-IOV incapable
> platform. It would cause a problem on PCI resource allocation in
> current Linux kernel.
> 
> Therefore in order to allow the PF (Physical Function) device of
> SR-IOV capable GPU to work on the SR-IOV incapable platform,
> it is required to verify conditions for initializing BAR resources
> on AMD SR-IOV capable GPUs.
> 
> If the device is an AMD graphics device and it supports
> SR-IOV it will require a large amount of resources.
> Before calling sriov_init() must ensure that the system
> BIOS also supports SR-IOV and that system BIOS has been
> able to allocate enough resources.
> If the VF BARs are zero then the system BIOS does not
> support SR-IOV or it could not allocate the resources
> and this platform will not support AMD graphics SR-IOV.
> Therefore do not call sriov_init().
> If the system BIOS does support SR-IOV then the VF BARs
> will be properly initialized to non-zero values.
> 
> Below is the patch against to Kernel 4.8 & 4.9. Please review.
> 
> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
> quirks.c are for specific devices and one or more device ID are defined
> for the specific devices. However my patch is for all AMD SR-IOV
> capable GPUs, that includes all existing and future AMD server GPUs.
> So it doesn't seem like a good fit to put the fix in quirks.c.


Why is an AMD graphics card unique here?  Doesn't sriov_init() always
need to be able to deal with devices of any type where the BIOS hasn't
initialized the SR-IOV capability?  Some SR-IOV devices can fit their
VFs within a minimum bridge aperture, most cannot.  I don't understand
why the VF resource requirements being exceptionally large dictates
that they receive special handling.  Thanks,

Alex

> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> ---
>  drivers/pci/iov.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 60 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index e30f05c..e4f1405 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>  		msleep(100);
>  }
>  
> +/*
> + * pci_vf_bar_valid - check if VF BARs have resource allocated
> + * @dev: the PCI device
> + * @pos: register offset of SR-IOV capability in PCI config space
> + * Returns true any VF BAR has resource allocated, false
> + * if all VF BARs are empty.
> + */
> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos)
> +{
> +	int i;
> +	u32 bar_value;
> +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> +
> +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> +		if (bar_value & bar_size_mask)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +/*
> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> + * @dev: the PCI device
> + *
> + * Returns true if device is an AMD/ATI display adapter,
> + * otherwise return false.
> + */
> +
> +static bool is_amd_display_adapter(struct pci_dev *dev)
> +{
> +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> +		dev->vendor == PCI_VENDOR_ID_AMD));
> +}
> +
>  /**
>   * pci_iov_init - initialize the IOV capability
>   * @dev: the PCI device
> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>  		return -ENODEV;
>  
>  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> -	if (pos)
> -		return sriov_init(dev, pos);
> -
> +	if (pos) {
> +	/*
> +	 * If the device is an AMD graphics device and it supports
> +	 * SR-IOV it will require a large amount of resources.
> +	 * Before calling sriov_init() must ensure that the system
> +	 * BIOS also supports SR-IOV and that system BIOS has been
> +	 * able to allocate enough resources.
> +	 * If the VF BARs are zero then the system BIOS does not
> +	 * support SR-IOV or it could not allocate the resources
> +	 * and this platform will not support AMD graphics SR-IOV.
> +	 * Therefore do not call sriov_init().
> +	 * If the system BIOS does support SR-IOV then the VF BARs
> +	 * will be properly initialized to non-zero values.
> +	 */
> +		if (is_amd_display_adapter(dev)) {
> +			if (pci_vf_bar_valid(dev, pos))
> +				return sriov_init(dev, pos);
> +		} else {
> +			return sriov_init(dev, pos);
> +		}
> +	}
>  	return -ENODEV;
>  }
>  

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  3:20 ` Alex Williamson
@ 2017-05-12  3:42     ` Cheng, Collins
  2017-05-12  3:44     ` Zytaruk, Kelly
  1 sibling, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  3:42 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

Hi Williamson,

GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.

If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.

-Collins Cheng

-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Friday, May 12, 2017 11:21 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Fri, 12 May 2017 02:50:32 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Helgaas,
> 
> Some AMD GPUs have hardware support for graphics SR-IOV.
> If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> platform. It would cause a problem on PCI resource allocation in 
> current Linux kernel.
> 
> Therefore in order to allow the PF (Physical Function) device of 
> SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> required to verify conditions for initializing BAR resources on AMD 
> SR-IOV capable GPUs.
> 
> If the device is an AMD graphics device and it supports SR-IOV it will 
> require a large amount of resources.
> Before calling sriov_init() must ensure that the system BIOS also 
> supports SR-IOV and that system BIOS has been able to allocate enough 
> resources.
> If the VF BARs are zero then the system BIOS does not support SR-IOV 
> or it could not allocate the resources and this platform will not 
> support AMD graphics SR-IOV.
> Therefore do not call sriov_init().
> If the system BIOS does support SR-IOV then the VF BARs will be 
> properly initialized to non-zero values.
> 
> Below is the patch against to Kernel 4.8 & 4.9. Please review.
> 
> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in 
> quirks.c are for specific devices and one or more device ID are 
> defined for the specific devices. However my patch is for all AMD 
> SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> So it doesn't seem like a good fit to put the fix in quirks.c.


Why is an AMD graphics card unique here?  Doesn't sriov_init() always need to be able to deal with devices of any type where the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices can fit their VFs within a minimum bridge aperture, most cannot.  I don't understand why the VF resource requirements being exceptionally large dictates that they receive special handling.  Thanks,

Alex

> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> ---
>  drivers/pci/iov.c | 63 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 60 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 
> e30f05c..e4f1405 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>  		msleep(100);
>  }
>  
> +/*
> + * pci_vf_bar_valid - check if VF BARs have resource allocated
> + * @dev: the PCI device
> + * @pos: register offset of SR-IOV capability in PCI config space
> + * Returns true any VF BAR has resource allocated, false
> + * if all VF BARs are empty.
> + */
> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> +	int i;
> +	u32 bar_value;
> +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> +
> +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> +		if (bar_value & bar_size_mask)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +/*
> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> + * @dev: the PCI device
> + *
> + * Returns true if device is an AMD/ATI display adapter,
> + * otherwise return false.
> + */
> +
> +static bool is_amd_display_adapter(struct pci_dev *dev) {
> +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> +
>  /**
>   * pci_iov_init - initialize the IOV capability
>   * @dev: the PCI device
> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>  		return -ENODEV;
>  
>  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> -	if (pos)
> -		return sriov_init(dev, pos);
> -
> +	if (pos) {
> +	/*
> +	 * If the device is an AMD graphics device and it supports
> +	 * SR-IOV it will require a large amount of resources.
> +	 * Before calling sriov_init() must ensure that the system
> +	 * BIOS also supports SR-IOV and that system BIOS has been
> +	 * able to allocate enough resources.
> +	 * If the VF BARs are zero then the system BIOS does not
> +	 * support SR-IOV or it could not allocate the resources
> +	 * and this platform will not support AMD graphics SR-IOV.
> +	 * Therefore do not call sriov_init().
> +	 * If the system BIOS does support SR-IOV then the VF BARs
> +	 * will be properly initialized to non-zero values.
> +	 */
> +		if (is_amd_display_adapter(dev)) {
> +			if (pci_vf_bar_valid(dev, pos))
> +				return sriov_init(dev, pos);
> +		} else {
> +			return sriov_init(dev, pos);
> +		}
> +	}
>  	return -ENODEV;
>  }
>  

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-12  3:42     ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  3:42 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

Hi Williamson,

GPU card needs more BAR aperture resource than other PCI devices. For examp=
le, Intel SR-IOV network card only require 512KB memory resource for all VF=
s. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource for frame=
 buffer BAR aperture.

If the system BIOS supports SR-IOV, it will reserve enough resource for all=
 VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the =
enough resource for VF BARs, only PF BAR will be assigned and VF BARs are e=
mpty. Then system boots to Linux kernel and kernel doesn't check if the VF =
BARs are empty or valid. Kernel will re-assign the BAR resources for PF and=
 all VFs. The problem I saw is that kernel will fail to allocate PF BAR res=
ource because some resources are assigned to VF, this is not expected. So k=
ernel might need to do some check before re-assign the PF/VF resource, so t=
hat PF device will be correctly assigned BAR resource and user can use PF d=
evice.

-Collins Cheng

-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Friday, May 12, 2017 11:21 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-k=
ernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zyta=
ruk, Kelly <Kelly.Zytaruk@amd.com>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Fri, 12 May 2017 02:50:32 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Helgaas,
>=20
> Some AMD GPUs have hardware support for graphics SR-IOV.
> If the SR-IOV capable GPU is plugged into the SR-IOV incapable=20
> platform. It would cause a problem on PCI resource allocation in=20
> current Linux kernel.
>=20
> Therefore in order to allow the PF (Physical Function) device of=20
> SR-IOV capable GPU to work on the SR-IOV incapable platform, it is=20
> required to verify conditions for initializing BAR resources on AMD=20
> SR-IOV capable GPUs.
>=20
> If the device is an AMD graphics device and it supports SR-IOV it will=20
> require a large amount of resources.
> Before calling sriov_init() must ensure that the system BIOS also=20
> supports SR-IOV and that system BIOS has been able to allocate enough=20
> resources.
> If the VF BARs are zero then the system BIOS does not support SR-IOV=20
> or it could not allocate the resources and this platform will not=20
> support AMD graphics SR-IOV.
> Therefore do not call sriov_init().
> If the system BIOS does support SR-IOV then the VF BARs will be=20
> properly initialized to non-zero values.
>=20
> Below is the patch against to Kernel 4.8 & 4.9. Please review.
>=20
> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in=20
> quirks.c are for specific devices and one or more device ID are=20
> defined for the specific devices. However my patch is for all AMD=20
> SR-IOV capable GPUs, that includes all existing and future AMD server GPU=
s.
> So it doesn't seem like a good fit to put the fix in quirks.c.


Why is an AMD graphics card unique here?  Doesn't sriov_init() always need =
to be able to deal with devices of any type where the BIOS hasn't initializ=
ed the SR-IOV capability?  Some SR-IOV devices can fit their VFs within a m=
inimum bridge aperture, most cannot.  I don't understand why the VF resourc=
e requirements being exceptionally large dictates that they receive special=
 handling.  Thanks,

Alex

> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> ---
>  drivers/pci/iov.c | 63=20
> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 60 insertions(+), 3 deletions(-)
>=20
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index=20
> e30f05c..e4f1405 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>  		msleep(100);
>  }
> =20
> +/*
> + * pci_vf_bar_valid - check if VF BARs have resource allocated
> + * @dev: the PCI device
> + * @pos: register offset of SR-IOV capability in PCI config space
> + * Returns true any VF BAR has resource allocated, false
> + * if all VF BARs are empty.
> + */
> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> +	int i;
> +	u32 bar_value;
> +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> +
> +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> +		if (bar_value & bar_size_mask)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +/*
> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> + * @dev: the PCI device
> + *
> + * Returns true if device is an AMD/ATI display adapter,
> + * otherwise return false.
> + */
> +
> +static bool is_amd_display_adapter(struct pci_dev *dev) {
> +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
> +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
> +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
> +
>  /**
>   * pci_iov_init - initialize the IOV capability
>   * @dev: the PCI device
> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>  		return -ENODEV;
> =20
>  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> -	if (pos)
> -		return sriov_init(dev, pos);
> -
> +	if (pos) {
> +	/*
> +	 * If the device is an AMD graphics device and it supports
> +	 * SR-IOV it will require a large amount of resources.
> +	 * Before calling sriov_init() must ensure that the system
> +	 * BIOS also supports SR-IOV and that system BIOS has been
> +	 * able to allocate enough resources.
> +	 * If the VF BARs are zero then the system BIOS does not
> +	 * support SR-IOV or it could not allocate the resources
> +	 * and this platform will not support AMD graphics SR-IOV.
> +	 * Therefore do not call sriov_init().
> +	 * If the system BIOS does support SR-IOV then the VF BARs
> +	 * will be properly initialized to non-zero values.
> +	 */
> +		if (is_amd_display_adapter(dev)) {
> +			if (pci_vf_bar_valid(dev, pos))
> +				return sriov_init(dev, pos);
> +		} else {
> +			return sriov_init(dev, pos);
> +		}
> +	}
>  	return -ENODEV;
>  }
> =20

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  3:20 ` Alex Williamson
@ 2017-05-12  3:44     ` Zytaruk, Kelly
  2017-05-12  3:44     ` Zytaruk, Kelly
  1 sibling, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-12  3:44 UTC (permalink / raw)
  To: Alex Williamson, Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander



>-----Original Message-----
>From: Alex Williamson [mailto:alex.williamson@redhat.com]
>Sent: Thursday, May 11, 2017 11:21 PM
>To: Cheng, Collins
>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>Deucher, Alexander; Zytaruk, Kelly
>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>On Fri, 12 May 2017 02:50:32 +0000
>"Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>
>> Hi Helgaas,
>>
>> Some AMD GPUs have hardware support for graphics SR-IOV.
>> If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>> platform. It would cause a problem on PCI resource allocation in
>> current Linux kernel.
>>
>> Therefore in order to allow the PF (Physical Function) device of
>> SR-IOV capable GPU to work on the SR-IOV incapable platform, it is
>> required to verify conditions for initializing BAR resources on AMD
>> SR-IOV capable GPUs.
>>
>> If the device is an AMD graphics device and it supports SR-IOV it will
>> require a large amount of resources.
>> Before calling sriov_init() must ensure that the system BIOS also
>> supports SR-IOV and that system BIOS has been able to allocate enough
>> resources.
>> If the VF BARs are zero then the system BIOS does not support SR-IOV
>> or it could not allocate the resources and this platform will not
>> support AMD graphics SR-IOV.
>> Therefore do not call sriov_init().
>> If the system BIOS does support SR-IOV then the VF BARs will be
>> properly initialized to non-zero values.
>>
>> Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>
>> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
>> quirks.c are for specific devices and one or more device ID are
>> defined for the specific devices. However my patch is for all AMD
>> SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
>> So it doesn't seem like a good fit to put the fix in quirks.c.
>
>
>Why is an AMD graphics card unique here?  Doesn't sriov_init() always need to be
>able to deal with devices of any type where the BIOS hasn't initialized the SR-IOV
>capability?  Some SR-IOV devices can fit their VFs within a minimum bridge
>aperture, most cannot.  I don't understand why the VF resource requirements
>being exceptionally large dictates that they receive special handling.  Thanks,
>
>Alex
>

Hi Alex,  
Many System Bios's are problematic in that they don't know how to fully support SRIOV.  Up until recently SRIOV devices typically used a small amount of resources, such as a NIC.
The AMD SRIOV GPU uses significant resources and many SBios' cannot handle this properly.  The faulty SBios will attempt to initialize, run out of resources and not indicate any error.
Even though we are not enabling SRIOV on these platforms this prevents us from running our SRIOV GPUs in non-SRIOV mode on these platforms.

Outward looking there is no indication that the SBios had any problems and the capability is set.  We have been able to detect these problematic SBios by noticing that they don't initialize our BARs as we expect them to be initialized.

If you have an alternative solution I would love to hear about it.

Thanks,
Kelly


>> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> ---
>>  drivers/pci/iov.c | 63
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>  1 file changed, 60 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> e30f05c..e4f1405 100644
>> --- a/drivers/pci/iov.c
>> +++ b/drivers/pci/iov.c
>> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>>  		msleep(100);
>>  }
>>
>> +/*
>> + * pci_vf_bar_valid - check if VF BARs have resource allocated
>> + * @dev: the PCI device
>> + * @pos: register offset of SR-IOV capability in PCI config space
>> + * Returns true any VF BAR has resource allocated, false
>> + * if all VF BARs are empty.
>> + */
>> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> +	int i;
>> +	u32 bar_value;
>> +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
>> +
>> +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4,
>&bar_value);
>> +		if (bar_value & bar_size_mask)
>> +			return true;
>> +	}
>> +
>> +	return false;
>> +}
>> +
>> +/*
>> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
>> + * @dev: the PCI device
>> + *
>> + * Returns true if device is an AMD/ATI display adapter,
>> + * otherwise return false.
>> + */
>> +
>> +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>> +		(dev->vendor == PCI_VENDOR_ID_ATI ||
>> +		dev->vendor == PCI_VENDOR_ID_AMD)); }
>> +
>>  /**
>>   * pci_iov_init - initialize the IOV capability
>>   * @dev: the PCI device
>> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>  		return -ENODEV;
>>
>>  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>> -	if (pos)
>> -		return sriov_init(dev, pos);
>> -
>> +	if (pos) {
>> +	/*
>> +	 * If the device is an AMD graphics device and it supports
>> +	 * SR-IOV it will require a large amount of resources.
>> +	 * Before calling sriov_init() must ensure that the system
>> +	 * BIOS also supports SR-IOV and that system BIOS has been
>> +	 * able to allocate enough resources.
>> +	 * If the VF BARs are zero then the system BIOS does not
>> +	 * support SR-IOV or it could not allocate the resources
>> +	 * and this platform will not support AMD graphics SR-IOV.
>> +	 * Therefore do not call sriov_init().
>> +	 * If the system BIOS does support SR-IOV then the VF BARs
>> +	 * will be properly initialized to non-zero values.
>> +	 */
>> +		if (is_amd_display_adapter(dev)) {
>> +			if (pci_vf_bar_valid(dev, pos))
>> +				return sriov_init(dev, pos);
>> +		} else {
>> +			return sriov_init(dev, pos);
>> +		}
>> +	}
>>  	return -ENODEV;
>>  }
>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-12  3:44     ` Zytaruk, Kelly
  0 siblings, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-12  3:44 UTC (permalink / raw)
  To: Alex Williamson, Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander



>-----Original Message-----
>From: Alex Williamson [mailto:alex.williamson@redhat.com]
>Sent: Thursday, May 11, 2017 11:21 PM
>To: Cheng, Collins
>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org=
;
>Deucher, Alexander; Zytaruk, Kelly
>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>On Fri, 12 May 2017 02:50:32 +0000
>"Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>
>> Hi Helgaas,
>>
>> Some AMD GPUs have hardware support for graphics SR-IOV.
>> If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>> platform. It would cause a problem on PCI resource allocation in
>> current Linux kernel.
>>
>> Therefore in order to allow the PF (Physical Function) device of
>> SR-IOV capable GPU to work on the SR-IOV incapable platform, it is
>> required to verify conditions for initializing BAR resources on AMD
>> SR-IOV capable GPUs.
>>
>> If the device is an AMD graphics device and it supports SR-IOV it will
>> require a large amount of resources.
>> Before calling sriov_init() must ensure that the system BIOS also
>> supports SR-IOV and that system BIOS has been able to allocate enough
>> resources.
>> If the VF BARs are zero then the system BIOS does not support SR-IOV
>> or it could not allocate the resources and this platform will not
>> support AMD graphics SR-IOV.
>> Therefore do not call sriov_init().
>> If the system BIOS does support SR-IOV then the VF BARs will be
>> properly initialized to non-zero values.
>>
>> Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>
>> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
>> quirks.c are for specific devices and one or more device ID are
>> defined for the specific devices. However my patch is for all AMD
>> SR-IOV capable GPUs, that includes all existing and future AMD server GP=
Us.
>> So it doesn't seem like a good fit to put the fix in quirks.c.
>
>
>Why is an AMD graphics card unique here?  Doesn't sriov_init() always need=
 to be
>able to deal with devices of any type where the BIOS hasn't initialized th=
e SR-IOV
>capability?  Some SR-IOV devices can fit their VFs within a minimum bridge
>aperture, most cannot.  I don't understand why the VF resource requirement=
s
>being exceptionally large dictates that they receive special handling.  Th=
anks,
>
>Alex
>

Hi Alex, =20
Many System Bios's are problematic in that they don't know how to fully sup=
port SRIOV.  Up until recently SRIOV devices typically used a small amount =
of resources, such as a NIC.
The AMD SRIOV GPU uses significant resources and many SBios' cannot handle =
this properly.  The faulty SBios will attempt to initialize, run out of res=
ources and not indicate any error.
Even though we are not enabling SRIOV on these platforms this prevents us f=
rom running our SRIOV GPUs in non-SRIOV mode on these platforms.

Outward looking there is no indication that the SBios had any problems and =
the capability is set.  We have been able to detect these problematic SBios=
 by noticing that they don't initialize our BARs as we expect them to be in=
itialized.

If you have an alternative solution I would love to hear about it.

Thanks,
Kelly


>> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> ---
>>  drivers/pci/iov.c | 63
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>  1 file changed, 60 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> e30f05c..e4f1405 100644
>> --- a/drivers/pci/iov.c
>> +++ b/drivers/pci/iov.c
>> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev=
)
>>  		msleep(100);
>>  }
>>
>> +/*
>> + * pci_vf_bar_valid - check if VF BARs have resource allocated
>> + * @dev: the PCI device
>> + * @pos: register offset of SR-IOV capability in PCI config space
>> + * Returns true any VF BAR has resource allocated, false
>> + * if all VF BARs are empty.
>> + */
>> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> +	int i;
>> +	u32 bar_value;
>> +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
>> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
>> +
>> +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4,
>&bar_value);
>> +		if (bar_value & bar_size_mask)
>> +			return true;
>> +	}
>> +
>> +	return false;
>> +}
>> +
>> +/*
>> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
>> + * @dev: the PCI device
>> + *
>> + * Returns true if device is an AMD/ATI display adapter,
>> + * otherwise return false.
>> + */
>> +
>> +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
>> +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
>> +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
>> +
>>  /**
>>   * pci_iov_init - initialize the IOV capability
>>   * @dev: the PCI device
>> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>  		return -ENODEV;
>>
>>  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>> -	if (pos)
>> -		return sriov_init(dev, pos);
>> -
>> +	if (pos) {
>> +	/*
>> +	 * If the device is an AMD graphics device and it supports
>> +	 * SR-IOV it will require a large amount of resources.
>> +	 * Before calling sriov_init() must ensure that the system
>> +	 * BIOS also supports SR-IOV and that system BIOS has been
>> +	 * able to allocate enough resources.
>> +	 * If the VF BARs are zero then the system BIOS does not
>> +	 * support SR-IOV or it could not allocate the resources
>> +	 * and this platform will not support AMD graphics SR-IOV.
>> +	 * Therefore do not call sriov_init().
>> +	 * If the system BIOS does support SR-IOV then the VF BARs
>> +	 * will be properly initialized to non-zero values.
>> +	 */
>> +		if (is_amd_display_adapter(dev)) {
>> +			if (pci_vf_bar_valid(dev, pos))
>> +				return sriov_init(dev, pos);
>> +		} else {
>> +			return sriov_init(dev, pos);
>> +		}
>> +	}
>>  	return -ENODEV;
>>  }
>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  3:42     ` Cheng, Collins
  (?)
@ 2017-05-12  4:01     ` Alex Williamson
  2017-05-12  4:51         ` Cheng, Collins
  -1 siblings, 1 reply; 43+ messages in thread
From: Alex Williamson @ 2017-05-12  4:01 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

On Fri, 12 May 2017 03:42:46 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> 
> If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.

So the problem is that something bad happens when the kernel is trying
to reallocate resources in order to fulfill the requirements of the
VFs, leaving the PF resources incorrectly programmed?  Why not just fix
that bug rather than creating special handling for this vendor/class of
device which disables any attempt to fixup resources for SR-IOV?  IOW,
this patch just avoids the problem for your devices rather than fixing
the bug.  I'd suggest fixing the bug such that the PF is left in a
functional state if the kernel is unable to allocate sufficient
resources for the VFs.  Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com] 
> Sent: Friday, May 12, 2017 11:21 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> 
> On Fri, 12 May 2017 02:50:32 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Helgaas,
> > 
> > Some AMD GPUs have hardware support for graphics SR-IOV.
> > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > platform. It would cause a problem on PCI resource allocation in 
> > current Linux kernel.
> > 
> > Therefore in order to allow the PF (Physical Function) device of 
> > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> > required to verify conditions for initializing BAR resources on AMD 
> > SR-IOV capable GPUs.
> > 
> > If the device is an AMD graphics device and it supports SR-IOV it will 
> > require a large amount of resources.
> > Before calling sriov_init() must ensure that the system BIOS also 
> > supports SR-IOV and that system BIOS has been able to allocate enough 
> > resources.
> > If the VF BARs are zero then the system BIOS does not support SR-IOV 
> > or it could not allocate the resources and this platform will not 
> > support AMD graphics SR-IOV.
> > Therefore do not call sriov_init().
> > If the system BIOS does support SR-IOV then the VF BARs will be 
> > properly initialized to non-zero values.
> > 
> > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > 
> > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in 
> > quirks.c are for specific devices and one or more device ID are 
> > defined for the specific devices. However my patch is for all AMD 
> > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > So it doesn't seem like a good fit to put the fix in quirks.c.  
> 
> 
> Why is an AMD graphics card unique here?  Doesn't sriov_init() always need to be able to deal with devices of any type where the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices can fit their VFs within a minimum bridge aperture, most cannot.  I don't understand why the VF resource requirements being exceptionally large dictates that they receive special handling.  Thanks,
> 
> Alex
> 
> > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > ---
> >  drivers/pci/iov.c | 63 
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> >  1 file changed, 60 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 
> > e30f05c..e4f1405 100644
> > --- a/drivers/pci/iov.c
> > +++ b/drivers/pci/iov.c
> > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> >  		msleep(100);
> >  }
> >  
> > +/*
> > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > + * @dev: the PCI device
> > + * @pos: register offset of SR-IOV capability in PCI config space
> > + * Returns true any VF BAR has resource allocated, false
> > + * if all VF BARs are empty.
> > + */
> > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > +	int i;
> > +	u32 bar_value;
> > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > +
> > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > +		if (bar_value & bar_size_mask)
> > +			return true;
> > +	}
> > +
> > +	return false;
> > +}
> > +
> > +/*
> > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > + * @dev: the PCI device
> > + *
> > + * Returns true if device is an AMD/ATI display adapter,
> > + * otherwise return false.
> > + */
> > +
> > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > +
> >  /**
> >   * pci_iov_init - initialize the IOV capability
> >   * @dev: the PCI device
> > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> >  		return -ENODEV;
> >  
> >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > -	if (pos)
> > -		return sriov_init(dev, pos);
> > -
> > +	if (pos) {
> > +	/*
> > +	 * If the device is an AMD graphics device and it supports
> > +	 * SR-IOV it will require a large amount of resources.
> > +	 * Before calling sriov_init() must ensure that the system
> > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > +	 * able to allocate enough resources.
> > +	 * If the VF BARs are zero then the system BIOS does not
> > +	 * support SR-IOV or it could not allocate the resources
> > +	 * and this platform will not support AMD graphics SR-IOV.
> > +	 * Therefore do not call sriov_init().
> > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > +	 * will be properly initialized to non-zero values.
> > +	 */
> > +		if (is_amd_display_adapter(dev)) {
> > +			if (pci_vf_bar_valid(dev, pos))
> > +				return sriov_init(dev, pos);
> > +		} else {
> > +			return sriov_init(dev, pos);
> > +		}
> > +	}
> >  	return -ENODEV;
> >  }
> >    
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  4:01     ` Alex Williamson
@ 2017-05-12  4:51         ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  4:51 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

Hi Williamson,

I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.

I did not try to fix the issue from the kernel resource allocation perspective, it is because:
	1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
	2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.

-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Friday, May 12, 2017 12:01 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Fri, 12 May 2017 03:42:46 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> 
> If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.

So the problem is that something bad happens when the kernel is trying to reallocate resources in order to fulfill the requirements of the VFs, leaving the PF resources incorrectly programmed?  Why not just fix that bug rather than creating special handling for this vendor/class of device which disables any attempt to fixup resources for SR-IOV?  IOW, this patch just avoids the problem for your devices rather than fixing the bug.  I'd suggest fixing the bug such that the PF is left in a functional state if the kernel is unable to allocate sufficient resources for the VFs.  Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 11:21 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> linux-kernel@vger.kernel.org; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> SR-IOV incapable platform
> 
> On Fri, 12 May 2017 02:50:32 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Helgaas,
> > 
> > Some AMD GPUs have hardware support for graphics SR-IOV.
> > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > platform. It would cause a problem on PCI resource allocation in 
> > current Linux kernel.
> > 
> > Therefore in order to allow the PF (Physical Function) device of 
> > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> > required to verify conditions for initializing BAR resources on AMD 
> > SR-IOV capable GPUs.
> > 
> > If the device is an AMD graphics device and it supports SR-IOV it 
> > will require a large amount of resources.
> > Before calling sriov_init() must ensure that the system BIOS also 
> > supports SR-IOV and that system BIOS has been able to allocate 
> > enough resources.
> > If the VF BARs are zero then the system BIOS does not support SR-IOV 
> > or it could not allocate the resources and this platform will not 
> > support AMD graphics SR-IOV.
> > Therefore do not call sriov_init().
> > If the system BIOS does support SR-IOV then the VF BARs will be 
> > properly initialized to non-zero values.
> > 
> > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > 
> > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes 
> > in quirks.c are for specific devices and one or more device ID are 
> > defined for the specific devices. However my patch is for all AMD 
> > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > So it doesn't seem like a good fit to put the fix in quirks.c.  
> 
> 
> Why is an AMD graphics card unique here?  Doesn't sriov_init() always 
> need to be able to deal with devices of any type where the BIOS hasn't 
> initialized the SR-IOV capability?  Some SR-IOV devices can fit their 
> VFs within a minimum bridge aperture, most cannot.  I don't understand 
> why the VF resource requirements being exceptionally large dictates 
> that they receive special handling.  Thanks,
> 
> Alex
> 
> > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > ---
> >  drivers/pci/iov.c | 63
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> >  1 file changed, 60 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > e30f05c..e4f1405 100644
> > --- a/drivers/pci/iov.c
> > +++ b/drivers/pci/iov.c
> > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> >  		msleep(100);
> >  }
> >  
> > +/*
> > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > + * @dev: the PCI device
> > + * @pos: register offset of SR-IOV capability in PCI config space
> > + * Returns true any VF BAR has resource allocated, false
> > + * if all VF BARs are empty.
> > + */
> > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > +	int i;
> > +	u32 bar_value;
> > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > +
> > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > +		if (bar_value & bar_size_mask)
> > +			return true;
> > +	}
> > +
> > +	return false;
> > +}
> > +
> > +/*
> > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > + * @dev: the PCI device
> > + *
> > + * Returns true if device is an AMD/ATI display adapter,
> > + * otherwise return false.
> > + */
> > +
> > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > +
> >  /**
> >   * pci_iov_init - initialize the IOV capability
> >   * @dev: the PCI device
> > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> >  		return -ENODEV;
> >  
> >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > -	if (pos)
> > -		return sriov_init(dev, pos);
> > -
> > +	if (pos) {
> > +	/*
> > +	 * If the device is an AMD graphics device and it supports
> > +	 * SR-IOV it will require a large amount of resources.
> > +	 * Before calling sriov_init() must ensure that the system
> > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > +	 * able to allocate enough resources.
> > +	 * If the VF BARs are zero then the system BIOS does not
> > +	 * support SR-IOV or it could not allocate the resources
> > +	 * and this platform will not support AMD graphics SR-IOV.
> > +	 * Therefore do not call sriov_init().
> > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > +	 * will be properly initialized to non-zero values.
> > +	 */
> > +		if (is_amd_display_adapter(dev)) {
> > +			if (pci_vf_bar_valid(dev, pos))
> > +				return sriov_init(dev, pos);
> > +		} else {
> > +			return sriov_init(dev, pos);
> > +		}
> > +	}
> >  	return -ENODEV;
> >  }
> >    
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-12  4:51         ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-12  4:51 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly

Hi Williamson,

I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NI=
C. I don't think it is redundant to check the VF BAR valid before call srio=
v_init(), it is safe and saving boot time, also there is no a better method=
 to know if system BIOS has correctly initialized the SR-IOV capability or =
not.

I did not try to fix the issue from the kernel resource allocation perspect=
ive, it is because:
	1. I am not very familiar with the PCI resource allocation scheme in kerne=
l. For example, in sriov_init(), kernel will re-assign the PCI resource for=
 both VF and PF. I don't understand why kernel allocates resource for VF fi=
rstly, then PF. If it is PF firstly, then this issue could be avoided.
	2. I am not sure if kernel has error handler if PCI resource allocation fa=
iled. In this case, kernel cannot allocate enough resource to PF. It should=
 trigger some error handler to either just keep original BAR values set by =
system BIOS, or disable this device and log errors.

-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Friday, May 12, 2017 12:01 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-k=
ernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zyta=
ruk, Kelly <Kelly.Zytaruk@amd.com>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Fri, 12 May 2017 03:42:46 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
>=20
> GPU card needs more BAR aperture resource than other PCI devices. For exa=
mple, Intel SR-IOV network card only require 512KB memory resource for all =
VFs. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource for fra=
me buffer BAR aperture.
>=20
> If the system BIOS supports SR-IOV, it will reserve enough resource for a=
ll VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate th=
e enough resource for VF BARs, only PF BAR will be assigned and VF BARs are=
 empty. Then system boots to Linux kernel and kernel doesn't check if the V=
F BARs are empty or valid. Kernel will re-assign the BAR resources for PF a=
nd all VFs. The problem I saw is that kernel will fail to allocate PF BAR r=
esource because some resources are assigned to VF, this is not expected. So=
 kernel might need to do some check before re-assign the PF/VF resource, so=
 that PF device will be correctly assigned BAR resource and user can use PF=
 device.

So the problem is that something bad happens when the kernel is trying to r=
eallocate resources in order to fulfill the requirements of the VFs, leavin=
g the PF resources incorrectly programmed?  Why not just fix that bug rathe=
r than creating special handling for this vendor/class of device which disa=
bles any attempt to fixup resources for SR-IOV?  IOW, this patch just avoid=
s the problem for your devices rather than fixing the bug.  I'd suggest fix=
ing the bug such that the PF is left in a functional state if the kernel is=
 unable to allocate sufficient resources for the VFs.  Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 11:21 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> linux-kernel@vger.kernel.org; Deucher, Alexander=20
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> SR-IOV incapable platform
>=20
> On Fri, 12 May 2017 02:50:32 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>=20
> > Hi Helgaas,
> >=20
> > Some AMD GPUs have hardware support for graphics SR-IOV.
> > If the SR-IOV capable GPU is plugged into the SR-IOV incapable=20
> > platform. It would cause a problem on PCI resource allocation in=20
> > current Linux kernel.
> >=20
> > Therefore in order to allow the PF (Physical Function) device of=20
> > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is=20
> > required to verify conditions for initializing BAR resources on AMD=20
> > SR-IOV capable GPUs.
> >=20
> > If the device is an AMD graphics device and it supports SR-IOV it=20
> > will require a large amount of resources.
> > Before calling sriov_init() must ensure that the system BIOS also=20
> > supports SR-IOV and that system BIOS has been able to allocate=20
> > enough resources.
> > If the VF BARs are zero then the system BIOS does not support SR-IOV=20
> > or it could not allocate the resources and this platform will not=20
> > support AMD graphics SR-IOV.
> > Therefore do not call sriov_init().
> > If the system BIOS does support SR-IOV then the VF BARs will be=20
> > properly initialized to non-zero values.
> >=20
> > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> >=20
> > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes=20
> > in quirks.c are for specific devices and one or more device ID are=20
> > defined for the specific devices. However my patch is for all AMD=20
> > SR-IOV capable GPUs, that includes all existing and future AMD server G=
PUs.
> > So it doesn't seem like a good fit to put the fix in quirks.c. =20
>=20
>=20
> Why is an AMD graphics card unique here?  Doesn't sriov_init() always=20
> need to be able to deal with devices of any type where the BIOS hasn't=20
> initialized the SR-IOV capability?  Some SR-IOV devices can fit their=20
> VFs within a minimum bridge aperture, most cannot.  I don't understand=20
> why the VF resource requirements being exceptionally large dictates=20
> that they receive special handling.  Thanks,
>=20
> Alex
>=20
> > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > ---
> >  drivers/pci/iov.c | 63
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> >  1 file changed, 60 insertions(+), 3 deletions(-)
> >=20
> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > e30f05c..e4f1405 100644
> > --- a/drivers/pci/iov.c
> > +++ b/drivers/pci/iov.c
> > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *de=
v)
> >  		msleep(100);
> >  }
> > =20
> > +/*
> > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > + * @dev: the PCI device
> > + * @pos: register offset of SR-IOV capability in PCI config space
> > + * Returns true any VF BAR has resource allocated, false
> > + * if all VF BARs are empty.
> > + */
> > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > +	int i;
> > +	u32 bar_value;
> > +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
> > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > +
> > +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > +		if (bar_value & bar_size_mask)
> > +			return true;
> > +	}
> > +
> > +	return false;
> > +}
> > +
> > +/*
> > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > + * @dev: the PCI device
> > + *
> > + * Returns true if device is an AMD/ATI display adapter,
> > + * otherwise return false.
> > + */
> > +
> > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
> > +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
> > +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
> > +
> >  /**
> >   * pci_iov_init - initialize the IOV capability
> >   * @dev: the PCI device
> > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> >  		return -ENODEV;
> > =20
> >  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > -	if (pos)
> > -		return sriov_init(dev, pos);
> > -
> > +	if (pos) {
> > +	/*
> > +	 * If the device is an AMD graphics device and it supports
> > +	 * SR-IOV it will require a large amount of resources.
> > +	 * Before calling sriov_init() must ensure that the system
> > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > +	 * able to allocate enough resources.
> > +	 * If the VF BARs are zero then the system BIOS does not
> > +	 * support SR-IOV or it could not allocate the resources
> > +	 * and this platform will not support AMD graphics SR-IOV.
> > +	 * Therefore do not call sriov_init().
> > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > +	 * will be properly initialized to non-zero values.
> > +	 */
> > +		if (is_amd_display_adapter(dev)) {
> > +			if (pci_vf_bar_valid(dev, pos))
> > +				return sriov_init(dev, pos);
> > +		} else {
> > +			return sriov_init(dev, pos);
> > +		}
> > +	}
> >  	return -ENODEV;
> >  }
> >   =20
>=20

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  4:51         ` Cheng, Collins
  (?)
@ 2017-05-12 14:43         ` Alex Williamson
  2017-05-15  8:19             ` Cheng, Collins
  -1 siblings, 1 reply; 43+ messages in thread
From: Alex Williamson @ 2017-05-12 14:43 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

On Fri, 12 May 2017 04:51:43 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.

It also masks an underlying bug and creates a maintenance issue that we
won't know when it's safe to remove this workaround.  I don't think
faster boot is valid rationale, in one case SR-IOV is completely
disabled, the other we attempt to allocate the resources the BIOS
failed to provide.  I expect this is also a corner case, the BIOS
should typically support SR-IOV, therefore this situation should be an
exception.
 
> I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> 	1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> 	2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.

I think these are the issues we should be trying to solve and I'm sure
folks on the linux-pci list can help us identify the bug.  Minimally,
failure to allocate VF resources should leave the device in no worse
condition than before it tried.  Perhaps you could post more details
about the issue, boot with pci=earlydump, post dmesg of a boot where
the PF resources are incorrectly re-allocated, and include lspci -vvv
for the SR-IOV device.  Also, please test with the latest upstream
kernel, upstream only patches old kernels through stable backports of
commits to the latest kernel.  Adding Yinghai as a resource allocation
expert. Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com] 
> Sent: Friday, May 12, 2017 12:01 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> 
> On Fri, 12 May 2017 03:42:46 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Williamson,
> > 
> > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> > 
> > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.  
> 
> So the problem is that something bad happens when the kernel is trying to reallocate resources in order to fulfill the requirements of the VFs, leaving the PF resources incorrectly programmed?  Why not just fix that bug rather than creating special handling for this vendor/class of device which disables any attempt to fixup resources for SR-IOV?  IOW, this patch just avoids the problem for your devices rather than fixing the bug.  I'd suggest fixing the bug such that the PF is left in a functional state if the kernel is unable to allocate sufficient resources for the VFs.  Thanks,
> 
> Alex
> 
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 11:21 AM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> > linux-kernel@vger.kernel.org; Deucher, Alexander 
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > SR-IOV incapable platform
> > 
> > On Fri, 12 May 2017 02:50:32 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >   
> > > Hi Helgaas,
> > > 
> > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > > platform. It would cause a problem on PCI resource allocation in 
> > > current Linux kernel.
> > > 
> > > Therefore in order to allow the PF (Physical Function) device of 
> > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> > > required to verify conditions for initializing BAR resources on AMD 
> > > SR-IOV capable GPUs.
> > > 
> > > If the device is an AMD graphics device and it supports SR-IOV it 
> > > will require a large amount of resources.
> > > Before calling sriov_init() must ensure that the system BIOS also 
> > > supports SR-IOV and that system BIOS has been able to allocate 
> > > enough resources.
> > > If the VF BARs are zero then the system BIOS does not support SR-IOV 
> > > or it could not allocate the resources and this platform will not 
> > > support AMD graphics SR-IOV.
> > > Therefore do not call sriov_init().
> > > If the system BIOS does support SR-IOV then the VF BARs will be 
> > > properly initialized to non-zero values.
> > > 
> > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > > 
> > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes 
> > > in quirks.c are for specific devices and one or more device ID are 
> > > defined for the specific devices. However my patch is for all AMD 
> > > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > > So it doesn't seem like a good fit to put the fix in quirks.c.    
> > 
> > 
> > Why is an AMD graphics card unique here?  Doesn't sriov_init() always 
> > need to be able to deal with devices of any type where the BIOS hasn't 
> > initialized the SR-IOV capability?  Some SR-IOV devices can fit their 
> > VFs within a minimum bridge aperture, most cannot.  I don't understand 
> > why the VF resource requirements being exceptionally large dictates 
> > that they receive special handling.  Thanks,
> > 
> > Alex
> >   
> > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > ---
> > >  drivers/pci/iov.c | 63
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > e30f05c..e4f1405 100644
> > > --- a/drivers/pci/iov.c
> > > +++ b/drivers/pci/iov.c
> > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> > >  		msleep(100);
> > >  }
> > >  
> > > +/*
> > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > + * @dev: the PCI device
> > > + * @pos: register offset of SR-IOV capability in PCI config space
> > > + * Returns true any VF BAR has resource allocated, false
> > > + * if all VF BARs are empty.
> > > + */
> > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > +	int i;
> > > +	u32 bar_value;
> > > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > +
> > > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > > +		if (bar_value & bar_size_mask)
> > > +			return true;
> > > +	}
> > > +
> > > +	return false;
> > > +}
> > > +
> > > +/*
> > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > > + * @dev: the PCI device
> > > + *
> > > + * Returns true if device is an AMD/ATI display adapter,
> > > + * otherwise return false.
> > > + */
> > > +
> > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > > +
> > >  /**
> > >   * pci_iov_init - initialize the IOV capability
> > >   * @dev: the PCI device
> > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > >  		return -ENODEV;
> > >  
> > >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > -	if (pos)
> > > -		return sriov_init(dev, pos);
> > > -
> > > +	if (pos) {
> > > +	/*
> > > +	 * If the device is an AMD graphics device and it supports
> > > +	 * SR-IOV it will require a large amount of resources.
> > > +	 * Before calling sriov_init() must ensure that the system
> > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > +	 * able to allocate enough resources.
> > > +	 * If the VF BARs are zero then the system BIOS does not
> > > +	 * support SR-IOV or it could not allocate the resources
> > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > +	 * Therefore do not call sriov_init().
> > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > +	 * will be properly initialized to non-zero values.
> > > +	 */
> > > +		if (is_amd_display_adapter(dev)) {
> > > +			if (pci_vf_bar_valid(dev, pos))
> > > +				return sriov_init(dev, pos);
> > > +		} else {
> > > +			return sriov_init(dev, pos);
> > > +		}
> > > +	}
> > >  	return -ENODEV;
> > >  }
> > >      
> >   
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12 14:43         ` Alex Williamson
@ 2017-05-15  8:19             ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-15  8:19 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

Hi Williamson,

We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.

I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.

I will send out dmesg log lspci info tomorrow. Thanks.


-Collins Cheng

-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Friday, May 12, 2017 10:43 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Fri, 12 May 2017 04:51:43 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.

It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
 
> I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> 	1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> 	2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.

I think these are the issues we should be trying to solve and I'm sure folks on the linux-pci list can help us identify the bug.  Minimally, failure to allocate VF resources should leave the device in no worse condition than before it tried.  Perhaps you could post more details about the issue, boot with pci=earlydump, post dmesg of a boot where the PF resources are incorrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Also, please test with the latest upstream kernel, upstream only patches old kernels through stable backports of commits to the latest kernel.  Adding Yinghai as a resource allocation expert. Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 12:01 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> linux-kernel@vger.kernel.org; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> SR-IOV incapable platform
> 
> On Fri, 12 May 2017 03:42:46 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Williamson,
> > 
> > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> > 
> > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.  
> 
> So the problem is that something bad happens when the kernel is trying 
> to reallocate resources in order to fulfill the requirements of the 
> VFs, leaving the PF resources incorrectly programmed?  Why not just 
> fix that bug rather than creating special handling for this 
> vendor/class of device which disables any attempt to fixup resources 
> for SR-IOV?  IOW, this patch just avoids the problem for your devices 
> rather than fixing the bug.  I'd suggest fixing the bug such that the 
> PF is left in a functional state if the kernel is unable to allocate 
> sufficient resources for the VFs.  Thanks,
> 
> Alex
> 
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 11:21 AM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> > linux-kernel@vger.kernel.org; Deucher, Alexander 
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > SR-IOV incapable platform
> > 
> > On Fri, 12 May 2017 02:50:32 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >   
> > > Hi Helgaas,
> > > 
> > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > > platform. It would cause a problem on PCI resource allocation in 
> > > current Linux kernel.
> > > 
> > > Therefore in order to allow the PF (Physical Function) device of 
> > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> > > required to verify conditions for initializing BAR resources on 
> > > AMD SR-IOV capable GPUs.
> > > 
> > > If the device is an AMD graphics device and it supports SR-IOV it 
> > > will require a large amount of resources.
> > > Before calling sriov_init() must ensure that the system BIOS also 
> > > supports SR-IOV and that system BIOS has been able to allocate 
> > > enough resources.
> > > If the VF BARs are zero then the system BIOS does not support 
> > > SR-IOV or it could not allocate the resources and this platform 
> > > will not support AMD graphics SR-IOV.
> > > Therefore do not call sriov_init().
> > > If the system BIOS does support SR-IOV then the VF BARs will be 
> > > properly initialized to non-zero values.
> > > 
> > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > > 
> > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes 
> > > in quirks.c are for specific devices and one or more device ID are 
> > > defined for the specific devices. However my patch is for all AMD 
> > > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > > So it doesn't seem like a good fit to put the fix in quirks.c.    
> > 
> > 
> > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
> > always need to be able to deal with devices of any type where the 
> > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices 
> > can fit their VFs within a minimum bridge aperture, most cannot.  I 
> > don't understand why the VF resource requirements being 
> > exceptionally large dictates that they receive special handling.  
> > Thanks,
> > 
> > Alex
> >   
> > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > ---
> > >  drivers/pci/iov.c | 63
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > e30f05c..e4f1405 100644
> > > --- a/drivers/pci/iov.c
> > > +++ b/drivers/pci/iov.c
> > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> > >  		msleep(100);
> > >  }
> > >  
> > > +/*
> > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > + * @dev: the PCI device
> > > + * @pos: register offset of SR-IOV capability in PCI config space
> > > + * Returns true any VF BAR has resource allocated, false
> > > + * if all VF BARs are empty.
> > > + */
> > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > +	int i;
> > > +	u32 bar_value;
> > > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > +
> > > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > > +		if (bar_value & bar_size_mask)
> > > +			return true;
> > > +	}
> > > +
> > > +	return false;
> > > +}
> > > +
> > > +/*
> > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > > + * @dev: the PCI device
> > > + *
> > > + * Returns true if device is an AMD/ATI display adapter,
> > > + * otherwise return false.
> > > + */
> > > +
> > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > > +
> > >  /**
> > >   * pci_iov_init - initialize the IOV capability
> > >   * @dev: the PCI device
> > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > >  		return -ENODEV;
> > >  
> > >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > -	if (pos)
> > > -		return sriov_init(dev, pos);
> > > -
> > > +	if (pos) {
> > > +	/*
> > > +	 * If the device is an AMD graphics device and it supports
> > > +	 * SR-IOV it will require a large amount of resources.
> > > +	 * Before calling sriov_init() must ensure that the system
> > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > +	 * able to allocate enough resources.
> > > +	 * If the VF BARs are zero then the system BIOS does not
> > > +	 * support SR-IOV or it could not allocate the resources
> > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > +	 * Therefore do not call sriov_init().
> > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > +	 * will be properly initialized to non-zero values.
> > > +	 */
> > > +		if (is_amd_display_adapter(dev)) {
> > > +			if (pci_vf_bar_valid(dev, pos))
> > > +				return sriov_init(dev, pos);
> > > +		} else {
> > > +			return sriov_init(dev, pos);
> > > +		}
> > > +	}
> > >  	return -ENODEV;
> > >  }
> > >      
> >   
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-15  8:19             ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-15  8:19 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

Hi Williamson,

We cannot assume BIOS supports SR-IOV, actually only newer server motherboa=
rd BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server mo=
therboard BIOS doesn't support SR-IOV. This issue would happen if an user p=
lugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.

I agree that failure to allocate VF resources should leave the device in no=
 worse condition than before it tried. I hope kernel could allocate PF devi=
ce resource before allocating VF device resource, and keep PF device resour=
ce valid and functional if failed to allocate VF device resource.

I will send out dmesg log lspci info tomorrow. Thanks.


-Collins Cheng

-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Friday, May 12, 2017 10:43 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-k=
ernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zyta=
ruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Fri, 12 May 2017 04:51:43 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
>=20
> I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV =
NIC. I don't think it is redundant to check the VF BAR valid before call sr=
iov_init(), it is safe and saving boot time, also there is no a better meth=
od to know if system BIOS has correctly initialized the SR-IOV capability o=
r not.

It also masks an underlying bug and creates a maintenance issue that we won=
't know when it's safe to remove this workaround.  I don't think faster boo=
t is valid rationale, in one case SR-IOV is completely disabled, the other =
we attempt to allocate the resources the BIOS failed to provide.  I expect =
this is also a corner case, the BIOS should typically support SR-IOV, there=
fore this situation should be an exception.
=20
> I did not try to fix the issue from the kernel resource allocation perspe=
ctive, it is because:
> 	1. I am not very familiar with the PCI resource allocation scheme in ker=
nel. For example, in sriov_init(), kernel will re-assign the PCI resource f=
or both VF and PF. I don't understand why kernel allocates resource for VF =
firstly, then PF. If it is PF firstly, then this issue could be avoided.
> 	2. I am not sure if kernel has error handler if PCI resource allocation =
failed. In this case, kernel cannot allocate enough resource to PF. It shou=
ld trigger some error handler to either just keep original BAR values set b=
y system BIOS, or disable this device and log errors.

I think these are the issues we should be trying to solve and I'm sure folk=
s on the linux-pci list can help us identify the bug.  Minimally, failure t=
o allocate VF resources should leave the device in no worse condition than =
before it tried.  Perhaps you could post more details about the issue, boot=
 with pci=3Dearlydump, post dmesg of a boot where the PF resources are inco=
rrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Also, =
please test with the latest upstream kernel, upstream only patches old kern=
els through stable backports of commits to the latest kernel.  Adding Yingh=
ai as a resource allocation expert. Thanks,

Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 12:01 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> linux-kernel@vger.kernel.org; Deucher, Alexander=20
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> SR-IOV incapable platform
>=20
> On Fri, 12 May 2017 03:42:46 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>=20
> > Hi Williamson,
> >=20
> > GPU card needs more BAR aperture resource than other PCI devices. For e=
xample, Intel SR-IOV network card only require 512KB memory resource for al=
l VFs. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource for f=
rame buffer BAR aperture.
> >=20
> > If the system BIOS supports SR-IOV, it will reserve enough resource for=
 all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate =
the enough resource for VF BARs, only PF BAR will be assigned and VF BARs a=
re empty. Then system boots to Linux kernel and kernel doesn't check if the=
 VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF=
 and all VFs. The problem I saw is that kernel will fail to allocate PF BAR=
 resource because some resources are assigned to VF, this is not expected. =
So kernel might need to do some check before re-assign the PF/VF resource, =
so that PF device will be correctly assigned BAR resource and user can use =
PF device. =20
>=20
> So the problem is that something bad happens when the kernel is trying=20
> to reallocate resources in order to fulfill the requirements of the=20
> VFs, leaving the PF resources incorrectly programmed?  Why not just=20
> fix that bug rather than creating special handling for this=20
> vendor/class of device which disables any attempt to fixup resources=20
> for SR-IOV?  IOW, this patch just avoids the problem for your devices=20
> rather than fixing the bug.  I'd suggest fixing the bug such that the=20
> PF is left in a functional state if the kernel is unable to allocate=20
> sufficient resources for the VFs.  Thanks,
>=20
> Alex
>=20
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 11:21 AM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> > linux-kernel@vger.kernel.org; Deucher, Alexander=20
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> > SR-IOV incapable platform
> >=20
> > On Fri, 12 May 2017 02:50:32 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >  =20
> > > Hi Helgaas,
> > >=20
> > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable=20
> > > platform. It would cause a problem on PCI resource allocation in=20
> > > current Linux kernel.
> > >=20
> > > Therefore in order to allow the PF (Physical Function) device of=20
> > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is=20
> > > required to verify conditions for initializing BAR resources on=20
> > > AMD SR-IOV capable GPUs.
> > >=20
> > > If the device is an AMD graphics device and it supports SR-IOV it=20
> > > will require a large amount of resources.
> > > Before calling sriov_init() must ensure that the system BIOS also=20
> > > supports SR-IOV and that system BIOS has been able to allocate=20
> > > enough resources.
> > > If the VF BARs are zero then the system BIOS does not support=20
> > > SR-IOV or it could not allocate the resources and this platform=20
> > > will not support AMD graphics SR-IOV.
> > > Therefore do not call sriov_init().
> > > If the system BIOS does support SR-IOV then the VF BARs will be=20
> > > properly initialized to non-zero values.
> > >=20
> > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > >=20
> > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes=20
> > > in quirks.c are for specific devices and one or more device ID are=20
> > > defined for the specific devices. However my patch is for all AMD=20
> > > SR-IOV capable GPUs, that includes all existing and future AMD server=
 GPUs.
> > > So it doesn't seem like a good fit to put the fix in quirks.c.   =20
> >=20
> >=20
> > Why is an AMD graphics card unique here?  Doesn't sriov_init()=20
> > always need to be able to deal with devices of any type where the=20
> > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices=20
> > can fit their VFs within a minimum bridge aperture, most cannot.  I=20
> > don't understand why the VF resource requirements being=20
> > exceptionally large dictates that they receive special handling. =20
> > Thanks,
> >=20
> > Alex
> >  =20
> > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > ---
> > >  drivers/pci/iov.c | 63
> > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > >=20
> > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > e30f05c..e4f1405 100644
> > > --- a/drivers/pci/iov.c
> > > +++ b/drivers/pci/iov.c
> > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *=
dev)
> > >  		msleep(100);
> > >  }
> > > =20
> > > +/*
> > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > + * @dev: the PCI device
> > > + * @pos: register offset of SR-IOV capability in PCI config space
> > > + * Returns true any VF BAR has resource allocated, false
> > > + * if all VF BARs are empty.
> > > + */
> > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > +	int i;
> > > +	u32 bar_value;
> > > +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
> > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > +
> > > +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value=
);
> > > +		if (bar_value & bar_size_mask)
> > > +			return true;
> > > +	}
> > > +
> > > +	return false;
> > > +}
> > > +
> > > +/*
> > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > > + * @dev: the PCI device
> > > + *
> > > + * Returns true if device is an AMD/ATI display adapter,
> > > + * otherwise return false.
> > > + */
> > > +
> > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
> > > +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
> > > +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
> > > +
> > >  /**
> > >   * pci_iov_init - initialize the IOV capability
> > >   * @dev: the PCI device
> > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > >  		return -ENODEV;
> > > =20
> > >  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > -	if (pos)
> > > -		return sriov_init(dev, pos);
> > > -
> > > +	if (pos) {
> > > +	/*
> > > +	 * If the device is an AMD graphics device and it supports
> > > +	 * SR-IOV it will require a large amount of resources.
> > > +	 * Before calling sriov_init() must ensure that the system
> > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > +	 * able to allocate enough resources.
> > > +	 * If the VF BARs are zero then the system BIOS does not
> > > +	 * support SR-IOV or it could not allocate the resources
> > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > +	 * Therefore do not call sriov_init().
> > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > +	 * will be properly initialized to non-zero values.
> > > +	 */
> > > +		if (is_amd_display_adapter(dev)) {
> > > +			if (pci_vf_bar_valid(dev, pos))
> > > +				return sriov_init(dev, pos);
> > > +		} else {
> > > +			return sriov_init(dev, pos);
> > > +		}
> > > +	}
> > >  	return -ENODEV;
> > >  }
> > >     =20
> >  =20
>=20

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-15  8:19             ` Cheng, Collins
  (?)
@ 2017-05-15 17:53             ` Alex Williamson
  2017-05-16  8:45                 ` Cheng, Collins
  2017-05-19 15:43                 ` Alexander Duyck
  -1 siblings, 2 replies; 43+ messages in thread
From: Alex Williamson @ 2017-05-15 17:53 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

On Mon, 15 May 2017 08:19:28 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.

Servers should be supporting SR-IOV for a long time now.  What really
is there to a BIOS supporting SR-IOV anyway, it's simply reserving
sufficient bus number and MMIO resources such that we can enable the
VFs.  This process isn't exclusively reserved for the BIOS.  Some
platforms may choose to only initialize boot devices, leaving the rest
for the OS to program.  The initial proposal here to disable SR-IOV if
not programmed at OS hand-off disables even the possibility of the OS
reallocating resources for this device.

> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
> 
> I will send out dmesg log lspci info tomorrow. Thanks.

Thanks,
Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com] 
> Sent: Friday, May 12, 2017 10:43 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> 
> On Fri, 12 May 2017 04:51:43 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Williamson,
> > 
> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.  
> 
> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
>  
> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> > 	1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> > 	2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.  
> 
> I think these are the issues we should be trying to solve and I'm sure folks on the linux-pci list can help us identify the bug.  Minimally, failure to allocate VF resources should leave the device in no worse condition than before it tried.  Perhaps you could post more details about the issue, boot with pci=earlydump, post dmesg of a boot where the PF resources are incorrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Also, please test with the latest upstream kernel, upstream only patches old kernels through stable backports of commits to the latest kernel.  Adding Yinghai as a resource allocation expert. Thanks,
> 
> Alex
> 
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 12:01 PM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> > linux-kernel@vger.kernel.org; Deucher, Alexander 
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > SR-IOV incapable platform
> > 
> > On Fri, 12 May 2017 03:42:46 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >   
> > > Hi Williamson,
> > > 
> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> > > 
> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.    
> > 
> > So the problem is that something bad happens when the kernel is trying 
> > to reallocate resources in order to fulfill the requirements of the 
> > VFs, leaving the PF resources incorrectly programmed?  Why not just 
> > fix that bug rather than creating special handling for this 
> > vendor/class of device which disables any attempt to fixup resources 
> > for SR-IOV?  IOW, this patch just avoids the problem for your devices 
> > rather than fixing the bug.  I'd suggest fixing the bug such that the 
> > PF is left in a functional state if the kernel is unable to allocate 
> > sufficient resources for the VFs.  Thanks,
> > 
> > Alex
> >   
> > > -----Original Message-----
> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > > Sent: Friday, May 12, 2017 11:21 AM
> > > To: Cheng, Collins <Collins.Cheng@amd.com>
> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> > > linux-kernel@vger.kernel.org; Deucher, Alexander 
> > > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > > SR-IOV incapable platform
> > > 
> > > On Fri, 12 May 2017 02:50:32 +0000
> > > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> > >     
> > > > Hi Helgaas,
> > > > 
> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > > > platform. It would cause a problem on PCI resource allocation in 
> > > > current Linux kernel.
> > > > 
> > > > Therefore in order to allow the PF (Physical Function) device of 
> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is 
> > > > required to verify conditions for initializing BAR resources on 
> > > > AMD SR-IOV capable GPUs.
> > > > 
> > > > If the device is an AMD graphics device and it supports SR-IOV it 
> > > > will require a large amount of resources.
> > > > Before calling sriov_init() must ensure that the system BIOS also 
> > > > supports SR-IOV and that system BIOS has been able to allocate 
> > > > enough resources.
> > > > If the VF BARs are zero then the system BIOS does not support 
> > > > SR-IOV or it could not allocate the resources and this platform 
> > > > will not support AMD graphics SR-IOV.
> > > > Therefore do not call sriov_init().
> > > > If the system BIOS does support SR-IOV then the VF BARs will be 
> > > > properly initialized to non-zero values.
> > > > 
> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > > > 
> > > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes 
> > > > in quirks.c are for specific devices and one or more device ID are 
> > > > defined for the specific devices. However my patch is for all AMD 
> > > > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > > > So it doesn't seem like a good fit to put the fix in quirks.c.      
> > > 
> > > 
> > > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
> > > always need to be able to deal with devices of any type where the 
> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices 
> > > can fit their VFs within a minimum bridge aperture, most cannot.  I 
> > > don't understand why the VF resource requirements being 
> > > exceptionally large dictates that they receive special handling.  
> > > Thanks,
> > > 
> > > Alex
> > >     
> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > > ---
> > > >  drivers/pci/iov.c | 63
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > > > 
> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > > e30f05c..e4f1405 100644
> > > > --- a/drivers/pci/iov.c
> > > > +++ b/drivers/pci/iov.c
> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> > > >  		msleep(100);
> > > >  }
> > > >  
> > > > +/*
> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > > + * @dev: the PCI device
> > > > + * @pos: register offset of SR-IOV capability in PCI config space
> > > > + * Returns true any VF BAR has resource allocated, false
> > > > + * if all VF BARs are empty.
> > > > + */
> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > > +	int i;
> > > > +	u32 bar_value;
> > > > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > > +
> > > > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > > > +		if (bar_value & bar_size_mask)
> > > > +			return true;
> > > > +	}
> > > > +
> > > > +	return false;
> > > > +}
> > > > +
> > > > +/*
> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> > > > + * @dev: the PCI device
> > > > + *
> > > > + * Returns true if device is an AMD/ATI display adapter,
> > > > + * otherwise return false.
> > > > + */
> > > > +
> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > > > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > > > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > > > +
> > > >  /**
> > > >   * pci_iov_init - initialize the IOV capability
> > > >   * @dev: the PCI device
> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > > >  		return -ENODEV;
> > > >  
> > > >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > > -	if (pos)
> > > > -		return sriov_init(dev, pos);
> > > > -
> > > > +	if (pos) {
> > > > +	/*
> > > > +	 * If the device is an AMD graphics device and it supports
> > > > +	 * SR-IOV it will require a large amount of resources.
> > > > +	 * Before calling sriov_init() must ensure that the system
> > > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > > +	 * able to allocate enough resources.
> > > > +	 * If the VF BARs are zero then the system BIOS does not
> > > > +	 * support SR-IOV or it could not allocate the resources
> > > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > > +	 * Therefore do not call sriov_init().
> > > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > > +	 * will be properly initialized to non-zero values.
> > > > +	 */
> > > > +		if (is_amd_display_adapter(dev)) {
> > > > +			if (pci_vf_bar_valid(dev, pos))
> > > > +				return sriov_init(dev, pos);
> > > > +		} else {
> > > > +			return sriov_init(dev, pos);
> > > > +		}
> > > > +	}
> > > >  	return -ENODEV;
> > > >  }
> > > >        
> > >     
> >   
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-15 17:53             ` Alex Williamson
@ 2017-05-16  8:45                 ` Cheng, Collins
  2017-05-19 15:43                 ` Alexander Duyck
  1 sibling, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-16  8:45 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

Hi Williamson,

Sorry I am busy on other task, I will look if I can get the dmesg log tomorrow.

My submitted patch is try to disable the possibility of the OS reallocating resources for VF device in sriov_init(), if VF BAR is empty at BIOS/OS hand-off.

-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Tuesday, May 16, 2017 1:54 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Mon, 15 May 2017 08:19:28 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
> 
> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.

Servers should be supporting SR-IOV for a long time now.  What really is there to a BIOS supporting SR-IOV anyway, it's simply reserving sufficient bus number and MMIO resources such that we can enable the VFs.  This process isn't exclusively reserved for the BIOS.  Some platforms may choose to only initialize boot devices, leaving the rest for the OS to program.  The initial proposal here to disable SR-IOV if not programmed at OS hand-off disables even the possibility of the OS reallocating resources for this device.

> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
> 
> I will send out dmesg log lspci info tomorrow. Thanks.

Thanks,
Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 10:43 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> linux-kernel@vger.kernel.org; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; 
> Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> SR-IOV incapable platform
> 
> On Fri, 12 May 2017 04:51:43 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Williamson,
> > 
> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.  
> 
> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
>  
> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> > 	1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> > 	2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.  
> 
> I think these are the issues we should be trying to solve and I'm sure 
> folks on the linux-pci list can help us identify the bug.  Minimally, 
> failure to allocate VF resources should leave the device in no worse 
> condition than before it tried.  Perhaps you could post more details 
> about the issue, boot with pci=earlydump, post dmesg of a boot where 
> the PF resources are incorrectly re-allocated, and include lspci -vvv 
> for the SR-IOV device.  Also, please test with the latest upstream 
> kernel, upstream only patches old kernels through stable backports of 
> commits to the latest kernel.  Adding Yinghai as a resource allocation 
> expert. Thanks,
> 
> Alex
> 
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 12:01 PM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> > linux-kernel@vger.kernel.org; Deucher, Alexander 
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > SR-IOV incapable platform
> > 
> > On Fri, 12 May 2017 03:42:46 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >   
> > > Hi Williamson,
> > > 
> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> > > 
> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.    
> > 
> > So the problem is that something bad happens when the kernel is 
> > trying to reallocate resources in order to fulfill the requirements 
> > of the VFs, leaving the PF resources incorrectly programmed?  Why 
> > not just fix that bug rather than creating special handling for this 
> > vendor/class of device which disables any attempt to fixup resources 
> > for SR-IOV?  IOW, this patch just avoids the problem for your 
> > devices rather than fixing the bug.  I'd suggest fixing the bug such 
> > that the PF is left in a functional state if the kernel is unable to 
> > allocate sufficient resources for the VFs.  Thanks,
> > 
> > Alex
> >   
> > > -----Original Message-----
> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > > Sent: Friday, May 12, 2017 11:21 AM
> > > To: Cheng, Collins <Collins.Cheng@amd.com>
> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, 
> > > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
> > > <Kelly.Zytaruk@amd.com>
> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> > > SR-IOV incapable platform
> > > 
> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins" 
> > > <Collins.Cheng@amd.com> wrote:
> > >     
> > > > Hi Helgaas,
> > > > 
> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
> > > > platform. It would cause a problem on PCI resource allocation in 
> > > > current Linux kernel.
> > > > 
> > > > Therefore in order to allow the PF (Physical Function) device of 
> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it 
> > > > is required to verify conditions for initializing BAR resources 
> > > > on AMD SR-IOV capable GPUs.
> > > > 
> > > > If the device is an AMD graphics device and it supports SR-IOV 
> > > > it will require a large amount of resources.
> > > > Before calling sriov_init() must ensure that the system BIOS 
> > > > also supports SR-IOV and that system BIOS has been able to 
> > > > allocate enough resources.
> > > > If the VF BARs are zero then the system BIOS does not support 
> > > > SR-IOV or it could not allocate the resources and this platform 
> > > > will not support AMD graphics SR-IOV.
> > > > Therefore do not call sriov_init().
> > > > If the system BIOS does support SR-IOV then the VF BARs will be 
> > > > properly initialized to non-zero values.
> > > > 
> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > > > 
> > > > I checked the drivers/pci/quirks.c, it looks the 
> > > > workarounds/fixes in quirks.c are for specific devices and one 
> > > > or more device ID are defined for the specific devices. However 
> > > > my patch is for all AMD SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> > > > So it doesn't seem like a good fit to put the fix in quirks.c.      
> > > 
> > > 
> > > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
> > > always need to be able to deal with devices of any type where the 
> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV 
> > > devices can fit their VFs within a minimum bridge aperture, most 
> > > cannot.  I don't understand why the VF resource requirements being 
> > > exceptionally large dictates that they receive special handling.
> > > Thanks,
> > > 
> > > Alex
> > >     
> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > > ---
> > > >  drivers/pci/iov.c | 63
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > > > 
> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > > e30f05c..e4f1405 100644
> > > > --- a/drivers/pci/iov.c
> > > > +++ b/drivers/pci/iov.c
> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> > > >  		msleep(100);
> > > >  }
> > > >  
> > > > +/*
> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > > + * @dev: the PCI device
> > > > + * @pos: register offset of SR-IOV capability in PCI config 
> > > > +space
> > > > + * Returns true any VF BAR has resource allocated, false
> > > > + * if all VF BARs are empty.
> > > > + */
> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > > +	int i;
> > > > +	u32 bar_value;
> > > > +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> > > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > > +
> > > > +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> > > > +		if (bar_value & bar_size_mask)
> > > > +			return true;
> > > > +	}
> > > > +
> > > > +	return false;
> > > > +}
> > > > +
> > > > +/*
> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU 
> > > > +device
> > > > + * @dev: the PCI device
> > > > + *
> > > > + * Returns true if device is an AMD/ATI display adapter,
> > > > + * otherwise return false.
> > > > + */
> > > > +
> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > > +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> > > > +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> > > > +		dev->vendor == PCI_VENDOR_ID_AMD)); }
> > > > +
> > > >  /**
> > > >   * pci_iov_init - initialize the IOV capability
> > > >   * @dev: the PCI device
> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > > >  		return -ENODEV;
> > > >  
> > > >  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > > -	if (pos)
> > > > -		return sriov_init(dev, pos);
> > > > -
> > > > +	if (pos) {
> > > > +	/*
> > > > +	 * If the device is an AMD graphics device and it supports
> > > > +	 * SR-IOV it will require a large amount of resources.
> > > > +	 * Before calling sriov_init() must ensure that the system
> > > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > > +	 * able to allocate enough resources.
> > > > +	 * If the VF BARs are zero then the system BIOS does not
> > > > +	 * support SR-IOV or it could not allocate the resources
> > > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > > +	 * Therefore do not call sriov_init().
> > > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > > +	 * will be properly initialized to non-zero values.
> > > > +	 */
> > > > +		if (is_amd_display_adapter(dev)) {
> > > > +			if (pci_vf_bar_valid(dev, pos))
> > > > +				return sriov_init(dev, pos);
> > > > +		} else {
> > > > +			return sriov_init(dev, pos);
> > > > +		}
> > > > +	}
> > > >  	return -ENODEV;
> > > >  }
> > > >        
> > >     
> >   
> 

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-16  8:45                 ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-16  8:45 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

Hi Williamson,

Sorry I am busy on other task, I will look if I can get the dmesg log tomor=
row.

My submitted patch is try to disable the possibility of the OS reallocating=
 resources for VF device in sriov_init(), if VF BAR is empty at BIOS/OS han=
d-off.

-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Tuesday, May 16, 2017 1:54 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-k=
ernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zyta=
ruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Mon, 15 May 2017 08:19:28 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Williamson,
>=20
> We cannot assume BIOS supports SR-IOV, actually only newer server motherb=
oard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server =
motherboard BIOS doesn't support SR-IOV. This issue would happen if an user=
 plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.

Servers should be supporting SR-IOV for a long time now.  What really is th=
ere to a BIOS supporting SR-IOV anyway, it's simply reserving sufficient bu=
s number and MMIO resources such that we can enable the VFs.  This process =
isn't exclusively reserved for the BIOS.  Some platforms may choose to only=
 initialize boot devices, leaving the rest for the OS to program.  The init=
ial proposal here to disable SR-IOV if not programmed at OS hand-off disabl=
es even the possibility of the OS reallocating resources for this device.

> I agree that failure to allocate VF resources should leave the device in =
no worse condition than before it tried. I hope kernel could allocate PF de=
vice resource before allocating VF device resource, and keep PF device reso=
urce valid and functional if failed to allocate VF device resource.
>=20
> I will send out dmesg log lspci info tomorrow. Thanks.

Thanks,
Alex

> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Friday, May 12, 2017 10:43 PM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> linux-kernel@vger.kernel.org; Deucher, Alexander=20
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;=20
> Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> SR-IOV incapable platform
>=20
> On Fri, 12 May 2017 04:51:43 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>=20
> > Hi Williamson,
> >=20
> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IO=
V NIC. I don't think it is redundant to check the VF BAR valid before call =
sriov_init(), it is safe and saving boot time, also there is no a better me=
thod to know if system BIOS has correctly initialized the SR-IOV capability=
 or not. =20
>=20
> It also masks an underlying bug and creates a maintenance issue that we w=
on't know when it's safe to remove this workaround.  I don't think faster b=
oot is valid rationale, in one case SR-IOV is completely disabled, the othe=
r we attempt to allocate the resources the BIOS failed to provide.  I expec=
t this is also a corner case, the BIOS should typically support SR-IOV, the=
refore this situation should be an exception.
> =20
> > I did not try to fix the issue from the kernel resource allocation pers=
pective, it is because:
> > 	1. I am not very familiar with the PCI resource allocation scheme in k=
ernel. For example, in sriov_init(), kernel will re-assign the PCI resource=
 for both VF and PF. I don't understand why kernel allocates resource for V=
F firstly, then PF. If it is PF firstly, then this issue could be avoided.
> > 	2. I am not sure if kernel has error handler if PCI resource allocatio=
n failed. In this case, kernel cannot allocate enough resource to PF. It sh=
ould trigger some error handler to either just keep original BAR values set=
 by system BIOS, or disable this device and log errors. =20
>=20
> I think these are the issues we should be trying to solve and I'm sure=20
> folks on the linux-pci list can help us identify the bug.  Minimally,=20
> failure to allocate VF resources should leave the device in no worse=20
> condition than before it tried.  Perhaps you could post more details=20
> about the issue, boot with pci=3Dearlydump, post dmesg of a boot where=20
> the PF resources are incorrectly re-allocated, and include lspci -vvv=20
> for the SR-IOV device.  Also, please test with the latest upstream=20
> kernel, upstream only patches old kernels through stable backports of=20
> commits to the latest kernel.  Adding Yinghai as a resource allocation=20
> expert. Thanks,
>=20
> Alex
>=20
> > -----Original Message-----
> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > Sent: Friday, May 12, 2017 12:01 PM
> > To: Cheng, Collins <Collins.Cheng@amd.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> > linux-kernel@vger.kernel.org; Deucher, Alexander=20
> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> > SR-IOV incapable platform
> >=20
> > On Fri, 12 May 2017 03:42:46 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >  =20
> > > Hi Williamson,
> > >=20
> > > GPU card needs more BAR aperture resource than other PCI devices. For=
 example, Intel SR-IOV network card only require 512KB memory resource for =
all VFs. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource for=
 frame buffer BAR aperture.
> > >=20
> > > If the system BIOS supports SR-IOV, it will reserve enough resource f=
or all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocat=
e the enough resource for VF BARs, only PF BAR will be assigned and VF BARs=
 are empty. Then system boots to Linux kernel and kernel doesn't check if t=
he VF BARs are empty or valid. Kernel will re-assign the BAR resources for =
PF and all VFs. The problem I saw is that kernel will fail to allocate PF B=
AR resource because some resources are assigned to VF, this is not expected=
. So kernel might need to do some check before re-assign the PF/VF resource=
, so that PF device will be correctly assigned BAR resource and user can us=
e PF device.   =20
> >=20
> > So the problem is that something bad happens when the kernel is=20
> > trying to reallocate resources in order to fulfill the requirements=20
> > of the VFs, leaving the PF resources incorrectly programmed?  Why=20
> > not just fix that bug rather than creating special handling for this=20
> > vendor/class of device which disables any attempt to fixup resources=20
> > for SR-IOV?  IOW, this patch just avoids the problem for your=20
> > devices rather than fixing the bug.  I'd suggest fixing the bug such=20
> > that the PF is left in a functional state if the kernel is unable to=20
> > allocate sufficient resources for the VFs.  Thanks,
> >=20
> > Alex
> >  =20
> > > -----Original Message-----
> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> > > Sent: Friday, May 12, 2017 11:21 AM
> > > To: Cheng, Collins <Collins.Cheng@amd.com>
> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;=20
> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,=20
> > > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly=20
> > > <Kelly.Zytaruk@amd.com>
> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> > > SR-IOV incapable platform
> > >=20
> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"=20
> > > <Collins.Cheng@amd.com> wrote:
> > >    =20
> > > > Hi Helgaas,
> > > >=20
> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable=20
> > > > platform. It would cause a problem on PCI resource allocation in=20
> > > > current Linux kernel.
> > > >=20
> > > > Therefore in order to allow the PF (Physical Function) device of=20
> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it=20
> > > > is required to verify conditions for initializing BAR resources=20
> > > > on AMD SR-IOV capable GPUs.
> > > >=20
> > > > If the device is an AMD graphics device and it supports SR-IOV=20
> > > > it will require a large amount of resources.
> > > > Before calling sriov_init() must ensure that the system BIOS=20
> > > > also supports SR-IOV and that system BIOS has been able to=20
> > > > allocate enough resources.
> > > > If the VF BARs are zero then the system BIOS does not support=20
> > > > SR-IOV or it could not allocate the resources and this platform=20
> > > > will not support AMD graphics SR-IOV.
> > > > Therefore do not call sriov_init().
> > > > If the system BIOS does support SR-IOV then the VF BARs will be=20
> > > > properly initialized to non-zero values.
> > > >=20
> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> > > >=20
> > > > I checked the drivers/pci/quirks.c, it looks the=20
> > > > workarounds/fixes in quirks.c are for specific devices and one=20
> > > > or more device ID are defined for the specific devices. However=20
> > > > my patch is for all AMD SR-IOV capable GPUs, that includes all exis=
ting and future AMD server GPUs.
> > > > So it doesn't seem like a good fit to put the fix in quirks.c.     =
=20
> > >=20
> > >=20
> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()=20
> > > always need to be able to deal with devices of any type where the=20
> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV=20
> > > devices can fit their VFs within a minimum bridge aperture, most=20
> > > cannot.  I don't understand why the VF resource requirements being=20
> > > exceptionally large dictates that they receive special handling.
> > > Thanks,
> > >=20
> > > Alex
> > >    =20
> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> > > > ---
> > > >  drivers/pci/iov.c | 63
> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
> > > >=20
> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> > > > e30f05c..e4f1405 100644
> > > > --- a/drivers/pci/iov.c
> > > > +++ b/drivers/pci/iov.c
> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev=
 *dev)
> > > >  		msleep(100);
> > > >  }
> > > > =20
> > > > +/*
> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> > > > + * @dev: the PCI device
> > > > + * @pos: register offset of SR-IOV capability in PCI config=20
> > > > +space
> > > > + * Returns true any VF BAR has resource allocated, false
> > > > + * if all VF BARs are empty.
> > > > + */
> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> > > > +	int i;
> > > > +	u32 bar_value;
> > > > +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
> > > > +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> > > > +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> > > > +
> > > > +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
> > > > +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_val=
ue);
> > > > +		if (bar_value & bar_size_mask)
> > > > +			return true;
> > > > +	}
> > > > +
> > > > +	return false;
> > > > +}
> > > > +
> > > > +/*
> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU=20
> > > > +device
> > > > + * @dev: the PCI device
> > > > + *
> > > > + * Returns true if device is an AMD/ATI display adapter,
> > > > + * otherwise return false.
> > > > + */
> > > > +
> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> > > > +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
> > > > +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
> > > > +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
> > > > +
> > > >  /**
> > > >   * pci_iov_init - initialize the IOV capability
> > > >   * @dev: the PCI device
> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> > > >  		return -ENODEV;
> > > > =20
> > > >  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> > > > -	if (pos)
> > > > -		return sriov_init(dev, pos);
> > > > -
> > > > +	if (pos) {
> > > > +	/*
> > > > +	 * If the device is an AMD graphics device and it supports
> > > > +	 * SR-IOV it will require a large amount of resources.
> > > > +	 * Before calling sriov_init() must ensure that the system
> > > > +	 * BIOS also supports SR-IOV and that system BIOS has been
> > > > +	 * able to allocate enough resources.
> > > > +	 * If the VF BARs are zero then the system BIOS does not
> > > > +	 * support SR-IOV or it could not allocate the resources
> > > > +	 * and this platform will not support AMD graphics SR-IOV.
> > > > +	 * Therefore do not call sriov_init().
> > > > +	 * If the system BIOS does support SR-IOV then the VF BARs
> > > > +	 * will be properly initialized to non-zero values.
> > > > +	 */
> > > > +		if (is_amd_display_adapter(dev)) {
> > > > +			if (pci_vf_bar_valid(dev, pos))
> > > > +				return sriov_init(dev, pos);
> > > > +		} else {
> > > > +			return sriov_init(dev, pos);
> > > > +		}
> > > > +	}
> > > >  	return -ENODEV;
> > > >  }
> > > >       =20
> > >    =20
> >  =20
>=20

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-15 17:53             ` Alex Williamson
@ 2017-05-19 15:43                 ` Alexander Duyck
  2017-05-19 15:43                 ` Alexander Duyck
  1 sibling, 0 replies; 43+ messages in thread
From: Alexander Duyck @ 2017-05-19 15:43 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Cheng, Collins, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
<alex.williamson@redhat.com> wrote:
> On Mon, 15 May 2017 08:19:28 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>
>> Hi Williamson,
>>
>> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>
> Servers should be supporting SR-IOV for a long time now.  What really
> is there to a BIOS supporting SR-IOV anyway, it's simply reserving
> sufficient bus number and MMIO resources such that we can enable the
> VFs.  This process isn't exclusively reserved for the BIOS.  Some
> platforms may choose to only initialize boot devices, leaving the rest
> for the OS to program.  The initial proposal here to disable SR-IOV if
> not programmed at OS hand-off disables even the possibility of the OS
> reallocating resources for this device.

There are differences between supporting SR-IOV and supporting SR-IOV
on devices with massive resources. I know I have seen NICs that will
keep a system from completing POST if SR-IOV is enabled, and MMIO
beyond 4G is not. My guess would be that the issues being seen are
probably that they disable SR-IOV in the BIOS in such a setup and end
up running into issues when they try to boot into the Linux kernel as
it goes through and tries to allocate resources for SR-IOV even though
it was disabled in the BIOS.

It might make sense to add a kernel parameter something like a
"pci=nosriov" that would allow for disabling SR-IOV and related
resource allocation if that is what we are talking about. That way you
could plug in these types of devices into a system with a legacy bios
or that doesn't wan to allocate addresses above 32b for MMIO, and this
parameter would be all that is needed to disable SR-IOV so you could
plug in a NIC that has SR-IOV associated with it.

>> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
>>
>> I will send out dmesg log lspci info tomorrow. Thanks.
>
> Thanks,
> Alex
>
>> -----Original Message-----
>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> Sent: Friday, May 12, 2017 10:43 PM
>> To: Cheng, Collins <Collins.Cheng@amd.com>
>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
>>
>> On Fri, 12 May 2017 04:51:43 +0000
>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>
>> > Hi Williamson,
>> >
>> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.
>>
>> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
>>
>> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
>> >     1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>> >     2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.
>>
>> I think these are the issues we should be trying to solve and I'm sure folks on the linux-pci list can help us identify the bug.  Minimally, failure to allocate VF resources should leave the device in no worse condition than before it tried.  Perhaps you could post more details about the issue, boot with pci=earlydump, post dmesg of a boot where the PF resources are incorrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Also, please test with the latest upstream kernel, upstream only patches old kernels through stable backports of commits to the latest kernel.  Adding Yinghai as a resource allocation expert. Thanks,
>>
>> Alex
>>
>> > -----Original Message-----
>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > Sent: Friday, May 12, 2017 12:01 PM
>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> > linux-kernel@vger.kernel.org; Deucher, Alexander
>> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> > SR-IOV incapable platform
>> >
>> > On Fri, 12 May 2017 03:42:46 +0000
>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >
>> > > Hi Williamson,
>> > >
>> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
>> > >
>> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.
>> >
>> > So the problem is that something bad happens when the kernel is trying
>> > to reallocate resources in order to fulfill the requirements of the
>> > VFs, leaving the PF resources incorrectly programmed?  Why not just
>> > fix that bug rather than creating special handling for this
>> > vendor/class of device which disables any attempt to fixup resources
>> > for SR-IOV?  IOW, this patch just avoids the problem for your devices
>> > rather than fixing the bug.  I'd suggest fixing the bug such that the
>> > PF is left in a functional state if the kernel is unable to allocate
>> > sufficient resources for the VFs.  Thanks,
>> >
>> > Alex
>> >
>> > > -----Original Message-----
>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > > Sent: Friday, May 12, 2017 11:21 AM
>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> > > linux-kernel@vger.kernel.org; Deucher, Alexander
>> > > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> > > SR-IOV incapable platform
>> > >
>> > > On Fri, 12 May 2017 02:50:32 +0000
>> > > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> > >
>> > > > Hi Helgaas,
>> > > >
>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>> > > > platform. It would cause a problem on PCI resource allocation in
>> > > > current Linux kernel.
>> > > >
>> > > > Therefore in order to allow the PF (Physical Function) device of
>> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is
>> > > > required to verify conditions for initializing BAR resources on
>> > > > AMD SR-IOV capable GPUs.
>> > > >
>> > > > If the device is an AMD graphics device and it supports SR-IOV it
>> > > > will require a large amount of resources.
>> > > > Before calling sriov_init() must ensure that the system BIOS also
>> > > > supports SR-IOV and that system BIOS has been able to allocate
>> > > > enough resources.
>> > > > If the VF BARs are zero then the system BIOS does not support
>> > > > SR-IOV or it could not allocate the resources and this platform
>> > > > will not support AMD graphics SR-IOV.
>> > > > Therefore do not call sriov_init().
>> > > > If the system BIOS does support SR-IOV then the VF BARs will be
>> > > > properly initialized to non-zero values.
>> > > >
>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>> > > >
>> > > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes
>> > > > in quirks.c are for specific devices and one or more device ID are
>> > > > defined for the specific devices. However my patch is for all AMD
>> > > > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>> > >
>> > >
>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>> > > always need to be able to deal with devices of any type where the
>> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices
>> > > can fit their VFs within a minimum bridge aperture, most cannot.  I
>> > > don't understand why the VF resource requirements being
>> > > exceptionally large dictates that they receive special handling.
>> > > Thanks,
>> > >
>> > > Alex
>> > >
>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> > > > ---
>> > > >  drivers/pci/iov.c | 63
>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>> > > >
>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> > > > e30f05c..e4f1405 100644
>> > > > --- a/drivers/pci/iov.c
>> > > > +++ b/drivers/pci/iov.c
>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>> > > >                 msleep(100);
>> > > >  }
>> > > >
>> > > > +/*
>> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
>> > > > + * @dev: the PCI device
>> > > > + * @pos: register offset of SR-IOV capability in PCI config space
>> > > > + * Returns true any VF BAR has resource allocated, false
>> > > > + * if all VF BARs are empty.
>> > > > + */
>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> > > > +       int i;
>> > > > +       u32 bar_value;
>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>> > > > +
>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
>> > > > +               if (bar_value & bar_size_mask)
>> > > > +                       return true;
>> > > > +       }
>> > > > +
>> > > > +       return false;
>> > > > +}
>> > > > +
>> > > > +/*
>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
>> > > > + * @dev: the PCI device
>> > > > + *
>> > > > + * Returns true if device is an AMD/ATI display adapter,
>> > > > + * otherwise return false.
>> > > > + */
>> > > > +
>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>> > > > +
>> > > >  /**
>> > > >   * pci_iov_init - initialize the IOV capability
>> > > >   * @dev: the PCI device
>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>> > > >                 return -ENODEV;
>> > > >
>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>> > > > -       if (pos)
>> > > > -               return sriov_init(dev, pos);
>> > > > -
>> > > > +       if (pos) {
>> > > > +       /*
>> > > > +        * If the device is an AMD graphics device and it supports
>> > > > +        * SR-IOV it will require a large amount of resources.
>> > > > +        * Before calling sriov_init() must ensure that the system
>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>> > > > +        * able to allocate enough resources.
>> > > > +        * If the VF BARs are zero then the system BIOS does not
>> > > > +        * support SR-IOV or it could not allocate the resources
>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>> > > > +        * Therefore do not call sriov_init().
>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>> > > > +        * will be properly initialized to non-zero values.
>> > > > +        */
>> > > > +               if (is_amd_display_adapter(dev)) {
>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>> > > > +                               return sriov_init(dev, pos);
>> > > > +               } else {
>> > > > +                       return sriov_init(dev, pos);
>> > > > +               }
>> > > > +       }
>> > > >         return -ENODEV;
>> > > >  }
>> > > >
>> > >
>> >
>>
>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-19 15:43                 ` Alexander Duyck
  0 siblings, 0 replies; 43+ messages in thread
From: Alexander Duyck @ 2017-05-19 15:43 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Cheng, Collins, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
<alex.williamson@redhat.com> wrote:
> On Mon, 15 May 2017 08:19:28 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>
>> Hi Williamson,
>>
>> We cannot assume BIOS supports SR-IOV, actually only newer server mother=
board BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server=
 motherboard BIOS doesn't support SR-IOV. This issue would happen if an use=
r plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>
> Servers should be supporting SR-IOV for a long time now.  What really
> is there to a BIOS supporting SR-IOV anyway, it's simply reserving
> sufficient bus number and MMIO resources such that we can enable the
> VFs.  This process isn't exclusively reserved for the BIOS.  Some
> platforms may choose to only initialize boot devices, leaving the rest
> for the OS to program.  The initial proposal here to disable SR-IOV if
> not programmed at OS hand-off disables even the possibility of the OS
> reallocating resources for this device.

There are differences between supporting SR-IOV and supporting SR-IOV
on devices with massive resources. I know I have seen NICs that will
keep a system from completing POST if SR-IOV is enabled, and MMIO
beyond 4G is not. My guess would be that the issues being seen are
probably that they disable SR-IOV in the BIOS in such a setup and end
up running into issues when they try to boot into the Linux kernel as
it goes through and tries to allocate resources for SR-IOV even though
it was disabled in the BIOS.

It might make sense to add a kernel parameter something like a
"pci=3Dnosriov" that would allow for disabling SR-IOV and related
resource allocation if that is what we are talking about. That way you
could plug in these types of devices into a system with a legacy bios
or that doesn't wan to allocate addresses above 32b for MMIO, and this
parameter would be all that is needed to disable SR-IOV so you could
plug in a NIC that has SR-IOV associated with it.

>> I agree that failure to allocate VF resources should leave the device in=
 no worse condition than before it tried. I hope kernel could allocate PF d=
evice resource before allocating VF device resource, and keep PF device res=
ource valid and functional if failed to allocate VF device resource.
>>
>> I will send out dmesg log lspci info tomorrow. Thanks.
>
> Thanks,
> Alex
>
>> -----Original Message-----
>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> Sent: Friday, May 12, 2017 10:43 PM
>> To: Cheng, Collins <Collins.Cheng@amd.com>
>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linu=
x-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Z=
ytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV =
incapable platform
>>
>> On Fri, 12 May 2017 04:51:43 +0000
>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>
>> > Hi Williamson,
>> >
>> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-I=
OV NIC. I don't think it is redundant to check the VF BAR valid before call=
 sriov_init(), it is safe and saving boot time, also there is no a better m=
ethod to know if system BIOS has correctly initialized the SR-IOV capabilit=
y or not.
>>
>> It also masks an underlying bug and creates a maintenance issue that we =
won't know when it's safe to remove this workaround.  I don't think faster =
boot is valid rationale, in one case SR-IOV is completely disabled, the oth=
er we attempt to allocate the resources the BIOS failed to provide.  I expe=
ct this is also a corner case, the BIOS should typically support SR-IOV, th=
erefore this situation should be an exception.
>>
>> > I did not try to fix the issue from the kernel resource allocation per=
spective, it is because:
>> >     1. I am not very familiar with the PCI resource allocation scheme =
in kernel. For example, in sriov_init(), kernel will re-assign the PCI reso=
urce for both VF and PF. I don't understand why kernel allocates resource f=
or VF firstly, then PF. If it is PF firstly, then this issue could be avoid=
ed.
>> >     2. I am not sure if kernel has error handler if PCI resource alloc=
ation failed. In this case, kernel cannot allocate enough resource to PF. I=
t should trigger some error handler to either just keep original BAR values=
 set by system BIOS, or disable this device and log errors.
>>
>> I think these are the issues we should be trying to solve and I'm sure f=
olks on the linux-pci list can help us identify the bug.  Minimally, failur=
e to allocate VF resources should leave the device in no worse condition th=
an before it tried.  Perhaps you could post more details about the issue, b=
oot with pci=3Dearlydump, post dmesg of a boot where the PF resources are i=
ncorrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Als=
o, please test with the latest upstream kernel, upstream only patches old k=
ernels through stable backports of commits to the latest kernel.  Adding Yi=
nghai as a resource allocation expert. Thanks,
>>
>> Alex
>>
>> > -----Original Message-----
>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > Sent: Friday, May 12, 2017 12:01 PM
>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> > linux-kernel@vger.kernel.org; Deucher, Alexander
>> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> > SR-IOV incapable platform
>> >
>> > On Fri, 12 May 2017 03:42:46 +0000
>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >
>> > > Hi Williamson,
>> > >
>> > > GPU card needs more BAR aperture resource than other PCI devices. Fo=
r example, Intel SR-IOV network card only require 512KB memory resource for=
 all VFs. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource fo=
r frame buffer BAR aperture.
>> > >
>> > > If the system BIOS supports SR-IOV, it will reserve enough resource =
for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot alloca=
te the enough resource for VF BARs, only PF BAR will be assigned and VF BAR=
s are empty. Then system boots to Linux kernel and kernel doesn't check if =
the VF BARs are empty or valid. Kernel will re-assign the BAR resources for=
 PF and all VFs. The problem I saw is that kernel will fail to allocate PF =
BAR resource because some resources are assigned to VF, this is not expecte=
d. So kernel might need to do some check before re-assign the PF/VF resourc=
e, so that PF device will be correctly assigned BAR resource and user can u=
se PF device.
>> >
>> > So the problem is that something bad happens when the kernel is trying
>> > to reallocate resources in order to fulfill the requirements of the
>> > VFs, leaving the PF resources incorrectly programmed?  Why not just
>> > fix that bug rather than creating special handling for this
>> > vendor/class of device which disables any attempt to fixup resources
>> > for SR-IOV?  IOW, this patch just avoids the problem for your devices
>> > rather than fixing the bug.  I'd suggest fixing the bug such that the
>> > PF is left in a functional state if the kernel is unable to allocate
>> > sufficient resources for the VFs.  Thanks,
>> >
>> > Alex
>> >
>> > > -----Original Message-----
>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > > Sent: Friday, May 12, 2017 11:21 AM
>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> > > linux-kernel@vger.kernel.org; Deucher, Alexander
>> > > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> > > SR-IOV incapable platform
>> > >
>> > > On Fri, 12 May 2017 02:50:32 +0000
>> > > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> > >
>> > > > Hi Helgaas,
>> > > >
>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>> > > > platform. It would cause a problem on PCI resource allocation in
>> > > > current Linux kernel.
>> > > >
>> > > > Therefore in order to allow the PF (Physical Function) device of
>> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is
>> > > > required to verify conditions for initializing BAR resources on
>> > > > AMD SR-IOV capable GPUs.
>> > > >
>> > > > If the device is an AMD graphics device and it supports SR-IOV it
>> > > > will require a large amount of resources.
>> > > > Before calling sriov_init() must ensure that the system BIOS also
>> > > > supports SR-IOV and that system BIOS has been able to allocate
>> > > > enough resources.
>> > > > If the VF BARs are zero then the system BIOS does not support
>> > > > SR-IOV or it could not allocate the resources and this platform
>> > > > will not support AMD graphics SR-IOV.
>> > > > Therefore do not call sriov_init().
>> > > > If the system BIOS does support SR-IOV then the VF BARs will be
>> > > > properly initialized to non-zero values.
>> > > >
>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>> > > >
>> > > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes
>> > > > in quirks.c are for specific devices and one or more device ID are
>> > > > defined for the specific devices. However my patch is for all AMD
>> > > > SR-IOV capable GPUs, that includes all existing and future AMD ser=
ver GPUs.
>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>> > >
>> > >
>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>> > > always need to be able to deal with devices of any type where the
>> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices
>> > > can fit their VFs within a minimum bridge aperture, most cannot.  I
>> > > don't understand why the VF resource requirements being
>> > > exceptionally large dictates that they receive special handling.
>> > > Thanks,
>> > >
>> > > Alex
>> > >
>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> > > > ---
>> > > >  drivers/pci/iov.c | 63
>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>> > > >
>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> > > > e30f05c..e4f1405 100644
>> > > > --- a/drivers/pci/iov.c
>> > > > +++ b/drivers/pci/iov.c
>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_de=
v *dev)
>> > > >                 msleep(100);
>> > > >  }
>> > > >
>> > > > +/*
>> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
>> > > > + * @dev: the PCI device
>> > > > + * @pos: register offset of SR-IOV capability in PCI config space
>> > > > + * Returns true any VF BAR has resource allocated, false
>> > > > + * if all VF BARs are empty.
>> > > > + */
>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> > > > +       int i;
>> > > > +       u32 bar_value;
>> > > > +       u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>> > > > +
>> > > > +       for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i=
 * 4, &bar_value);
>> > > > +               if (bar_value & bar_size_mask)
>> > > > +                       return true;
>> > > > +       }
>> > > > +
>> > > > +       return false;
>> > > > +}
>> > > > +
>> > > > +/*
>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
>> > > > + * @dev: the PCI device
>> > > > + *
>> > > > + * Returns true if device is an AMD/ATI display adapter,
>> > > > + * otherwise return false.
>> > > > + */
>> > > > +
>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> > > > +       return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY)=
 &&
>> > > > +               (dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
>> > > > +               dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
>> > > > +
>> > > >  /**
>> > > >   * pci_iov_init - initialize the IOV capability
>> > > >   * @dev: the PCI device
>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>> > > >                 return -ENODEV;
>> > > >
>> > > >         pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV)=
;
>> > > > -       if (pos)
>> > > > -               return sriov_init(dev, pos);
>> > > > -
>> > > > +       if (pos) {
>> > > > +       /*
>> > > > +        * If the device is an AMD graphics device and it supports
>> > > > +        * SR-IOV it will require a large amount of resources.
>> > > > +        * Before calling sriov_init() must ensure that the system
>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>> > > > +        * able to allocate enough resources.
>> > > > +        * If the VF BARs are zero then the system BIOS does not
>> > > > +        * support SR-IOV or it could not allocate the resources
>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>> > > > +        * Therefore do not call sriov_init().
>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>> > > > +        * will be properly initialized to non-zero values.
>> > > > +        */
>> > > > +               if (is_amd_display_adapter(dev)) {
>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>> > > > +                               return sriov_init(dev, pos);
>> > > > +               } else {
>> > > > +                       return sriov_init(dev, pos);
>> > > > +               }
>> > > > +       }
>> > > >         return -ENODEV;
>> > > >  }
>> > > >
>> > >
>> >
>>
>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-19 15:43                 ` Alexander Duyck
@ 2017-05-20  4:53                   ` Cheng, Collins
  -1 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-20  4:53 UTC (permalink / raw)
  To: Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

Hi Alex,

Yes, I hope kernel can disable SR-IOV and related VF resource allocation if the system BIOS is not SR-IOV capable.

Adding the parameter "pci=nosriov" sounds a doable solution, but it would need user to add this parameter manually, right? I think an automatic detection would be better. My patch is trying to auto detect and bypass VF resource allocation.


-Collins Cheng


-----Original Message-----
From: Alexander Duyck [mailto:alexander.duyck@gmail.com] 
Sent: Friday, May 19, 2017 11:44 PM
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Mon, May 15, 2017 at 10:53 AM, Alex Williamson <alex.williamson@redhat.com> wrote:
> On Mon, 15 May 2017 08:19:28 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>
>> Hi Williamson,
>>
>> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>
> Servers should be supporting SR-IOV for a long time now.  What really 
> is there to a BIOS supporting SR-IOV anyway, it's simply reserving 
> sufficient bus number and MMIO resources such that we can enable the 
> VFs.  This process isn't exclusively reserved for the BIOS.  Some 
> platforms may choose to only initialize boot devices, leaving the rest 
> for the OS to program.  The initial proposal here to disable SR-IOV if 
> not programmed at OS hand-off disables even the possibility of the OS 
> reallocating resources for this device.

There are differences between supporting SR-IOV and supporting SR-IOV on devices with massive resources. I know I have seen NICs that will keep a system from completing POST if SR-IOV is enabled, and MMIO beyond 4G is not. My guess would be that the issues being seen are probably that they disable SR-IOV in the BIOS in such a setup and end up running into issues when they try to boot into the Linux kernel as it goes through and tries to allocate resources for SR-IOV even though it was disabled in the BIOS.

It might make sense to add a kernel parameter something like a "pci=nosriov" that would allow for disabling SR-IOV and related resource allocation if that is what we are talking about. That way you could plug in these types of devices into a system with a legacy bios or that doesn't wan to allocate addresses above 32b for MMIO, and this parameter would be all that is needed to disable SR-IOV so you could plug in a NIC that has SR-IOV associated with it.

>> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
>>
>> I will send out dmesg log lspci info tomorrow. Thanks.
>
> Thanks,
> Alex
>
>> -----Original Message-----
>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> Sent: Friday, May 12, 2017 10:43 PM
>> To: Cheng, Collins <Collins.Cheng@amd.com>
>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
>> linux-kernel@vger.kernel.org; Deucher, Alexander 
>> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; 
>> Yinghai Lu <yinghai@kernel.org>
>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>> SR-IOV incapable platform
>>
>> On Fri, 12 May 2017 04:51:43 +0000
>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>
>> > Hi Williamson,
>> >
>> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.
>>
>> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
>>
>> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
>> >     1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>> >     2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.
>>
>> I think these are the issues we should be trying to solve and I'm 
>> sure folks on the linux-pci list can help us identify the bug.  
>> Minimally, failure to allocate VF resources should leave the device 
>> in no worse condition than before it tried.  Perhaps you could post 
>> more details about the issue, boot with pci=earlydump, post dmesg of 
>> a boot where the PF resources are incorrectly re-allocated, and 
>> include lspci -vvv for the SR-IOV device.  Also, please test with the 
>> latest upstream kernel, upstream only patches old kernels through 
>> stable backports of commits to the latest kernel.  Adding Yinghai as 
>> a resource allocation expert. Thanks,
>>
>> Alex
>>
>> > -----Original Message-----
>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > Sent: Friday, May 12, 2017 12:01 PM
>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
>> > linux-kernel@vger.kernel.org; Deucher, Alexander 
>> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>> > SR-IOV incapable platform
>> >
>> > On Fri, 12 May 2017 03:42:46 +0000
>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >
>> > > Hi Williamson,
>> > >
>> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
>> > >
>> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.
>> >
>> > So the problem is that something bad happens when the kernel is 
>> > trying to reallocate resources in order to fulfill the requirements 
>> > of the VFs, leaving the PF resources incorrectly programmed?  Why 
>> > not just fix that bug rather than creating special handling for 
>> > this vendor/class of device which disables any attempt to fixup 
>> > resources for SR-IOV?  IOW, this patch just avoids the problem for 
>> > your devices rather than fixing the bug.  I'd suggest fixing the 
>> > bug such that the PF is left in a functional state if the kernel is 
>> > unable to allocate sufficient resources for the VFs.  Thanks,
>> >
>> > Alex
>> >
>> > > -----Original Message-----
>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> > > Sent: Friday, May 12, 2017 11:21 AM
>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
>> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, 
>> > > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
>> > > <Kelly.Zytaruk@amd.com>
>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>> > > SR-IOV incapable platform
>> > >
>> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins" 
>> > > <Collins.Cheng@amd.com> wrote:
>> > >
>> > > > Hi Helgaas,
>> > > >
>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
>> > > > platform. It would cause a problem on PCI resource allocation 
>> > > > in current Linux kernel.
>> > > >
>> > > > Therefore in order to allow the PF (Physical Function) device 
>> > > > of SR-IOV capable GPU to work on the SR-IOV incapable platform, 
>> > > > it is required to verify conditions for initializing BAR 
>> > > > resources on AMD SR-IOV capable GPUs.
>> > > >
>> > > > If the device is an AMD graphics device and it supports SR-IOV 
>> > > > it will require a large amount of resources.
>> > > > Before calling sriov_init() must ensure that the system BIOS 
>> > > > also supports SR-IOV and that system BIOS has been able to 
>> > > > allocate enough resources.
>> > > > If the VF BARs are zero then the system BIOS does not support 
>> > > > SR-IOV or it could not allocate the resources and this platform 
>> > > > will not support AMD graphics SR-IOV.
>> > > > Therefore do not call sriov_init().
>> > > > If the system BIOS does support SR-IOV then the VF BARs will be 
>> > > > properly initialized to non-zero values.
>> > > >
>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>> > > >
>> > > > I checked the drivers/pci/quirks.c, it looks the 
>> > > > workarounds/fixes in quirks.c are for specific devices and one 
>> > > > or more device ID are defined for the specific devices. However 
>> > > > my patch is for all AMD SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>> > >
>> > >
>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
>> > > always need to be able to deal with devices of any type where the 
>> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV 
>> > > devices can fit their VFs within a minimum bridge aperture, most 
>> > > cannot.  I don't understand why the VF resource requirements 
>> > > being exceptionally large dictates that they receive special handling.
>> > > Thanks,
>> > >
>> > > Alex
>> > >
>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> > > > ---
>> > > >  drivers/pci/iov.c | 63
>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>> > > >
>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> > > > e30f05c..e4f1405 100644
>> > > > --- a/drivers/pci/iov.c
>> > > > +++ b/drivers/pci/iov.c
>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>> > > >                 msleep(100);
>> > > >  }
>> > > >
>> > > > +/*
>> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
>> > > > + * @dev: the PCI device
>> > > > + * @pos: register offset of SR-IOV capability in PCI config 
>> > > > +space
>> > > > + * Returns true any VF BAR has resource allocated, false
>> > > > + * if all VF BARs are empty.
>> > > > + */
>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> > > > +       int i;
>> > > > +       u32 bar_value;
>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>> > > > +
>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
>> > > > +               if (bar_value & bar_size_mask)
>> > > > +                       return true;
>> > > > +       }
>> > > > +
>> > > > +       return false;
>> > > > +}
>> > > > +
>> > > > +/*
>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU 
>> > > > +device
>> > > > + * @dev: the PCI device
>> > > > + *
>> > > > + * Returns true if device is an AMD/ATI display adapter,
>> > > > + * otherwise return false.
>> > > > + */
>> > > > +
>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>> > > > +
>> > > >  /**
>> > > >   * pci_iov_init - initialize the IOV capability
>> > > >   * @dev: the PCI device
>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>> > > >                 return -ENODEV;
>> > > >
>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>> > > > -       if (pos)
>> > > > -               return sriov_init(dev, pos);
>> > > > -
>> > > > +       if (pos) {
>> > > > +       /*
>> > > > +        * If the device is an AMD graphics device and it supports
>> > > > +        * SR-IOV it will require a large amount of resources.
>> > > > +        * Before calling sriov_init() must ensure that the system
>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>> > > > +        * able to allocate enough resources.
>> > > > +        * If the VF BARs are zero then the system BIOS does not
>> > > > +        * support SR-IOV or it could not allocate the resources
>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>> > > > +        * Therefore do not call sriov_init().
>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>> > > > +        * will be properly initialized to non-zero values.
>> > > > +        */
>> > > > +               if (is_amd_display_adapter(dev)) {
>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>> > > > +                               return sriov_init(dev, pos);
>> > > > +               } else {
>> > > > +                       return sriov_init(dev, pos);
>> > > > +               }
>> > > > +       }
>> > > >         return -ENODEV;
>> > > >  }
>> > > >
>> > >
>> >
>>
>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-20  4:53                   ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-20  4:53 UTC (permalink / raw)
  To: Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

SGkgQWxleCwNCg0KWWVzLCBJIGhvcGUga2VybmVsIGNhbiBkaXNhYmxlIFNSLUlPViBhbmQgcmVs
YXRlZCBWRiByZXNvdXJjZSBhbGxvY2F0aW9uIGlmIHRoZSBzeXN0ZW0gQklPUyBpcyBub3QgU1It
SU9WIGNhcGFibGUuDQoNCkFkZGluZyB0aGUgcGFyYW1ldGVyICJwY2k9bm9zcmlvdiIgc291bmRz
IGEgZG9hYmxlIHNvbHV0aW9uLCBidXQgaXQgd291bGQgbmVlZCB1c2VyIHRvIGFkZCB0aGlzIHBh
cmFtZXRlciBtYW51YWxseSwgcmlnaHQ/IEkgdGhpbmsgYW4gYXV0b21hdGljIGRldGVjdGlvbiB3
b3VsZCBiZSBiZXR0ZXIuIE15IHBhdGNoIGlzIHRyeWluZyB0byBhdXRvIGRldGVjdCBhbmQgYnlw
YXNzIFZGIHJlc291cmNlIGFsbG9jYXRpb24uDQoNCg0KLUNvbGxpbnMgQ2hlbmcNCg0KDQotLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogQWxleGFuZGVyIER1eWNrIFttYWlsdG86YWxl
eGFuZGVyLmR1eWNrQGdtYWlsLmNvbV0gDQpTZW50OiBGcmlkYXksIE1heSAxOSwgMjAxNyAxMTo0
NCBQTQ0KVG86IEFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+DQpD
YzogQ2hlbmcsIENvbGxpbnMgPENvbGxpbnMuQ2hlbmdAYW1kLmNvbT47IEJqb3JuIEhlbGdhYXMg
PGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC1r
ZXJuZWxAdmdlci5rZXJuZWwub3JnOyBEZXVjaGVyLCBBbGV4YW5kZXIgPEFsZXhhbmRlci5EZXVj
aGVyQGFtZC5jb20+OyBaeXRhcnVrLCBLZWxseSA8S2VsbHkuWnl0YXJ1a0BhbWQuY29tPjsgWWlu
Z2hhaSBMdSA8eWluZ2hhaUBrZXJuZWwub3JnPg0KU3ViamVjdDogUmU6IFtQQVRDSF0gUENJOiBN
YWtlIFNSLUlPViBjYXBhYmxlIEdQVSB3b3JraW5nIG9uIHRoZSBTUi1JT1YgaW5jYXBhYmxlIHBs
YXRmb3JtDQoNCk9uIE1vbiwgTWF5IDE1LCAyMDE3IGF0IDEwOjUzIEFNLCBBbGV4IFdpbGxpYW1z
b24gPGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tPiB3cm90ZToNCj4gT24gTW9uLCAxNSBNYXkg
MjAxNyAwODoxOToyOCArMDAwMA0KPiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFt
ZC5jb20+IHdyb3RlOg0KPg0KPj4gSGkgV2lsbGlhbXNvbiwNCj4+DQo+PiBXZSBjYW5ub3QgYXNz
dW1lIEJJT1Mgc3VwcG9ydHMgU1ItSU9WLCBhY3R1YWxseSBvbmx5IG5ld2VyIHNlcnZlciBtb3Ro
ZXJib2FyZCBCSU9TIHN1cHBvcnRzIFNSLUlPVi4gTm9ybWFsIGRlc2t0b3AgbW90aGVyYm9hcmQg
QklPUyBvciBvbGRlciBzZXJ2ZXIgbW90aGVyYm9hcmQgQklPUyBkb2Vzbid0IHN1cHBvcnQgU1It
SU9WLiBUaGlzIGlzc3VlIHdvdWxkIGhhcHBlbiBpZiBhbiB1c2VyIHBsdWdzIG91ciBBTUQgU1It
SU9WIGNhcGFibGUgR1BVIGNhcmQgdG8gYSBub3JtYWwgZGVza3RvcCBtb3RoZXJib2FyZC4NCj4N
Cj4gU2VydmVycyBzaG91bGQgYmUgc3VwcG9ydGluZyBTUi1JT1YgZm9yIGEgbG9uZyB0aW1lIG5v
dy4gIFdoYXQgcmVhbGx5IA0KPiBpcyB0aGVyZSB0byBhIEJJT1Mgc3VwcG9ydGluZyBTUi1JT1Yg
YW55d2F5LCBpdCdzIHNpbXBseSByZXNlcnZpbmcgDQo+IHN1ZmZpY2llbnQgYnVzIG51bWJlciBh
bmQgTU1JTyByZXNvdXJjZXMgc3VjaCB0aGF0IHdlIGNhbiBlbmFibGUgdGhlIA0KPiBWRnMuICBU
aGlzIHByb2Nlc3MgaXNuJ3QgZXhjbHVzaXZlbHkgcmVzZXJ2ZWQgZm9yIHRoZSBCSU9TLiAgU29t
ZSANCj4gcGxhdGZvcm1zIG1heSBjaG9vc2UgdG8gb25seSBpbml0aWFsaXplIGJvb3QgZGV2aWNl
cywgbGVhdmluZyB0aGUgcmVzdCANCj4gZm9yIHRoZSBPUyB0byBwcm9ncmFtLiAgVGhlIGluaXRp
YWwgcHJvcG9zYWwgaGVyZSB0byBkaXNhYmxlIFNSLUlPViBpZiANCj4gbm90IHByb2dyYW1tZWQg
YXQgT1MgaGFuZC1vZmYgZGlzYWJsZXMgZXZlbiB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIE9TIA0K
PiByZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciB0aGlzIGRldmljZS4NCg0KVGhlcmUgYXJlIGRp
ZmZlcmVuY2VzIGJldHdlZW4gc3VwcG9ydGluZyBTUi1JT1YgYW5kIHN1cHBvcnRpbmcgU1ItSU9W
IG9uIGRldmljZXMgd2l0aCBtYXNzaXZlIHJlc291cmNlcy4gSSBrbm93IEkgaGF2ZSBzZWVuIE5J
Q3MgdGhhdCB3aWxsIGtlZXAgYSBzeXN0ZW0gZnJvbSBjb21wbGV0aW5nIFBPU1QgaWYgU1ItSU9W
IGlzIGVuYWJsZWQsIGFuZCBNTUlPIGJleW9uZCA0RyBpcyBub3QuIE15IGd1ZXNzIHdvdWxkIGJl
IHRoYXQgdGhlIGlzc3VlcyBiZWluZyBzZWVuIGFyZSBwcm9iYWJseSB0aGF0IHRoZXkgZGlzYWJs
ZSBTUi1JT1YgaW4gdGhlIEJJT1MgaW4gc3VjaCBhIHNldHVwIGFuZCBlbmQgdXAgcnVubmluZyBp
bnRvIGlzc3VlcyB3aGVuIHRoZXkgdHJ5IHRvIGJvb3QgaW50byB0aGUgTGludXgga2VybmVsIGFz
IGl0IGdvZXMgdGhyb3VnaCBhbmQgdHJpZXMgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBTUi1J
T1YgZXZlbiB0aG91Z2ggaXQgd2FzIGRpc2FibGVkIGluIHRoZSBCSU9TLg0KDQpJdCBtaWdodCBt
YWtlIHNlbnNlIHRvIGFkZCBhIGtlcm5lbCBwYXJhbWV0ZXIgc29tZXRoaW5nIGxpa2UgYSAicGNp
PW5vc3Jpb3YiIHRoYXQgd291bGQgYWxsb3cgZm9yIGRpc2FibGluZyBTUi1JT1YgYW5kIHJlbGF0
ZWQgcmVzb3VyY2UgYWxsb2NhdGlvbiBpZiB0aGF0IGlzIHdoYXQgd2UgYXJlIHRhbGtpbmcgYWJv
dXQuIFRoYXQgd2F5IHlvdSBjb3VsZCBwbHVnIGluIHRoZXNlIHR5cGVzIG9mIGRldmljZXMgaW50
byBhIHN5c3RlbSB3aXRoIGEgbGVnYWN5IGJpb3Mgb3IgdGhhdCBkb2Vzbid0IHdhbiB0byBhbGxv
Y2F0ZSBhZGRyZXNzZXMgYWJvdmUgMzJiIGZvciBNTUlPLCBhbmQgdGhpcyBwYXJhbWV0ZXIgd291
bGQgYmUgYWxsIHRoYXQgaXMgbmVlZGVkIHRvIGRpc2FibGUgU1ItSU9WIHNvIHlvdSBjb3VsZCBw
bHVnIGluIGEgTklDIHRoYXQgaGFzIFNSLUlPViBhc3NvY2lhdGVkIHdpdGggaXQuDQoNCj4+IEkg
YWdyZWUgdGhhdCBmYWlsdXJlIHRvIGFsbG9jYXRlIFZGIHJlc291cmNlcyBzaG91bGQgbGVhdmUg
dGhlIGRldmljZSBpbiBubyB3b3JzZSBjb25kaXRpb24gdGhhbiBiZWZvcmUgaXQgdHJpZWQuIEkg
aG9wZSBrZXJuZWwgY291bGQgYWxsb2NhdGUgUEYgZGV2aWNlIHJlc291cmNlIGJlZm9yZSBhbGxv
Y2F0aW5nIFZGIGRldmljZSByZXNvdXJjZSwgYW5kIGtlZXAgUEYgZGV2aWNlIHJlc291cmNlIHZh
bGlkIGFuZCBmdW5jdGlvbmFsIGlmIGZhaWxlZCB0byBhbGxvY2F0ZSBWRiBkZXZpY2UgcmVzb3Vy
Y2UuDQo+Pg0KPj4gSSB3aWxsIHNlbmQgb3V0IGRtZXNnIGxvZyBsc3BjaSBpbmZvIHRvbW9ycm93
LiBUaGFua3MuDQo+DQo+IFRoYW5rcywNCj4gQWxleA0KPg0KPj4gLS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCj4+IEZyb206IEFsZXggV2lsbGlhbXNvbiBbbWFpbHRvOmFsZXgud2lsbGlhbXNv
bkByZWRoYXQuY29tXQ0KPj4gU2VudDogRnJpZGF5LCBNYXkgMTIsIDIwMTcgMTA6NDMgUE0NCj4+
IFRvOiBDaGVuZywgQ29sbGlucyA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPg0KPj4gQ2M6IEJqb3Ju
IEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3Jn
OyANCj4+IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsIEFsZXhhbmRlciAN
Cj4+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkgPEtlbGx5Llp5
dGFydWtAYW1kLmNvbT47IA0KPj4gWWluZ2hhaSBMdSA8eWluZ2hhaUBrZXJuZWwub3JnPg0KPj4g
U3ViamVjdDogUmU6IFtQQVRDSF0gUENJOiBNYWtlIFNSLUlPViBjYXBhYmxlIEdQVSB3b3JraW5n
IG9uIHRoZSANCj4+IFNSLUlPViBpbmNhcGFibGUgcGxhdGZvcm0NCj4+DQo+PiBPbiBGcmksIDEy
IE1heSAyMDE3IDA0OjUxOjQzICswMDAwDQo+PiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNo
ZW5nQGFtZC5jb20+IHdyb3RlOg0KPj4NCj4+ID4gSGkgV2lsbGlhbXNvbiwNCj4+ID4NCj4+ID4g
SSB2ZXJpZmllZCB0aGUgcGF0Y2ggaXMgd29ya2luZyBmb3IgYm90aCBBTUQgU1ItSU9WIEdQVSBh
bmQgSW50ZWwgU1ItSU9WIE5JQy4gSSBkb24ndCB0aGluayBpdCBpcyByZWR1bmRhbnQgdG8gY2hl
Y2sgdGhlIFZGIEJBUiB2YWxpZCBiZWZvcmUgY2FsbCBzcmlvdl9pbml0KCksIGl0IGlzIHNhZmUg
YW5kIHNhdmluZyBib290IHRpbWUsIGFsc28gdGhlcmUgaXMgbm8gYSBiZXR0ZXIgbWV0aG9kIHRv
IGtub3cgaWYgc3lzdGVtIEJJT1MgaGFzIGNvcnJlY3RseSBpbml0aWFsaXplZCB0aGUgU1ItSU9W
IGNhcGFiaWxpdHkgb3Igbm90Lg0KPj4NCj4+IEl0IGFsc28gbWFza3MgYW4gdW5kZXJseWluZyBi
dWcgYW5kIGNyZWF0ZXMgYSBtYWludGVuYW5jZSBpc3N1ZSB0aGF0IHdlIHdvbid0IGtub3cgd2hl
biBpdCdzIHNhZmUgdG8gcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZC4gIEkgZG9uJ3QgdGhpbmsgZmFz
dGVyIGJvb3QgaXMgdmFsaWQgcmF0aW9uYWxlLCBpbiBvbmUgY2FzZSBTUi1JT1YgaXMgY29tcGxl
dGVseSBkaXNhYmxlZCwgdGhlIG90aGVyIHdlIGF0dGVtcHQgdG8gYWxsb2NhdGUgdGhlIHJlc291
cmNlcyB0aGUgQklPUyBmYWlsZWQgdG8gcHJvdmlkZS4gIEkgZXhwZWN0IHRoaXMgaXMgYWxzbyBh
IGNvcm5lciBjYXNlLCB0aGUgQklPUyBzaG91bGQgdHlwaWNhbGx5IHN1cHBvcnQgU1ItSU9WLCB0
aGVyZWZvcmUgdGhpcyBzaXR1YXRpb24gc2hvdWxkIGJlIGFuIGV4Y2VwdGlvbi4NCj4+DQo+PiA+
IEkgZGlkIG5vdCB0cnkgdG8gZml4IHRoZSBpc3N1ZSBmcm9tIHRoZSBrZXJuZWwgcmVzb3VyY2Ug
YWxsb2NhdGlvbiBwZXJzcGVjdGl2ZSwgaXQgaXMgYmVjYXVzZToNCj4+ID4gICAgIDEuIEkgYW0g
bm90IHZlcnkgZmFtaWxpYXIgd2l0aCB0aGUgUENJIHJlc291cmNlIGFsbG9jYXRpb24gc2NoZW1l
IGluIGtlcm5lbC4gRm9yIGV4YW1wbGUsIGluIHNyaW92X2luaXQoKSwga2VybmVsIHdpbGwgcmUt
YXNzaWduIHRoZSBQQ0kgcmVzb3VyY2UgZm9yIGJvdGggVkYgYW5kIFBGLiBJIGRvbid0IHVuZGVy
c3RhbmQgd2h5IGtlcm5lbCBhbGxvY2F0ZXMgcmVzb3VyY2UgZm9yIFZGIGZpcnN0bHksIHRoZW4g
UEYuIElmIGl0IGlzIFBGIGZpcnN0bHksIHRoZW4gdGhpcyBpc3N1ZSBjb3VsZCBiZSBhdm9pZGVk
Lg0KPj4gPiAgICAgMi4gSSBhbSBub3Qgc3VyZSBpZiBrZXJuZWwgaGFzIGVycm9yIGhhbmRsZXIg
aWYgUENJIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbGVkLiBJbiB0aGlzIGNhc2UsIGtlcm5lbCBj
YW5ub3QgYWxsb2NhdGUgZW5vdWdoIHJlc291cmNlIHRvIFBGLiBJdCBzaG91bGQgdHJpZ2dlciBz
b21lIGVycm9yIGhhbmRsZXIgdG8gZWl0aGVyIGp1c3Qga2VlcCBvcmlnaW5hbCBCQVIgdmFsdWVz
IHNldCBieSBzeXN0ZW0gQklPUywgb3IgZGlzYWJsZSB0aGlzIGRldmljZSBhbmQgbG9nIGVycm9y
cy4NCj4+DQo+PiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgaXNzdWVzIHdlIHNob3VsZCBiZSB0cnlp
bmcgdG8gc29sdmUgYW5kIEknbSANCj4+IHN1cmUgZm9sa3Mgb24gdGhlIGxpbnV4LXBjaSBsaXN0
IGNhbiBoZWxwIHVzIGlkZW50aWZ5IHRoZSBidWcuICANCj4+IE1pbmltYWxseSwgZmFpbHVyZSB0
byBhbGxvY2F0ZSBWRiByZXNvdXJjZXMgc2hvdWxkIGxlYXZlIHRoZSBkZXZpY2UgDQo+PiBpbiBu
byB3b3JzZSBjb25kaXRpb24gdGhhbiBiZWZvcmUgaXQgdHJpZWQuICBQZXJoYXBzIHlvdSBjb3Vs
ZCBwb3N0IA0KPj4gbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpc3N1ZSwgYm9vdCB3aXRoIHBjaT1l
YXJseWR1bXAsIHBvc3QgZG1lc2cgb2YgDQo+PiBhIGJvb3Qgd2hlcmUgdGhlIFBGIHJlc291cmNl
cyBhcmUgaW5jb3JyZWN0bHkgcmUtYWxsb2NhdGVkLCBhbmQgDQo+PiBpbmNsdWRlIGxzcGNpIC12
dnYgZm9yIHRoZSBTUi1JT1YgZGV2aWNlLiAgQWxzbywgcGxlYXNlIHRlc3Qgd2l0aCB0aGUgDQo+
PiBsYXRlc3QgdXBzdHJlYW0ga2VybmVsLCB1cHN0cmVhbSBvbmx5IHBhdGNoZXMgb2xkIGtlcm5l
bHMgdGhyb3VnaCANCj4+IHN0YWJsZSBiYWNrcG9ydHMgb2YgY29tbWl0cyB0byB0aGUgbGF0ZXN0
IGtlcm5lbC4gIEFkZGluZyBZaW5naGFpIGFzIA0KPj4gYSByZXNvdXJjZSBhbGxvY2F0aW9uIGV4
cGVydC4gVGhhbmtzLA0KPj4NCj4+IEFsZXgNCj4+DQo+PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn
ZS0tLS0tDQo+PiA+IEZyb206IEFsZXggV2lsbGlhbXNvbiBbbWFpbHRvOmFsZXgud2lsbGlhbXNv
bkByZWRoYXQuY29tXQ0KPj4gPiBTZW50OiBGcmlkYXksIE1heSAxMiwgMjAxNyAxMjowMSBQTQ0K
Pj4gPiBUbzogQ2hlbmcsIENvbGxpbnMgPENvbGxpbnMuQ2hlbmdAYW1kLmNvbT4NCj4+ID4gQ2M6
IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51eC1wY2lAdmdlci5rZXJu
ZWwub3JnOyANCj4+ID4gbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgRGV1Y2hlciwgQWxl
eGFuZGVyIA0KPj4gPiA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT47IFp5dGFydWssIEtlbGx5
IDxLZWxseS5aeXRhcnVrQGFtZC5jb20+DQo+PiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTog
TWFrZSBTUi1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUgDQo+PiA+IFNSLUlPViBpbmNh
cGFibGUgcGxhdGZvcm0NCj4+ID4NCj4+ID4gT24gRnJpLCAxMiBNYXkgMjAxNyAwMzo0Mjo0NiAr
MDAwMA0KPj4gPiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+IHdyb3Rl
Og0KPj4gPg0KPj4gPiA+IEhpIFdpbGxpYW1zb24sDQo+PiA+ID4NCj4+ID4gPiBHUFUgY2FyZCBu
ZWVkcyBtb3JlIEJBUiBhcGVydHVyZSByZXNvdXJjZSB0aGFuIG90aGVyIFBDSSBkZXZpY2VzLiBG
b3IgZXhhbXBsZSwgSW50ZWwgU1ItSU9WIG5ldHdvcmsgY2FyZCBvbmx5IHJlcXVpcmUgNTEyS0Ig
bWVtb3J5IHJlc291cmNlIGZvciBhbGwgVkZzLiBBTUQgU1ItSU9WIEdQVSBjYXJkIG5lZWRzIDI1
Nk1CIHgxNiBWRiA9IDRHQiBtZW1vcnkgcmVzb3VyY2UgZm9yIGZyYW1lIGJ1ZmZlciBCQVIgYXBl
cnR1cmUuDQo+PiA+ID4NCj4+ID4gPiBJZiB0aGUgc3lzdGVtIEJJT1Mgc3VwcG9ydHMgU1ItSU9W
LCBpdCB3aWxsIHJlc2VydmUgZW5vdWdoIHJlc291cmNlIGZvciBhbGwgVkYgQkFScy4gSWYgdGhl
IHN5c3RlbSBCSU9TIGRvZXNuJ3Qgc3VwcG9ydCBTUi1JT1Ygb3IgY2Fubm90IGFsbG9jYXRlIHRo
ZSBlbm91Z2ggcmVzb3VyY2UgZm9yIFZGIEJBUnMsIG9ubHkgUEYgQkFSIHdpbGwgYmUgYXNzaWdu
ZWQgYW5kIFZGIEJBUnMgYXJlIGVtcHR5LiBUaGVuIHN5c3RlbSBib290cyB0byBMaW51eCBrZXJu
ZWwgYW5kIGtlcm5lbCBkb2Vzbid0IGNoZWNrIGlmIHRoZSBWRiBCQVJzIGFyZSBlbXB0eSBvciB2
YWxpZC4gS2VybmVsIHdpbGwgcmUtYXNzaWduIHRoZSBCQVIgcmVzb3VyY2VzIGZvciBQRiBhbmQg
YWxsIFZGcy4gVGhlIHByb2JsZW0gSSBzYXcgaXMgdGhhdCBrZXJuZWwgd2lsbCBmYWlsIHRvIGFs
bG9jYXRlIFBGIEJBUiByZXNvdXJjZSBiZWNhdXNlIHNvbWUgcmVzb3VyY2VzIGFyZSBhc3NpZ25l
ZCB0byBWRiwgdGhpcyBpcyBub3QgZXhwZWN0ZWQuIFNvIGtlcm5lbCBtaWdodCBuZWVkIHRvIGRv
IHNvbWUgY2hlY2sgYmVmb3JlIHJlLWFzc2lnbiB0aGUgUEYvVkYgcmVzb3VyY2UsIHNvIHRoYXQg
UEYgZGV2aWNlIHdpbGwgYmUgY29ycmVjdGx5IGFzc2lnbmVkIEJBUiByZXNvdXJjZSBhbmQgdXNl
ciBjYW4gdXNlIFBGIGRldmljZS4NCj4+ID4NCj4+ID4gU28gdGhlIHByb2JsZW0gaXMgdGhhdCBz
b21ldGhpbmcgYmFkIGhhcHBlbnMgd2hlbiB0aGUga2VybmVsIGlzIA0KPj4gPiB0cnlpbmcgdG8g
cmVhbGxvY2F0ZSByZXNvdXJjZXMgaW4gb3JkZXIgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRz
IA0KPj4gPiBvZiB0aGUgVkZzLCBsZWF2aW5nIHRoZSBQRiByZXNvdXJjZXMgaW5jb3JyZWN0bHkg
cHJvZ3JhbW1lZD8gIFdoeSANCj4+ID4gbm90IGp1c3QgZml4IHRoYXQgYnVnIHJhdGhlciB0aGFu
IGNyZWF0aW5nIHNwZWNpYWwgaGFuZGxpbmcgZm9yIA0KPj4gPiB0aGlzIHZlbmRvci9jbGFzcyBv
ZiBkZXZpY2Ugd2hpY2ggZGlzYWJsZXMgYW55IGF0dGVtcHQgdG8gZml4dXAgDQo+PiA+IHJlc291
cmNlcyBmb3IgU1ItSU9WPyAgSU9XLCB0aGlzIHBhdGNoIGp1c3QgYXZvaWRzIHRoZSBwcm9ibGVt
IGZvciANCj4+ID4geW91ciBkZXZpY2VzIHJhdGhlciB0aGFuIGZpeGluZyB0aGUgYnVnLiAgSSdk
IHN1Z2dlc3QgZml4aW5nIHRoZSANCj4+ID4gYnVnIHN1Y2ggdGhhdCB0aGUgUEYgaXMgbGVmdCBp
biBhIGZ1bmN0aW9uYWwgc3RhdGUgaWYgdGhlIGtlcm5lbCBpcyANCj4+ID4gdW5hYmxlIHRvIGFs
bG9jYXRlIHN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0aGUgVkZzLiAgVGhhbmtzLA0KPj4gPg0K
Pj4gPiBBbGV4DQo+PiA+DQo+PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+ID4g
PiBGcm9tOiBBbGV4IFdpbGxpYW1zb24gW21haWx0bzphbGV4LndpbGxpYW1zb25AcmVkaGF0LmNv
bV0NCj4+ID4gPiBTZW50OiBGcmlkYXksIE1heSAxMiwgMjAxNyAxMToyMSBBTQ0KPj4gPiA+IFRv
OiBDaGVuZywgQ29sbGlucyA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPg0KPj4gPiA+IENjOiBCam9y
biBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPjsgDQo+PiA+ID4gbGludXgtcGNpQHZnZXIu
a2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgRGV1Y2hlciwgDQo+PiA+
ID4gQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkg
DQo+PiA+ID4gPEtlbGx5Llp5dGFydWtAYW1kLmNvbT4NCj4+ID4gPiBTdWJqZWN0OiBSZTogW1BB
VENIXSBQQ0k6IE1ha2UgU1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlIA0KPj4gPiA+
IFNSLUlPViBpbmNhcGFibGUgcGxhdGZvcm0NCj4+ID4gPg0KPj4gPiA+IE9uIEZyaSwgMTIgTWF5
IDIwMTcgMDI6NTA6MzIgKzAwMDAgIkNoZW5nLCBDb2xsaW5zIiANCj4+ID4gPiA8Q29sbGlucy5D
aGVuZ0BhbWQuY29tPiB3cm90ZToNCj4+ID4gPg0KPj4gPiA+ID4gSGkgSGVsZ2FhcywNCj4+ID4g
PiA+DQo+PiA+ID4gPiBTb21lIEFNRCBHUFVzIGhhdmUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgZ3Jh
cGhpY3MgU1ItSU9WLg0KPj4gPiA+ID4gSWYgdGhlIFNSLUlPViBjYXBhYmxlIEdQVSBpcyBwbHVn
Z2VkIGludG8gdGhlIFNSLUlPViBpbmNhcGFibGUgDQo+PiA+ID4gPiBwbGF0Zm9ybS4gSXQgd291
bGQgY2F1c2UgYSBwcm9ibGVtIG9uIFBDSSByZXNvdXJjZSBhbGxvY2F0aW9uIA0KPj4gPiA+ID4g
aW4gY3VycmVudCBMaW51eCBrZXJuZWwuDQo+PiA+ID4gPg0KPj4gPiA+ID4gVGhlcmVmb3JlIGlu
IG9yZGVyIHRvIGFsbG93IHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRldmljZSANCj4+ID4g
PiA+IG9mIFNSLUlPViBjYXBhYmxlIEdQVSB0byB3b3JrIG9uIHRoZSBTUi1JT1YgaW5jYXBhYmxl
IHBsYXRmb3JtLCANCj4+ID4gPiA+IGl0IGlzIHJlcXVpcmVkIHRvIHZlcmlmeSBjb25kaXRpb25z
IGZvciBpbml0aWFsaXppbmcgQkFSIA0KPj4gPiA+ID4gcmVzb3VyY2VzIG9uIEFNRCBTUi1JT1Yg
Y2FwYWJsZSBHUFVzLg0KPj4gPiA+ID4NCj4+ID4gPiA+IElmIHRoZSBkZXZpY2UgaXMgYW4gQU1E
IGdyYXBoaWNzIGRldmljZSBhbmQgaXQgc3VwcG9ydHMgU1ItSU9WIA0KPj4gPiA+ID4gaXQgd2ls
bCByZXF1aXJlIGEgbGFyZ2UgYW1vdW50IG9mIHJlc291cmNlcy4NCj4+ID4gPiA+IEJlZm9yZSBj
YWxsaW5nIHNyaW92X2luaXQoKSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gQklPUyANCj4+
ID4gPiA+IGFsc28gc3VwcG9ydHMgU1ItSU9WIGFuZCB0aGF0IHN5c3RlbSBCSU9TIGhhcyBiZWVu
IGFibGUgdG8gDQo+PiA+ID4gPiBhbGxvY2F0ZSBlbm91Z2ggcmVzb3VyY2VzLg0KPj4gPiA+ID4g
SWYgdGhlIFZGIEJBUnMgYXJlIHplcm8gdGhlbiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBub3Qgc3Vw
cG9ydCANCj4+ID4gPiA+IFNSLUlPViBvciBpdCBjb3VsZCBub3QgYWxsb2NhdGUgdGhlIHJlc291
cmNlcyBhbmQgdGhpcyBwbGF0Zm9ybSANCj4+ID4gPiA+IHdpbGwgbm90IHN1cHBvcnQgQU1EIGdy
YXBoaWNzIFNSLUlPVi4NCj4+ID4gPiA+IFRoZXJlZm9yZSBkbyBub3QgY2FsbCBzcmlvdl9pbml0
KCkuDQo+PiA+ID4gPiBJZiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlPViB0aGVu
IHRoZSBWRiBCQVJzIHdpbGwgYmUgDQo+PiA+ID4gPiBwcm9wZXJseSBpbml0aWFsaXplZCB0byBu
b24temVybyB2YWx1ZXMuDQo+PiA+ID4gPg0KPj4gPiA+ID4gQmVsb3cgaXMgdGhlIHBhdGNoIGFn
YWluc3QgdG8gS2VybmVsIDQuOCAmIDQuOS4gUGxlYXNlIHJldmlldy4NCj4+ID4gPiA+DQo+PiA+
ID4gPiBJIGNoZWNrZWQgdGhlIGRyaXZlcnMvcGNpL3F1aXJrcy5jLCBpdCBsb29rcyB0aGUgDQo+
PiA+ID4gPiB3b3JrYXJvdW5kcy9maXhlcyBpbiBxdWlya3MuYyBhcmUgZm9yIHNwZWNpZmljIGRl
dmljZXMgYW5kIG9uZSANCj4+ID4gPiA+IG9yIG1vcmUgZGV2aWNlIElEIGFyZSBkZWZpbmVkIGZv
ciB0aGUgc3BlY2lmaWMgZGV2aWNlcy4gSG93ZXZlciANCj4+ID4gPiA+IG15IHBhdGNoIGlzIGZv
ciBhbGwgQU1EIFNSLUlPViBjYXBhYmxlIEdQVXMsIHRoYXQgaW5jbHVkZXMgYWxsIGV4aXN0aW5n
IGFuZCBmdXR1cmUgQU1EIHNlcnZlciBHUFVzLg0KPj4gPiA+ID4gU28gaXQgZG9lc24ndCBzZWVt
IGxpa2UgYSBnb29kIGZpdCB0byBwdXQgdGhlIGZpeCBpbiBxdWlya3MuYy4NCj4+ID4gPg0KPj4g
PiA+DQo+PiA+ID4gV2h5IGlzIGFuIEFNRCBncmFwaGljcyBjYXJkIHVuaXF1ZSBoZXJlPyAgRG9l
c24ndCBzcmlvdl9pbml0KCkgDQo+PiA+ID4gYWx3YXlzIG5lZWQgdG8gYmUgYWJsZSB0byBkZWFs
IHdpdGggZGV2aWNlcyBvZiBhbnkgdHlwZSB3aGVyZSB0aGUgDQo+PiA+ID4gQklPUyBoYXNuJ3Qg
aW5pdGlhbGl6ZWQgdGhlIFNSLUlPViBjYXBhYmlsaXR5PyAgU29tZSBTUi1JT1YgDQo+PiA+ID4g
ZGV2aWNlcyBjYW4gZml0IHRoZWlyIFZGcyB3aXRoaW4gYSBtaW5pbXVtIGJyaWRnZSBhcGVydHVy
ZSwgbW9zdCANCj4+ID4gPiBjYW5ub3QuICBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoZSBWRiBy
ZXNvdXJjZSByZXF1aXJlbWVudHMgDQo+PiA+ID4gYmVpbmcgZXhjZXB0aW9uYWxseSBsYXJnZSBk
aWN0YXRlcyB0aGF0IHRoZXkgcmVjZWl2ZSBzcGVjaWFsIGhhbmRsaW5nLg0KPj4gPiA+IFRoYW5r
cywNCj4+ID4gPg0KPj4gPiA+IEFsZXgNCj4+ID4gPg0KPj4gPiA+ID4gU2lnbmVkLW9mZi1ieTog
Q29sbGlucyBDaGVuZyA8Y29sbGlucy5jaGVuZ0BhbWQuY29tPg0KPj4gPiA+ID4gLS0tDQo+PiA+
ID4gPiAgZHJpdmVycy9wY2kvaW92LmMgfCA2Mw0KPj4gPiA+ID4gKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQ0KPj4gPiA+ID4gIDEgZmlsZSBj
aGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPj4gPiA+ID4NCj4+ID4g
PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3YuYyBiL2RyaXZlcnMvcGNpL2lvdi5jIGlu
ZGV4DQo+PiA+ID4gPiBlMzBmMDVjLi5lNGYxNDA1IDEwMDY0NA0KPj4gPiA+ID4gLS0tIGEvZHJp
dmVycy9wY2kvaW92LmMNCj4+ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2lvdi5jDQo+PiA+ID4g
PiBAQCAtNTIzLDYgKzUyMyw0NSBAQCBzdGF0aWMgdm9pZCBzcmlvdl9yZXN0b3JlX3N0YXRlKHN0
cnVjdCBwY2lfZGV2ICpkZXYpDQo+PiA+ID4gPiAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7
DQo+PiA+ID4gPiAgfQ0KPj4gPiA+ID4NCj4+ID4gPiA+ICsvKg0KPj4gPiA+ID4gKyAqIHBjaV92
Zl9iYXJfdmFsaWQgLSBjaGVjayBpZiBWRiBCQVJzIGhhdmUgcmVzb3VyY2UgYWxsb2NhdGVkDQo+
PiA+ID4gPiArICogQGRldjogdGhlIFBDSSBkZXZpY2UNCj4+ID4gPiA+ICsgKiBAcG9zOiByZWdp
c3RlciBvZmZzZXQgb2YgU1ItSU9WIGNhcGFiaWxpdHkgaW4gUENJIGNvbmZpZyANCj4+ID4gPiA+
ICtzcGFjZQ0KPj4gPiA+ID4gKyAqIFJldHVybnMgdHJ1ZSBhbnkgVkYgQkFSIGhhcyByZXNvdXJj
ZSBhbGxvY2F0ZWQsIGZhbHNlDQo+PiA+ID4gPiArICogaWYgYWxsIFZGIEJBUnMgYXJlIGVtcHR5
Lg0KPj4gPiA+ID4gKyAqLw0KPj4gPiA+ID4gK3N0YXRpYyBib29sIHBjaV92Zl9iYXJfdmFsaWQo
c3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcykgew0KPj4gPiA+ID4gKyAgICAgICBpbnQgaTsN
Cj4+ID4gPiA+ICsgICAgICAgdTMyIGJhcl92YWx1ZTsNCj4+ID4gPiA+ICsgICAgICAgdTMyIGJh
cl9zaXplX21hc2sgPSB+KFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UgfA0KPj4gPiA+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCB8DQo+PiA+ID4g
PiArICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSCk7
DQo+PiA+ID4gPiArDQo+PiA+ID4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1Zf
TlVNX0JBUlM7IGkrKykgew0KPj4gPiA+ID4gKyAgICAgICAgICAgICAgIHBjaV9yZWFkX2NvbmZp
Z19kd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9CQVIgKyBpICogNCwgJmJhcl92YWx1ZSk7DQo+
PiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGJhcl92YWx1ZSAmIGJhcl9zaXplX21hc2spDQo+
PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCj4+ID4gPiA+ICsg
ICAgICAgfQ0KPj4gPiA+ID4gKw0KPj4gPiA+ID4gKyAgICAgICByZXR1cm4gZmFsc2U7DQo+PiA+
ID4gPiArfQ0KPj4gPiA+ID4gKw0KPj4gPiA+ID4gKy8qDQo+PiA+ID4gPiArICogaXNfYW1kX2Rp
c3BsYXlfYWRhcHRlciAtIGNoZWNrIGlmIGl0IGlzIGFuIEFNRC9BVEkgR1BVIA0KPj4gPiA+ID4g
K2RldmljZQ0KPj4gPiA+ID4gKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlDQo+PiA+ID4gPiArICoN
Cj4+ID4gPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgZGV2aWNlIGlzIGFuIEFNRC9BVEkgZGlzcGxh
eSBhZGFwdGVyLA0KPj4gPiA+ID4gKyAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuDQo+PiA+ID4g
PiArICovDQo+PiA+ID4gPiArDQo+PiA+ID4gPiArc3RhdGljIGJvb2wgaXNfYW1kX2Rpc3BsYXlf
YWRhcHRlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7DQo+PiA+ID4gPiArICAgICAgIHJldHVybiAo
KChkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSAmJg0KPj4gPiA+
ID4gKyAgICAgICAgICAgICAgIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSSB8fA0K
Pj4gPiA+ID4gKyAgICAgICAgICAgICAgIGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1E
KSk7IH0NCj4+ID4gPiA+ICsNCj4+ID4gPiA+ICAvKioNCj4+ID4gPiA+ICAgKiBwY2lfaW92X2lu
aXQgLSBpbml0aWFsaXplIHRoZSBJT1YgY2FwYWJpbGl0eQ0KPj4gPiA+ID4gICAqIEBkZXY6IHRo
ZSBQQ0kgZGV2aWNlDQo+PiA+ID4gPiBAQCAtNTM3LDkgKzU3NiwyNyBAQCBpbnQgcGNpX2lvdl9p
bml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpDQo+PiA+ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJu
IC1FTk9ERVY7DQo+PiA+ID4gPg0KPj4gPiA+ID4gICAgICAgICBwb3MgPSBwY2lfZmluZF9leHRf
Y2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTsNCj4+ID4gPiA+IC0gICAgICAg
aWYgKHBvcykNCj4+ID4gPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gc3Jpb3ZfaW5pdChkZXYs
IHBvcyk7DQo+PiA+ID4gPiAtDQo+PiA+ID4gPiArICAgICAgIGlmIChwb3MpIHsNCj4+ID4gPiA+
ICsgICAgICAgLyoNCj4+ID4gPiA+ICsgICAgICAgICogSWYgdGhlIGRldmljZSBpcyBhbiBBTUQg
Z3JhcGhpY3MgZGV2aWNlIGFuZCBpdCBzdXBwb3J0cw0KPj4gPiA+ID4gKyAgICAgICAgKiBTUi1J
T1YgaXQgd2lsbCByZXF1aXJlIGEgbGFyZ2UgYW1vdW50IG9mIHJlc291cmNlcy4NCj4+ID4gPiA+
ICsgICAgICAgICogQmVmb3JlIGNhbGxpbmcgc3Jpb3ZfaW5pdCgpIG11c3QgZW5zdXJlIHRoYXQg
dGhlIHN5c3RlbQ0KPj4gPiA+ID4gKyAgICAgICAgKiBCSU9TIGFsc28gc3VwcG9ydHMgU1ItSU9W
IGFuZCB0aGF0IHN5c3RlbSBCSU9TIGhhcyBiZWVuDQo+PiA+ID4gPiArICAgICAgICAqIGFibGUg
dG8gYWxsb2NhdGUgZW5vdWdoIHJlc291cmNlcy4NCj4+ID4gPiA+ICsgICAgICAgICogSWYgdGhl
IFZGIEJBUnMgYXJlIHplcm8gdGhlbiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBub3QNCj4+ID4gPiA+
ICsgICAgICAgICogc3VwcG9ydCBTUi1JT1Ygb3IgaXQgY291bGQgbm90IGFsbG9jYXRlIHRoZSBy
ZXNvdXJjZXMNCj4+ID4gPiA+ICsgICAgICAgICogYW5kIHRoaXMgcGxhdGZvcm0gd2lsbCBub3Qg
c3VwcG9ydCBBTUQgZ3JhcGhpY3MgU1ItSU9WLg0KPj4gPiA+ID4gKyAgICAgICAgKiBUaGVyZWZv
cmUgZG8gbm90IGNhbGwgc3Jpb3ZfaW5pdCgpLg0KPj4gPiA+ID4gKyAgICAgICAgKiBJZiB0aGUg
c3lzdGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlPViB0aGVuIHRoZSBWRiBCQVJzDQo+PiA+ID4g
PiArICAgICAgICAqIHdpbGwgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gbm9uLXplcm8gdmFs
dWVzLg0KPj4gPiA+ID4gKyAgICAgICAgKi8NCj4+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAo
aXNfYW1kX2Rpc3BsYXlfYWRhcHRlcihkZXYpKSB7DQo+PiA+ID4gPiArICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGNpX3ZmX2Jhcl92YWxpZChkZXYsIHBvcykpDQo+PiA+ID4gPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmlvdl9pbml0KGRldiwgcG9zKTsNCj4+
ID4gPiA+ICsgICAgICAgICAgICAgICB9IGVsc2Ugew0KPj4gPiA+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNyaW92X2luaXQoZGV2LCBwb3MpOw0KPj4gPiA+ID4gKyAgICAgICAg
ICAgICAgIH0NCj4+ID4gPiA+ICsgICAgICAgfQ0KPj4gPiA+ID4gICAgICAgICByZXR1cm4gLUVO
T0RFVjsNCj4+ID4gPiA+ICB9DQo+PiA+ID4gPg0KPj4gPiA+DQo+PiA+DQo+Pg0KPg0K

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-20  4:53                   ` Cheng, Collins
@ 2017-05-20 10:27                     ` Zytaruk, Kelly
  -1 siblings, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-20 10:27 UTC (permalink / raw)
  To: Cheng, Collins, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu



>-----Original Message-----
>From: Cheng, Collins
>Sent: Saturday, May 20, 2017 12:53 AM
>To: Alexander Duyck; Alex Williamson
>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>Deucher, Alexander; Zytaruk, Kelly; Yinghai Lu
>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>Hi Alex,
>
>Yes, I hope kernel can disable SR-IOV and related VF resource allocation if the
>system BIOS is not SR-IOV capable.
>
>Adding the parameter "pci=nosriov" sounds a doable solution, but it would need
>user to add this parameter manually, right? I think an automatic detection would
>be better. My patch is trying to auto detect and bypass VF resource allocation.
>
>
>-Collins Cheng
>

Collins, be careful about this.  I don't think that this is what we want.  If you add "pci=nosriov" then you are globally disabling SRIOV for all devices.  This is not the solution that we are looking for.
Remember that there are 3 types of SBIOS; 
"not SR-IOV capable", 
"SR-IOV capable but does not support large resources", 
"Complete SR-IOV support".

The problem is that we are trying to find a fix for "broken" SBIOS that does support SR-IOV but does not support the full SR-IOV capabilities that devices with large resources require.

Thanks,
Kelly

>
>-----Original Message-----
>From: Alexander Duyck [mailto:alexander.duyck@gmail.com]
>Sent: Friday, May 19, 2017 11:44 PM
>To: Alex Williamson <alex.williamson@redhat.com>
>Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas
><bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-
>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>;
>Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
><alex.williamson@redhat.com> wrote:
>> On Mon, 15 May 2017 08:19:28 +0000
>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>
>>> Hi Williamson,
>>>
>>> We cannot assume BIOS supports SR-IOV, actually only newer server
>motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older
>server motherboard BIOS doesn't support SR-IOV. This issue would happen if an
>user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>>
>> Servers should be supporting SR-IOV for a long time now.  What really
>> is there to a BIOS supporting SR-IOV anyway, it's simply reserving
>> sufficient bus number and MMIO resources such that we can enable the
>> VFs.  This process isn't exclusively reserved for the BIOS.  Some
>> platforms may choose to only initialize boot devices, leaving the rest
>> for the OS to program.  The initial proposal here to disable SR-IOV if
>> not programmed at OS hand-off disables even the possibility of the OS
>> reallocating resources for this device.
>
>There are differences between supporting SR-IOV and supporting SR-IOV on
>devices with massive resources. I know I have seen NICs that will keep a system
>from completing POST if SR-IOV is enabled, and MMIO beyond 4G is not. My
>guess would be that the issues being seen are probably that they disable SR-IOV in
>the BIOS in such a setup and end up running into issues when they try to boot into
>the Linux kernel as it goes through and tries to allocate resources for SR-IOV even
>though it was disabled in the BIOS.
>
>It might make sense to add a kernel parameter something like a "pci=nosriov"
>that would allow for disabling SR-IOV and related resource allocation if that is
>what we are talking about. That way you could plug in these types of devices into
>a system with a legacy bios or that doesn't wan to allocate addresses above 32b
>for MMIO, and this parameter would be all that is needed to disable SR-IOV so
>you could plug in a NIC that has SR-IOV associated with it.
>
>>> I agree that failure to allocate VF resources should leave the device in no
>worse condition than before it tried. I hope kernel could allocate PF device
>resource before allocating VF device resource, and keep PF device resource valid
>and functional if failed to allocate VF device resource.
>>>
>>> I will send out dmesg log lspci info tomorrow. Thanks.
>>
>> Thanks,
>> Alex
>>
>>> -----Original Message-----
>>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> Sent: Friday, May 12, 2017 10:43 PM
>>> To: Cheng, Collins <Collins.Cheng@amd.com>
>>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>>> linux-kernel@vger.kernel.org; Deucher, Alexander
>>> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;
>>> Yinghai Lu <yinghai@kernel.org>
>>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>> SR-IOV incapable platform
>>>
>>> On Fri, 12 May 2017 04:51:43 +0000
>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>
>>> > Hi Williamson,
>>> >
>>> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV
>NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(),
>it is safe and saving boot time, also there is no a better method to know if system
>BIOS has correctly initialized the SR-IOV capability or not.
>>>
>>> It also masks an underlying bug and creates a maintenance issue that we won't
>know when it's safe to remove this workaround.  I don't think faster boot is valid
>rationale, in one case SR-IOV is completely disabled, the other we attempt to
>allocate the resources the BIOS failed to provide.  I expect this is also a corner
>case, the BIOS should typically support SR-IOV, therefore this situation should be
>an exception.
>>>
>>> > I did not try to fix the issue from the kernel resource allocation perspective,
>it is because:
>>> >     1. I am not very familiar with the PCI resource allocation scheme in kernel.
>For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and
>PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is
>PF firstly, then this issue could be avoided.
>>> >     2. I am not sure if kernel has error handler if PCI resource allocation failed.
>In this case, kernel cannot allocate enough resource to PF. It should trigger some
>error handler to either just keep original BAR values set by system BIOS, or disable
>this device and log errors.
>>>
>>> I think these are the issues we should be trying to solve and I'm
>>> sure folks on the linux-pci list can help us identify the bug.
>>> Minimally, failure to allocate VF resources should leave the device
>>> in no worse condition than before it tried.  Perhaps you could post
>>> more details about the issue, boot with pci=earlydump, post dmesg of
>>> a boot where the PF resources are incorrectly re-allocated, and
>>> include lspci -vvv for the SR-IOV device.  Also, please test with the
>>> latest upstream kernel, upstream only patches old kernels through
>>> stable backports of commits to the latest kernel.  Adding Yinghai as
>>> a resource allocation expert. Thanks,
>>>
>>> Alex
>>>
>>> > -----Original Message-----
>>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> > Sent: Friday, May 12, 2017 12:01 PM
>>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>>> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>>> > linux-kernel@vger.kernel.org; Deucher, Alexander
>>> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
>>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>> > SR-IOV incapable platform
>>> >
>>> > On Fri, 12 May 2017 03:42:46 +0000
>>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>> >
>>> > > Hi Williamson,
>>> > >
>>> > > GPU card needs more BAR aperture resource than other PCI devices. For
>example, Intel SR-IOV network card only require 512KB memory resource for all
>VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for
>frame buffer BAR aperture.
>>> > >
>>> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all
>VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the
>enough resource for VF BARs, only PF BAR will be assigned and VF BARs are
>empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs
>are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The
>problem I saw is that kernel will fail to allocate PF BAR resource because some
>resources are assigned to VF, this is not expected. So kernel might need to do
>some check before re-assign the PF/VF resource, so that PF device will be
>correctly assigned BAR resource and user can use PF device.
>>> >
>>> > So the problem is that something bad happens when the kernel is
>>> > trying to reallocate resources in order to fulfill the requirements
>>> > of the VFs, leaving the PF resources incorrectly programmed?  Why
>>> > not just fix that bug rather than creating special handling for
>>> > this vendor/class of device which disables any attempt to fixup
>>> > resources for SR-IOV?  IOW, this patch just avoids the problem for
>>> > your devices rather than fixing the bug.  I'd suggest fixing the
>>> > bug such that the PF is left in a functional state if the kernel is
>>> > unable to allocate sufficient resources for the VFs.  Thanks,
>>> >
>>> > Alex
>>> >
>>> > > -----Original Message-----
>>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> > > Sent: Friday, May 12, 2017 11:21 AM
>>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>>> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,
>>> > > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>>> > > <Kelly.Zytaruk@amd.com>
>>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>> > > SR-IOV incapable platform
>>> > >
>>> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>>> > > <Collins.Cheng@amd.com> wrote:
>>> > >
>>> > > > Hi Helgaas,
>>> > > >
>>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>>> > > > platform. It would cause a problem on PCI resource allocation
>>> > > > in current Linux kernel.
>>> > > >
>>> > > > Therefore in order to allow the PF (Physical Function) device
>>> > > > of SR-IOV capable GPU to work on the SR-IOV incapable platform,
>>> > > > it is required to verify conditions for initializing BAR
>>> > > > resources on AMD SR-IOV capable GPUs.
>>> > > >
>>> > > > If the device is an AMD graphics device and it supports SR-IOV
>>> > > > it will require a large amount of resources.
>>> > > > Before calling sriov_init() must ensure that the system BIOS
>>> > > > also supports SR-IOV and that system BIOS has been able to
>>> > > > allocate enough resources.
>>> > > > If the VF BARs are zero then the system BIOS does not support
>>> > > > SR-IOV or it could not allocate the resources and this platform
>>> > > > will not support AMD graphics SR-IOV.
>>> > > > Therefore do not call sriov_init().
>>> > > > If the system BIOS does support SR-IOV then the VF BARs will be
>>> > > > properly initialized to non-zero values.
>>> > > >
>>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>> > > >
>>> > > > I checked the drivers/pci/quirks.c, it looks the
>>> > > > workarounds/fixes in quirks.c are for specific devices and one
>>> > > > or more device ID are defined for the specific devices. However
>>> > > > my patch is for all AMD SR-IOV capable GPUs, that includes all existing
>and future AMD server GPUs.
>>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>>> > >
>>> > >
>>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>>> > > always need to be able to deal with devices of any type where the
>>> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV
>>> > > devices can fit their VFs within a minimum bridge aperture, most
>>> > > cannot.  I don't understand why the VF resource requirements
>>> > > being exceptionally large dictates that they receive special handling.
>>> > > Thanks,
>>> > >
>>> > > Alex
>>> > >
>>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>>> > > > ---
>>> > > >  drivers/pci/iov.c | 63
>>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>>> > > >
>>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>>> > > > e30f05c..e4f1405 100644
>>> > > > --- a/drivers/pci/iov.c
>>> > > > +++ b/drivers/pci/iov.c
>>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev
>*dev)
>>> > > >                 msleep(100);
>>> > > >  }
>>> > > >
>>> > > > +/*
>>> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
>>> > > > + * @dev: the PCI device
>>> > > > + * @pos: register offset of SR-IOV capability in PCI config
>>> > > > +space
>>> > > > + * Returns true any VF BAR has resource allocated, false
>>> > > > + * if all VF BARs are empty.
>>> > > > + */
>>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>>> > > > +       int i;
>>> > > > +       u32 bar_value;
>>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>>> > > > +
>>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4,
>&bar_value);
>>> > > > +               if (bar_value & bar_size_mask)
>>> > > > +                       return true;
>>> > > > +       }
>>> > > > +
>>> > > > +       return false;
>>> > > > +}
>>> > > > +
>>> > > > +/*
>>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU
>>> > > > +device
>>> > > > + * @dev: the PCI device
>>> > > > + *
>>> > > > + * Returns true if device is an AMD/ATI display adapter,
>>> > > > + * otherwise return false.
>>> > > > + */
>>> > > > +
>>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>>> > > > +
>>> > > >  /**
>>> > > >   * pci_iov_init - initialize the IOV capability
>>> > > >   * @dev: the PCI device
>>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>> > > >                 return -ENODEV;
>>> > > >
>>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>>> > > > -       if (pos)
>>> > > > -               return sriov_init(dev, pos);
>>> > > > -
>>> > > > +       if (pos) {
>>> > > > +       /*
>>> > > > +        * If the device is an AMD graphics device and it supports
>>> > > > +        * SR-IOV it will require a large amount of resources.
>>> > > > +        * Before calling sriov_init() must ensure that the system
>>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>>> > > > +        * able to allocate enough resources.
>>> > > > +        * If the VF BARs are zero then the system BIOS does not
>>> > > > +        * support SR-IOV or it could not allocate the resources
>>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>>> > > > +        * Therefore do not call sriov_init().
>>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>>> > > > +        * will be properly initialized to non-zero values.
>>> > > > +        */
>>> > > > +               if (is_amd_display_adapter(dev)) {
>>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>>> > > > +                               return sriov_init(dev, pos);
>>> > > > +               } else {
>>> > > > +                       return sriov_init(dev, pos);
>>> > > > +               }
>>> > > > +       }
>>> > > >         return -ENODEV;
>>> > > >  }
>>> > > >
>>> > >
>>> >
>>>
>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-20 10:27                     ` Zytaruk, Kelly
  0 siblings, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-20 10:27 UTC (permalink / raw)
  To: Cheng, Collins, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu

DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IENoZW5nLCBDb2xsaW5zDQo+
U2VudDogU2F0dXJkYXksIE1heSAyMCwgMjAxNyAxMjo1MyBBTQ0KPlRvOiBBbGV4YW5kZXIgRHV5
Y2s7IEFsZXggV2lsbGlhbXNvbg0KPkNjOiBCam9ybiBIZWxnYWFzOyBsaW51eC1wY2lAdmdlci5r
ZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPkRldWNoZXIsIEFsZXhh
bmRlcjsgWnl0YXJ1aywgS2VsbHk7IFlpbmdoYWkgTHUNCj5TdWJqZWN0OiBSRTogW1BBVENIXSBQ
Q0k6IE1ha2UgU1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlIFNSLUlPVg0KPmluY2Fw
YWJsZSBwbGF0Zm9ybQ0KPg0KPkhpIEFsZXgsDQo+DQo+WWVzLCBJIGhvcGUga2VybmVsIGNhbiBk
aXNhYmxlIFNSLUlPViBhbmQgcmVsYXRlZCBWRiByZXNvdXJjZSBhbGxvY2F0aW9uIGlmIHRoZQ0K
PnN5c3RlbSBCSU9TIGlzIG5vdCBTUi1JT1YgY2FwYWJsZS4NCj4NCj5BZGRpbmcgdGhlIHBhcmFt
ZXRlciAicGNpPW5vc3Jpb3YiIHNvdW5kcyBhIGRvYWJsZSBzb2x1dGlvbiwgYnV0IGl0IHdvdWxk
IG5lZWQNCj51c2VyIHRvIGFkZCB0aGlzIHBhcmFtZXRlciBtYW51YWxseSwgcmlnaHQ/IEkgdGhp
bmsgYW4gYXV0b21hdGljIGRldGVjdGlvbiB3b3VsZA0KPmJlIGJldHRlci4gTXkgcGF0Y2ggaXMg
dHJ5aW5nIHRvIGF1dG8gZGV0ZWN0IGFuZCBieXBhc3MgVkYgcmVzb3VyY2UgYWxsb2NhdGlvbi4N
Cj4NCj4NCj4tQ29sbGlucyBDaGVuZw0KPg0KDQpDb2xsaW5zLCBiZSBjYXJlZnVsIGFib3V0IHRo
aXMuICBJIGRvbid0IHRoaW5rIHRoYXQgdGhpcyBpcyB3aGF0IHdlIHdhbnQuICBJZiB5b3UgYWRk
ICJwY2k9bm9zcmlvdiIgdGhlbiB5b3UgYXJlIGdsb2JhbGx5IGRpc2FibGluZyBTUklPViBmb3Ig
YWxsIGRldmljZXMuICBUaGlzIGlzIG5vdCB0aGUgc29sdXRpb24gdGhhdCB3ZSBhcmUgbG9va2lu
ZyBmb3IuDQpSZW1lbWJlciB0aGF0IHRoZXJlIGFyZSAzIHR5cGVzIG9mIFNCSU9TOyANCiJub3Qg
U1ItSU9WIGNhcGFibGUiLCANCiJTUi1JT1YgY2FwYWJsZSBidXQgZG9lcyBub3Qgc3VwcG9ydCBs
YXJnZSByZXNvdXJjZXMiLCANCiJDb21wbGV0ZSBTUi1JT1Ygc3VwcG9ydCIuDQoNClRoZSBwcm9i
bGVtIGlzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBmaW5kIGEgZml4IGZvciAiYnJva2VuIiBTQklP
UyB0aGF0IGRvZXMgc3VwcG9ydCBTUi1JT1YgYnV0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZ1bGwg
U1ItSU9WIGNhcGFiaWxpdGllcyB0aGF0IGRldmljZXMgd2l0aCBsYXJnZSByZXNvdXJjZXMgcmVx
dWlyZS4NCg0KVGhhbmtzLA0KS2VsbHkNCg0KPg0KPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQo+RnJvbTogQWxleGFuZGVyIER1eWNrIFttYWlsdG86YWxleGFuZGVyLmR1eWNrQGdtYWlsLmNv
bV0NCj5TZW50OiBGcmlkYXksIE1heSAxOSwgMjAxNyAxMTo0NCBQTQ0KPlRvOiBBbGV4IFdpbGxp
YW1zb24gPGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tPg0KPkNjOiBDaGVuZywgQ29sbGlucyA8
Q29sbGlucy5DaGVuZ0BhbWQuY29tPjsgQmpvcm4gSGVsZ2Fhcw0KPjxiaGVsZ2Fhc0Bnb29nbGUu
Y29tPjsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgbGludXgtDQo+a2VybmVsQHZnZXIua2Vy
bmVsLm9yZzsgRGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsN
Cj5aeXRhcnVrLCBLZWxseSA8S2VsbHkuWnl0YXJ1a0BhbWQuY29tPjsgWWluZ2hhaSBMdSA8eWlu
Z2hhaUBrZXJuZWwub3JnPg0KPlN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogTWFrZSBTUi1JT1Yg
Y2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUgU1ItSU9WDQo+aW5jYXBhYmxlIHBsYXRmb3JtDQo+
DQo+T24gTW9uLCBNYXkgMTUsIDIwMTcgYXQgMTA6NTMgQU0sIEFsZXggV2lsbGlhbXNvbg0KPjxh
bGV4LndpbGxpYW1zb25AcmVkaGF0LmNvbT4gd3JvdGU6DQo+PiBPbiBNb24sIDE1IE1heSAyMDE3
IDA4OjE5OjI4ICswMDAwDQo+PiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFtZC5j
b20+IHdyb3RlOg0KPj4NCj4+PiBIaSBXaWxsaWFtc29uLA0KPj4+DQo+Pj4gV2UgY2Fubm90IGFz
c3VtZSBCSU9TIHN1cHBvcnRzIFNSLUlPViwgYWN0dWFsbHkgb25seSBuZXdlciBzZXJ2ZXINCj5t
b3RoZXJib2FyZCBCSU9TIHN1cHBvcnRzIFNSLUlPVi4gTm9ybWFsIGRlc2t0b3AgbW90aGVyYm9h
cmQgQklPUyBvciBvbGRlcg0KPnNlcnZlciBtb3RoZXJib2FyZCBCSU9TIGRvZXNuJ3Qgc3VwcG9y
dCBTUi1JT1YuIFRoaXMgaXNzdWUgd291bGQgaGFwcGVuIGlmIGFuDQo+dXNlciBwbHVncyBvdXIg
QU1EIFNSLUlPViBjYXBhYmxlIEdQVSBjYXJkIHRvIGEgbm9ybWFsIGRlc2t0b3AgbW90aGVyYm9h
cmQuDQo+Pg0KPj4gU2VydmVycyBzaG91bGQgYmUgc3VwcG9ydGluZyBTUi1JT1YgZm9yIGEgbG9u
ZyB0aW1lIG5vdy4gIFdoYXQgcmVhbGx5DQo+PiBpcyB0aGVyZSB0byBhIEJJT1Mgc3VwcG9ydGlu
ZyBTUi1JT1YgYW55d2F5LCBpdCdzIHNpbXBseSByZXNlcnZpbmcNCj4+IHN1ZmZpY2llbnQgYnVz
IG51bWJlciBhbmQgTU1JTyByZXNvdXJjZXMgc3VjaCB0aGF0IHdlIGNhbiBlbmFibGUgdGhlDQo+
PiBWRnMuICBUaGlzIHByb2Nlc3MgaXNuJ3QgZXhjbHVzaXZlbHkgcmVzZXJ2ZWQgZm9yIHRoZSBC
SU9TLiAgU29tZQ0KPj4gcGxhdGZvcm1zIG1heSBjaG9vc2UgdG8gb25seSBpbml0aWFsaXplIGJv
b3QgZGV2aWNlcywgbGVhdmluZyB0aGUgcmVzdA0KPj4gZm9yIHRoZSBPUyB0byBwcm9ncmFtLiAg
VGhlIGluaXRpYWwgcHJvcG9zYWwgaGVyZSB0byBkaXNhYmxlIFNSLUlPViBpZg0KPj4gbm90IHBy
b2dyYW1tZWQgYXQgT1MgaGFuZC1vZmYgZGlzYWJsZXMgZXZlbiB0aGUgcG9zc2liaWxpdHkgb2Yg
dGhlIE9TDQo+PiByZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciB0aGlzIGRldmljZS4NCj4NCj5U
aGVyZSBhcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzdXBwb3J0aW5nIFNSLUlPViBhbmQgc3VwcG9y
dGluZyBTUi1JT1Ygb24NCj5kZXZpY2VzIHdpdGggbWFzc2l2ZSByZXNvdXJjZXMuIEkga25vdyBJ
IGhhdmUgc2VlbiBOSUNzIHRoYXQgd2lsbCBrZWVwIGEgc3lzdGVtDQo+ZnJvbSBjb21wbGV0aW5n
IFBPU1QgaWYgU1ItSU9WIGlzIGVuYWJsZWQsIGFuZCBNTUlPIGJleW9uZCA0RyBpcyBub3QuIE15
DQo+Z3Vlc3Mgd291bGQgYmUgdGhhdCB0aGUgaXNzdWVzIGJlaW5nIHNlZW4gYXJlIHByb2JhYmx5
IHRoYXQgdGhleSBkaXNhYmxlIFNSLUlPViBpbg0KPnRoZSBCSU9TIGluIHN1Y2ggYSBzZXR1cCBh
bmQgZW5kIHVwIHJ1bm5pbmcgaW50byBpc3N1ZXMgd2hlbiB0aGV5IHRyeSB0byBib290IGludG8N
Cj50aGUgTGludXgga2VybmVsIGFzIGl0IGdvZXMgdGhyb3VnaCBhbmQgdHJpZXMgdG8gYWxsb2Nh
dGUgcmVzb3VyY2VzIGZvciBTUi1JT1YgZXZlbg0KPnRob3VnaCBpdCB3YXMgZGlzYWJsZWQgaW4g
dGhlIEJJT1MuDQo+DQo+SXQgbWlnaHQgbWFrZSBzZW5zZSB0byBhZGQgYSBrZXJuZWwgcGFyYW1l
dGVyIHNvbWV0aGluZyBsaWtlIGEgInBjaT1ub3NyaW92Ig0KPnRoYXQgd291bGQgYWxsb3cgZm9y
IGRpc2FibGluZyBTUi1JT1YgYW5kIHJlbGF0ZWQgcmVzb3VyY2UgYWxsb2NhdGlvbiBpZiB0aGF0
IGlzDQo+d2hhdCB3ZSBhcmUgdGFsa2luZyBhYm91dC4gVGhhdCB3YXkgeW91IGNvdWxkIHBsdWcg
aW4gdGhlc2UgdHlwZXMgb2YgZGV2aWNlcyBpbnRvDQo+YSBzeXN0ZW0gd2l0aCBhIGxlZ2FjeSBi
aW9zIG9yIHRoYXQgZG9lc24ndCB3YW4gdG8gYWxsb2NhdGUgYWRkcmVzc2VzIGFib3ZlIDMyYg0K
PmZvciBNTUlPLCBhbmQgdGhpcyBwYXJhbWV0ZXIgd291bGQgYmUgYWxsIHRoYXQgaXMgbmVlZGVk
IHRvIGRpc2FibGUgU1ItSU9WIHNvDQo+eW91IGNvdWxkIHBsdWcgaW4gYSBOSUMgdGhhdCBoYXMg
U1ItSU9WIGFzc29jaWF0ZWQgd2l0aCBpdC4NCj4NCj4+PiBJIGFncmVlIHRoYXQgZmFpbHVyZSB0
byBhbGxvY2F0ZSBWRiByZXNvdXJjZXMgc2hvdWxkIGxlYXZlIHRoZSBkZXZpY2UgaW4gbm8NCj53
b3JzZSBjb25kaXRpb24gdGhhbiBiZWZvcmUgaXQgdHJpZWQuIEkgaG9wZSBrZXJuZWwgY291bGQg
YWxsb2NhdGUgUEYgZGV2aWNlDQo+cmVzb3VyY2UgYmVmb3JlIGFsbG9jYXRpbmcgVkYgZGV2aWNl
IHJlc291cmNlLCBhbmQga2VlcCBQRiBkZXZpY2UgcmVzb3VyY2UgdmFsaWQNCj5hbmQgZnVuY3Rp
b25hbCBpZiBmYWlsZWQgdG8gYWxsb2NhdGUgVkYgZGV2aWNlIHJlc291cmNlLg0KPj4+DQo+Pj4g
SSB3aWxsIHNlbmQgb3V0IGRtZXNnIGxvZyBsc3BjaSBpbmZvIHRvbW9ycm93LiBUaGFua3MuDQo+
Pg0KPj4gVGhhbmtzLA0KPj4gQWxleA0KPj4NCj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t
LQ0KPj4+IEZyb206IEFsZXggV2lsbGlhbXNvbiBbbWFpbHRvOmFsZXgud2lsbGlhbXNvbkByZWRo
YXQuY29tXQ0KPj4+IFNlbnQ6IEZyaWRheSwgTWF5IDEyLCAyMDE3IDEwOjQzIFBNDQo+Pj4gVG86
IENoZW5nLCBDb2xsaW5zIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+DQo+Pj4gQ2M6IEJqb3JuIEhl
bGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOw0K
Pj4+IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsIEFsZXhhbmRlcg0KPj4+
IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkgPEtlbGx5Llp5dGFy
dWtAYW1kLmNvbT47DQo+Pj4gWWluZ2hhaSBMdSA8eWluZ2hhaUBrZXJuZWwub3JnPg0KPj4+IFN1
YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogTWFrZSBTUi1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBv
biB0aGUNCj4+PiBTUi1JT1YgaW5jYXBhYmxlIHBsYXRmb3JtDQo+Pj4NCj4+PiBPbiBGcmksIDEy
IE1heSAyMDE3IDA0OjUxOjQzICswMDAwDQo+Pj4gIkNoZW5nLCBDb2xsaW5zIiA8Q29sbGlucy5D
aGVuZ0BhbWQuY29tPiB3cm90ZToNCj4+Pg0KPj4+ID4gSGkgV2lsbGlhbXNvbiwNCj4+PiA+DQo+
Pj4gPiBJIHZlcmlmaWVkIHRoZSBwYXRjaCBpcyB3b3JraW5nIGZvciBib3RoIEFNRCBTUi1JT1Yg
R1BVIGFuZCBJbnRlbCBTUi1JT1YNCj5OSUMuIEkgZG9uJ3QgdGhpbmsgaXQgaXMgcmVkdW5kYW50
IHRvIGNoZWNrIHRoZSBWRiBCQVIgdmFsaWQgYmVmb3JlIGNhbGwgc3Jpb3ZfaW5pdCgpLA0KPml0
IGlzIHNhZmUgYW5kIHNhdmluZyBib290IHRpbWUsIGFsc28gdGhlcmUgaXMgbm8gYSBiZXR0ZXIg
bWV0aG9kIHRvIGtub3cgaWYgc3lzdGVtDQo+QklPUyBoYXMgY29ycmVjdGx5IGluaXRpYWxpemVk
IHRoZSBTUi1JT1YgY2FwYWJpbGl0eSBvciBub3QuDQo+Pj4NCj4+PiBJdCBhbHNvIG1hc2tzIGFu
IHVuZGVybHlpbmcgYnVnIGFuZCBjcmVhdGVzIGEgbWFpbnRlbmFuY2UgaXNzdWUgdGhhdCB3ZSB3
b24ndA0KPmtub3cgd2hlbiBpdCdzIHNhZmUgdG8gcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZC4gIEkg
ZG9uJ3QgdGhpbmsgZmFzdGVyIGJvb3QgaXMgdmFsaWQNCj5yYXRpb25hbGUsIGluIG9uZSBjYXNl
IFNSLUlPViBpcyBjb21wbGV0ZWx5IGRpc2FibGVkLCB0aGUgb3RoZXIgd2UgYXR0ZW1wdCB0bw0K
PmFsbG9jYXRlIHRoZSByZXNvdXJjZXMgdGhlIEJJT1MgZmFpbGVkIHRvIHByb3ZpZGUuICBJIGV4
cGVjdCB0aGlzIGlzIGFsc28gYSBjb3JuZXINCj5jYXNlLCB0aGUgQklPUyBzaG91bGQgdHlwaWNh
bGx5IHN1cHBvcnQgU1ItSU9WLCB0aGVyZWZvcmUgdGhpcyBzaXR1YXRpb24gc2hvdWxkIGJlDQo+
YW4gZXhjZXB0aW9uLg0KPj4+DQo+Pj4gPiBJIGRpZCBub3QgdHJ5IHRvIGZpeCB0aGUgaXNzdWUg
ZnJvbSB0aGUga2VybmVsIHJlc291cmNlIGFsbG9jYXRpb24gcGVyc3BlY3RpdmUsDQo+aXQgaXMg
YmVjYXVzZToNCj4+PiA+ICAgICAxLiBJIGFtIG5vdCB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIFBD
SSByZXNvdXJjZSBhbGxvY2F0aW9uIHNjaGVtZSBpbiBrZXJuZWwuDQo+Rm9yIGV4YW1wbGUsIGlu
IHNyaW92X2luaXQoKSwga2VybmVsIHdpbGwgcmUtYXNzaWduIHRoZSBQQ0kgcmVzb3VyY2UgZm9y
IGJvdGggVkYgYW5kDQo+UEYuIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkga2VybmVsIGFsbG9jYXRl
cyByZXNvdXJjZSBmb3IgVkYgZmlyc3RseSwgdGhlbiBQRi4gSWYgaXQgaXMNCj5QRiBmaXJzdGx5
LCB0aGVuIHRoaXMgaXNzdWUgY291bGQgYmUgYXZvaWRlZC4NCj4+PiA+ICAgICAyLiBJIGFtIG5v
dCBzdXJlIGlmIGtlcm5lbCBoYXMgZXJyb3IgaGFuZGxlciBpZiBQQ0kgcmVzb3VyY2UgYWxsb2Nh
dGlvbiBmYWlsZWQuDQo+SW4gdGhpcyBjYXNlLCBrZXJuZWwgY2Fubm90IGFsbG9jYXRlIGVub3Vn
aCByZXNvdXJjZSB0byBQRi4gSXQgc2hvdWxkIHRyaWdnZXIgc29tZQ0KPmVycm9yIGhhbmRsZXIg
dG8gZWl0aGVyIGp1c3Qga2VlcCBvcmlnaW5hbCBCQVIgdmFsdWVzIHNldCBieSBzeXN0ZW0gQklP
Uywgb3IgZGlzYWJsZQ0KPnRoaXMgZGV2aWNlIGFuZCBsb2cgZXJyb3JzLg0KPj4+DQo+Pj4gSSB0
aGluayB0aGVzZSBhcmUgdGhlIGlzc3VlcyB3ZSBzaG91bGQgYmUgdHJ5aW5nIHRvIHNvbHZlIGFu
ZCBJJ20NCj4+PiBzdXJlIGZvbGtzIG9uIHRoZSBsaW51eC1wY2kgbGlzdCBjYW4gaGVscCB1cyBp
ZGVudGlmeSB0aGUgYnVnLg0KPj4+IE1pbmltYWxseSwgZmFpbHVyZSB0byBhbGxvY2F0ZSBWRiBy
ZXNvdXJjZXMgc2hvdWxkIGxlYXZlIHRoZSBkZXZpY2UNCj4+PiBpbiBubyB3b3JzZSBjb25kaXRp
b24gdGhhbiBiZWZvcmUgaXQgdHJpZWQuICBQZXJoYXBzIHlvdSBjb3VsZCBwb3N0DQo+Pj4gbW9y
ZSBkZXRhaWxzIGFib3V0IHRoZSBpc3N1ZSwgYm9vdCB3aXRoIHBjaT1lYXJseWR1bXAsIHBvc3Qg
ZG1lc2cgb2YNCj4+PiBhIGJvb3Qgd2hlcmUgdGhlIFBGIHJlc291cmNlcyBhcmUgaW5jb3JyZWN0
bHkgcmUtYWxsb2NhdGVkLCBhbmQNCj4+PiBpbmNsdWRlIGxzcGNpIC12dnYgZm9yIHRoZSBTUi1J
T1YgZGV2aWNlLiAgQWxzbywgcGxlYXNlIHRlc3Qgd2l0aCB0aGUNCj4+PiBsYXRlc3QgdXBzdHJl
YW0ga2VybmVsLCB1cHN0cmVhbSBvbmx5IHBhdGNoZXMgb2xkIGtlcm5lbHMgdGhyb3VnaA0KPj4+
IHN0YWJsZSBiYWNrcG9ydHMgb2YgY29tbWl0cyB0byB0aGUgbGF0ZXN0IGtlcm5lbC4gIEFkZGlu
ZyBZaW5naGFpIGFzDQo+Pj4gYSByZXNvdXJjZSBhbGxvY2F0aW9uIGV4cGVydC4gVGhhbmtzLA0K
Pj4+DQo+Pj4gQWxleA0KPj4+DQo+Pj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4+
ID4gRnJvbTogQWxleCBXaWxsaWFtc29uIFttYWlsdG86YWxleC53aWxsaWFtc29uQHJlZGhhdC5j
b21dDQo+Pj4gPiBTZW50OiBGcmlkYXksIE1heSAxMiwgMjAxNyAxMjowMSBQTQ0KPj4+ID4gVG86
IENoZW5nLCBDb2xsaW5zIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+DQo+Pj4gPiBDYzogQmpvcm4g
SGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT47IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7
DQo+Pj4gPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBEZXVjaGVyLCBBbGV4YW5kZXIN
Cj4+PiA+IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkgPEtlbGx5
Llp5dGFydWtAYW1kLmNvbT4NCj4+PiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogTWFrZSBT
Ui1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUNCj4+PiA+IFNSLUlPViBpbmNhcGFibGUg
cGxhdGZvcm0NCj4+PiA+DQo+Pj4gPiBPbiBGcmksIDEyIE1heSAyMDE3IDAzOjQyOjQ2ICswMDAw
DQo+Pj4gPiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+IHdyb3RlOg0K
Pj4+ID4NCj4+PiA+ID4gSGkgV2lsbGlhbXNvbiwNCj4+PiA+ID4NCj4+PiA+ID4gR1BVIGNhcmQg
bmVlZHMgbW9yZSBCQVIgYXBlcnR1cmUgcmVzb3VyY2UgdGhhbiBvdGhlciBQQ0kgZGV2aWNlcy4g
Rm9yDQo+ZXhhbXBsZSwgSW50ZWwgU1ItSU9WIG5ldHdvcmsgY2FyZCBvbmx5IHJlcXVpcmUgNTEy
S0IgbWVtb3J5IHJlc291cmNlIGZvciBhbGwNCj5WRnMuIEFNRCBTUi1JT1YgR1BVIGNhcmQgbmVl
ZHMgMjU2TUIgeDE2IFZGID0gNEdCIG1lbW9yeSByZXNvdXJjZSBmb3INCj5mcmFtZSBidWZmZXIg
QkFSIGFwZXJ0dXJlLg0KPj4+ID4gPg0KPj4+ID4gPiBJZiB0aGUgc3lzdGVtIEJJT1Mgc3VwcG9y
dHMgU1ItSU9WLCBpdCB3aWxsIHJlc2VydmUgZW5vdWdoIHJlc291cmNlIGZvciBhbGwNCj5WRiBC
QVJzLiBJZiB0aGUgc3lzdGVtIEJJT1MgZG9lc24ndCBzdXBwb3J0IFNSLUlPViBvciBjYW5ub3Qg
YWxsb2NhdGUgdGhlDQo+ZW5vdWdoIHJlc291cmNlIGZvciBWRiBCQVJzLCBvbmx5IFBGIEJBUiB3
aWxsIGJlIGFzc2lnbmVkIGFuZCBWRiBCQVJzIGFyZQ0KPmVtcHR5LiBUaGVuIHN5c3RlbSBib290
cyB0byBMaW51eCBrZXJuZWwgYW5kIGtlcm5lbCBkb2Vzbid0IGNoZWNrIGlmIHRoZSBWRiBCQVJz
DQo+YXJlIGVtcHR5IG9yIHZhbGlkLiBLZXJuZWwgd2lsbCByZS1hc3NpZ24gdGhlIEJBUiByZXNv
dXJjZXMgZm9yIFBGIGFuZCBhbGwgVkZzLiBUaGUNCj5wcm9ibGVtIEkgc2F3IGlzIHRoYXQga2Vy
bmVsIHdpbGwgZmFpbCB0byBhbGxvY2F0ZSBQRiBCQVIgcmVzb3VyY2UgYmVjYXVzZSBzb21lDQo+
cmVzb3VyY2VzIGFyZSBhc3NpZ25lZCB0byBWRiwgdGhpcyBpcyBub3QgZXhwZWN0ZWQuIFNvIGtl
cm5lbCBtaWdodCBuZWVkIHRvIGRvDQo+c29tZSBjaGVjayBiZWZvcmUgcmUtYXNzaWduIHRoZSBQ
Ri9WRiByZXNvdXJjZSwgc28gdGhhdCBQRiBkZXZpY2Ugd2lsbCBiZQ0KPmNvcnJlY3RseSBhc3Np
Z25lZCBCQVIgcmVzb3VyY2UgYW5kIHVzZXIgY2FuIHVzZSBQRiBkZXZpY2UuDQo+Pj4gPg0KPj4+
ID4gU28gdGhlIHByb2JsZW0gaXMgdGhhdCBzb21ldGhpbmcgYmFkIGhhcHBlbnMgd2hlbiB0aGUg
a2VybmVsIGlzDQo+Pj4gPiB0cnlpbmcgdG8gcmVhbGxvY2F0ZSByZXNvdXJjZXMgaW4gb3JkZXIg
dG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRzDQo+Pj4gPiBvZiB0aGUgVkZzLCBsZWF2aW5nIHRo
ZSBQRiByZXNvdXJjZXMgaW5jb3JyZWN0bHkgcHJvZ3JhbW1lZD8gIFdoeQ0KPj4+ID4gbm90IGp1
c3QgZml4IHRoYXQgYnVnIHJhdGhlciB0aGFuIGNyZWF0aW5nIHNwZWNpYWwgaGFuZGxpbmcgZm9y
DQo+Pj4gPiB0aGlzIHZlbmRvci9jbGFzcyBvZiBkZXZpY2Ugd2hpY2ggZGlzYWJsZXMgYW55IGF0
dGVtcHQgdG8gZml4dXANCj4+PiA+IHJlc291cmNlcyBmb3IgU1ItSU9WPyAgSU9XLCB0aGlzIHBh
dGNoIGp1c3QgYXZvaWRzIHRoZSBwcm9ibGVtIGZvcg0KPj4+ID4geW91ciBkZXZpY2VzIHJhdGhl
ciB0aGFuIGZpeGluZyB0aGUgYnVnLiAgSSdkIHN1Z2dlc3QgZml4aW5nIHRoZQ0KPj4+ID4gYnVn
IHN1Y2ggdGhhdCB0aGUgUEYgaXMgbGVmdCBpbiBhIGZ1bmN0aW9uYWwgc3RhdGUgaWYgdGhlIGtl
cm5lbCBpcw0KPj4+ID4gdW5hYmxlIHRvIGFsbG9jYXRlIHN1ZmZpY2llbnQgcmVzb3VyY2VzIGZv
ciB0aGUgVkZzLiAgVGhhbmtzLA0KPj4+ID4NCj4+PiA+IEFsZXgNCj4+PiA+DQo+Pj4gPiA+IC0t
LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+Pj4gPiA+IEZyb206IEFsZXggV2lsbGlhbXNvbiBb
bWFpbHRvOmFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tXQ0KPj4+ID4gPiBTZW50OiBGcmlkYXks
IE1heSAxMiwgMjAxNyAxMToyMSBBTQ0KPj4+ID4gPiBUbzogQ2hlbmcsIENvbGxpbnMgPENvbGxp
bnMuQ2hlbmdAYW1kLmNvbT4NCj4+PiA+ID4gQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdv
b2dsZS5jb20+Ow0KPj4+ID4gPiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJu
ZWxAdmdlci5rZXJuZWwub3JnOyBEZXVjaGVyLA0KPj4+ID4gPiBBbGV4YW5kZXIgPEFsZXhhbmRl
ci5EZXVjaGVyQGFtZC5jb20+OyBaeXRhcnVrLCBLZWxseQ0KPj4+ID4gPiA8S2VsbHkuWnl0YXJ1
a0BhbWQuY29tPg0KPj4+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIXSBQQ0k6IE1ha2UgU1ItSU9W
IGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlDQo+Pj4gPiA+IFNSLUlPViBpbmNhcGFibGUgcGxh
dGZvcm0NCj4+PiA+ID4NCj4+PiA+ID4gT24gRnJpLCAxMiBNYXkgMjAxNyAwMjo1MDozMiArMDAw
MCAiQ2hlbmcsIENvbGxpbnMiDQo+Pj4gPiA+IDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+IHdyb3Rl
Og0KPj4+ID4gPg0KPj4+ID4gPiA+IEhpIEhlbGdhYXMsDQo+Pj4gPiA+ID4NCj4+PiA+ID4gPiBT
b21lIEFNRCBHUFVzIGhhdmUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgZ3JhcGhpY3MgU1ItSU9WLg0K
Pj4+ID4gPiA+IElmIHRoZSBTUi1JT1YgY2FwYWJsZSBHUFUgaXMgcGx1Z2dlZCBpbnRvIHRoZSBT
Ui1JT1YgaW5jYXBhYmxlDQo+Pj4gPiA+ID4gcGxhdGZvcm0uIEl0IHdvdWxkIGNhdXNlIGEgcHJv
YmxlbSBvbiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbg0KPj4+ID4gPiA+IGluIGN1cnJlbnQgTGlu
dXgga2VybmVsLg0KPj4+ID4gPiA+DQo+Pj4gPiA+ID4gVGhlcmVmb3JlIGluIG9yZGVyIHRvIGFs
bG93IHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRldmljZQ0KPj4+ID4gPiA+IG9mIFNSLUlP
ViBjYXBhYmxlIEdQVSB0byB3b3JrIG9uIHRoZSBTUi1JT1YgaW5jYXBhYmxlIHBsYXRmb3JtLA0K
Pj4+ID4gPiA+IGl0IGlzIHJlcXVpcmVkIHRvIHZlcmlmeSBjb25kaXRpb25zIGZvciBpbml0aWFs
aXppbmcgQkFSDQo+Pj4gPiA+ID4gcmVzb3VyY2VzIG9uIEFNRCBTUi1JT1YgY2FwYWJsZSBHUFVz
Lg0KPj4+ID4gPiA+DQo+Pj4gPiA+ID4gSWYgdGhlIGRldmljZSBpcyBhbiBBTUQgZ3JhcGhpY3Mg
ZGV2aWNlIGFuZCBpdCBzdXBwb3J0cyBTUi1JT1YNCj4+PiA+ID4gPiBpdCB3aWxsIHJlcXVpcmUg
YSBsYXJnZSBhbW91bnQgb2YgcmVzb3VyY2VzLg0KPj4+ID4gPiA+IEJlZm9yZSBjYWxsaW5nIHNy
aW92X2luaXQoKSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gQklPUw0KPj4+ID4gPiA+IGFs
c28gc3VwcG9ydHMgU1ItSU9WIGFuZCB0aGF0IHN5c3RlbSBCSU9TIGhhcyBiZWVuIGFibGUgdG8N
Cj4+PiA+ID4gPiBhbGxvY2F0ZSBlbm91Z2ggcmVzb3VyY2VzLg0KPj4+ID4gPiA+IElmIHRoZSBW
RiBCQVJzIGFyZSB6ZXJvIHRoZW4gdGhlIHN5c3RlbSBCSU9TIGRvZXMgbm90IHN1cHBvcnQNCj4+
PiA+ID4gPiBTUi1JT1Ygb3IgaXQgY291bGQgbm90IGFsbG9jYXRlIHRoZSByZXNvdXJjZXMgYW5k
IHRoaXMgcGxhdGZvcm0NCj4+PiA+ID4gPiB3aWxsIG5vdCBzdXBwb3J0IEFNRCBncmFwaGljcyBT
Ui1JT1YuDQo+Pj4gPiA+ID4gVGhlcmVmb3JlIGRvIG5vdCBjYWxsIHNyaW92X2luaXQoKS4NCj4+
PiA+ID4gPiBJZiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlPViB0aGVuIHRoZSBW
RiBCQVJzIHdpbGwgYmUNCj4+PiA+ID4gPiBwcm9wZXJseSBpbml0aWFsaXplZCB0byBub24temVy
byB2YWx1ZXMuDQo+Pj4gPiA+ID4NCj4+PiA+ID4gPiBCZWxvdyBpcyB0aGUgcGF0Y2ggYWdhaW5z
dCB0byBLZXJuZWwgNC44ICYgNC45LiBQbGVhc2UgcmV2aWV3Lg0KPj4+ID4gPiA+DQo+Pj4gPiA+
ID4gSSBjaGVja2VkIHRoZSBkcml2ZXJzL3BjaS9xdWlya3MuYywgaXQgbG9va3MgdGhlDQo+Pj4g
PiA+ID4gd29ya2Fyb3VuZHMvZml4ZXMgaW4gcXVpcmtzLmMgYXJlIGZvciBzcGVjaWZpYyBkZXZp
Y2VzIGFuZCBvbmUNCj4+PiA+ID4gPiBvciBtb3JlIGRldmljZSBJRCBhcmUgZGVmaW5lZCBmb3Ig
dGhlIHNwZWNpZmljIGRldmljZXMuIEhvd2V2ZXINCj4+PiA+ID4gPiBteSBwYXRjaCBpcyBmb3Ig
YWxsIEFNRCBTUi1JT1YgY2FwYWJsZSBHUFVzLCB0aGF0IGluY2x1ZGVzIGFsbCBleGlzdGluZw0K
PmFuZCBmdXR1cmUgQU1EIHNlcnZlciBHUFVzLg0KPj4+ID4gPiA+IFNvIGl0IGRvZXNuJ3Qgc2Vl
bSBsaWtlIGEgZ29vZCBmaXQgdG8gcHV0IHRoZSBmaXggaW4gcXVpcmtzLmMuDQo+Pj4gPiA+DQo+
Pj4gPiA+DQo+Pj4gPiA+IFdoeSBpcyBhbiBBTUQgZ3JhcGhpY3MgY2FyZCB1bmlxdWUgaGVyZT8g
IERvZXNuJ3Qgc3Jpb3ZfaW5pdCgpDQo+Pj4gPiA+IGFsd2F5cyBuZWVkIHRvIGJlIGFibGUgdG8g
ZGVhbCB3aXRoIGRldmljZXMgb2YgYW55IHR5cGUgd2hlcmUgdGhlDQo+Pj4gPiA+IEJJT1MgaGFz
bid0IGluaXRpYWxpemVkIHRoZSBTUi1JT1YgY2FwYWJpbGl0eT8gIFNvbWUgU1ItSU9WDQo+Pj4g
PiA+IGRldmljZXMgY2FuIGZpdCB0aGVpciBWRnMgd2l0aGluIGEgbWluaW11bSBicmlkZ2UgYXBl
cnR1cmUsIG1vc3QNCj4+PiA+ID4gY2Fubm90LiAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGUg
VkYgcmVzb3VyY2UgcmVxdWlyZW1lbnRzDQo+Pj4gPiA+IGJlaW5nIGV4Y2VwdGlvbmFsbHkgbGFy
Z2UgZGljdGF0ZXMgdGhhdCB0aGV5IHJlY2VpdmUgc3BlY2lhbCBoYW5kbGluZy4NCj4+PiA+ID4g
VGhhbmtzLA0KPj4+ID4gPg0KPj4+ID4gPiBBbGV4DQo+Pj4gPiA+DQo+Pj4gPiA+ID4gU2lnbmVk
LW9mZi1ieTogQ29sbGlucyBDaGVuZyA8Y29sbGlucy5jaGVuZ0BhbWQuY29tPg0KPj4+ID4gPiA+
IC0tLQ0KPj4+ID4gPiA+ICBkcml2ZXJzL3BjaS9pb3YuYyB8IDYzDQo+Pj4gPiA+ID4gKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQ0KPj4+ID4g
PiA+ICAxIGZpbGUgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4+
PiA+ID4gPg0KPj4+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3YuYyBiL2RyaXZl
cnMvcGNpL2lvdi5jIGluZGV4DQo+Pj4gPiA+ID4gZTMwZjA1Yy4uZTRmMTQwNSAxMDA2NDQNCj4+
PiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BjaS9pb3YuYw0KPj4+ID4gPiA+ICsrKyBiL2RyaXZlcnMv
cGNpL2lvdi5jDQo+Pj4gPiA+ID4gQEAgLTUyMyw2ICs1MjMsNDUgQEAgc3RhdGljIHZvaWQgc3Jp
b3ZfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgcGNpX2Rldg0KPipkZXYpDQo+Pj4gPiA+ID4gICAgICAg
ICAgICAgICAgIG1zbGVlcCgxMDApOw0KPj4+ID4gPiA+ICB9DQo+Pj4gPiA+ID4NCj4+PiA+ID4g
PiArLyoNCj4+PiA+ID4gPiArICogcGNpX3ZmX2Jhcl92YWxpZCAtIGNoZWNrIGlmIFZGIEJBUnMg
aGF2ZSByZXNvdXJjZSBhbGxvY2F0ZWQNCj4+PiA+ID4gPiArICogQGRldjogdGhlIFBDSSBkZXZp
Y2UNCj4+PiA+ID4gPiArICogQHBvczogcmVnaXN0ZXIgb2Zmc2V0IG9mIFNSLUlPViBjYXBhYmls
aXR5IGluIFBDSSBjb25maWcNCj4+PiA+ID4gPiArc3BhY2UNCj4+PiA+ID4gPiArICogUmV0dXJu
cyB0cnVlIGFueSBWRiBCQVIgaGFzIHJlc291cmNlIGFsbG9jYXRlZCwgZmFsc2UNCj4+PiA+ID4g
PiArICogaWYgYWxsIFZGIEJBUnMgYXJlIGVtcHR5Lg0KPj4+ID4gPiA+ICsgKi8NCj4+PiA+ID4g
PiArc3RhdGljIGJvb2wgcGNpX3ZmX2Jhcl92YWxpZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQg
cG9zKSB7DQo+Pj4gPiA+ID4gKyAgICAgICBpbnQgaTsNCj4+PiA+ID4gPiArICAgICAgIHUzMiBi
YXJfdmFsdWU7DQo+Pj4gPiA+ID4gKyAgICAgICB1MzIgYmFyX3NpemVfbWFzayA9IH4oUENJX0JB
U0VfQUREUkVTU19TUEFDRSB8DQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgUENJ
X0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCB8DQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpOw0KPj4+ID4gPiA+ICsNCj4+PiA+
ID4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1ZfTlVNX0JBUlM7IGkrKykgew0K
Pj4+ID4gPiA+ICsgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3Mg
KyBQQ0lfU1JJT1ZfQkFSICsgaSAqIDQsDQo+JmJhcl92YWx1ZSk7DQo+Pj4gPiA+ID4gKyAgICAg
ICAgICAgICAgIGlmIChiYXJfdmFsdWUgJiBiYXJfc2l6ZV9tYXNrKQ0KPj4+ID4gPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPj4+ID4gPiA+ICsgICAgICAgfQ0KPj4+
ID4gPiA+ICsNCj4+PiA+ID4gPiArICAgICAgIHJldHVybiBmYWxzZTsNCj4+PiA+ID4gPiArfQ0K
Pj4+ID4gPiA+ICsNCj4+PiA+ID4gPiArLyoNCj4+PiA+ID4gPiArICogaXNfYW1kX2Rpc3BsYXlf
YWRhcHRlciAtIGNoZWNrIGlmIGl0IGlzIGFuIEFNRC9BVEkgR1BVDQo+Pj4gPiA+ID4gK2Rldmlj
ZQ0KPj4+ID4gPiA+ICsgKiBAZGV2OiB0aGUgUENJIGRldmljZQ0KPj4+ID4gPiA+ICsgKg0KPj4+
ID4gPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgZGV2aWNlIGlzIGFuIEFNRC9BVEkgZGlzcGxheSBh
ZGFwdGVyLA0KPj4+ID4gPiA+ICsgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLg0KPj4+ID4gPiA+
ICsgKi8NCj4+PiA+ID4gPiArDQo+Pj4gPiA+ID4gK3N0YXRpYyBib29sIGlzX2FtZF9kaXNwbGF5
X2FkYXB0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikgew0KPj4+ID4gPiA+ICsgICAgICAgcmV0dXJu
ICgoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpICYmDQo+Pj4g
PiA+ID4gKyAgICAgICAgICAgICAgIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSSB8
fA0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lE
X0FNRCkpOyB9DQo+Pj4gPiA+ID4gKw0KPj4+ID4gPiA+ICAvKioNCj4+PiA+ID4gPiAgICogcGNp
X2lvdl9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgSU9WIGNhcGFiaWxpdHkNCj4+PiA+ID4gPiAgICog
QGRldjogdGhlIFBDSSBkZXZpY2UNCj4+PiA+ID4gPiBAQCAtNTM3LDkgKzU3NiwyNyBAQCBpbnQg
cGNpX2lvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpDQo+Pj4gPiA+ID4gICAgICAgICAgICAg
ICAgIHJldHVybiAtRU5PREVWOw0KPj4+ID4gPiA+DQo+Pj4gPiA+ID4gICAgICAgICBwb3MgPSBw
Y2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTsNCj4+PiA+
ID4gPiAtICAgICAgIGlmIChwb3MpDQo+Pj4gPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBz
cmlvdl9pbml0KGRldiwgcG9zKTsNCj4+PiA+ID4gPiAtDQo+Pj4gPiA+ID4gKyAgICAgICBpZiAo
cG9zKSB7DQo+Pj4gPiA+ID4gKyAgICAgICAvKg0KPj4+ID4gPiA+ICsgICAgICAgICogSWYgdGhl
IGRldmljZSBpcyBhbiBBTUQgZ3JhcGhpY3MgZGV2aWNlIGFuZCBpdCBzdXBwb3J0cw0KPj4+ID4g
PiA+ICsgICAgICAgICogU1ItSU9WIGl0IHdpbGwgcmVxdWlyZSBhIGxhcmdlIGFtb3VudCBvZiBy
ZXNvdXJjZXMuDQo+Pj4gPiA+ID4gKyAgICAgICAgKiBCZWZvcmUgY2FsbGluZyBzcmlvdl9pbml0
KCkgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtDQo+Pj4gPiA+ID4gKyAgICAgICAgKiBCSU9T
IGFsc28gc3VwcG9ydHMgU1ItSU9WIGFuZCB0aGF0IHN5c3RlbSBCSU9TIGhhcyBiZWVuDQo+Pj4g
PiA+ID4gKyAgICAgICAgKiBhYmxlIHRvIGFsbG9jYXRlIGVub3VnaCByZXNvdXJjZXMuDQo+Pj4g
PiA+ID4gKyAgICAgICAgKiBJZiB0aGUgVkYgQkFScyBhcmUgemVybyB0aGVuIHRoZSBzeXN0ZW0g
QklPUyBkb2VzIG5vdA0KPj4+ID4gPiA+ICsgICAgICAgICogc3VwcG9ydCBTUi1JT1Ygb3IgaXQg
Y291bGQgbm90IGFsbG9jYXRlIHRoZSByZXNvdXJjZXMNCj4+PiA+ID4gPiArICAgICAgICAqIGFu
ZCB0aGlzIHBsYXRmb3JtIHdpbGwgbm90IHN1cHBvcnQgQU1EIGdyYXBoaWNzIFNSLUlPVi4NCj4+
PiA+ID4gPiArICAgICAgICAqIFRoZXJlZm9yZSBkbyBub3QgY2FsbCBzcmlvdl9pbml0KCkuDQo+
Pj4gPiA+ID4gKyAgICAgICAgKiBJZiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlP
ViB0aGVuIHRoZSBWRiBCQVJzDQo+Pj4gPiA+ID4gKyAgICAgICAgKiB3aWxsIGJlIHByb3Blcmx5
IGluaXRpYWxpemVkIHRvIG5vbi16ZXJvIHZhbHVlcy4NCj4+PiA+ID4gPiArICAgICAgICAqLw0K
Pj4+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoaXNfYW1kX2Rpc3BsYXlfYWRhcHRlcihkZXYp
KSB7DQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBjaV92Zl9iYXJfdmFs
aWQoZGV2LCBwb3MpKQ0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNyaW92X2luaXQoZGV2LCBwb3MpOw0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICB9
IGVsc2Ugew0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmlvdl9p
bml0KGRldiwgcG9zKTsNCj4+PiA+ID4gPiArICAgICAgICAgICAgICAgfQ0KPj4+ID4gPiA+ICsg
ICAgICAgfQ0KPj4+ID4gPiA+ICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+Pj4gPiA+ID4gIH0N
Cj4+PiA+ID4gPg0KPj4+ID4gPg0KPj4+ID4NCj4+Pg0KPj4NCg==

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-20 10:27                     ` Zytaruk, Kelly
@ 2017-05-20 10:37                       ` Cheng, Collins
  -1 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-20 10:37 UTC (permalink / raw)
  To: Zytaruk, Kelly, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu

Hi Kelly,

This issue also happens in "not SR-IOV capable" SBIOS. It seems some "not SR-IOV capable" SBIOS will directly report error in system BIOS boot stage and doesn't boot to OS. But other "not SR-IOV capable" SBIOS would not report error and boot to Linux.

-Collins Cheng


-----Original Message-----
From: Zytaruk, Kelly 
Sent: Saturday, May 20, 2017 6:28 PM
To: Cheng, Collins <Collins.Cheng@amd.com>; Alexander Duyck <alexander.duyck@gmail.com>; Alex Williamson <alex.williamson@redhat.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform



>-----Original Message-----
>From: Cheng, Collins
>Sent: Saturday, May 20, 2017 12:53 AM
>To: Alexander Duyck; Alex Williamson
>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; 
>linux-kernel@vger.kernel.org; Deucher, Alexander; Zytaruk, Kelly; 
>Yinghai Lu
>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV 
>incapable platform
>
>Hi Alex,
>
>Yes, I hope kernel can disable SR-IOV and related VF resource 
>allocation if the system BIOS is not SR-IOV capable.
>
>Adding the parameter "pci=nosriov" sounds a doable solution, but it 
>would need user to add this parameter manually, right? I think an 
>automatic detection would be better. My patch is trying to auto detect and bypass VF resource allocation.
>
>
>-Collins Cheng
>

Collins, be careful about this.  I don't think that this is what we want.  If you add "pci=nosriov" then you are globally disabling SRIOV for all devices.  This is not the solution that we are looking for.
Remember that there are 3 types of SBIOS; "not SR-IOV capable", "SR-IOV capable but does not support large resources", "Complete SR-IOV support".

The problem is that we are trying to find a fix for "broken" SBIOS that does support SR-IOV but does not support the full SR-IOV capabilities that devices with large resources require.

Thanks,
Kelly

>
>-----Original Message-----
>From: Alexander Duyck [mailto:alexander.duyck@gmail.com]
>Sent: Friday, May 19, 2017 11:44 PM
>To: Alex Williamson <alex.williamson@redhat.com>
>Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas 
><bhelgaas@google.com>; linux-pci@vger.kernel.org; linux- 
>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; 
>Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV 
>incapable platform
>
>On Mon, May 15, 2017 at 10:53 AM, Alex Williamson 
><alex.williamson@redhat.com> wrote:
>> On Mon, 15 May 2017 08:19:28 +0000
>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>
>>> Hi Williamson,
>>>
>>> We cannot assume BIOS supports SR-IOV, actually only newer server
>motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or 
>older server motherboard BIOS doesn't support SR-IOV. This issue would 
>happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>>
>> Servers should be supporting SR-IOV for a long time now.  What really 
>> is there to a BIOS supporting SR-IOV anyway, it's simply reserving 
>> sufficient bus number and MMIO resources such that we can enable the 
>> VFs.  This process isn't exclusively reserved for the BIOS.  Some 
>> platforms may choose to only initialize boot devices, leaving the 
>> rest for the OS to program.  The initial proposal here to disable 
>> SR-IOV if not programmed at OS hand-off disables even the possibility 
>> of the OS reallocating resources for this device.
>
>There are differences between supporting SR-IOV and supporting SR-IOV 
>on devices with massive resources. I know I have seen NICs that will 
>keep a system from completing POST if SR-IOV is enabled, and MMIO 
>beyond 4G is not. My guess would be that the issues being seen are 
>probably that they disable SR-IOV in the BIOS in such a setup and end 
>up running into issues when they try to boot into the Linux kernel as 
>it goes through and tries to allocate resources for SR-IOV even though it was disabled in the BIOS.
>
>It might make sense to add a kernel parameter something like a "pci=nosriov"
>that would allow for disabling SR-IOV and related resource allocation 
>if that is what we are talking about. That way you could plug in these 
>types of devices into a system with a legacy bios or that doesn't wan 
>to allocate addresses above 32b for MMIO, and this parameter would be 
>all that is needed to disable SR-IOV so you could plug in a NIC that has SR-IOV associated with it.
>
>>> I agree that failure to allocate VF resources should leave the 
>>> device in no
>worse condition than before it tried. I hope kernel could allocate PF 
>device resource before allocating VF device resource, and keep PF 
>device resource valid and functional if failed to allocate VF device resource.
>>>
>>> I will send out dmesg log lspci info tomorrow. Thanks.
>>
>> Thanks,
>> Alex
>>
>>> -----Original Message-----
>>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> Sent: Friday, May 12, 2017 10:43 PM
>>> To: Cheng, Collins <Collins.Cheng@amd.com>
>>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
>>> linux-kernel@vger.kernel.org; Deucher, Alexander 
>>> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; 
>>> Yinghai Lu <yinghai@kernel.org>
>>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>>> SR-IOV incapable platform
>>>
>>> On Fri, 12 May 2017 04:51:43 +0000
>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>
>>> > Hi Williamson,
>>> >
>>> > I verified the patch is working for both AMD SR-IOV GPU and Intel 
>>> > SR-IOV
>NIC. I don't think it is redundant to check the VF BAR valid before 
>call sriov_init(), it is safe and saving boot time, also there is no a 
>better method to know if system BIOS has correctly initialized the SR-IOV capability or not.
>>>
>>> It also masks an underlying bug and creates a maintenance issue that 
>>> we won't
>know when it's safe to remove this workaround.  I don't think faster 
>boot is valid rationale, in one case SR-IOV is completely disabled, the 
>other we attempt to allocate the resources the BIOS failed to provide.  
>I expect this is also a corner case, the BIOS should typically support 
>SR-IOV, therefore this situation should be an exception.
>>>
>>> > I did not try to fix the issue from the kernel resource allocation 
>>> > perspective,
>it is because:
>>> >     1. I am not very familiar with the PCI resource allocation scheme in kernel.
>For example, in sriov_init(), kernel will re-assign the PCI resource 
>for both VF and PF. I don't understand why kernel allocates resource 
>for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>>> >     2. I am not sure if kernel has error handler if PCI resource allocation failed.
>In this case, kernel cannot allocate enough resource to PF. It should 
>trigger some error handler to either just keep original BAR values set 
>by system BIOS, or disable this device and log errors.
>>>
>>> I think these are the issues we should be trying to solve and I'm 
>>> sure folks on the linux-pci list can help us identify the bug.
>>> Minimally, failure to allocate VF resources should leave the device 
>>> in no worse condition than before it tried.  Perhaps you could post 
>>> more details about the issue, boot with pci=earlydump, post dmesg of 
>>> a boot where the PF resources are incorrectly re-allocated, and 
>>> include lspci -vvv for the SR-IOV device.  Also, please test with 
>>> the latest upstream kernel, upstream only patches old kernels 
>>> through stable backports of commits to the latest kernel.  Adding 
>>> Yinghai as a resource allocation expert. Thanks,
>>>
>>> Alex
>>>
>>> > -----Original Message-----
>>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> > Sent: Friday, May 12, 2017 12:01 PM
>>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>>> > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
>>> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, 
>>> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
>>> > <Kelly.Zytaruk@amd.com>
>>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>>> > SR-IOV incapable platform
>>> >
>>> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins" 
>>> > <Collins.Cheng@amd.com> wrote:
>>> >
>>> > > Hi Williamson,
>>> > >
>>> > > GPU card needs more BAR aperture resource than other PCI 
>>> > > devices. For
>example, Intel SR-IOV network card only require 512KB memory resource 
>for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory 
>resource for frame buffer BAR aperture.
>>> > >
>>> > > If the system BIOS supports SR-IOV, it will reserve enough 
>>> > > resource for all
>VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate 
>the enough resource for VF BARs, only PF BAR will be assigned and VF 
>BARs are empty. Then system boots to Linux kernel and kernel doesn't 
>check if the VF BARs are empty or valid. Kernel will re-assign the BAR 
>resources for PF and all VFs. The problem I saw is that kernel will 
>fail to allocate PF BAR resource because some resources are assigned to 
>VF, this is not expected. So kernel might need to do some check before 
>re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.
>>> >
>>> > So the problem is that something bad happens when the kernel is 
>>> > trying to reallocate resources in order to fulfill the 
>>> > requirements of the VFs, leaving the PF resources incorrectly 
>>> > programmed?  Why not just fix that bug rather than creating 
>>> > special handling for this vendor/class of device which disables 
>>> > any attempt to fixup resources for SR-IOV?  IOW, this patch just 
>>> > avoids the problem for your devices rather than fixing the bug.  
>>> > I'd suggest fixing the bug such that the PF is left in a 
>>> > functional state if the kernel is unable to allocate sufficient 
>>> > resources for the VFs.  Thanks,
>>> >
>>> > Alex
>>> >
>>> > > -----Original Message-----
>>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>> > > Sent: Friday, May 12, 2017 11:21 AM
>>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
>>> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; 
>>> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
>>> > > <Kelly.Zytaruk@amd.com>
>>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
>>> > > SR-IOV incapable platform
>>> > >
>>> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>>> > > <Collins.Cheng@amd.com> wrote:
>>> > >
>>> > > > Hi Helgaas,
>>> > > >
>>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable 
>>> > > > platform. It would cause a problem on PCI resource allocation 
>>> > > > in current Linux kernel.
>>> > > >
>>> > > > Therefore in order to allow the PF (Physical Function) device 
>>> > > > of SR-IOV capable GPU to work on the SR-IOV incapable 
>>> > > > platform, it is required to verify conditions for initializing 
>>> > > > BAR resources on AMD SR-IOV capable GPUs.
>>> > > >
>>> > > > If the device is an AMD graphics device and it supports SR-IOV 
>>> > > > it will require a large amount of resources.
>>> > > > Before calling sriov_init() must ensure that the system BIOS 
>>> > > > also supports SR-IOV and that system BIOS has been able to 
>>> > > > allocate enough resources.
>>> > > > If the VF BARs are zero then the system BIOS does not support 
>>> > > > SR-IOV or it could not allocate the resources and this 
>>> > > > platform will not support AMD graphics SR-IOV.
>>> > > > Therefore do not call sriov_init().
>>> > > > If the system BIOS does support SR-IOV then the VF BARs will 
>>> > > > be properly initialized to non-zero values.
>>> > > >
>>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>> > > >
>>> > > > I checked the drivers/pci/quirks.c, it looks the 
>>> > > > workarounds/fixes in quirks.c are for specific devices and one 
>>> > > > or more device ID are defined for the specific devices. 
>>> > > > However my patch is for all AMD SR-IOV capable GPUs, that 
>>> > > > includes all existing
>and future AMD server GPUs.
>>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>>> > >
>>> > >
>>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
>>> > > always need to be able to deal with devices of any type where 
>>> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV 
>>> > > devices can fit their VFs within a minimum bridge aperture, most 
>>> > > cannot.  I don't understand why the VF resource requirements 
>>> > > being exceptionally large dictates that they receive special handling.
>>> > > Thanks,
>>> > >
>>> > > Alex
>>> > >
>>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>>> > > > ---
>>> > > >  drivers/pci/iov.c | 63
>>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>>> > > >
>>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>>> > > > e30f05c..e4f1405 100644
>>> > > > --- a/drivers/pci/iov.c
>>> > > > +++ b/drivers/pci/iov.c
>>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct 
>>> > > > pci_dev
>*dev)
>>> > > >                 msleep(100);
>>> > > >  }
>>> > > >
>>> > > > +/*
>>> > > > + * pci_vf_bar_valid - check if VF BARs have resource 
>>> > > > +allocated
>>> > > > + * @dev: the PCI device
>>> > > > + * @pos: register offset of SR-IOV capability in PCI config 
>>> > > > +space
>>> > > > + * Returns true any VF BAR has resource allocated, false
>>> > > > + * if all VF BARs are empty.
>>> > > > + */
>>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>>> > > > +       int i;
>>> > > > +       u32 bar_value;
>>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>>> > > > +
>>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR 
>>> > > > + + i * 4,
>&bar_value);
>>> > > > +               if (bar_value & bar_size_mask)
>>> > > > +                       return true;
>>> > > > +       }
>>> > > > +
>>> > > > +       return false;
>>> > > > +}
>>> > > > +
>>> > > > +/*
>>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU 
>>> > > > +device
>>> > > > + * @dev: the PCI device
>>> > > > + *
>>> > > > + * Returns true if device is an AMD/ATI display adapter,
>>> > > > + * otherwise return false.
>>> > > > + */
>>> > > > +
>>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>>> > > > +
>>> > > >  /**
>>> > > >   * pci_iov_init - initialize the IOV capability
>>> > > >   * @dev: the PCI device
>>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>> > > >                 return -ENODEV;
>>> > > >
>>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>>> > > > -       if (pos)
>>> > > > -               return sriov_init(dev, pos);
>>> > > > -
>>> > > > +       if (pos) {
>>> > > > +       /*
>>> > > > +        * If the device is an AMD graphics device and it supports
>>> > > > +        * SR-IOV it will require a large amount of resources.
>>> > > > +        * Before calling sriov_init() must ensure that the system
>>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>>> > > > +        * able to allocate enough resources.
>>> > > > +        * If the VF BARs are zero then the system BIOS does not
>>> > > > +        * support SR-IOV or it could not allocate the resources
>>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>>> > > > +        * Therefore do not call sriov_init().
>>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>>> > > > +        * will be properly initialized to non-zero values.
>>> > > > +        */
>>> > > > +               if (is_amd_display_adapter(dev)) {
>>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>>> > > > +                               return sriov_init(dev, pos);
>>> > > > +               } else {
>>> > > > +                       return sriov_init(dev, pos);
>>> > > > +               }
>>> > > > +       }
>>> > > >         return -ENODEV;
>>> > > >  }
>>> > > >
>>> > >
>>> >
>>>
>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-20 10:37                       ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-20 10:37 UTC (permalink / raw)
  To: Zytaruk, Kelly, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu

SGkgS2VsbHksDQoNClRoaXMgaXNzdWUgYWxzbyBoYXBwZW5zIGluICJub3QgU1ItSU9WIGNhcGFi
bGUiIFNCSU9TLiBJdCBzZWVtcyBzb21lICJub3QgU1ItSU9WIGNhcGFibGUiIFNCSU9TIHdpbGwg
ZGlyZWN0bHkgcmVwb3J0IGVycm9yIGluIHN5c3RlbSBCSU9TIGJvb3Qgc3RhZ2UgYW5kIGRvZXNu
J3QgYm9vdCB0byBPUy4gQnV0IG90aGVyICJub3QgU1ItSU9WIGNhcGFibGUiIFNCSU9TIHdvdWxk
IG5vdCByZXBvcnQgZXJyb3IgYW5kIGJvb3QgdG8gTGludXguDQoNCi1Db2xsaW5zIENoZW5nDQoN
Cg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IFp5dGFydWssIEtlbGx5IA0KU2Vu
dDogU2F0dXJkYXksIE1heSAyMCwgMjAxNyA2OjI4IFBNDQpUbzogQ2hlbmcsIENvbGxpbnMgPENv
bGxpbnMuQ2hlbmdAYW1kLmNvbT47IEFsZXhhbmRlciBEdXljayA8YWxleGFuZGVyLmR1eWNrQGdt
YWlsLmNvbT47IEFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+DQpD
YzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT47IGxpbnV4LXBjaUB2Z2VyLmtl
cm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsIEFsZXhhbmRl
ciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT47IFlpbmdoYWkgTHUgPHlpbmdoYWlAa2VybmVs
Lm9yZz4NClN1YmplY3Q6IFJFOiBbUEFUQ0hdIFBDSTogTWFrZSBTUi1JT1YgY2FwYWJsZSBHUFUg
d29ya2luZyBvbiB0aGUgU1ItSU9WIGluY2FwYWJsZSBwbGF0Zm9ybQ0KDQoNCg0KPi0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogQ2hlbmcsIENvbGxpbnMNCj5TZW50OiBTYXR1cmRh
eSwgTWF5IDIwLCAyMDE3IDEyOjUzIEFNDQo+VG86IEFsZXhhbmRlciBEdXljazsgQWxleCBXaWxs
aWFtc29uDQo+Q2M6IEJqb3JuIEhlbGdhYXM7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IA0K
PmxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsIEFsZXhhbmRlcjsgWnl0YXJ1
aywgS2VsbHk7IA0KPllpbmdoYWkgTHUNCj5TdWJqZWN0OiBSRTogW1BBVENIXSBQQ0k6IE1ha2Ug
U1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlIFNSLUlPViANCj5pbmNhcGFibGUgcGxh
dGZvcm0NCj4NCj5IaSBBbGV4LA0KPg0KPlllcywgSSBob3BlIGtlcm5lbCBjYW4gZGlzYWJsZSBT
Ui1JT1YgYW5kIHJlbGF0ZWQgVkYgcmVzb3VyY2UgDQo+YWxsb2NhdGlvbiBpZiB0aGUgc3lzdGVt
IEJJT1MgaXMgbm90IFNSLUlPViBjYXBhYmxlLg0KPg0KPkFkZGluZyB0aGUgcGFyYW1ldGVyICJw
Y2k9bm9zcmlvdiIgc291bmRzIGEgZG9hYmxlIHNvbHV0aW9uLCBidXQgaXQgDQo+d291bGQgbmVl
ZCB1c2VyIHRvIGFkZCB0aGlzIHBhcmFtZXRlciBtYW51YWxseSwgcmlnaHQ/IEkgdGhpbmsgYW4g
DQo+YXV0b21hdGljIGRldGVjdGlvbiB3b3VsZCBiZSBiZXR0ZXIuIE15IHBhdGNoIGlzIHRyeWlu
ZyB0byBhdXRvIGRldGVjdCBhbmQgYnlwYXNzIFZGIHJlc291cmNlIGFsbG9jYXRpb24uDQo+DQo+
DQo+LUNvbGxpbnMgQ2hlbmcNCj4NCg0KQ29sbGlucywgYmUgY2FyZWZ1bCBhYm91dCB0aGlzLiAg
SSBkb24ndCB0aGluayB0aGF0IHRoaXMgaXMgd2hhdCB3ZSB3YW50LiAgSWYgeW91IGFkZCAicGNp
PW5vc3Jpb3YiIHRoZW4geW91IGFyZSBnbG9iYWxseSBkaXNhYmxpbmcgU1JJT1YgZm9yIGFsbCBk
ZXZpY2VzLiAgVGhpcyBpcyBub3QgdGhlIHNvbHV0aW9uIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9y
Lg0KUmVtZW1iZXIgdGhhdCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBTQklPUzsgIm5vdCBTUi1JT1Yg
Y2FwYWJsZSIsICJTUi1JT1YgY2FwYWJsZSBidXQgZG9lcyBub3Qgc3VwcG9ydCBsYXJnZSByZXNv
dXJjZXMiLCAiQ29tcGxldGUgU1ItSU9WIHN1cHBvcnQiLg0KDQpUaGUgcHJvYmxlbSBpcyB0aGF0
IHdlIGFyZSB0cnlpbmcgdG8gZmluZCBhIGZpeCBmb3IgImJyb2tlbiIgU0JJT1MgdGhhdCBkb2Vz
IHN1cHBvcnQgU1ItSU9WIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmdWxsIFNSLUlPViBjYXBh
YmlsaXRpZXMgdGhhdCBkZXZpY2VzIHdpdGggbGFyZ2UgcmVzb3VyY2VzIHJlcXVpcmUuDQoNClRo
YW5rcywNCktlbGx5DQoNCj4NCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEFs
ZXhhbmRlciBEdXljayBbbWFpbHRvOmFsZXhhbmRlci5kdXlja0BnbWFpbC5jb21dDQo+U2VudDog
RnJpZGF5LCBNYXkgMTksIDIwMTcgMTE6NDQgUE0NCj5UbzogQWxleCBXaWxsaWFtc29uIDxhbGV4
LndpbGxpYW1zb25AcmVkaGF0LmNvbT4NCj5DYzogQ2hlbmcsIENvbGxpbnMgPENvbGxpbnMuQ2hl
bmdAYW1kLmNvbT47IEJqb3JuIEhlbGdhYXMgDQo+PGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51
eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC0gDQo+a2VybmVsQHZnZXIua2VybmVsLm9yZzsg
RGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgDQo+Wnl0YXJ1
aywgS2VsbHkgPEtlbGx5Llp5dGFydWtAYW1kLmNvbT47IFlpbmdoYWkgTHUgPHlpbmdoYWlAa2Vy
bmVsLm9yZz4NCj5TdWJqZWN0OiBSZTogW1BBVENIXSBQQ0k6IE1ha2UgU1ItSU9WIGNhcGFibGUg
R1BVIHdvcmtpbmcgb24gdGhlIFNSLUlPViANCj5pbmNhcGFibGUgcGxhdGZvcm0NCj4NCj5PbiBN
b24sIE1heSAxNSwgMjAxNyBhdCAxMDo1MyBBTSwgQWxleCBXaWxsaWFtc29uIA0KPjxhbGV4Lndp
bGxpYW1zb25AcmVkaGF0LmNvbT4gd3JvdGU6DQo+PiBPbiBNb24sIDE1IE1heSAyMDE3IDA4OjE5
OjI4ICswMDAwDQo+PiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+IHdy
b3RlOg0KPj4NCj4+PiBIaSBXaWxsaWFtc29uLA0KPj4+DQo+Pj4gV2UgY2Fubm90IGFzc3VtZSBC
SU9TIHN1cHBvcnRzIFNSLUlPViwgYWN0dWFsbHkgb25seSBuZXdlciBzZXJ2ZXINCj5tb3RoZXJi
b2FyZCBCSU9TIHN1cHBvcnRzIFNSLUlPVi4gTm9ybWFsIGRlc2t0b3AgbW90aGVyYm9hcmQgQklP
UyBvciANCj5vbGRlciBzZXJ2ZXIgbW90aGVyYm9hcmQgQklPUyBkb2Vzbid0IHN1cHBvcnQgU1It
SU9WLiBUaGlzIGlzc3VlIHdvdWxkIA0KPmhhcHBlbiBpZiBhbiB1c2VyIHBsdWdzIG91ciBBTUQg
U1ItSU9WIGNhcGFibGUgR1BVIGNhcmQgdG8gYSBub3JtYWwgZGVza3RvcCBtb3RoZXJib2FyZC4N
Cj4+DQo+PiBTZXJ2ZXJzIHNob3VsZCBiZSBzdXBwb3J0aW5nIFNSLUlPViBmb3IgYSBsb25nIHRp
bWUgbm93LiAgV2hhdCByZWFsbHkgDQo+PiBpcyB0aGVyZSB0byBhIEJJT1Mgc3VwcG9ydGluZyBT
Ui1JT1YgYW55d2F5LCBpdCdzIHNpbXBseSByZXNlcnZpbmcgDQo+PiBzdWZmaWNpZW50IGJ1cyBu
dW1iZXIgYW5kIE1NSU8gcmVzb3VyY2VzIHN1Y2ggdGhhdCB3ZSBjYW4gZW5hYmxlIHRoZSANCj4+
IFZGcy4gIFRoaXMgcHJvY2VzcyBpc24ndCBleGNsdXNpdmVseSByZXNlcnZlZCBmb3IgdGhlIEJJ
T1MuICBTb21lIA0KPj4gcGxhdGZvcm1zIG1heSBjaG9vc2UgdG8gb25seSBpbml0aWFsaXplIGJv
b3QgZGV2aWNlcywgbGVhdmluZyB0aGUgDQo+PiByZXN0IGZvciB0aGUgT1MgdG8gcHJvZ3JhbS4g
IFRoZSBpbml0aWFsIHByb3Bvc2FsIGhlcmUgdG8gZGlzYWJsZSANCj4+IFNSLUlPViBpZiBub3Qg
cHJvZ3JhbW1lZCBhdCBPUyBoYW5kLW9mZiBkaXNhYmxlcyBldmVuIHRoZSBwb3NzaWJpbGl0eSAN
Cj4+IG9mIHRoZSBPUyByZWFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciB0aGlzIGRldmljZS4NCj4N
Cj5UaGVyZSBhcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzdXBwb3J0aW5nIFNSLUlPViBhbmQgc3Vw
cG9ydGluZyBTUi1JT1YgDQo+b24gZGV2aWNlcyB3aXRoIG1hc3NpdmUgcmVzb3VyY2VzLiBJIGtu
b3cgSSBoYXZlIHNlZW4gTklDcyB0aGF0IHdpbGwgDQo+a2VlcCBhIHN5c3RlbSBmcm9tIGNvbXBs
ZXRpbmcgUE9TVCBpZiBTUi1JT1YgaXMgZW5hYmxlZCwgYW5kIE1NSU8gDQo+YmV5b25kIDRHIGlz
IG5vdC4gTXkgZ3Vlc3Mgd291bGQgYmUgdGhhdCB0aGUgaXNzdWVzIGJlaW5nIHNlZW4gYXJlIA0K
PnByb2JhYmx5IHRoYXQgdGhleSBkaXNhYmxlIFNSLUlPViBpbiB0aGUgQklPUyBpbiBzdWNoIGEg
c2V0dXAgYW5kIGVuZCANCj51cCBydW5uaW5nIGludG8gaXNzdWVzIHdoZW4gdGhleSB0cnkgdG8g
Ym9vdCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgYXMgDQo+aXQgZ29lcyB0aHJvdWdoIGFuZCB0cmll
cyB0byBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIFNSLUlPViBldmVuIHRob3VnaCBpdCB3YXMgZGlz
YWJsZWQgaW4gdGhlIEJJT1MuDQo+DQo+SXQgbWlnaHQgbWFrZSBzZW5zZSB0byBhZGQgYSBrZXJu
ZWwgcGFyYW1ldGVyIHNvbWV0aGluZyBsaWtlIGEgInBjaT1ub3NyaW92Ig0KPnRoYXQgd291bGQg
YWxsb3cgZm9yIGRpc2FibGluZyBTUi1JT1YgYW5kIHJlbGF0ZWQgcmVzb3VyY2UgYWxsb2NhdGlv
biANCj5pZiB0aGF0IGlzIHdoYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQuIFRoYXQgd2F5IHlvdSBj
b3VsZCBwbHVnIGluIHRoZXNlIA0KPnR5cGVzIG9mIGRldmljZXMgaW50byBhIHN5c3RlbSB3aXRo
IGEgbGVnYWN5IGJpb3Mgb3IgdGhhdCBkb2Vzbid0IHdhbiANCj50byBhbGxvY2F0ZSBhZGRyZXNz
ZXMgYWJvdmUgMzJiIGZvciBNTUlPLCBhbmQgdGhpcyBwYXJhbWV0ZXIgd291bGQgYmUgDQo+YWxs
IHRoYXQgaXMgbmVlZGVkIHRvIGRpc2FibGUgU1ItSU9WIHNvIHlvdSBjb3VsZCBwbHVnIGluIGEg
TklDIHRoYXQgaGFzIFNSLUlPViBhc3NvY2lhdGVkIHdpdGggaXQuDQo+DQo+Pj4gSSBhZ3JlZSB0
aGF0IGZhaWx1cmUgdG8gYWxsb2NhdGUgVkYgcmVzb3VyY2VzIHNob3VsZCBsZWF2ZSB0aGUgDQo+
Pj4gZGV2aWNlIGluIG5vDQo+d29yc2UgY29uZGl0aW9uIHRoYW4gYmVmb3JlIGl0IHRyaWVkLiBJ
IGhvcGUga2VybmVsIGNvdWxkIGFsbG9jYXRlIFBGIA0KPmRldmljZSByZXNvdXJjZSBiZWZvcmUg
YWxsb2NhdGluZyBWRiBkZXZpY2UgcmVzb3VyY2UsIGFuZCBrZWVwIFBGIA0KPmRldmljZSByZXNv
dXJjZSB2YWxpZCBhbmQgZnVuY3Rpb25hbCBpZiBmYWlsZWQgdG8gYWxsb2NhdGUgVkYgZGV2aWNl
IHJlc291cmNlLg0KPj4+DQo+Pj4gSSB3aWxsIHNlbmQgb3V0IGRtZXNnIGxvZyBsc3BjaSBpbmZv
IHRvbW9ycm93LiBUaGFua3MuDQo+Pg0KPj4gVGhhbmtzLA0KPj4gQWxleA0KPj4NCj4+PiAtLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4+IEZyb206IEFsZXggV2lsbGlhbXNvbiBbbWFpbHRv
OmFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tXQ0KPj4+IFNlbnQ6IEZyaWRheSwgTWF5IDEyLCAy
MDE3IDEwOjQzIFBNDQo+Pj4gVG86IENoZW5nLCBDb2xsaW5zIDxDb2xsaW5zLkNoZW5nQGFtZC5j
b20+DQo+Pj4gQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51eC1w
Y2lAdmdlci5rZXJuZWwub3JnOyANCj4+PiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBE
ZXVjaGVyLCBBbGV4YW5kZXIgDQo+Pj4gPEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+OyBaeXRh
cnVrLCBLZWxseSA8S2VsbHkuWnl0YXJ1a0BhbWQuY29tPjsgDQo+Pj4gWWluZ2hhaSBMdSA8eWlu
Z2hhaUBrZXJuZWwub3JnPg0KPj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogTWFrZSBTUi1J
T1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUgDQo+Pj4gU1ItSU9WIGluY2FwYWJsZSBwbGF0
Zm9ybQ0KPj4+DQo+Pj4gT24gRnJpLCAxMiBNYXkgMjAxNyAwNDo1MTo0MyArMDAwMA0KPj4+ICJD
aGVuZywgQ29sbGlucyIgPENvbGxpbnMuQ2hlbmdAYW1kLmNvbT4gd3JvdGU6DQo+Pj4NCj4+PiA+
IEhpIFdpbGxpYW1zb24sDQo+Pj4gPg0KPj4+ID4gSSB2ZXJpZmllZCB0aGUgcGF0Y2ggaXMgd29y
a2luZyBmb3IgYm90aCBBTUQgU1ItSU9WIEdQVSBhbmQgSW50ZWwgDQo+Pj4gPiBTUi1JT1YNCj5O
SUMuIEkgZG9uJ3QgdGhpbmsgaXQgaXMgcmVkdW5kYW50IHRvIGNoZWNrIHRoZSBWRiBCQVIgdmFs
aWQgYmVmb3JlIA0KPmNhbGwgc3Jpb3ZfaW5pdCgpLCBpdCBpcyBzYWZlIGFuZCBzYXZpbmcgYm9v
dCB0aW1lLCBhbHNvIHRoZXJlIGlzIG5vIGEgDQo+YmV0dGVyIG1ldGhvZCB0byBrbm93IGlmIHN5
c3RlbSBCSU9TIGhhcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlIFNSLUlPViBjYXBhYmlsaXR5
IG9yIG5vdC4NCj4+Pg0KPj4+IEl0IGFsc28gbWFza3MgYW4gdW5kZXJseWluZyBidWcgYW5kIGNy
ZWF0ZXMgYSBtYWludGVuYW5jZSBpc3N1ZSB0aGF0IA0KPj4+IHdlIHdvbid0DQo+a25vdyB3aGVu
IGl0J3Mgc2FmZSB0byByZW1vdmUgdGhpcyB3b3JrYXJvdW5kLiAgSSBkb24ndCB0aGluayBmYXN0
ZXIgDQo+Ym9vdCBpcyB2YWxpZCByYXRpb25hbGUsIGluIG9uZSBjYXNlIFNSLUlPViBpcyBjb21w
bGV0ZWx5IGRpc2FibGVkLCB0aGUgDQo+b3RoZXIgd2UgYXR0ZW1wdCB0byBhbGxvY2F0ZSB0aGUg
cmVzb3VyY2VzIHRoZSBCSU9TIGZhaWxlZCB0byBwcm92aWRlLiAgDQo+SSBleHBlY3QgdGhpcyBp
cyBhbHNvIGEgY29ybmVyIGNhc2UsIHRoZSBCSU9TIHNob3VsZCB0eXBpY2FsbHkgc3VwcG9ydCAN
Cj5TUi1JT1YsIHRoZXJlZm9yZSB0aGlzIHNpdHVhdGlvbiBzaG91bGQgYmUgYW4gZXhjZXB0aW9u
Lg0KPj4+DQo+Pj4gPiBJIGRpZCBub3QgdHJ5IHRvIGZpeCB0aGUgaXNzdWUgZnJvbSB0aGUga2Vy
bmVsIHJlc291cmNlIGFsbG9jYXRpb24gDQo+Pj4gPiBwZXJzcGVjdGl2ZSwNCj5pdCBpcyBiZWNh
dXNlOg0KPj4+ID4gICAgIDEuIEkgYW0gbm90IHZlcnkgZmFtaWxpYXIgd2l0aCB0aGUgUENJIHJl
c291cmNlIGFsbG9jYXRpb24gc2NoZW1lIGluIGtlcm5lbC4NCj5Gb3IgZXhhbXBsZSwgaW4gc3Jp
b3ZfaW5pdCgpLCBrZXJuZWwgd2lsbCByZS1hc3NpZ24gdGhlIFBDSSByZXNvdXJjZSANCj5mb3Ig
Ym90aCBWRiBhbmQgUEYuIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkga2VybmVsIGFsbG9jYXRlcyBy
ZXNvdXJjZSANCj5mb3IgVkYgZmlyc3RseSwgdGhlbiBQRi4gSWYgaXQgaXMgUEYgZmlyc3RseSwg
dGhlbiB0aGlzIGlzc3VlIGNvdWxkIGJlIGF2b2lkZWQuDQo+Pj4gPiAgICAgMi4gSSBhbSBub3Qg
c3VyZSBpZiBrZXJuZWwgaGFzIGVycm9yIGhhbmRsZXIgaWYgUENJIHJlc291cmNlIGFsbG9jYXRp
b24gZmFpbGVkLg0KPkluIHRoaXMgY2FzZSwga2VybmVsIGNhbm5vdCBhbGxvY2F0ZSBlbm91Z2gg
cmVzb3VyY2UgdG8gUEYuIEl0IHNob3VsZCANCj50cmlnZ2VyIHNvbWUgZXJyb3IgaGFuZGxlciB0
byBlaXRoZXIganVzdCBrZWVwIG9yaWdpbmFsIEJBUiB2YWx1ZXMgc2V0IA0KPmJ5IHN5c3RlbSBC
SU9TLCBvciBkaXNhYmxlIHRoaXMgZGV2aWNlIGFuZCBsb2cgZXJyb3JzLg0KPj4+DQo+Pj4gSSB0
aGluayB0aGVzZSBhcmUgdGhlIGlzc3VlcyB3ZSBzaG91bGQgYmUgdHJ5aW5nIHRvIHNvbHZlIGFu
ZCBJJ20gDQo+Pj4gc3VyZSBmb2xrcyBvbiB0aGUgbGludXgtcGNpIGxpc3QgY2FuIGhlbHAgdXMg
aWRlbnRpZnkgdGhlIGJ1Zy4NCj4+PiBNaW5pbWFsbHksIGZhaWx1cmUgdG8gYWxsb2NhdGUgVkYg
cmVzb3VyY2VzIHNob3VsZCBsZWF2ZSB0aGUgZGV2aWNlIA0KPj4+IGluIG5vIHdvcnNlIGNvbmRp
dGlvbiB0aGFuIGJlZm9yZSBpdCB0cmllZC4gIFBlcmhhcHMgeW91IGNvdWxkIHBvc3QgDQo+Pj4g
bW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpc3N1ZSwgYm9vdCB3aXRoIHBjaT1lYXJseWR1bXAsIHBv
c3QgZG1lc2cgb2YgDQo+Pj4gYSBib290IHdoZXJlIHRoZSBQRiByZXNvdXJjZXMgYXJlIGluY29y
cmVjdGx5IHJlLWFsbG9jYXRlZCwgYW5kIA0KPj4+IGluY2x1ZGUgbHNwY2kgLXZ2diBmb3IgdGhl
IFNSLUlPViBkZXZpY2UuICBBbHNvLCBwbGVhc2UgdGVzdCB3aXRoIA0KPj4+IHRoZSBsYXRlc3Qg
dXBzdHJlYW0ga2VybmVsLCB1cHN0cmVhbSBvbmx5IHBhdGNoZXMgb2xkIGtlcm5lbHMgDQo+Pj4g
dGhyb3VnaCBzdGFibGUgYmFja3BvcnRzIG9mIGNvbW1pdHMgdG8gdGhlIGxhdGVzdCBrZXJuZWwu
ICBBZGRpbmcgDQo+Pj4gWWluZ2hhaSBhcyBhIHJlc291cmNlIGFsbG9jYXRpb24gZXhwZXJ0LiBU
aGFua3MsDQo+Pj4NCj4+PiBBbGV4DQo+Pj4NCj4+PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tDQo+Pj4gPiBGcm9tOiBBbGV4IFdpbGxpYW1zb24gW21haWx0bzphbGV4LndpbGxpYW1zb25A
cmVkaGF0LmNvbV0NCj4+PiA+IFNlbnQ6IEZyaWRheSwgTWF5IDEyLCAyMDE3IDEyOjAxIFBNDQo+
Pj4gPiBUbzogQ2hlbmcsIENvbGxpbnMgPENvbGxpbnMuQ2hlbmdAYW1kLmNvbT4NCj4+PiA+IENj
OiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPjsgDQo+Pj4gPiBsaW51eC1wY2lA
dmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBEZXVjaGVyLCAN
Cj4+PiA+IEFsZXhhbmRlciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT47IFp5dGFydWssIEtl
bGx5IA0KPj4+ID4gPEtlbGx5Llp5dGFydWtAYW1kLmNvbT4NCj4+PiA+IFN1YmplY3Q6IFJlOiBb
UEFUQ0hdIFBDSTogTWFrZSBTUi1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUgDQo+Pj4g
PiBTUi1JT1YgaW5jYXBhYmxlIHBsYXRmb3JtDQo+Pj4gPg0KPj4+ID4gT24gRnJpLCAxMiBNYXkg
MjAxNyAwMzo0Mjo0NiArMDAwMCAiQ2hlbmcsIENvbGxpbnMiIA0KPj4+ID4gPENvbGxpbnMuQ2hl
bmdAYW1kLmNvbT4gd3JvdGU6DQo+Pj4gPg0KPj4+ID4gPiBIaSBXaWxsaWFtc29uLA0KPj4+ID4g
Pg0KPj4+ID4gPiBHUFUgY2FyZCBuZWVkcyBtb3JlIEJBUiBhcGVydHVyZSByZXNvdXJjZSB0aGFu
IG90aGVyIFBDSSANCj4+PiA+ID4gZGV2aWNlcy4gRm9yDQo+ZXhhbXBsZSwgSW50ZWwgU1ItSU9W
IG5ldHdvcmsgY2FyZCBvbmx5IHJlcXVpcmUgNTEyS0IgbWVtb3J5IHJlc291cmNlIA0KPmZvciBh
bGwgVkZzLiBBTUQgU1ItSU9WIEdQVSBjYXJkIG5lZWRzIDI1Nk1CIHgxNiBWRiA9IDRHQiBtZW1v
cnkgDQo+cmVzb3VyY2UgZm9yIGZyYW1lIGJ1ZmZlciBCQVIgYXBlcnR1cmUuDQo+Pj4gPiA+DQo+
Pj4gPiA+IElmIHRoZSBzeXN0ZW0gQklPUyBzdXBwb3J0cyBTUi1JT1YsIGl0IHdpbGwgcmVzZXJ2
ZSBlbm91Z2ggDQo+Pj4gPiA+IHJlc291cmNlIGZvciBhbGwNCj5WRiBCQVJzLiBJZiB0aGUgc3lz
dGVtIEJJT1MgZG9lc24ndCBzdXBwb3J0IFNSLUlPViBvciBjYW5ub3QgYWxsb2NhdGUgDQo+dGhl
IGVub3VnaCByZXNvdXJjZSBmb3IgVkYgQkFScywgb25seSBQRiBCQVIgd2lsbCBiZSBhc3NpZ25l
ZCBhbmQgVkYgDQo+QkFScyBhcmUgZW1wdHkuIFRoZW4gc3lzdGVtIGJvb3RzIHRvIExpbnV4IGtl
cm5lbCBhbmQga2VybmVsIGRvZXNuJ3QgDQo+Y2hlY2sgaWYgdGhlIFZGIEJBUnMgYXJlIGVtcHR5
IG9yIHZhbGlkLiBLZXJuZWwgd2lsbCByZS1hc3NpZ24gdGhlIEJBUiANCj5yZXNvdXJjZXMgZm9y
IFBGIGFuZCBhbGwgVkZzLiBUaGUgcHJvYmxlbSBJIHNhdyBpcyB0aGF0IGtlcm5lbCB3aWxsIA0K
PmZhaWwgdG8gYWxsb2NhdGUgUEYgQkFSIHJlc291cmNlIGJlY2F1c2Ugc29tZSByZXNvdXJjZXMg
YXJlIGFzc2lnbmVkIHRvIA0KPlZGLCB0aGlzIGlzIG5vdCBleHBlY3RlZC4gU28ga2VybmVsIG1p
Z2h0IG5lZWQgdG8gZG8gc29tZSBjaGVjayBiZWZvcmUgDQo+cmUtYXNzaWduIHRoZSBQRi9WRiBy
ZXNvdXJjZSwgc28gdGhhdCBQRiBkZXZpY2Ugd2lsbCBiZSBjb3JyZWN0bHkgYXNzaWduZWQgQkFS
IHJlc291cmNlIGFuZCB1c2VyIGNhbiB1c2UgUEYgZGV2aWNlLg0KPj4+ID4NCj4+PiA+IFNvIHRo
ZSBwcm9ibGVtIGlzIHRoYXQgc29tZXRoaW5nIGJhZCBoYXBwZW5zIHdoZW4gdGhlIGtlcm5lbCBp
cyANCj4+PiA+IHRyeWluZyB0byByZWFsbG9jYXRlIHJlc291cmNlcyBpbiBvcmRlciB0byBmdWxm
aWxsIHRoZSANCj4+PiA+IHJlcXVpcmVtZW50cyBvZiB0aGUgVkZzLCBsZWF2aW5nIHRoZSBQRiBy
ZXNvdXJjZXMgaW5jb3JyZWN0bHkgDQo+Pj4gPiBwcm9ncmFtbWVkPyAgV2h5IG5vdCBqdXN0IGZp
eCB0aGF0IGJ1ZyByYXRoZXIgdGhhbiBjcmVhdGluZyANCj4+PiA+IHNwZWNpYWwgaGFuZGxpbmcg
Zm9yIHRoaXMgdmVuZG9yL2NsYXNzIG9mIGRldmljZSB3aGljaCBkaXNhYmxlcyANCj4+PiA+IGFu
eSBhdHRlbXB0IHRvIGZpeHVwIHJlc291cmNlcyBmb3IgU1ItSU9WPyAgSU9XLCB0aGlzIHBhdGNo
IGp1c3QgDQo+Pj4gPiBhdm9pZHMgdGhlIHByb2JsZW0gZm9yIHlvdXIgZGV2aWNlcyByYXRoZXIg
dGhhbiBmaXhpbmcgdGhlIGJ1Zy4gIA0KPj4+ID4gSSdkIHN1Z2dlc3QgZml4aW5nIHRoZSBidWcg
c3VjaCB0aGF0IHRoZSBQRiBpcyBsZWZ0IGluIGEgDQo+Pj4gPiBmdW5jdGlvbmFsIHN0YXRlIGlm
IHRoZSBrZXJuZWwgaXMgdW5hYmxlIHRvIGFsbG9jYXRlIHN1ZmZpY2llbnQgDQo+Pj4gPiByZXNv
dXJjZXMgZm9yIHRoZSBWRnMuICBUaGFua3MsDQo+Pj4gPg0KPj4+ID4gQWxleA0KPj4+ID4NCj4+
PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+PiA+ID4gRnJvbTogQWxleCBXaWxs
aWFtc29uIFttYWlsdG86YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb21dDQo+Pj4gPiA+IFNlbnQ6
IEZyaWRheSwgTWF5IDEyLCAyMDE3IDExOjIxIEFNDQo+Pj4gPiA+IFRvOiBDaGVuZywgQ29sbGlu
cyA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPg0KPj4+ID4gPiBDYzogQmpvcm4gSGVsZ2FhcyA8Ymhl
bGdhYXNAZ29vZ2xlLmNvbT47IA0KPj4+ID4gPiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBs
aW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyANCj4+PiA+ID4gRGV1Y2hlciwgQWxleGFuZGVy
IDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkgDQo+Pj4gPiA+IDxL
ZWxseS5aeXRhcnVrQGFtZC5jb20+DQo+Pj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTog
TWFrZSBTUi1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUgDQo+Pj4gPiA+IFNSLUlPViBp
bmNhcGFibGUgcGxhdGZvcm0NCj4+PiA+ID4NCj4+PiA+ID4gT24gRnJpLCAxMiBNYXkgMjAxNyAw
Mjo1MDozMiArMDAwMCAiQ2hlbmcsIENvbGxpbnMiDQo+Pj4gPiA+IDxDb2xsaW5zLkNoZW5nQGFt
ZC5jb20+IHdyb3RlOg0KPj4+ID4gPg0KPj4+ID4gPiA+IEhpIEhlbGdhYXMsDQo+Pj4gPiA+ID4N
Cj4+PiA+ID4gPiBTb21lIEFNRCBHUFVzIGhhdmUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgZ3JhcGhp
Y3MgU1ItSU9WLg0KPj4+ID4gPiA+IElmIHRoZSBTUi1JT1YgY2FwYWJsZSBHUFUgaXMgcGx1Z2dl
ZCBpbnRvIHRoZSBTUi1JT1YgaW5jYXBhYmxlIA0KPj4+ID4gPiA+IHBsYXRmb3JtLiBJdCB3b3Vs
ZCBjYXVzZSBhIHByb2JsZW0gb24gUENJIHJlc291cmNlIGFsbG9jYXRpb24gDQo+Pj4gPiA+ID4g
aW4gY3VycmVudCBMaW51eCBrZXJuZWwuDQo+Pj4gPiA+ID4NCj4+PiA+ID4gPiBUaGVyZWZvcmUg
aW4gb3JkZXIgdG8gYWxsb3cgdGhlIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZGV2aWNlIA0KPj4+
ID4gPiA+IG9mIFNSLUlPViBjYXBhYmxlIEdQVSB0byB3b3JrIG9uIHRoZSBTUi1JT1YgaW5jYXBh
YmxlIA0KPj4+ID4gPiA+IHBsYXRmb3JtLCBpdCBpcyByZXF1aXJlZCB0byB2ZXJpZnkgY29uZGl0
aW9ucyBmb3IgaW5pdGlhbGl6aW5nIA0KPj4+ID4gPiA+IEJBUiByZXNvdXJjZXMgb24gQU1EIFNS
LUlPViBjYXBhYmxlIEdQVXMuDQo+Pj4gPiA+ID4NCj4+PiA+ID4gPiBJZiB0aGUgZGV2aWNlIGlz
IGFuIEFNRCBncmFwaGljcyBkZXZpY2UgYW5kIGl0IHN1cHBvcnRzIFNSLUlPViANCj4+PiA+ID4g
PiBpdCB3aWxsIHJlcXVpcmUgYSBsYXJnZSBhbW91bnQgb2YgcmVzb3VyY2VzLg0KPj4+ID4gPiA+
IEJlZm9yZSBjYWxsaW5nIHNyaW92X2luaXQoKSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0g
QklPUyANCj4+PiA+ID4gPiBhbHNvIHN1cHBvcnRzIFNSLUlPViBhbmQgdGhhdCBzeXN0ZW0gQklP
UyBoYXMgYmVlbiBhYmxlIHRvIA0KPj4+ID4gPiA+IGFsbG9jYXRlIGVub3VnaCByZXNvdXJjZXMu
DQo+Pj4gPiA+ID4gSWYgdGhlIFZGIEJBUnMgYXJlIHplcm8gdGhlbiB0aGUgc3lzdGVtIEJJT1Mg
ZG9lcyBub3Qgc3VwcG9ydCANCj4+PiA+ID4gPiBTUi1JT1Ygb3IgaXQgY291bGQgbm90IGFsbG9j
YXRlIHRoZSByZXNvdXJjZXMgYW5kIHRoaXMgDQo+Pj4gPiA+ID4gcGxhdGZvcm0gd2lsbCBub3Qg
c3VwcG9ydCBBTUQgZ3JhcGhpY3MgU1ItSU9WLg0KPj4+ID4gPiA+IFRoZXJlZm9yZSBkbyBub3Qg
Y2FsbCBzcmlvdl9pbml0KCkuDQo+Pj4gPiA+ID4gSWYgdGhlIHN5c3RlbSBCSU9TIGRvZXMgc3Vw
cG9ydCBTUi1JT1YgdGhlbiB0aGUgVkYgQkFScyB3aWxsIA0KPj4+ID4gPiA+IGJlIHByb3Blcmx5
IGluaXRpYWxpemVkIHRvIG5vbi16ZXJvIHZhbHVlcy4NCj4+PiA+ID4gPg0KPj4+ID4gPiA+IEJl
bG93IGlzIHRoZSBwYXRjaCBhZ2FpbnN0IHRvIEtlcm5lbCA0LjggJiA0LjkuIFBsZWFzZSByZXZp
ZXcuDQo+Pj4gPiA+ID4NCj4+PiA+ID4gPiBJIGNoZWNrZWQgdGhlIGRyaXZlcnMvcGNpL3F1aXJr
cy5jLCBpdCBsb29rcyB0aGUgDQo+Pj4gPiA+ID4gd29ya2Fyb3VuZHMvZml4ZXMgaW4gcXVpcmtz
LmMgYXJlIGZvciBzcGVjaWZpYyBkZXZpY2VzIGFuZCBvbmUgDQo+Pj4gPiA+ID4gb3IgbW9yZSBk
ZXZpY2UgSUQgYXJlIGRlZmluZWQgZm9yIHRoZSBzcGVjaWZpYyBkZXZpY2VzLiANCj4+PiA+ID4g
PiBIb3dldmVyIG15IHBhdGNoIGlzIGZvciBhbGwgQU1EIFNSLUlPViBjYXBhYmxlIEdQVXMsIHRo
YXQgDQo+Pj4gPiA+ID4gaW5jbHVkZXMgYWxsIGV4aXN0aW5nDQo+YW5kIGZ1dHVyZSBBTUQgc2Vy
dmVyIEdQVXMuDQo+Pj4gPiA+ID4gU28gaXQgZG9lc24ndCBzZWVtIGxpa2UgYSBnb29kIGZpdCB0
byBwdXQgdGhlIGZpeCBpbiBxdWlya3MuYy4NCj4+PiA+ID4NCj4+PiA+ID4NCj4+PiA+ID4gV2h5
IGlzIGFuIEFNRCBncmFwaGljcyBjYXJkIHVuaXF1ZSBoZXJlPyAgRG9lc24ndCBzcmlvdl9pbml0
KCkgDQo+Pj4gPiA+IGFsd2F5cyBuZWVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGRldmljZXMg
b2YgYW55IHR5cGUgd2hlcmUgDQo+Pj4gPiA+IHRoZSBCSU9TIGhhc24ndCBpbml0aWFsaXplZCB0
aGUgU1ItSU9WIGNhcGFiaWxpdHk/ICBTb21lIFNSLUlPViANCj4+PiA+ID4gZGV2aWNlcyBjYW4g
Zml0IHRoZWlyIFZGcyB3aXRoaW4gYSBtaW5pbXVtIGJyaWRnZSBhcGVydHVyZSwgbW9zdCANCj4+
PiA+ID4gY2Fubm90LiAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGUgVkYgcmVzb3VyY2UgcmVx
dWlyZW1lbnRzIA0KPj4+ID4gPiBiZWluZyBleGNlcHRpb25hbGx5IGxhcmdlIGRpY3RhdGVzIHRo
YXQgdGhleSByZWNlaXZlIHNwZWNpYWwgaGFuZGxpbmcuDQo+Pj4gPiA+IFRoYW5rcywNCj4+PiA+
ID4NCj4+PiA+ID4gQWxleA0KPj4+ID4gPg0KPj4+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IENvbGxp
bnMgQ2hlbmcgPGNvbGxpbnMuY2hlbmdAYW1kLmNvbT4NCj4+PiA+ID4gPiAtLS0NCj4+PiA+ID4g
PiAgZHJpdmVycy9wY2kvaW92LmMgfCA2Mw0KPj4+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0NCj4+PiA+ID4gPiAgMSBmaWxlIGNo
YW5nZWQsIDYwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQo+Pj4gPiA+ID4NCj4+PiA+
ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92LmMgYi9kcml2ZXJzL3BjaS9pb3YuYyBp
bmRleA0KPj4+ID4gPiA+IGUzMGYwNWMuLmU0ZjE0MDUgMTAwNjQ0DQo+Pj4gPiA+ID4gLS0tIGEv
ZHJpdmVycy9wY2kvaW92LmMNCj4+PiA+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9pb3YuYw0KPj4+
ID4gPiA+IEBAIC01MjMsNiArNTIzLDQ1IEBAIHN0YXRpYyB2b2lkIHNyaW92X3Jlc3RvcmVfc3Rh
dGUoc3RydWN0IA0KPj4+ID4gPiA+IHBjaV9kZXYNCj4qZGV2KQ0KPj4+ID4gPiA+ICAgICAgICAg
ICAgICAgICBtc2xlZXAoMTAwKTsNCj4+PiA+ID4gPiAgfQ0KPj4+ID4gPiA+DQo+Pj4gPiA+ID4g
Ky8qDQo+Pj4gPiA+ID4gKyAqIHBjaV92Zl9iYXJfdmFsaWQgLSBjaGVjayBpZiBWRiBCQVJzIGhh
dmUgcmVzb3VyY2UgDQo+Pj4gPiA+ID4gK2FsbG9jYXRlZA0KPj4+ID4gPiA+ICsgKiBAZGV2OiB0
aGUgUENJIGRldmljZQ0KPj4+ID4gPiA+ICsgKiBAcG9zOiByZWdpc3RlciBvZmZzZXQgb2YgU1It
SU9WIGNhcGFiaWxpdHkgaW4gUENJIGNvbmZpZyANCj4+PiA+ID4gPiArc3BhY2UNCj4+PiA+ID4g
PiArICogUmV0dXJucyB0cnVlIGFueSBWRiBCQVIgaGFzIHJlc291cmNlIGFsbG9jYXRlZCwgZmFs
c2UNCj4+PiA+ID4gPiArICogaWYgYWxsIFZGIEJBUnMgYXJlIGVtcHR5Lg0KPj4+ID4gPiA+ICsg
Ki8NCj4+PiA+ID4gPiArc3RhdGljIGJvb2wgcGNpX3ZmX2Jhcl92YWxpZChzdHJ1Y3QgcGNpX2Rl
diAqZGV2LCBpbnQgcG9zKSB7DQo+Pj4gPiA+ID4gKyAgICAgICBpbnQgaTsNCj4+PiA+ID4gPiAr
ICAgICAgIHUzMiBiYXJfdmFsdWU7DQo+Pj4gPiA+ID4gKyAgICAgICB1MzIgYmFyX3NpemVfbWFz
ayA9IH4oUENJX0JBU0VfQUREUkVTU19TUEFDRSB8DQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCB8DQo+Pj4gPiA+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpOw0KPj4+ID4g
PiA+ICsNCj4+PiA+ID4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1ZfTlVNX0JB
UlM7IGkrKykgew0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdv
cmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQkFSIA0KPj4+ID4gPiA+ICsgKyBpICogNCwNCj4mYmFy
X3ZhbHVlKTsNCj4+PiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGJhcl92YWx1ZSAmIGJhcl9z
aXplX21hc2spDQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
DQo+Pj4gPiA+ID4gKyAgICAgICB9DQo+Pj4gPiA+ID4gKw0KPj4+ID4gPiA+ICsgICAgICAgcmV0
dXJuIGZhbHNlOw0KPj4+ID4gPiA+ICt9DQo+Pj4gPiA+ID4gKw0KPj4+ID4gPiA+ICsvKg0KPj4+
ID4gPiA+ICsgKiBpc19hbWRfZGlzcGxheV9hZGFwdGVyIC0gY2hlY2sgaWYgaXQgaXMgYW4gQU1E
L0FUSSBHUFUgDQo+Pj4gPiA+ID4gK2RldmljZQ0KPj4+ID4gPiA+ICsgKiBAZGV2OiB0aGUgUENJ
IGRldmljZQ0KPj4+ID4gPiA+ICsgKg0KPj4+ID4gPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgZGV2
aWNlIGlzIGFuIEFNRC9BVEkgZGlzcGxheSBhZGFwdGVyLA0KPj4+ID4gPiA+ICsgKiBvdGhlcndp
c2UgcmV0dXJuIGZhbHNlLg0KPj4+ID4gPiA+ICsgKi8NCj4+PiA+ID4gPiArDQo+Pj4gPiA+ID4g
K3N0YXRpYyBib29sIGlzX2FtZF9kaXNwbGF5X2FkYXB0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikg
ew0KPj4+ID4gPiA+ICsgICAgICAgcmV0dXJuICgoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9C
QVNFX0NMQVNTX0RJU1BMQVkpICYmDQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgIChkZXYtPnZl
bmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSSB8fA0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICBk
ZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkpOyB9DQo+Pj4gPiA+ID4gKw0KPj4+ID4g
PiA+ICAvKioNCj4+PiA+ID4gPiAgICogcGNpX2lvdl9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgSU9W
IGNhcGFiaWxpdHkNCj4+PiA+ID4gPiAgICogQGRldjogdGhlIFBDSSBkZXZpY2UNCj4+PiA+ID4g
PiBAQCAtNTM3LDkgKzU3NiwyNyBAQCBpbnQgcGNpX2lvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpk
ZXYpDQo+Pj4gPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KPj4+ID4gPiA+
DQo+Pj4gPiA+ID4gICAgICAgICBwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBD
SV9FWFRfQ0FQX0lEX1NSSU9WKTsNCj4+PiA+ID4gPiAtICAgICAgIGlmIChwb3MpDQo+Pj4gPiA+
ID4gLSAgICAgICAgICAgICAgIHJldHVybiBzcmlvdl9pbml0KGRldiwgcG9zKTsNCj4+PiA+ID4g
PiAtDQo+Pj4gPiA+ID4gKyAgICAgICBpZiAocG9zKSB7DQo+Pj4gPiA+ID4gKyAgICAgICAvKg0K
Pj4+ID4gPiA+ICsgICAgICAgICogSWYgdGhlIGRldmljZSBpcyBhbiBBTUQgZ3JhcGhpY3MgZGV2
aWNlIGFuZCBpdCBzdXBwb3J0cw0KPj4+ID4gPiA+ICsgICAgICAgICogU1ItSU9WIGl0IHdpbGwg
cmVxdWlyZSBhIGxhcmdlIGFtb3VudCBvZiByZXNvdXJjZXMuDQo+Pj4gPiA+ID4gKyAgICAgICAg
KiBCZWZvcmUgY2FsbGluZyBzcmlvdl9pbml0KCkgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc3lzdGVt
DQo+Pj4gPiA+ID4gKyAgICAgICAgKiBCSU9TIGFsc28gc3VwcG9ydHMgU1ItSU9WIGFuZCB0aGF0
IHN5c3RlbSBCSU9TIGhhcyBiZWVuDQo+Pj4gPiA+ID4gKyAgICAgICAgKiBhYmxlIHRvIGFsbG9j
YXRlIGVub3VnaCByZXNvdXJjZXMuDQo+Pj4gPiA+ID4gKyAgICAgICAgKiBJZiB0aGUgVkYgQkFS
cyBhcmUgemVybyB0aGVuIHRoZSBzeXN0ZW0gQklPUyBkb2VzIG5vdA0KPj4+ID4gPiA+ICsgICAg
ICAgICogc3VwcG9ydCBTUi1JT1Ygb3IgaXQgY291bGQgbm90IGFsbG9jYXRlIHRoZSByZXNvdXJj
ZXMNCj4+PiA+ID4gPiArICAgICAgICAqIGFuZCB0aGlzIHBsYXRmb3JtIHdpbGwgbm90IHN1cHBv
cnQgQU1EIGdyYXBoaWNzIFNSLUlPVi4NCj4+PiA+ID4gPiArICAgICAgICAqIFRoZXJlZm9yZSBk
byBub3QgY2FsbCBzcmlvdl9pbml0KCkuDQo+Pj4gPiA+ID4gKyAgICAgICAgKiBJZiB0aGUgc3lz
dGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlPViB0aGVuIHRoZSBWRiBCQVJzDQo+Pj4gPiA+ID4g
KyAgICAgICAgKiB3aWxsIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIG5vbi16ZXJvIHZhbHVl
cy4NCj4+PiA+ID4gPiArICAgICAgICAqLw0KPj4+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAo
aXNfYW1kX2Rpc3BsYXlfYWRhcHRlcihkZXYpKSB7DQo+Pj4gPiA+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBjaV92Zl9iYXJfdmFsaWQoZGV2LCBwb3MpKQ0KPj4+ID4gPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyaW92X2luaXQoZGV2LCBwb3MpOw0K
Pj4+ID4gPiA+ICsgICAgICAgICAgICAgICB9IGVsc2Ugew0KPj4+ID4gPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzcmlvdl9pbml0KGRldiwgcG9zKTsNCj4+PiA+ID4gPiArICAg
ICAgICAgICAgICAgfQ0KPj4+ID4gPiA+ICsgICAgICAgfQ0KPj4+ID4gPiA+ICAgICAgICAgcmV0
dXJuIC1FTk9ERVY7DQo+Pj4gPiA+ID4gIH0NCj4+PiA+ID4gPg0KPj4+ID4gPg0KPj4+ID4NCj4+
Pg0KPj4NCg==

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-20 10:37                       ` Cheng, Collins
@ 2017-05-20 14:29                         ` Zytaruk, Kelly
  -1 siblings, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-20 14:29 UTC (permalink / raw)
  To: Cheng, Collins, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu

Collins,

Okay, good to know.
Is there a common solution that can handle all cases?

Thanks,
Kelly

>-----Original Message-----
>From: Cheng, Collins
>Sent: Saturday, May 20, 2017 6:38 AM
>To: Zytaruk, Kelly; Alexander Duyck; Alex Williamson
>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>Deucher, Alexander; Yinghai Lu
>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>Hi Kelly,
>
>This issue also happens in "not SR-IOV capable" SBIOS. It seems some "not SR-IOV
>capable" SBIOS will directly report error in system BIOS boot stage and doesn't
>boot to OS. But other "not SR-IOV capable" SBIOS would not report error and
>boot to Linux.
>
>-Collins Cheng
>
>
>-----Original Message-----
>From: Zytaruk, Kelly
>Sent: Saturday, May 20, 2017 6:28 PM
>To: Cheng, Collins <Collins.Cheng@amd.com>; Alexander Duyck
><alexander.duyck@gmail.com>; Alex Williamson <alex.williamson@redhat.com>
>Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-
>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>;
>Yinghai Lu <yinghai@kernel.org>
>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>incapable platform
>
>
>
>>-----Original Message-----
>>From: Cheng, Collins
>>Sent: Saturday, May 20, 2017 12:53 AM
>>To: Alexander Duyck; Alex Williamson
>>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org;
>>linux-kernel@vger.kernel.org; Deucher, Alexander; Zytaruk, Kelly;
>>Yinghai Lu
>>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>incapable platform
>>
>>Hi Alex,
>>
>>Yes, I hope kernel can disable SR-IOV and related VF resource
>>allocation if the system BIOS is not SR-IOV capable.
>>
>>Adding the parameter "pci=nosriov" sounds a doable solution, but it
>>would need user to add this parameter manually, right? I think an
>>automatic detection would be better. My patch is trying to auto detect and
>bypass VF resource allocation.
>>
>>
>>-Collins Cheng
>>
>
>Collins, be careful about this.  I don't think that this is what we want.  If you add
>"pci=nosriov" then you are globally disabling SRIOV for all devices.  This is not the
>solution that we are looking for.
>Remember that there are 3 types of SBIOS; "not SR-IOV capable", "SR-IOV
>capable but does not support large resources", "Complete SR-IOV support".
>
>The problem is that we are trying to find a fix for "broken" SBIOS that does
>support SR-IOV but does not support the full SR-IOV capabilities that devices with
>large resources require.
>
>Thanks,
>Kelly
>
>>
>>-----Original Message-----
>>From: Alexander Duyck [mailto:alexander.duyck@gmail.com]
>>Sent: Friday, May 19, 2017 11:44 PM
>>To: Alex Williamson <alex.williamson@redhat.com>
>>Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas
>><bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-
>>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>;
>>Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>incapable platform
>>
>>On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
>><alex.williamson@redhat.com> wrote:
>>> On Mon, 15 May 2017 08:19:28 +0000
>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>
>>>> Hi Williamson,
>>>>
>>>> We cannot assume BIOS supports SR-IOV, actually only newer server
>>motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or
>>older server motherboard BIOS doesn't support SR-IOV. This issue would
>>happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop
>motherboard.
>>>
>>> Servers should be supporting SR-IOV for a long time now.  What really
>>> is there to a BIOS supporting SR-IOV anyway, it's simply reserving
>>> sufficient bus number and MMIO resources such that we can enable the
>>> VFs.  This process isn't exclusively reserved for the BIOS.  Some
>>> platforms may choose to only initialize boot devices, leaving the
>>> rest for the OS to program.  The initial proposal here to disable
>>> SR-IOV if not programmed at OS hand-off disables even the possibility
>>> of the OS reallocating resources for this device.
>>
>>There are differences between supporting SR-IOV and supporting SR-IOV
>>on devices with massive resources. I know I have seen NICs that will
>>keep a system from completing POST if SR-IOV is enabled, and MMIO
>>beyond 4G is not. My guess would be that the issues being seen are
>>probably that they disable SR-IOV in the BIOS in such a setup and end
>>up running into issues when they try to boot into the Linux kernel as
>>it goes through and tries to allocate resources for SR-IOV even though it was
>disabled in the BIOS.
>>
>>It might make sense to add a kernel parameter something like a "pci=nosriov"
>>that would allow for disabling SR-IOV and related resource allocation
>>if that is what we are talking about. That way you could plug in these
>>types of devices into a system with a legacy bios or that doesn't wan
>>to allocate addresses above 32b for MMIO, and this parameter would be
>>all that is needed to disable SR-IOV so you could plug in a NIC that has SR-IOV
>associated with it.
>>
>>>> I agree that failure to allocate VF resources should leave the
>>>> device in no
>>worse condition than before it tried. I hope kernel could allocate PF
>>device resource before allocating VF device resource, and keep PF
>>device resource valid and functional if failed to allocate VF device resource.
>>>>
>>>> I will send out dmesg log lspci info tomorrow. Thanks.
>>>
>>> Thanks,
>>> Alex
>>>
>>>> -----Original Message-----
>>>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>> Sent: Friday, May 12, 2017 10:43 PM
>>>> To: Cheng, Collins <Collins.Cheng@amd.com>
>>>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>>>> linux-kernel@vger.kernel.org; Deucher, Alexander
>>>> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;
>>>> Yinghai Lu <yinghai@kernel.org>
>>>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>> SR-IOV incapable platform
>>>>
>>>> On Fri, 12 May 2017 04:51:43 +0000
>>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>>
>>>> > Hi Williamson,
>>>> >
>>>> > I verified the patch is working for both AMD SR-IOV GPU and Intel
>>>> > SR-IOV
>>NIC. I don't think it is redundant to check the VF BAR valid before
>>call sriov_init(), it is safe and saving boot time, also there is no a
>>better method to know if system BIOS has correctly initialized the SR-IOV
>capability or not.
>>>>
>>>> It also masks an underlying bug and creates a maintenance issue that
>>>> we won't
>>know when it's safe to remove this workaround.  I don't think faster
>>boot is valid rationale, in one case SR-IOV is completely disabled, the
>>other we attempt to allocate the resources the BIOS failed to provide.
>>I expect this is also a corner case, the BIOS should typically support
>>SR-IOV, therefore this situation should be an exception.
>>>>
>>>> > I did not try to fix the issue from the kernel resource allocation
>>>> > perspective,
>>it is because:
>>>> >     1. I am not very familiar with the PCI resource allocation scheme in
>kernel.
>>For example, in sriov_init(), kernel will re-assign the PCI resource
>>for both VF and PF. I don't understand why kernel allocates resource
>>for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>>>> >     2. I am not sure if kernel has error handler if PCI resource allocation
>failed.
>>In this case, kernel cannot allocate enough resource to PF. It should
>>trigger some error handler to either just keep original BAR values set
>>by system BIOS, or disable this device and log errors.
>>>>
>>>> I think these are the issues we should be trying to solve and I'm
>>>> sure folks on the linux-pci list can help us identify the bug.
>>>> Minimally, failure to allocate VF resources should leave the device
>>>> in no worse condition than before it tried.  Perhaps you could post
>>>> more details about the issue, boot with pci=earlydump, post dmesg of
>>>> a boot where the PF resources are incorrectly re-allocated, and
>>>> include lspci -vvv for the SR-IOV device.  Also, please test with
>>>> the latest upstream kernel, upstream only patches old kernels
>>>> through stable backports of commits to the latest kernel.  Adding
>>>> Yinghai as a resource allocation expert. Thanks,
>>>>
>>>> Alex
>>>>
>>>> > -----Original Message-----
>>>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>> > Sent: Friday, May 12, 2017 12:01 PM
>>>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>>>> > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>>>> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,
>>>> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>>>> > <Kelly.Zytaruk@amd.com>
>>>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>> > SR-IOV incapable platform
>>>> >
>>>> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins"
>>>> > <Collins.Cheng@amd.com> wrote:
>>>> >
>>>> > > Hi Williamson,
>>>> > >
>>>> > > GPU card needs more BAR aperture resource than other PCI
>>>> > > devices. For
>>example, Intel SR-IOV network card only require 512KB memory resource
>>for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory
>>resource for frame buffer BAR aperture.
>>>> > >
>>>> > > If the system BIOS supports SR-IOV, it will reserve enough
>>>> > > resource for all
>>VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate
>>the enough resource for VF BARs, only PF BAR will be assigned and VF
>>BARs are empty. Then system boots to Linux kernel and kernel doesn't
>>check if the VF BARs are empty or valid. Kernel will re-assign the BAR
>>resources for PF and all VFs. The problem I saw is that kernel will
>>fail to allocate PF BAR resource because some resources are assigned to
>>VF, this is not expected. So kernel might need to do some check before
>>re-assign the PF/VF resource, so that PF device will be correctly assigned BAR
>resource and user can use PF device.
>>>> >
>>>> > So the problem is that something bad happens when the kernel is
>>>> > trying to reallocate resources in order to fulfill the
>>>> > requirements of the VFs, leaving the PF resources incorrectly
>>>> > programmed?  Why not just fix that bug rather than creating
>>>> > special handling for this vendor/class of device which disables
>>>> > any attempt to fixup resources for SR-IOV?  IOW, this patch just
>>>> > avoids the problem for your devices rather than fixing the bug.
>>>> > I'd suggest fixing the bug such that the PF is left in a
>>>> > functional state if the kernel is unable to allocate sufficient
>>>> > resources for the VFs.  Thanks,
>>>> >
>>>> > Alex
>>>> >
>>>> > > -----Original Message-----
>>>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>> > > Sent: Friday, May 12, 2017 11:21 AM
>>>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>>>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>>>> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>>>> > > <Kelly.Zytaruk@amd.com>
>>>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>> > > SR-IOV incapable platform
>>>> > >
>>>> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>>>> > > <Collins.Cheng@amd.com> wrote:
>>>> > >
>>>> > > > Hi Helgaas,
>>>> > > >
>>>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>>>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>>>> > > > platform. It would cause a problem on PCI resource allocation
>>>> > > > in current Linux kernel.
>>>> > > >
>>>> > > > Therefore in order to allow the PF (Physical Function) device
>>>> > > > of SR-IOV capable GPU to work on the SR-IOV incapable
>>>> > > > platform, it is required to verify conditions for initializing
>>>> > > > BAR resources on AMD SR-IOV capable GPUs.
>>>> > > >
>>>> > > > If the device is an AMD graphics device and it supports SR-IOV
>>>> > > > it will require a large amount of resources.
>>>> > > > Before calling sriov_init() must ensure that the system BIOS
>>>> > > > also supports SR-IOV and that system BIOS has been able to
>>>> > > > allocate enough resources.
>>>> > > > If the VF BARs are zero then the system BIOS does not support
>>>> > > > SR-IOV or it could not allocate the resources and this
>>>> > > > platform will not support AMD graphics SR-IOV.
>>>> > > > Therefore do not call sriov_init().
>>>> > > > If the system BIOS does support SR-IOV then the VF BARs will
>>>> > > > be properly initialized to non-zero values.
>>>> > > >
>>>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>>> > > >
>>>> > > > I checked the drivers/pci/quirks.c, it looks the
>>>> > > > workarounds/fixes in quirks.c are for specific devices and one
>>>> > > > or more device ID are defined for the specific devices.
>>>> > > > However my patch is for all AMD SR-IOV capable GPUs, that
>>>> > > > includes all existing
>>and future AMD server GPUs.
>>>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>>>> > >
>>>> > >
>>>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>>>> > > always need to be able to deal with devices of any type where
>>>> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV
>>>> > > devices can fit their VFs within a minimum bridge aperture, most
>>>> > > cannot.  I don't understand why the VF resource requirements
>>>> > > being exceptionally large dictates that they receive special handling.
>>>> > > Thanks,
>>>> > >
>>>> > > Alex
>>>> > >
>>>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>>>> > > > ---
>>>> > > >  drivers/pci/iov.c | 63
>>>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>>>> > > >
>>>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>>>> > > > e30f05c..e4f1405 100644
>>>> > > > --- a/drivers/pci/iov.c
>>>> > > > +++ b/drivers/pci/iov.c
>>>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct
>>>> > > > pci_dev
>>*dev)
>>>> > > >                 msleep(100);
>>>> > > >  }
>>>> > > >
>>>> > > > +/*
>>>> > > > + * pci_vf_bar_valid - check if VF BARs have resource
>>>> > > > +allocated
>>>> > > > + * @dev: the PCI device
>>>> > > > + * @pos: register offset of SR-IOV capability in PCI config
>>>> > > > +space
>>>> > > > + * Returns true any VF BAR has resource allocated, false
>>>> > > > + * if all VF BARs are empty.
>>>> > > > + */
>>>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>>>> > > > +       int i;
>>>> > > > +       u32 bar_value;
>>>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>>>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>>>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>>>> > > > +
>>>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>>>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR
>>>> > > > + + i * 4,
>>&bar_value);
>>>> > > > +               if (bar_value & bar_size_mask)
>>>> > > > +                       return true;
>>>> > > > +       }
>>>> > > > +
>>>> > > > +       return false;
>>>> > > > +}
>>>> > > > +
>>>> > > > +/*
>>>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU
>>>> > > > +device
>>>> > > > + * @dev: the PCI device
>>>> > > > + *
>>>> > > > + * Returns true if device is an AMD/ATI display adapter,
>>>> > > > + * otherwise return false.
>>>> > > > + */
>>>> > > > +
>>>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>>>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>>>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>>>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>>>> > > > +
>>>> > > >  /**
>>>> > > >   * pci_iov_init - initialize the IOV capability
>>>> > > >   * @dev: the PCI device
>>>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>>> > > >                 return -ENODEV;
>>>> > > >
>>>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>>>> > > > -       if (pos)
>>>> > > > -               return sriov_init(dev, pos);
>>>> > > > -
>>>> > > > +       if (pos) {
>>>> > > > +       /*
>>>> > > > +        * If the device is an AMD graphics device and it supports
>>>> > > > +        * SR-IOV it will require a large amount of resources.
>>>> > > > +        * Before calling sriov_init() must ensure that the system
>>>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>>>> > > > +        * able to allocate enough resources.
>>>> > > > +        * If the VF BARs are zero then the system BIOS does not
>>>> > > > +        * support SR-IOV or it could not allocate the resources
>>>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>>>> > > > +        * Therefore do not call sriov_init().
>>>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>>>> > > > +        * will be properly initialized to non-zero values.
>>>> > > > +        */
>>>> > > > +               if (is_amd_display_adapter(dev)) {
>>>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>>>> > > > +                               return sriov_init(dev, pos);
>>>> > > > +               } else {
>>>> > > > +                       return sriov_init(dev, pos);
>>>> > > > +               }
>>>> > > > +       }
>>>> > > >         return -ENODEV;
>>>> > > >  }
>>>> > > >
>>>> > >
>>>> >
>>>>
>>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-20 14:29                         ` Zytaruk, Kelly
  0 siblings, 0 replies; 43+ messages in thread
From: Zytaruk, Kelly @ 2017-05-20 14:29 UTC (permalink / raw)
  To: Cheng, Collins, Alexander Duyck, Alex Williamson
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander, Yinghai Lu

Q29sbGlucywNCg0KT2theSwgZ29vZCB0byBrbm93Lg0KSXMgdGhlcmUgYSBjb21tb24gc29sdXRp
b24gdGhhdCBjYW4gaGFuZGxlIGFsbCBjYXNlcz8NCg0KVGhhbmtzLA0KS2VsbHkNCg0KPi0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogQ2hlbmcsIENvbGxpbnMNCj5TZW50OiBTYXR1
cmRheSwgTWF5IDIwLCAyMDE3IDY6MzggQU0NCj5UbzogWnl0YXJ1aywgS2VsbHk7IEFsZXhhbmRl
ciBEdXljazsgQWxleCBXaWxsaWFtc29uDQo+Q2M6IEJqb3JuIEhlbGdhYXM7IGxpbnV4LXBjaUB2
Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+RGV1Y2hlciwg
QWxleGFuZGVyOyBZaW5naGFpIEx1DQo+U3ViamVjdDogUkU6IFtQQVRDSF0gUENJOiBNYWtlIFNS
LUlPViBjYXBhYmxlIEdQVSB3b3JraW5nIG9uIHRoZSBTUi1JT1YNCj5pbmNhcGFibGUgcGxhdGZv
cm0NCj4NCj5IaSBLZWxseSwNCj4NCj5UaGlzIGlzc3VlIGFsc28gaGFwcGVucyBpbiAibm90IFNS
LUlPViBjYXBhYmxlIiBTQklPUy4gSXQgc2VlbXMgc29tZSAibm90IFNSLUlPVg0KPmNhcGFibGUi
IFNCSU9TIHdpbGwgZGlyZWN0bHkgcmVwb3J0IGVycm9yIGluIHN5c3RlbSBCSU9TIGJvb3Qgc3Rh
Z2UgYW5kIGRvZXNuJ3QNCj5ib290IHRvIE9TLiBCdXQgb3RoZXIgIm5vdCBTUi1JT1YgY2FwYWJs
ZSIgU0JJT1Mgd291bGQgbm90IHJlcG9ydCBlcnJvciBhbmQNCj5ib290IHRvIExpbnV4Lg0KPg0K
Pi1Db2xsaW5zIENoZW5nDQo+DQo+DQo+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj5Gcm9t
OiBaeXRhcnVrLCBLZWxseQ0KPlNlbnQ6IFNhdHVyZGF5LCBNYXkgMjAsIDIwMTcgNjoyOCBQTQ0K
PlRvOiBDaGVuZywgQ29sbGlucyA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPjsgQWxleGFuZGVyIER1
eWNrDQo+PGFsZXhhbmRlci5kdXlja0BnbWFpbC5jb20+OyBBbGV4IFdpbGxpYW1zb24gPGFsZXgu
d2lsbGlhbXNvbkByZWRoYXQuY29tPg0KPkNjOiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29n
bGUuY29tPjsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgbGludXgtDQo+a2VybmVsQHZnZXIu
a2VybmVsLm9yZzsgRGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29t
PjsNCj5ZaW5naGFpIEx1IDx5aW5naGFpQGtlcm5lbC5vcmc+DQo+U3ViamVjdDogUkU6IFtQQVRD
SF0gUENJOiBNYWtlIFNSLUlPViBjYXBhYmxlIEdQVSB3b3JraW5nIG9uIHRoZSBTUi1JT1YNCj5p
bmNhcGFibGUgcGxhdGZvcm0NCj4NCj4NCj4NCj4+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4+RnJvbTogQ2hlbmcsIENvbGxpbnMNCj4+U2VudDogU2F0dXJkYXksIE1heSAyMCwgMjAxNyAx
Mjo1MyBBTQ0KPj5UbzogQWxleGFuZGVyIER1eWNrOyBBbGV4IFdpbGxpYW1zb24NCj4+Q2M6IEJq
b3JuIEhlbGdhYXM7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7DQo+PmxpbnV4LWtlcm5lbEB2
Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsIEFsZXhhbmRlcjsgWnl0YXJ1aywgS2VsbHk7DQo+Pllp
bmdoYWkgTHUNCj4+U3ViamVjdDogUkU6IFtQQVRDSF0gUENJOiBNYWtlIFNSLUlPViBjYXBhYmxl
IEdQVSB3b3JraW5nIG9uIHRoZSBTUi1JT1YNCj4+aW5jYXBhYmxlIHBsYXRmb3JtDQo+Pg0KPj5I
aSBBbGV4LA0KPj4NCj4+WWVzLCBJIGhvcGUga2VybmVsIGNhbiBkaXNhYmxlIFNSLUlPViBhbmQg
cmVsYXRlZCBWRiByZXNvdXJjZQ0KPj5hbGxvY2F0aW9uIGlmIHRoZSBzeXN0ZW0gQklPUyBpcyBu
b3QgU1ItSU9WIGNhcGFibGUuDQo+Pg0KPj5BZGRpbmcgdGhlIHBhcmFtZXRlciAicGNpPW5vc3Jp
b3YiIHNvdW5kcyBhIGRvYWJsZSBzb2x1dGlvbiwgYnV0IGl0DQo+PndvdWxkIG5lZWQgdXNlciB0
byBhZGQgdGhpcyBwYXJhbWV0ZXIgbWFudWFsbHksIHJpZ2h0PyBJIHRoaW5rIGFuDQo+PmF1dG9t
YXRpYyBkZXRlY3Rpb24gd291bGQgYmUgYmV0dGVyLiBNeSBwYXRjaCBpcyB0cnlpbmcgdG8gYXV0
byBkZXRlY3QgYW5kDQo+YnlwYXNzIFZGIHJlc291cmNlIGFsbG9jYXRpb24uDQo+Pg0KPj4NCj4+
LUNvbGxpbnMgQ2hlbmcNCj4+DQo+DQo+Q29sbGlucywgYmUgY2FyZWZ1bCBhYm91dCB0aGlzLiAg
SSBkb24ndCB0aGluayB0aGF0IHRoaXMgaXMgd2hhdCB3ZSB3YW50LiAgSWYgeW91IGFkZA0KPiJw
Y2k9bm9zcmlvdiIgdGhlbiB5b3UgYXJlIGdsb2JhbGx5IGRpc2FibGluZyBTUklPViBmb3IgYWxs
IGRldmljZXMuICBUaGlzIGlzIG5vdCB0aGUNCj5zb2x1dGlvbiB0aGF0IHdlIGFyZSBsb29raW5n
IGZvci4NCj5SZW1lbWJlciB0aGF0IHRoZXJlIGFyZSAzIHR5cGVzIG9mIFNCSU9TOyAibm90IFNS
LUlPViBjYXBhYmxlIiwgIlNSLUlPVg0KPmNhcGFibGUgYnV0IGRvZXMgbm90IHN1cHBvcnQgbGFy
Z2UgcmVzb3VyY2VzIiwgIkNvbXBsZXRlIFNSLUlPViBzdXBwb3J0Ii4NCj4NCj5UaGUgcHJvYmxl
bSBpcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZmluZCBhIGZpeCBmb3IgImJyb2tlbiIgU0JJT1Mg
dGhhdCBkb2VzDQo+c3VwcG9ydCBTUi1JT1YgYnV0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZ1bGwg
U1ItSU9WIGNhcGFiaWxpdGllcyB0aGF0IGRldmljZXMgd2l0aA0KPmxhcmdlIHJlc291cmNlcyBy
ZXF1aXJlLg0KPg0KPlRoYW5rcywNCj5LZWxseQ0KPg0KPj4NCj4+LS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCj4+RnJvbTogQWxleGFuZGVyIER1eWNrIFttYWlsdG86YWxleGFuZGVyLmR1eWNr
QGdtYWlsLmNvbV0NCj4+U2VudDogRnJpZGF5LCBNYXkgMTksIDIwMTcgMTE6NDQgUE0NCj4+VG86
IEFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+DQo+PkNjOiBDaGVu
ZywgQ29sbGlucyA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPjsgQmpvcm4gSGVsZ2Fhcw0KPj48Ymhl
bGdhYXNAZ29vZ2xlLmNvbT47IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0KPj5r
ZXJuZWxAdmdlci5rZXJuZWwub3JnOyBEZXVjaGVyLCBBbGV4YW5kZXIgPEFsZXhhbmRlci5EZXVj
aGVyQGFtZC5jb20+Ow0KPj5aeXRhcnVrLCBLZWxseSA8S2VsbHkuWnl0YXJ1a0BhbWQuY29tPjsg
WWluZ2hhaSBMdSA8eWluZ2hhaUBrZXJuZWwub3JnPg0KPj5TdWJqZWN0OiBSZTogW1BBVENIXSBQ
Q0k6IE1ha2UgU1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlIFNSLUlPVg0KPj5pbmNh
cGFibGUgcGxhdGZvcm0NCj4+DQo+Pk9uIE1vbiwgTWF5IDE1LCAyMDE3IGF0IDEwOjUzIEFNLCBB
bGV4IFdpbGxpYW1zb24NCj4+PGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tPiB3cm90ZToNCj4+
PiBPbiBNb24sIDE1IE1heSAyMDE3IDA4OjE5OjI4ICswMDAwDQo+Pj4gIkNoZW5nLCBDb2xsaW5z
IiA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPiB3cm90ZToNCj4+Pg0KPj4+PiBIaSBXaWxsaWFtc29u
LA0KPj4+Pg0KPj4+PiBXZSBjYW5ub3QgYXNzdW1lIEJJT1Mgc3VwcG9ydHMgU1ItSU9WLCBhY3R1
YWxseSBvbmx5IG5ld2VyIHNlcnZlcg0KPj5tb3RoZXJib2FyZCBCSU9TIHN1cHBvcnRzIFNSLUlP
Vi4gTm9ybWFsIGRlc2t0b3AgbW90aGVyYm9hcmQgQklPUyBvcg0KPj5vbGRlciBzZXJ2ZXIgbW90
aGVyYm9hcmQgQklPUyBkb2Vzbid0IHN1cHBvcnQgU1ItSU9WLiBUaGlzIGlzc3VlIHdvdWxkDQo+
PmhhcHBlbiBpZiBhbiB1c2VyIHBsdWdzIG91ciBBTUQgU1ItSU9WIGNhcGFibGUgR1BVIGNhcmQg
dG8gYSBub3JtYWwgZGVza3RvcA0KPm1vdGhlcmJvYXJkLg0KPj4+DQo+Pj4gU2VydmVycyBzaG91
bGQgYmUgc3VwcG9ydGluZyBTUi1JT1YgZm9yIGEgbG9uZyB0aW1lIG5vdy4gIFdoYXQgcmVhbGx5
DQo+Pj4gaXMgdGhlcmUgdG8gYSBCSU9TIHN1cHBvcnRpbmcgU1ItSU9WIGFueXdheSwgaXQncyBz
aW1wbHkgcmVzZXJ2aW5nDQo+Pj4gc3VmZmljaWVudCBidXMgbnVtYmVyIGFuZCBNTUlPIHJlc291
cmNlcyBzdWNoIHRoYXQgd2UgY2FuIGVuYWJsZSB0aGUNCj4+PiBWRnMuICBUaGlzIHByb2Nlc3Mg
aXNuJ3QgZXhjbHVzaXZlbHkgcmVzZXJ2ZWQgZm9yIHRoZSBCSU9TLiAgU29tZQ0KPj4+IHBsYXRm
b3JtcyBtYXkgY2hvb3NlIHRvIG9ubHkgaW5pdGlhbGl6ZSBib290IGRldmljZXMsIGxlYXZpbmcg
dGhlDQo+Pj4gcmVzdCBmb3IgdGhlIE9TIHRvIHByb2dyYW0uICBUaGUgaW5pdGlhbCBwcm9wb3Nh
bCBoZXJlIHRvIGRpc2FibGUNCj4+PiBTUi1JT1YgaWYgbm90IHByb2dyYW1tZWQgYXQgT1MgaGFu
ZC1vZmYgZGlzYWJsZXMgZXZlbiB0aGUgcG9zc2liaWxpdHkNCj4+PiBvZiB0aGUgT1MgcmVhbGxv
Y2F0aW5nIHJlc291cmNlcyBmb3IgdGhpcyBkZXZpY2UuDQo+Pg0KPj5UaGVyZSBhcmUgZGlmZmVy
ZW5jZXMgYmV0d2VlbiBzdXBwb3J0aW5nIFNSLUlPViBhbmQgc3VwcG9ydGluZyBTUi1JT1YNCj4+
b24gZGV2aWNlcyB3aXRoIG1hc3NpdmUgcmVzb3VyY2VzLiBJIGtub3cgSSBoYXZlIHNlZW4gTklD
cyB0aGF0IHdpbGwNCj4+a2VlcCBhIHN5c3RlbSBmcm9tIGNvbXBsZXRpbmcgUE9TVCBpZiBTUi1J
T1YgaXMgZW5hYmxlZCwgYW5kIE1NSU8NCj4+YmV5b25kIDRHIGlzIG5vdC4gTXkgZ3Vlc3Mgd291
bGQgYmUgdGhhdCB0aGUgaXNzdWVzIGJlaW5nIHNlZW4gYXJlDQo+PnByb2JhYmx5IHRoYXQgdGhl
eSBkaXNhYmxlIFNSLUlPViBpbiB0aGUgQklPUyBpbiBzdWNoIGEgc2V0dXAgYW5kIGVuZA0KPj51
cCBydW5uaW5nIGludG8gaXNzdWVzIHdoZW4gdGhleSB0cnkgdG8gYm9vdCBpbnRvIHRoZSBMaW51
eCBrZXJuZWwgYXMNCj4+aXQgZ29lcyB0aHJvdWdoIGFuZCB0cmllcyB0byBhbGxvY2F0ZSByZXNv
dXJjZXMgZm9yIFNSLUlPViBldmVuIHRob3VnaCBpdCB3YXMNCj5kaXNhYmxlZCBpbiB0aGUgQklP
Uy4NCj4+DQo+Pkl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gYWRkIGEga2VybmVsIHBhcmFtZXRlciBz
b21ldGhpbmcgbGlrZSBhICJwY2k9bm9zcmlvdiINCj4+dGhhdCB3b3VsZCBhbGxvdyBmb3IgZGlz
YWJsaW5nIFNSLUlPViBhbmQgcmVsYXRlZCByZXNvdXJjZSBhbGxvY2F0aW9uDQo+PmlmIHRoYXQg
aXMgd2hhdCB3ZSBhcmUgdGFsa2luZyBhYm91dC4gVGhhdCB3YXkgeW91IGNvdWxkIHBsdWcgaW4g
dGhlc2UNCj4+dHlwZXMgb2YgZGV2aWNlcyBpbnRvIGEgc3lzdGVtIHdpdGggYSBsZWdhY3kgYmlv
cyBvciB0aGF0IGRvZXNuJ3Qgd2FuDQo+PnRvIGFsbG9jYXRlIGFkZHJlc3NlcyBhYm92ZSAzMmIg
Zm9yIE1NSU8sIGFuZCB0aGlzIHBhcmFtZXRlciB3b3VsZCBiZQ0KPj5hbGwgdGhhdCBpcyBuZWVk
ZWQgdG8gZGlzYWJsZSBTUi1JT1Ygc28geW91IGNvdWxkIHBsdWcgaW4gYSBOSUMgdGhhdCBoYXMg
U1ItSU9WDQo+YXNzb2NpYXRlZCB3aXRoIGl0Lg0KPj4NCj4+Pj4gSSBhZ3JlZSB0aGF0IGZhaWx1
cmUgdG8gYWxsb2NhdGUgVkYgcmVzb3VyY2VzIHNob3VsZCBsZWF2ZSB0aGUNCj4+Pj4gZGV2aWNl
IGluIG5vDQo+PndvcnNlIGNvbmRpdGlvbiB0aGFuIGJlZm9yZSBpdCB0cmllZC4gSSBob3BlIGtl
cm5lbCBjb3VsZCBhbGxvY2F0ZSBQRg0KPj5kZXZpY2UgcmVzb3VyY2UgYmVmb3JlIGFsbG9jYXRp
bmcgVkYgZGV2aWNlIHJlc291cmNlLCBhbmQga2VlcCBQRg0KPj5kZXZpY2UgcmVzb3VyY2UgdmFs
aWQgYW5kIGZ1bmN0aW9uYWwgaWYgZmFpbGVkIHRvIGFsbG9jYXRlIFZGIGRldmljZSByZXNvdXJj
ZS4NCj4+Pj4NCj4+Pj4gSSB3aWxsIHNlbmQgb3V0IGRtZXNnIGxvZyBsc3BjaSBpbmZvIHRvbW9y
cm93LiBUaGFua3MuDQo+Pj4NCj4+PiBUaGFua3MsDQo+Pj4gQWxleA0KPj4+DQo+Pj4+IC0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+Pj4+IEZyb206IEFsZXggV2lsbGlhbXNvbiBbbWFpbHRv
OmFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tXQ0KPj4+PiBTZW50OiBGcmlkYXksIE1heSAxMiwg
MjAxNyAxMDo0MyBQTQ0KPj4+PiBUbzogQ2hlbmcsIENvbGxpbnMgPENvbGxpbnMuQ2hlbmdAYW1k
LmNvbT4NCj4+Pj4gQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+OyBsaW51
eC1wY2lAdmdlci5rZXJuZWwub3JnOw0KPj4+PiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3Jn
OyBEZXVjaGVyLCBBbGV4YW5kZXINCj4+Pj4gPEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+OyBa
eXRhcnVrLCBLZWxseSA8S2VsbHkuWnl0YXJ1a0BhbWQuY29tPjsNCj4+Pj4gWWluZ2hhaSBMdSA8
eWluZ2hhaUBrZXJuZWwub3JnPg0KPj4+PiBTdWJqZWN0OiBSZTogW1BBVENIXSBQQ0k6IE1ha2Ug
U1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlDQo+Pj4+IFNSLUlPViBpbmNhcGFibGUg
cGxhdGZvcm0NCj4+Pj4NCj4+Pj4gT24gRnJpLCAxMiBNYXkgMjAxNyAwNDo1MTo0MyArMDAwMA0K
Pj4+PiAiQ2hlbmcsIENvbGxpbnMiIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+IHdyb3RlOg0KPj4+
Pg0KPj4+PiA+IEhpIFdpbGxpYW1zb24sDQo+Pj4+ID4NCj4+Pj4gPiBJIHZlcmlmaWVkIHRoZSBw
YXRjaCBpcyB3b3JraW5nIGZvciBib3RoIEFNRCBTUi1JT1YgR1BVIGFuZCBJbnRlbA0KPj4+PiA+
IFNSLUlPVg0KPj5OSUMuIEkgZG9uJ3QgdGhpbmsgaXQgaXMgcmVkdW5kYW50IHRvIGNoZWNrIHRo
ZSBWRiBCQVIgdmFsaWQgYmVmb3JlDQo+PmNhbGwgc3Jpb3ZfaW5pdCgpLCBpdCBpcyBzYWZlIGFu
ZCBzYXZpbmcgYm9vdCB0aW1lLCBhbHNvIHRoZXJlIGlzIG5vIGENCj4+YmV0dGVyIG1ldGhvZCB0
byBrbm93IGlmIHN5c3RlbSBCSU9TIGhhcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlIFNSLUlP
Vg0KPmNhcGFiaWxpdHkgb3Igbm90Lg0KPj4+Pg0KPj4+PiBJdCBhbHNvIG1hc2tzIGFuIHVuZGVy
bHlpbmcgYnVnIGFuZCBjcmVhdGVzIGEgbWFpbnRlbmFuY2UgaXNzdWUgdGhhdA0KPj4+PiB3ZSB3
b24ndA0KPj5rbm93IHdoZW4gaXQncyBzYWZlIHRvIHJlbW92ZSB0aGlzIHdvcmthcm91bmQuICBJ
IGRvbid0IHRoaW5rIGZhc3Rlcg0KPj5ib290IGlzIHZhbGlkIHJhdGlvbmFsZSwgaW4gb25lIGNh
c2UgU1ItSU9WIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQsIHRoZQ0KPj5vdGhlciB3ZSBhdHRlbXB0
IHRvIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMgdGhlIEJJT1MgZmFpbGVkIHRvIHByb3ZpZGUuDQo+
PkkgZXhwZWN0IHRoaXMgaXMgYWxzbyBhIGNvcm5lciBjYXNlLCB0aGUgQklPUyBzaG91bGQgdHlw
aWNhbGx5IHN1cHBvcnQNCj4+U1ItSU9WLCB0aGVyZWZvcmUgdGhpcyBzaXR1YXRpb24gc2hvdWxk
IGJlIGFuIGV4Y2VwdGlvbi4NCj4+Pj4NCj4+Pj4gPiBJIGRpZCBub3QgdHJ5IHRvIGZpeCB0aGUg
aXNzdWUgZnJvbSB0aGUga2VybmVsIHJlc291cmNlIGFsbG9jYXRpb24NCj4+Pj4gPiBwZXJzcGVj
dGl2ZSwNCj4+aXQgaXMgYmVjYXVzZToNCj4+Pj4gPiAgICAgMS4gSSBhbSBub3QgdmVyeSBmYW1p
bGlhciB3aXRoIHRoZSBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiBzY2hlbWUgaW4NCj5rZXJuZWwu
DQo+PkZvciBleGFtcGxlLCBpbiBzcmlvdl9pbml0KCksIGtlcm5lbCB3aWxsIHJlLWFzc2lnbiB0
aGUgUENJIHJlc291cmNlDQo+PmZvciBib3RoIFZGIGFuZCBQRi4gSSBkb24ndCB1bmRlcnN0YW5k
IHdoeSBrZXJuZWwgYWxsb2NhdGVzIHJlc291cmNlDQo+PmZvciBWRiBmaXJzdGx5LCB0aGVuIFBG
LiBJZiBpdCBpcyBQRiBmaXJzdGx5LCB0aGVuIHRoaXMgaXNzdWUgY291bGQgYmUgYXZvaWRlZC4N
Cj4+Pj4gPiAgICAgMi4gSSBhbSBub3Qgc3VyZSBpZiBrZXJuZWwgaGFzIGVycm9yIGhhbmRsZXIg
aWYgUENJIHJlc291cmNlIGFsbG9jYXRpb24NCj5mYWlsZWQuDQo+PkluIHRoaXMgY2FzZSwga2Vy
bmVsIGNhbm5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVzb3VyY2UgdG8gUEYuIEl0IHNob3VsZA0KPj50
cmlnZ2VyIHNvbWUgZXJyb3IgaGFuZGxlciB0byBlaXRoZXIganVzdCBrZWVwIG9yaWdpbmFsIEJB
UiB2YWx1ZXMgc2V0DQo+PmJ5IHN5c3RlbSBCSU9TLCBvciBkaXNhYmxlIHRoaXMgZGV2aWNlIGFu
ZCBsb2cgZXJyb3JzLg0KPj4+Pg0KPj4+PiBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgaXNzdWVzIHdl
IHNob3VsZCBiZSB0cnlpbmcgdG8gc29sdmUgYW5kIEknbQ0KPj4+PiBzdXJlIGZvbGtzIG9uIHRo
ZSBsaW51eC1wY2kgbGlzdCBjYW4gaGVscCB1cyBpZGVudGlmeSB0aGUgYnVnLg0KPj4+PiBNaW5p
bWFsbHksIGZhaWx1cmUgdG8gYWxsb2NhdGUgVkYgcmVzb3VyY2VzIHNob3VsZCBsZWF2ZSB0aGUg
ZGV2aWNlDQo+Pj4+IGluIG5vIHdvcnNlIGNvbmRpdGlvbiB0aGFuIGJlZm9yZSBpdCB0cmllZC4g
IFBlcmhhcHMgeW91IGNvdWxkIHBvc3QNCj4+Pj4gbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpc3N1
ZSwgYm9vdCB3aXRoIHBjaT1lYXJseWR1bXAsIHBvc3QgZG1lc2cgb2YNCj4+Pj4gYSBib290IHdo
ZXJlIHRoZSBQRiByZXNvdXJjZXMgYXJlIGluY29ycmVjdGx5IHJlLWFsbG9jYXRlZCwgYW5kDQo+
Pj4+IGluY2x1ZGUgbHNwY2kgLXZ2diBmb3IgdGhlIFNSLUlPViBkZXZpY2UuICBBbHNvLCBwbGVh
c2UgdGVzdCB3aXRoDQo+Pj4+IHRoZSBsYXRlc3QgdXBzdHJlYW0ga2VybmVsLCB1cHN0cmVhbSBv
bmx5IHBhdGNoZXMgb2xkIGtlcm5lbHMNCj4+Pj4gdGhyb3VnaCBzdGFibGUgYmFja3BvcnRzIG9m
IGNvbW1pdHMgdG8gdGhlIGxhdGVzdCBrZXJuZWwuICBBZGRpbmcNCj4+Pj4gWWluZ2hhaSBhcyBh
IHJlc291cmNlIGFsbG9jYXRpb24gZXhwZXJ0LiBUaGFua3MsDQo+Pj4+DQo+Pj4+IEFsZXgNCj4+
Pj4NCj4+Pj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4+PiA+IEZyb206IEFsZXgg
V2lsbGlhbXNvbiBbbWFpbHRvOmFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tXQ0KPj4+PiA+IFNl
bnQ6IEZyaWRheSwgTWF5IDEyLCAyMDE3IDEyOjAxIFBNDQo+Pj4+ID4gVG86IENoZW5nLCBDb2xs
aW5zIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+DQo+Pj4+ID4gQ2M6IEJqb3JuIEhlbGdhYXMgPGJo
ZWxnYWFzQGdvb2dsZS5jb20+Ow0KPj4+PiA+IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IGxp
bnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IERldWNoZXIsDQo+Pj4+ID4gQWxleGFuZGVyIDxB
bGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkNCj4+Pj4gPiA8S2VsbHku
Wnl0YXJ1a0BhbWQuY29tPg0KPj4+PiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIFBDSTogTWFrZSBT
Ui1JT1YgY2FwYWJsZSBHUFUgd29ya2luZyBvbiB0aGUNCj4+Pj4gPiBTUi1JT1YgaW5jYXBhYmxl
IHBsYXRmb3JtDQo+Pj4+ID4NCj4+Pj4gPiBPbiBGcmksIDEyIE1heSAyMDE3IDAzOjQyOjQ2ICsw
MDAwICJDaGVuZywgQ29sbGlucyINCj4+Pj4gPiA8Q29sbGlucy5DaGVuZ0BhbWQuY29tPiB3cm90
ZToNCj4+Pj4gPg0KPj4+PiA+ID4gSGkgV2lsbGlhbXNvbiwNCj4+Pj4gPiA+DQo+Pj4+ID4gPiBH
UFUgY2FyZCBuZWVkcyBtb3JlIEJBUiBhcGVydHVyZSByZXNvdXJjZSB0aGFuIG90aGVyIFBDSQ0K
Pj4+PiA+ID4gZGV2aWNlcy4gRm9yDQo+PmV4YW1wbGUsIEludGVsIFNSLUlPViBuZXR3b3JrIGNh
cmQgb25seSByZXF1aXJlIDUxMktCIG1lbW9yeSByZXNvdXJjZQ0KPj5mb3IgYWxsIFZGcy4gQU1E
IFNSLUlPViBHUFUgY2FyZCBuZWVkcyAyNTZNQiB4MTYgVkYgPSA0R0IgbWVtb3J5DQo+PnJlc291
cmNlIGZvciBmcmFtZSBidWZmZXIgQkFSIGFwZXJ0dXJlLg0KPj4+PiA+ID4NCj4+Pj4gPiA+IElm
IHRoZSBzeXN0ZW0gQklPUyBzdXBwb3J0cyBTUi1JT1YsIGl0IHdpbGwgcmVzZXJ2ZSBlbm91Z2gN
Cj4+Pj4gPiA+IHJlc291cmNlIGZvciBhbGwNCj4+VkYgQkFScy4gSWYgdGhlIHN5c3RlbSBCSU9T
IGRvZXNuJ3Qgc3VwcG9ydCBTUi1JT1Ygb3IgY2Fubm90IGFsbG9jYXRlDQo+PnRoZSBlbm91Z2gg
cmVzb3VyY2UgZm9yIFZGIEJBUnMsIG9ubHkgUEYgQkFSIHdpbGwgYmUgYXNzaWduZWQgYW5kIFZG
DQo+PkJBUnMgYXJlIGVtcHR5LiBUaGVuIHN5c3RlbSBib290cyB0byBMaW51eCBrZXJuZWwgYW5k
IGtlcm5lbCBkb2Vzbid0DQo+PmNoZWNrIGlmIHRoZSBWRiBCQVJzIGFyZSBlbXB0eSBvciB2YWxp
ZC4gS2VybmVsIHdpbGwgcmUtYXNzaWduIHRoZSBCQVINCj4+cmVzb3VyY2VzIGZvciBQRiBhbmQg
YWxsIFZGcy4gVGhlIHByb2JsZW0gSSBzYXcgaXMgdGhhdCBrZXJuZWwgd2lsbA0KPj5mYWlsIHRv
IGFsbG9jYXRlIFBGIEJBUiByZXNvdXJjZSBiZWNhdXNlIHNvbWUgcmVzb3VyY2VzIGFyZSBhc3Np
Z25lZCB0bw0KPj5WRiwgdGhpcyBpcyBub3QgZXhwZWN0ZWQuIFNvIGtlcm5lbCBtaWdodCBuZWVk
IHRvIGRvIHNvbWUgY2hlY2sgYmVmb3JlDQo+PnJlLWFzc2lnbiB0aGUgUEYvVkYgcmVzb3VyY2Us
IHNvIHRoYXQgUEYgZGV2aWNlIHdpbGwgYmUgY29ycmVjdGx5IGFzc2lnbmVkIEJBUg0KPnJlc291
cmNlIGFuZCB1c2VyIGNhbiB1c2UgUEYgZGV2aWNlLg0KPj4+PiA+DQo+Pj4+ID4gU28gdGhlIHBy
b2JsZW0gaXMgdGhhdCBzb21ldGhpbmcgYmFkIGhhcHBlbnMgd2hlbiB0aGUga2VybmVsIGlzDQo+
Pj4+ID4gdHJ5aW5nIHRvIHJlYWxsb2NhdGUgcmVzb3VyY2VzIGluIG9yZGVyIHRvIGZ1bGZpbGwg
dGhlDQo+Pj4+ID4gcmVxdWlyZW1lbnRzIG9mIHRoZSBWRnMsIGxlYXZpbmcgdGhlIFBGIHJlc291
cmNlcyBpbmNvcnJlY3RseQ0KPj4+PiA+IHByb2dyYW1tZWQ/ICBXaHkgbm90IGp1c3QgZml4IHRo
YXQgYnVnIHJhdGhlciB0aGFuIGNyZWF0aW5nDQo+Pj4+ID4gc3BlY2lhbCBoYW5kbGluZyBmb3Ig
dGhpcyB2ZW5kb3IvY2xhc3Mgb2YgZGV2aWNlIHdoaWNoIGRpc2FibGVzDQo+Pj4+ID4gYW55IGF0
dGVtcHQgdG8gZml4dXAgcmVzb3VyY2VzIGZvciBTUi1JT1Y/ICBJT1csIHRoaXMgcGF0Y2gganVz
dA0KPj4+PiA+IGF2b2lkcyB0aGUgcHJvYmxlbSBmb3IgeW91ciBkZXZpY2VzIHJhdGhlciB0aGFu
IGZpeGluZyB0aGUgYnVnLg0KPj4+PiA+IEknZCBzdWdnZXN0IGZpeGluZyB0aGUgYnVnIHN1Y2gg
dGhhdCB0aGUgUEYgaXMgbGVmdCBpbiBhDQo+Pj4+ID4gZnVuY3Rpb25hbCBzdGF0ZSBpZiB0aGUg
a2VybmVsIGlzIHVuYWJsZSB0byBhbGxvY2F0ZSBzdWZmaWNpZW50DQo+Pj4+ID4gcmVzb3VyY2Vz
IGZvciB0aGUgVkZzLiAgVGhhbmtzLA0KPj4+PiA+DQo+Pj4+ID4gQWxleA0KPj4+PiA+DQo+Pj4+
ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4+PiA+ID4gRnJvbTogQWxleCBXaWxs
aWFtc29uIFttYWlsdG86YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb21dDQo+Pj4+ID4gPiBTZW50
OiBGcmlkYXksIE1heSAxMiwgMjAxNyAxMToyMSBBTQ0KPj4+PiA+ID4gVG86IENoZW5nLCBDb2xs
aW5zIDxDb2xsaW5zLkNoZW5nQGFtZC5jb20+DQo+Pj4+ID4gPiBDYzogQmpvcm4gSGVsZ2FhcyA8
YmhlbGdhYXNAZ29vZ2xlLmNvbT47DQo+Pj4+ID4gPiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3Jn
OyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPj4+PiA+ID4gRGV1Y2hlciwgQWxleGFu
ZGVyIDxBbGV4YW5kZXIuRGV1Y2hlckBhbWQuY29tPjsgWnl0YXJ1aywgS2VsbHkNCj4+Pj4gPiA+
IDxLZWxseS5aeXRhcnVrQGFtZC5jb20+DQo+Pj4+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIXSBQ
Q0k6IE1ha2UgU1ItSU9WIGNhcGFibGUgR1BVIHdvcmtpbmcgb24gdGhlDQo+Pj4+ID4gPiBTUi1J
T1YgaW5jYXBhYmxlIHBsYXRmb3JtDQo+Pj4+ID4gPg0KPj4+PiA+ID4gT24gRnJpLCAxMiBNYXkg
MjAxNyAwMjo1MDozMiArMDAwMCAiQ2hlbmcsIENvbGxpbnMiDQo+Pj4+ID4gPiA8Q29sbGlucy5D
aGVuZ0BhbWQuY29tPiB3cm90ZToNCj4+Pj4gPiA+DQo+Pj4+ID4gPiA+IEhpIEhlbGdhYXMsDQo+
Pj4+ID4gPiA+DQo+Pj4+ID4gPiA+IFNvbWUgQU1EIEdQVXMgaGF2ZSBoYXJkd2FyZSBzdXBwb3J0
IGZvciBncmFwaGljcyBTUi1JT1YuDQo+Pj4+ID4gPiA+IElmIHRoZSBTUi1JT1YgY2FwYWJsZSBH
UFUgaXMgcGx1Z2dlZCBpbnRvIHRoZSBTUi1JT1YgaW5jYXBhYmxlDQo+Pj4+ID4gPiA+IHBsYXRm
b3JtLiBJdCB3b3VsZCBjYXVzZSBhIHByb2JsZW0gb24gUENJIHJlc291cmNlIGFsbG9jYXRpb24N
Cj4+Pj4gPiA+ID4gaW4gY3VycmVudCBMaW51eCBrZXJuZWwuDQo+Pj4+ID4gPiA+DQo+Pj4+ID4g
PiA+IFRoZXJlZm9yZSBpbiBvcmRlciB0byBhbGxvdyB0aGUgUEYgKFBoeXNpY2FsIEZ1bmN0aW9u
KSBkZXZpY2UNCj4+Pj4gPiA+ID4gb2YgU1ItSU9WIGNhcGFibGUgR1BVIHRvIHdvcmsgb24gdGhl
IFNSLUlPViBpbmNhcGFibGUNCj4+Pj4gPiA+ID4gcGxhdGZvcm0sIGl0IGlzIHJlcXVpcmVkIHRv
IHZlcmlmeSBjb25kaXRpb25zIGZvciBpbml0aWFsaXppbmcNCj4+Pj4gPiA+ID4gQkFSIHJlc291
cmNlcyBvbiBBTUQgU1ItSU9WIGNhcGFibGUgR1BVcy4NCj4+Pj4gPiA+ID4NCj4+Pj4gPiA+ID4g
SWYgdGhlIGRldmljZSBpcyBhbiBBTUQgZ3JhcGhpY3MgZGV2aWNlIGFuZCBpdCBzdXBwb3J0cyBT
Ui1JT1YNCj4+Pj4gPiA+ID4gaXQgd2lsbCByZXF1aXJlIGEgbGFyZ2UgYW1vdW50IG9mIHJlc291
cmNlcy4NCj4+Pj4gPiA+ID4gQmVmb3JlIGNhbGxpbmcgc3Jpb3ZfaW5pdCgpIG11c3QgZW5zdXJl
IHRoYXQgdGhlIHN5c3RlbSBCSU9TDQo+Pj4+ID4gPiA+IGFsc28gc3VwcG9ydHMgU1ItSU9WIGFu
ZCB0aGF0IHN5c3RlbSBCSU9TIGhhcyBiZWVuIGFibGUgdG8NCj4+Pj4gPiA+ID4gYWxsb2NhdGUg
ZW5vdWdoIHJlc291cmNlcy4NCj4+Pj4gPiA+ID4gSWYgdGhlIFZGIEJBUnMgYXJlIHplcm8gdGhl
biB0aGUgc3lzdGVtIEJJT1MgZG9lcyBub3Qgc3VwcG9ydA0KPj4+PiA+ID4gPiBTUi1JT1Ygb3Ig
aXQgY291bGQgbm90IGFsbG9jYXRlIHRoZSByZXNvdXJjZXMgYW5kIHRoaXMNCj4+Pj4gPiA+ID4g
cGxhdGZvcm0gd2lsbCBub3Qgc3VwcG9ydCBBTUQgZ3JhcGhpY3MgU1ItSU9WLg0KPj4+PiA+ID4g
PiBUaGVyZWZvcmUgZG8gbm90IGNhbGwgc3Jpb3ZfaW5pdCgpLg0KPj4+PiA+ID4gPiBJZiB0aGUg
c3lzdGVtIEJJT1MgZG9lcyBzdXBwb3J0IFNSLUlPViB0aGVuIHRoZSBWRiBCQVJzIHdpbGwNCj4+
Pj4gPiA+ID4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gbm9uLXplcm8gdmFsdWVzLg0KPj4+
PiA+ID4gPg0KPj4+PiA+ID4gPiBCZWxvdyBpcyB0aGUgcGF0Y2ggYWdhaW5zdCB0byBLZXJuZWwg
NC44ICYgNC45LiBQbGVhc2UgcmV2aWV3Lg0KPj4+PiA+ID4gPg0KPj4+PiA+ID4gPiBJIGNoZWNr
ZWQgdGhlIGRyaXZlcnMvcGNpL3F1aXJrcy5jLCBpdCBsb29rcyB0aGUNCj4+Pj4gPiA+ID4gd29y
a2Fyb3VuZHMvZml4ZXMgaW4gcXVpcmtzLmMgYXJlIGZvciBzcGVjaWZpYyBkZXZpY2VzIGFuZCBv
bmUNCj4+Pj4gPiA+ID4gb3IgbW9yZSBkZXZpY2UgSUQgYXJlIGRlZmluZWQgZm9yIHRoZSBzcGVj
aWZpYyBkZXZpY2VzLg0KPj4+PiA+ID4gPiBIb3dldmVyIG15IHBhdGNoIGlzIGZvciBhbGwgQU1E
IFNSLUlPViBjYXBhYmxlIEdQVXMsIHRoYXQNCj4+Pj4gPiA+ID4gaW5jbHVkZXMgYWxsIGV4aXN0
aW5nDQo+PmFuZCBmdXR1cmUgQU1EIHNlcnZlciBHUFVzLg0KPj4+PiA+ID4gPiBTbyBpdCBkb2Vz
bid0IHNlZW0gbGlrZSBhIGdvb2QgZml0IHRvIHB1dCB0aGUgZml4IGluIHF1aXJrcy5jLg0KPj4+
PiA+ID4NCj4+Pj4gPiA+DQo+Pj4+ID4gPiBXaHkgaXMgYW4gQU1EIGdyYXBoaWNzIGNhcmQgdW5p
cXVlIGhlcmU/ICBEb2Vzbid0IHNyaW92X2luaXQoKQ0KPj4+PiA+ID4gYWx3YXlzIG5lZWQgdG8g
YmUgYWJsZSB0byBkZWFsIHdpdGggZGV2aWNlcyBvZiBhbnkgdHlwZSB3aGVyZQ0KPj4+PiA+ID4g
dGhlIEJJT1MgaGFzbid0IGluaXRpYWxpemVkIHRoZSBTUi1JT1YgY2FwYWJpbGl0eT8gIFNvbWUg
U1ItSU9WDQo+Pj4+ID4gPiBkZXZpY2VzIGNhbiBmaXQgdGhlaXIgVkZzIHdpdGhpbiBhIG1pbmlt
dW0gYnJpZGdlIGFwZXJ0dXJlLCBtb3N0DQo+Pj4+ID4gPiBjYW5ub3QuICBJIGRvbid0IHVuZGVy
c3RhbmQgd2h5IHRoZSBWRiByZXNvdXJjZSByZXF1aXJlbWVudHMNCj4+Pj4gPiA+IGJlaW5nIGV4
Y2VwdGlvbmFsbHkgbGFyZ2UgZGljdGF0ZXMgdGhhdCB0aGV5IHJlY2VpdmUgc3BlY2lhbCBoYW5k
bGluZy4NCj4+Pj4gPiA+IFRoYW5rcywNCj4+Pj4gPiA+DQo+Pj4+ID4gPiBBbGV4DQo+Pj4+ID4g
Pg0KPj4+PiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDb2xsaW5zIENoZW5nIDxjb2xsaW5zLmNoZW5n
QGFtZC5jb20+DQo+Pj4+ID4gPiA+IC0tLQ0KPj4+PiA+ID4gPiAgZHJpdmVycy9wY2kvaW92LmMg
fCA2Mw0KPj4+PiA+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrLS0tDQo+Pj4+ID4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgNjAgaW5zZXJ0aW9u
cygrKSwgMyBkZWxldGlvbnMoLSkNCj4+Pj4gPiA+ID4NCj4+Pj4gPiA+ID4gZGlmZiAtLWdpdCBh
L2RyaXZlcnMvcGNpL2lvdi5jIGIvZHJpdmVycy9wY2kvaW92LmMgaW5kZXgNCj4+Pj4gPiA+ID4g
ZTMwZjA1Yy4uZTRmMTQwNSAxMDA2NDQNCj4+Pj4gPiA+ID4gLS0tIGEvZHJpdmVycy9wY2kvaW92
LmMNCj4+Pj4gPiA+ID4gKysrIGIvZHJpdmVycy9wY2kvaW92LmMNCj4+Pj4gPiA+ID4gQEAgLTUy
Myw2ICs1MjMsNDUgQEAgc3RhdGljIHZvaWQgc3Jpb3ZfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QNCj4+
Pj4gPiA+ID4gcGNpX2Rldg0KPj4qZGV2KQ0KPj4+PiA+ID4gPiAgICAgICAgICAgICAgICAgbXNs
ZWVwKDEwMCk7DQo+Pj4+ID4gPiA+ICB9DQo+Pj4+ID4gPiA+DQo+Pj4+ID4gPiA+ICsvKg0KPj4+
PiA+ID4gPiArICogcGNpX3ZmX2Jhcl92YWxpZCAtIGNoZWNrIGlmIFZGIEJBUnMgaGF2ZSByZXNv
dXJjZQ0KPj4+PiA+ID4gPiArYWxsb2NhdGVkDQo+Pj4+ID4gPiA+ICsgKiBAZGV2OiB0aGUgUENJ
IGRldmljZQ0KPj4+PiA+ID4gPiArICogQHBvczogcmVnaXN0ZXIgb2Zmc2V0IG9mIFNSLUlPViBj
YXBhYmlsaXR5IGluIFBDSSBjb25maWcNCj4+Pj4gPiA+ID4gK3NwYWNlDQo+Pj4+ID4gPiA+ICsg
KiBSZXR1cm5zIHRydWUgYW55IFZGIEJBUiBoYXMgcmVzb3VyY2UgYWxsb2NhdGVkLCBmYWxzZQ0K
Pj4+PiA+ID4gPiArICogaWYgYWxsIFZGIEJBUnMgYXJlIGVtcHR5Lg0KPj4+PiA+ID4gPiArICov
DQo+Pj4+ID4gPiA+ICtzdGF0aWMgYm9vbCBwY2lfdmZfYmFyX3ZhbGlkKHN0cnVjdCBwY2lfZGV2
ICpkZXYsIGludCBwb3MpIHsNCj4+Pj4gPiA+ID4gKyAgICAgICBpbnQgaTsNCj4+Pj4gPiA+ID4g
KyAgICAgICB1MzIgYmFyX3ZhbHVlOw0KPj4+PiA+ID4gPiArICAgICAgIHUzMiBiYXJfc2l6ZV9t
YXNrID0gfihQQ0lfQkFTRV9BRERSRVNTX1NQQUNFIHwNCj4+Pj4gPiA+ID4gKyAgICAgICAgICAg
ICAgICAgICAgICAgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCB8DQo+Pj4+ID4gPiA+ICsg
ICAgICAgICAgICAgICAgICAgICAgIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKTsNCj4+
Pj4gPiA+ID4gKw0KPj4+PiA+ID4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1Zf
TlVNX0JBUlM7IGkrKykgew0KPj4+PiA+ID4gPiArICAgICAgICAgICAgICAgcGNpX3JlYWRfY29u
ZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX0JBUg0KPj4+PiA+ID4gPiArICsgaSAqIDQs
DQo+PiZiYXJfdmFsdWUpOw0KPj4+PiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGJhcl92YWx1
ZSAmIGJhcl9zaXplX21hc2spDQo+Pj4+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOw0KPj4+PiA+ID4gPiArICAgICAgIH0NCj4+Pj4gPiA+ID4gKw0KPj4+PiA+ID4g
PiArICAgICAgIHJldHVybiBmYWxzZTsNCj4+Pj4gPiA+ID4gK30NCj4+Pj4gPiA+ID4gKw0KPj4+
PiA+ID4gPiArLyoNCj4+Pj4gPiA+ID4gKyAqIGlzX2FtZF9kaXNwbGF5X2FkYXB0ZXIgLSBjaGVj
ayBpZiBpdCBpcyBhbiBBTUQvQVRJIEdQVQ0KPj4+PiA+ID4gPiArZGV2aWNlDQo+Pj4+ID4gPiA+
ICsgKiBAZGV2OiB0aGUgUENJIGRldmljZQ0KPj4+PiA+ID4gPiArICoNCj4+Pj4gPiA+ID4gKyAq
IFJldHVybnMgdHJ1ZSBpZiBkZXZpY2UgaXMgYW4gQU1EL0FUSSBkaXNwbGF5IGFkYXB0ZXIsDQo+
Pj4+ID4gPiA+ICsgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLg0KPj4+PiA+ID4gPiArICovDQo+
Pj4+ID4gPiA+ICsNCj4+Pj4gPiA+ID4gK3N0YXRpYyBib29sIGlzX2FtZF9kaXNwbGF5X2FkYXB0
ZXIoc3RydWN0IHBjaV9kZXYgKmRldikgew0KPj4+PiA+ID4gPiArICAgICAgIHJldHVybiAoKChk
ZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSAmJg0KPj4+PiA+ID4g
PiArICAgICAgICAgICAgICAgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJIHx8DQo+
Pj4+ID4gPiA+ICsgICAgICAgICAgICAgICBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FN
RCkpOyB9DQo+Pj4+ID4gPiA+ICsNCj4+Pj4gPiA+ID4gIC8qKg0KPj4+PiA+ID4gPiAgICogcGNp
X2lvdl9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgSU9WIGNhcGFiaWxpdHkNCj4+Pj4gPiA+ID4gICAq
IEBkZXY6IHRoZSBQQ0kgZGV2aWNlDQo+Pj4+ID4gPiA+IEBAIC01MzcsOSArNTc2LDI3IEBAIGlu
dCBwY2lfaW92X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikNCj4+Pj4gPiA+ID4gICAgICAgICAg
ICAgICAgIHJldHVybiAtRU5PREVWOw0KPj4+PiA+ID4gPg0KPj4+PiA+ID4gPiAgICAgICAgIHBv
cyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfU1JJT1YpOw0K
Pj4+PiA+ID4gPiAtICAgICAgIGlmIChwb3MpDQo+Pj4+ID4gPiA+IC0gICAgICAgICAgICAgICBy
ZXR1cm4gc3Jpb3ZfaW5pdChkZXYsIHBvcyk7DQo+Pj4+ID4gPiA+IC0NCj4+Pj4gPiA+ID4gKyAg
ICAgICBpZiAocG9zKSB7DQo+Pj4+ID4gPiA+ICsgICAgICAgLyoNCj4+Pj4gPiA+ID4gKyAgICAg
ICAgKiBJZiB0aGUgZGV2aWNlIGlzIGFuIEFNRCBncmFwaGljcyBkZXZpY2UgYW5kIGl0IHN1cHBv
cnRzDQo+Pj4+ID4gPiA+ICsgICAgICAgICogU1ItSU9WIGl0IHdpbGwgcmVxdWlyZSBhIGxhcmdl
IGFtb3VudCBvZiByZXNvdXJjZXMuDQo+Pj4+ID4gPiA+ICsgICAgICAgICogQmVmb3JlIGNhbGxp
bmcgc3Jpb3ZfaW5pdCgpIG11c3QgZW5zdXJlIHRoYXQgdGhlIHN5c3RlbQ0KPj4+PiA+ID4gPiAr
ICAgICAgICAqIEJJT1MgYWxzbyBzdXBwb3J0cyBTUi1JT1YgYW5kIHRoYXQgc3lzdGVtIEJJT1Mg
aGFzIGJlZW4NCj4+Pj4gPiA+ID4gKyAgICAgICAgKiBhYmxlIHRvIGFsbG9jYXRlIGVub3VnaCBy
ZXNvdXJjZXMuDQo+Pj4+ID4gPiA+ICsgICAgICAgICogSWYgdGhlIFZGIEJBUnMgYXJlIHplcm8g
dGhlbiB0aGUgc3lzdGVtIEJJT1MgZG9lcyBub3QNCj4+Pj4gPiA+ID4gKyAgICAgICAgKiBzdXBw
b3J0IFNSLUlPViBvciBpdCBjb3VsZCBub3QgYWxsb2NhdGUgdGhlIHJlc291cmNlcw0KPj4+PiA+
ID4gPiArICAgICAgICAqIGFuZCB0aGlzIHBsYXRmb3JtIHdpbGwgbm90IHN1cHBvcnQgQU1EIGdy
YXBoaWNzIFNSLUlPVi4NCj4+Pj4gPiA+ID4gKyAgICAgICAgKiBUaGVyZWZvcmUgZG8gbm90IGNh
bGwgc3Jpb3ZfaW5pdCgpLg0KPj4+PiA+ID4gPiArICAgICAgICAqIElmIHRoZSBzeXN0ZW0gQklP
UyBkb2VzIHN1cHBvcnQgU1ItSU9WIHRoZW4gdGhlIFZGIEJBUnMNCj4+Pj4gPiA+ID4gKyAgICAg
ICAgKiB3aWxsIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIG5vbi16ZXJvIHZhbHVlcy4NCj4+
Pj4gPiA+ID4gKyAgICAgICAgKi8NCj4+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChpc19h
bWRfZGlzcGxheV9hZGFwdGVyKGRldikpIHsNCj4+Pj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBjaV92Zl9iYXJfdmFsaWQoZGV2LCBwb3MpKQ0KPj4+PiA+ID4gPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmlvdl9pbml0KGRldiwgcG9zKTsNCj4+
Pj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+Pj4+ID4gPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzcmlvdl9pbml0KGRldiwgcG9zKTsNCj4+Pj4gPiA+ID4gKyAg
ICAgICAgICAgICAgIH0NCj4+Pj4gPiA+ID4gKyAgICAgICB9DQo+Pj4+ID4gPiA+ICAgICAgICAg
cmV0dXJuIC1FTk9ERVY7DQo+Pj4+ID4gPiA+ICB9DQo+Pj4+ID4gPiA+DQo+Pj4+ID4gPg0KPj4+
PiA+DQo+Pj4+DQo+Pj4NCg==

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-20 14:29                         ` Zytaruk, Kelly
  (?)
@ 2017-05-21  0:03                         ` Alexander Duyck
  -1 siblings, 0 replies; 43+ messages in thread
From: Alexander Duyck @ 2017-05-21  0:03 UTC (permalink / raw)
  To: Zytaruk, Kelly
  Cc: Cheng, Collins, Alex Williamson, Bjorn Helgaas, linux-pci,
	linux-kernel, Deucher, Alexander, Yinghai Lu

I'd say the common solution is probably the parameter that allows the
user to disable SR-IOV in the kernel on boot.

The problem with trying to do this automatically is that there are too
many scenarios to know what it was that the BIOS was trying to do.

Another alternative would be to look at providing a means of changing
how the SR-IOV code tries to fix broken setups. Right now it defaults
to trying to allocate the data as it assumes it is going to enable
SR-IOV on every device that has SR-IOV support. An alternative might
be to make the kernel option support multiple options. You could have
it do nosriov as one option, and another option that only enables
SR-IOV on devices that are fully configured and disabled it otherwise,
and then our current default option which is to try enabling SR-IOV on
any device that could support it. Then you could probably also make
the default something you could have as a kernel configuration options
so you could build a kernel that defaults to the middle option that
leaves SR-IOV devices correctly configured enabled, and disables it
otherwise.

- Alex

On Sat, May 20, 2017 at 7:29 AM, Zytaruk, Kelly <Kelly.Zytaruk@amd.com> wrote:
> Collins,
>
> Okay, good to know.
> Is there a common solution that can handle all cases?
>
> Thanks,
> Kelly
>
>>-----Original Message-----
>>From: Cheng, Collins
>>Sent: Saturday, May 20, 2017 6:38 AM
>>To: Zytaruk, Kelly; Alexander Duyck; Alex Williamson
>>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>>Deucher, Alexander; Yinghai Lu
>>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>incapable platform
>>
>>Hi Kelly,
>>
>>This issue also happens in "not SR-IOV capable" SBIOS. It seems some "not SR-IOV
>>capable" SBIOS will directly report error in system BIOS boot stage and doesn't
>>boot to OS. But other "not SR-IOV capable" SBIOS would not report error and
>>boot to Linux.
>>
>>-Collins Cheng
>>
>>
>>-----Original Message-----
>>From: Zytaruk, Kelly
>>Sent: Saturday, May 20, 2017 6:28 PM
>>To: Cheng, Collins <Collins.Cheng@amd.com>; Alexander Duyck
>><alexander.duyck@gmail.com>; Alex Williamson <alex.williamson@redhat.com>
>>Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-
>>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>;
>>Yinghai Lu <yinghai@kernel.org>
>>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>incapable platform
>>
>>
>>
>>>-----Original Message-----
>>>From: Cheng, Collins
>>>Sent: Saturday, May 20, 2017 12:53 AM
>>>To: Alexander Duyck; Alex Williamson
>>>Cc: Bjorn Helgaas; linux-pci@vger.kernel.org;
>>>linux-kernel@vger.kernel.org; Deucher, Alexander; Zytaruk, Kelly;
>>>Yinghai Lu
>>>Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>>incapable platform
>>>
>>>Hi Alex,
>>>
>>>Yes, I hope kernel can disable SR-IOV and related VF resource
>>>allocation if the system BIOS is not SR-IOV capable.
>>>
>>>Adding the parameter "pci=nosriov" sounds a doable solution, but it
>>>would need user to add this parameter manually, right? I think an
>>>automatic detection would be better. My patch is trying to auto detect and
>>bypass VF resource allocation.
>>>
>>>
>>>-Collins Cheng
>>>
>>
>>Collins, be careful about this.  I don't think that this is what we want.  If you add
>>"pci=nosriov" then you are globally disabling SRIOV for all devices.  This is not the
>>solution that we are looking for.
>>Remember that there are 3 types of SBIOS; "not SR-IOV capable", "SR-IOV
>>capable but does not support large resources", "Complete SR-IOV support".
>>
>>The problem is that we are trying to find a fix for "broken" SBIOS that does
>>support SR-IOV but does not support the full SR-IOV capabilities that devices with
>>large resources require.
>>
>>Thanks,
>>Kelly
>>
>>>
>>>-----Original Message-----
>>>From: Alexander Duyck [mailto:alexander.duyck@gmail.com]
>>>Sent: Friday, May 19, 2017 11:44 PM
>>>To: Alex Williamson <alex.williamson@redhat.com>
>>>Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas
>>><bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-
>>>kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>;
>>>Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>>>Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
>>>incapable platform
>>>
>>>On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
>>><alex.williamson@redhat.com> wrote:
>>>> On Mon, 15 May 2017 08:19:28 +0000
>>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>>
>>>>> Hi Williamson,
>>>>>
>>>>> We cannot assume BIOS supports SR-IOV, actually only newer server
>>>motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or
>>>older server motherboard BIOS doesn't support SR-IOV. This issue would
>>>happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop
>>motherboard.
>>>>
>>>> Servers should be supporting SR-IOV for a long time now.  What really
>>>> is there to a BIOS supporting SR-IOV anyway, it's simply reserving
>>>> sufficient bus number and MMIO resources such that we can enable the
>>>> VFs.  This process isn't exclusively reserved for the BIOS.  Some
>>>> platforms may choose to only initialize boot devices, leaving the
>>>> rest for the OS to program.  The initial proposal here to disable
>>>> SR-IOV if not programmed at OS hand-off disables even the possibility
>>>> of the OS reallocating resources for this device.
>>>
>>>There are differences between supporting SR-IOV and supporting SR-IOV
>>>on devices with massive resources. I know I have seen NICs that will
>>>keep a system from completing POST if SR-IOV is enabled, and MMIO
>>>beyond 4G is not. My guess would be that the issues being seen are
>>>probably that they disable SR-IOV in the BIOS in such a setup and end
>>>up running into issues when they try to boot into the Linux kernel as
>>>it goes through and tries to allocate resources for SR-IOV even though it was
>>disabled in the BIOS.
>>>
>>>It might make sense to add a kernel parameter something like a "pci=nosriov"
>>>that would allow for disabling SR-IOV and related resource allocation
>>>if that is what we are talking about. That way you could plug in these
>>>types of devices into a system with a legacy bios or that doesn't wan
>>>to allocate addresses above 32b for MMIO, and this parameter would be
>>>all that is needed to disable SR-IOV so you could plug in a NIC that has SR-IOV
>>associated with it.
>>>
>>>>> I agree that failure to allocate VF resources should leave the
>>>>> device in no
>>>worse condition than before it tried. I hope kernel could allocate PF
>>>device resource before allocating VF device resource, and keep PF
>>>device resource valid and functional if failed to allocate VF device resource.
>>>>>
>>>>> I will send out dmesg log lspci info tomorrow. Thanks.
>>>>
>>>> Thanks,
>>>> Alex
>>>>
>>>>> -----Original Message-----
>>>>> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>>> Sent: Friday, May 12, 2017 10:43 PM
>>>>> To: Cheng, Collins <Collins.Cheng@amd.com>
>>>>> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>>>>> linux-kernel@vger.kernel.org; Deucher, Alexander
>>>>> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;
>>>>> Yinghai Lu <yinghai@kernel.org>
>>>>> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>>> SR-IOV incapable platform
>>>>>
>>>>> On Fri, 12 May 2017 04:51:43 +0000
>>>>> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>>>>>
>>>>> > Hi Williamson,
>>>>> >
>>>>> > I verified the patch is working for both AMD SR-IOV GPU and Intel
>>>>> > SR-IOV
>>>NIC. I don't think it is redundant to check the VF BAR valid before
>>>call sriov_init(), it is safe and saving boot time, also there is no a
>>>better method to know if system BIOS has correctly initialized the SR-IOV
>>capability or not.
>>>>>
>>>>> It also masks an underlying bug and creates a maintenance issue that
>>>>> we won't
>>>know when it's safe to remove this workaround.  I don't think faster
>>>boot is valid rationale, in one case SR-IOV is completely disabled, the
>>>other we attempt to allocate the resources the BIOS failed to provide.
>>>I expect this is also a corner case, the BIOS should typically support
>>>SR-IOV, therefore this situation should be an exception.
>>>>>
>>>>> > I did not try to fix the issue from the kernel resource allocation
>>>>> > perspective,
>>>it is because:
>>>>> >     1. I am not very familiar with the PCI resource allocation scheme in
>>kernel.
>>>For example, in sriov_init(), kernel will re-assign the PCI resource
>>>for both VF and PF. I don't understand why kernel allocates resource
>>>for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>>>>> >     2. I am not sure if kernel has error handler if PCI resource allocation
>>failed.
>>>In this case, kernel cannot allocate enough resource to PF. It should
>>>trigger some error handler to either just keep original BAR values set
>>>by system BIOS, or disable this device and log errors.
>>>>>
>>>>> I think these are the issues we should be trying to solve and I'm
>>>>> sure folks on the linux-pci list can help us identify the bug.
>>>>> Minimally, failure to allocate VF resources should leave the device
>>>>> in no worse condition than before it tried.  Perhaps you could post
>>>>> more details about the issue, boot with pci=earlydump, post dmesg of
>>>>> a boot where the PF resources are incorrectly re-allocated, and
>>>>> include lspci -vvv for the SR-IOV device.  Also, please test with
>>>>> the latest upstream kernel, upstream only patches old kernels
>>>>> through stable backports of commits to the latest kernel.  Adding
>>>>> Yinghai as a resource allocation expert. Thanks,
>>>>>
>>>>> Alex
>>>>>
>>>>> > -----Original Message-----
>>>>> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>>> > Sent: Friday, May 12, 2017 12:01 PM
>>>>> > To: Cheng, Collins <Collins.Cheng@amd.com>
>>>>> > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>>>>> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,
>>>>> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>>>>> > <Kelly.Zytaruk@amd.com>
>>>>> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>>> > SR-IOV incapable platform
>>>>> >
>>>>> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins"
>>>>> > <Collins.Cheng@amd.com> wrote:
>>>>> >
>>>>> > > Hi Williamson,
>>>>> > >
>>>>> > > GPU card needs more BAR aperture resource than other PCI
>>>>> > > devices. For
>>>example, Intel SR-IOV network card only require 512KB memory resource
>>>for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory
>>>resource for frame buffer BAR aperture.
>>>>> > >
>>>>> > > If the system BIOS supports SR-IOV, it will reserve enough
>>>>> > > resource for all
>>>VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate
>>>the enough resource for VF BARs, only PF BAR will be assigned and VF
>>>BARs are empty. Then system boots to Linux kernel and kernel doesn't
>>>check if the VF BARs are empty or valid. Kernel will re-assign the BAR
>>>resources for PF and all VFs. The problem I saw is that kernel will
>>>fail to allocate PF BAR resource because some resources are assigned to
>>>VF, this is not expected. So kernel might need to do some check before
>>>re-assign the PF/VF resource, so that PF device will be correctly assigned BAR
>>resource and user can use PF device.
>>>>> >
>>>>> > So the problem is that something bad happens when the kernel is
>>>>> > trying to reallocate resources in order to fulfill the
>>>>> > requirements of the VFs, leaving the PF resources incorrectly
>>>>> > programmed?  Why not just fix that bug rather than creating
>>>>> > special handling for this vendor/class of device which disables
>>>>> > any attempt to fixup resources for SR-IOV?  IOW, this patch just
>>>>> > avoids the problem for your devices rather than fixing the bug.
>>>>> > I'd suggest fixing the bug such that the PF is left in a
>>>>> > functional state if the kernel is unable to allocate sufficient
>>>>> > resources for the VFs.  Thanks,
>>>>> >
>>>>> > Alex
>>>>> >
>>>>> > > -----Original Message-----
>>>>> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>>>>> > > Sent: Friday, May 12, 2017 11:21 AM
>>>>> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>>>>> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>>>>> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>>> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>>>>> > > <Kelly.Zytaruk@amd.com>
>>>>> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>>>>> > > SR-IOV incapable platform
>>>>> > >
>>>>> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>>>>> > > <Collins.Cheng@amd.com> wrote:
>>>>> > >
>>>>> > > > Hi Helgaas,
>>>>> > > >
>>>>> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>>>>> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
>>>>> > > > platform. It would cause a problem on PCI resource allocation
>>>>> > > > in current Linux kernel.
>>>>> > > >
>>>>> > > > Therefore in order to allow the PF (Physical Function) device
>>>>> > > > of SR-IOV capable GPU to work on the SR-IOV incapable
>>>>> > > > platform, it is required to verify conditions for initializing
>>>>> > > > BAR resources on AMD SR-IOV capable GPUs.
>>>>> > > >
>>>>> > > > If the device is an AMD graphics device and it supports SR-IOV
>>>>> > > > it will require a large amount of resources.
>>>>> > > > Before calling sriov_init() must ensure that the system BIOS
>>>>> > > > also supports SR-IOV and that system BIOS has been able to
>>>>> > > > allocate enough resources.
>>>>> > > > If the VF BARs are zero then the system BIOS does not support
>>>>> > > > SR-IOV or it could not allocate the resources and this
>>>>> > > > platform will not support AMD graphics SR-IOV.
>>>>> > > > Therefore do not call sriov_init().
>>>>> > > > If the system BIOS does support SR-IOV then the VF BARs will
>>>>> > > > be properly initialized to non-zero values.
>>>>> > > >
>>>>> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>>>>> > > >
>>>>> > > > I checked the drivers/pci/quirks.c, it looks the
>>>>> > > > workarounds/fixes in quirks.c are for specific devices and one
>>>>> > > > or more device ID are defined for the specific devices.
>>>>> > > > However my patch is for all AMD SR-IOV capable GPUs, that
>>>>> > > > includes all existing
>>>and future AMD server GPUs.
>>>>> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>>>>> > >
>>>>> > >
>>>>> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>>>>> > > always need to be able to deal with devices of any type where
>>>>> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV
>>>>> > > devices can fit their VFs within a minimum bridge aperture, most
>>>>> > > cannot.  I don't understand why the VF resource requirements
>>>>> > > being exceptionally large dictates that they receive special handling.
>>>>> > > Thanks,
>>>>> > >
>>>>> > > Alex
>>>>> > >
>>>>> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>>>>> > > > ---
>>>>> > > >  drivers/pci/iov.c | 63
>>>>> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>>>> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>>>>> > > >
>>>>> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>>>>> > > > e30f05c..e4f1405 100644
>>>>> > > > --- a/drivers/pci/iov.c
>>>>> > > > +++ b/drivers/pci/iov.c
>>>>> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct
>>>>> > > > pci_dev
>>>*dev)
>>>>> > > >                 msleep(100);
>>>>> > > >  }
>>>>> > > >
>>>>> > > > +/*
>>>>> > > > + * pci_vf_bar_valid - check if VF BARs have resource
>>>>> > > > +allocated
>>>>> > > > + * @dev: the PCI device
>>>>> > > > + * @pos: register offset of SR-IOV capability in PCI config
>>>>> > > > +space
>>>>> > > > + * Returns true any VF BAR has resource allocated, false
>>>>> > > > + * if all VF BARs are empty.
>>>>> > > > + */
>>>>> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>>>>> > > > +       int i;
>>>>> > > > +       u32 bar_value;
>>>>> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>>>>> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>>>>> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>>>>> > > > +
>>>>> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>>>>> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR
>>>>> > > > + + i * 4,
>>>&bar_value);
>>>>> > > > +               if (bar_value & bar_size_mask)
>>>>> > > > +                       return true;
>>>>> > > > +       }
>>>>> > > > +
>>>>> > > > +       return false;
>>>>> > > > +}
>>>>> > > > +
>>>>> > > > +/*
>>>>> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU
>>>>> > > > +device
>>>>> > > > + * @dev: the PCI device
>>>>> > > > + *
>>>>> > > > + * Returns true if device is an AMD/ATI display adapter,
>>>>> > > > + * otherwise return false.
>>>>> > > > + */
>>>>> > > > +
>>>>> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>>>>> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>>>>> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>>>>> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>>>>> > > > +
>>>>> > > >  /**
>>>>> > > >   * pci_iov_init - initialize the IOV capability
>>>>> > > >   * @dev: the PCI device
>>>>> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>>>>> > > >                 return -ENODEV;
>>>>> > > >
>>>>> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>>>>> > > > -       if (pos)
>>>>> > > > -               return sriov_init(dev, pos);
>>>>> > > > -
>>>>> > > > +       if (pos) {
>>>>> > > > +       /*
>>>>> > > > +        * If the device is an AMD graphics device and it supports
>>>>> > > > +        * SR-IOV it will require a large amount of resources.
>>>>> > > > +        * Before calling sriov_init() must ensure that the system
>>>>> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>>>>> > > > +        * able to allocate enough resources.
>>>>> > > > +        * If the VF BARs are zero then the system BIOS does not
>>>>> > > > +        * support SR-IOV or it could not allocate the resources
>>>>> > > > +        * and this platform will not support AMD graphics SR-IOV.
>>>>> > > > +        * Therefore do not call sriov_init().
>>>>> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>>>>> > > > +        * will be properly initialized to non-zero values.
>>>>> > > > +        */
>>>>> > > > +               if (is_amd_display_adapter(dev)) {
>>>>> > > > +                       if (pci_vf_bar_valid(dev, pos))
>>>>> > > > +                               return sriov_init(dev, pos);
>>>>> > > > +               } else {
>>>>> > > > +                       return sriov_init(dev, pos);
>>>>> > > > +               }
>>>>> > > > +       }
>>>>> > > >         return -ENODEV;
>>>>> > > >  }
>>>>> > > >
>>>>> > >
>>>>> >
>>>>>
>>>>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-19 15:43                 ` Alexander Duyck
  (?)
  (?)
@ 2017-05-22 15:44                 ` Alex Williamson
  2017-05-23  3:41                   ` Cheng, Collins
  -1 siblings, 1 reply; 43+ messages in thread
From: Alex Williamson @ 2017-05-22 15:44 UTC (permalink / raw)
  To: Alexander Duyck
  Cc: Cheng, Collins, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Fri, 19 May 2017 08:43:38 -0700
Alexander Duyck <alexander.duyck@gmail.com> wrote:

> On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
> <alex.williamson@redhat.com> wrote:
> > On Mon, 15 May 2017 08:19:28 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >  
> >> Hi Williamson,
> >>
> >> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.  
> >
> > Servers should be supporting SR-IOV for a long time now.  What really
> > is there to a BIOS supporting SR-IOV anyway, it's simply reserving
> > sufficient bus number and MMIO resources such that we can enable the
> > VFs.  This process isn't exclusively reserved for the BIOS.  Some
> > platforms may choose to only initialize boot devices, leaving the rest
> > for the OS to program.  The initial proposal here to disable SR-IOV if
> > not programmed at OS hand-off disables even the possibility of the OS
> > reallocating resources for this device.  
> 
> There are differences between supporting SR-IOV and supporting SR-IOV
> on devices with massive resources. I know I have seen NICs that will
> keep a system from completing POST if SR-IOV is enabled, and MMIO
> beyond 4G is not. My guess would be that the issues being seen are
> probably that they disable SR-IOV in the BIOS in such a setup and end
> up running into issues when they try to boot into the Linux kernel as
> it goes through and tries to allocate resources for SR-IOV even though
> it was disabled in the BIOS.
> 
> It might make sense to add a kernel parameter something like a
> "pci=nosriov" that would allow for disabling SR-IOV and related
> resource allocation if that is what we are talking about. That way you
> could plug in these types of devices into a system with a legacy bios
> or that doesn't wan to allocate addresses above 32b for MMIO, and this
> parameter would be all that is needed to disable SR-IOV so you could
> plug in a NIC that has SR-IOV associated with it.

Hi,

a) I think we're still ignoring the real bug that is something goes
wrong with the reallocation leaving the PF without resources.

b) Why does an option to avoid re-allocation need to be sr-iov
specific?  Shouldn't pci=realloc=off cover this?

Thanks,
Alex

> >> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
> >>
> >> I will send out dmesg log lspci info tomorrow. Thanks.  
> >
> > Thanks,
> > Alex
> >  
> >> -----Original Message-----
> >> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> Sent: Friday, May 12, 2017 10:43 PM
> >> To: Cheng, Collins <Collins.Cheng@amd.com>
> >> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> >> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> >>
> >> On Fri, 12 May 2017 04:51:43 +0000
> >> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >>  
> >> > Hi Williamson,
> >> >
> >> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.  
> >>
> >> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
> >>  
> >> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> >> >     1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> >> >     2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.  
> >>
> >> I think these are the issues we should be trying to solve and I'm sure folks on the linux-pci list can help us identify the bug.  Minimally, failure to allocate VF resources should leave the device in no worse condition than before it tried.  Perhaps you could post more details about the issue, boot with pci=earlydump, post dmesg of a boot where the PF resources are incorrectly re-allocated, and include lspci -vvv for the SR-IOV device.  Also, please test with the latest upstream kernel, upstream only patches old kernels through stable backports of commits to the latest kernel.  Adding Yinghai as a resource allocation expert. Thanks,
> >>
> >> Alex
> >>  
> >> > -----Original Message-----
> >> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> > Sent: Friday, May 12, 2017 12:01 PM
> >> > To: Cheng, Collins <Collins.Cheng@amd.com>
> >> > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
> >> > linux-kernel@vger.kernel.org; Deucher, Alexander
> >> > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> >> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
> >> > SR-IOV incapable platform
> >> >
> >> > On Fri, 12 May 2017 03:42:46 +0000
> >> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >> >  
> >> > > Hi Williamson,
> >> > >
> >> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> >> > >
> >> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.  
> >> >
> >> > So the problem is that something bad happens when the kernel is trying
> >> > to reallocate resources in order to fulfill the requirements of the
> >> > VFs, leaving the PF resources incorrectly programmed?  Why not just
> >> > fix that bug rather than creating special handling for this
> >> > vendor/class of device which disables any attempt to fixup resources
> >> > for SR-IOV?  IOW, this patch just avoids the problem for your devices
> >> > rather than fixing the bug.  I'd suggest fixing the bug such that the
> >> > PF is left in a functional state if the kernel is unable to allocate
> >> > sufficient resources for the VFs.  Thanks,
> >> >
> >> > Alex
> >> >  
> >> > > -----Original Message-----
> >> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> > > Sent: Friday, May 12, 2017 11:21 AM
> >> > > To: Cheng, Collins <Collins.Cheng@amd.com>
> >> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
> >> > > linux-kernel@vger.kernel.org; Deucher, Alexander
> >> > > <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>
> >> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
> >> > > SR-IOV incapable platform
> >> > >
> >> > > On Fri, 12 May 2017 02:50:32 +0000
> >> > > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >> > >  
> >> > > > Hi Helgaas,
> >> > > >
> >> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
> >> > > > If the SR-IOV capable GPU is plugged into the SR-IOV incapable
> >> > > > platform. It would cause a problem on PCI resource allocation in
> >> > > > current Linux kernel.
> >> > > >
> >> > > > Therefore in order to allow the PF (Physical Function) device of
> >> > > > SR-IOV capable GPU to work on the SR-IOV incapable platform, it is
> >> > > > required to verify conditions for initializing BAR resources on
> >> > > > AMD SR-IOV capable GPUs.
> >> > > >
> >> > > > If the device is an AMD graphics device and it supports SR-IOV it
> >> > > > will require a large amount of resources.
> >> > > > Before calling sriov_init() must ensure that the system BIOS also
> >> > > > supports SR-IOV and that system BIOS has been able to allocate
> >> > > > enough resources.
> >> > > > If the VF BARs are zero then the system BIOS does not support
> >> > > > SR-IOV or it could not allocate the resources and this platform
> >> > > > will not support AMD graphics SR-IOV.
> >> > > > Therefore do not call sriov_init().
> >> > > > If the system BIOS does support SR-IOV then the VF BARs will be
> >> > > > properly initialized to non-zero values.
> >> > > >
> >> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> >> > > >
> >> > > > I checked the drivers/pci/quirks.c, it looks the workarounds/fixes
> >> > > > in quirks.c are for specific devices and one or more device ID are
> >> > > > defined for the specific devices. However my patch is for all AMD
> >> > > > SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> >> > > > So it doesn't seem like a good fit to put the fix in quirks.c.  
> >> > >
> >> > >
> >> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
> >> > > always need to be able to deal with devices of any type where the
> >> > > BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV devices
> >> > > can fit their VFs within a minimum bridge aperture, most cannot.  I
> >> > > don't understand why the VF resource requirements being
> >> > > exceptionally large dictates that they receive special handling.
> >> > > Thanks,
> >> > >
> >> > > Alex
> >> > >  
> >> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> >> > > > ---
> >> > > >  drivers/pci/iov.c | 63
> >> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> >> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
> >> > > >
> >> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> >> > > > e30f05c..e4f1405 100644
> >> > > > --- a/drivers/pci/iov.c
> >> > > > +++ b/drivers/pci/iov.c
> >> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> >> > > >                 msleep(100);
> >> > > >  }
> >> > > >
> >> > > > +/*
> >> > > > + * pci_vf_bar_valid - check if VF BARs have resource allocated
> >> > > > + * @dev: the PCI device
> >> > > > + * @pos: register offset of SR-IOV capability in PCI config space
> >> > > > + * Returns true any VF BAR has resource allocated, false
> >> > > > + * if all VF BARs are empty.
> >> > > > + */
> >> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> >> > > > +       int i;
> >> > > > +       u32 bar_value;
> >> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> >> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
> >> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
> >> > > > +
> >> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> >> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> >> > > > +               if (bar_value & bar_size_mask)
> >> > > > +                       return true;
> >> > > > +       }
> >> > > > +
> >> > > > +       return false;
> >> > > > +}
> >> > > > +
> >> > > > +/*
> >> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> >> > > > + * @dev: the PCI device
> >> > > > + *
> >> > > > + * Returns true if device is an AMD/ATI display adapter,
> >> > > > + * otherwise return false.
> >> > > > + */
> >> > > > +
> >> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> >> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> >> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
> >> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
> >> > > > +
> >> > > >  /**
> >> > > >   * pci_iov_init - initialize the IOV capability
> >> > > >   * @dev: the PCI device
> >> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> >> > > >                 return -ENODEV;
> >> > > >
> >> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> >> > > > -       if (pos)
> >> > > > -               return sriov_init(dev, pos);
> >> > > > -
> >> > > > +       if (pos) {
> >> > > > +       /*
> >> > > > +        * If the device is an AMD graphics device and it supports
> >> > > > +        * SR-IOV it will require a large amount of resources.
> >> > > > +        * Before calling sriov_init() must ensure that the system
> >> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
> >> > > > +        * able to allocate enough resources.
> >> > > > +        * If the VF BARs are zero then the system BIOS does not
> >> > > > +        * support SR-IOV or it could not allocate the resources
> >> > > > +        * and this platform will not support AMD graphics SR-IOV.
> >> > > > +        * Therefore do not call sriov_init().
> >> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
> >> > > > +        * will be properly initialized to non-zero values.
> >> > > > +        */
> >> > > > +               if (is_amd_display_adapter(dev)) {
> >> > > > +                       if (pci_vf_bar_valid(dev, pos))
> >> > > > +                               return sriov_init(dev, pos);
> >> > > > +               } else {
> >> > > > +                       return sriov_init(dev, pos);
> >> > > > +               }
> >> > > > +       }
> >> > > >         return -ENODEV;
> >> > > >  }
> >> > > >  
> >> > >  
> >> >  
> >>  
> >  

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-22 15:44                 ` Alex Williamson
@ 2017-05-23  3:41                   ` Cheng, Collins
  2017-05-23 16:02                       ` Alexander Duyck
  2017-05-23 18:20                     ` Alex Williamson
  0 siblings, 2 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-23  3:41 UTC (permalink / raw)
  To: Alex Williamson, Alexander Duyck
  Cc: Bjorn Helgaas, linux-pci, linux-kernel, Deucher, Alexander,
	Zytaruk, Kelly, Yinghai Lu

[-- Attachment #1: Type: text/plain, Size: 17323 bytes --]

Hi Alex,

I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 

You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.

[    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]

-Collins Cheng

-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Monday, May 22, 2017 11:44 PM
To: Alexander Duyck <alexander.duyck@gmail.com>
Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Fri, 19 May 2017 08:43:38 -0700
Alexander Duyck <alexander.duyck@gmail.com> wrote:

> On Mon, May 15, 2017 at 10:53 AM, Alex Williamson 
> <alex.williamson@redhat.com> wrote:
> > On Mon, 15 May 2017 08:19:28 +0000
> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >  
> >> Hi Williamson,
> >>
> >> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.  
> >
> > Servers should be supporting SR-IOV for a long time now.  What 
> > really is there to a BIOS supporting SR-IOV anyway, it's simply 
> > reserving sufficient bus number and MMIO resources such that we can 
> > enable the VFs.  This process isn't exclusively reserved for the 
> > BIOS.  Some platforms may choose to only initialize boot devices, 
> > leaving the rest for the OS to program.  The initial proposal here 
> > to disable SR-IOV if not programmed at OS hand-off disables even the 
> > possibility of the OS reallocating resources for this device.
> 
> There are differences between supporting SR-IOV and supporting SR-IOV 
> on devices with massive resources. I know I have seen NICs that will 
> keep a system from completing POST if SR-IOV is enabled, and MMIO 
> beyond 4G is not. My guess would be that the issues being seen are 
> probably that they disable SR-IOV in the BIOS in such a setup and end 
> up running into issues when they try to boot into the Linux kernel as 
> it goes through and tries to allocate resources for SR-IOV even though 
> it was disabled in the BIOS.
> 
> It might make sense to add a kernel parameter something like a 
> "pci=nosriov" that would allow for disabling SR-IOV and related 
> resource allocation if that is what we are talking about. That way you 
> could plug in these types of devices into a system with a legacy bios 
> or that doesn't wan to allocate addresses above 32b for MMIO, and this 
> parameter would be all that is needed to disable SR-IOV so you could 
> plug in a NIC that has SR-IOV associated with it.

Hi,

a) I think we're still ignoring the real bug that is something goes wrong with the reallocation leaving the PF without resources.

b) Why does an option to avoid re-allocation need to be sr-iov specific?  Shouldn't pci=realloc=off cover this?

Thanks,
Alex

> >> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
> >>
> >> I will send out dmesg log lspci info tomorrow. Thanks.  
> >
> > Thanks,
> > Alex
> >  
> >> -----Original Message-----
> >> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> Sent: Friday, May 12, 2017 10:43 PM
> >> To: Cheng, Collins <Collins.Cheng@amd.com>
> >> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> >> linux-kernel@vger.kernel.org; Deucher, Alexander 
> >> <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
> >> <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> >> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> >> SR-IOV incapable platform
> >>
> >> On Fri, 12 May 2017 04:51:43 +0000
> >> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> >>  
> >> > Hi Williamson,
> >> >
> >> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.  
> >>
> >> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
> >>  
> >> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
> >> >     1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
> >> >     2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.  
> >>
> >> I think these are the issues we should be trying to solve and I'm 
> >> sure folks on the linux-pci list can help us identify the bug.  
> >> Minimally, failure to allocate VF resources should leave the device 
> >> in no worse condition than before it tried.  Perhaps you could post 
> >> more details about the issue, boot with pci=earlydump, post dmesg 
> >> of a boot where the PF resources are incorrectly re-allocated, and 
> >> include lspci -vvv for the SR-IOV device.  Also, please test with 
> >> the latest upstream kernel, upstream only patches old kernels 
> >> through stable backports of commits to the latest kernel.  Adding 
> >> Yinghai as a resource allocation expert. Thanks,
> >>
> >> Alex
> >>  
> >> > -----Original Message-----
> >> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> > Sent: Friday, May 12, 2017 12:01 PM
> >> > To: Cheng, Collins <Collins.Cheng@amd.com>
> >> > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
> >> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, 
> >> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
> >> > <Kelly.Zytaruk@amd.com>
> >> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> >> > SR-IOV incapable platform
> >> >
> >> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins" 
> >> > <Collins.Cheng@amd.com> wrote:
> >> >  
> >> > > Hi Williamson,
> >> > >
> >> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
> >> > >
> >> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.  
> >> >
> >> > So the problem is that something bad happens when the kernel is 
> >> > trying to reallocate resources in order to fulfill the 
> >> > requirements of the VFs, leaving the PF resources incorrectly 
> >> > programmed?  Why not just fix that bug rather than creating 
> >> > special handling for this vendor/class of device which disables 
> >> > any attempt to fixup resources for SR-IOV?  IOW, this patch just 
> >> > avoids the problem for your devices rather than fixing the bug.  
> >> > I'd suggest fixing the bug such that the PF is left in a 
> >> > functional state if the kernel is unable to allocate sufficient 
> >> > resources for the VFs.  Thanks,
> >> >
> >> > Alex
> >> >  
> >> > > -----Original Message-----
> >> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
> >> > > Sent: Friday, May 12, 2017 11:21 AM
> >> > > To: Cheng, Collins <Collins.Cheng@amd.com>
> >> > > Cc: Bjorn Helgaas <bhelgaas@google.com>; 
> >> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; 
> >> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly 
> >> > > <Kelly.Zytaruk@amd.com>
> >> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on 
> >> > > the SR-IOV incapable platform
> >> > >
> >> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins" 
> >> > > <Collins.Cheng@amd.com> wrote:
> >> > >  
> >> > > > Hi Helgaas,
> >> > > >
> >> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
> >> > > > If the SR-IOV capable GPU is plugged into the SR-IOV 
> >> > > > incapable platform. It would cause a problem on PCI resource 
> >> > > > allocation in current Linux kernel.
> >> > > >
> >> > > > Therefore in order to allow the PF (Physical Function) device 
> >> > > > of SR-IOV capable GPU to work on the SR-IOV incapable 
> >> > > > platform, it is required to verify conditions for 
> >> > > > initializing BAR resources on AMD SR-IOV capable GPUs.
> >> > > >
> >> > > > If the device is an AMD graphics device and it supports 
> >> > > > SR-IOV it will require a large amount of resources.
> >> > > > Before calling sriov_init() must ensure that the system BIOS 
> >> > > > also supports SR-IOV and that system BIOS has been able to 
> >> > > > allocate enough resources.
> >> > > > If the VF BARs are zero then the system BIOS does not support 
> >> > > > SR-IOV or it could not allocate the resources and this 
> >> > > > platform will not support AMD graphics SR-IOV.
> >> > > > Therefore do not call sriov_init().
> >> > > > If the system BIOS does support SR-IOV then the VF BARs will 
> >> > > > be properly initialized to non-zero values.
> >> > > >
> >> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
> >> > > >
> >> > > > I checked the drivers/pci/quirks.c, it looks the 
> >> > > > workarounds/fixes in quirks.c are for specific devices and 
> >> > > > one or more device ID are defined for the specific devices. 
> >> > > > However my patch is for all AMD SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
> >> > > > So it doesn't seem like a good fit to put the fix in quirks.c.  
> >> > >
> >> > >
> >> > > Why is an AMD graphics card unique here?  Doesn't sriov_init() 
> >> > > always need to be able to deal with devices of any type where 
> >> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV 
> >> > > devices can fit their VFs within a minimum bridge aperture, 
> >> > > most cannot.  I don't understand why the VF resource 
> >> > > requirements being exceptionally large dictates that they receive special handling.
> >> > > Thanks,
> >> > >
> >> > > Alex
> >> > >  
> >> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> >> > > > ---
> >> > > >  drivers/pci/iov.c | 63
> >> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
> >> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
> >> > > >
> >> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
> >> > > > e30f05c..e4f1405 100644
> >> > > > --- a/drivers/pci/iov.c
> >> > > > +++ b/drivers/pci/iov.c
> >> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
> >> > > >                 msleep(100);
> >> > > >  }
> >> > > >
> >> > > > +/*
> >> > > > + * pci_vf_bar_valid - check if VF BARs have resource 
> >> > > > +allocated
> >> > > > + * @dev: the PCI device
> >> > > > + * @pos: register offset of SR-IOV capability in PCI config 
> >> > > > +space
> >> > > > + * Returns true any VF BAR has resource allocated, false
> >> > > > + * if all VF BARs are empty.
> >> > > > + */
> >> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
> >> > > > +       int i;
> >> > > > +       u32 bar_value;
> >> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> >> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
> >> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
> >> > > > +
> >> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> >> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
> >> > > > +               if (bar_value & bar_size_mask)
> >> > > > +                       return true;
> >> > > > +       }
> >> > > > +
> >> > > > +       return false;
> >> > > > +}
> >> > > > +
> >> > > > +/*
> >> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU 
> >> > > > +device
> >> > > > + * @dev: the PCI device
> >> > > > + *
> >> > > > + * Returns true if device is an AMD/ATI display adapter,
> >> > > > + * otherwise return false.
> >> > > > + */
> >> > > > +
> >> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
> >> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> >> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
> >> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
> >> > > > +
> >> > > >  /**
> >> > > >   * pci_iov_init - initialize the IOV capability
> >> > > >   * @dev: the PCI device
> >> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
> >> > > >                 return -ENODEV;
> >> > > >
> >> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> >> > > > -       if (pos)
> >> > > > -               return sriov_init(dev, pos);
> >> > > > -
> >> > > > +       if (pos) {
> >> > > > +       /*
> >> > > > +        * If the device is an AMD graphics device and it supports
> >> > > > +        * SR-IOV it will require a large amount of resources.
> >> > > > +        * Before calling sriov_init() must ensure that the system
> >> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
> >> > > > +        * able to allocate enough resources.
> >> > > > +        * If the VF BARs are zero then the system BIOS does not
> >> > > > +        * support SR-IOV or it could not allocate the resources
> >> > > > +        * and this platform will not support AMD graphics SR-IOV.
> >> > > > +        * Therefore do not call sriov_init().
> >> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
> >> > > > +        * will be properly initialized to non-zero values.
> >> > > > +        */
> >> > > > +               if (is_amd_display_adapter(dev)) {
> >> > > > +                       if (pci_vf_bar_valid(dev, pos))
> >> > > > +                               return sriov_init(dev, pos);
> >> > > > +               } else {
> >> > > > +                       return sriov_init(dev, pos);
> >> > > > +               }
> >> > > > +       }
> >> > > >         return -ENODEV;
> >> > > >  }
> >> > > >  
> >> > >  
> >> >  
> >>  
> >  


[-- Attachment #2: 1.txt --]
[-- Type: text/plain, Size: 83636 bytes --]

[    0.000000] Linux version 4.9.0-custom (root@rexzhu) (gcc version 4.8.2 (GCC) ) #2 SMP Fri Mar 31 12:52:40 CST 2017
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
[    0.000000] x86/fpu: Enabled xstate features 0x1f, context size is 960 bytes, using 'compacted' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009c7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009c800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007d438fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d439000-0x000000007d439fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007d43a000-0x000000007d483fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007d484000-0x000000007d4c4fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d4c5000-0x000000007db49fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007db4a000-0x00000000858a7fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000858a8000-0x0000000086db6fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000086db7000-0x0000000086deffff] ACPI data
[    0.000000] BIOS-e820: [mem 0x0000000086df0000-0x000000008774bfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000008774c000-0x0000000087ffefff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000087fff000-0x0000000087ffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000088000000-0x00000000880fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000004767fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 3.0 present.
[    0.000000] DMI: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x476800 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 00C0000000 mask 7FC0000000 uncachable
[    0.000000]   1 base 00A0000000 mask 7FE0000000 uncachable
[    0.000000]   2 base 0090000000 mask 7FF0000000 uncachable
[    0.000000]   3 base 008C000000 mask 7FFC000000 uncachable
[    0.000000]   4 base 008A000000 mask 7FFE000000 uncachable
[    0.000000]   5 base 0089000000 mask 7FFF000000 uncachable
[    0.000000]   6 base 0088800000 mask 7FFF800000 uncachable
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] e820: last_pfn = 0x88000 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [mem 0x000fcc50-0x000fcc5f] mapped at [ffff8800000fcc50]
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] Base memory trampoline at [ffff880000096000] 96000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] BRK [0x020c7000, 0x020c7fff] PGTABLE
[    0.000000] BRK [0x020c8000, 0x020c8fff] PGTABLE
[    0.000000] BRK [0x020c9000, 0x020c9fff] PGTABLE
[    0.000000] BRK [0x020ca000, 0x020cafff] PGTABLE
[    0.000000] BRK [0x020cb000, 0x020cbfff] PGTABLE
[    0.000000] BRK [0x020cc000, 0x020ccfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x2f6de000-0x33b66fff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F0580 000024 (v02 ALASKA)
[    0.000000] ACPI: XSDT 0x0000000086DC2098 0000AC (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FACP 0x0000000086DE5038 00010C (v05 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: DSDT 0x0000000086DC21E0 022E52 (v02 ALASKA A M I    01072009 INTL 20120913)
[    0.000000] ACPI: FACS 0x000000008774BF80 000040
[    0.000000] ACPI: APIC 0x0000000086DE5148 0000BC (v03 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FPDT 0x0000000086DE5208 000044 (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FIDT 0x0000000086DE5250 00009C (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: MCFG 0x0000000086DE52F0 00003C (v01 ALASKA A M I    01072009 MSFT 00000097)
[    0.000000] ACPI: HPET 0x0000000086DE5330 000038 (v01 ALASKA A M I    01072009 AMI. 0005000B)
[    0.000000] ACPI: SSDT 0x0000000086DE5368 00036D (v01 SataRe SataTabl 00001000 INTL 20120913)
[    0.000000] ACPI: LPIT 0x0000000086DE56D8 000094 (v01 INTEL  SKL      00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE5770 000248 (v02 INTEL  sensrhub 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE59B8 002BAE (v02 INTEL  PtidDevc 00001000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE8568 000C45 (v02 INTEL  Ther_Rvp 00001000 INTL 20120913)
[    0.000000] ACPI: DBGP 0x0000000086DE91B0 000034 (v01 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: DBG2 0x0000000086DE91E8 000054 (v00 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE9240 0006FD (v02 INTEL  xh_rvp08 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE9940 005271 (v02 SaSsdt SaSsdt   00003000 INTL 20120913)
[    0.000000] ACPI: UEFI 0x0000000086DEEBB8 000042 (v01                 00000000      00000000)
[    0.000000] ACPI: SSDT 0x0000000086DEEC00 000E58 (v02 CpuRef CpuSsdt  00003000 INTL 20120913)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x00000004767fffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x4767f8000-0x4767fbfff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009bfff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000007d438fff]
[    0.000000]   node   0: [mem 0x000000007d484000-0x000000007d4c4fff]
[    0.000000]   node   0: [mem 0x000000007db4a000-0x00000000858a7fff]
[    0.000000]   node   0: [mem 0x0000000087fff000-0x0000000087ffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x00000004767fffff]
[    0.000000] On node 0 totalpages: 4176244
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 3995 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 8456 pages used for memmap
[    0.000000]   DMA32 zone: 541145 pages, LIFO batch:31
[    0.000000]   Normal zone: 56736 pages used for memmap
[    0.000000]   Normal zone: 3631104 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x1808
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a701 base: 0xfed00000
[    0.000000] smpboot: Allowing 8 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009c000-0x0009cfff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d439000-0x7d439fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d43a000-0x7d483fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d4c5000-0x7db49fff]
[    0.000000] PM: Registered nosave memory: [mem 0x858a8000-0x86db6fff]
[    0.000000] PM: Registered nosave memory: [mem 0x86db7000-0x86deffff]
[    0.000000] PM: Registered nosave memory: [mem 0x86df0000-0x8774bfff]
[    0.000000] PM: Registered nosave memory: [mem 0x8774c000-0x87ffefff]
[    0.000000] PM: Registered nosave memory: [mem 0x88000000-0x880fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x88100000-0xdfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xe0000000-0xefffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xf0000000-0xfdffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe000000-0xfe010fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe011000-0xfebfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec00000-0xfec00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec01000-0xfedfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xfeffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xff000000-0xffffffff]
[    0.000000] e820: [mem 0x88100000-0xdfffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] percpu: Embedded 36 pages/cpu @ffff880476400000 s108056 r8192 d31208 u262144
[    0.000000] pcpu-alloc: s108056 r8192 d31208 u262144 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 4110967
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend quiet splash vt.handoff=7
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 16288164K/16704976K available (8091K kernel code, 1445K rwdata, 3668K rodata, 2220K init, 1180K bss, 416812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] 	Build-time adjustment of leaf fanout to 64.
[    0.000000] 	RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=8
[    0.000000] NR_IRQS:16640 nr_irqs:2048 16
[    0.000000] 	Offload RCU callbacks from all CPUs
[    0.000000] 	Offload RCU callbacks from CPUs: 0-7.
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] console [ttyS0] enabled
[    0.000000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635855245 ns
[    0.000000] hpet clockevent registered
[    0.000000] tsc: Detected 3400.000 MHz processor
[    0.000015] Calibrating delay loop (skipped), value calculated using timer frequency.. 6816.00 BogoMIPS (lpj=13632000)
[    0.000016] pid_max: default: 32768 minimum: 301
[    0.000035] ACPI: Core revision 20160831
[    0.049168] ACPI Error: [\_SB_.PCI0.XHC_.RHUB.HS11] Namespace lookup failure, AE_NOT_FOUND (20160831/dswload-210)
[    0.059605] ACPI Exception: AE_NOT_FOUND, During name lookup/catalog (20160831/psobject-227)
[    0.068365] ACPI Exception: AE_NOT_FOUND, (SSDT:xh_rvp08) while loading table (20160831/tbxfload-228)
[    0.089753] ACPI Error: 1 table load failures, 7 successful (20160831/tbxfload-246)
[    0.097652] Security Framework initialized
[    0.097653] Yama: becoming mindful.
[    0.097663] AppArmor: AppArmor initialized
[    0.098243] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes)
[    0.100214] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.101064] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101074] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101443] CPU: Physical Processor ID: 0
[    0.101443] CPU: Processor Core ID: 0
[    0.101446] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[    0.101446] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[    0.101449] mce: CPU supports 10 MCE banks
[    0.101457] CPU0: Thermal monitoring enabled (TM1)
[    0.101471] process: using mwait in idle threads
[    0.101472] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8
[    0.101473] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4
[    0.101726] Freeing SMP alternatives memory: 32K (ffffffff81f96000 - ffffffff81f9e000)
[    0.132575] ftrace: allocating 32207 entries in 126 pages
[    0.141555] smpboot: APIC(0) Converting physical 0 to logical package 0
[    0.141555] smpboot: Max logical packages: 2
[    0.142755] x2apic: IRQ remapping doesn't support X2APIC mode
[    0.145898] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0
[    0.185586] TSC deadline timer enabled
[    0.185591] smpboot: CPU0: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (family: 0x6, model: 0x5e, stepping: 0x3)
[    0.185593] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[    0.185616] ... version:                4
[    0.185616] ... bit width:              48
[    0.185616] ... generic registers:      4
[    0.185617] ... value mask:             0000ffffffffffff
[    0.185617] ... max period:             00007fffffffffff
[    0.185617] ... fixed-purpose events:   3
[    0.185617] ... event mask:             000000070000000f
[    0.186321] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[    0.186431] x86: Booting SMP configuration:
[    0.186432] .... node  #0, CPUs:      #1 #2 #3 #4 #5 #6 #7
[    0.747742] x86: Booted up 1 node, 8 CPUs
[    0.747744] smpboot: Total of 8 processors activated (54535.48 BogoMIPS)
[    0.754638] devtmpfs: initialized
[    0.754751] x86/mm: Memory block size: 128MB
[    0.759295] evm: security.selinux
[    0.759296] evm: security.SMACK64
[    0.759296] evm: security.ima
[    0.759296] evm: security.capability
[    0.759348] PM: Registering ACPI NVS region [mem 0x7d439000-0x7d439fff] (4096 bytes)
[    0.759349] PM: Registering ACPI NVS region [mem 0x86df0000-0x8774bfff] (9814016 bytes)
[    0.760138] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.760183] pinctrl core: initialized pinctrl subsystem
[    0.760416] RTC time:  3:02:30, date: 05/23/17
[    0.760526] NET: Registered protocol family 16
[    0.778351] cpuidle: using governor ladder
[    0.786145] cpuidle: using governor menu
[    0.786234] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.786235] ACPI: bus type PCI registered
[    0.786236] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.786356] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.786357] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[    0.786367] PCI: Using configuration type 1 for base access
[    0.810489] HugeTLB registered 1 GB page size, pre-allocated 0 pages
[    0.810489] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.810791] ACPI: Added _OSI(Module Device)
[    0.810791] ACPI: Added _OSI(Processor Device)
[    0.810791] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.810792] ACPI: Added _OSI(Processor Aggregator Device)
[    0.813087] ACPI: Executed 21 blocks of module-level executable AML code
[    0.832491] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    0.836090] ACPI: Dynamic OEM Table Load:
[    0.836094] ACPI: SSDT 0xFFFF8804625B8800 0006E4 (v02 PmRef  Cpu0Ist  00003000 INTL 20120913)
[    0.836605] ACPI: \_PR_.CPU0: _OSC native thermal LVT Acked
[    0.839290] ACPI: Dynamic OEM Table Load:
[    0.839293] ACPI: SSDT 0xFFFF880464BD0800 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20120913)
[    0.840448] ACPI: Dynamic OEM Table Load:
[    0.840452] ACPI: SSDT 0xFFFF880464042800 0005AA (v02 PmRef  ApIst    00003000 INTL 20120913)
[    0.841428] ACPI: Dynamic OEM Table Load:
[    0.841431] ACPI: SSDT 0xFFFF880464037600 000119 (v02 PmRef  ApCst    00003000 INTL 20120913)
[    0.849879] ACPI: Interpreter enabled
[    0.849905] ACPI: (supports S0 S3 S4 S5)
[    0.849905] ACPI: Using IOAPIC for interrupt routing
[    0.849949] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.853219] ACPI: Power Resource [PG00] (on)
[    0.853977] ACPI: Power Resource [PG01] (on)
[    0.854692] ACPI: Power Resource [PG02] (on)
[    0.858945] ACPI: Power Resource [WRST] (off)
[    0.859672] ACPI: Power Resource [WRST] (off)
[    0.860398] ACPI: Power Resource [WRST] (off)
[    0.861120] ACPI: Power Resource [WRST] (off)
[    0.861840] ACPI: Power Resource [WRST] (off)
[    0.862575] ACPI: Power Resource [WRST] (off)
[    0.863297] ACPI: Power Resource [WRST] (off)
[    0.864037] ACPI: Power Resource [WRST] (off)
[    0.864757] ACPI: Power Resource [WRST] (off)
[    0.865477] ACPI: Power Resource [WRST] (off)
[    0.866197] ACPI: Power Resource [WRST] (off)
[    0.866925] ACPI: Power Resource [WRST] (off)
[    0.867652] ACPI: Power Resource [WRST] (off)
[    0.868385] ACPI: Power Resource [WRST] (off)
[    0.869106] ACPI: Power Resource [WRST] (off)
[    0.869824] ACPI: Power Resource [WRST] (off)
[    0.870545] ACPI: Power Resource [WRST] (off)
[    0.871266] ACPI: Power Resource [WRST] (off)
[    0.871986] ACPI: Power Resource [WRST] (off)
[    0.872705] ACPI: Power Resource [WRST] (off)
[    0.887280] ACPI: Power Resource [FN00] (off)
[    0.887440] ACPI: Power Resource [FN01] (off)
[    0.887601] ACPI: Power Resource [FN02] (off)
[    0.887759] ACPI: Power Resource [FN03] (off)
[    0.887917] ACPI: Power Resource [FN04] (off)
[    0.889869] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.889874] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.889951] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[    0.891317] PCI host bridge to bus 0000:00
[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
[    0.891331] pci 0000:00:00.0: [8086:191f] type 00 class 0x060000
[    0.891877] pci 0000:00:14.0: [8086:a12f] type 00 class 0x0c0330
[    0.891892] pci 0000:00:14.0: reg 0x10: [mem 0xdff30000-0xdff3ffff 64bit]
[    0.891948] pci 0000:00:14.0: PME# supported from D3hot D3cold
[    0.892169] pci 0000:00:14.0: System wakeup disabled by ACPI
[    0.892253] pci 0000:00:16.0: [8086:a13a] type 00 class 0x078000
[    0.892266] pci 0000:00:16.0: reg 0x10: [mem 0xdff4d000-0xdff4dfff 64bit]
[    0.892311] pci 0000:00:16.0: PME# supported from D3hot
[    0.892576] pci 0000:00:17.0: [8086:a102] type 00 class 0x010601
[    0.892587] pci 0000:00:17.0: reg 0x10: [mem 0xdff48000-0xdff49fff]
[    0.892592] pci 0000:00:17.0: reg 0x14: [mem 0xdff4c000-0xdff4c0ff]
[    0.892598] pci 0000:00:17.0: reg 0x18: [io  0xf050-0xf057]
[    0.892603] pci 0000:00:17.0: reg 0x1c: [io  0xf040-0xf043]
[    0.892609] pci 0000:00:17.0: reg 0x20: [io  0xf020-0xf03f]
[    0.892614] pci 0000:00:17.0: reg 0x24: [mem 0xdff4b000-0xdff4b7ff]
[    0.892647] pci 0000:00:17.0: PME# supported from D3hot
[    0.892910] pci 0000:00:1b.0: [8086:a167] type 01 class 0x060400
[    0.892959] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.893228] pci 0000:00:1b.0: System wakeup disabled by ACPI
[    0.893312] pci 0000:00:1c.0: [8086:a110] type 01 class 0x060400
[    0.893362] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.893630] pci 0000:00:1c.0: System wakeup disabled by ACPI
[    0.893694] pci 0000:00:1c.2: [8086:a112] type 01 class 0x060400
[    0.893743] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
[    0.894012] pci 0000:00:1c.2: System wakeup disabled by ACPI
[    0.894090] pci 0000:00:1d.0: [8086:a118] type 01 class 0x060400
[    0.894141] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[    0.894406] pci 0000:00:1d.0: System wakeup disabled by ACPI
[    0.894496] pci 0000:00:1f.0: [8086:a145] type 00 class 0x060100
[    0.894828] pci 0000:00:1f.2: [8086:a121] type 00 class 0x058000
[    0.894838] pci 0000:00:1f.2: reg 0x10: [mem 0xdff44000-0xdff47fff]
[    0.895124] pci 0000:00:1f.3: [8086:a170] type 00 class 0x040300
[    0.895143] pci 0000:00:1f.3: reg 0x10: [mem 0xdff40000-0xdff43fff 64bit]
[    0.895171] pci 0000:00:1f.3: reg 0x20: [mem 0xdff20000-0xdff2ffff 64bit]
[    0.895215] pci 0000:00:1f.3: PME# supported from D3hot D3cold
[    0.895487] pci 0000:00:1f.3: System wakeup disabled by ACPI
[    0.895555] pci 0000:00:1f.4: [8086:a123] type 00 class 0x0c0500
[    0.895601] pci 0000:00:1f.4: reg 0x10: [mem 0xdff4a000-0xdff4a0ff 64bit]
[    0.895670] pci 0000:00:1f.4: reg 0x20: [io  0xf000-0xf01f]
[    0.895986] pci 0000:00:1f.6: [8086:15b8] type 00 class 0x020000
[    0.896005] pci 0000:00:1f.6: reg 0x10: [mem 0xdff00000-0xdff1ffff]
[    0.896105] pci 0000:00:1f.6: PME# supported from D0 D3hot D3cold
[    0.896313] pci 0000:00:1f.6: System wakeup disabled by ACPI
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
[    0.906695] pci 0000:02:00.0: [1b21:1242] type 00 class 0x0c0330
[    0.906715] pci 0000:02:00.0: reg 0x10: [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.906823] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    0.906880] pci 0000:02:00.0: System wakeup disabled by ACPI
[    0.922505] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.922513] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.922672] pci 0000:03:00.0: [1b21:1080] type 01 class 0x060400
[    0.922788] pci 0000:03:00.0: supports D1 D2
[    0.922789] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.922830] pci 0000:03:00.0: System wakeup disabled by ACPI
[    0.938523] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.938689] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.938842] acpiphp: Slot [1] registered
[    0.938845] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.941676] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[    0.941790] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.941903] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 11 12 14 *15)
[    0.942016] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942128] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942240] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942352] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942462] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *10 11 12 14 15)
[    0.943304] ACPI: Enabled 6 GPEs in block 00 to 7F
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
[    0.943858] SCSI subsystem initialized
[    0.943913] libata version 3.00 loaded.
[    0.943946] ACPI: bus type USB registered
[    0.943974] usbcore: registered new interface driver usbfs
[    0.943989] usbcore: registered new interface driver hub
[    0.944011] usbcore: registered new device driver usb
[    0.944149] PCI: Using ACPI for IRQ routing
[    0.971976] PCI: pci_cache_line_size set to 64 bytes
[    0.972016] e820: reserve RAM buffer [mem 0x0009c800-0x0009ffff]
[    0.972018] e820: reserve RAM buffer [mem 0x7d439000-0x7fffffff]
[    0.972019] e820: reserve RAM buffer [mem 0x7d4c5000-0x7fffffff]
[    0.972020] e820: reserve RAM buffer [mem 0x858a8000-0x87ffffff]
[    0.972021] e820: reserve RAM buffer [mem 0x476800000-0x477ffffff]
[    0.972180] NetLabel: Initializing
[    0.972180] NetLabel:  domain hash size = 128
[    0.972181] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.972199] NetLabel:  unlabeled traffic allowed by default
[    0.972329] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    0.972332] hpet0: 8 comparators, 64-bit 24.000000 MHz counter
[    0.974373] clocksource: Switched to clocksource hpet
[    0.984338] VFS: Disk quotas dquot_6.6.0
[    0.984373] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.984505] AppArmor: AppArmor Filesystem Enabled
[    0.984561] pnp: PnP ACPI init
[    0.984848] system 00:00: [io  0x0290-0x029f] has been reserved
[    0.984850] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.985322] pnp 00:01: [dma 0 disabled]
[    0.985388] pnp 00:01: Plug and Play ACPI device, IDs PNP0501 (active)
[    0.985626] system 00:02: [io  0x0680-0x069f] has been reserved
[    0.985627] system 00:02: [io  0xffff] has been reserved
[    0.985629] system 00:02: [io  0xffff] has been reserved
[    0.985630] system 00:02: [io  0xffff] has been reserved
[    0.985632] system 00:02: [io  0x1800-0x18fe] has been reserved
[    0.985633] system 00:02: [io  0x164e-0x164f] has been reserved
[    0.985635] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.985744] system 00:03: [io  0x0800-0x087f] has been reserved
[    0.985745] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.985785] pnp 00:04: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.985855] system 00:05: [io  0x1854-0x1857] has been reserved
[    0.985856] system 00:05: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.986242] system 00:06: [mem 0xfed10000-0xfed17fff] has been reserved
[    0.986244] system 00:06: [mem 0xfed18000-0xfed18fff] has been reserved
[    0.986245] system 00:06: [mem 0xfed19000-0xfed19fff] has been reserved
[    0.986247] system 00:06: [mem 0xe0000000-0xefffffff] has been reserved
[    0.986248] system 00:06: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.986250] system 00:06: [mem 0xfed90000-0xfed93fff] has been reserved
[    0.986251] system 00:06: [mem 0xfed45000-0xfed8ffff] has been reserved
[    0.986253] system 00:06: [mem 0xff000000-0xffffffff] has been reserved
[    0.986255] system 00:06: [mem 0xfee00000-0xfeefffff] could not be reserved
[    0.986256] system 00:06: [mem 0xdffc0000-0xdffdffff] has been reserved
[    0.986257] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.986332] system 00:07: [mem 0xfd000000-0xfdabffff] has been reserved
[    0.986334] system 00:07: [mem 0xfdad0000-0xfdadffff] has been reserved
[    0.986335] system 00:07: [mem 0xfdb00000-0xfdffffff] has been reserved
[    0.986337] system 00:07: [mem 0xfe000000-0xfe01ffff] could not be reserved
[    0.986338] system 00:07: [mem 0xfe036000-0xfe03bfff] has been reserved
[    0.986340] system 00:07: [mem 0xfe03d000-0xfe3fffff] has been reserved
[    0.986341] system 00:07: [mem 0xfe410000-0xfe7fffff] has been reserved
[    0.986342] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.988120] system 00:08: [mem 0xfdaf0000-0xfdafffff] has been reserved
[    0.988122] system 00:08: [mem 0xfdae0000-0xfdaeffff] has been reserved
[    0.988123] system 00:08: [mem 0xfdac0000-0xfdacffff] has been reserved
[    0.988125] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.989495] pnp: PnP ACPI: found 9 devices
[    0.997451] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.997454] pci_bus 0000:00: max bus depth: 2 pci_try_num: 3
[    0.997482] pci 0000:00:1d.0: BAR 14: assigned [mem 0x88800000-0x889fffff]
[    0.997485] pci 0000:00:1d.0: BAR 15: assigned [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.997486] pci 0000:00:1d.0: BAR 13: assigned [io  0x2000-0x2fff]
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.997505] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997507] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.997512] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.997525] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.997531] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997532] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.997534] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.997536] pci 0000:00:1d.0:   bridge window [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
[    0.997613] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997616] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.997620] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.997633] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.997638] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997640] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.997642] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.997644] pci 0000:00:1d.0:   bridge window [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
[    0.997775] pci 0000:02:00.0: BAR 0: assigned [mem 0x8ac00000-0x8ac07fff 64bit]
[    0.997784] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997786] pci 0000:00:1c.0:   bridge window [mem 0x8ac00000-0x8acfffff]
[    0.997790] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.997803] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.997809] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997810] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.997813] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.997815] pci 0000:00:1d.0:   bridge window [mem 0x8ad00000-0x8b0fffff 64bit pref]
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if you have problem, try booting with pci=realloc=off
[    0.997819] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]
[    0.997820] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]
[    0.997820] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]
[    0.997821] pci_bus 0000:00: resource 7 [mem 0x88800000-0xdfffffff window]
[    0.997822] pci_bus 0000:00: resource 8 [mem 0xfd000000-0xfe7fffff window]
[    0.997822] pci_bus 0000:01: resource 0 [io  0xe000-0xefff]
[    0.997823] pci_bus 0000:01: resource 1 [mem 0x8b400000-0x8f7fffff]
[    0.997824] pci_bus 0000:02: resource 1 [mem 0x8ac00000-0x8acfffff]
[    0.997824] pci_bus 0000:05: resource 0 [io  0x2000-0x2fff]
[    0.997825] pci_bus 0000:05: resource 1 [mem 0x88800000-0x889fffff]
[    0.997825] pci_bus 0000:05: resource 2 [mem 0x8ad00000-0x8b0fffff 64bit pref]
[    0.998017] NET: Registered protocol family 2
[    0.998224] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.998344] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[    0.998439] TCP: Hash tables configured (established 131072 bind 65536)
[    0.998460] UDP hash table entries: 8192 (order: 6, 262144 bytes)
[    0.998489] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes)
[    0.998579] NET: Registered protocol family 1
[    0.999248] pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    0.999926] PCI: CLS 0 bytes, default 64
[    0.999972] Trying to unpack rootfs image as initramfs...
[    1.727335] Freeing initrd memory: 70180K (ffff88002f6de000 - ffff880033b67000)
[    1.727337] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    1.727339] software IO TLB [mem 0x818a8000-0x858a8000] (64MB) mapped at [ffff8800818a8000-ffff8800858a7fff]
[    1.727553] RAPL PMU: API unit is 2^-32 Joules, 5 fixed counters, 655360 ms ovfl timer
[    1.727553] RAPL PMU: hw unit of domain pp0-core 2^-14 Joules
[    1.727554] RAPL PMU: hw unit of domain package 2^-14 Joules
[    1.727554] RAPL PMU: hw unit of domain dram 2^-14 Joules
[    1.727554] RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules
[    1.727555] RAPL PMU: hw unit of domain psys 2^-14 Joules
[    1.728135] Scanning for low memory corruption every 60 seconds
[    1.728726] futex hash table entries: 2048 (order: 5, 131072 bytes)
[    1.728752] audit: initializing netlink subsys (disabled)
[    1.728769] audit: type=2000 audit(1495508550.692:1): initialized
[    1.729532] Initialise system trusted keyrings
[    1.729674] workingset: timestamp_bits=40 max_order=22 bucket_order=0
[    1.734226] fuse init (API version 7.26)
[    1.735699] Key type asymmetric registered
[    1.735699] Asymmetric key parser 'x509' registered
[    1.735764] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    1.735822] io scheduler noop registered
[    1.735823] io scheduler deadline registered (default)
[    1.735830] io scheduler cfq registered
[    1.736320] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    1.736328] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    1.736368] efifb: probing for efifb
[    1.736371] efifb: framebuffer at 0xa0000, using 64k, total 64k
[    1.736372] efifb: mode is 640x480x1, linelength=80, pages=1
[    1.736372] efifb: scrolling: redraw
[    1.736373] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.737120] Console: switching to colour frame buffer device 80x30
[    1.737742] fb0: EFI VGA frame buffer device
[    1.737750] intel_idle: MWAIT substates: 0x142120
[    1.737750] intel_idle: v0.4.1 model 0x5E
[    1.738495] intel_idle: lapic_timer_reliable_states 0xffffffff
[    1.738505] ipmi message handler version 39.2
[    1.738612] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0
[    1.738615] ACPI: Sleep Button [SLPB]
[    1.738678] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[    1.738680] ACPI: Power Button [PWRB]
[    1.738741] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[    1.738743] ACPI: Power Button [PWRF]
[    1.740527] thermal LNXTHERM:00: registered as thermal_zone0
[    1.740528] ACPI: Thermal Zone [TZ00] (28 C)
[    1.740874] thermal LNXTHERM:01: registered as thermal_zone1
[    1.740875] ACPI: Thermal Zone [TZ01] (30 C)
[    1.740903] GHES: HEST is not enabled!
[    1.741044] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    1.761587] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    1.764644] Linux agpgart interface v0.103
[    1.770629] brd: module loaded
[    1.773654] loop: module loaded
[    1.774080] libphy: Fixed MDIO Bus: probed
[    1.774490] tun: Universal TUN/TAP device driver, 1.6
[    1.774490] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
[    1.774586] PPP generic driver version 2.4.2
[    1.774670] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.774673] ehci-pci: EHCI PCI platform driver
[    1.774685] ehci-platform: EHCI generic platform driver
[    1.774696] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.774697] ohci-pci: OHCI PCI platform driver
[    1.774708] ohci-platform: OHCI generic platform driver
[    1.774716] uhci_hcd: USB Universal Host Controller Interface driver
[    1.774901] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.774907] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[    1.775990] xhci_hcd 0000:00:14.0: hcc params 0x200077c1 hci version 0x100 quirks 0x00109810
[    1.775993] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[    1.776103] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.776104] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.776105] usb usb1: Product: xHCI Host Controller
[    1.776105] usb usb1: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.776106] usb usb1: SerialNumber: 0000:00:14.0
[    1.776299] hub 1-0:1.0: USB hub found
[    1.776316] hub 1-0:1.0: 16 ports detected
[    1.791067] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.791071] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 2
[    1.791114] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    1.791114] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.791115] usb usb2: Product: xHCI Host Controller
[    1.791116] usb usb2: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.791116] usb usb2: SerialNumber: 0000:00:14.0
[    1.791311] hub 2-0:1.0: USB hub found
[    1.791324] hub 2-0:1.0: 10 ports detected
[    1.800679] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.800684] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 3
[    1.859445] xhci_hcd 0000:02:00.0: hcc params 0x0200eec1 hci version 0x110 quirks 0x00000010
[    1.859790] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    1.859791] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.859792] usb usb3: Product: xHCI Host Controller
[    1.859792] usb usb3: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.859793] usb usb3: SerialNumber: 0000:02:00.0
[    1.859984] hub 3-0:1.0: USB hub found
[    1.859992] hub 3-0:1.0: 2 ports detected
[    1.860124] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.860127] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 4
[    1.860157] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.860183] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003
[    1.860183] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.860184] usb usb4: Product: xHCI Host Controller
[    1.860184] usb usb4: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.860185] usb usb4: SerialNumber: 0000:02:00.0
[    1.860373] hub 4-0:1.0: USB hub found
[    1.860381] hub 4-0:1.0: 2 ports detected
[    1.860546] i8042: PNP: No PS/2 controller found. Probing ports directly.
[    1.863868] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.863871] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.864131] mousedev: PS/2 mouse device common for all mice
[    1.864487] rtc_cmos 00:04: RTC can wake from S4
[    1.864922] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0
[    1.865003] rtc_cmos 00:04: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[    1.865077] device-mapper: uevent: version 1.0.3
[    1.865220] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: dm-devel@redhat.com
[    1.865222] intel_pstate: Intel P-state driver initializing
[    1.866102] intel_pstate: HWP enabled
[    1.866565] ledtrig-cpu: registered to indicate activity on CPUs
[    1.866850] NET: Registered protocol family 10
[    1.867238] NET: Registered protocol family 17
[    1.867244] Key type dns_resolver registered
[    1.867739] microcode: sig=0x506e3, pf=0x2, revision=0x33
[    1.868149] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[    1.868548] registered taskstats version 1
[    1.868549] Loading compiled-in X.509 certificates
[    1.870972] Loaded X.509 cert 'Build time autogenerated kernel key: 425e568c95731e69b073bb62214af700479a67a7'
[    1.871139] kmemleak: Kernel memory leak detector initialized
[    1.871194] kmemleak: Automatic memory scanning thread started
[    1.873242] Key type trusted registered
[    1.876986] Key type encrypted registered
[    1.876988] AppArmor: AppArmor sha1 policy hashing enabled
[    1.876989] ima: No TPM chip found, activating TPM-bypass!
[    1.877006] evm: HMAC attrs: 0x1
[    1.878412]   Magic number: 1:0:8
[    1.878526] memory memory52: hash matches
[    1.878693] rtc_cmos 00:04: setting system clock to 2017-05-23 03:02:31 UTC (1495508551)
[    1.878887] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    1.878887] EDD information not available.
[    1.879062] PM: Hibernation image not present or could not be loaded.
[    1.879872] Freeing unused kernel memory: 2220K (ffffffff81d6b000 - ffffffff81f96000)
[    1.879872] Write protecting the kernel read-only data: 12288k
[    1.880062] Freeing unused kernel memory: 84K (ffff8800017eb000 - ffff880001800000)
[    1.880656] Freeing unused kernel memory: 428K (ffff880001b95000 - ffff880001c00000)
[    1.889484] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.889540] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.889547] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.890513] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.890535] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.891569] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.891608] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892119] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892156] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892194] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.921124] hid: module verification failed: signature and/or required key missing - tainting kernel
[    1.921710] hidraw: raw HID events driver (C) Jiri Kosina
[    1.927701] wmi: Mapper loaded
[    1.942001] ahci 0000:00:17.0: version 3.0
[    1.942573] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 6 ports 6 Gbps 0x3f impl SATA mode
[    1.942574] ahci 0000:00:17.0: flags: 64bit ncq sntf led clo only pio slum part ems deso sadm sds apst 
[    1.944060] pps_core: LinuxPPS API ver. 1 registered
[    1.944060] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.944471] PTP clock support registered
[    1.945229] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.945229] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    2.008270] scsi host0: ahci
[    2.008680] scsi host1: ahci
[    2.009081] scsi host2: ahci
[    2.009535] scsi host3: ahci
[    2.009917] scsi host4: ahci
[    2.010244] scsi host5: ahci
[    2.010364] ata1: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b100 irq 129
[    2.010368] ata2: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b180 irq 129
[    2.010369] ata3: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b200 irq 129
[    2.010370] ata4: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b280 irq 129
[    2.010371] ata5: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b300 irq 129
[    2.010385] ata6: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b380 irq 129
[    2.010800] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    2.118466] usb 1-10: new full-speed USB device number 2 using xhci_hcd
[    2.261613] usb 1-10: New USB device found, idVendor=046d, idProduct=c534
[    2.261614] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.261615] usb 1-10: Product: USB Receiver
[    2.261615] usb 1-10: Manufacturer: Logitech
[    2.266734] usbcore: registered new interface driver usbhid
[    2.266735] usbhid: USB HID core driver
[    2.267863] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/0003:046D:C534.0001/input/input6
[    2.282262] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[    2.326534] CPU: 7 PID: 212 Comm: scsi_eh_4 Tainted: G            E   4.9.0-custom #2
[    2.326535] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326535]  ffffc90002067ae8 ffffffff813c2d3f ffff880452acde80 ffff880452ace2b0
[    2.326537]  ffffc90002067b10 ffffffff815a7226 ffffc90002067b10 0000000000000286
[    2.326538]  ffffc90000029300 ffffc90002067b30 ffffffffa003f634 ffff880452acde80
[    2.326539] Call Trace:
[    2.326542]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326544]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326546]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326547]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326549]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326550]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326551]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326552]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326553]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326554]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326555]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326556]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326557]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326558]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326559]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326560]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326562]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326564]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326565]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326566]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326567]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326569]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326570]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326571]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326572]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326573]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326574]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326576]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326582] ata5: SATA link down (SStatus 4 SControl 300)
[    2.326612] CPU: 2 PID: 204 Comm: scsi_eh_0 Tainted: G            E   4.9.0-custom #2
[    2.326613] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326613]  ffffc90001febae8 ffffffff813c2d3f ffff880452ab9e80 ffff880452aba2b0
[    2.326615]  ffffc90001febb10 ffffffff815a7226 ffffc90001febb10 0000000000000286
[    2.326616]  ffffc90000029100 ffffc90001febb30 ffffffffa003f634 ffff880452ab9e80
[    2.326617] Call Trace:
[    2.326619]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326620]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326622]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326623]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326624]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326625]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326626]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326627]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326628]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326629]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326630]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326631]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326632]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326633]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326634]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326635]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326636]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326638]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326639]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326640]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326641]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326642]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326643]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326644]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326645]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326646]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326647]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326648]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326662] ata1: SATA link down (SStatus 4 SControl 300)
[    2.326902] CPU: 4 PID: 206 Comm: scsi_eh_1 Tainted: G            E   4.9.0-custom #2
[    2.326903] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326903]  ffffc9000202bae8 ffffffff813c2d3f ffff880452abde80 ffff880452abe2b0
[    2.326905]  ffffc9000202bb10 ffffffff815a7226 ffffc9000202bb10 0000000000000286
[    2.326907]  ffffc90000029180 ffffc9000202bb30 ffffffffa003f634 ffff880452abde80
[    2.326908] Call Trace:
[    2.326911]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326912]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326914]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326916]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326930]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326932]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326934]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326935]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326937]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326938]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326940]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326941]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326943]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326944]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326945]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326946]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326948]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326949]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326951]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326952]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326953]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326954]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326955]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326956]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326957]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326958]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326959]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326960]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326973] ata2: SATA link down (SStatus 4 SControl 300)
[    2.326991] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-10/input0
[    2.326993] CPU: 5 PID: 214 Comm: scsi_eh_5 Tainted: G            E   4.9.0-custom #2
[    2.326994] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326994]  ffffc900020efae8 ffffffff813c2d3f ffff880452ad1e80 ffff880452ad22b0
[    2.326996]  ffffc900020efb10 ffffffff815a7226 ffffc900020efb10 0000000000000286
[    2.326997]  ffffc90000029380 ffffc900020efb30 ffffffffa003f634 ffff880452ad1e80
[    2.326998] Call Trace:
[    2.327001]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.327002]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.327003]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.327004]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.327006]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327008]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327010]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327011]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327013]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327014]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327015]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.327017]  [<ffffffff8146d8e8>] ? acpi_ds_exec_end_op+0x2b0/0x3ec
[    2.327018]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327019]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327020]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327021]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.327023]  [<ffffffff816013f7>] ? usb_acpi_find_companion+0x177/0x210
[    2.327025]  [<ffffffff8145e255>] ? acpi_platform_notify+0x3c/0xa7
[    2.327026]  [<ffffffff8152e448>] ? device_add+0x1a8/0x5f0
[    2.327027]  [<ffffffff8152e8aa>] ? device_register+0x1a/0x20
[    2.327028]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.327029]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.327031]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.327032]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.327033]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.327034]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.327035]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327037]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.327038]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327039]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327040]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.327041]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.327042]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.327045] ata6: SATA link down (SStatus 4 SControl 300)
[    2.327080] CPU: 1 PID: 210 Comm: scsi_eh_3 Tainted: G            E   4.9.0-custom #2
[    2.327080] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.327081]  ffffc9000204bae8 ffffffff813c2d3f ffff880452ac5e80 ffff880452ac62b0
[    2.327082]  ffffc9000204bb10 ffffffff815a7226 ffffc9000204bb10 0000000000000286
[    2.327084]  ffffc90000029280 ffffc9000204bb30 ffffffffa003f634 ffff880452ac5e80
[    2.327085] Call Trace:
[    2.327086]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.327087]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.327088]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.327090]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.327091]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327092]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327093]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327094]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327095]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327096]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327097]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.327098]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327099]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327100]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327100]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.327101]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.327103]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.327104]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.327105]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.327106]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.327107]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.327108]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327109]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.327110]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327111]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327112]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.327113]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.327114]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.327123] ata4: SATA link down (SStatus 4 SControl 300)
[    2.327144] CPU: 2 PID: 208 Comm: scsi_eh_2 Tainted: G            E   4.9.0-custom #2
[    2.327145] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.327145]  ffffc9000203bae8 ffffffff813c2d3f ffff880452ac1e80 ffff880452ac22b0
[    2.327147]  ffffc9000203bb10 ffffffff815a7226 ffffc9000203bb10 0000000000000286
[    2.327148]  ffffc90000029200 ffffc9000203bb30 ffffffffa003f634 ffff880452ac1e80
[    2.327149] Call Trace:
[    2.327151]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.327152]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.327153]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.327154]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.327156]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327157]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327158]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327159]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327160]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327161]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327162]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.327163]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.327164]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.327165]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.327166]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.327167]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.327183]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.327185]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.327186]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.327187]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.327188]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.327189]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327190]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.327191]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327192]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.327192] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/0003:046D:C534.0002/input/input7
[    2.327193]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.327194]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.327196]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.327206] ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.328461] ata3.00: ATA-8: ST3500413AS, JC45, max UDMA/133
[    2.328462] ata3.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.329997] ata3.00: configured for UDMA/133
[    2.330447] scsi 2:0:0:0: Direct-Access     ATA      ST3500413AS      JC45 PQ: 0 ANSI: 5
[    2.370687] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 30:5a:3a:e0:7f:4d
[    2.370688] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[    2.370774] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[    2.371429] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[    2.387154] hid-generic 0003:046D:C534.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-10/input1
[    2.411000] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[    2.411006] sd 2:0:0:0: Attached scsi generic sg0 type 0
[    2.411463] sd 2:0:0:0: [sda] Write Protect is off
[    2.411464] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.411601] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.443628]  sda: sda1 sda2 < sda5 >
[    2.445142] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.750516] tsc: Refined TSC clocksource calibration: 3407.998 MHz
[    2.750522] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x311fd208cfc, max_idle_ns: 440795283699 ns
[    2.781745] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[    2.835964] random: fast init done
[    3.717395] systemd[1]: systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
[    3.717527] systemd[1]: Detected architecture x86-64.
[    3.724157] systemd[1]: Set hostname to <jenkins-MS-7984>.
[    3.774725] clocksource: Switched to clocksource tsc
[    4.332780] systemd[1]: Created slice User and Session Slice.
[    4.332838] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    4.332855] systemd[1]: Listening on fsck to fsckd communication Socket.
[    4.332860] systemd[1]: Reached target User and Group Name Lookups.
[    4.332880] systemd[1]: Listening on Syslog Socket.
[    4.332895] systemd[1]: Listening on udev Kernel Socket.
[    4.332917] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    4.999616] random: crng init done
[    5.135776] lp: driver loaded but no devices found
[    5.137860] ppdev: user-space parallel port driver
[    5.261416] RPC: Registered named UNIX socket transport module.
[    5.261416] RPC: Registered udp transport module.
[    5.261416] RPC: Registered tcp transport module.
[    5.261417] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    5.494378] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
[    6.005572] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[    6.329563] systemd-journald[293]: Received request to flush runtime journal from PID 1
[    6.524603] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    7.177214] mei_me 0000:00:16.0: enabling device (0000 -> 0002)
[    7.247634] AVX2 version of gcm_enc/dec engaged.
[    7.247635] AES CTR mode by8 optimization enabled
[    7.512754] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC892: line_outs=3 (0x14/0x15/0x16/0x0/0x0) type:line
[    7.512755] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.512756] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x1b/0x0/0x0/0x0/0x0)
[    7.512756] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    7.512757] snd_hda_codec_realtek hdaudioC0D0:    dig-out=0x11/0x1e
[    7.512757] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    7.512758] snd_hda_codec_realtek hdaudioC0D0:      Front Mic=0x19
[    7.512759] snd_hda_codec_realtek hdaudioC0D0:      Rear Mic=0x18
[    7.512759] snd_hda_codec_realtek hdaudioC0D0:      Line=0x1a
[    7.524838] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input8
[    7.524935] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input9
[    7.525031] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1f.3/sound/card0/input10
[    7.525125] input: HDA Intel PCH Line Out Front as /devices/pci0000:00/0000:00:1f.3/sound/card0/input11
[    7.525225] input: HDA Intel PCH Line Out Surround as /devices/pci0000:00/0000:00:1f.3/sound/card0/input12
[    7.525334] input: HDA Intel PCH Line Out CLFE as /devices/pci0000:00/0000:00:1f.3/sound/card0/input13
[    7.525441] input: HDA Intel PCH Front Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input14
[    7.966471] intel_rapl: Found RAPL domain package
[    7.966473] intel_rapl: Found RAPL domain core
[    7.966475] intel_rapl: Found RAPL domain dram
[    8.742764] audit: type=1400 audit(1495508558.360:2): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine" pid=696 comm="apparmor_parser"
[    8.742771] audit: type=1400 audit(1495508558.360:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=696 comm="apparmor_parser"
[    8.746550] audit: type=1400 audit(1495508558.364:4): apparmor="STATUS" operation="profile_load" name="/usr/sbin/ippusbxd" pid=699 comm="apparmor_parser"
[    8.762212] audit: type=1400 audit(1495508558.376:5): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cups-browsed" pid=697 comm="apparmor_parser"
[    8.762734] audit: type=1400 audit(1495508558.380:6): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=692 comm="apparmor_parser"
[    8.762741] audit: type=1400 audit(1495508558.380:7): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=692 comm="apparmor_parser"
[    8.762746] audit: type=1400 audit(1495508558.380:8): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=692 comm="apparmor_parser"
[    8.762751] audit: type=1400 audit(1495508558.380:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=692 comm="apparmor_parser"
[    8.810797] audit: type=1400 audit(1495508558.428:10): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=701 comm="apparmor_parser"
[    8.875653] audit: type=1400 audit(1495508558.492:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session" pid=691 comm="apparmor_parser"
[    9.312053] asus_wmi: ASUS WMI generic driver loaded
[    9.316050] asus_wmi: Initialization: 0x0
[    9.316117] asus_wmi: BIOS WMI version: 0.9
[    9.316246] asus_wmi: SFUN value: 0x0
[    9.317314] input: Eee PC WMI hotkeys as /devices/platform/eeepc-wmi/input/input15
[    9.317597] asus_wmi: Number of fans: 1
[    9.889318] Adding 8348668k swap on /dev/sda5.  Priority:-1 extents:1 across:8348668k FS
[   14.210964] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[   14.237443] NFSD: starting 90-second grace period (net ffffffff81d06400)
[   15.024108] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   15.238703] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   18.062124] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[   18.062126] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
[   18.062170] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s31f6: link becomes ready

=========================================================================================
00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 07)
00:14.0 USB controller: Intel Corporation Sunrise Point-H USB 3.0 xHCI Controller (rev 31)
00:16.0 Communication controller: Intel Corporation Sunrise Point-H CSME HECI #1 (rev 31)
00:17.0 SATA controller: Intel Corporation Sunrise Point-H SATA controller [AHCI mode] (rev 31)
00:1b.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Root Port #17 (rev f1)
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #1 (rev f1)
00:1c.2 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #3 (rev f1)
00:1d.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #9 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-H LPC Controller (rev 31)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-H PMC (rev 31)
00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
00:1f.4 SMBus: Intel Corporation Sunrise Point-H SMBus (rev 31)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V (rev 31)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150]
02:00.0 USB controller: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller
03:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 04)

=====================================================================================
root@jenkins-MS-7984:~# lspci -s 01:00.0 -vvv
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150] (prog-if 00 [VGA controller])
	Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150]
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 11
	Region 0: Memory at <ignored> (64-bit, prefetchable)
	Region 2: Memory at 8b400000 (64-bit, prefetchable) [size=2M]
	Region 4: I/O ports at e000 [size=256]
	Region 5: Memory at 8b600000 (32-bit, non-prefetchable) [size=256K]
	Expansion ROM at 000c0000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 256 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 8GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
			 EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
	Capabilities: [a0] MSI: Enable- Count=1/4 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
	Capabilities: [200 v1] #15
	Capabilities: [270 v1] #19
	Capabilities: [2b0 v1] Address Translation Service (ATS)
		ATSCap:	Invalidate Queue Depth: 00
		ATSCtl:	Enable-, Smallest Translation Unit: 00
	Capabilities: [2c0 v1] #13
	Capabilities: [2d0 v1] #1b
	Capabilities: [328 v1] Alternative Routing-ID Interpretation (ARI)
		ARICap:	MFVC- ACS-, Next Function: 0
		ARICtl:	MFVC- ACS-, Function Group: 0
	Capabilities: [330 v1] Single Root I/O Virtualization (SR-IOV)
		IOVCap:	Migration-, Interrupt Message Number: 000
		IOVCtl:	Enable- Migration- Interrupt- MSE- ARIHierarchy+
		IOVSta:	Migration-
		Initial VFs: 8, Total VFs: 8, Number of VFs: 0, Function Dependency Link: 00
		VF offset: 256, stride: 1, Device ID: 692f
		Supported Page Size: 00000553, System Page Size: 00000001
		Region 0: Memory at 0000000000000000 (64-bit, prefetchable)
		Region 2: Memory at 000000008d800000 (64-bit, prefetchable)
		Region 5: Memory at 8b800000 (32-bit, non-prefetchable)
		VF Migration: offset: 00000000, BIR: 0
	Capabilities: [400 v1] Vendor Specific Information: ID=0002 Rev=1 Len=070 <?>
	Kernel modules: amdgpu

==========================================================================================================


[-- Attachment #3: 2.txt --]
[-- Type: text/plain, Size: 175475 bytes --]

[    0.000000] Linux version 4.9.0-custom (root@rexzhu) (gcc version 4.8.2 (GCC) ) #2 SMP Fri Mar 31 12:52:40 CST 2017
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend pci=earlydump quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
[    0.000000] x86/fpu: Enabled xstate features 0x1f, context size is 960 bytes, using 'compacted' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009c7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009c800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007d438fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d439000-0x000000007d439fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007d43a000-0x000000007d483fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007d484000-0x000000007d4c4fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d4c5000-0x000000007db49fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007db4a000-0x00000000858a7fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000858a8000-0x0000000086db6fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000086db7000-0x0000000086deffff] ACPI data
[    0.000000] BIOS-e820: [mem 0x0000000086df0000-0x000000008774bfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000008774c000-0x0000000087ffefff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000087fff000-0x0000000087ffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000088000000-0x00000000880fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000004767fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] pci 0000:00:00.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  1f
[    0.000000]  19
[    0.000000]  06
[    0.000000]  00
[    0.000000]  90
[    0.000000]  20
[    0.000000]  07
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  e0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  01
[    0.000000]  90
[    0.000000]  d1
[    0.000000]  fe
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  d1
[    0.000000]  fe
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  21
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  40
[    0.000000]  88
[    0.000000] 
                 60:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  e0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  80
[    0.000000]  d1
[    0.000000]  fe
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  7f
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  10
[    0.000000]  11
[    0.000000]  11
[    0.000000]  11
[    0.000000]  11
[    0.000000]  11
[    0.000000]  11
[    0.000000]  00
[    0.000000]  1a
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  70
[    0.000000]  76
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  80
[    0.000000]  76
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  80
[    0.000000]  88
[    0.000000]  01
[    0.000000]  00
[    0.000000]  80
[    0.000000]  88
[    0.000000]  01
[    0.000000]  00
[    0.000000]  40
[    0.000000]  88
[    0.000000]  01
[    0.000000]  00
[    0.000000]  80
[    0.000000]  88
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  09
[    0.000000]  00
[    0.000000]  10
[    0.000000]  01
[    0.000000]  7d
[    0.000000]  26
[    0.000000]  01
[    0.000000]  62
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  04
[    0.000000]  96
[    0.000000]  00
[    0.000000]  00
[    0.000000]  07
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c8
[    0.000000]  0f
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:14.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  2f
[    0.000000]  a1
[    0.000000]  06
[    0.000000]  00
[    0.000000]  90
[    0.000000]  02
[    0.000000]  31
[    0.000000]  30
[    0.000000]  03
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  04
[    0.000000]  00
[    0.000000]  f3
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  70
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  fd
[    0.000000]  01
[    0.000000]  34
[    0.000000]  80
[    0.000000]  88
[    0.000000]  c6
[    0.000000]  0f
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  5f
[    0.000000]  6e
[    0.000000]  ce
[    0.000000]  0f
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  30
[    0.000000]  60
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  01
[    0.000000]  80
[    0.000000]  c2
[    0.000000]  c1
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  00
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  09
[    0.000000]  00
[    0.000000]  14
[    0.000000]  f0
[    0.000000]  10
[    0.000000]  00
[    0.000000]  40
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c1
[    0.000000]  0a
[    0.000000]  08
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  08
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  8f
[    0.000000]  40
[    0.000000]  02
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  04
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  80
[    0.000000]  c0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  30
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  02
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  28
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:16.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  3a
[    0.000000]  a1
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  31
[    0.000000]  00
[    0.000000]  80
[    0.000000]  07
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  04
[    0.000000]  d0
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  50
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  45
[    0.000000]  02
[    0.000000]  00
[    0.000000]  90
[    0.000000]  10
[    0.000000]  00
[    0.000000]  01
[    0.000000]  80
[    0.000000]  06
[    0.000000]  05
[    0.000000]  f2
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  01
[    0.000000]  8c
[    0.000000]  03
[    0.000000]  40
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  05
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:17.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  02
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  b0
[    0.000000]  02
[    0.000000]  31
[    0.000000]  01
[    0.000000]  06
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  80
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  c0
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  51
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  41
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  21
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b0
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0a
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  01
[    0.000000]  a8
[    0.000000]  03
[    0.000000]  40
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  70
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  fb
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  30
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000] 
                 a0:
[    0.000000]  d4
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  11
[    0.000000]  1e
[    0.000000]  2c
[    0.000000]  12
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  48
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  11
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1b.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  67
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  00
[    0.000000]  04
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  81
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  01
[    0.000000]  00
[    0.000000]  e0
[    0.000000]  e0
[    0.000000]  00
[    0.000000]  20
[    0.000000] 
                 20:
[    0.000000]  e0
[    0.000000]  df
[    0.000000]  e0
[    0.000000]  df
[    0.000000]  01
[    0.000000]  c0
[    0.000000]  11
[    0.000000]  d0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  18
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  10
[    0.000000]  80
[    0.000000]  42
[    0.000000]  01
[    0.000000]  01
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  20
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  23
[    0.000000]  40
[    0.000000]  72
[    0.000000]  11
[    0.000000] 
                 50:
[    0.000000]  40
[    0.000000]  00
[    0.000000]  23
[    0.000000]  70
[    0.000000]  00
[    0.000000]  fd
[    0.000000]  a4
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  37
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  1f
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  90
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  0d
[    0.000000]  a0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  03
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  11
[    0.000000]  10
[    0.000000]  00
[    0.000000]  07
[    0.000000]  42
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  1e
[    0.000000]  8b
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  f7
[    0.000000]  f3
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  80
[    0.000000]  12
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  50
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000]  40
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000]  01

[    0.000000] pci 0000:00:1c.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  10
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  00
[    0.000000]  04
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  81
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  02
[    0.000000]  00
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  20
[    0.000000] 
                 20:
[    0.000000]  d0
[    0.000000]  df
[    0.000000]  d0
[    0.000000]  df
[    0.000000]  f1
[    0.000000]  ff
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  10
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  10
[    0.000000]  80
[    0.000000]  42
[    0.000000]  01
[    0.000000]  01
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  20
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  23
[    0.000000]  40
[    0.000000]  72
[    0.000000]  01
[    0.000000] 
                 50:
[    0.000000]  40
[    0.000000]  00
[    0.000000]  22
[    0.000000]  70
[    0.000000]  00
[    0.000000]  fd
[    0.000000]  24
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  37
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  90
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  0d
[    0.000000]  a0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  03
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  11
[    0.000000]  10
[    0.000000]  00
[    0.000000]  07
[    0.000000]  42
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  1e
[    0.000000]  8b
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  f7
[    0.000000]  f3
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  80
[    0.000000]  12
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  50
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000]  40
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  01

[    0.000000] pci 0000:00:1c.2 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  12
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  00
[    0.000000]  04
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  81
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  04
[    0.000000]  20
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  80
[    0.000000]  22
[    0.000000] 
                 20:
[    0.000000]  f0
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  ff
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  10
[    0.000000]  80
[    0.000000]  42
[    0.000000]  01
[    0.000000]  01
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  13
[    0.000000]  40
[    0.000000]  72
[    0.000000]  03
[    0.000000] 
                 50:
[    0.000000]  40
[    0.000000]  00
[    0.000000]  11
[    0.000000]  70
[    0.000000]  00
[    0.000000]  b2
[    0.000000]  34
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  37
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  90
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  0d
[    0.000000]  a0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  03
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  01
[    0.000000]  10
[    0.000000]  00
[    0.000000]  07
[    0.000000]  42
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  1e
[    0.000000]  8f
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  03
[    0.000000]  e3
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  50
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  4c
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03

[    0.000000] pci 0000:00:1d.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  18
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  00
[    0.000000]  04
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  81
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  05
[    0.000000]  05
[    0.000000]  00
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  20
[    0.000000] 
                 20:
[    0.000000]  f0
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  ff
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  10
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  10
[    0.000000]  80
[    0.000000]  42
[    0.000000]  01
[    0.000000]  01
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  43
[    0.000000]  4c
[    0.000000]  71
[    0.000000]  09
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  10
[    0.000000]  60
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  37
[    0.000000]  08
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  05
[    0.000000]  90
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  0d
[    0.000000]  a0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  01
[    0.000000]  00
[    0.000000]  03
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  11
[    0.000000]  00
[    0.000000]  00
[    0.000000]  07
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  00
[    0.000000]  91
[    0.000000]  09
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  f7
[    0.000000]  b3
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  80
[    0.000000]  02
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  50
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  f3
[    0.000000]  00
[    0.000000]  40
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  c0
[    0.000000]  00
[    0.000000]  01

[    0.000000] pci 0000:00:1f.0 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  45
[    0.000000]  a1
[    0.000000]  07
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  31
[    0.000000]  00
[    0.000000]  01
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  d0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  70
[    0.000000]  00
[    0.000000]  03
[    0.000000]  3c
[    0.000000]  91
[    0.000000]  02
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  01
[    0.000000]  0a
[    0.000000]  7c
[    0.000000]  00
[    0.000000]  21
[    0.000000]  ff
[    0.000000]  0c
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  69
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  2b
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  33
[    0.000000]  22
[    0.000000]  11
[    0.000000]  00
[    0.000000]  67
[    0.000000]  45
[    0.000000]  00
[    0.000000]  00
[    0.000000]  cf
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  c1
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1f.2 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  21
[    0.000000]  a1
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  31
[    0.000000]  00
[    0.000000]  80
[    0.000000]  05
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  40
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  01
[    0.000000]  18
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  fe
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  f8
[    0.000000]  36
[    0.000000]  80
[    0.000000]  98
[    0.000000]  49
[    0.000000]  38
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  46
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1f.3 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  70
[    0.000000]  a1
[    0.000000]  06
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  31
[    0.000000]  00
[    0.000000]  03
[    0.000000]  04
[    0.000000]  00
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  04
[    0.000000]  00
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  04
[    0.000000]  00
[    0.000000]  f2
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  98
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  50
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  0d
[    0.000000]  3b
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  01
[    0.000000]  60
[    0.000000]  43
[    0.000000]  c0
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  05
[    0.000000]  00
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  10
[    0.000000]  00
[    0.000000]  91
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  28
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  08
[    0.000000]  06
[    0.000000]  02
[    0.000000]  01
[    0.000000]  00
[    0.000000]  70
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  0c
[    0.000000]  a5
[    0.000000]  82
[    0.000000]  10
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  0c
[    0.000000]  b5
[    0.000000]  02
[    0.000000]  10
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1f.4 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  23
[    0.000000]  a1
[    0.000000]  03
[    0.000000]  00
[    0.000000]  80
[    0.000000]  02
[    0.000000]  31
[    0.000000]  00
[    0.000000]  05
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  04
[    0.000000]  a0
[    0.000000]  f4
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  01
[    0.000000]  f0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  94
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  11
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  01
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  04
[    0.000000]  05
[    0.000000]  05
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  0f
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  24
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1f.5 config space:
[    0.000000] 
                 00:
[    0.000000]  ff
[    0.000000]  ff
[    0.000000]  ff
[    0.000000]  ff
[    0.000000]  02
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  31
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  fe
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  02
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  cf
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  88
[    0.000000]  0a
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  b3
[    0.000000]  0f
[    0.000000]  33
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:00:1f.6 config space:
[    0.000000] 
                 00:
[    0.000000]  86
[    0.000000]  80
[    0.000000]  b8
[    0.000000]  15
[    0.000000]  06
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  31
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  f0
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  72
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c8
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  28
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0d
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  40
[    0.000000]  02
[    0.000000]  18
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  10
[    0.000000]  03
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  d0
[    0.000000]  23
[    0.000000]  c8
[    0.000000]  08
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  05
[    0.000000]  e0
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  13
[    0.000000]  00
[    0.000000]  06
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:01:00.0 config space:
[    0.000000] 
                 00:
[    0.000000]  02
[    0.000000]  10
[    0.000000]  29
[    0.000000]  69
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  d0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  01
[    0.000000]  e0
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  e0
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  02
[    0.000000]  10
[    0.000000]  0c
[    0.000000]  03
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  e4
[    0.000000]  df
[    0.000000]  48
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  09
[    0.000000]  50
[    0.000000]  08
[    0.000000]  00
[    0.000000]  02
[    0.000000]  10
[    0.000000]  0c
[    0.000000]  03
[    0.000000] 
                 50:
[    0.000000]  01
[    0.000000]  58
[    0.000000]  03
[    0.000000]  f6
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  10
[    0.000000]  a0
[    0.000000]  12
[    0.000000]  00
[    0.000000]  a1
[    0.000000]  8f
[    0.000000]  e8
[    0.000000]  07
[    0.000000] 
                 60:
[    0.000000]  30
[    0.000000]  28
[    0.000000]  0b
[    0.000000]  00
[    0.000000]  03
[    0.000000]  0d
[    0.000000]  40
[    0.000000]  00
[    0.000000]  40
[    0.000000]  00
[    0.000000]  23
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  70
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  00
[    0.000000]  1e
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 90:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  05
[    0.000000]  00
[    0.000000]  84
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:02:00.0 config space:
[    0.000000] 
                 00:
[    0.000000]  21
[    0.000000]  1b
[    0.000000]  42
[    0.000000]  12
[    0.000000]  06
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  30
[    0.000000]  03
[    0.000000]  0c
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  04
[    0.000000]  00
[    0.000000]  d0
[    0.000000]  df
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 20:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  43
[    0.000000]  10
[    0.000000]  75
[    0.000000]  86
[    0.000000] 
                 30:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  50
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0b
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  05
[    0.000000]  68
[    0.000000]  86
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  30
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  11
[    0.000000]  78
[    0.000000]  07
[    0.000000]  00
[    0.000000]  00
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  80
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  80
[    0.000000]  43
[    0.000000]  c0
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  10
[    0.000000]  00
[    0.000000]  02
[    0.000000]  00
[    0.000000]  22
[    0.000000]  82
[    0.000000]  e8
[    0.000000]  07
[    0.000000]  30
[    0.000000]  28
[    0.000000]  10
[    0.000000]  00
[    0.000000]  22
[    0.000000]  dc
[    0.000000]  43
[    0.000000]  01
[    0.000000] 
                 90:
[    0.000000]  40
[    0.000000]  00
[    0.000000]  22
[    0.000000]  10
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  00
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  21
[    0.000000]  1b
[    0.000000]  42
[    0.000000]  12
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  28
[    0.000000]  4f
[    0.000000]  01
[    0.000000]  32
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] pci 0000:03:00.0 config space:
[    0.000000] 
                 00:
[    0.000000]  21
[    0.000000]  1b
[    0.000000]  80
[    0.000000]  10
[    0.000000]  07
[    0.000000]  00
[    0.000000]  10
[    0.000000]  00
[    0.000000]  04
[    0.000000]  00
[    0.000000]  04
[    0.000000]  06
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  00
[    0.000000] 
                 10:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  03
[    0.000000]  04
[    0.000000]  04
[    0.000000]  20
[    0.000000]  f1
[    0.000000]  01
[    0.000000]  20
[    0.000000]  20
[    0.000000] 
                 20:
[    0.000000]  f0
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  f1
[    0.000000]  ff
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 30:
[    0.000000]  ff
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  50
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  0f
[    0.000000]  01
[    0.000000]  10
[    0.000000]  00
[    0.000000] 
                 40:
[    0.000000]  20
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  07
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  a7
[    0.000000]  27
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 50:
[    0.000000]  05
[    0.000000]  78
[    0.000000]  80
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 60:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  11
[    0.000000]  78
[    0.000000]  01
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 70:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  01
[    0.000000]  80
[    0.000000]  23
[    0.000000]  fe
[    0.000000]  08
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 80:
[    0.000000]  10
[    0.000000]  c0
[    0.000000]  71
[    0.000000]  00
[    0.000000]  00
[    0.000000]  80
[    0.000000]  90
[    0.000000]  05
[    0.000000]  10
[    0.000000]  28
[    0.000000]  02
[    0.000000]  00
[    0.000000]  11
[    0.000000]  bc
[    0.000000]  00
[    0.000000]  01
[    0.000000] 
                 90:
[    0.000000]  40
[    0.000000]  00
[    0.000000]  11
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  c0
[    0.000000]  03
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 a0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 b0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 c0:
[    0.000000]  0d
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 d0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 e0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000] 
                 f0:
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00
[    0.000000]  00

[    0.000000] SMBIOS 3.0 present.
[    0.000000] DMI: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x476800 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 00C0000000 mask 7FC0000000 uncachable
[    0.000000]   1 base 00A0000000 mask 7FE0000000 uncachable
[    0.000000]   2 base 0090000000 mask 7FF0000000 uncachable
[    0.000000]   3 base 008C000000 mask 7FFC000000 uncachable
[    0.000000]   4 base 008A000000 mask 7FFE000000 uncachable
[    0.000000]   5 base 0089000000 mask 7FFF000000 uncachable
[    0.000000]   6 base 0088800000 mask 7FFF800000 uncachable
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] e820: last_pfn = 0x88000 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [mem 0x000fcc50-0x000fcc5f] mapped at [ffff8800000fcc50]
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] Base memory trampoline at [ffff880000096000] 96000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] BRK [0x020c7000, 0x020c7fff] PGTABLE
[    0.000000] BRK [0x020c8000, 0x020c8fff] PGTABLE
[    0.000000] BRK [0x020c9000, 0x020c9fff] PGTABLE
[    0.000000] BRK [0x020ca000, 0x020cafff] PGTABLE
[    0.000000] BRK [0x020cb000, 0x020cbfff] PGTABLE
[    0.000000] BRK [0x020cc000, 0x020ccfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x2f6de000-0x33b66fff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F0580 000024 (v02 ALASKA)
[    0.000000] ACPI: XSDT 0x0000000086DC2098 0000AC (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FACP 0x0000000086DE5038 00010C (v05 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: DSDT 0x0000000086DC21E0 022E52 (v02 ALASKA A M I    01072009 INTL 20120913)
[    0.000000] ACPI: FACS 0x000000008774BF80 000040
[    0.000000] ACPI: APIC 0x0000000086DE5148 0000BC (v03 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FPDT 0x0000000086DE5208 000044 (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FIDT 0x0000000086DE5250 00009C (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: MCFG 0x0000000086DE52F0 00003C (v01 ALASKA A M I    01072009 MSFT 00000097)
[    0.000000] ACPI: HPET 0x0000000086DE5330 000038 (v01 ALASKA A M I    01072009 AMI. 0005000B)
[    0.000000] ACPI: SSDT 0x0000000086DE5368 00036D (v01 SataRe SataTabl 00001000 INTL 20120913)
[    0.000000] ACPI: LPIT 0x0000000086DE56D8 000094 (v01 INTEL  SKL      00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE5770 000248 (v02 INTEL  sensrhub 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE59B8 002BAE (v02 INTEL  PtidDevc 00001000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE8568 000C45 (v02 INTEL  Ther_Rvp 00001000 INTL 20120913)
[    0.000000] ACPI: DBGP 0x0000000086DE91B0 000034 (v01 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: DBG2 0x0000000086DE91E8 000054 (v00 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE9240 0006FD (v02 INTEL  xh_rvp08 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE9940 005271 (v02 SaSsdt SaSsdt   00003000 INTL 20120913)
[    0.000000] ACPI: UEFI 0x0000000086DEEBB8 000042 (v01                 00000000      00000000)
[    0.000000] ACPI: SSDT 0x0000000086DEEC00 000E58 (v02 CpuRef CpuSsdt  00003000 INTL 20120913)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x00000004767fffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x4767f8000-0x4767fbfff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009bfff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000007d438fff]
[    0.000000]   node   0: [mem 0x000000007d484000-0x000000007d4c4fff]
[    0.000000]   node   0: [mem 0x000000007db4a000-0x00000000858a7fff]
[    0.000000]   node   0: [mem 0x0000000087fff000-0x0000000087ffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x00000004767fffff]
[    0.000000] On node 0 totalpages: 4176244
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 3995 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 8456 pages used for memmap
[    0.000000]   DMA32 zone: 541145 pages, LIFO batch:31
[    0.000000]   Normal zone: 56736 pages used for memmap
[    0.000000]   Normal zone: 3631104 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x1808
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a701 base: 0xfed00000
[    0.000000] smpboot: Allowing 8 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009c000-0x0009cfff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d439000-0x7d439fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d43a000-0x7d483fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d4c5000-0x7db49fff]
[    0.000000] PM: Registered nosave memory: [mem 0x858a8000-0x86db6fff]
[    0.000000] PM: Registered nosave memory: [mem 0x86db7000-0x86deffff]
[    0.000000] PM: Registered nosave memory: [mem 0x86df0000-0x8774bfff]
[    0.000000] PM: Registered nosave memory: [mem 0x8774c000-0x87ffefff]
[    0.000000] PM: Registered nosave memory: [mem 0x88000000-0x880fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x88100000-0xdfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xe0000000-0xefffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xf0000000-0xfdffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe000000-0xfe010fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe011000-0xfebfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec00000-0xfec00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec01000-0xfedfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xfeffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xff000000-0xffffffff]
[    0.000000] e820: [mem 0x88100000-0xdfffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] percpu: Embedded 36 pages/cpu @ffff880476400000 s108056 r8192 d31208 u262144
[    0.000000] pcpu-alloc: s108056 r8192 d31208 u262144 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 4110967
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend pci=earlydump quiet splash vt.handoff=7
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 16288164K/16704976K available (8091K kernel code, 1445K rwdata, 3668K rodata, 2220K init, 1180K bss, 416812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] 	Build-time adjustment of leaf fanout to 64.
[    0.000000] 	RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=8
[    0.000000] NR_IRQS:16640 nr_irqs:2048 16
[    0.000000] 	Offload RCU callbacks from all CPUs
[    0.000000] 	Offload RCU callbacks from CPUs: 0-7.
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] console [ttyS0] enabled
[    0.000000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635855245 ns
[    0.000000] hpet clockevent registered
[    0.000000] tsc: Detected 3400.000 MHz processor
[    0.000015] Calibrating delay loop (skipped), value calculated using timer frequency.. 6816.00 BogoMIPS (lpj=13632000)
[    0.000016] pid_max: default: 32768 minimum: 301
[    0.000035] ACPI: Core revision 20160831
[    0.049176] ACPI Error: [\_SB_.PCI0.XHC_.RHUB.HS11] Namespace lookup failure, AE_NOT_FOUND (20160831/dswload-210)
[    0.059575] ACPI Exception: AE_NOT_FOUND, During name lookup/catalog (20160831/psobject-227)
[    0.068267] ACPI Exception: AE_NOT_FOUND, (SSDT:xh_rvp08) while loading table (20160831/tbxfload-228)
[    0.089637] ACPI Error: 1 table load failures, 7 successful (20160831/tbxfload-246)
[    0.097470] Security Framework initialized
[    0.097471] Yama: becoming mindful.
[    0.097482] AppArmor: AppArmor initialized
[    0.098215] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes)
[    0.100192] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.101047] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101057] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101429] CPU: Physical Processor ID: 0
[    0.101429] CPU: Processor Core ID: 0
[    0.101433] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[    0.101433] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[    0.101436] mce: CPU supports 10 MCE banks
[    0.101444] CPU0: Thermal monitoring enabled (TM1)
[    0.101458] process: using mwait in idle threads
[    0.101460] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8
[    0.101460] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4
[    0.101715] Freeing SMP alternatives memory: 32K (ffffffff81f96000 - ffffffff81f9e000)
[    0.131902] ftrace: allocating 32207 entries in 126 pages
[    0.140945] smpboot: APIC(0) Converting physical 0 to logical package 0
[    0.140946] smpboot: Max logical packages: 2
[    0.142146] x2apic: IRQ remapping doesn't support X2APIC mode
[    0.145288] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0
[    0.184975] TSC deadline timer enabled
[    0.184980] smpboot: CPU0: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (family: 0x6, model: 0x5e, stepping: 0x3)
[    0.184983] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[    0.185003] ... version:                4
[    0.185003] ... bit width:              48
[    0.185004] ... generic registers:      4
[    0.185004] ... value mask:             0000ffffffffffff
[    0.185004] ... max period:             00007fffffffffff
[    0.185005] ... fixed-purpose events:   3
[    0.185005] ... event mask:             000000070000000f
[    0.185710] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[    0.185820] x86: Booting SMP configuration:
[    0.185821] .... node  #0, CPUs:      #1 #2 #3 #4 #5 #6 #7
[    0.747132] x86: Booted up 1 node, 8 CPUs
[    0.747134] smpboot: Total of 8 processors activated (54535.50 BogoMIPS)
[    0.754036] devtmpfs: initialized
[    0.754148] x86/mm: Memory block size: 128MB
[    0.758694] evm: security.selinux
[    0.758695] evm: security.SMACK64
[    0.758695] evm: security.ima
[    0.758695] evm: security.capability
[    0.758748] PM: Registering ACPI NVS region [mem 0x7d439000-0x7d439fff] (4096 bytes)
[    0.758750] PM: Registering ACPI NVS region [mem 0x86df0000-0x8774bfff] (9814016 bytes)
[    0.759537] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.759583] pinctrl core: initialized pinctrl subsystem
[    0.759817] RTC time:  3:09:25, date: 05/23/17
[    0.759927] NET: Registered protocol family 16
[    0.785755] cpuidle: using governor ladder
[    0.793550] cpuidle: using governor menu
[    0.793641] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.793642] ACPI: bus type PCI registered
[    0.793642] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.793763] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.793764] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[    0.793774] PCI: Using configuration type 1 for base access
[    0.813895] HugeTLB registered 1 GB page size, pre-allocated 0 pages
[    0.813896] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.814197] ACPI: Added _OSI(Module Device)
[    0.814198] ACPI: Added _OSI(Processor Device)
[    0.814198] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.814199] ACPI: Added _OSI(Processor Aggregator Device)
[    0.816499] ACPI: Executed 21 blocks of module-level executable AML code
[    0.835899] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    0.839497] ACPI: Dynamic OEM Table Load:
[    0.839502] ACPI: SSDT 0xFFFF8804625B9000 0006E4 (v02 PmRef  Cpu0Ist  00003000 INTL 20120913)
[    0.840012] ACPI: \_PR_.CPU0: _OSC native thermal LVT Acked
[    0.842698] ACPI: Dynamic OEM Table Load:
[    0.842702] ACPI: SSDT 0xFFFF880464BC8800 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20120913)
[    0.843852] ACPI: Dynamic OEM Table Load:
[    0.843856] ACPI: SSDT 0xFFFF880464042800 0005AA (v02 PmRef  ApIst    00003000 INTL 20120913)
[    0.844843] ACPI: Dynamic OEM Table Load:
[    0.844847] ACPI: SSDT 0xFFFF880462178000 000119 (v02 PmRef  ApCst    00003000 INTL 20120913)
[    0.853361] ACPI: Interpreter enabled
[    0.853387] ACPI: (supports S0 S3 S4 S5)
[    0.853388] ACPI: Using IOAPIC for interrupt routing
[    0.853431] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.856700] ACPI: Power Resource [PG00] (on)
[    0.857464] ACPI: Power Resource [PG01] (on)
[    0.858179] ACPI: Power Resource [PG02] (on)
[    0.862415] ACPI: Power Resource [WRST] (off)
[    0.863136] ACPI: Power Resource [WRST] (off)
[    0.863852] ACPI: Power Resource [WRST] (off)
[    0.864571] ACPI: Power Resource [WRST] (off)
[    0.865291] ACPI: Power Resource [WRST] (off)
[    0.866019] ACPI: Power Resource [WRST] (off)
[    0.866735] ACPI: Power Resource [WRST] (off)
[    0.867466] ACPI: Power Resource [WRST] (off)
[    0.868181] ACPI: Power Resource [WRST] (off)
[    0.868897] ACPI: Power Resource [WRST] (off)
[    0.869614] ACPI: Power Resource [WRST] (off)
[    0.870335] ACPI: Power Resource [WRST] (off)
[    0.871051] ACPI: Power Resource [WRST] (off)
[    0.871774] ACPI: Power Resource [WRST] (off)
[    0.872496] ACPI: Power Resource [WRST] (off)
[    0.873215] ACPI: Power Resource [WRST] (off)
[    0.873931] ACPI: Power Resource [WRST] (off)
[    0.874645] ACPI: Power Resource [WRST] (off)
[    0.875360] ACPI: Power Resource [WRST] (off)
[    0.876074] ACPI: Power Resource [WRST] (off)
[    0.890607] ACPI: Power Resource [FN00] (off)
[    0.890767] ACPI: Power Resource [FN01] (off)
[    0.890928] ACPI: Power Resource [FN02] (off)
[    0.891086] ACPI: Power Resource [FN03] (off)
[    0.891244] ACPI: Power Resource [FN04] (off)
[    0.893204] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.893208] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.893287] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[    0.894651] PCI host bridge to bus 0000:00
[    0.894652] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.894654] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.894655] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.894656] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.894657] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.894658] pci_bus 0000:00: root bus resource [bus 00-fe]
[    0.894664] pci 0000:00:00.0: [8086:191f] type 00 class 0x060000
[    0.895205] pci 0000:00:14.0: [8086:a12f] type 00 class 0x0c0330
[    0.895221] pci 0000:00:14.0: reg 0x10: [mem 0xdff30000-0xdff3ffff 64bit]
[    0.895277] pci 0000:00:14.0: PME# supported from D3hot D3cold
[    0.895495] pci 0000:00:14.0: System wakeup disabled by ACPI
[    0.895580] pci 0000:00:16.0: [8086:a13a] type 00 class 0x078000
[    0.895593] pci 0000:00:16.0: reg 0x10: [mem 0xdff4d000-0xdff4dfff 64bit]
[    0.895639] pci 0000:00:16.0: PME# supported from D3hot
[    0.895901] pci 0000:00:17.0: [8086:a102] type 00 class 0x010601
[    0.895912] pci 0000:00:17.0: reg 0x10: [mem 0xdff48000-0xdff49fff]
[    0.895918] pci 0000:00:17.0: reg 0x14: [mem 0xdff4c000-0xdff4c0ff]
[    0.895923] pci 0000:00:17.0: reg 0x18: [io  0xf050-0xf057]
[    0.895929] pci 0000:00:17.0: reg 0x1c: [io  0xf040-0xf043]
[    0.895934] pci 0000:00:17.0: reg 0x20: [io  0xf020-0xf03f]
[    0.895939] pci 0000:00:17.0: reg 0x24: [mem 0xdff4b000-0xdff4b7ff]
[    0.895972] pci 0000:00:17.0: PME# supported from D3hot
[    0.896230] pci 0000:00:1b.0: [8086:a167] type 01 class 0x060400
[    0.896278] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.896547] pci 0000:00:1b.0: System wakeup disabled by ACPI
[    0.896630] pci 0000:00:1c.0: [8086:a110] type 01 class 0x060400
[    0.896679] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.896946] pci 0000:00:1c.0: System wakeup disabled by ACPI
[    0.897007] pci 0000:00:1c.2: [8086:a112] type 01 class 0x060400
[    0.897056] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
[    0.897323] pci 0000:00:1c.2: System wakeup disabled by ACPI
[    0.897399] pci 0000:00:1d.0: [8086:a118] type 01 class 0x060400
[    0.897449] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[    0.897711] pci 0000:00:1d.0: System wakeup disabled by ACPI
[    0.897797] pci 0000:00:1f.0: [8086:a145] type 00 class 0x060100
[    0.898127] pci 0000:00:1f.2: [8086:a121] type 00 class 0x058000
[    0.898137] pci 0000:00:1f.2: reg 0x10: [mem 0xdff44000-0xdff47fff]
[    0.898418] pci 0000:00:1f.3: [8086:a170] type 00 class 0x040300
[    0.898438] pci 0000:00:1f.3: reg 0x10: [mem 0xdff40000-0xdff43fff 64bit]
[    0.898465] pci 0000:00:1f.3: reg 0x20: [mem 0xdff20000-0xdff2ffff 64bit]
[    0.898510] pci 0000:00:1f.3: PME# supported from D3hot D3cold
[    0.898780] pci 0000:00:1f.3: System wakeup disabled by ACPI
[    0.898846] pci 0000:00:1f.4: [8086:a123] type 00 class 0x0c0500
[    0.898893] pci 0000:00:1f.4: reg 0x10: [mem 0xdff4a000-0xdff4a0ff 64bit]
[    0.898962] pci 0000:00:1f.4: reg 0x20: [io  0xf000-0xf01f]
[    0.899275] pci 0000:00:1f.6: [8086:15b8] type 00 class 0x020000
[    0.899294] pci 0000:00:1f.6: reg 0x10: [mem 0xdff00000-0xdff1ffff]
[    0.899395] pci 0000:00:1f.6: PME# supported from D0 D3hot D3cold
[    0.899600] pci 0000:00:1f.6: System wakeup disabled by ACPI
[    0.899769] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.899784] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.899794] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.899800] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.899807] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.899813] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.899877] pci 0000:01:00.0: supports D1 D2
[    0.899877] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.899911] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.899912] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.899921] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.899921] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.899933] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.899933] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.899985] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.909949] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.909954] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.909959] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.909967] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.909984] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
[    0.910106] pci 0000:02:00.0: [1b21:1242] type 00 class 0x0c0330
[    0.910126] pci 0000:02:00.0: reg 0x10: [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.910232] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    0.910285] pci 0000:02:00.0: System wakeup disabled by ACPI
[    0.921964] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.921972] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.922123] pci 0000:03:00.0: [1b21:1080] type 01 class 0x060400
[    0.922240] pci 0000:03:00.0: supports D1 D2
[    0.922240] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.922286] pci 0000:03:00.0: System wakeup disabled by ACPI
[    0.933966] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.934115] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.934264] acpiphp: Slot [1] registered
[    0.934267] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.937083] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[    0.937197] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.937309] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 11 12 14 *15)
[    0.937420] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.937531] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.937643] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.937754] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.937865] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *10 11 12 14 15)
[    0.938691] ACPI: Enabled 6 GPEs in block 00 to 7F
[    0.938968] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.938969] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.938969] vgaarb: loaded
[    0.938970] vgaarb: bridge control possible 0000:01:00.0
[    0.939235] SCSI subsystem initialized
[    0.939288] libata version 3.00 loaded.
[    0.939318] ACPI: bus type USB registered
[    0.939348] usbcore: registered new interface driver usbfs
[    0.939363] usbcore: registered new interface driver hub
[    0.939384] usbcore: registered new device driver usb
[    0.939516] PCI: Using ACPI for IRQ routing
[    0.967348] PCI: pci_cache_line_size set to 64 bytes
[    0.967385] e820: reserve RAM buffer [mem 0x0009c800-0x0009ffff]
[    0.967386] e820: reserve RAM buffer [mem 0x7d439000-0x7fffffff]
[    0.967387] e820: reserve RAM buffer [mem 0x7d4c5000-0x7fffffff]
[    0.967388] e820: reserve RAM buffer [mem 0x858a8000-0x87ffffff]
[    0.967390] e820: reserve RAM buffer [mem 0x476800000-0x477ffffff]
[    0.967546] NetLabel: Initializing
[    0.967547] NetLabel:  domain hash size = 128
[    0.967547] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.967565] NetLabel:  unlabeled traffic allowed by default
[    0.967695] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    0.967698] hpet0: 8 comparators, 64-bit 24.000000 MHz counter
[    0.969739] clocksource: Switched to clocksource hpet
[    0.979775] VFS: Disk quotas dquot_6.6.0
[    0.979810] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.979940] AppArmor: AppArmor Filesystem Enabled
[    0.979994] pnp: PnP ACPI init
[    0.980278] system 00:00: [io  0x0290-0x029f] has been reserved
[    0.980280] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.980751] pnp 00:01: [dma 0 disabled]
[    0.980815] pnp 00:01: Plug and Play ACPI device, IDs PNP0501 (active)
[    0.981055] system 00:02: [io  0x0680-0x069f] has been reserved
[    0.981057] system 00:02: [io  0xffff] has been reserved
[    0.981058] system 00:02: [io  0xffff] has been reserved
[    0.981060] system 00:02: [io  0xffff] has been reserved
[    0.981061] system 00:02: [io  0x1800-0x18fe] has been reserved
[    0.981063] system 00:02: [io  0x164e-0x164f] has been reserved
[    0.981064] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.981173] system 00:03: [io  0x0800-0x087f] has been reserved
[    0.981174] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.981213] pnp 00:04: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.981283] system 00:05: [io  0x1854-0x1857] has been reserved
[    0.981284] system 00:05: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.981675] system 00:06: [mem 0xfed10000-0xfed17fff] has been reserved
[    0.981677] system 00:06: [mem 0xfed18000-0xfed18fff] has been reserved
[    0.981678] system 00:06: [mem 0xfed19000-0xfed19fff] has been reserved
[    0.981679] system 00:06: [mem 0xe0000000-0xefffffff] has been reserved
[    0.981681] system 00:06: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.981682] system 00:06: [mem 0xfed90000-0xfed93fff] has been reserved
[    0.981684] system 00:06: [mem 0xfed45000-0xfed8ffff] has been reserved
[    0.981686] system 00:06: [mem 0xff000000-0xffffffff] has been reserved
[    0.981688] system 00:06: [mem 0xfee00000-0xfeefffff] could not be reserved
[    0.981689] system 00:06: [mem 0xdffc0000-0xdffdffff] has been reserved
[    0.981690] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.981791] system 00:07: [mem 0xfd000000-0xfdabffff] has been reserved
[    0.981793] system 00:07: [mem 0xfdad0000-0xfdadffff] has been reserved
[    0.981794] system 00:07: [mem 0xfdb00000-0xfdffffff] has been reserved
[    0.981796] system 00:07: [mem 0xfe000000-0xfe01ffff] could not be reserved
[    0.981798] system 00:07: [mem 0xfe036000-0xfe03bfff] has been reserved
[    0.981800] system 00:07: [mem 0xfe03d000-0xfe3fffff] has been reserved
[    0.981801] system 00:07: [mem 0xfe410000-0xfe7fffff] has been reserved
[    0.981803] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.983536] system 00:08: [mem 0xfdaf0000-0xfdafffff] has been reserved
[    0.983538] system 00:08: [mem 0xfdae0000-0xfdaeffff] has been reserved
[    0.983540] system 00:08: [mem 0xfdac0000-0xfdacffff] has been reserved
[    0.983541] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.984902] pnp: PnP ACPI: found 9 devices
[    0.992842] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.992845] pci_bus 0000:00: max bus depth: 2 pci_try_num: 3
[    0.992875] pci 0000:00:1d.0: BAR 14: assigned [mem 0x88800000-0x889fffff]
[    0.992878] pci 0000:00:1d.0: BAR 15: assigned [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.992879] pci 0000:00:1d.0: BAR 13: assigned [io  0x2000-0x2fff]
[    0.992884] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.992885] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.992886] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.992887] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.992888] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.992889] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.992890] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.992892] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.992894] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.992896] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.992899] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.992901] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.992905] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.992918] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.992924] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.992925] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.992928] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.992929] pci 0000:00:1d.0:   bridge window [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.992933] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.992933] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.992934] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.992934] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.992935] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.992936] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.992937] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.992937] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.992938] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.992969] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.992970] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.992971] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.992998] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.993000] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.993002] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
[    0.993006] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.993008] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.993012] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.993025] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.993031] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.993032] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.993035] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.993036] pci 0000:00:1d.0:   bridge window [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.993040] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.993040] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.993040] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.993041] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.993042] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.993043] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.993044] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.993044] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.993046] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.993047] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.993057] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.993058] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.993080] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.993084] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.993085] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.993086] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.993087] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.993088] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.993088] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.993091] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.993091] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.993092] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.993093] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.993095] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.993098] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.993098] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.993099] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.993100] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.993102] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.993104] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.993105] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.993112] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.993113] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.993113] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.993114] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.993115] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.993116] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.993117] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.993118] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.993124] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.993127] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.993133] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.993137] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.993138] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.993139] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.993146] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.993148] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.993151] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.993157] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.993158] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.993160] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.993161] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.993163] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
[    0.993168] pci 0000:02:00.0: BAR 0: assigned [mem 0x8ac00000-0x8ac07fff 64bit]
[    0.993177] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.993179] pci 0000:00:1c.0:   bridge window [mem 0x8ac00000-0x8acfffff]
[    0.993183] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.993196] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.993202] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.993203] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.993205] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.993207] pci 0000:00:1d.0:   bridge window [mem 0x8ad00000-0x8b0fffff 64bit pref]
[    0.993210] pci_bus 0000:00: Automatically enabled pci realloc, if you have problem, try booting with pci=realloc=off
[    0.993212] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]
[    0.993212] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]
[    0.993213] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]
[    0.993214] pci_bus 0000:00: resource 7 [mem 0x88800000-0xdfffffff window]
[    0.993214] pci_bus 0000:00: resource 8 [mem 0xfd000000-0xfe7fffff window]
[    0.993215] pci_bus 0000:01: resource 0 [io  0xe000-0xefff]
[    0.993215] pci_bus 0000:01: resource 1 [mem 0x8b400000-0x8f7fffff]
[    0.993216] pci_bus 0000:02: resource 1 [mem 0x8ac00000-0x8acfffff]
[    0.993217] pci_bus 0000:05: resource 0 [io  0x2000-0x2fff]
[    0.993217] pci_bus 0000:05: resource 1 [mem 0x88800000-0x889fffff]
[    0.993218] pci_bus 0000:05: resource 2 [mem 0x8ad00000-0x8b0fffff 64bit pref]
[    0.993408] NET: Registered protocol family 2
[    0.993609] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.993728] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[    0.993823] TCP: Hash tables configured (established 131072 bind 65536)
[    0.993845] UDP hash table entries: 8192 (order: 6, 262144 bytes)
[    0.993874] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes)
[    0.993964] NET: Registered protocol family 1
[    0.994633] pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    0.995308] PCI: CLS 0 bytes, default 64
[    0.995353] Trying to unpack rootfs image as initramfs...
[    1.722933] Freeing initrd memory: 70180K (ffff88002f6de000 - ffff880033b67000)
[    1.722935] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    1.722937] software IO TLB [mem 0x818a8000-0x858a8000] (64MB) mapped at [ffff8800818a8000-ffff8800858a7fff]
[    1.723156] RAPL PMU: API unit is 2^-32 Joules, 5 fixed counters, 655360 ms ovfl timer
[    1.723157] RAPL PMU: hw unit of domain pp0-core 2^-14 Joules
[    1.723157] RAPL PMU: hw unit of domain package 2^-14 Joules
[    1.723157] RAPL PMU: hw unit of domain dram 2^-14 Joules
[    1.723158] RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules
[    1.723158] RAPL PMU: hw unit of domain psys 2^-14 Joules
[    1.723731] Scanning for low memory corruption every 60 seconds
[    1.724315] futex hash table entries: 2048 (order: 5, 131072 bytes)
[    1.724341] audit: initializing netlink subsys (disabled)
[    1.724358] audit: type=2000 audit(1495508965.692:1): initialized
[    1.725131] Initialise system trusted keyrings
[    1.725270] workingset: timestamp_bits=40 max_order=22 bucket_order=0
[    1.729709] fuse init (API version 7.26)
[    1.730979] Key type asymmetric registered
[    1.730980] Asymmetric key parser 'x509' registered
[    1.731041] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    1.731094] io scheduler noop registered
[    1.731095] io scheduler deadline registered (default)
[    1.731102] io scheduler cfq registered
[    1.731590] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    1.731597] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    1.731638] efifb: probing for efifb
[    1.731641] efifb: framebuffer at 0xa0000, using 64k, total 64k
[    1.731641] efifb: mode is 640x480x1, linelength=80, pages=1
[    1.731642] efifb: scrolling: redraw
[    1.731642] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.732374] Console: switching to colour frame buffer device 80x30
[    1.732982] fb0: EFI VGA frame buffer device
[    1.732990] intel_idle: MWAIT substates: 0x142120
[    1.732991] intel_idle: v0.4.1 model 0x5E
[    1.733723] intel_idle: lapic_timer_reliable_states 0xffffffff
[    1.733734] ipmi message handler version 39.2
[    1.733864] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0
[    1.733866] ACPI: Sleep Button [SLPB]
[    1.733927] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[    1.733929] ACPI: Power Button [PWRB]
[    1.733990] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[    1.733992] ACPI: Power Button [PWRF]
[    1.735745] thermal LNXTHERM:00: registered as thermal_zone0
[    1.735746] ACPI: Thermal Zone [TZ00] (28 C)
[    1.736097] thermal LNXTHERM:01: registered as thermal_zone1
[    1.736098] ACPI: Thermal Zone [TZ01] (30 C)
[    1.736129] GHES: HEST is not enabled!
[    1.736269] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    1.756811] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    1.759871] Linux agpgart interface v0.103
[    1.766022] brd: module loaded
[    1.769313] loop: module loaded
[    1.769764] libphy: Fixed MDIO Bus: probed
[    1.770200] tun: Universal TUN/TAP device driver, 1.6
[    1.770201] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
[    1.770297] PPP generic driver version 2.4.2
[    1.770387] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.770390] ehci-pci: EHCI PCI platform driver
[    1.770403] ehci-platform: EHCI generic platform driver
[    1.770415] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.770417] ohci-pci: OHCI PCI platform driver
[    1.770428] ohci-platform: OHCI generic platform driver
[    1.770436] uhci_hcd: USB Universal Host Controller Interface driver
[    1.770631] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.770637] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[    1.771719] xhci_hcd 0000:00:14.0: hcc params 0x200077c1 hci version 0x100 quirks 0x00109810
[    1.771723] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[    1.771837] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.771838] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.771839] usb usb1: Product: xHCI Host Controller
[    1.771839] usb usb1: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.771840] usb usb1: SerialNumber: 0000:00:14.0
[    1.772062] hub 1-0:1.0: USB hub found
[    1.772080] hub 1-0:1.0: 16 ports detected
[    1.786880] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.786883] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 2
[    1.786926] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    1.786927] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.786927] usb usb2: Product: xHCI Host Controller
[    1.786928] usb usb2: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.786928] usb usb2: SerialNumber: 0000:00:14.0
[    1.787132] hub 2-0:1.0: USB hub found
[    1.787146] hub 2-0:1.0: 10 ports detected
[    1.796782] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.796788] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 3
[    1.855549] xhci_hcd 0000:02:00.0: hcc params 0x0200eec1 hci version 0x110 quirks 0x00000010
[    1.855867] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    1.855868] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.855868] usb usb3: Product: xHCI Host Controller
[    1.855869] usb usb3: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.855869] usb usb3: SerialNumber: 0000:02:00.0
[    1.856068] hub 3-0:1.0: USB hub found
[    1.856075] hub 3-0:1.0: 2 ports detected
[    1.856196] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.856199] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 4
[    1.856228] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.856252] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003
[    1.856253] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.856253] usb usb4: Product: xHCI Host Controller
[    1.856254] usb usb4: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.856254] usb usb4: SerialNumber: 0000:02:00.0
[    1.856449] hub 4-0:1.0: USB hub found
[    1.856457] hub 4-0:1.0: 2 ports detected
[    1.856615] i8042: PNP: No PS/2 controller found. Probing ports directly.
[    1.859955] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.859958] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.860246] mousedev: PS/2 mouse device common for all mice
[    1.860616] rtc_cmos 00:04: RTC can wake from S4
[    1.861033] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0
[    1.861113] rtc_cmos 00:04: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[    1.861185] device-mapper: uevent: version 1.0.3
[    1.861338] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: dm-devel@redhat.com
[    1.861340] intel_pstate: Intel P-state driver initializing
[    1.862180] intel_pstate: HWP enabled
[    1.862594] ledtrig-cpu: registered to indicate activity on CPUs
[    1.862884] NET: Registered protocol family 10
[    1.863303] NET: Registered protocol family 17
[    1.863309] Key type dns_resolver registered
[    1.863832] microcode: sig=0x506e3, pf=0x2, revision=0x33
[    1.864201] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[    1.864586] registered taskstats version 1
[    1.864587] Loading compiled-in X.509 certificates
[    1.867068] Loaded X.509 cert 'Build time autogenerated kernel key: 425e568c95731e69b073bb62214af700479a67a7'
[    1.867273] kmemleak: Kernel memory leak detector initialized
[    1.867306] kmemleak: Automatic memory scanning thread started
[    1.869269] Key type trusted registered
[    1.873218] Key type encrypted registered
[    1.873220] AppArmor: AppArmor sha1 policy hashing enabled
[    1.873221] ima: No TPM chip found, activating TPM-bypass!
[    1.873238] evm: HMAC attrs: 0x1
[    1.874566]   Magic number: 1:653:159
[    1.874607] acpi device:26: hash matches
[    1.874781] rtc_cmos 00:04: setting system clock to 2017-05-23 03:09:26 UTC (1495508966)
[    1.875067] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    1.875067] EDD information not available.
[    1.875199] PM: Hibernation image not present or could not be loaded.
[    1.875981] Freeing unused kernel memory: 2220K (ffffffff81d6b000 - ffffffff81f96000)
[    1.875982] Write protecting the kernel read-only data: 12288k
[    1.876184] Freeing unused kernel memory: 84K (ffff8800017eb000 - ffff880001800000)
[    1.876809] Freeing unused kernel memory: 428K (ffff880001b95000 - ffff880001c00000)
[    1.885819] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.885884] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.885890] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.886260] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.886285] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.887446] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.887489] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.888055] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.888096] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.888136] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.917901] hid: module verification failed: signature and/or required key missing - tainting kernel
[    1.918301] hidraw: raw HID events driver (C) Jiri Kosina
[    1.922762] wmi: Mapper loaded
[    1.938531] ahci 0000:00:17.0: version 3.0
[    1.940491] pps_core: LinuxPPS API ver. 1 registered
[    1.940491] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.940806] PTP clock support registered
[    1.941521] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.941521] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    1.949165] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 6 ports 6 Gbps 0x3f impl SATA mode
[    1.949166] ahci 0000:00:17.0: flags: 64bit ncq sntf led clo only pio slum part ems deso sadm sds apst 
[    2.007796] scsi host0: ahci
[    2.008128] scsi host1: ahci
[    2.008456] scsi host2: ahci
[    2.008778] scsi host3: ahci
[    2.009104] scsi host4: ahci
[    2.009432] scsi host5: ahci
[    2.009551] ata1: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b100 irq 129
[    2.009556] ata2: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b180 irq 129
[    2.009557] ata3: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b200 irq 129
[    2.009558] ata4: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b280 irq 129
[    2.009559] ata5: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b300 irq 129
[    2.009560] ata6: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b380 irq 129
[    2.010176] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    2.113870] usb 1-10: new full-speed USB device number 2 using xhci_hcd
[    2.245903] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[    2.256463] usb 1-10: New USB device found, idVendor=046d, idProduct=c534
[    2.256464] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.256465] usb 1-10: Product: USB Receiver
[    2.256465] usb 1-10: Manufacturer: Logitech
[    2.261440] usbcore: registered new interface driver usbhid
[    2.261440] usbhid: USB HID core driver
[    2.262335] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/0003:046D:C534.0001/input/input6
[    2.322250] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-10/input0
[    2.322431] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/0003:046D:C534.0002/input/input7
[    2.326537] CPU: 6 PID: 214 Comm: scsi_eh_5 Tainted: G            E   4.9.0-custom #2
[    2.326538] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326538]  ffffc9000211fae8 ffffffff813c2d3f ffff880452b6de80 ffff880452b6e2b0
[    2.326540]  ffffc9000211fb10 ffffffff815a7226 ffffc9000211fb10 0000000000000286
[    2.326541]  ffffc90000029380 ffffc9000211fb30 ffffffffa003f634 ffff880452b6de80
[    2.326543] Call Trace:
[    2.326546]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326548]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326550]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326551]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326553]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326555]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326557]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326558]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326559]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326561]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326562]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326563]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326565]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326566]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326567]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326568]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326570]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326572]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326573]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326574]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326575]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326577]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326578]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326579]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326580]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326581]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326582]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326584]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326590] ata6: SATA link down (SStatus 4 SControl 300)
[    2.326611] CPU: 2 PID: 204 Comm: scsi_eh_0 Tainted: G            E   4.9.0-custom #2
[    2.326611] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326612]  ffffc90001ef3ae8 ffffffff813c2d3f ffff880452b59e80 ffff880452b5a2b0
[    2.326613]  ffffc90001ef3b10 ffffffff815a7226 ffffc90001ef3b10 0000000000000286
[    2.326614]  ffffc90000029100 ffffc90001ef3b30 ffffffffa003f634 ffff880452b59e80
[    2.326615] Call Trace:
[    2.326617]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326618]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326619]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326620]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326621]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326622]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326623]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326624]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326625]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326626]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326627]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326628]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326629]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326630]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326631]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326632]  [<ffffffff813cc32a>] ? put_dec+0x1a/0x80
[    2.326633]  [<ffffffff813cc65e>] ? number+0x2ce/0x300
[    2.326634]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326635]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326636]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326637]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326638]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326639]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326640]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326641]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326642]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326643]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326644]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326645]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326646]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326647]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326650] ata1: SATA link down (SStatus 4 SControl 300)
[    2.326670] CPU: 1 PID: 206 Comm: scsi_eh_1 Tainted: G            E   4.9.0-custom #2
[    2.326671] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326671]  ffffc90001f3bae8 ffffffff813c2d3f ffff880452b5de80 ffff880452b5e2b0
[    2.326673]  ffffc90001f3bb10 ffffffff815a7226 ffffc90001f3bb10 0000000000000286
[    2.326674]  ffffc90000029180 ffffc90001f3bb30 ffffffffa003f634 ffff880452b5de80
[    2.326675] Call Trace:
[    2.326677]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326678]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326680]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326681]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326683]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326684]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326686]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326687]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326688]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326689]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326691]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326692]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326693]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326694]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326695]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326696]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326698]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326699]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326700]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326701]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326703]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326704]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326705]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326706]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326707]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326708]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326709]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326710]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326713] ata2: SATA link down (SStatus 4 SControl 300)
[    2.326746] CPU: 5 PID: 212 Comm: scsi_eh_4 Tainted: G            E   4.9.0-custom #2
[    2.326747] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326747]  ffffc90002003ae8 ffffffff813c2d3f ffff880452b69e80 ffff880452b6a2b0
[    2.326748]  ffffc90002003b10 ffffffff815a7226 ffffc90002003b10 0000000000000286
[    2.326749]  ffffc90000029300 ffffc90002003b30 ffffffffa003f634 ffff880452b69e80
[    2.326750] Call Trace:
[    2.326751]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326752]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326753]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326754]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326756]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326756]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326757]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326758]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326759]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326760]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326761]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326762]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326763]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326764]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326765]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326766]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326767]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326768]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326769]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326770]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326771]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326772]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326773]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326774]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326775]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326776]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326777]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326778]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326781] ata5: SATA link down (SStatus 4 SControl 300)
[    2.326803] CPU: 4 PID: 208 Comm: scsi_eh_2 Tainted: G            E   4.9.0-custom #2
[    2.326804] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326804]  ffffc90001f4bae8 ffffffff813c2d3f ffff880452b61e80 ffff880452b622b0
[    2.326806]  ffffc90001f4bb10 ffffffff815a7226 ffffc90001f4bb10 0000000000000286
[    2.326807]  ffffc90000029200 ffffc90001f4bb30 ffffffffa003f634 ffff880452b61e80
[    2.326808] Call Trace:
[    2.326810]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326811]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326813]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326814]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326816]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326817]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326818]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326820]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326821]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326822]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326824]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326825]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326826]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326839]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326840]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326841]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326842]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326843]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326845]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326846]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326847]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326848]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326849]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326850]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326851]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326852]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326853]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326854]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326857] ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.326873] CPU: 0 PID: 210 Comm: scsi_eh_3 Tainted: G            E   4.9.0-custom #2
[    2.326874] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.326874]  ffffc90001febae8 ffffffff813c2d3f ffff880452b65e80 ffff880452b662b0
[    2.326875]  ffffc90001febb10 ffffffff815a7226 ffffc90001febb10 0000000000000286
[    2.326876]  ffffc90000029280 ffffc90001febb30 ffffffffa003f634 ffff880452b65e80
[    2.326877] Call Trace:
[    2.326879]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.326879]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.326881]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.326882]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.326883]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326884]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326885]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326886]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326886]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326887]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326888]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.326889]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.326890]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.326891]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.326892]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.326893]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.326894]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.326895]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.326896]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.326897]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.326898]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.326899]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326900]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.326901]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326902]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.326903]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.326904]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.326905]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.326908] ata4: SATA link down (SStatus 4 SControl 300)
[    2.327973] ata3.00: ATA-8: ST3500413AS, JC45, max UDMA/133
[    2.327974] ata3.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.329553] ata3.00: configured for UDMA/133
[    2.330033] scsi 2:0:0:0: Direct-Access     ATA      ST3500413AS      JC45 PQ: 0 ANSI: 5
[    2.330224] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 30:5a:3a:e0:7f:4d
[    2.330225] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[    2.330291] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[    2.331018] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[    2.382480] hid-generic 0003:046D:C534.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-10/input1
[    2.386345] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[    2.386374] sd 2:0:0:0: Attached scsi generic sg0 type 0
[    2.386556] sd 2:0:0:0: [sda] Write Protect is off
[    2.386557] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.386708] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.415045]  sda: sda1 sda2 < sda5 >
[    2.416527] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.745882] tsc: Refined TSC clocksource calibration: 3407.997 MHz
[    2.745886] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x311fd171fc9, max_idle_ns: 440795303639 ns
[    2.761152] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[    2.833209] random: fast init done
[    3.697270] systemd[1]: systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
[    3.697402] systemd[1]: Detected architecture x86-64.
[    3.703893] systemd[1]: Set hostname to <jenkins-MS-7984>.
[    3.769934] clocksource: Switched to clocksource tsc
[    4.353732] systemd[1]: Listening on Journal Socket (/dev/log).
[    4.353820] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    4.353876] systemd[1]: Listening on Journal Audit Socket.
[    4.353899] systemd[1]: Listening on udev Control Socket.
[    4.353913] systemd[1]: Listening on udev Kernel Socket.
[    4.353938] systemd[1]: Listening on Journal Socket.
[    4.353947] systemd[1]: PNFS blkmaping enablement. is not active.
[    4.754407] random: crng init done
[    5.232246] lp: driver loaded but no devices found
[    5.282967] RPC: Registered named UNIX socket transport module.
[    5.282967] RPC: Registered udp transport module.
[    5.282968] RPC: Registered tcp transport module.
[    5.282968] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    5.314923] ppdev: user-space parallel port driver
[    5.757387] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
[    5.951868] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[    6.210363] systemd-journald[291]: Received request to flush runtime journal from PID 1
[    6.395294] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    6.677090] mei_me 0000:00:16.0: enabling device (0000 -> 0002)
[    7.194322] AVX2 version of gcm_enc/dec engaged.
[    7.194322] AES CTR mode by8 optimization enabled
[    7.802905] intel_rapl: Found RAPL domain package
[    7.802906] intel_rapl: Found RAPL domain core
[    7.802907] intel_rapl: Found RAPL domain dram
[    7.992002] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC892: line_outs=3 (0x14/0x15/0x16/0x0/0x0) type:line
[    7.992003] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.992004] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x1b/0x0/0x0/0x0/0x0)
[    7.992005] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    7.992005] snd_hda_codec_realtek hdaudioC0D0:    dig-out=0x11/0x1e
[    7.992006] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    7.992006] snd_hda_codec_realtek hdaudioC0D0:      Front Mic=0x19
[    7.992007] snd_hda_codec_realtek hdaudioC0D0:      Rear Mic=0x18
[    7.992008] snd_hda_codec_realtek hdaudioC0D0:      Line=0x1a
[    8.004083] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input8
[    8.004191] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input9
[    8.004295] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1f.3/sound/card0/input10
[    8.004404] input: HDA Intel PCH Line Out Front as /devices/pci0000:00/0000:00:1f.3/sound/card0/input11
[    8.004515] input: HDA Intel PCH Line Out Surround as /devices/pci0000:00/0000:00:1f.3/sound/card0/input12
[    8.004621] input: HDA Intel PCH Line Out CLFE as /devices/pci0000:00/0000:00:1f.3/sound/card0/input13
[    8.004725] input: HDA Intel PCH Front Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input14
[    9.283193] asus_wmi: ASUS WMI generic driver loaded
[    9.366216] audit: type=1400 audit(1495508973.987:2): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine" pid=701 comm="apparmor_parser"
[    9.366235] audit: type=1400 audit(1495508973.987:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=701 comm="apparmor_parser"
[    9.367373] audit: type=1400 audit(1495508973.987:4): apparmor="STATUS" operation="profile_load" name="/usr/sbin/ippusbxd" pid=704 comm="apparmor_parser"
[    9.387604] asus_wmi: Initialization: 0x0
[    9.387681] asus_wmi: BIOS WMI version: 0.9
[    9.387810] asus_wmi: SFUN value: 0x0
[    9.388864] input: Eee PC WMI hotkeys as /devices/platform/eeepc-wmi/input/input15
[    9.389111] asus_wmi: Number of fans: 1
[    9.429704] audit: type=1400 audit(1495508974.051:5): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=697 comm="apparmor_parser"
[    9.429710] audit: type=1400 audit(1495508974.051:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=697 comm="apparmor_parser"
[    9.429714] audit: type=1400 audit(1495508974.051:7): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=697 comm="apparmor_parser"
[    9.429718] audit: type=1400 audit(1495508974.051:8): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=697 comm="apparmor_parser"
[    9.431296] audit: type=1400 audit(1495508974.051:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=703 comm="apparmor_parser"
[    9.431302] audit: type=1400 audit(1495508974.051:10): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=703 comm="apparmor_parser"
[    9.431319] audit: type=1400 audit(1495508974.051:11): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd//third_party" pid=703 comm="apparmor_parser"
[   10.025664] Adding 8348668k swap on /dev/sda5.  Priority:-1 extents:1 across:8348668k FS
[   13.998301] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[   14.017392] NFSD: starting 90-second grace period (net ffffffff81d06400)
[   14.637236] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   14.850054] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   17.689488] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[   17.689490] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
[   17.689534] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s31f6: link becomes ready
===================================================================================================
root@jenkins-MS-7984:~# lspci -s 01:00.0 -vvv 
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150] (prog-if 00 [VGA controller])
	Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150]
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 11
	Region 0: Memory at <ignored> (64-bit, prefetchable)
	Region 2: Memory at 8b400000 (64-bit, prefetchable) [size=2M]
	Region 4: I/O ports at e000 [size=256]
	Region 5: Memory at 8b600000 (32-bit, non-prefetchable) [size=256K]
	Expansion ROM at 000c0000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 256 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 8GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
			 EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
	Capabilities: [a0] MSI: Enable- Count=1/4 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
	Capabilities: [200 v1] #15
	Capabilities: [270 v1] #19
	Capabilities: [2b0 v1] Address Translation Service (ATS)
		ATSCap:	Invalidate Queue Depth: 00
		ATSCtl:	Enable-, Smallest Translation Unit: 00
	Capabilities: [2c0 v1] #13
	Capabilities: [2d0 v1] #1b
	Capabilities: [328 v1] Alternative Routing-ID Interpretation (ARI)
		ARICap:	MFVC- ACS-, Next Function: 0
		ARICtl:	MFVC- ACS-, Function Group: 0
	Capabilities: [330 v1] Single Root I/O Virtualization (SR-IOV)
		IOVCap:	Migration-, Interrupt Message Number: 000
		IOVCtl:	Enable- Migration- Interrupt- MSE- ARIHierarchy+
		IOVSta:	Migration-
		Initial VFs: 8, Total VFs: 8, Number of VFs: 0, Function Dependency Link: 00
		VF offset: 256, stride: 1, Device ID: 692f
		Supported Page Size: 00000553, System Page Size: 00000001
		Region 0: Memory at 0000000000000000 (64-bit, prefetchable)
		Region 2: Memory at 000000008d800000 (64-bit, prefetchable)
		Region 5: Memory at 8b800000 (32-bit, non-prefetchable)
		VF Migration: offset: 00000000, BIR: 0
	Capabilities: [400 v1] Vendor Specific Information: ID=0002 Rev=1 Len=070 <?>
	Kernel modules: amdgpu


^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-12  2:50 ` Cheng, Collins
@ 2017-05-23 12:15   ` Deucher, Alexander
  -1 siblings, 0 replies; 43+ messages in thread
From: Deucher, Alexander @ 2017-05-23 12:15 UTC (permalink / raw)
  To: Cheng, Collins, Bjorn Helgaas, linux-pci, linux-kernel; +Cc: Zytaruk, Kelly

> -----Original Message-----
> From: Cheng, Collins
> Sent: Thursday, May 11, 2017 10:51 PM
> To: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org
> Cc: Deucher, Alexander; Zytaruk, Kelly
> Subject: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
> incapable platform
> 
> Hi Helgaas,
> 
> Some AMD GPUs have hardware support for graphics SR-IOV.
> If the SR-IOV capable GPU is plugged into the SR-IOV incapable
> platform. It would cause a problem on PCI resource allocation in
> current Linux kernel.
> 
> Therefore in order to allow the PF (Physical Function) device of
> SR-IOV capable GPU to work on the SR-IOV incapable platform,
> it is required to verify conditions for initializing BAR resources
> on AMD SR-IOV capable GPUs.
> 
> If the device is an AMD graphics device and it supports
> SR-IOV it will require a large amount of resources.
> Before calling sriov_init() must ensure that the system
> BIOS also supports SR-IOV and that system BIOS has been
> able to allocate enough resources.
> If the VF BARs are zero then the system BIOS does not
> support SR-IOV or it could not allocate the resources
> and this platform will not support AMD graphics SR-IOV.
> Therefore do not call sriov_init().
> If the system BIOS does support SR-IOV then the VF BARs
> will be properly initialized to non-zero values.
> 
> Below is the patch against to Kernel 4.8 & 4.9. Please review.

For upstream, the patch should be against Linus' master or the Bjorn's pci-next tree.

Alex

> 
> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
> quirks.c are for specific devices and one or more device ID are defined
> for the specific devices. However my patch is for all AMD SR-IOV
> capable GPUs, that includes all existing and future AMD server GPUs.
> So it doesn't seem like a good fit to put the fix in quirks.c.
> 
> 
> 
> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> ---
>  drivers/pci/iov.c | 63
> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 60 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index e30f05c..e4f1405 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>  		msleep(100);
>  }
> 
> +/*
> + * pci_vf_bar_valid - check if VF BARs have resource allocated
> + * @dev: the PCI device
> + * @pos: register offset of SR-IOV capability in PCI config space
> + * Returns true any VF BAR has resource allocated, false
> + * if all VF BARs are empty.
> + */
> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos)
> +{
> +	int i;
> +	u32 bar_value;
> +	u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> +
> +	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4,
> &bar_value);
> +		if (bar_value & bar_size_mask)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +/*
> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> + * @dev: the PCI device
> + *
> + * Returns true if device is an AMD/ATI display adapter,
> + * otherwise return false.
> + */
> +
> +static bool is_amd_display_adapter(struct pci_dev *dev)
> +{
> +	return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
> +		(dev->vendor == PCI_VENDOR_ID_ATI ||
> +		dev->vendor == PCI_VENDOR_ID_AMD));
> +}
> +
>  /**
>   * pci_iov_init - initialize the IOV capability
>   * @dev: the PCI device
> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>  		return -ENODEV;
> 
>  	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> -	if (pos)
> -		return sriov_init(dev, pos);
> -
> +	if (pos) {
> +	/*
> +	 * If the device is an AMD graphics device and it supports
> +	 * SR-IOV it will require a large amount of resources.
> +	 * Before calling sriov_init() must ensure that the system
> +	 * BIOS also supports SR-IOV and that system BIOS has been
> +	 * able to allocate enough resources.
> +	 * If the VF BARs are zero then the system BIOS does not
> +	 * support SR-IOV or it could not allocate the resources
> +	 * and this platform will not support AMD graphics SR-IOV.
> +	 * Therefore do not call sriov_init().
> +	 * If the system BIOS does support SR-IOV then the VF BARs
> +	 * will be properly initialized to non-zero values.
> +	 */
> +		if (is_amd_display_adapter(dev)) {
> +			if (pci_vf_bar_valid(dev, pos))
> +				return sriov_init(dev, pos);
> +		} else {
> +			return sriov_init(dev, pos);
> +		}
> +	}
>  	return -ENODEV;
>  }
> 
> --
> 1.9.1
> 
> 
> 
> -Collins Cheng

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-23 12:15   ` Deucher, Alexander
  0 siblings, 0 replies; 43+ messages in thread
From: Deucher, Alexander @ 2017-05-23 12:15 UTC (permalink / raw)
  To: Cheng, Collins, Bjorn Helgaas, linux-pci, linux-kernel; +Cc: Zytaruk, Kelly

> -----Original Message-----
> From: Cheng, Collins
> Sent: Thursday, May 11, 2017 10:51 PM
> To: Bjorn Helgaas; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.or=
g
> Cc: Deucher, Alexander; Zytaruk, Kelly
> Subject: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV
> incapable platform
>=20
> Hi Helgaas,
>=20
> Some AMD GPUs have hardware support for graphics SR-IOV.
> If the SR-IOV capable GPU is plugged into the SR-IOV incapable
> platform. It would cause a problem on PCI resource allocation in
> current Linux kernel.
>=20
> Therefore in order to allow the PF (Physical Function) device of
> SR-IOV capable GPU to work on the SR-IOV incapable platform,
> it is required to verify conditions for initializing BAR resources
> on AMD SR-IOV capable GPUs.
>=20
> If the device is an AMD graphics device and it supports
> SR-IOV it will require a large amount of resources.
> Before calling sriov_init() must ensure that the system
> BIOS also supports SR-IOV and that system BIOS has been
> able to allocate enough resources.
> If the VF BARs are zero then the system BIOS does not
> support SR-IOV or it could not allocate the resources
> and this platform will not support AMD graphics SR-IOV.
> Therefore do not call sriov_init().
> If the system BIOS does support SR-IOV then the VF BARs
> will be properly initialized to non-zero values.
>=20
> Below is the patch against to Kernel 4.8 & 4.9. Please review.

For upstream, the patch should be against Linus' master or the Bjorn's pci-=
next tree.

Alex

>=20
> I checked the drivers/pci/quirks.c, it looks the workarounds/fixes in
> quirks.c are for specific devices and one or more device ID are defined
> for the specific devices. However my patch is for all AMD SR-IOV
> capable GPUs, that includes all existing and future AMD server GPUs.
> So it doesn't seem like a good fit to put the fix in quirks.c.
>=20
>=20
>=20
> Signed-off-by: Collins Cheng <collins.cheng@amd.com>
> ---
>  drivers/pci/iov.c | 63
> ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 60 insertions(+), 3 deletions(-)
>=20
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index e30f05c..e4f1405 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>  		msleep(100);
>  }
>=20
> +/*
> + * pci_vf_bar_valid - check if VF BARs have resource allocated
> + * @dev: the PCI device
> + * @pos: register offset of SR-IOV capability in PCI config space
> + * Returns true any VF BAR has resource allocated, false
> + * if all VF BARs are empty.
> + */
> +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos)
> +{
> +	int i;
> +	u32 bar_value;
> +	u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
> +			PCI_BASE_ADDRESS_MEM_TYPE_64 |
> +			PCI_BASE_ADDRESS_MEM_PREFETCH);
> +
> +	for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
> +		pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4,
> &bar_value);
> +		if (bar_value & bar_size_mask)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +
> +/*
> + * is_amd_display_adapter - check if it is an AMD/ATI GPU device
> + * @dev: the PCI device
> + *
> + * Returns true if device is an AMD/ATI display adapter,
> + * otherwise return false.
> + */
> +
> +static bool is_amd_display_adapter(struct pci_dev *dev)
> +{
> +	return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPLAY) &&
> +		(dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
> +		dev->vendor =3D=3D PCI_VENDOR_ID_AMD));
> +}
> +
>  /**
>   * pci_iov_init - initialize the IOV capability
>   * @dev: the PCI device
> @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>  		return -ENODEV;
>=20
>  	pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
> -	if (pos)
> -		return sriov_init(dev, pos);
> -
> +	if (pos) {
> +	/*
> +	 * If the device is an AMD graphics device and it supports
> +	 * SR-IOV it will require a large amount of resources.
> +	 * Before calling sriov_init() must ensure that the system
> +	 * BIOS also supports SR-IOV and that system BIOS has been
> +	 * able to allocate enough resources.
> +	 * If the VF BARs are zero then the system BIOS does not
> +	 * support SR-IOV or it could not allocate the resources
> +	 * and this platform will not support AMD graphics SR-IOV.
> +	 * Therefore do not call sriov_init().
> +	 * If the system BIOS does support SR-IOV then the VF BARs
> +	 * will be properly initialized to non-zero values.
> +	 */
> +		if (is_amd_display_adapter(dev)) {
> +			if (pci_vf_bar_valid(dev, pos))
> +				return sriov_init(dev, pos);
> +		} else {
> +			return sriov_init(dev, pos);
> +		}
> +	}
>  	return -ENODEV;
>  }
>=20
> --
> 1.9.1
>=20
>=20
>=20
> -Collins Cheng

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-23  3:41                   ` Cheng, Collins
@ 2017-05-23 16:02                       ` Alexander Duyck
  2017-05-23 18:20                     ` Alex Williamson
  1 sibling, 0 replies; 43+ messages in thread
From: Alexander Duyck @ 2017-05-23 16:02 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Alex Williamson, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

So Alex Williamson brought up an interesting point. What happens if
you boot with "pci=realloc=off"? Do you see the same issue with it
attempting to reallocate resources? I'm just wondering what the state
of things is if we don't attempt to reallocate resources after the
BIOS has configured them?

- Alex

On Mon, May 22, 2017 at 8:41 PM, Cheng, Collins <Collins.Cheng@amd.com> wrote:
> Hi Alex,
>
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV.
>
> You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
>
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
>
> -Collins Cheng
>
> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Monday, May 22, 2017 11:44 PM
> To: Alexander Duyck <alexander.duyck@gmail.com>
> Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
>
> On Fri, 19 May 2017 08:43:38 -0700
> Alexander Duyck <alexander.duyck@gmail.com> wrote:
>
>> On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
>> <alex.williamson@redhat.com> wrote:
>> > On Mon, 15 May 2017 08:19:28 +0000
>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >
>> >> Hi Williamson,
>> >>
>> >> We cannot assume BIOS supports SR-IOV, actually only newer server motherboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older server motherboard BIOS doesn't support SR-IOV. This issue would happen if an user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>> >
>> > Servers should be supporting SR-IOV for a long time now.  What
>> > really is there to a BIOS supporting SR-IOV anyway, it's simply
>> > reserving sufficient bus number and MMIO resources such that we can
>> > enable the VFs.  This process isn't exclusively reserved for the
>> > BIOS.  Some platforms may choose to only initialize boot devices,
>> > leaving the rest for the OS to program.  The initial proposal here
>> > to disable SR-IOV if not programmed at OS hand-off disables even the
>> > possibility of the OS reallocating resources for this device.
>>
>> There are differences between supporting SR-IOV and supporting SR-IOV
>> on devices with massive resources. I know I have seen NICs that will
>> keep a system from completing POST if SR-IOV is enabled, and MMIO
>> beyond 4G is not. My guess would be that the issues being seen are
>> probably that they disable SR-IOV in the BIOS in such a setup and end
>> up running into issues when they try to boot into the Linux kernel as
>> it goes through and tries to allocate resources for SR-IOV even though
>> it was disabled in the BIOS.
>>
>> It might make sense to add a kernel parameter something like a
>> "pci=nosriov" that would allow for disabling SR-IOV and related
>> resource allocation if that is what we are talking about. That way you
>> could plug in these types of devices into a system with a legacy bios
>> or that doesn't wan to allocate addresses above 32b for MMIO, and this
>> parameter would be all that is needed to disable SR-IOV so you could
>> plug in a NIC that has SR-IOV associated with it.
>
> Hi,
>
> a) I think we're still ignoring the real bug that is something goes wrong with the reallocation leaving the PF without resources.
>
> b) Why does an option to avoid re-allocation need to be sr-iov specific?  Shouldn't pci=realloc=off cover this?
>
> Thanks,
> Alex
>
>> >> I agree that failure to allocate VF resources should leave the device in no worse condition than before it tried. I hope kernel could allocate PF device resource before allocating VF device resource, and keep PF device resource valid and functional if failed to allocate VF device resource.
>> >>
>> >> I will send out dmesg log lspci info tomorrow. Thanks.
>> >
>> > Thanks,
>> > Alex
>> >
>> >> -----Original Message-----
>> >> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> Sent: Friday, May 12, 2017 10:43 PM
>> >> To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> >> linux-kernel@vger.kernel.org; Deucher, Alexander
>> >> <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>> >> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> >> SR-IOV incapable platform
>> >>
>> >> On Fri, 12 May 2017 04:51:43 +0000
>> >> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >>
>> >> > Hi Williamson,
>> >> >
>> >> > I verified the patch is working for both AMD SR-IOV GPU and Intel SR-IOV NIC. I don't think it is redundant to check the VF BAR valid before call sriov_init(), it is safe and saving boot time, also there is no a better method to know if system BIOS has correctly initialized the SR-IOV capability or not.
>> >>
>> >> It also masks an underlying bug and creates a maintenance issue that we won't know when it's safe to remove this workaround.  I don't think faster boot is valid rationale, in one case SR-IOV is completely disabled, the other we attempt to allocate the resources the BIOS failed to provide.  I expect this is also a corner case, the BIOS should typically support SR-IOV, therefore this situation should be an exception.
>> >>
>> >> > I did not try to fix the issue from the kernel resource allocation perspective, it is because:
>> >> >     1. I am not very familiar with the PCI resource allocation scheme in kernel. For example, in sriov_init(), kernel will re-assign the PCI resource for both VF and PF. I don't understand why kernel allocates resource for VF firstly, then PF. If it is PF firstly, then this issue could be avoided.
>> >> >     2. I am not sure if kernel has error handler if PCI resource allocation failed. In this case, kernel cannot allocate enough resource to PF. It should trigger some error handler to either just keep original BAR values set by system BIOS, or disable this device and log errors.
>> >>
>> >> I think these are the issues we should be trying to solve and I'm
>> >> sure folks on the linux-pci list can help us identify the bug.
>> >> Minimally, failure to allocate VF resources should leave the device
>> >> in no worse condition than before it tried.  Perhaps you could post
>> >> more details about the issue, boot with pci=earlydump, post dmesg
>> >> of a boot where the PF resources are incorrectly re-allocated, and
>> >> include lspci -vvv for the SR-IOV device.  Also, please test with
>> >> the latest upstream kernel, upstream only patches old kernels
>> >> through stable backports of commits to the latest kernel.  Adding
>> >> Yinghai as a resource allocation expert. Thanks,
>> >>
>> >> Alex
>> >>
>> >> > -----Original Message-----
>> >> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> > Sent: Friday, May 12, 2017 12:01 PM
>> >> > To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>> >> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,
>> >> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> > <Kelly.Zytaruk@amd.com>
>> >> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> >> > SR-IOV incapable platform
>> >> >
>> >> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins"
>> >> > <Collins.Cheng@amd.com> wrote:
>> >> >
>> >> > > Hi Williamson,
>> >> > >
>> >> > > GPU card needs more BAR aperture resource than other PCI devices. For example, Intel SR-IOV network card only require 512KB memory resource for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF = 4GB memory resource for frame buffer BAR aperture.
>> >> > >
>> >> > > If the system BIOS supports SR-IOV, it will reserve enough resource for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot allocate the enough resource for VF BARs, only PF BAR will be assigned and VF BARs are empty. Then system boots to Linux kernel and kernel doesn't check if the VF BARs are empty or valid. Kernel will re-assign the BAR resources for PF and all VFs. The problem I saw is that kernel will fail to allocate PF BAR resource because some resources are assigned to VF, this is not expected. So kernel might need to do some check before re-assign the PF/VF resource, so that PF device will be correctly assigned BAR resource and user can use PF device.
>> >> >
>> >> > So the problem is that something bad happens when the kernel is
>> >> > trying to reallocate resources in order to fulfill the
>> >> > requirements of the VFs, leaving the PF resources incorrectly
>> >> > programmed?  Why not just fix that bug rather than creating
>> >> > special handling for this vendor/class of device which disables
>> >> > any attempt to fixup resources for SR-IOV?  IOW, this patch just
>> >> > avoids the problem for your devices rather than fixing the bug.
>> >> > I'd suggest fixing the bug such that the PF is left in a
>> >> > functional state if the kernel is unable to allocate sufficient
>> >> > resources for the VFs.  Thanks,
>> >> >
>> >> > Alex
>> >> >
>> >> > > -----Original Message-----
>> >> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> > > Sent: Friday, May 12, 2017 11:21 AM
>> >> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>> >> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>> >> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> > > <Kelly.Zytaruk@amd.com>
>> >> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on
>> >> > > the SR-IOV incapable platform
>> >> > >
>> >> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>> >> > > <Collins.Cheng@amd.com> wrote:
>> >> > >
>> >> > > > Hi Helgaas,
>> >> > > >
>> >> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>> >> > > > If the SR-IOV capable GPU is plugged into the SR-IOV
>> >> > > > incapable platform. It would cause a problem on PCI resource
>> >> > > > allocation in current Linux kernel.
>> >> > > >
>> >> > > > Therefore in order to allow the PF (Physical Function) device
>> >> > > > of SR-IOV capable GPU to work on the SR-IOV incapable
>> >> > > > platform, it is required to verify conditions for
>> >> > > > initializing BAR resources on AMD SR-IOV capable GPUs.
>> >> > > >
>> >> > > > If the device is an AMD graphics device and it supports
>> >> > > > SR-IOV it will require a large amount of resources.
>> >> > > > Before calling sriov_init() must ensure that the system BIOS
>> >> > > > also supports SR-IOV and that system BIOS has been able to
>> >> > > > allocate enough resources.
>> >> > > > If the VF BARs are zero then the system BIOS does not support
>> >> > > > SR-IOV or it could not allocate the resources and this
>> >> > > > platform will not support AMD graphics SR-IOV.
>> >> > > > Therefore do not call sriov_init().
>> >> > > > If the system BIOS does support SR-IOV then the VF BARs will
>> >> > > > be properly initialized to non-zero values.
>> >> > > >
>> >> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>> >> > > >
>> >> > > > I checked the drivers/pci/quirks.c, it looks the
>> >> > > > workarounds/fixes in quirks.c are for specific devices and
>> >> > > > one or more device ID are defined for the specific devices.
>> >> > > > However my patch is for all AMD SR-IOV capable GPUs, that includes all existing and future AMD server GPUs.
>> >> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>> >> > >
>> >> > >
>> >> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>> >> > > always need to be able to deal with devices of any type where
>> >> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV
>> >> > > devices can fit their VFs within a minimum bridge aperture,
>> >> > > most cannot.  I don't understand why the VF resource
>> >> > > requirements being exceptionally large dictates that they receive special handling.
>> >> > > Thanks,
>> >> > >
>> >> > > Alex
>> >> > >
>> >> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> >> > > > ---
>> >> > > >  drivers/pci/iov.c | 63
>> >> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> >> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>> >> > > >
>> >> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> >> > > > e30f05c..e4f1405 100644
>> >> > > > --- a/drivers/pci/iov.c
>> >> > > > +++ b/drivers/pci/iov.c
>> >> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci_dev *dev)
>> >> > > >                 msleep(100);
>> >> > > >  }
>> >> > > >
>> >> > > > +/*
>> >> > > > + * pci_vf_bar_valid - check if VF BARs have resource
>> >> > > > +allocated
>> >> > > > + * @dev: the PCI device
>> >> > > > + * @pos: register offset of SR-IOV capability in PCI config
>> >> > > > +space
>> >> > > > + * Returns true any VF BAR has resource allocated, false
>> >> > > > + * if all VF BARs are empty.
>> >> > > > + */
>> >> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> >> > > > +       int i;
>> >> > > > +       u32 bar_value;
>> >> > > > +       u32 bar_size_mask = ~(PCI_BASE_ADDRESS_SPACE |
>> >> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> >> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>> >> > > > +
>> >> > > > +       for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> >> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR + i * 4, &bar_value);
>> >> > > > +               if (bar_value & bar_size_mask)
>> >> > > > +                       return true;
>> >> > > > +       }
>> >> > > > +
>> >> > > > +       return false;
>> >> > > > +}
>> >> > > > +
>> >> > > > +/*
>> >> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU
>> >> > > > +device
>> >> > > > + * @dev: the PCI device
>> >> > > > + *
>> >> > > > + * Returns true if device is an AMD/ATI display adapter,
>> >> > > > + * otherwise return false.
>> >> > > > + */
>> >> > > > +
>> >> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> >> > > > +       return (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
>> >> > > > +               (dev->vendor == PCI_VENDOR_ID_ATI ||
>> >> > > > +               dev->vendor == PCI_VENDOR_ID_AMD)); }
>> >> > > > +
>> >> > > >  /**
>> >> > > >   * pci_iov_init - initialize the IOV capability
>> >> > > >   * @dev: the PCI device
>> >> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>> >> > > >                 return -ENODEV;
>> >> > > >
>> >> > > >         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
>> >> > > > -       if (pos)
>> >> > > > -               return sriov_init(dev, pos);
>> >> > > > -
>> >> > > > +       if (pos) {
>> >> > > > +       /*
>> >> > > > +        * If the device is an AMD graphics device and it supports
>> >> > > > +        * SR-IOV it will require a large amount of resources.
>> >> > > > +        * Before calling sriov_init() must ensure that the system
>> >> > > > +        * BIOS also supports SR-IOV and that system BIOS has been
>> >> > > > +        * able to allocate enough resources.
>> >> > > > +        * If the VF BARs are zero then the system BIOS does not
>> >> > > > +        * support SR-IOV or it could not allocate the resources
>> >> > > > +        * and this platform will not support AMD graphics SR-IOV.
>> >> > > > +        * Therefore do not call sriov_init().
>> >> > > > +        * If the system BIOS does support SR-IOV then the VF BARs
>> >> > > > +        * will be properly initialized to non-zero values.
>> >> > > > +        */
>> >> > > > +               if (is_amd_display_adapter(dev)) {
>> >> > > > +                       if (pci_vf_bar_valid(dev, pos))
>> >> > > > +                               return sriov_init(dev, pos);
>> >> > > > +               } else {
>> >> > > > +                       return sriov_init(dev, pos);
>> >> > > > +               }
>> >> > > > +       }
>> >> > > >         return -ENODEV;
>> >> > > >  }
>> >> > > >
>> >> > >
>> >> >
>> >>
>> >
>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-23 16:02                       ` Alexander Duyck
  0 siblings, 0 replies; 43+ messages in thread
From: Alexander Duyck @ 2017-05-23 16:02 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Alex Williamson, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

So Alex Williamson brought up an interesting point. What happens if
you boot with "pci=3Drealloc=3Doff"? Do you see the same issue with it
attempting to reallocate resources? I'm just wondering what the state
of things is if we don't attempt to reallocate resources after the
BIOS has configured them?

- Alex

On Mon, May 22, 2017 at 8:41 PM, Cheng, Collins <Collins.Cheng@amd.com> wro=
te:
> Hi Alex,
>
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pc=
i=3Dearlydump", 2.txt is with "pci=3Dearlydump". The platform is an ASUS Z1=
70-A motherboard that doesn't support SR-IOV. The graphics card is AMD Fire=
Pro S7150 card which enabled SR-IOV.
>
> You could find the error info like below in both logs. From the log, kern=
el failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (2=
56MB needed), but kernel reallocated resource for BAR9 which is for VF. You=
 are right, the real bug that is something goes wrong with the reallocation=
 leaving the PF without resources.
>
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfff=
ff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x0200000=
0]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x020=
00000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfff=
ff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000=
]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x0004=
0000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000=
 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x0002=
0000 pref]
>
> -Collins Cheng
>
> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Monday, May 22, 2017 11:44 PM
> To: Alexander Duyck <alexander.duyck@gmail.com>
> Cc: Cheng, Collins <Collins.Cheng@amd.com>; Bjorn Helgaas <bhelgaas@googl=
e.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, A=
lexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com=
>; Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV i=
ncapable platform
>
> On Fri, 19 May 2017 08:43:38 -0700
> Alexander Duyck <alexander.duyck@gmail.com> wrote:
>
>> On Mon, May 15, 2017 at 10:53 AM, Alex Williamson
>> <alex.williamson@redhat.com> wrote:
>> > On Mon, 15 May 2017 08:19:28 +0000
>> > "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >
>> >> Hi Williamson,
>> >>
>> >> We cannot assume BIOS supports SR-IOV, actually only newer server mot=
herboard BIOS supports SR-IOV. Normal desktop motherboard BIOS or older ser=
ver motherboard BIOS doesn't support SR-IOV. This issue would happen if an =
user plugs our AMD SR-IOV capable GPU card to a normal desktop motherboard.
>> >
>> > Servers should be supporting SR-IOV for a long time now.  What
>> > really is there to a BIOS supporting SR-IOV anyway, it's simply
>> > reserving sufficient bus number and MMIO resources such that we can
>> > enable the VFs.  This process isn't exclusively reserved for the
>> > BIOS.  Some platforms may choose to only initialize boot devices,
>> > leaving the rest for the OS to program.  The initial proposal here
>> > to disable SR-IOV if not programmed at OS hand-off disables even the
>> > possibility of the OS reallocating resources for this device.
>>
>> There are differences between supporting SR-IOV and supporting SR-IOV
>> on devices with massive resources. I know I have seen NICs that will
>> keep a system from completing POST if SR-IOV is enabled, and MMIO
>> beyond 4G is not. My guess would be that the issues being seen are
>> probably that they disable SR-IOV in the BIOS in such a setup and end
>> up running into issues when they try to boot into the Linux kernel as
>> it goes through and tries to allocate resources for SR-IOV even though
>> it was disabled in the BIOS.
>>
>> It might make sense to add a kernel parameter something like a
>> "pci=3Dnosriov" that would allow for disabling SR-IOV and related
>> resource allocation if that is what we are talking about. That way you
>> could plug in these types of devices into a system with a legacy bios
>> or that doesn't wan to allocate addresses above 32b for MMIO, and this
>> parameter would be all that is needed to disable SR-IOV so you could
>> plug in a NIC that has SR-IOV associated with it.
>
> Hi,
>
> a) I think we're still ignoring the real bug that is something goes wrong=
 with the reallocation leaving the PF without resources.
>
> b) Why does an option to avoid re-allocation need to be sr-iov specific? =
 Shouldn't pci=3Drealloc=3Doff cover this?
>
> Thanks,
> Alex
>
>> >> I agree that failure to allocate VF resources should leave the device=
 in no worse condition than before it tried. I hope kernel could allocate P=
F device resource before allocating VF device resource, and keep PF device =
resource valid and functional if failed to allocate VF device resource.
>> >>
>> >> I will send out dmesg log lspci info tomorrow. Thanks.
>> >
>> > Thanks,
>> > Alex
>> >
>> >> -----Original Message-----
>> >> From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> Sent: Friday, May 12, 2017 10:43 PM
>> >> To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> Cc: Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org;
>> >> linux-kernel@vger.kernel.org; Deucher, Alexander
>> >> <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
>> >> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> >> SR-IOV incapable platform
>> >>
>> >> On Fri, 12 May 2017 04:51:43 +0000
>> >> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>> >>
>> >> > Hi Williamson,
>> >> >
>> >> > I verified the patch is working for both AMD SR-IOV GPU and Intel S=
R-IOV NIC. I don't think it is redundant to check the VF BAR valid before c=
all sriov_init(), it is safe and saving boot time, also there is no a bette=
r method to know if system BIOS has correctly initialized the SR-IOV capabi=
lity or not.
>> >>
>> >> It also masks an underlying bug and creates a maintenance issue that =
we won't know when it's safe to remove this workaround.  I don't think fast=
er boot is valid rationale, in one case SR-IOV is completely disabled, the =
other we attempt to allocate the resources the BIOS failed to provide.  I e=
xpect this is also a corner case, the BIOS should typically support SR-IOV,=
 therefore this situation should be an exception.
>> >>
>> >> > I did not try to fix the issue from the kernel resource allocation =
perspective, it is because:
>> >> >     1. I am not very familiar with the PCI resource allocation sche=
me in kernel. For example, in sriov_init(), kernel will re-assign the PCI r=
esource for both VF and PF. I don't understand why kernel allocates resourc=
e for VF firstly, then PF. If it is PF firstly, then this issue could be av=
oided.
>> >> >     2. I am not sure if kernel has error handler if PCI resource al=
location failed. In this case, kernel cannot allocate enough resource to PF=
. It should trigger some error handler to either just keep original BAR val=
ues set by system BIOS, or disable this device and log errors.
>> >>
>> >> I think these are the issues we should be trying to solve and I'm
>> >> sure folks on the linux-pci list can help us identify the bug.
>> >> Minimally, failure to allocate VF resources should leave the device
>> >> in no worse condition than before it tried.  Perhaps you could post
>> >> more details about the issue, boot with pci=3Dearlydump, post dmesg
>> >> of a boot where the PF resources are incorrectly re-allocated, and
>> >> include lspci -vvv for the SR-IOV device.  Also, please test with
>> >> the latest upstream kernel, upstream only patches old kernels
>> >> through stable backports of commits to the latest kernel.  Adding
>> >> Yinghai as a resource allocation expert. Thanks,
>> >>
>> >> Alex
>> >>
>> >> > -----Original Message-----
>> >> > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> > Sent: Friday, May 12, 2017 12:01 PM
>> >> > To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>> >> > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher,
>> >> > Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> > <Kelly.Zytaruk@amd.com>
>> >> > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the
>> >> > SR-IOV incapable platform
>> >> >
>> >> > On Fri, 12 May 2017 03:42:46 +0000 "Cheng, Collins"
>> >> > <Collins.Cheng@amd.com> wrote:
>> >> >
>> >> > > Hi Williamson,
>> >> > >
>> >> > > GPU card needs more BAR aperture resource than other PCI devices.=
 For example, Intel SR-IOV network card only require 512KB memory resource =
for all VFs. AMD SR-IOV GPU card needs 256MB x16 VF =3D 4GB memory resource=
 for frame buffer BAR aperture.
>> >> > >
>> >> > > If the system BIOS supports SR-IOV, it will reserve enough resour=
ce for all VF BARs. If the system BIOS doesn't support SR-IOV or cannot all=
ocate the enough resource for VF BARs, only PF BAR will be assigned and VF =
BARs are empty. Then system boots to Linux kernel and kernel doesn't check =
if the VF BARs are empty or valid. Kernel will re-assign the BAR resources =
for PF and all VFs. The problem I saw is that kernel will fail to allocate =
PF BAR resource because some resources are assigned to VF, this is not expe=
cted. So kernel might need to do some check before re-assign the PF/VF reso=
urce, so that PF device will be correctly assigned BAR resource and user ca=
n use PF device.
>> >> >
>> >> > So the problem is that something bad happens when the kernel is
>> >> > trying to reallocate resources in order to fulfill the
>> >> > requirements of the VFs, leaving the PF resources incorrectly
>> >> > programmed?  Why not just fix that bug rather than creating
>> >> > special handling for this vendor/class of device which disables
>> >> > any attempt to fixup resources for SR-IOV?  IOW, this patch just
>> >> > avoids the problem for your devices rather than fixing the bug.
>> >> > I'd suggest fixing the bug such that the PF is left in a
>> >> > functional state if the kernel is unable to allocate sufficient
>> >> > resources for the VFs.  Thanks,
>> >> >
>> >> > Alex
>> >> >
>> >> > > -----Original Message-----
>> >> > > From: Alex Williamson [mailto:alex.williamson@redhat.com]
>> >> > > Sent: Friday, May 12, 2017 11:21 AM
>> >> > > To: Cheng, Collins <Collins.Cheng@amd.com>
>> >> > > Cc: Bjorn Helgaas <bhelgaas@google.com>;
>> >> > > linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org;
>> >> > > Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly
>> >> > > <Kelly.Zytaruk@amd.com>
>> >> > > Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on
>> >> > > the SR-IOV incapable platform
>> >> > >
>> >> > > On Fri, 12 May 2017 02:50:32 +0000 "Cheng, Collins"
>> >> > > <Collins.Cheng@amd.com> wrote:
>> >> > >
>> >> > > > Hi Helgaas,
>> >> > > >
>> >> > > > Some AMD GPUs have hardware support for graphics SR-IOV.
>> >> > > > If the SR-IOV capable GPU is plugged into the SR-IOV
>> >> > > > incapable platform. It would cause a problem on PCI resource
>> >> > > > allocation in current Linux kernel.
>> >> > > >
>> >> > > > Therefore in order to allow the PF (Physical Function) device
>> >> > > > of SR-IOV capable GPU to work on the SR-IOV incapable
>> >> > > > platform, it is required to verify conditions for
>> >> > > > initializing BAR resources on AMD SR-IOV capable GPUs.
>> >> > > >
>> >> > > > If the device is an AMD graphics device and it supports
>> >> > > > SR-IOV it will require a large amount of resources.
>> >> > > > Before calling sriov_init() must ensure that the system BIOS
>> >> > > > also supports SR-IOV and that system BIOS has been able to
>> >> > > > allocate enough resources.
>> >> > > > If the VF BARs are zero then the system BIOS does not support
>> >> > > > SR-IOV or it could not allocate the resources and this
>> >> > > > platform will not support AMD graphics SR-IOV.
>> >> > > > Therefore do not call sriov_init().
>> >> > > > If the system BIOS does support SR-IOV then the VF BARs will
>> >> > > > be properly initialized to non-zero values.
>> >> > > >
>> >> > > > Below is the patch against to Kernel 4.8 & 4.9. Please review.
>> >> > > >
>> >> > > > I checked the drivers/pci/quirks.c, it looks the
>> >> > > > workarounds/fixes in quirks.c are for specific devices and
>> >> > > > one or more device ID are defined for the specific devices.
>> >> > > > However my patch is for all AMD SR-IOV capable GPUs, that inclu=
des all existing and future AMD server GPUs.
>> >> > > > So it doesn't seem like a good fit to put the fix in quirks.c.
>> >> > >
>> >> > >
>> >> > > Why is an AMD graphics card unique here?  Doesn't sriov_init()
>> >> > > always need to be able to deal with devices of any type where
>> >> > > the BIOS hasn't initialized the SR-IOV capability?  Some SR-IOV
>> >> > > devices can fit their VFs within a minimum bridge aperture,
>> >> > > most cannot.  I don't understand why the VF resource
>> >> > > requirements being exceptionally large dictates that they receive=
 special handling.
>> >> > > Thanks,
>> >> > >
>> >> > > Alex
>> >> > >
>> >> > > > Signed-off-by: Collins Cheng <collins.cheng@amd.com>
>> >> > > > ---
>> >> > > >  drivers/pci/iov.c | 63
>> >> > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> >> > > >  1 file changed, 60 insertions(+), 3 deletions(-)
>> >> > > >
>> >> > > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index
>> >> > > > e30f05c..e4f1405 100644
>> >> > > > --- a/drivers/pci/iov.c
>> >> > > > +++ b/drivers/pci/iov.c
>> >> > > > @@ -523,6 +523,45 @@ static void sriov_restore_state(struct pci=
_dev *dev)
>> >> > > >                 msleep(100);
>> >> > > >  }
>> >> > > >
>> >> > > > +/*
>> >> > > > + * pci_vf_bar_valid - check if VF BARs have resource
>> >> > > > +allocated
>> >> > > > + * @dev: the PCI device
>> >> > > > + * @pos: register offset of SR-IOV capability in PCI config
>> >> > > > +space
>> >> > > > + * Returns true any VF BAR has resource allocated, false
>> >> > > > + * if all VF BARs are empty.
>> >> > > > + */
>> >> > > > +static bool pci_vf_bar_valid(struct pci_dev *dev, int pos) {
>> >> > > > +       int i;
>> >> > > > +       u32 bar_value;
>> >> > > > +       u32 bar_size_mask =3D ~(PCI_BASE_ADDRESS_SPACE |
>> >> > > > +                       PCI_BASE_ADDRESS_MEM_TYPE_64 |
>> >> > > > +                       PCI_BASE_ADDRESS_MEM_PREFETCH);
>> >> > > > +
>> >> > > > +       for (i =3D 0; i < PCI_SRIOV_NUM_BARS; i++) {
>> >> > > > +               pci_read_config_dword(dev, pos + PCI_SRIOV_BAR =
+ i * 4, &bar_value);
>> >> > > > +               if (bar_value & bar_size_mask)
>> >> > > > +                       return true;
>> >> > > > +       }
>> >> > > > +
>> >> > > > +       return false;
>> >> > > > +}
>> >> > > > +
>> >> > > > +/*
>> >> > > > + * is_amd_display_adapter - check if it is an AMD/ATI GPU
>> >> > > > +device
>> >> > > > + * @dev: the PCI device
>> >> > > > + *
>> >> > > > + * Returns true if device is an AMD/ATI display adapter,
>> >> > > > + * otherwise return false.
>> >> > > > + */
>> >> > > > +
>> >> > > > +static bool is_amd_display_adapter(struct pci_dev *dev) {
>> >> > > > +       return (((dev->class >> 16) =3D=3D PCI_BASE_CLASS_DISPL=
AY) &&
>> >> > > > +               (dev->vendor =3D=3D PCI_VENDOR_ID_ATI ||
>> >> > > > +               dev->vendor =3D=3D PCI_VENDOR_ID_AMD)); }
>> >> > > > +
>> >> > > >  /**
>> >> > > >   * pci_iov_init - initialize the IOV capability
>> >> > > >   * @dev: the PCI device
>> >> > > > @@ -537,9 +576,27 @@ int pci_iov_init(struct pci_dev *dev)
>> >> > > >                 return -ENODEV;
>> >> > > >
>> >> > > >         pos =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRI=
OV);
>> >> > > > -       if (pos)
>> >> > > > -               return sriov_init(dev, pos);
>> >> > > > -
>> >> > > > +       if (pos) {
>> >> > > > +       /*
>> >> > > > +        * If the device is an AMD graphics device and it suppo=
rts
>> >> > > > +        * SR-IOV it will require a large amount of resources.
>> >> > > > +        * Before calling sriov_init() must ensure that the sys=
tem
>> >> > > > +        * BIOS also supports SR-IOV and that system BIOS has b=
een
>> >> > > > +        * able to allocate enough resources.
>> >> > > > +        * If the VF BARs are zero then the system BIOS does no=
t
>> >> > > > +        * support SR-IOV or it could not allocate the resource=
s
>> >> > > > +        * and this platform will not support AMD graphics SR-I=
OV.
>> >> > > > +        * Therefore do not call sriov_init().
>> >> > > > +        * If the system BIOS does support SR-IOV then the VF B=
ARs
>> >> > > > +        * will be properly initialized to non-zero values.
>> >> > > > +        */
>> >> > > > +               if (is_amd_display_adapter(dev)) {
>> >> > > > +                       if (pci_vf_bar_valid(dev, pos))
>> >> > > > +                               return sriov_init(dev, pos);
>> >> > > > +               } else {
>> >> > > > +                       return sriov_init(dev, pos);
>> >> > > > +               }
>> >> > > > +       }
>> >> > > >         return -ENODEV;
>> >> > > >  }
>> >> > > >
>> >> > >
>> >> >
>> >>
>> >
>

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-23  3:41                   ` Cheng, Collins
  2017-05-23 16:02                       ` Alexander Duyck
@ 2017-05-23 18:20                     ` Alex Williamson
  2017-05-24  8:56                       ` Cheng, Collins
                                         ` (2 more replies)
  1 sibling, 3 replies; 43+ messages in thread
From: Alex Williamson @ 2017-05-23 18:20 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
> 
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> 
> You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> 
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]

I've tried to extract more of the relevant resizing efforts below,
perhaps Yinghai or others can make more out of it.  In particular this
system offers no 64-bit MMIO and we'll never manage to allocate the
necessary SR-IOV resources without it.  AIUI, the PCI core won't try to
use anything outside the ACPI _CRS data without the option pci=nocrs.
This might present a second alternative in addition to the
pci=realloc=off, which is actually suggested by the kernel below.  So I
think we have at least two potential workarounds in the code as it
exists today, one leaving SR-IOV disabled, the other (hopefully)
enabling it using 64bit MMIO not described by the system BIOS.
Certainly an improvement would still be detecting the impossible
reallocation problem without nocrs and abandoning the process and
of course to revert the process before leaving more BARs unprogrammed
than we started with.  Thanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=realloc=off

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-23 18:20                     ` Alex Williamson
@ 2017-05-24  8:56                       ` Cheng, Collins
  2017-05-24  8:57                         ` Cheng, Collins
  2017-05-26  1:52                         ` Cheng, Collins
  2 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-24  8:56 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

[-- Attachment #1: Type: text/plain, Size: 14274 bytes --]

Hi Alex W, Alex D,

I just tried two options, one is enable "Above 4G Decoding" in BIOS setup menu, the other is add "pci=realloc=off" in grub. Both can fix this issue. Please see the attached log files.

Previously I thought "Above 4G Decoding" is enabled, but it is off when I looked CMOS setup today.

For now I think we have a solution. For the system that supports "Above 4G Decoding", user should enable it when use a SR-IOV supported device. For the system that doesn't support "Above 4G Decoding", user needs to add "pci=realloc=off" in grub.

Potentially I think kernel still needs to find a way to avoid this issue happen, like keeps the resource as the BIOS assigned value if there is a failure on device's resource reallocation.


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Wednesday, May 24, 2017 2:20 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
> 
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> 
> You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> 
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]

I've tried to extract more of the relevant resizing efforts below, perhaps Yinghai or others can make more out of it.  In particular this system offers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV resources without it.  AIUI, the PCI core won't try to use anything outside the ACPI _CRS data without the option pci=nocrs.
This might present a second alternative in addition to the pci=realloc=off, which is actually suggested by the kernel below.  So I think we have at least two potential workarounds in the code as it exists today, one leaving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not described by the system BIOS.
Certainly an improvement would still be detecting the impossible reallocation problem without nocrs and abandoning the process and of course to revert the process before leaving more BARs unprogrammed than we started with.  Thanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=realloc=off

[-- Attachment #2: pci_realloc_off.txt --]
[-- Type: text/plain, Size: 74483 bytes --]

[    0.000000] Linux version 4.9.0-custom (root@rexzhu) (gcc version 4.8.2 (GCC) ) #2 SMP Fri Mar 31 12:52:40 CST 2017
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend pci=realloc=off quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
[    0.000000] x86/fpu: Enabled xstate features 0x1f, context size is 960 bytes, using 'compacted' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009c7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009c800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007d438fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d439000-0x000000007d439fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007d43a000-0x000000007d483fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007d484000-0x000000007d4c4fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d4c5000-0x000000007db49fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007db4a000-0x00000000858a7fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000858a8000-0x0000000086db6fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000086db7000-0x0000000086deffff] ACPI data
[    0.000000] BIOS-e820: [mem 0x0000000086df0000-0x000000008774bfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000008774c000-0x0000000087ffefff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000087fff000-0x0000000087ffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000088000000-0x00000000880fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000004767fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 3.0 present.
[    0.000000] DMI: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x476800 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 00C0000000 mask 7FC0000000 uncachable
[    0.000000]   1 base 00A0000000 mask 7FE0000000 uncachable
[    0.000000]   2 base 0090000000 mask 7FF0000000 uncachable
[    0.000000]   3 base 008C000000 mask 7FFC000000 uncachable
[    0.000000]   4 base 008A000000 mask 7FFE000000 uncachable
[    0.000000]   5 base 0089000000 mask 7FFF000000 uncachable
[    0.000000]   6 base 0088800000 mask 7FFF800000 uncachable
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] e820: last_pfn = 0x88000 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [mem 0x000fcc50-0x000fcc5f] mapped at [ffff8800000fcc50]
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] Base memory trampoline at [ffff880000096000] 96000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] BRK [0x020c7000, 0x020c7fff] PGTABLE
[    0.000000] BRK [0x020c8000, 0x020c8fff] PGTABLE
[    0.000000] BRK [0x020c9000, 0x020c9fff] PGTABLE
[    0.000000] BRK [0x020ca000, 0x020cafff] PGTABLE
[    0.000000] BRK [0x020cb000, 0x020cbfff] PGTABLE
[    0.000000] BRK [0x020cc000, 0x020ccfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x2f6de000-0x33b66fff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F0580 000024 (v02 ALASKA)
[    0.000000] ACPI: XSDT 0x0000000086DC2098 0000AC (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FACP 0x0000000086DE5038 00010C (v05 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: DSDT 0x0000000086DC21E0 022E52 (v02 ALASKA A M I    01072009 INTL 20120913)
[    0.000000] ACPI: FACS 0x000000008774BF80 000040
[    0.000000] ACPI: APIC 0x0000000086DE5148 0000BC (v03 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FPDT 0x0000000086DE5208 000044 (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FIDT 0x0000000086DE5250 00009C (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: MCFG 0x0000000086DE52F0 00003C (v01 ALASKA A M I    01072009 MSFT 00000097)
[    0.000000] ACPI: HPET 0x0000000086DE5330 000038 (v01 ALASKA A M I    01072009 AMI. 0005000B)
[    0.000000] ACPI: SSDT 0x0000000086DE5368 00036D (v01 SataRe SataTabl 00001000 INTL 20120913)
[    0.000000] ACPI: LPIT 0x0000000086DE56D8 000094 (v01 INTEL  SKL      00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE5770 000248 (v02 INTEL  sensrhub 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE59B8 002BAE (v02 INTEL  PtidDevc 00001000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE8568 000C45 (v02 INTEL  Ther_Rvp 00001000 INTL 20120913)
[    0.000000] ACPI: DBGP 0x0000000086DE91B0 000034 (v01 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: DBG2 0x0000000086DE91E8 000054 (v00 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE9240 0006FD (v02 INTEL  xh_rvp08 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE9940 005271 (v02 SaSsdt SaSsdt   00003000 INTL 20120913)
[    0.000000] ACPI: UEFI 0x0000000086DEEBB8 000042 (v01                 00000000      00000000)
[    0.000000] ACPI: SSDT 0x0000000086DEEC00 000E58 (v02 CpuRef CpuSsdt  00003000 INTL 20120913)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x00000004767fffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x4767f8000-0x4767fbfff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009bfff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000007d438fff]
[    0.000000]   node   0: [mem 0x000000007d484000-0x000000007d4c4fff]
[    0.000000]   node   0: [mem 0x000000007db4a000-0x00000000858a7fff]
[    0.000000]   node   0: [mem 0x0000000087fff000-0x0000000087ffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x00000004767fffff]
[    0.000000] On node 0 totalpages: 4176244
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 3995 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 8456 pages used for memmap
[    0.000000]   DMA32 zone: 541145 pages, LIFO batch:31
[    0.000000]   Normal zone: 56736 pages used for memmap
[    0.000000]   Normal zone: 3631104 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x1808
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a701 base: 0xfed00000
[    0.000000] smpboot: Allowing 8 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009c000-0x0009cfff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d439000-0x7d439fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d43a000-0x7d483fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d4c5000-0x7db49fff]
[    0.000000] PM: Registered nosave memory: [mem 0x858a8000-0x86db6fff]
[    0.000000] PM: Registered nosave memory: [mem 0x86db7000-0x86deffff]
[    0.000000] PM: Registered nosave memory: [mem 0x86df0000-0x8774bfff]
[    0.000000] PM: Registered nosave memory: [mem 0x8774c000-0x87ffefff]
[    0.000000] PM: Registered nosave memory: [mem 0x88000000-0x880fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x88100000-0xdfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xe0000000-0xefffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xf0000000-0xfdffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe000000-0xfe010fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe011000-0xfebfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec00000-0xfec00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec01000-0xfedfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xfeffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xff000000-0xffffffff]
[    0.000000] e820: [mem 0x88100000-0xdfffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] percpu: Embedded 36 pages/cpu @ffff880476400000 s108056 r8192 d31208 u262144
[    0.000000] pcpu-alloc: s108056 r8192 d31208 u262144 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 4110967
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend pci=realloc=off quiet splash vt.handoff=7
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 16288164K/16704976K available (8091K kernel code, 1445K rwdata, 3668K rodata, 2220K init, 1180K bss, 416812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] 	Build-time adjustment of leaf fanout to 64.
[    0.000000] 	RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=8
[    0.000000] NR_IRQS:16640 nr_irqs:2048 16
[    0.000000] 	Offload RCU callbacks from all CPUs
[    0.000000] 	Offload RCU callbacks from CPUs: 0-7.
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] console [ttyS0] enabled
[    0.000000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635855245 ns
[    0.000000] hpet clockevent registered
[    0.000000] tsc: Detected 3400.000 MHz processor
[    0.000014] Calibrating delay loop (skipped), value calculated using timer frequency.. 6816.00 BogoMIPS (lpj=13632000)
[    0.000016] pid_max: default: 32768 minimum: 301
[    0.000034] ACPI: Core revision 20160831
[    0.049168] ACPI Error: [\_SB_.PCI0.XHC_.RHUB.HS11] Namespace lookup failure, AE_NOT_FOUND (20160831/dswload-210)
[    0.059647] ACPI Exception: AE_NOT_FOUND, During name lookup/catalog (20160831/psobject-227)
[    0.068424] ACPI Exception: AE_NOT_FOUND, (SSDT:xh_rvp08) while loading table (20160831/tbxfload-228)
[    0.089854] ACPI Error: 1 table load failures, 7 successful (20160831/tbxfload-246)
[    0.097795] Security Framework initialized
[    0.097796] Yama: becoming mindful.
[    0.097806] AppArmor: AppArmor initialized
[    0.098382] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes)
[    0.100353] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.101205] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101215] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101583] CPU: Physical Processor ID: 0
[    0.101584] CPU: Processor Core ID: 0
[    0.101586] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[    0.101587] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[    0.101590] mce: CPU supports 10 MCE banks
[    0.101597] CPU0: Thermal monitoring enabled (TM1)
[    0.101611] process: using mwait in idle threads
[    0.101613] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8
[    0.101613] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4
[    0.101866] Freeing SMP alternatives memory: 32K (ffffffff81f96000 - ffffffff81f9e000)
[    0.131639] ftrace: allocating 32207 entries in 126 pages
[    0.140625] smpboot: APIC(0) Converting physical 0 to logical package 0
[    0.140626] smpboot: Max logical packages: 2
[    0.141825] x2apic: IRQ remapping doesn't support X2APIC mode
[    0.144957] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0
[    0.184645] TSC deadline timer enabled
[    0.184650] smpboot: CPU0: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (family: 0x6, model: 0x5e, stepping: 0x3)
[    0.184652] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[    0.184672] ... version:                4
[    0.184673] ... bit width:              48
[    0.184673] ... generic registers:      4
[    0.184673] ... value mask:             0000ffffffffffff
[    0.184674] ... max period:             00007fffffffffff
[    0.184674] ... fixed-purpose events:   3
[    0.184674] ... event mask:             000000070000000f
[    0.185381] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[    0.185490] x86: Booting SMP configuration:
[    0.185490] .... node  #0, CPUs:      #1 #2 #3 #4 #5 #6 #7
[    0.746801] x86: Booted up 1 node, 8 CPUs
[    0.746803] smpboot: Total of 8 processors activated (54535.41 BogoMIPS)
[    0.753703] devtmpfs: initialized
[    0.753816] x86/mm: Memory block size: 128MB
[    0.758362] evm: security.selinux
[    0.758362] evm: security.SMACK64
[    0.758362] evm: security.ima
[    0.758363] evm: security.capability
[    0.758415] PM: Registering ACPI NVS region [mem 0x7d439000-0x7d439fff] (4096 bytes)
[    0.758416] PM: Registering ACPI NVS region [mem 0x86df0000-0x8774bfff] (9814016 bytes)
[    0.759206] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.759250] pinctrl core: initialized pinctrl subsystem
[    0.759485] RTC time:  8:19:19, date: 05/24/17
[    0.759595] NET: Registered protocol family 16
[    0.777397] cpuidle: using governor ladder
[    0.785193] cpuidle: using governor menu
[    0.785282] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.785283] ACPI: bus type PCI registered
[    0.785283] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.785404] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.785405] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[    0.785415] PCI: Using configuration type 1 for base access
[    0.809537] HugeTLB registered 1 GB page size, pre-allocated 0 pages
[    0.809537] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.809839] ACPI: Added _OSI(Module Device)
[    0.809839] ACPI: Added _OSI(Processor Device)
[    0.809840] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.809840] ACPI: Added _OSI(Processor Aggregator Device)
[    0.812137] ACPI: Executed 21 blocks of module-level executable AML code
[    0.831541] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    0.835143] ACPI: Dynamic OEM Table Load:
[    0.835147] ACPI: SSDT 0xFFFF8804625B8800 0006E4 (v02 PmRef  Cpu0Ist  00003000 INTL 20120913)
[    0.835659] ACPI: \_PR_.CPU0: _OSC native thermal LVT Acked
[    0.838349] ACPI: Dynamic OEM Table Load:
[    0.838353] ACPI: SSDT 0xFFFF880464BD0800 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20120913)
[    0.839508] ACPI: Dynamic OEM Table Load:
[    0.839511] ACPI: SSDT 0xFFFF880464042800 0005AA (v02 PmRef  ApIst    00003000 INTL 20120913)
[    0.840488] ACPI: Dynamic OEM Table Load:
[    0.840491] ACPI: SSDT 0xFFFF880464037600 000119 (v02 PmRef  ApCst    00003000 INTL 20120913)
[    0.848932] ACPI: Interpreter enabled
[    0.848958] ACPI: (supports S0 S3 S4 S5)
[    0.848958] ACPI: Using IOAPIC for interrupt routing
[    0.849002] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.852279] ACPI: Power Resource [PG00] (on)
[    0.853037] ACPI: Power Resource [PG01] (on)
[    0.853751] ACPI: Power Resource [PG02] (on)
[    0.858006] ACPI: Power Resource [WRST] (off)
[    0.858733] ACPI: Power Resource [WRST] (off)
[    0.859463] ACPI: Power Resource [WRST] (off)
[    0.860184] ACPI: Power Resource [WRST] (off)
[    0.860906] ACPI: Power Resource [WRST] (off)
[    0.861641] ACPI: Power Resource [WRST] (off)
[    0.862363] ACPI: Power Resource [WRST] (off)
[    0.863104] ACPI: Power Resource [WRST] (off)
[    0.863824] ACPI: Power Resource [WRST] (off)
[    0.864547] ACPI: Power Resource [WRST] (off)
[    0.865268] ACPI: Power Resource [WRST] (off)
[    0.865997] ACPI: Power Resource [WRST] (off)
[    0.866724] ACPI: Power Resource [WRST] (off)
[    0.867459] ACPI: Power Resource [WRST] (off)
[    0.868180] ACPI: Power Resource [WRST] (off)
[    0.868897] ACPI: Power Resource [WRST] (off)
[    0.869617] ACPI: Power Resource [WRST] (off)
[    0.870340] ACPI: Power Resource [WRST] (off)
[    0.871059] ACPI: Power Resource [WRST] (off)
[    0.871778] ACPI: Power Resource [WRST] (off)
[    0.886352] ACPI: Power Resource [FN00] (off)
[    0.886513] ACPI: Power Resource [FN01] (off)
[    0.886673] ACPI: Power Resource [FN02] (off)
[    0.886831] ACPI: Power Resource [FN03] (off)
[    0.886989] ACPI: Power Resource [FN04] (off)
[    0.888940] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.888944] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.889022] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[    0.890390] PCI host bridge to bus 0000:00
[    0.890391] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.890393] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.890394] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.890395] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.890396] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.890397] pci_bus 0000:00: root bus resource [bus 00-fe]
[    0.890403] pci 0000:00:00.0: [8086:191f] type 00 class 0x060000
[    0.890947] pci 0000:00:14.0: [8086:a12f] type 00 class 0x0c0330
[    0.890962] pci 0000:00:14.0: reg 0x10: [mem 0xdff30000-0xdff3ffff 64bit]
[    0.891019] pci 0000:00:14.0: PME# supported from D3hot D3cold
[    0.891239] pci 0000:00:14.0: System wakeup disabled by ACPI
[    0.891324] pci 0000:00:16.0: [8086:a13a] type 00 class 0x078000
[    0.891336] pci 0000:00:16.0: reg 0x10: [mem 0xdff4d000-0xdff4dfff 64bit]
[    0.891382] pci 0000:00:16.0: PME# supported from D3hot
[    0.891647] pci 0000:00:17.0: [8086:a102] type 00 class 0x010601
[    0.891657] pci 0000:00:17.0: reg 0x10: [mem 0xdff48000-0xdff49fff]
[    0.891663] pci 0000:00:17.0: reg 0x14: [mem 0xdff4c000-0xdff4c0ff]
[    0.891668] pci 0000:00:17.0: reg 0x18: [io  0xf050-0xf057]
[    0.891674] pci 0000:00:17.0: reg 0x1c: [io  0xf040-0xf043]
[    0.891679] pci 0000:00:17.0: reg 0x20: [io  0xf020-0xf03f]
[    0.891684] pci 0000:00:17.0: reg 0x24: [mem 0xdff4b000-0xdff4b7ff]
[    0.891717] pci 0000:00:17.0: PME# supported from D3hot
[    0.891979] pci 0000:00:1b.0: [8086:a167] type 01 class 0x060400
[    0.892028] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.892297] pci 0000:00:1b.0: System wakeup disabled by ACPI
[    0.892381] pci 0000:00:1c.0: [8086:a110] type 01 class 0x060400
[    0.892431] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.892700] pci 0000:00:1c.0: System wakeup disabled by ACPI
[    0.892764] pci 0000:00:1c.2: [8086:a112] type 01 class 0x060400
[    0.892813] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
[    0.893083] pci 0000:00:1c.2: System wakeup disabled by ACPI
[    0.893161] pci 0000:00:1d.0: [8086:a118] type 01 class 0x060400
[    0.893212] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[    0.893477] pci 0000:00:1d.0: System wakeup disabled by ACPI
[    0.893570] pci 0000:00:1f.0: [8086:a145] type 00 class 0x060100
[    0.893903] pci 0000:00:1f.2: [8086:a121] type 00 class 0x058000
[    0.893912] pci 0000:00:1f.2: reg 0x10: [mem 0xdff44000-0xdff47fff]
[    0.894197] pci 0000:00:1f.3: [8086:a170] type 00 class 0x040300
[    0.894217] pci 0000:00:1f.3: reg 0x10: [mem 0xdff40000-0xdff43fff 64bit]
[    0.894244] pci 0000:00:1f.3: reg 0x20: [mem 0xdff20000-0xdff2ffff 64bit]
[    0.894288] pci 0000:00:1f.3: PME# supported from D3hot D3cold
[    0.894561] pci 0000:00:1f.3: System wakeup disabled by ACPI
[    0.894628] pci 0000:00:1f.4: [8086:a123] type 00 class 0x0c0500
[    0.894674] pci 0000:00:1f.4: reg 0x10: [mem 0xdff4a000-0xdff4a0ff 64bit]
[    0.894743] pci 0000:00:1f.4: reg 0x20: [io  0xf000-0xf01f]
[    0.895059] pci 0000:00:1f.6: [8086:15b8] type 00 class 0x020000
[    0.895078] pci 0000:00:1f.6: reg 0x10: [mem 0xdff00000-0xdff1ffff]
[    0.895178] pci 0000:00:1f.6: PME# supported from D0 D3hot D3cold
[    0.895385] pci 0000:00:1f.6: System wakeup disabled by ACPI
[    0.895553] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.895568] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.895578] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.895584] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.895591] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.895597] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.895662] pci 0000:01:00.0: supports D1 D2
[    0.895662] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.895697] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.895698] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.895707] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.895707] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.895718] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.895719] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.895772] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.905564] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.905569] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.905574] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.905582] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.905585] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
[    0.905722] pci 0000:02:00.0: [1b21:1242] type 00 class 0x0c0330
[    0.905741] pci 0000:02:00.0: reg 0x10: [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.905847] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    0.905901] pci 0000:02:00.0: System wakeup disabled by ACPI
[    0.917558] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.917561] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.917693] pci 0000:03:00.0: [1b21:1080] type 01 class 0x060400
[    0.917809] pci 0000:03:00.0: supports D1 D2
[    0.917810] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.917854] pci 0000:03:00.0: System wakeup disabled by ACPI
[    0.929581] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.929732] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.929879] acpiphp: Slot [1] registered
[    0.929882] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.932715] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[    0.932829] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.932941] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 11 12 14 *15)
[    0.933051] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.933161] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.933271] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.933381] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.933491] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *10 11 12 14 15)
[    0.934345] ACPI: Enabled 6 GPEs in block 00 to 7F
[    0.934627] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.934628] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.934629] vgaarb: loaded
[    0.934629] vgaarb: bridge control possible 0000:01:00.0
[    0.934900] SCSI subsystem initialized
[    0.934953] libata version 3.00 loaded.
[    0.934984] ACPI: bus type USB registered
[    0.935011] usbcore: registered new interface driver usbfs
[    0.935026] usbcore: registered new interface driver hub
[    0.935048] usbcore: registered new device driver usb
[    0.935177] PCI: Using ACPI for IRQ routing
[    0.962999] PCI: pci_cache_line_size set to 64 bytes
[    0.963036] e820: reserve RAM buffer [mem 0x0009c800-0x0009ffff]
[    0.963038] e820: reserve RAM buffer [mem 0x7d439000-0x7fffffff]
[    0.963039] e820: reserve RAM buffer [mem 0x7d4c5000-0x7fffffff]
[    0.963040] e820: reserve RAM buffer [mem 0x858a8000-0x87ffffff]
[    0.963041] e820: reserve RAM buffer [mem 0x476800000-0x477ffffff]
[    0.963197] NetLabel: Initializing
[    0.963197] NetLabel:  domain hash size = 128
[    0.963198] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.963216] NetLabel:  unlabeled traffic allowed by default
[    0.963343] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    0.963346] hpet0: 8 comparators, 64-bit 24.000000 MHz counter
[    0.965386] clocksource: Switched to clocksource hpet
[    0.975388] VFS: Disk quotas dquot_6.6.0
[    0.975425] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.975556] AppArmor: AppArmor Filesystem Enabled
[    0.975611] pnp: PnP ACPI init
[    0.975896] system 00:00: [io  0x0290-0x029f] has been reserved
[    0.975898] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.976370] pnp 00:01: [dma 0 disabled]
[    0.976436] pnp 00:01: Plug and Play ACPI device, IDs PNP0501 (active)
[    0.976677] system 00:02: [io  0x0680-0x069f] has been reserved
[    0.976679] system 00:02: [io  0xffff] has been reserved
[    0.976680] system 00:02: [io  0xffff] has been reserved
[    0.976681] system 00:02: [io  0xffff] has been reserved
[    0.976683] system 00:02: [io  0x1800-0x18fe] has been reserved
[    0.976684] system 00:02: [io  0x164e-0x164f] has been reserved
[    0.976685] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.976795] system 00:03: [io  0x0800-0x087f] has been reserved
[    0.976796] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.976838] pnp 00:04: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.976907] system 00:05: [io  0x1854-0x1857] has been reserved
[    0.976908] system 00:05: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.977298] system 00:06: [mem 0xfed10000-0xfed17fff] has been reserved
[    0.977300] system 00:06: [mem 0xfed18000-0xfed18fff] has been reserved
[    0.977301] system 00:06: [mem 0xfed19000-0xfed19fff] has been reserved
[    0.977303] system 00:06: [mem 0xe0000000-0xefffffff] has been reserved
[    0.977304] system 00:06: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.977306] system 00:06: [mem 0xfed90000-0xfed93fff] has been reserved
[    0.977307] system 00:06: [mem 0xfed45000-0xfed8ffff] has been reserved
[    0.977309] system 00:06: [mem 0xff000000-0xffffffff] has been reserved
[    0.977311] system 00:06: [mem 0xfee00000-0xfeefffff] could not be reserved
[    0.977313] system 00:06: [mem 0xdffc0000-0xdffdffff] has been reserved
[    0.977314] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.977407] system 00:07: [mem 0xfd000000-0xfdabffff] has been reserved
[    0.977408] system 00:07: [mem 0xfdad0000-0xfdadffff] has been reserved
[    0.977410] system 00:07: [mem 0xfdb00000-0xfdffffff] has been reserved
[    0.977412] system 00:07: [mem 0xfe000000-0xfe01ffff] could not be reserved
[    0.977413] system 00:07: [mem 0xfe036000-0xfe03bfff] has been reserved
[    0.977415] system 00:07: [mem 0xfe03d000-0xfe3fffff] has been reserved
[    0.977416] system 00:07: [mem 0xfe410000-0xfe7fffff] has been reserved
[    0.977417] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.979157] system 00:08: [mem 0xfdaf0000-0xfdafffff] has been reserved
[    0.979159] system 00:08: [mem 0xfdae0000-0xfdaeffff] has been reserved
[    0.979161] system 00:08: [mem 0xfdac0000-0xfdacffff] has been reserved
[    0.979162] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.980528] pnp: PnP ACPI: found 9 devices
[    0.988514] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.988542] pci 0000:00:1d.0: bridge window [io  0x1000-0x0fff] to [bus 05] add_size 1000
[    0.988543] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x000fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.988544] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x000fffff] to [bus 05] add_size 200000 add_align 100000
[    0.988548] pci 0000:00:1d.0: res[14]=[mem 0x00100000-0x000fffff] res_to_dev_res add_size 200000 min_align 100000
[    0.988549] pci 0000:00:1d.0: res[14]=[mem 0x00100000-0x002fffff] res_to_dev_res add_size 200000 min_align 100000
[    0.988550] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x000fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.988551] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.988551] pci 0000:00:1d.0: res[13]=[io  0x1000-0x0fff] res_to_dev_res add_size 1000 min_align 1000
[    0.988552] pci 0000:00:1d.0: res[13]=[io  0x1000-0x1fff] res_to_dev_res add_size 1000 min_align 1000
[    0.988554] pci 0000:00:1d.0: BAR 14: assigned [mem 0x88800000-0x889fffff]
[    0.988557] pci 0000:00:1d.0: BAR 15: assigned [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.988558] pci 0000:00:1d.0: BAR 13: assigned [io  0x2000-0x2fff]
[    0.988564] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.988564] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.988566] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.988567] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.988568] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.988569] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.988570] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.988572] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.988574] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.988576] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.988579] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.988581] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.988585] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.988598] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.988604] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.988605] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.988608] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.988609] pci 0000:00:1d.0:   bridge window [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.988614] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]
[    0.988615] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]
[    0.988615] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]
[    0.988616] pci_bus 0000:00: resource 7 [mem 0x88800000-0xdfffffff window]
[    0.988616] pci_bus 0000:00: resource 8 [mem 0xfd000000-0xfe7fffff window]
[    0.988617] pci_bus 0000:01: resource 0 [io  0xe000-0xefff]
[    0.988618] pci_bus 0000:01: resource 1 [mem 0xdfe00000-0xdfefffff]
[    0.988618] pci_bus 0000:01: resource 2 [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.988619] pci_bus 0000:02: resource 1 [mem 0xdfd00000-0xdfdfffff]
[    0.988620] pci_bus 0000:05: resource 0 [io  0x2000-0x2fff]
[    0.988620] pci_bus 0000:05: resource 1 [mem 0x88800000-0x889fffff]
[    0.988621] pci_bus 0000:05: resource 2 [mem 0x88a00000-0x88bfffff 64bit pref]
[    0.988812] NET: Registered protocol family 2
[    0.989011] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.989130] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[    0.989207] TCP: Hash tables configured (established 131072 bind 65536)
[    0.989229] UDP hash table entries: 8192 (order: 6, 262144 bytes)
[    0.989258] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes)
[    0.989349] NET: Registered protocol family 1
[    0.990037] pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    0.990715] PCI: CLS 0 bytes, default 64
[    0.990759] Trying to unpack rootfs image as initramfs...
[    1.718028] Freeing initrd memory: 70180K (ffff88002f6de000 - ffff880033b67000)
[    1.718030] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    1.718032] software IO TLB [mem 0x818a8000-0x858a8000] (64MB) mapped at [ffff8800818a8000-ffff8800858a7fff]
[    1.718247] RAPL PMU: API unit is 2^-32 Joules, 5 fixed counters, 655360 ms ovfl timer
[    1.718247] RAPL PMU: hw unit of domain pp0-core 2^-14 Joules
[    1.718248] RAPL PMU: hw unit of domain package 2^-14 Joules
[    1.718248] RAPL PMU: hw unit of domain dram 2^-14 Joules
[    1.718248] RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules
[    1.718249] RAPL PMU: hw unit of domain psys 2^-14 Joules
[    1.718830] Scanning for low memory corruption every 60 seconds
[    1.719405] futex hash table entries: 2048 (order: 5, 131072 bytes)
[    1.719433] audit: initializing netlink subsys (disabled)
[    1.719449] audit: type=2000 audit(1495613959.684:1): initialized
[    1.720201] Initialise system trusted keyrings
[    1.720332] workingset: timestamp_bits=40 max_order=22 bucket_order=0
[    1.724845] fuse init (API version 7.26)
[    1.726239] Key type asymmetric registered
[    1.726239] Asymmetric key parser 'x509' registered
[    1.726302] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    1.726356] io scheduler noop registered
[    1.726356] io scheduler deadline registered (default)
[    1.726364] io scheduler cfq registered
[    1.726855] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    1.726862] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    1.726903] efifb: probing for efifb
[    1.726905] efifb: framebuffer at 0xa0000, using 64k, total 64k
[    1.726906] efifb: mode is 640x480x1, linelength=80, pages=1
[    1.726906] efifb: scrolling: redraw
[    1.726907] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.727650] Console: switching to colour frame buffer device 80x30
[    1.728271] fb0: EFI VGA frame buffer device
[    1.728279] intel_idle: MWAIT substates: 0x142120
[    1.728280] intel_idle: v0.4.1 model 0x5E
[    1.728997] intel_idle: lapic_timer_reliable_states 0xffffffff
[    1.729007] ipmi message handler version 39.2
[    1.729113] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0
[    1.729115] ACPI: Sleep Button [SLPB]
[    1.729175] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[    1.729177] ACPI: Power Button [PWRB]
[    1.729238] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[    1.729240] ACPI: Power Button [PWRF]
[    1.731017] thermal LNXTHERM:00: registered as thermal_zone0
[    1.731017] ACPI: Thermal Zone [TZ00] (28 C)
[    1.731359] thermal LNXTHERM:01: registered as thermal_zone1
[    1.731360] ACPI: Thermal Zone [TZ01] (30 C)
[    1.731392] GHES: HEST is not enabled!
[    1.731528] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    1.752068] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    1.755190] Linux agpgart interface v0.103
[    1.761140] brd: module loaded
[    1.764940] loop: module loaded
[    1.765379] libphy: Fixed MDIO Bus: probed
[    1.765795] tun: Universal TUN/TAP device driver, 1.6
[    1.765795] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
[    1.765974] PPP generic driver version 2.4.2
[    1.766055] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.766058] ehci-pci: EHCI PCI platform driver
[    1.766071] ehci-platform: EHCI generic platform driver
[    1.766081] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.766082] ohci-pci: OHCI PCI platform driver
[    1.766095] ohci-platform: OHCI generic platform driver
[    1.766103] uhci_hcd: USB Universal Host Controller Interface driver
[    1.766291] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.766297] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[    1.767379] xhci_hcd 0000:00:14.0: hcc params 0x200077c1 hci version 0x100 quirks 0x00109810
[    1.767382] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[    1.767494] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.767494] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.767495] usb usb1: Product: xHCI Host Controller
[    1.767496] usb usb1: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.767496] usb usb1: SerialNumber: 0000:00:14.0
[    1.767690] hub 1-0:1.0: USB hub found
[    1.767707] hub 1-0:1.0: 16 ports detected
[    1.782526] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.782530] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 2
[    1.782572] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    1.782573] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.782574] usb usb2: Product: xHCI Host Controller
[    1.782574] usb usb2: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.782575] usb usb2: SerialNumber: 0000:00:14.0
[    1.782783] hub 2-0:1.0: USB hub found
[    1.782796] hub 2-0:1.0: 10 ports detected
[    1.792243] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.792248] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 3
[    1.851013] xhci_hcd 0000:02:00.0: hcc params 0x0200eec1 hci version 0x110 quirks 0x00000010
[    1.851354] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    1.851355] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.851355] usb usb3: Product: xHCI Host Controller
[    1.851356] usb usb3: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.851357] usb usb3: SerialNumber: 0000:02:00.0
[    1.851565] hub 3-0:1.0: USB hub found
[    1.851573] hub 3-0:1.0: 2 ports detected
[    1.851699] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.851703] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 4
[    1.851730] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.851756] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003
[    1.851757] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.851757] usb usb4: Product: xHCI Host Controller
[    1.851758] usb usb4: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.851758] usb usb4: SerialNumber: 0000:02:00.0
[    1.851966] hub 4-0:1.0: USB hub found
[    1.851974] hub 4-0:1.0: 2 ports detected
[    1.852143] i8042: PNP: No PS/2 controller found. Probing ports directly.
[    1.855497] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.855500] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.855785] mousedev: PS/2 mouse device common for all mice
[    1.856191] rtc_cmos 00:04: RTC can wake from S4
[    1.856638] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0
[    1.856718] rtc_cmos 00:04: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[    1.856791] device-mapper: uevent: version 1.0.3
[    1.856943] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: dm-devel@redhat.com
[    1.856945] intel_pstate: Intel P-state driver initializing
[    1.857758] intel_pstate: HWP enabled
[    1.858161] ledtrig-cpu: registered to indicate activity on CPUs
[    1.858452] NET: Registered protocol family 10
[    1.858947] NET: Registered protocol family 17
[    1.858954] Key type dns_resolver registered
[    1.859438] microcode: sig=0x506e3, pf=0x2, revision=0x33
[    1.859844] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[    1.860185] registered taskstats version 1
[    1.860186] Loading compiled-in X.509 certificates
[    1.862555] Loaded X.509 cert 'Build time autogenerated kernel key: 425e568c95731e69b073bb62214af700479a67a7'
[    1.862699] kmemleak: Kernel memory leak detector initialized
[    1.862708] kmemleak: Automatic memory scanning thread started
[    1.864477] Key type trusted registered
[    1.868227] Key type encrypted registered
[    1.868229] AppArmor: AppArmor sha1 policy hashing enabled
[    1.868231] ima: No TPM chip found, activating TPM-bypass!
[    1.868248] evm: HMAC attrs: 0x1
[    1.869640]   Magic number: 1:914:321
[    1.869674] tty tty46: hash matches
[    1.869877] rtc_cmos 00:04: setting system clock to 2017-05-24 08:19:20 UTC (1495613960)
[    1.870098] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    1.870099] EDD information not available.
[    1.870231] PM: Hibernation image not present or could not be loaded.
[    1.871058] Freeing unused kernel memory: 2220K (ffffffff81d6b000 - ffffffff81f96000)
[    1.871059] Write protecting the kernel read-only data: 12288k
[    1.871237] Freeing unused kernel memory: 84K (ffff8800017eb000 - ffff880001800000)
[    1.871845] Freeing unused kernel memory: 428K (ffff880001b95000 - ffff880001c00000)
[    1.880495] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.880558] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.880565] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.880885] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.880919] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.881965] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.882004] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.882510] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.882548] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.882584] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.915314] hid: module verification failed: signature and/or required key missing - tainting kernel
[    1.915699] hidraw: raw HID events driver (C) Jiri Kosina
[    1.919698] wmi: Mapper loaded
[    1.934870] ahci 0000:00:17.0: version 3.0
[    1.936657] pps_core: LinuxPPS API ver. 1 registered
[    1.936657] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.937027] PTP clock support registered
[    1.937893] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.937893] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    1.945531] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 6 ports 6 Gbps 0x3f impl SATA mode
[    1.945532] ahci 0000:00:17.0: flags: 64bit ncq sntf led clo only pio slum part ems deso sadm sds apst 
[    2.007163] scsi host0: ahci
[    2.007580] scsi host1: ahci
[    2.007992] scsi host2: ahci
[    2.008366] scsi host3: ahci
[    2.008610] scsi host4: ahci
[    2.008900] scsi host5: ahci
[    2.008999] ata1: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b100 irq 129
[    2.009003] ata2: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b180 irq 129
[    2.009007] ata3: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b200 irq 129
[    2.009012] ata4: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b280 irq 129
[    2.009016] ata5: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b300 irq 129
[    2.009021] ata6: SATA max UDMA/133 abar m2048@0xdff4b000 port 0xdff4b380 irq 129
[    2.009531] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    2.109549] usb 1-10: new full-speed USB device number 2 using xhci_hcd
[    2.252600] usb 1-10: New USB device found, idVendor=046d, idProduct=c534
[    2.252601] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.252601] usb 1-10: Product: USB Receiver
[    2.252602] usb 1-10: Manufacturer: Logitech
[    2.257549] usbcore: registered new interface driver usbhid
[    2.257550] usbhid: USB HID core driver
[    2.258442] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/0003:046D:C534.0001/input/input6
[    2.289284] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[    2.318000] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-10/input0
[    2.318199] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/0003:046D:C534.0002/input/input7
[    2.325110] CPU: 1 PID: 214 Comm: scsi_eh_2 Tainted: G            E   4.9.0-custom #2
[    2.325113] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325115]  ffffc90001f23ae8 ffffffff813c2d3f ffff8804520a1e80 ffff8804520a22b0
[    2.325122]  ffffc90001f23b10 ffffffff815a7226 ffffc90001f23b10 0000000000000286
[    2.325127]  ffffc90000029200 ffffc90001f23b30 ffffffffa0055634 ffff8804520a1e80
[    2.325132] Call Trace:
[    2.325143]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325161]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325163]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325165]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325166]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325167]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325168]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325169]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325170]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325171]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325172]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325173]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325174]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325175]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325176]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325177]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325179]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.325180]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325181]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325183]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325183]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325185]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325186]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325187]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325188]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325189]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325189]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325191]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325194] ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.325549] CPU: 2 PID: 218 Comm: scsi_eh_4 Tainted: G            E   4.9.0-custom #2
[    2.325550] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325550]  ffffc90001f43ae8 ffffffff813c2d3f ffff8804520a9e80 ffff8804520aa2b0
[    2.325552]  ffffc90001f43b10 ffffffff815a7226 ffffc90001f43b10 0000000000000286
[    2.325553]  ffffc90000029300 ffffc90001f43b30 ffffffffa0055634 ffff8804520a9e80
[    2.325554] Call Trace:
[    2.325556]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325558]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325559]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325561]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325562]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325563]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325565]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325566]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325568]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325569]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325570]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325571]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325572]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325574]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325574]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325576]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325577]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.325578]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325580]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325581]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325582]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325583]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325584]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325585]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325586]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325587]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325588]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325589]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325593] ata5: SATA link down (SStatus 4 SControl 300)
[    2.325613] CPU: 6 PID: 220 Comm: scsi_eh_5 Tainted: G            E   4.9.0-custom #2
[    2.325613] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325614]  ffffc90001f53ae8 ffffffff813c2d3f ffff8804520ade80 ffff8804520ae2b0
[    2.325615]  ffffc90001f53b10 ffffffff815a7226 ffffc90001f53b10 0000000000000286
[    2.325616]  ffffc90000029380 ffffc90001f53b30 ffffffffa0055634 ffff8804520ade80
[    2.325617] Call Trace:
[    2.325618]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325619]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325620]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325621]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325622]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325623]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325624]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325625]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325626]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325627]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325628]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325629]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325630]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325631]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325632]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325633]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325634]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.325635]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325636]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325637]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325638]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325639]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325640]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325641]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325642]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325643]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325643]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325644]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325647] ata6: SATA link down (SStatus 4 SControl 300)
[    2.325740] CPU: 7 PID: 212 Comm: scsi_eh_1 Tainted: G            E   4.9.0-custom #2
[    2.325740] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325741]  ffffc90001f03ae8 ffffffff813c2d3f ffff88045209de80 ffff88045209e2b0
[    2.325754]  ffffc90001f03b10 ffffffff815a7226 ffffc90001f03b10 0000000000000286
[    2.325756]  ffffc90000029180 ffffc90001f03b30 ffffffffa0055634 ffff88045209de80
[    2.325757] Call Trace:
[    2.325759]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325760]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325762]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325763]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325764]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325765]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325766]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325767]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325768]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325769]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325770]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325771]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325772]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325773]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325774]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325775]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325777]  [<ffffffff810c6fd1>] ? mutex_optimistic_spin+0x111/0x1a0
[    2.325778]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325779]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325780]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325781]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325782]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325783]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325784]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325785]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325786]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325787]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325788]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325792] ata2: SATA link down (SStatus 4 SControl 300)
[    2.325812] CPU: 4 PID: 210 Comm: scsi_eh_0 Tainted: G            E   4.9.0-custom #2
[    2.325813] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325813]  ffffc90001ef3ae8 ffffffff813c2d3f ffff88045399de80 ffff88045399e2b0
[    2.325815]  ffffc90001ef3b10 ffffffff815a7226 ffffc90001ef3b10 0000000000000286
[    2.325816]  ffffc90000029100 ffffc90001ef3b30 ffffffffa0055634 ffff88045399de80
[    2.325817] Call Trace:
[    2.325820]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325821]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325822]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325824]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325837]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325839]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325840]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325841]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325842]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325843]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325844]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325845]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325847]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325848]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325848]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325850]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325863]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.325865]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325866]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325867]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325868]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325869]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325870]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325871]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325873]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325873]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325874]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325876]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325879] ata1: SATA link down (SStatus 4 SControl 300)
[    2.325899] CPU: 0 PID: 216 Comm: scsi_eh_3 Tainted: G            E   4.9.0-custom #2
[    2.325899] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.325900]  ffffc90001f33ae8 ffffffff813c2d3f ffff8804520a5e80 ffff8804520a62b0
[    2.325901]  ffffc90001f33b10 ffffffff815a7226 ffffc90001f33b10 0000000000000286
[    2.325902]  ffffc90000029280 ffffc90001f33b30 ffffffffa0055634 ffff8804520a5e80
[    2.325903] Call Trace:
[    2.325904]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.325905]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.325906]  [<ffffffffa0055634>] ahci_postreset+0x34/0x60 [libahci]
[    2.325907]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.325908]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325909]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325910]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325911]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325912]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325913]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325914]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.325915]  [<ffffffffa0055600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.325916]  [<ffffffffa0057350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.325917]  [<ffffffffa0056e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.325917]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.325918]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.325919]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.325921]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.325922]  [<ffffffffa0055de8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.325923]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.325924]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.325925]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325926]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.325926]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325927]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.325928]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.325929]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.325930]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.325933] ata4: SATA link down (SStatus 4 SControl 300)
[    2.326373] ata3.00: ATA-8: ST3500413AS, JC45, max UDMA/133
[    2.326374] ata3.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.327911] ata3.00: configured for UDMA/133
[    2.328381] scsi 2:0:0:0: Direct-Access     ATA      ST3500413AS      JC45 PQ: 0 ANSI: 5
[    2.377744] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 30:5a:3a:e0:7f:4d
[    2.377745] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[    2.377818] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[    2.377883] hid-generic 0003:046D:C534.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-10/input1
[    2.378786] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[    2.385815] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[    2.385886] sd 2:0:0:0: Attached scsi generic sg0 type 0
[    2.386123] sd 2:0:0:0: [sda] Write Protect is off
[    2.386125] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.386270] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.418509]  sda: sda1 sda2 < sda5 >
[    2.420063] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.749441] tsc: Refined TSC clocksource calibration: 3407.999 MHz
[    2.749456] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x311fd336761, max_idle_ns: 440795243819 ns
[    2.764787] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[    2.817394] random: fast init done
[    3.657801] systemd[1]: systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
[    3.657924] systemd[1]: Detected architecture x86-64.
[    3.665736] systemd[1]: Set hostname to <jenkins-MS-7984>.
[    3.773854] clocksource: Switched to clocksource tsc
[    4.330579] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    4.330628] systemd[1]: Listening on Journal Socket.
[    4.330655] systemd[1]: Listening on udev Control Socket.
[    4.330698] systemd[1]: Listening on Journal Audit Socket.
[    4.330717] systemd[1]: Listening on Journal Socket (/dev/log).
[    4.330742] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    4.330831] systemd[1]: Created slice System Slice.
[    4.978280] random: crng init done
[    5.119195] lp: driver loaded but no devices found
[    5.126984] ppdev: user-space parallel port driver
[    5.194790] RPC: Registered named UNIX socket transport module.
[    5.194790] RPC: Registered udp transport module.
[    5.194791] RPC: Registered tcp transport module.
[    5.194791] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    5.428972] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
[    5.788951] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[    6.085037] systemd-journald[286]: Received request to flush runtime journal from PID 1
[    6.340341] mei_me 0000:00:16.0: enabling device (0000 -> 0002)
[    6.407237] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    6.598269] AVX2 version of gcm_enc/dec engaged.
[    6.598269] AES CTR mode by8 optimization enabled
[    7.262871] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC892: line_outs=3 (0x14/0x15/0x16/0x0/0x0) type:line
[    7.262873] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.262874] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x1b/0x0/0x0/0x0/0x0)
[    7.262874] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    7.262875] snd_hda_codec_realtek hdaudioC0D0:    dig-out=0x11/0x1e
[    7.262875] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    7.262876] snd_hda_codec_realtek hdaudioC0D0:      Front Mic=0x19
[    7.262877] snd_hda_codec_realtek hdaudioC0D0:      Rear Mic=0x18
[    7.262877] snd_hda_codec_realtek hdaudioC0D0:      Line=0x1a
[    7.274944] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input8
[    7.275046] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input9
[    7.275160] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1f.3/sound/card0/input10
[    7.275266] input: HDA Intel PCH Line Out Front as /devices/pci0000:00/0000:00:1f.3/sound/card0/input11
[    7.275397] input: HDA Intel PCH Line Out Surround as /devices/pci0000:00/0000:00:1f.3/sound/card0/input12
[    7.275499] input: HDA Intel PCH Line Out CLFE as /devices/pci0000:00/0000:00:1f.3/sound/card0/input13
[    7.275602] input: HDA Intel PCH Front Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input14
[    8.008061] intel_rapl: Found RAPL domain package
[    8.008063] intel_rapl: Found RAPL domain core
[    8.008065] intel_rapl: Found RAPL domain dram
[    8.662199] asus_wmi: ASUS WMI generic driver loaded
[    8.666571] asus_wmi: Initialization: 0x0
[    8.666640] asus_wmi: BIOS WMI version: 0.9
[    8.666771] asus_wmi: SFUN value: 0x0
[    8.667845] input: Eee PC WMI hotkeys as /devices/platform/eeepc-wmi/input/input15
[    8.668069] asus_wmi: Number of fans: 1
[    8.863966] audit: type=1400 audit(1495613967.488:2): apparmor="STATUS" operation="profile_load" name="/usr/sbin/ippusbxd" pid=761 comm="apparmor_parser"
[    8.866778] audit: type=1400 audit(1495613967.492:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine" pid=758 comm="apparmor_parser"
[    8.866783] audit: type=1400 audit(1495613967.492:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=758 comm="apparmor_parser"
[    8.992068] audit: type=1400 audit(1495613967.620:5): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session" pid=753 comm="apparmor_parser"
[    8.992073] audit: type=1400 audit(1495613967.620:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session//chromium" pid=753 comm="apparmor_parser"
[    9.001482] audit: type=1400 audit(1495613967.628:7): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cups-browsed" pid=759 comm="apparmor_parser"
[    9.002052] audit: type=1400 audit(1495613967.628:8): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=760 comm="apparmor_parser"
[    9.002070] audit: type=1400 audit(1495613967.628:9): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=760 comm="apparmor_parser"
[    9.002074] audit: type=1400 audit(1495613967.628:10): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd//third_party" pid=760 comm="apparmor_parser"
[    9.018830] audit: type=1400 audit(1495613967.644:11): apparmor="STATUS" operation="profile_load" name="/usr/sbin/tcpdump" pid=768 comm="apparmor_parser"
[    9.546141] Adding 8348668k swap on /dev/sda5.  Priority:-1 extents:1 across:8348668k FS
[   13.779112] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[   13.788162] NFSD: starting 90-second grace period (net ffffffff81d06400)
[   14.722383] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   14.937673] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   17.921145] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[   17.921147] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
[   17.921193] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s31f6: link becomes ready

===============================================================================================
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150] (prog-if 00 [VGA controller])
	Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150]
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 11
	Region 0: Memory at c0000000 (64-bit, prefetchable) [size=256M]
	Region 2: Memory at d0000000 (64-bit, prefetchable) [size=2M]
	Region 4: I/O ports at e000 [size=256]
	Region 5: Memory at dfe00000 (32-bit, non-prefetchable) [size=256K]
	Expansion ROM at 000c0000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 256 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 8GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
			 EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
	Capabilities: [a0] MSI: Enable- Count=1/4 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
	Capabilities: [200 v1] #15
	Capabilities: [270 v1] #19
	Capabilities: [2b0 v1] Address Translation Service (ATS)
		ATSCap:	Invalidate Queue Depth: 00
		ATSCtl:	Enable-, Smallest Translation Unit: 00
	Capabilities: [2c0 v1] #13
	Capabilities: [2d0 v1] #1b
	Capabilities: [328 v1] Alternative Routing-ID Interpretation (ARI)
		ARICap:	MFVC- ACS-, Next Function: 0
		ARICtl:	MFVC- ACS-, Function Group: 0
	Capabilities: [330 v1] Single Root I/O Virtualization (SR-IOV)
		IOVCap:	Migration-, Interrupt Message Number: 000
		IOVCtl:	Enable- Migration- Interrupt- MSE- ARIHierarchy+
		IOVSta:	Migration-
		Initial VFs: 8, Total VFs: 8, Number of VFs: 0, Function Dependency Link: 00
		VF offset: 256, stride: 1, Device ID: 692f
		Supported Page Size: 00000553, System Page Size: 00000001
		Region 0: Memory at 0000000000000000 (64-bit, prefetchable)
		Region 2: Memory at 0000000000000000 (64-bit, prefetchable)
		VF Migration: offset: 00000000, BIR: 0
	Capabilities: [400 v1] Vendor Specific Information: ID=0002 Rev=1 Len=070 <?>
	Kernel modules: amdgpu


[-- Attachment #3: enable_above_4G_decoding.txt --]
[-- Type: text/plain, Size: 76255 bytes --]

[    0.000000] Linux version 4.9.0-custom (root@rexzhu) (gcc version 4.8.2 (GCC) ) #2 SMP Fri Mar 31 12:52:40 CST 2017
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
[    0.000000] x86/fpu: Enabled xstate features 0x1f, context size is 960 bytes, using 'compacted' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009c7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009c800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007d438fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d439000-0x000000007d439fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007d43a000-0x000000007d483fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007d484000-0x000000007d4c4fff] usable
[    0.000000] BIOS-e820: [mem 0x000000007d4c5000-0x000000007db49fff] reserved
[    0.000000] BIOS-e820: [mem 0x000000007db4a000-0x00000000858a7fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000858a8000-0x0000000086db6fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000086db7000-0x0000000086deffff] ACPI data
[    0.000000] BIOS-e820: [mem 0x0000000086df0000-0x000000008774bfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000008774c000-0x0000000087ffefff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000087fff000-0x0000000087ffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000088000000-0x00000000880fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fe000000-0x00000000fe010fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000004767fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 3.0 present.
[    0.000000] DMI: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] e820: last_pfn = 0x476800 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 00C0000000 mask 7FC0000000 uncachable
[    0.000000]   1 base 00A0000000 mask 7FE0000000 uncachable
[    0.000000]   2 base 0090000000 mask 7FF0000000 uncachable
[    0.000000]   3 base 008C000000 mask 7FFC000000 uncachable
[    0.000000]   4 base 008A000000 mask 7FFE000000 uncachable
[    0.000000]   5 base 0089000000 mask 7FFF000000 uncachable
[    0.000000]   6 base 0088800000 mask 7FFF800000 uncachable
[    0.000000]   7 base 0800000000 mask 7800000000 uncachable
[    0.000000]   8 base 0FC0000000 mask 7FC0000000 uncachable
[    0.000000]   9 disabled
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] e820: last_pfn = 0x88000 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [mem 0x000fcc60-0x000fcc6f] mapped at [ffff8800000fcc60]
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] Base memory trampoline at [ffff880000096000] 96000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] BRK [0x020c7000, 0x020c7fff] PGTABLE
[    0.000000] BRK [0x020c8000, 0x020c8fff] PGTABLE
[    0.000000] BRK [0x020c9000, 0x020c9fff] PGTABLE
[    0.000000] BRK [0x020ca000, 0x020cafff] PGTABLE
[    0.000000] BRK [0x020cb000, 0x020cbfff] PGTABLE
[    0.000000] BRK [0x020cc000, 0x020ccfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x2f6de000-0x33b66fff]
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F0580 000024 (v02 ALASKA)
[    0.000000] ACPI: XSDT 0x0000000086DC2098 0000AC (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FACP 0x0000000086DE5038 00010C (v05 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: DSDT 0x0000000086DC21E0 022E52 (v02 ALASKA A M I    01072009 INTL 20120913)
[    0.000000] ACPI: FACS 0x000000008774BF80 000040
[    0.000000] ACPI: APIC 0x0000000086DE5148 0000BC (v03 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FPDT 0x0000000086DE5208 000044 (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: FIDT 0x0000000086DE5250 00009C (v01 ALASKA A M I    01072009 AMI  00010013)
[    0.000000] ACPI: MCFG 0x0000000086DE52F0 00003C (v01 ALASKA A M I    01072009 MSFT 00000097)
[    0.000000] ACPI: HPET 0x0000000086DE5330 000038 (v01 ALASKA A M I    01072009 AMI. 0005000B)
[    0.000000] ACPI: SSDT 0x0000000086DE5368 00036D (v01 SataRe SataTabl 00001000 INTL 20120913)
[    0.000000] ACPI: LPIT 0x0000000086DE56D8 000094 (v01 INTEL  SKL      00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE5770 000248 (v02 INTEL  sensrhub 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE59B8 002BAE (v02 INTEL  PtidDevc 00001000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE8568 000C45 (v02 INTEL  Ther_Rvp 00001000 INTL 20120913)
[    0.000000] ACPI: DBGP 0x0000000086DE91B0 000034 (v01 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: DBG2 0x0000000086DE91E8 000054 (v00 INTEL           00000000 MSFT 0000005F)
[    0.000000] ACPI: SSDT 0x0000000086DE9240 0006FD (v02 INTEL  xh_rvp08 00000000 INTL 20120913)
[    0.000000] ACPI: SSDT 0x0000000086DE9940 005271 (v02 SaSsdt SaSsdt   00003000 INTL 20120913)
[    0.000000] ACPI: UEFI 0x0000000086DEEBB8 000042 (v01                 00000000      00000000)
[    0.000000] ACPI: SSDT 0x0000000086DEEC00 000E58 (v02 CpuRef CpuSsdt  00003000 INTL 20120913)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x00000004767fffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x4767f8000-0x4767fbfff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009bfff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000007d438fff]
[    0.000000]   node   0: [mem 0x000000007d484000-0x000000007d4c4fff]
[    0.000000]   node   0: [mem 0x000000007db4a000-0x00000000858a7fff]
[    0.000000]   node   0: [mem 0x0000000087fff000-0x0000000087ffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x00000004767fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x00000004767fffff]
[    0.000000] On node 0 totalpages: 4176244
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 3995 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 8456 pages used for memmap
[    0.000000]   DMA32 zone: 541145 pages, LIFO batch:31
[    0.000000]   Normal zone: 56736 pages used for memmap
[    0.000000]   Normal zone: 3631104 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x1808
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a701 base: 0xfed00000
[    0.000000] smpboot: Allowing 8 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009c000-0x0009cfff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d439000-0x7d439fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d43a000-0x7d483fff]
[    0.000000] PM: Registered nosave memory: [mem 0x7d4c5000-0x7db49fff]
[    0.000000] PM: Registered nosave memory: [mem 0x858a8000-0x86db6fff]
[    0.000000] PM: Registered nosave memory: [mem 0x86db7000-0x86deffff]
[    0.000000] PM: Registered nosave memory: [mem 0x86df0000-0x8774bfff]
[    0.000000] PM: Registered nosave memory: [mem 0x8774c000-0x87ffefff]
[    0.000000] PM: Registered nosave memory: [mem 0x88000000-0x880fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x88100000-0xdfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xe0000000-0xefffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xf0000000-0xfdffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe000000-0xfe010fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfe011000-0xfebfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec00000-0xfec00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfec01000-0xfedfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xfeffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xff000000-0xffffffff]
[    0.000000] e820: [mem 0x88100000-0xdfffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] percpu: Embedded 36 pages/cpu @ffff880476400000 s108056 r8192 d31208 u262144
[    0.000000] pcpu-alloc: s108056 r8192 d31208 u262144 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 4110967
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-custom root=UUID=900c4a92-9f8e-44be-86bc-9673dd3b0d78 ro console=ttyS0,115200,8N1 console=tty0 no_console_suspend quiet splash vt.handoff=7
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 16288164K/16704976K available (8091K kernel code, 1445K rwdata, 3668K rodata, 2220K init, 1180K bss, 416812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] 	Build-time adjustment of leaf fanout to 64.
[    0.000000] 	RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=8
[    0.000000] NR_IRQS:16640 nr_irqs:2048 16
[    0.000000] 	Offload RCU callbacks from all CPUs
[    0.000000] 	Offload RCU callbacks from CPUs: 0-7.
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] console [ttyS0] enabled
[    0.000000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635855245 ns
[    0.000000] hpet clockevent registered
[    0.000000] tsc: Detected 3400.000 MHz processor
[    0.000015] Calibrating delay loop (skipped), value calculated using timer frequency.. 6816.00 BogoMIPS (lpj=13632000)
[    0.000016] pid_max: default: 32768 minimum: 301
[    0.000035] ACPI: Core revision 20160831
[    0.049186] ACPI Error: [\_SB_.PCI0.XHC_.RHUB.HS11] Namespace lookup failure, AE_NOT_FOUND (20160831/dswload-210)
[    0.059664] ACPI Exception: AE_NOT_FOUND, During name lookup/catalog (20160831/psobject-227)
[    0.068398] ACPI Exception: AE_NOT_FOUND, (SSDT:xh_rvp08) while loading table (20160831/tbxfload-228)
[    0.089683] ACPI Error: 1 table load failures, 7 successful (20160831/tbxfload-246)
[    0.097611] Security Framework initialized
[    0.097612] Yama: becoming mindful.
[    0.097622] AppArmor: AppArmor initialized
[    0.098204] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes)
[    0.100184] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.101038] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101049] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes)
[    0.101417] CPU: Physical Processor ID: 0
[    0.101417] CPU: Processor Core ID: 0
[    0.101420] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[    0.101420] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[    0.101424] mce: CPU supports 10 MCE banks
[    0.101431] CPU0: Thermal monitoring enabled (TM1)
[    0.101445] process: using mwait in idle threads
[    0.101447] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8
[    0.101447] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4
[    0.101701] Freeing SMP alternatives memory: 32K (ffffffff81f96000 - ffffffff81f9e000)
[    0.132993] ftrace: allocating 32207 entries in 126 pages
[    0.141962] smpboot: APIC(0) Converting physical 0 to logical package 0
[    0.141963] smpboot: Max logical packages: 2
[    0.143163] x2apic: IRQ remapping doesn't support X2APIC mode
[    0.146364] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0
[    0.186052] TSC deadline timer enabled
[    0.186057] smpboot: CPU0: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (family: 0x6, model: 0x5e, stepping: 0x3)
[    0.186059] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[    0.186082] ... version:                4
[    0.186083] ... bit width:              48
[    0.186083] ... generic registers:      4
[    0.186083] ... value mask:             0000ffffffffffff
[    0.186084] ... max period:             00007fffffffffff
[    0.186084] ... fixed-purpose events:   3
[    0.186084] ... event mask:             000000070000000f
[    0.186786] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[    0.186895] x86: Booting SMP configuration:
[    0.186895] .... node  #0, CPUs:      #1 #2 #3 #4 #5 #6 #7
[    0.748208] x86: Booted up 1 node, 8 CPUs
[    0.748209] smpboot: Total of 8 processors activated (54535.47 BogoMIPS)
[    0.755115] devtmpfs: initialized
[    0.755228] x86/mm: Memory block size: 128MB
[    0.759773] evm: security.selinux
[    0.759773] evm: security.SMACK64
[    0.759774] evm: security.ima
[    0.759774] evm: security.capability
[    0.759825] PM: Registering ACPI NVS region [mem 0x7d439000-0x7d439fff] (4096 bytes)
[    0.759826] PM: Registering ACPI NVS region [mem 0x86df0000-0x8774bfff] (9814016 bytes)
[    0.760617] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.760662] pinctrl core: initialized pinctrl subsystem
[    0.760895] RTC time:  8:08:46, date: 05/24/17
[    0.761005] NET: Registered protocol family 16
[    0.786816] cpuidle: using governor ladder
[    0.794610] cpuidle: using governor menu
[    0.794698] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    0.794698] ACPI: bus type PCI registered
[    0.794699] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.794820] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
[    0.794821] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in E820
[    0.794832] PCI: Using configuration type 1 for base access
[    0.818955] HugeTLB registered 1 GB page size, pre-allocated 0 pages
[    0.818955] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.819255] ACPI: Added _OSI(Module Device)
[    0.819255] ACPI: Added _OSI(Processor Device)
[    0.819256] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.819256] ACPI: Added _OSI(Processor Aggregator Device)
[    0.821558] ACPI: Executed 21 blocks of module-level executable AML code
[    0.840956] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[    0.844557] ACPI: Dynamic OEM Table Load:
[    0.844562] ACPI: SSDT 0xFFFF8804625B9000 0006E4 (v02 PmRef  Cpu0Ist  00003000 INTL 20120913)
[    0.845071] ACPI: \_PR_.CPU0: _OSC native thermal LVT Acked
[    0.847755] ACPI: Dynamic OEM Table Load:
[    0.847759] ACPI: SSDT 0xFFFF880464BC8800 00037F (v02 PmRef  Cpu0Cst  00003001 INTL 20120913)
[    0.848912] ACPI: Dynamic OEM Table Load:
[    0.848916] ACPI: SSDT 0xFFFF880464042800 0005AA (v02 PmRef  ApIst    00003000 INTL 20120913)
[    0.849903] ACPI: Dynamic OEM Table Load:
[    0.849906] ACPI: SSDT 0xFFFF880462178000 000119 (v02 PmRef  ApCst    00003000 INTL 20120913)
[    0.858413] ACPI: Interpreter enabled
[    0.858438] ACPI: (supports S0 S3 S4 S5)
[    0.858439] ACPI: Using IOAPIC for interrupt routing
[    0.858482] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.861749] ACPI: Power Resource [PG00] (on)
[    0.862513] ACPI: Power Resource [PG01] (on)
[    0.863229] ACPI: Power Resource [PG02] (on)
[    0.867462] ACPI: Power Resource [WRST] (off)
[    0.868183] ACPI: Power Resource [WRST] (off)
[    0.868898] ACPI: Power Resource [WRST] (off)
[    0.869617] ACPI: Power Resource [WRST] (off)
[    0.870337] ACPI: Power Resource [WRST] (off)
[    0.871065] ACPI: Power Resource [WRST] (off)
[    0.871782] ACPI: Power Resource [WRST] (off)
[    0.872516] ACPI: Power Resource [WRST] (off)
[    0.873231] ACPI: Power Resource [WRST] (off)
[    0.873948] ACPI: Power Resource [WRST] (off)
[    0.874665] ACPI: Power Resource [WRST] (off)
[    0.875386] ACPI: Power Resource [WRST] (off)
[    0.876103] ACPI: Power Resource [WRST] (off)
[    0.876826] ACPI: Power Resource [WRST] (off)
[    0.877549] ACPI: Power Resource [WRST] (off)
[    0.878268] ACPI: Power Resource [WRST] (off)
[    0.878985] ACPI: Power Resource [WRST] (off)
[    0.879700] ACPI: Power Resource [WRST] (off)
[    0.880414] ACPI: Power Resource [WRST] (off)
[    0.881126] ACPI: Power Resource [WRST] (off)
[    0.895671] ACPI: Power Resource [FN00] (off)
[    0.895832] ACPI: Power Resource [FN01] (off)
[    0.895993] ACPI: Power Resource [FN02] (off)
[    0.896151] ACPI: Power Resource [FN03] (off)
[    0.896308] ACPI: Power Resource [FN04] (off)
[    0.898327] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    0.898332] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.898411] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[    0.899829] PCI host bridge to bus 0000:00
[    0.899831] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.899832] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.899833] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.899834] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.899835] pci_bus 0000:00: root bus resource [mem 0x800000000-0xfbfffffff window]
[    0.899836] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.899837] pci_bus 0000:00: root bus resource [bus 00-fe]
[    0.899843] pci 0000:00:00.0: [8086:191f] type 00 class 0x060000
[    0.900389] pci 0000:00:14.0: [8086:a12f] type 00 class 0x0c0330
[    0.900404] pci 0000:00:14.0: reg 0x10: [mem 0xfbff10000-0xfbff1ffff 64bit]
[    0.900460] pci 0000:00:14.0: PME# supported from D3hot D3cold
[    0.900679] pci 0000:00:14.0: System wakeup disabled by ACPI
[    0.900764] pci 0000:00:16.0: [8086:a13a] type 00 class 0x078000
[    0.900776] pci 0000:00:16.0: reg 0x10: [mem 0xfbff25000-0xfbff25fff 64bit]
[    0.900823] pci 0000:00:16.0: PME# supported from D3hot
[    0.901084] pci 0000:00:17.0: [8086:a102] type 00 class 0x010601
[    0.901095] pci 0000:00:17.0: reg 0x10: [mem 0xdff24000-0xdff25fff]
[    0.901100] pci 0000:00:17.0: reg 0x14: [mem 0xdff27000-0xdff270ff]
[    0.901106] pci 0000:00:17.0: reg 0x18: [io  0xf050-0xf057]
[    0.901111] pci 0000:00:17.0: reg 0x1c: [io  0xf040-0xf043]
[    0.901116] pci 0000:00:17.0: reg 0x20: [io  0xf020-0xf03f]
[    0.901122] pci 0000:00:17.0: reg 0x24: [mem 0xdff26000-0xdff267ff]
[    0.901155] pci 0000:00:17.0: PME# supported from D3hot
[    0.901412] pci 0000:00:1b.0: [8086:a167] type 01 class 0x060400
[    0.901461] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.901730] pci 0000:00:1b.0: System wakeup disabled by ACPI
[    0.901812] pci 0000:00:1c.0: [8086:a110] type 01 class 0x060400
[    0.901861] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.902127] pci 0000:00:1c.0: System wakeup disabled by ACPI
[    0.902189] pci 0000:00:1c.2: [8086:a112] type 01 class 0x060400
[    0.902238] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold
[    0.902503] pci 0000:00:1c.2: System wakeup disabled by ACPI
[    0.902579] pci 0000:00:1d.0: [8086:a118] type 01 class 0x060400
[    0.902630] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[    0.902891] pci 0000:00:1d.0: System wakeup disabled by ACPI
[    0.902979] pci 0000:00:1f.0: [8086:a145] type 00 class 0x060100
[    0.903307] pci 0000:00:1f.2: [8086:a121] type 00 class 0x058000
[    0.903317] pci 0000:00:1f.2: reg 0x10: [mem 0xdff20000-0xdff23fff]
[    0.903599] pci 0000:00:1f.3: [8086:a170] type 00 class 0x040300
[    0.903618] pci 0000:00:1f.3: reg 0x10: [mem 0xfbff20000-0xfbff23fff 64bit]
[    0.903646] pci 0000:00:1f.3: reg 0x20: [mem 0xfbff00000-0xfbff0ffff 64bit]
[    0.903690] pci 0000:00:1f.3: PME# supported from D3hot D3cold
[    0.903961] pci 0000:00:1f.3: System wakeup disabled by ACPI
[    0.904027] pci 0000:00:1f.4: [8086:a123] type 00 class 0x0c0500
[    0.904073] pci 0000:00:1f.4: reg 0x10: [mem 0xfbff24000-0xfbff240ff 64bit]
[    0.904142] pci 0000:00:1f.4: reg 0x20: [io  0xf000-0xf01f]
[    0.904456] pci 0000:00:1f.6: [8086:15b8] type 00 class 0x020000
[    0.904475] pci 0000:00:1f.6: reg 0x10: [mem 0xdff00000-0xdff1ffff]
[    0.904576] pci 0000:00:1f.6: PME# supported from D0 D3hot D3cold
[    0.904781] pci 0000:00:1f.6: System wakeup disabled by ACPI
[    0.904949] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.904964] pci 0000:01:00.0: reg 0x10: [mem 0xfa0000000-0xfafffffff 64bit pref]
[    0.904974] pci 0000:01:00.0: reg 0x18: [mem 0xfb0000000-0xfb01fffff 64bit pref]
[    0.904981] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.904987] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.904994] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.905057] pci 0000:01:00.0: supports D1 D2
[    0.905058] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.905092] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.905093] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.905101] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.905102] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.905114] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.905114] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.905166] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.915006] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.915011] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.915017] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.915024] pci 0000:00:1b.0:   bridge window [mem 0xfa0000000-0xfb01fffff 64bit pref]
[    0.915042] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
[    0.915164] pci 0000:02:00.0: [1b21:1242] type 00 class 0x0c0330
[    0.915183] pci 0000:02:00.0: reg 0x10: [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.915289] pci 0000:02:00.0: PME# supported from D3hot D3cold
[    0.915342] pci 0000:02:00.0: System wakeup disabled by ACPI
[    0.927027] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.927035] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.927180] pci 0000:03:00.0: [1b21:1080] type 01 class 0x060400
[    0.927296] pci 0000:03:00.0: supports D1 D2
[    0.927296] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.927341] pci 0000:03:00.0: System wakeup disabled by ACPI
[    0.939025] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.939172] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.939320] acpiphp: Slot [1] registered
[    0.939323] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.942135] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[    0.942249] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942361] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 11 12 14 *15)
[    0.942472] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942584] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942695] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942806] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 11 12 14 15) *0
[    0.942917] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 *10 11 12 14 15)
[    0.943744] ACPI: Enabled 6 GPEs in block 00 to 7F
[    0.944022] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.944023] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.944023] vgaarb: loaded
[    0.944024] vgaarb: bridge control possible 0000:01:00.0
[    0.944291] SCSI subsystem initialized
[    0.944343] libata version 3.00 loaded.
[    0.944374] ACPI: bus type USB registered
[    0.944403] usbcore: registered new interface driver usbfs
[    0.944418] usbcore: registered new interface driver hub
[    0.944439] usbcore: registered new device driver usb
[    0.944570] PCI: Using ACPI for IRQ routing
[    0.972385] PCI: pci_cache_line_size set to 64 bytes
[    0.972422] e820: reserve RAM buffer [mem 0x0009c800-0x0009ffff]
[    0.972424] e820: reserve RAM buffer [mem 0x7d439000-0x7fffffff]
[    0.972425] e820: reserve RAM buffer [mem 0x7d4c5000-0x7fffffff]
[    0.972426] e820: reserve RAM buffer [mem 0x858a8000-0x87ffffff]
[    0.972427] e820: reserve RAM buffer [mem 0x476800000-0x477ffffff]
[    0.972586] NetLabel: Initializing
[    0.972587] NetLabel:  domain hash size = 128
[    0.972587] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.972605] NetLabel:  unlabeled traffic allowed by default
[    0.972732] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    0.972735] hpet0: 8 comparators, 64-bit 24.000000 MHz counter
[    0.974777] clocksource: Switched to clocksource hpet
[    0.984798] VFS: Disk quotas dquot_6.6.0
[    0.984834] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.984964] AppArmor: AppArmor Filesystem Enabled
[    0.985017] pnp: PnP ACPI init
[    0.985303] system 00:00: [io  0x0290-0x029f] has been reserved
[    0.985305] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.985776] pnp 00:01: [dma 0 disabled]
[    0.985840] pnp 00:01: Plug and Play ACPI device, IDs PNP0501 (active)
[    0.986081] system 00:02: [io  0x0680-0x069f] has been reserved
[    0.986083] system 00:02: [io  0xffff] has been reserved
[    0.986084] system 00:02: [io  0xffff] has been reserved
[    0.986086] system 00:02: [io  0xffff] has been reserved
[    0.986087] system 00:02: [io  0x1800-0x18fe] has been reserved
[    0.986089] system 00:02: [io  0x164e-0x164f] has been reserved
[    0.986090] system 00:02: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.986198] system 00:03: [io  0x0800-0x087f] has been reserved
[    0.986199] system 00:03: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.986238] pnp 00:04: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.986308] system 00:05: [io  0x1854-0x1857] has been reserved
[    0.986309] system 00:05: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[    0.986698] system 00:06: [mem 0xfed10000-0xfed17fff] has been reserved
[    0.986699] system 00:06: [mem 0xfed18000-0xfed18fff] has been reserved
[    0.986701] system 00:06: [mem 0xfed19000-0xfed19fff] has been reserved
[    0.986703] system 00:06: [mem 0xe0000000-0xefffffff] has been reserved
[    0.986704] system 00:06: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.986705] system 00:06: [mem 0xfed90000-0xfed93fff] has been reserved
[    0.986707] system 00:06: [mem 0xfed45000-0xfed8ffff] has been reserved
[    0.986708] system 00:06: [mem 0xff000000-0xffffffff] has been reserved
[    0.986710] system 00:06: [mem 0xfee00000-0xfeefffff] could not be reserved
[    0.986712] system 00:06: [mem 0xdffc0000-0xdffdffff] has been reserved
[    0.986713] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.986814] system 00:07: [mem 0xfd000000-0xfdabffff] has been reserved
[    0.986816] system 00:07: [mem 0xfdad0000-0xfdadffff] has been reserved
[    0.986817] system 00:07: [mem 0xfdb00000-0xfdffffff] has been reserved
[    0.986820] system 00:07: [mem 0xfe000000-0xfe01ffff] could not be reserved
[    0.986821] system 00:07: [mem 0xfe036000-0xfe03bfff] has been reserved
[    0.986824] system 00:07: [mem 0xfe03d000-0xfe3fffff] has been reserved
[    0.986825] system 00:07: [mem 0xfe410000-0xfe7fffff] has been reserved
[    0.986827] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.988557] system 00:08: [mem 0xfdaf0000-0xfdafffff] has been reserved
[    0.988559] system 00:08: [mem 0xfdae0000-0xfdaeffff] has been reserved
[    0.988560] system 00:08: [mem 0xfdac0000-0xfdacffff] has been reserved
[    0.988562] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.989928] pnp: PnP ACPI: found 9 devices
[    0.997868] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.997871] pci_bus 0000:00: max bus depth: 2 pci_try_num: 3
[    0.997900] pci 0000:00:1d.0: BAR 14: assigned [mem 0x88800000-0x889fffff]
[    0.997902] pci 0000:00:1d.0: BAR 15: assigned [mem 0x800000000-0x8001fffff 64bit pref]
[    0.997903] pci 0000:00:1d.0: BAR 13: assigned [io  0x2000-0x2fff]
[    0.997907] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997908] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997910] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997910] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997911] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997912] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997914] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997915] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997917] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997919] pci 0000:00:1b.0:   bridge window [mem 0xfa0000000-0xfb01fffff 64bit pref]
[    0.997922] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997924] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.997928] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.997942] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.997947] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997948] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.997951] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.997953] pci 0000:00:1d.0:   bridge window [mem 0x800000000-0x8001fffff 64bit pref]
[    0.997956] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997957] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997957] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997958] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997958] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997960] release child resource [mem 0xfa0000000-0xfafffffff 64bit pref]
[    0.997960] release child resource [mem 0xfb0000000-0xfb01fffff 64bit pref]
[    0.997961] pci 0000:00:1b.0: resource 15 [mem 0xfa0000000-0xfb01fffff 64bit pref] released
[    0.997961] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997992] pci 0000:00:1b.0: BAR 15: assigned [mem 0x808000000-0x85fffffff 64bit pref]
[    0.997993] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997997] pci 0000:01:00.0: BAR 0: assigned [mem 0x810000000-0x81fffffff 64bit pref]
[    0.998004] pci 0000:01:00.0: BAR 7: assigned [mem 0x820000000-0x85fffffff 64bit pref]
[    0.998011] pci 0000:01:00.0: BAR 9: assigned [mem 0x808000000-0x809ffffff 64bit pref]
[    0.998017] pci 0000:01:00.0: BAR 12: assigned [mem 0x88c00000-0x8abfffff]
[    0.998019] pci 0000:01:00.0: BAR 2: assigned [mem 0x80a000000-0x80a1fffff 64bit pref]
[    0.998026] pci 0000:01:00.0: BAR 5: assigned [mem 0x88a00000-0x88a3ffff]
[    0.998028] pci 0000:01:00.0: BAR 6: assigned [mem 0x88a40000-0x88a5ffff pref]
[    0.998030] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.998031] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.998033] pci 0000:00:1b.0:   bridge window [mem 0x88a00000-0x8abfffff]
[    0.998035] pci 0000:00:1b.0:   bridge window [mem 0x808000000-0x85fffffff 64bit pref]
[    0.998038] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.998040] pci 0000:00:1c.0:   bridge window [mem 0xdfd00000-0xdfdfffff]
[    0.998044] pci 0000:03:00.0: PCI bridge to [bus 04]
[    0.998058] pci 0000:00:1c.2: PCI bridge to [bus 03-04]
[    0.998063] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.998064] pci 0000:00:1d.0:   bridge window [io  0x2000-0x2fff]
[    0.998067] pci 0000:00:1d.0:   bridge window [mem 0x88800000-0x889fffff]
[    0.998069] pci 0000:00:1d.0:   bridge window [mem 0x800000000-0x8001fffff 64bit pref]
[    0.998072] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]
[    0.998073] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]
[    0.998074] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]
[    0.998074] pci_bus 0000:00: resource 7 [mem 0x88800000-0xdfffffff window]
[    0.998075] pci_bus 0000:00: resource 8 [mem 0x800000000-0xfbfffffff window]
[    0.998075] pci_bus 0000:00: resource 9 [mem 0xfd000000-0xfe7fffff window]
[    0.998076] pci_bus 0000:01: resource 0 [io  0xe000-0xefff]
[    0.998077] pci_bus 0000:01: resource 1 [mem 0x88a00000-0x8abfffff]
[    0.998077] pci_bus 0000:01: resource 2 [mem 0x808000000-0x85fffffff 64bit pref]
[    0.998078] pci_bus 0000:02: resource 1 [mem 0xdfd00000-0xdfdfffff]
[    0.998079] pci_bus 0000:05: resource 0 [io  0x2000-0x2fff]
[    0.998079] pci_bus 0000:05: resource 1 [mem 0x88800000-0x889fffff]
[    0.998080] pci_bus 0000:05: resource 2 [mem 0x800000000-0x8001fffff 64bit pref]
[    0.998267] NET: Registered protocol family 2
[    0.998466] TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.998584] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
[    0.998662] TCP: Hash tables configured (established 131072 bind 65536)
[    0.998683] UDP hash table entries: 8192 (order: 6, 262144 bytes)
[    0.998712] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes)
[    0.998818] NET: Registered protocol family 1
[    0.999492] pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    1.000166] PCI: CLS 0 bytes, default 64
[    1.000212] Trying to unpack rootfs image as initramfs...
[    1.727856] Freeing initrd memory: 70180K (ffff88002f6de000 - ffff880033b67000)
[    1.727858] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    1.727859] software IO TLB [mem 0x818a8000-0x858a8000] (64MB) mapped at [ffff8800818a8000-ffff8800858a7fff]
[    1.728068] RAPL PMU: API unit is 2^-32 Joules, 5 fixed counters, 655360 ms ovfl timer
[    1.728069] RAPL PMU: hw unit of domain pp0-core 2^-14 Joules
[    1.728069] RAPL PMU: hw unit of domain package 2^-14 Joules
[    1.728069] RAPL PMU: hw unit of domain dram 2^-14 Joules
[    1.728069] RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules
[    1.728070] RAPL PMU: hw unit of domain psys 2^-14 Joules
[    1.728647] Scanning for low memory corruption every 60 seconds
[    1.729225] futex hash table entries: 2048 (order: 5, 131072 bytes)
[    1.729251] audit: initializing netlink subsys (disabled)
[    1.729267] audit: type=2000 audit(1495613326.692:1): initialized
[    1.730018] Initialise system trusted keyrings
[    1.730150] workingset: timestamp_bits=40 max_order=22 bucket_order=0
[    1.734481] fuse init (API version 7.26)
[    1.735712] Key type asymmetric registered
[    1.735713] Asymmetric key parser 'x509' registered
[    1.735773] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    1.735831] io scheduler noop registered
[    1.735832] io scheduler deadline registered (default)
[    1.735844] io scheduler cfq registered
[    1.736331] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    1.736338] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[    1.736377] efifb: probing for efifb
[    1.736380] efifb: framebuffer at 0xa0000, using 64k, total 64k
[    1.736381] efifb: mode is 640x480x1, linelength=80, pages=1
[    1.736381] efifb: scrolling: redraw
[    1.736382] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.737123] Console: switching to colour frame buffer device 80x30
[    1.737737] fb0: EFI VGA frame buffer device
[    1.737744] intel_idle: MWAIT substates: 0x142120
[    1.737745] intel_idle: v0.4.1 model 0x5E
[    1.738473] intel_idle: lapic_timer_reliable_states 0xffffffff
[    1.738485] ipmi message handler version 39.2
[    1.738588] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0
[    1.738590] ACPI: Sleep Button [SLPB]
[    1.738650] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[    1.738651] ACPI: Power Button [PWRB]
[    1.738710] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[    1.738712] ACPI: Power Button [PWRF]
[    1.740515] thermal LNXTHERM:00: registered as thermal_zone0
[    1.740516] ACPI: Thermal Zone [TZ00] (28 C)
[    1.740858] thermal LNXTHERM:01: registered as thermal_zone1
[    1.740859] ACPI: Thermal Zone [TZ01] (30 C)
[    1.740889] GHES: HEST is not enabled!
[    1.741021] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    1.761567] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    1.764348] Linux agpgart interface v0.103
[    1.770590] brd: module loaded
[    1.773931] loop: module loaded
[    1.774360] libphy: Fixed MDIO Bus: probed
[    1.774751] tun: Universal TUN/TAP device driver, 1.6
[    1.774751] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
[    1.774837] PPP generic driver version 2.4.2
[    1.774916] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.774919] ehci-pci: EHCI PCI platform driver
[    1.774932] ehci-platform: EHCI generic platform driver
[    1.774942] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.774944] ohci-pci: OHCI PCI platform driver
[    1.774955] ohci-platform: OHCI generic platform driver
[    1.774963] uhci_hcd: USB Universal Host Controller Interface driver
[    1.775149] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.775155] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 1
[    1.776238] xhci_hcd 0000:00:14.0: hcc params 0x200077c1 hci version 0x100 quirks 0x00109810
[    1.776241] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[    1.776351] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.776352] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.776352] usb usb1: Product: xHCI Host Controller
[    1.776353] usb usb1: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.776354] usb usb1: SerialNumber: 0000:00:14.0
[    1.776543] hub 1-0:1.0: USB hub found
[    1.776560] hub 1-0:1.0: 16 ports detected
[    1.791307] xhci_hcd 0000:00:14.0: xHCI Host Controller
[    1.791310] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus number 2
[    1.791353] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    1.791353] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.791354] usb usb2: Product: xHCI Host Controller
[    1.791354] usb usb2: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.791355] usb usb2: SerialNumber: 0000:00:14.0
[    1.791548] hub 2-0:1.0: USB hub found
[    1.791561] hub 2-0:1.0: 10 ports detected
[    1.800922] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.800927] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 3
[    1.859691] xhci_hcd 0000:02:00.0: hcc params 0x0200eec1 hci version 0x110 quirks 0x00000010
[    1.860008] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    1.860009] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.860010] usb usb3: Product: xHCI Host Controller
[    1.860010] usb usb3: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.860011] usb usb3: SerialNumber: 0000:02:00.0
[    1.860195] hub 3-0:1.0: USB hub found
[    1.860203] hub 3-0:1.0: 2 ports detected
[    1.860324] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    1.860327] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 4
[    1.860355] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.860379] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003
[    1.860380] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.860380] usb usb4: Product: xHCI Host Controller
[    1.860381] usb usb4: Manufacturer: Linux 4.9.0-custom xhci-hcd
[    1.860381] usb usb4: SerialNumber: 0000:02:00.0
[    1.860561] hub 4-0:1.0: USB hub found
[    1.860568] hub 4-0:1.0: 2 ports detected
[    1.860726] i8042: PNP: No PS/2 controller found. Probing ports directly.
[    1.864072] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.864076] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.864333] mousedev: PS/2 mouse device common for all mice
[    1.864684] rtc_cmos 00:04: RTC can wake from S4
[    1.865126] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0
[    1.865206] rtc_cmos 00:04: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[    1.865278] device-mapper: uevent: version 1.0.3
[    1.865415] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: dm-devel@redhat.com
[    1.865417] intel_pstate: Intel P-state driver initializing
[    1.866281] intel_pstate: HWP enabled
[    1.866704] ledtrig-cpu: registered to indicate activity on CPUs
[    1.867033] NET: Registered protocol family 10
[    1.867547] NET: Registered protocol family 17
[    1.867554] Key type dns_resolver registered
[    1.868060] microcode: sig=0x506e3, pf=0x2, revision=0x33
[    1.868463] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[    1.868853] registered taskstats version 1
[    1.868854] Loading compiled-in X.509 certificates
[    1.871212] Loaded X.509 cert 'Build time autogenerated kernel key: 425e568c95731e69b073bb62214af700479a67a7'
[    1.871304] kmemleak: Kernel memory leak detector initialized
[    1.871372] kmemleak: Automatic memory scanning thread started
[    1.873205] Key type trusted registered
[    1.877582] Key type encrypted registered
[    1.877584] AppArmor: AppArmor sha1 policy hashing enabled
[    1.877585] ima: No TPM chip found, activating TPM-bypass!
[    1.877601] evm: HMAC attrs: 0x1
[    1.878948]   Magic number: 1:708:119
[    1.879197] rtc_cmos 00:04: setting system clock to 2017-05-24 08:08:47 UTC (1495613327)
[    1.879439] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    1.879439] EDD information not available.
[    1.879588] PM: Hibernation image not present or could not be loaded.
[    1.880425] Freeing unused kernel memory: 2220K (ffffffff81d6b000 - ffffffff81f96000)
[    1.880425] Write protecting the kernel read-only data: 12288k
[    1.880640] Freeing unused kernel memory: 84K (ffff8800017eb000 - ffff880001800000)
[    1.881267] Freeing unused kernel memory: 428K (ffff880001b95000 - ffff880001c00000)
[    1.890528] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.890590] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.890597] random: systemd-udevd: uninitialized urandom read (16 bytes read)
[    1.890928] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.890952] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892018] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892059] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892575] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892612] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.892648] random: udevadm: uninitialized urandom read (16 bytes read)
[    1.921193] hid: module verification failed: signature and/or required key missing - tainting kernel
[    1.921599] hidraw: raw HID events driver (C) Jiri Kosina
[    1.926810] wmi: Mapper loaded
[    1.941711] ahci 0000:00:17.0: version 3.0
[    1.942212] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 6 ports 6 Gbps 0x3f impl SATA mode
[    1.942214] ahci 0000:00:17.0: flags: 64bit ncq sntf led clo only pio slum part ems deso sadm sds apst 
[    1.943366] pps_core: LinuxPPS API ver. 1 registered
[    1.943366] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.943776] PTP clock support registered
[    1.944426] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.944426] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    2.000668] scsi host0: ahci
[    2.001171] scsi host1: ahci
[    2.001663] scsi host2: ahci
[    2.002052] scsi host3: ahci
[    2.002447] scsi host4: ahci
[    2.002844] scsi host5: ahci
[    2.002971] ata1: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26100 irq 129
[    2.002972] ata2: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26180 irq 129
[    2.002973] ata3: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26200 irq 129
[    2.002974] ata4: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26280 irq 129
[    2.002975] ata5: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26300 irq 129
[    2.002976] ata6: SATA max UDMA/133 abar m2048@0xdff26000 port 0xdff26380 irq 129
[    2.003589] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[    2.118908] usb 1-10: new full-speed USB device number 2 using xhci_hcd
[    2.262007] usb 1-10: New USB device found, idVendor=046d, idProduct=c534
[    2.262008] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.262009] usb 1-10: Product: USB Receiver
[    2.262009] usb 1-10: Manufacturer: Logitech
[    2.267030] usbcore: registered new interface driver usbhid
[    2.267031] usbhid: USB HID core driver
[    2.267845] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/0003:046D:C534.0001/input/input6
[    2.278741] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[    2.319778] CPU: 4 PID: 207 Comm: scsi_eh_2 Tainted: G            E   4.9.0-custom #2
[    2.319779] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.319779]  ffffc90002033ae8 ffffffff813c2d3f ffff880452935e80 ffff8804529362b0
[    2.319781]  ffffc90002033b10 ffffffff815a7226 ffffc90002033b10 0000000000000286
[    2.319782]  ffffc90000029200 ffffc90002033b30 ffffffffa003f634 ffff880452935e80
[    2.319783] Call Trace:
[    2.319786]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.319788]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.319790]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.319791]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.319793]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319794]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319795]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319796]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319797]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319798]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319799]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.319800]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319801]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319802]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319803]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.319804]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.319806]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.319808]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.319809]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.319810]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.319811]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.319813]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319814]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.319815]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319816]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319817]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.319818]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.319820]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.319823] ata3: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.319839] CPU: 5 PID: 213 Comm: scsi_eh_5 Tainted: G            E   4.9.0-custom #2
[    2.319840] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.319841]  ffffc900020f7ae8 ffffffff813c2d3f ffff880452941e80 ffff8804529422b0
[    2.319842]  ffffc900020f7b10 ffffffff815a7226 ffffc900020f7b10 0000000000000286
[    2.319843]  ffffc90000029380 ffffc900020f7b30 ffffffffa003f634 ffff880452941e80
[    2.319844] Call Trace:
[    2.319846]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.319847]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.319849]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.319850]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.319851]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319852]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319853]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319854]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319855]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319856]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319857]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.319858]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319859]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319860]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319861]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.319862]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.319864]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.319865]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.319866]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.319867]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.319868]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.319870]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319871]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.319872]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319873]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319873]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.319874]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.319875]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.319879] ata6: SATA link down (SStatus 4 SControl 300)
[    2.319911] CPU: 6 PID: 211 Comm: scsi_eh_4 Tainted: G            E   4.9.0-custom #2
[    2.319912] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.319913]  ffffc9000205fae8 ffffffff813c2d3f ffff88045293de80 ffff88045293e2b0
[    2.319914]  ffffc9000205fb10 ffffffff815a7226 ffffc9000205fb10 0000000000000286
[    2.319915]  ffffc90000029300 ffffc9000205fb30 ffffffffa003f634 ffff88045293de80
[    2.319917] Call Trace:
[    2.319919]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.319920]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.319921]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.319922]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.319924]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319926]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319927]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319928]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319930]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319931]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319932]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.319934]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.319935]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.319936]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.319937]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.319938]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.319939]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.319941]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.319942]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.319943]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.319944]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.319957]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319958]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.319959]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319960]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.319961]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.319962]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.319963]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.319966] ata5: SATA link down (SStatus 4 SControl 300)
[    2.319984] CPU: 3 PID: 205 Comm: scsi_eh_1 Tainted: G            E   4.9.0-custom #2
[    2.319985] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.319986]  ffffc900020efae8 ffffffff813c2d3f ffff880452931e80 ffff8804529322b0
[    2.320001]  ffffc900020efb10 ffffffff815a7226 ffffc900020efb10 0000000000000286
[    2.320002]  ffffc90000029180 ffffc900020efb30 ffffffffa003f634 ffff880452931e80
[    2.320004] Call Trace:
[    2.320006]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.320007]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.320008]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.320010]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.320012]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320013]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320015]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320016]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320017]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320018]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320019]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.320021]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320022]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320024]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320024]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.320026]  [<ffffffff813cc65e>] ? number+0x2ce/0x300
[    2.320027]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.320028]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.320030]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.320031]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.320032]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.320033]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.320034]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320035]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.320036]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320037]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320038]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.320039]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.320040]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.320054]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.320057] ata2: SATA link down (SStatus 4 SControl 300)
[    2.320082] CPU: 7 PID: 203 Comm: scsi_eh_0 Tainted: G            E   4.9.0-custom #2
[    2.320082] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.320082]  ffffc90002023ae8 ffffffff813c2d3f ffff88045292de80 ffff88045292e2b0
[    2.320083]  ffffc90002023b10 ffffffff815a7226 ffffc90002023b10 0000000000000286
[    2.320085]  ffffc90000029100 ffffc90002023b30 ffffffffa003f634 ffff88045292de80
[    2.320086] Call Trace:
[    2.320087]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.320088]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.320089]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.320090]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.320091]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320092]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320093]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320094]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320095]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320096]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320097]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.320098]  [<ffffffff8152c910>] ? device_create_release+0x60/0x60
[    2.320099]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320100]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320101]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320102]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.320103]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.320104]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.320105]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.320106]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.320107]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.320108]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.320109]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320110]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.320111]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320112]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320113]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.320114]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.320115]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.320118] ata1: SATA link down (SStatus 4 SControl 300)
[    2.320134] CPU: 2 PID: 209 Comm: scsi_eh_3 Tainted: G            E   4.9.0-custom #2
[    2.320135] Hardware name: System manufacturer System Product Name/Z170-A, BIOS 0901 08/31/2015
[    2.320135]  ffffc90002043ae8 ffffffff813c2d3f ffff880452939e80 ffff88045293a2b0
[    2.320150]  ffffc90002043b10 ffffffff815a7226 ffffc90002043b10 0000000000000286
[    2.320151]  ffffc90000029280 ffffc90002043b30 ffffffffa003f634 ffff880452939e80
[    2.320152] Call Trace:
[    2.320154]  [<ffffffff813c2d3f>] dump_stack+0x63/0x84
[    2.320154]  [<ffffffff815a7226>] ata_std_postreset+0x16/0xe0
[    2.320156]  [<ffffffffa003f634>] ahci_postreset+0x34/0x60 [libahci]
[    2.320157]  [<ffffffff815b1964>] ata_eh_reset+0x484/0xda0
[    2.320158]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320171]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320172]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320173]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320174]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320175]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320176]  [<ffffffff815b2652>] ata_eh_recover+0x282/0x12d0
[    2.320177]  [<ffffffffa003f600>] ? ahci_pmp_attach+0x70/0x70 [libahci]
[    2.320178]  [<ffffffffa0041350>] ? ahci_sw_activity_blink+0xd0/0xd0 [libahci]
[    2.320179]  [<ffffffffa0040e90>] ? ahci_do_softreset+0x220/0x220 [libahci]
[    2.320180]  [<ffffffff815a7380>] ? ata_phys_link_offline+0x30/0x30
[    2.320181]  [<ffffffff815b9921>] sata_pmp_error_handler+0xe1/0xaa0
[    2.320183]  [<ffffffff81096090>] ? try_to_grab_pending+0xb0/0x150
[    2.320184]  [<ffffffff810ea2ed>] ? lock_timer_base+0x7d/0xa0
[    2.320185]  [<ffffffffa003fde8>] ahci_error_handler+0x28/0x70 [libahci]
[    2.320186]  [<ffffffff815b3c7c>] ata_scsi_port_error_handler+0x50c/0x8d0
[    2.320188]  [<ffffffff815b40d8>] ata_scsi_error+0x98/0xc0
[    2.320189]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320190]  [<ffffffff81582a07>] scsi_error_handler+0xd7/0x8b0
[    2.320191]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320207]  [<ffffffff81582930>] ? scsi_eh_get_sense+0x240/0x240
[    2.320207]  [<ffffffff8109b423>] kthread+0xd3/0xf0
[    2.320208]  [<ffffffff8109b350>] ? kthread_park+0x60/0x60
[    2.320209]  [<ffffffff817e1ee5>] ret_from_fork+0x25/0x30
[    2.320232] ata4: SATA link down (SStatus 4 SControl 300)
[    2.321116] ata3.00: ATA-8: ST3500413AS, JC45, max UDMA/133
[    2.321117] ata3.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.322647] ata3.00: configured for UDMA/133
[    2.323221] scsi 2:0:0:0: Direct-Access     ATA      ST3500413AS      JC45 PQ: 0 ANSI: 5
[    2.327221] hid-generic 0003:046D:C534.0001: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-10/input0
[    2.327399] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.1/0003:046D:C534.0002/input/input7
[    2.367060] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 30:5a:3a:e0:7f:4d
[    2.367061] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[    2.367144] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[    2.367819] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[    2.375374] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[    2.375458] sd 2:0:0:0: Attached scsi generic sg0 type 0
[    2.375714] sd 2:0:0:0: [sda] Write Protect is off
[    2.375715] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.375889] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.387540] hid-generic 0003:046D:C534.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-10/input1
[    2.401973]  sda: sda1 sda2 < sda5 >
[    2.403492] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.731874] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[    2.750887] tsc: Refined TSC clocksource calibration: 3407.999 MHz
[    2.750893] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x311fd336761, max_idle_ns: 440795243819 ns
[    2.802667] random: fast init done
[    3.625199] systemd[1]: systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
[    3.625331] systemd[1]: Detected architecture x86-64.
[    3.632623] systemd[1]: Set hostname to <jenkins-MS-7984>.
[    3.775192] clocksource: Switched to clocksource tsc
[    4.272154] systemd[1]: Listening on udev Kernel Socket.
[    4.272233] systemd[1]: Listening on Journal Audit Socket.
[    4.272259] systemd[1]: Listening on Journal Socket (/dev/log).
[    4.272288] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    4.272303] systemd[1]: Listening on fsck to fsckd communication Socket.
[    4.272453] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    4.272477] systemd[1]: Listening on udev Control Socket.
[    4.842891] random: crng init done
[    4.873008] lp: driver loaded but no devices found
[    4.874333] ppdev: user-space parallel port driver
[    5.086789] RPC: Registered named UNIX socket transport module.
[    5.086789] RPC: Registered udp transport module.
[    5.086789] RPC: Registered tcp transport module.
[    5.086790] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    5.420022] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
[    5.764199] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[    6.016854] systemd-journald[298]: Received request to flush runtime journal from PID 1
[    6.498910] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    6.673532] AVX2 version of gcm_enc/dec engaged.
[    6.673533] AES CTR mode by8 optimization enabled
[    6.755847] mei_me 0000:00:16.0: enabling device (0000 -> 0002)
[    7.615057] intel_rapl: Found RAPL domain package
[    7.615059] intel_rapl: Found RAPL domain core
[    7.615061] intel_rapl: Found RAPL domain dram
[    7.684934] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC892: line_outs=3 (0x14/0x15/0x16/0x0/0x0) type:line
[    7.684935] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.684936] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x1b/0x0/0x0/0x0/0x0)
[    7.684937] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    7.684937] snd_hda_codec_realtek hdaudioC0D0:    dig-out=0x11/0x1e
[    7.684938] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    7.684938] snd_hda_codec_realtek hdaudioC0D0:      Front Mic=0x19
[    7.684939] snd_hda_codec_realtek hdaudioC0D0:      Rear Mic=0x18
[    7.684940] snd_hda_codec_realtek hdaudioC0D0:      Line=0x1a
[    7.697072] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input8
[    7.697178] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input9
[    7.697284] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1f.3/sound/card0/input10
[    7.697391] input: HDA Intel PCH Line Out Front as /devices/pci0000:00/0000:00:1f.3/sound/card0/input11
[    7.697499] input: HDA Intel PCH Line Out Surround as /devices/pci0000:00/0000:00:1f.3/sound/card0/input12
[    7.697604] input: HDA Intel PCH Line Out CLFE as /devices/pci0000:00/0000:00:1f.3/sound/card0/input13
[    7.697711] input: HDA Intel PCH Front Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input14
[    8.643643] audit: type=1400 audit(1495613334.260:2): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine" pid=701 comm="apparmor_parser"
[    8.643649] audit: type=1400 audit(1495613334.260:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=701 comm="apparmor_parser"
[    8.664449] audit: type=1400 audit(1495613334.280:4): apparmor="STATUS" operation="profile_load" name="/usr/sbin/ippusbxd" pid=704 comm="apparmor_parser"
[    8.767842] audit: type=1400 audit(1495613334.384:5): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cups-browsed" pid=702 comm="apparmor_parser"
[    8.792412] audit: type=1400 audit(1495613334.412:6): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=697 comm="apparmor_parser"
[    8.792419] audit: type=1400 audit(1495613334.412:7): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=697 comm="apparmor_parser"
[    8.792426] audit: type=1400 audit(1495613334.412:8): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=697 comm="apparmor_parser"
[    8.792432] audit: type=1400 audit(1495613334.412:9): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=697 comm="apparmor_parser"
[    8.793197] audit: type=1400 audit(1495613334.412:10): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=703 comm="apparmor_parser"
[    8.793203] audit: type=1400 audit(1495613334.412:11): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=703 comm="apparmor_parser"
[    8.920486] asus_wmi: ASUS WMI generic driver loaded
[    8.933316] asus_wmi: Initialization: 0x0
[    8.933378] asus_wmi: BIOS WMI version: 0.9
[    8.933506] asus_wmi: SFUN value: 0x0
[    8.934587] input: Eee PC WMI hotkeys as /devices/platform/eeepc-wmi/input/input15
[    8.934890] asus_wmi: Number of fans: 1
[    9.519567] Adding 8348668k swap on /dev/sda5.  Priority:-1 extents:1 across:8348668k FS
[   14.493113] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[   14.712021] NFSD: starting 90-second grace period (net ffffffff81d06400)
[   15.068671] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   15.283067] IPv6: ADDRCONF(NETDEV_UP): enp0s31f6: link is not ready
[   18.070482] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[   18.070484] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
[   18.070528] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s31f6: link becomes ready
======================================================================================================
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150] (prog-if 00 [VGA controller])
	Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Tonga XT GL [FirePro S7150]
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 11
	Region 0: Memory at 810000000 (64-bit, prefetchable) [size=256M]
	Region 2: Memory at 80a000000 (64-bit, prefetchable) [size=2M]
	Region 4: I/O ports at e000 [size=256]
	Region 5: Memory at 88a00000 (32-bit, non-prefetchable) [size=256K]
	Expansion ROM at 000c0000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 256 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 8GT/s, Width x2, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Not Supported, TimeoutDis-, LTR-, OBFF Not Supported
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
			 EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
	Capabilities: [a0] MSI: Enable- Count=1/4 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
	Capabilities: [200 v1] #15
	Capabilities: [270 v1] #19
	Capabilities: [2b0 v1] Address Translation Service (ATS)
		ATSCap:	Invalidate Queue Depth: 00
		ATSCtl:	Enable-, Smallest Translation Unit: 00
	Capabilities: [2c0 v1] #13
	Capabilities: [2d0 v1] #1b
	Capabilities: [328 v1] Alternative Routing-ID Interpretation (ARI)
		ARICap:	MFVC- ACS-, Next Function: 0
		ARICtl:	MFVC- ACS-, Function Group: 0
	Capabilities: [330 v1] Single Root I/O Virtualization (SR-IOV)
		IOVCap:	Migration-, Interrupt Message Number: 000
		IOVCtl:	Enable- Migration- Interrupt- MSE- ARIHierarchy+
		IOVSta:	Migration-
		Initial VFs: 8, Total VFs: 8, Number of VFs: 0, Function Dependency Link: 00
		VF offset: 256, stride: 1, Device ID: 692f
		Supported Page Size: 00000553, System Page Size: 00000001
		Region 0: Memory at 0000000820000000 (64-bit, prefetchable)
		Region 2: Memory at 0000000808000000 (64-bit, prefetchable)
		Region 5: Memory at 88c00000 (32-bit, non-prefetchable)
		VF Migration: offset: 00000000, BIR: 0
	Capabilities: [400 v1] Vendor Specific Information: ID=0002 Rev=1 Len=070 <?>
	Kernel modules: amdgpu


^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-23 18:20                     ` Alex Williamson
@ 2017-05-24  8:57                         ` Cheng, Collins
  2017-05-24  8:57                         ` Cheng, Collins
  2017-05-26  1:52                         ` Cheng, Collins
  2 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-24  8:57 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Hi Alex,

How do you know "particular this system offers no 64-bit MMIO", from dmesg log?

-Collins Cheng


-----Original Message-----
From: Cheng, Collins 
Sent: Wednesday, May 24, 2017 4:56 PM
To: 'Alex Williamson' <alex.williamson@redhat.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

Hi Alex W, Alex D,

I just tried two options, one is enable "Above 4G Decoding" in BIOS setup menu, the other is add "pci=realloc=off" in grub. Both can fix this issue. Please see the attached log files.

Previously I thought "Above 4G Decoding" is enabled, but it is off when I looked CMOS setup today.

For now I think we have a solution. For the system that supports "Above 4G Decoding", user should enable it when use a SR-IOV supported device. For the system that doesn't support "Above 4G Decoding", user needs to add "pci=realloc=off" in grub.

Potentially I think kernel still needs to find a way to avoid this issue happen, like keeps the resource as the BIOS assigned value if there is a failure on device's resource reallocation.


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Wednesday, May 24, 2017 2:20 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
> 
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> 
> You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> 
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]

I've tried to extract more of the relevant resizing efforts below, perhaps Yinghai or others can make more out of it.  In particular this system offers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV resources without it.  AIUI, the PCI core won't try to use anything outside the ACPI _CRS data without the option pci=nocrs.
This might present a second alternative in addition to the pci=realloc=off, which is actually suggested by the kernel below.  So I think we have at least two potential workarounds in the code as it exists today, one leaving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not described by the system BIOS.
Certainly an improvement would still be detecting the impossible reallocation problem without nocrs and abandoning the process and of course to revert the process before leaving more BARs unprogrammed than we started with.  Thanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=realloc=off

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-24  8:57                         ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-24  8:57 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Hi Alex,

How do you know "particular this system offers no 64-bit MMIO", from dmesg =
log?

-Collins Cheng


-----Original Message-----
From: Cheng, Collins=20
Sent: Wednesday, May 24, 2017 4:56 PM
To: 'Alex Williamson' <alex.williamson@redhat.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@go=
ogle.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher=
, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.=
com>; Yinghai Lu <yinghai@kernel.org>
Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

Hi Alex W, Alex D,

I just tried two options, one is enable "Above 4G Decoding" in BIOS setup m=
enu, the other is add "pci=3Drealloc=3Doff" in grub. Both can fix this issu=
e. Please see the attached log files.

Previously I thought "Above 4G Decoding" is enabled, but it is off when I l=
ooked CMOS setup today.

For now I think we have a solution. For the system that supports "Above 4G =
Decoding", user should enable it when use a SR-IOV supported device. For th=
e system that doesn't support "Above 4G Decoding", user needs to add "pci=
=3Drealloc=3Doff" in grub.

Potentially I think kernel still needs to find a way to avoid this issue ha=
ppen, like keeps the resource as the BIOS assigned value if there is a fail=
ure on device's resource reallocation.


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Wednesday, May 24, 2017 2:20 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@go=
ogle.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher=
, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.=
com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
>=20
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pc=
i=3Dearlydump", 2.txt is with "pci=3Dearlydump". The platform is an ASUS Z1=
70-A motherboard that doesn't support SR-IOV. The graphics card is AMD Fire=
Pro S7150 card which enabled SR-IOV.=20
>=20
> You could find the error info like below in both logs. From the log, kern=
el failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (2=
56MB needed), but kernel reallocated resource for BAR9 which is for VF. You=
 are right, the real bug that is something goes wrong with the reallocation=
 leaving the PF without resources.
>=20
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfff=
ff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x0200000=
0]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x020=
00000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfff=
ff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000=
]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x0004=
0000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000=
 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x0002=
0000 pref]

I've tried to extract more of the relevant resizing efforts below, perhaps =
Yinghai or others can make more out of it.  In particular this system offer=
s no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV re=
sources without it.  AIUI, the PCI core won't try to use anything outside t=
he ACPI _CRS data without the option pci=3Dnocrs.
This might present a second alternative in addition to the pci=3Drealloc=3D=
off, which is actually suggested by the kernel below.  So I think we have a=
t least two potential workarounds in the code as it exists today, one leavi=
ng SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not =
described by the system BIOS.
Certainly an improvement would still be detecting the impossible reallocati=
on problem without nocrs and abandoning the process and of course to revert=
 the process before leaving more BARs unprogrammed than we started with.  T=
hanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window=
]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window=
]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bfff=
f window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdffffff=
f window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7ffff=
f window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit=
 pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit=
 pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bi=
t pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffff=
ff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bi=
t pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffff=
ff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffff=
ff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff=
]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff=
 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=3Dio+mem,owns=
=3Dio+mem,locks=3Dnone
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 6=
4bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x020000=
00 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000=
000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff=
]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff=
 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] re=
leased
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref=
]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref=
]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64b=
it pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 =
64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000=
000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adffff=
f]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff=
 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000=
000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff=
 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x000400=
00]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 p=
ref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x000200=
00 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff=
]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref=
]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref=
]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] re=
leased
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] re=
leased
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64b=
it pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 6=
4bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] =
to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 6=
4bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0x5fffffff 64bit=
 pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0xa7ffffff 64bit=
 pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x022fffff] res_=
to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x044fffff] res_=
to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x002fffff 64bit=
 pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x004fffff 64bit=
 pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 =
64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000=
000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cfffff=
f]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88affff=
f]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3ffff=
f 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 =
64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000=
000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abffff=
f]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acffff=
f]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aeffff=
f 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0ff=
fff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7ff=
fff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=3D[mem size 0x00000000 64bit pref] =
res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=3D[mem 0x00000000-0xfffffffffffffff=
f 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=3D[mem size 0x00000000] res_to_dev=
_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff=
 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3ffff=
f]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff=
 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff=
]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff=
 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff=
]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7ffff=
f]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff=
 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff=
]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=3Drealloc=3Doff

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-24  8:57                         ` Cheng, Collins
  (?)
@ 2017-05-24 14:57                         ` Alex Williamson
  -1 siblings, 0 replies; 43+ messages in thread
From: Alex Williamson @ 2017-05-24 14:57 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Wed, 24 May 2017 08:57:53 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
> 
> How do you know "particular this system offers no 64-bit MMIO", from dmesg log?

>From this:

> [    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
> [    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
> [    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
> [    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
> [    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
> [    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]

There are only 32-bit ranges listed.  Thanks,

Alex

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-23 18:20                     ` Alex Williamson
@ 2017-05-26  1:52                         ` Cheng, Collins
  2017-05-24  8:57                         ` Cheng, Collins
  2017-05-26  1:52                         ` Cheng, Collins
  2 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-26  1:52 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Hi Alex W,

I don't need the kernel patch anymore. However it looks the kernel could be improved to handle this more gracefully when PCI resource allocation fail. Do you have a plan to improve it in kernel PCI code?

-Collins Cheng


-----Original Message-----
From: Cheng, Collins 
Sent: Wednesday, May 24, 2017 4:56 PM
To: 'Alex Williamson' <alex.williamson@redhat.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

Hi Alex W, Alex D,

I just tried two options, one is enable "Above 4G Decoding" in BIOS setup menu, the other is add "pci=realloc=off" in grub. Both can fix this issue. Please see the attached log files.

Previously I thought "Above 4G Decoding" is enabled, but it is off when I looked CMOS setup today.

For now I think we have a solution. For the system that supports "Above 4G Decoding", user should enable it when use a SR-IOV supported device. For the system that doesn't support "Above 4G Decoding", user needs to add "pci=realloc=off" in grub.

Potentially I think kernel still needs to find a way to avoid this issue happen, like keeps the resource as the BIOS assigned value if there is a failure on device's resource reallocation.


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Wednesday, May 24, 2017 2:20 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
> 
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> 
> You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> 
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]

I've tried to extract more of the relevant resizing efforts below, perhaps Yinghai or others can make more out of it.  In particular this system offers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV resources without it.  AIUI, the PCI core won't try to use anything outside the ACPI _CRS data without the option pci=nocrs.
This might present a second alternative in addition to the pci=realloc=off, which is actually suggested by the kernel below.  So I think we have at least two potential workarounds in the code as it exists today, one leaving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not described by the system BIOS.
Certainly an improvement would still be detecting the impossible reallocation problem without nocrs and abandoning the process and of course to revert the process before leaving more BARs unprogrammed than we started with.  Thanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=realloc=off

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-26  1:52                         ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-26  1:52 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Hi Alex W,

I don't need the kernel patch anymore. However it looks the kernel could be=
 improved to handle this more gracefully when PCI resource allocation fail.=
 Do you have a plan to improve it in kernel PCI code?

-Collins Cheng


-----Original Message-----
From: Cheng, Collins=20
Sent: Wednesday, May 24, 2017 4:56 PM
To: 'Alex Williamson' <alex.williamson@redhat.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@go=
ogle.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher=
, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.=
com>; Yinghai Lu <yinghai@kernel.org>
Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

Hi Alex W, Alex D,

I just tried two options, one is enable "Above 4G Decoding" in BIOS setup m=
enu, the other is add "pci=3Drealloc=3Doff" in grub. Both can fix this issu=
e. Please see the attached log files.

Previously I thought "Above 4G Decoding" is enabled, but it is off when I l=
ooked CMOS setup today.

For now I think we have a solution. For the system that supports "Above 4G =
Decoding", user should enable it when use a SR-IOV supported device. For th=
e system that doesn't support "Above 4G Decoding", user needs to add "pci=
=3Drealloc=3Doff" in grub.

Potentially I think kernel still needs to find a way to avoid this issue ha=
ppen, like keeps the resource as the BIOS assigned value if there is a fail=
ure on device's resource reallocation.


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Wednesday, May 24, 2017 2:20 AM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@go=
ogle.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher=
, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.=
com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Tue, 23 May 2017 03:41:21 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex,
>=20
> I owe you a dmesg log. Attachment are two log files. 1.txt is without "pc=
i=3Dearlydump", 2.txt is with "pci=3Dearlydump". The platform is an ASUS Z1=
70-A motherboard that doesn't support SR-IOV. The graphics card is AMD Fire=
Pro S7150 card which enabled SR-IOV.=20
>=20
> You could find the error info like below in both logs. From the log, kern=
el failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (2=
56MB needed), but kernel reallocated resource for BAR9 which is for VF. You=
 are right, the real bug that is something goes wrong with the reallocation=
 leaving the PF without resources.
>=20
> [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfff=
ff 64bit pref]
> [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x0200000=
0]
> [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x020=
00000]
> [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfff=
ff 64bit pref]
> [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000=
]
> [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x0004=
0000]
> [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000=
 pref]
> [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x0002=
0000 pref]

I've tried to extract more of the relevant resizing efforts below, perhaps =
Yinghai or others can make more out of it.  In particular this system offer=
s no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV re=
sources without it.  AIUI, the PCI core won't try to use anything outside t=
he ACPI _CRS data without the option pci=3Dnocrs.
This might present a second alternative in addition to the pci=3Drealloc=3D=
off, which is actually suggested by the kernel below.  So I think we have a=
t least two potential workarounds in the code as it exists today, one leavi=
ng SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not =
described by the system BIOS.
Certainly an improvement would still be detecting the impossible reallocati=
on problem without nocrs and abandoning the process and of course to revert=
 the process before leaving more BARs unprogrammed than we started with.  T=
hanks,

Alex

[    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window=
]
[    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window=
]
[    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bfff=
f window]
[    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdffffff=
f window]
[    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7ffff=
f window]
[    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
...
[    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
[    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit=
 pref]
[    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit=
 pref]
[    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
[    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
[    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
[    0.896590] pci 0000:01:00.0: supports D1 D2
[    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
[    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bi=
t pref]
[    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffff=
ff 64bit pref] (contains BAR0 for 8 VFs)
[    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bi=
t pref]
[    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffff=
ff 64bit pref] (contains BAR2 for 8 VFs)
[    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
[    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffff=
ff] (contains BAR5 for 8 VFs)
[    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
[    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff=
]
[    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff=
 64bit pref]
[    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
...
[    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
[    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=3Dio+mem,owns=
=3Dio+mem,locks=3Dnone
[    0.943586] vgaarb: loaded
[    0.943586] vgaarb: bridge control possible 0000:01:00.0
...
[    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 6=
4bit pref]
[    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x020000=
00 64bit pref]
[    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000=
000]
[    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff=
]
[    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff=
 64bit pref]
...
[    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
[    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
[    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
[    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] re=
leased
[    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref=
]
[    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref=
]
[    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64b=
it pref] released
[    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 =
64bit pref]
[    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000=
000 64bit pref]
[    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adffff=
f]
[    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff=
 64bit pref]
[    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
[    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000=
000]
[    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff=
 64bit pref]
[    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
[    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x000400=
00]
[    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 p=
ref]
[    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x000200=
00 pref]
[    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff=
]
...
[    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
[    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref=
]
[    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref=
]
[    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] re=
leased
[    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
[    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] re=
leased
[    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64b=
it pref] released
[    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
[    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 6=
4bit pref] to [bus 01] add_size 48000000 add_align 8000000
[    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] =
to [bus 01] add_size 2200000 add_align 400000
[    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 6=
4bit pref] to [bus 05] add_size 200000 add_align 100000
[    0.997692] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0x5fffffff 64bit=
 pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0xa7ffffff 64bit=
 pref] res_to_dev_res add_size 48000000 min_align 8000000
[    0.997693] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x022fffff] res_=
to_dev_res add_size 2200000 min_align 400000
[    0.997694] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x044fffff] res_=
to_dev_res add_size 2200000 min_align 400000
[    0.997695] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x002fffff 64bit=
 pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997696] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x004fffff 64bit=
 pref] res_to_dev_res add_size 200000 min_align 100000
[    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 =
64bit pref]
[    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000=
000 64bit pref]
[    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cfffff=
f]
[    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88affff=
f]
[    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3ffff=
f 64bit pref]
[    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 =
64bit pref]
[    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000=
000 64bit pref]
[    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abffff=
f]
[    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acffff=
f]
[    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aeffff=
f 64bit pref]
[    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0ff=
fff 64bit pref] (expanded by 0x200000)
[    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7ff=
fff] (expanded by 0x2200000)
[    0.997719] pci 0000:01:00.0: res[7]=3D[mem size 0x00000000 64bit pref] =
res_to_dev_res add_size 40000000 min_align 0
[    0.997720] pci 0000:01:00.0: res[9]=3D[mem 0x00000000-0xfffffffffffffff=
f 64bit pref] res_to_dev_res add_size 2000000 min_align 0
[    0.997721] pci 0000:01:00.0: res[12]=3D[mem size 0x00000000] res_to_dev=
_res add_size 2000000 min_align 0
[    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff=
 64bit pref]
[    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3ffff=
f]
[    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff=
 64bit pref]
[    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff=
]
[    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 6=
4bit pref]
[    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x100000=
00 64bit pref]
[    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff=
 64bit pref]
[    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff=
]
[    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7ffff=
f]
[    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff=
 64bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 6=
4bit pref]
[    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x400000=
00 64bit pref]
[    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
[    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
[    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff=
]
...
[    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
you have problem, try booting with pci=3Drealloc=3Doff

^ permalink raw reply	[flat|nested] 43+ messages in thread

* Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-26  1:52                         ` Cheng, Collins
  (?)
@ 2017-05-26 15:52                         ` Alex Williamson
  2017-05-27  8:17                             ` Cheng, Collins
  -1 siblings, 1 reply; 43+ messages in thread
From: Alex Williamson @ 2017-05-26 15:52 UTC (permalink / raw)
  To: Cheng, Collins
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

On Fri, 26 May 2017 01:52:35 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex W,
> 
> I don't need the kernel patch anymore. However it looks the kernel could be improved to handle this more gracefully when PCI resource allocation fail. Do you have a plan to improve it in kernel PCI code?

I don't have a device capable of reproducing and I'm currently working
on issues elsewhere.  If you don't plan to continue working on it, I'd
suggest filing a bug at bugzilla.kernel.org so that we can at least
track the problem.  Thanks,

Alex

> -----Original Message-----
> From: Cheng, Collins 
> Sent: Wednesday, May 24, 2017 4:56 PM
> To: 'Alex Williamson' <alex.williamson@redhat.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> 
> Hi Alex W, Alex D,
> 
> I just tried two options, one is enable "Above 4G Decoding" in BIOS setup menu, the other is add "pci=realloc=off" in grub. Both can fix this issue. Please see the attached log files.
> 
> Previously I thought "Above 4G Decoding" is enabled, but it is off when I looked CMOS setup today.
> 
> For now I think we have a solution. For the system that supports "Above 4G Decoding", user should enable it when use a SR-IOV supported device. For the system that doesn't support "Above 4G Decoding", user needs to add "pci=realloc=off" in grub.
> 
> Potentially I think kernel still needs to find a way to avoid this issue happen, like keeps the resource as the BIOS assigned value if there is a failure on device's resource reallocation.
> 
> 
> -Collins Cheng
> 
> 
> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com] 
> Sent: Wednesday, May 24, 2017 2:20 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
> 
> On Tue, 23 May 2017 03:41:21 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Alex,
> > 
> > I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> > 
> > You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> > 
> > [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> > [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> > [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> > [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> > [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> > [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> > [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> > [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> > [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> > [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> > [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> > [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]  
> 
> I've tried to extract more of the relevant resizing efforts below, perhaps Yinghai or others can make more out of it.  In particular this system offers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV resources without it.  AIUI, the PCI core won't try to use anything outside the ACPI _CRS data without the option pci=nocrs.
> This might present a second alternative in addition to the pci=realloc=off, which is actually suggested by the kernel below.  So I think we have at least two potential workarounds in the code as it exists today, one leaving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not described by the system BIOS.
> Certainly an improvement would still be detecting the impossible reallocation problem without nocrs and abandoning the process and of course to revert the process before leaving more BARs unprogrammed than we started with.  Thanks,
> 
> Alex
> 
> [    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
> [    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
> [    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
> [    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
> [    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
> [    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
> ...
> [    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
> [    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
> [    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
> [    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
> [    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
> [    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
> [    0.896590] pci 0000:01:00.0: supports D1 D2
> [    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
> [    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
> [    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
> [    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
> [    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
> [    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
> [    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
> [    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
> [    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
> [    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
> [    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
> ...
> [    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
> [    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
> [    0.943586] vgaarb: loaded
> [    0.943586] vgaarb: bridge control possible 0000:01:00.0
> ...
> [    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
> [    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
> [    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
> ...
> [    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
> [    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
> [    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
> [    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
> [    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
> [    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
> [    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
> [    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
> [    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
> [    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
> [    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
> [    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
> ...
> [    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
> [    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
> [    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
> [    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
> [    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
> [    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
> [    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
> [    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
> [    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
> [    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
> [    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
> [    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
> [    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
> [    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
> [    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
> [    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
> [    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
> [    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
> [    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
> [    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
> [    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
> [    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
> [    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
> [    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
> [    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
> [    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
> [    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
> [    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
> [    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
> [    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
> [    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
> [    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
> [    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
> [    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
> [    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
> ...
> [    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
> you have problem, try booting with pci=realloc=off

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
  2017-05-26 15:52                         ` Alex Williamson
@ 2017-05-27  8:17                             ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-27  8:17 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Thanks Alex. I know it is difficult to reproduce this issue on your side.

I just created a bug to track it at https://bugzilla.kernel.org/show_bug.cgi?id=195891


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com] 
Sent: Friday, May 26, 2017 11:52 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@google.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform

On Fri, 26 May 2017 01:52:35 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex W,
> 
> I don't need the kernel patch anymore. However it looks the kernel could be improved to handle this more gracefully when PCI resource allocation fail. Do you have a plan to improve it in kernel PCI code?

I don't have a device capable of reproducing and I'm currently working on issues elsewhere.  If you don't plan to continue working on it, I'd suggest filing a bug at bugzilla.kernel.org so that we can at least track the problem.  Thanks,

Alex

> -----Original Message-----
> From: Cheng, Collins
> Sent: Wednesday, May 24, 2017 4:56 PM
> To: 'Alex Williamson' <alex.williamson@redhat.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas 
> <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> linux-kernel@vger.kernel.org; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; 
> Yinghai Lu <yinghai@kernel.org>
> Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> SR-IOV incapable platform
> 
> Hi Alex W, Alex D,
> 
> I just tried two options, one is enable "Above 4G Decoding" in BIOS setup menu, the other is add "pci=realloc=off" in grub. Both can fix this issue. Please see the attached log files.
> 
> Previously I thought "Above 4G Decoding" is enabled, but it is off when I looked CMOS setup today.
> 
> For now I think we have a solution. For the system that supports "Above 4G Decoding", user should enable it when use a SR-IOV supported device. For the system that doesn't support "Above 4G Decoding", user needs to add "pci=realloc=off" in grub.
> 
> Potentially I think kernel still needs to find a way to avoid this issue happen, like keeps the resource as the BIOS assigned value if there is a failure on device's resource reallocation.
> 
> 
> -Collins Cheng
> 
> 
> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Wednesday, May 24, 2017 2:20 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas 
> <bhelgaas@google.com>; linux-pci@vger.kernel.org; 
> linux-kernel@vger.kernel.org; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>; 
> Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the 
> SR-IOV incapable platform
> 
> On Tue, 23 May 2017 03:41:21 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
> 
> > Hi Alex,
> > 
> > I owe you a dmesg log. Attachment are two log files. 1.txt is without "pci=earlydump", 2.txt is with "pci=earlydump". The platform is an ASUS Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD FirePro S7150 card which enabled SR-IOV. 
> > 
> > You could find the error info like below in both logs. From the log, kernel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR (256MB needed), but kernel reallocated resource for BAR9 which is for VF. You are right, the real bug that is something goes wrong with the reallocation leaving the PF without resources.
> > 
> > [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> > [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> > [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> > [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> > [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> > [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> > [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> > [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> > [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> > [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> > [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> > [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]  
> 
> I've tried to extract more of the relevant resizing efforts below, perhaps Yinghai or others can make more out of it.  In particular this system offers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV resources without it.  AIUI, the PCI core won't try to use anything outside the ACPI _CRS data without the option pci=nocrs.
> This might present a second alternative in addition to the pci=realloc=off, which is actually suggested by the kernel below.  So I think we have at least two potential workarounds in the code as it exists today, one leaving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO not described by the system BIOS.
> Certainly an improvement would still be detecting the impossible 
> reallocation problem without nocrs and abandoning the process and of 
> course to revert the process before leaving more BARs unprogrammed 
> than we started with.  Thanks,
> 
> Alex
> 
> [    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
> [    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
> [    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
> [    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdfffffff window]
> [    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
> [    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
> ...
> [    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
> [    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64bit pref]
> [    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64bit pref]
> [    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
> [    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
> [    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pref]
> [    0.896590] pci 0000:01:00.0: supports D1 D2
> [    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
> [    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64bit pref]
> [    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fffffff 64bit pref] (contains BAR0 for 8 VFs)
> [    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64bit pref]
> [    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ffffff 64bit pref] (contains BAR2 for 8 VFs)
> [    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
> [    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ffffff] (contains BAR5 for 8 VFs)
> [    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
> [    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
> [    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
> [    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 02
> ...
> [    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
> [    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none
> [    0.943586] vgaarb: loaded
> [    0.943586] vgaarb: bridge control possible 0000:01:00.0
> ...
> [    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x02000000 64bit pref]
> [    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefffff]
> [    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fffff 64bit pref]
> ...
> [    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
> [    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
> [    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
> [    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] released
> [    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pref]
> [    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pref]
> [    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 64bit pref] released
> [    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
> [    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
> [    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adfffff]
> [    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000000]
> [    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x02000000]
> [    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000]
> [    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00040000]
> [    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000 pref]
> [    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00020000 pref]
> [    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfffff]
> ...
> [    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
> [    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pref]
> [    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pref]
> [    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] released
> [    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
> [    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] released
> [    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
> [    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 64bit pref] released
> [    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
> [    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
> [    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff] to [bus 01] add_size 2200000 add_align 400000
> [    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff 64bit pref] to [bus 05] add_size 200000 add_align 100000
> [    0.997692] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0x5fffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[15]=[mem 0x08000000-0xa7ffffff 64bit pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x022fffff] res_to_dev_res add_size 2200000 min_align 400000
> [    0.997694] pci 0000:00:1b.0: res[14]=[mem 0x00100000-0x044fffff] res_to_dev_res add_size 2200000 min_align 400000
> [    0.997695] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x002fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997696] pci 0000:00:1d.0: res[15]=[mem 0x00100000-0x004fffff 64bit pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa0000000 64bit pref]
> [    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa0000000 64bit pref]
> [    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cffffff]
> [    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88afffff]
> [    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3fffff 64bit pref]
> [    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x58000000 64bit pref]
> [    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x58000000 64bit pref]
> [    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abfffff]
> [    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acfffff]
> [    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aefffff 64bit pref]
> [    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0fffff 64bit pref] (expanded by 0x200000)
> [    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7fffff] (expanded by 0x2200000)
> [    0.997719] pci 0000:01:00.0: res[7]=[mem size 0x00000000 64bit pref] res_to_dev_res add_size 40000000 min_align 0
> [    0.997720] pci 0000:01:00.0: res[9]=[mem 0x00000000-0xffffffffffffffff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
> [    0.997721] pci 0000:01:00.0: res[12]=[mem size 0x00000000] res_to_dev_res add_size 2000000 min_align 0
> [    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fffff 64bit pref]
> [    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3fffff]
> [    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fffff 64bit pref]
> [    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ffff]
> [    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000 64bit pref]
> [    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10000000 64bit pref]
> [    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fffff 64bit pref]
> [    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ffff]
> [    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7fffff]
> [    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fffff 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40000000 64bit pref]
> [    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fffff]
> ...
> [    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
> you have problem, try booting with pci=realloc=off

^ permalink raw reply	[flat|nested] 43+ messages in thread

* RE: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform
@ 2017-05-27  8:17                             ` Cheng, Collins
  0 siblings, 0 replies; 43+ messages in thread
From: Cheng, Collins @ 2017-05-27  8:17 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Alexander Duyck, Bjorn Helgaas, linux-pci, linux-kernel, Deucher,
	Alexander, Zytaruk, Kelly, Yinghai Lu

Thanks Alex. I know it is difficult to reproduce this issue on your side.

I just created a bug to track it at https://bugzilla.kernel.org/show_bug.cg=
i?id=3D195891


-Collins Cheng


-----Original Message-----
From: Alex Williamson [mailto:alex.williamson@redhat.com]=20
Sent: Friday, May 26, 2017 11:52 PM
To: Cheng, Collins <Collins.Cheng@amd.com>
Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas <bhelgaas@go=
ogle.com>; linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; Deucher=
, Alexander <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.=
com>; Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV inc=
apable platform

On Fri, 26 May 2017 01:52:35 +0000
"Cheng, Collins" <Collins.Cheng@amd.com> wrote:

> Hi Alex W,
>=20
> I don't need the kernel patch anymore. However it looks the kernel could =
be improved to handle this more gracefully when PCI resource allocation fai=
l. Do you have a plan to improve it in kernel PCI code?

I don't have a device capable of reproducing and I'm currently working on i=
ssues elsewhere.  If you don't plan to continue working on it, I'd suggest =
filing a bug at bugzilla.kernel.org so that we can at least track the probl=
em.  Thanks,

Alex

> -----Original Message-----
> From: Cheng, Collins
> Sent: Wednesday, May 24, 2017 4:56 PM
> To: 'Alex Williamson' <alex.williamson@redhat.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas=20
> <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> linux-kernel@vger.kernel.org; Deucher, Alexander=20
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;=20
> Yinghai Lu <yinghai@kernel.org>
> Subject: RE: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> SR-IOV incapable platform
>=20
> Hi Alex W, Alex D,
>=20
> I just tried two options, one is enable "Above 4G Decoding" in BIOS setup=
 menu, the other is add "pci=3Drealloc=3Doff" in grub. Both can fix this is=
sue. Please see the attached log files.
>=20
> Previously I thought "Above 4G Decoding" is enabled, but it is off when I=
 looked CMOS setup today.
>=20
> For now I think we have a solution. For the system that supports "Above 4=
G Decoding", user should enable it when use a SR-IOV supported device. For =
the system that doesn't support "Above 4G Decoding", user needs to add "pci=
=3Drealloc=3Doff" in grub.
>=20
> Potentially I think kernel still needs to find a way to avoid this issue =
happen, like keeps the resource as the BIOS assigned value if there is a fa=
ilure on device's resource reallocation.
>=20
>=20
> -Collins Cheng
>=20
>=20
> -----Original Message-----
> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Wednesday, May 24, 2017 2:20 AM
> To: Cheng, Collins <Collins.Cheng@amd.com>
> Cc: Alexander Duyck <alexander.duyck@gmail.com>; Bjorn Helgaas=20
> <bhelgaas@google.com>; linux-pci@vger.kernel.org;=20
> linux-kernel@vger.kernel.org; Deucher, Alexander=20
> <Alexander.Deucher@amd.com>; Zytaruk, Kelly <Kelly.Zytaruk@amd.com>;=20
> Yinghai Lu <yinghai@kernel.org>
> Subject: Re: [PATCH] PCI: Make SR-IOV capable GPU working on the=20
> SR-IOV incapable platform
>=20
> On Tue, 23 May 2017 03:41:21 +0000
> "Cheng, Collins" <Collins.Cheng@amd.com> wrote:
>=20
> > Hi Alex,
> >=20
> > I owe you a dmesg log. Attachment are two log files. 1.txt is without "=
pci=3Dearlydump", 2.txt is with "pci=3Dearlydump". The platform is an ASUS =
Z170-A motherboard that doesn't support SR-IOV. The graphics card is AMD Fi=
rePro S7150 card which enabled SR-IOV.=20
> >=20
> > You could find the error info like below in both logs. From the log, ke=
rnel failed to reallocate resource for BAR0 which is PF's Frame Buffer BAR =
(256MB needed), but kernel reallocated resource for BAR9 which is for VF. Y=
ou are right, the real bug that is something goes wrong with the reallocati=
on leaving the PF without resources.
> >=20
> > [    0.992976] pci 0000:01:00.0: BAR 0: no space for [mem size 0x100000=
00 64bit pref]
> > [    0.992976] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x10=
000000 64bit pref]
> > [    0.992977] pci 0000:01:00.0: BAR 7: no space for [mem size 0x400000=
00 64bit pref]
> > [    0.992978] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x40=
000000 64bit pref]
> > [    0.992979] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abf=
ffff 64bit pref]
> > [    0.992986] pci 0000:01:00.0: BAR 12: no space for [mem size 0x02000=
000]
> > [    0.992986] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x0=
2000000]
> > [    0.992988] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adf=
ffff 64bit pref]
> > [    0.992994] pci 0000:01:00.0: BAR 5: no space for [mem size 0x000400=
00]
> > [    0.992995] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x00=
040000]
> > [    0.992996] pci 0000:01:00.0: BAR 6: no space for [mem size 0x000200=
00 pref]
> > [    0.992997] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x00=
020000 pref] =20
>=20
> I've tried to extract more of the relevant resizing efforts below, perhap=
s Yinghai or others can make more out of it.  In particular this system off=
ers no 64-bit MMIO and we'll never manage to allocate the necessary SR-IOV =
resources without it.  AIUI, the PCI core won't try to use anything outside=
 the ACPI _CRS data without the option pci=3Dnocrs.
> This might present a second alternative in addition to the pci=3Drealloc=
=3Doff, which is actually suggested by the kernel below.  So I think we hav=
e at least two potential workarounds in the code as it exists today, one le=
aving SR-IOV disabled, the other (hopefully) enabling it using 64bit MMIO n=
ot described by the system BIOS.
> Certainly an improvement would still be detecting the impossible=20
> reallocation problem without nocrs and abandoning the process and of=20
> course to revert the process before leaving more BARs unprogrammed=20
> than we started with.  Thanks,
>=20
> Alex
>=20
> [    0.891319] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 wind=
ow]
> [    0.891321] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff wind=
ow]
> [    0.891322] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bf=
fff window]
> [    0.891323] pci_bus 0000:00: root bus resource [mem 0x88800000-0xdffff=
fff window]
> [    0.891324] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7ff=
fff window]
> [    0.891325] pci_bus 0000:00: root bus resource [bus 00-fe]
> ...
> [    0.896481] pci 0000:01:00.0: [1002:6929] type 00 class 0x030000
> [    0.896496] pci 0000:01:00.0: reg 0x10: [mem 0xc0000000-0xcfffffff 64b=
it pref]
> [    0.896506] pci 0000:01:00.0: reg 0x18: [mem 0xd0000000-0xd01fffff 64b=
it pref]
> [    0.896513] pci 0000:01:00.0: reg 0x20: [io  0xe000-0xe0ff]
> [    0.896519] pci 0000:01:00.0: reg 0x24: [mem 0xdfe00000-0xdfe3ffff]
> [    0.896526] pci 0000:01:00.0: reg 0x30: [mem 0xdfe40000-0xdfe5ffff pre=
f]
> [    0.896590] pci 0000:01:00.0: supports D1 D2
> [    0.896590] pci 0000:01:00.0: PME# supported from D1 D2 D3hot D3cold
> [    0.896625] pci 0000:01:00.0: reg 0x354: [mem 0x00000000-0x07ffffff 64=
bit pref]
> [    0.896626] pci 0000:01:00.0: VF(n) BAR0 space: [mem 0x00000000-0x3fff=
ffff 64bit pref] (contains BAR0 for 8 VFs)
> [    0.896634] pci 0000:01:00.0: reg 0x35c: [mem 0x00000000-0x003fffff 64=
bit pref]
> [    0.896635] pci 0000:01:00.0: VF(n) BAR2 space: [mem 0x00000000-0x01ff=
ffff 64bit pref] (contains BAR2 for 8 VFs)
> [    0.896646] pci 0000:01:00.0: reg 0x368: [mem 0x00000000-0x003fffff]
> [    0.896647] pci 0000:01:00.0: VF(n) BAR5 space: [mem 0x00000000-0x01ff=
ffff] (contains BAR5 for 8 VFs)
> [    0.896700] pci 0000:01:00.0: System wakeup disabled by ACPI
> [    0.906527] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.906544] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.906546] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefff=
ff]
> [    0.906549] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fff=
ff 64bit pref]
> [    0.906550] pci 0000:00:1b.0: bridge has subordinate 01 but max busn 0=
2
> ...
> [    0.943584] vgaarb: setting as boot device: PCI:0000:01:00.0
> [    0.943585] vgaarb: device added: PCI:0000:01:00.0,decodes=3Dio+mem,ow=
ns=3Dio+mem,locks=3Dnone
> [    0.943586] vgaarb: loaded
> [    0.943586] vgaarb: bridge control possible 0000:01:00.0
> ...
> [    0.997491] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.997491] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: no space for [mem size 0x02000000=
 64bit pref]
> [    0.997493] pci 0000:01:00.0: BAR 9: failed to assign [mem size 0x0200=
0000 64bit pref]
> [    0.997495] pci 0000:01:00.0: BAR 12: no space for [mem size 0x0200000=
0]
> [    0.997495] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x020=
00000]
> [    0.997497] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997498] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997501] pci 0000:00:1b.0:   bridge window [mem 0xdfe00000-0xdfefff=
ff]
> [    0.997502] pci 0000:00:1b.0:   bridge window [mem 0xc0000000-0xd01fff=
ff 64bit pref]
> ...
> [    0.997540] pci_bus 0000:00: No. 2 try to assign unassigned res
> [    0.997540] release child resource [mem 0xdfe00000-0xdfe3ffff]
> [    0.997540] release child resource [mem 0xdfe40000-0xdfe5ffff pref]
> [    0.997541] pci 0000:00:1b.0: resource 14 [mem 0xdfe00000-0xdfefffff] =
released
> [    0.997542] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997543] release child resource [mem 0xc0000000-0xcfffffff 64bit pr=
ef]
> [    0.997544] release child resource [mem 0xd0000000-0xd01fffff 64bit pr=
ef]
> [    0.997544] pci 0000:00:1b.0: resource 15 [mem 0xc0000000-0xd01fffff 6=
4bit pref] released
> [    0.997545] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997576] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x5800000=
0 64bit pref]
> [    0.997577] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x580=
00000 64bit pref]
> [    0.997578] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8adff=
fff]
> [    0.997583] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.997583] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.997585] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.997587] pci 0000:01:00.0: BAR 9: assigned [mem 0x88c00000-0x8abfff=
ff 64bit pref]
> [    0.997593] pci 0000:01:00.0: BAR 12: no space for [mem size 0x0200000=
0]
> [    0.997594] pci 0000:01:00.0: BAR 12: failed to assign [mem size 0x020=
00000]
> [    0.997595] pci 0000:01:00.0: BAR 2: assigned [mem 0x8ac00000-0x8adfff=
ff 64bit pref]
> [    0.997602] pci 0000:01:00.0: BAR 5: no space for [mem size 0x00040000=
]
> [    0.997602] pci 0000:01:00.0: BAR 5: failed to assign [mem size 0x0004=
0000]
> [    0.997603] pci 0000:01:00.0: BAR 6: no space for [mem size 0x00020000=
 pref]
> [    0.997604] pci 0000:01:00.0: BAR 6: failed to assign [mem size 0x0002=
0000 pref]
> [    0.997606] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997607] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997609] pci 0000:00:1b.0:   bridge window [mem 0x88c00000-0x8adfff=
ff]
> ...
> [    0.997647] pci_bus 0000:00: No. 3 try to assign unassigned res
> [    0.997648] release child resource [mem 0x88c00000-0x8abfffff 64bit pr=
ef]
> [    0.997648] release child resource [mem 0x8ac00000-0x8adfffff 64bit pr=
ef]
> [    0.997649] pci 0000:00:1b.0: resource 14 [mem 0x88c00000-0x8adfffff] =
released
> [    0.997649] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997651] release child resource [mem 0xdfd00000-0xdfd07fff 64bit]
> [    0.997651] pci 0000:00:1c.0: resource 14 [mem 0xdfd00000-0xdfdfffff] =
released
> [    0.997652] pci 0000:00:1c.0: PCI bridge to [bus 02]
> [    0.997654] pci 0000:00:1d.0: resource 15 [mem 0x88a00000-0x88bfffff 6=
4bit pref] released
> [    0.997654] pci 0000:00:1d.0: PCI bridge to [bus 05]
> [    0.997664] pci 0000:00:1b.0: bridge window [mem 0x08000000-0x5fffffff=
 64bit pref] to [bus 01] add_size 48000000 add_align 8000000
> [    0.997666] pci 0000:00:1b.0: bridge window [mem 0x00100000-0x022fffff=
] to [bus 01] add_size 2200000 add_align 400000
> [    0.997687] pci 0000:00:1d.0: bridge window [mem 0x00100000-0x002fffff=
 64bit pref] to [bus 05] add_size 200000 add_align 100000
> [    0.997692] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0x5fffffff 64b=
it pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[15]=3D[mem 0x08000000-0xa7ffffff 64b=
it pref] res_to_dev_res add_size 48000000 min_align 8000000
> [    0.997693] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x022fffff] re=
s_to_dev_res add_size 2200000 min_align 400000
> [    0.997694] pci 0000:00:1b.0: res[14]=3D[mem 0x00100000-0x044fffff] re=
s_to_dev_res add_size 2200000 min_align 400000
> [    0.997695] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x002fffff 64b=
it pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997696] pci 0000:00:1d.0: res[15]=3D[mem 0x00100000-0x004fffff 64b=
it pref] res_to_dev_res add_size 200000 min_align 100000
> [    0.997698] pci 0000:00:1b.0: BAR 15: no space for [mem size 0xa000000=
0 64bit pref]
> [    0.997699] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0xa00=
00000 64bit pref]
> [    0.997700] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88c00000-0x8cfff=
fff]
> [    0.997701] pci 0000:00:1c.0: BAR 14: assigned [mem 0x88a00000-0x88aff=
fff]
> [    0.997702] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8d000000-0x8d3ff=
fff 64bit pref]
> [    0.997705] pci 0000:00:1b.0: BAR 15: no space for [mem size 0x5800000=
0 64bit pref]
> [    0.997706] pci 0000:00:1b.0: BAR 15: failed to assign [mem size 0x580=
00000 64bit pref]
> [    0.997707] pci 0000:00:1b.0: BAR 14: assigned [mem 0x88a00000-0x8abff=
fff]
> [    0.997708] pci 0000:00:1c.0: BAR 14: assigned [mem 0x8ac00000-0x8acff=
fff]
> [    0.997709] pci 0000:00:1d.0: BAR 15: assigned [mem 0x8ad00000-0x8aeff=
fff 64bit pref]
> [    0.997711] pci 0000:00:1d.0: BAR 15: reassigned [mem 0x8ad00000-0x8b0=
fffff 64bit pref] (expanded by 0x200000)
> [    0.997713] pci 0000:00:1b.0: BAR 14: reassigned [mem 0x8b400000-0x8f7=
fffff] (expanded by 0x2200000)
> [    0.997719] pci 0000:01:00.0: res[7]=3D[mem size 0x00000000 64bit pref=
] res_to_dev_res add_size 40000000 min_align 0
> [    0.997720] pci 0000:01:00.0: res[9]=3D[mem 0x00000000-0xfffffffffffff=
fff 64bit pref] res_to_dev_res add_size 2000000 min_align 0
> [    0.997721] pci 0000:01:00.0: res[12]=3D[mem size 0x00000000] res_to_d=
ev_res add_size 2000000 min_align 0
> [    0.997722] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.997722] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.997723] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.997724] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.997725] pci 0000:01:00.0: BAR 9: assigned [mem 0x8b400000-0x8d3fff=
ff 64bit pref]
> [    0.997731] pci 0000:01:00.0: BAR 12: assigned [mem 0x8d400000-0x8f3ff=
fff]
> [    0.997734] pci 0000:01:00.0: BAR 2: assigned [mem 0x8f400000-0x8f5fff=
ff 64bit pref]
> [    0.997740] pci 0000:01:00.0: BAR 5: assigned [mem 0x8f600000-0x8f63ff=
ff]
> [    0.997744] pci 0000:01:00.0: BAR 0: no space for [mem size 0x10000000=
 64bit pref]
> [    0.997745] pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x1000=
0000 64bit pref]
> [    0.997746] pci 0000:01:00.0: BAR 2: assigned [mem 0x8b400000-0x8b5fff=
ff 64bit pref]
> [    0.997753] pci 0000:01:00.0: BAR 5: assigned [mem 0x8b600000-0x8b63ff=
ff]
> [    0.997756] pci 0000:01:00.0: BAR 12: assigned [mem 0x8b800000-0x8d7ff=
fff]
> [    0.997758] pci 0000:01:00.0: BAR 9: assigned [mem 0x8d800000-0x8f7fff=
ff 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: no space for [mem size 0x40000000=
 64bit pref]
> [    0.997765] pci 0000:01:00.0: BAR 7: failed to assign [mem size 0x4000=
0000 64bit pref]
> [    0.997767] pci 0000:00:1b.0: PCI bridge to [bus 01]
> [    0.997768] pci 0000:00:1b.0:   bridge window [io  0xe000-0xefff]
> [    0.997770] pci 0000:00:1b.0:   bridge window [mem 0x8b400000-0x8f7fff=
ff]
> ...
> [    0.997818] pci_bus 0000:00: Automatically enabled pci realloc, if
> you have problem, try booting with pci=3Drealloc=3Doff

^ permalink raw reply	[flat|nested] 43+ messages in thread

end of thread, other threads:[~2017-05-27  8:17 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-12  2:50 [PATCH] PCI: Make SR-IOV capable GPU working on the SR-IOV incapable platform Cheng, Collins
2017-05-12  2:50 ` Cheng, Collins
2017-05-12  3:20 ` Alex Williamson
2017-05-12  3:42   ` Cheng, Collins
2017-05-12  3:42     ` Cheng, Collins
2017-05-12  4:01     ` Alex Williamson
2017-05-12  4:51       ` Cheng, Collins
2017-05-12  4:51         ` Cheng, Collins
2017-05-12 14:43         ` Alex Williamson
2017-05-15  8:19           ` Cheng, Collins
2017-05-15  8:19             ` Cheng, Collins
2017-05-15 17:53             ` Alex Williamson
2017-05-16  8:45               ` Cheng, Collins
2017-05-16  8:45                 ` Cheng, Collins
2017-05-19 15:43               ` Alexander Duyck
2017-05-19 15:43                 ` Alexander Duyck
2017-05-20  4:53                 ` Cheng, Collins
2017-05-20  4:53                   ` Cheng, Collins
2017-05-20 10:27                   ` Zytaruk, Kelly
2017-05-20 10:27                     ` Zytaruk, Kelly
2017-05-20 10:37                     ` Cheng, Collins
2017-05-20 10:37                       ` Cheng, Collins
2017-05-20 14:29                       ` Zytaruk, Kelly
2017-05-20 14:29                         ` Zytaruk, Kelly
2017-05-21  0:03                         ` Alexander Duyck
2017-05-22 15:44                 ` Alex Williamson
2017-05-23  3:41                   ` Cheng, Collins
2017-05-23 16:02                     ` Alexander Duyck
2017-05-23 16:02                       ` Alexander Duyck
2017-05-23 18:20                     ` Alex Williamson
2017-05-24  8:56                       ` Cheng, Collins
2017-05-24  8:57                       ` Cheng, Collins
2017-05-24  8:57                         ` Cheng, Collins
2017-05-24 14:57                         ` Alex Williamson
2017-05-26  1:52                       ` Cheng, Collins
2017-05-26  1:52                         ` Cheng, Collins
2017-05-26 15:52                         ` Alex Williamson
2017-05-27  8:17                           ` Cheng, Collins
2017-05-27  8:17                             ` Cheng, Collins
2017-05-12  3:44   ` Zytaruk, Kelly
2017-05-12  3:44     ` Zytaruk, Kelly
2017-05-23 12:15 ` Deucher, Alexander
2017-05-23 12:15   ` Deucher, Alexander

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.