linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct
@ 2018-03-01 21:31 KarimAllah Ahmed
  2018-03-01 21:31 ` [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them KarimAllah Ahmed
  2018-03-02 21:36 ` [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct Bjorn Helgaas
  0 siblings, 2 replies; 6+ messages in thread
From: KarimAllah Ahmed @ 2018-03-01 21:31 UTC (permalink / raw)
  To: linux-kernel, linux-pci; +Cc: KarimAllah Ahmed, Bjorn Helgaas

Store more data about PCI VFs into the SRIOV to avoid reading them from the
config space of all the PCI VFs. This is specially a useful optimization
when bringing up thousands of VFs.

Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
---
v2 -> v3:
 * Update changelog
 * Move the call to pci_read_vf_config_common a bit later and use standard
   pci_read_config*.
 * Update whitespace.
 * Move the using barsz into its own patch.
 * Added a comment about the usage of subsystem vendor id, subsystem id, and
   class revision.
 * Make sure virtfn->is_virtfn is set before calling into pci_setup_device.

v1 -> v2:
 * Rebase on latest + remove dependency on a non-upstream patch.

 drivers/pci/iov.c   | 48 +++++++++++++++++++++++++++++++++++++++++-------
 drivers/pci/pci.h   |  5 +++++
 drivers/pci/probe.c | 18 ++++++++++++++----
 3 files changed, 60 insertions(+), 11 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 677924a..10291a0 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -114,6 +114,36 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
 	return dev->sriov->barsz[resno - PCI_IOV_RESOURCES];
 }
 
+static void pci_read_vf_config_common(struct pci_dev *virtfn)
+{
+	struct pci_dev *physfn = virtfn->physfn;
+
+	BUG_ON(!virtfn->is_virtfn || physfn->is_virtfn);
+
+	/*
+	 * Per PCIe r4.0, sec 9.3.4.1.5, the value reported in the VF maybe
+	 * different than the value reported in the PF. We assume here that all
+	 * VFs would report the same revision ID.
+	 */
+	pci_read_config_dword(virtfn, PCI_CLASS_REVISION,
+			      &physfn->sriov->class);
+	/*
+	 * Per PCIe r4.0, sec 9.3.4.1.13, the field in the PF and the
+	 * associated VFs must return the same value.
+	 */
+	pci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID,
+			     &physfn->sriov->subsystem_vendor);
+	/*
+	 * Per PCIe r4.0, sec 9.3.4.1.14, the value reported in the VF maybe
+	 * different than the value reported in the PF. We assume here that all
+	 * VFs would report the same subsystem ID.
+	 */
+	pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
+			     &physfn->sriov->subsystem_device);
+	pci_read_config_byte(virtfn, PCI_HEADER_TYPE,
+			     &physfn->sriov->hdr_type);
+}
+
 int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 {
 	int i;
@@ -134,15 +164,18 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 		goto failed0;
 
 	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
+	virtfn->is_virtfn = 1;
+	virtfn->physfn = pci_dev_get(dev);
+	if (id == 0)
+		/* virtfn->{devfn,bus,is_virtfn,physfn} have to be initialized */
+		pci_read_vf_config_common(virtfn);
 	virtfn->vendor = dev->vendor;
 	virtfn->device = iov->vf_device;
 	rc = pci_setup_device(virtfn);
 	if (rc)
-		goto failed0;
+		goto failed1;
 
 	virtfn->dev.parent = dev->dev.parent;
-	virtfn->physfn = pci_dev_get(dev);
-	virtfn->is_virtfn = 1;
 	virtfn->multifunction = 0;
 
 	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
@@ -163,10 +196,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 	sprintf(buf, "virtfn%u", id);
 	rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
 	if (rc)
-		goto failed1;
+		goto failed2;
 	rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
 	if (rc)
-		goto failed2;
+		goto failed3;
 
 	kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
@@ -174,11 +207,12 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 
 	return 0;
 
-failed2:
+failed3:
 	sysfs_remove_link(&dev->dev.kobj, buf);
+failed2:
+	pci_stop_and_remove_bus_device(virtfn);
 failed1:
 	pci_dev_put(dev);
-	pci_stop_and_remove_bus_device(virtfn);
 failed0:
 	virtfn_remove_bus(dev->bus, bus);
 failed:
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index fcd8191..17e6688 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -271,6 +271,11 @@ struct pci_sriov {
 	u16		driver_max_VFs;	/* Max num VFs driver supports */
 	struct pci_dev	*dev;		/* Lowest numbered PF */
 	struct pci_dev	*self;		/* This PF */
+	u8		hdr_type;	/* VF header type */
+	u32		class;		/* VF device */
+	u16		device;		/* VF device */
+	u16		subsystem_vendor; /* VF subsystem vendor */
+	u16		subsystem_device; /* VF subsystem device */
 	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
 	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
 };
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index ef53774..a96837e 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1454,7 +1454,9 @@ int pci_setup_device(struct pci_dev *dev)
 	struct pci_bus_region region;
 	struct resource *res;
 
-	if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
+	if (dev->is_virtfn)
+		hdr_type = dev->physfn->sriov->hdr_type;
+	else if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
 		return -EIO;
 
 	dev->sysdata = dev->bus->sysdata;
@@ -1477,7 +1479,10 @@ int pci_setup_device(struct pci_dev *dev)
 		     dev->bus->number, PCI_SLOT(dev->devfn),
 		     PCI_FUNC(dev->devfn));
 
-	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
+	if (dev->is_virtfn)
+		class = dev->physfn->sriov->class;
+	else
+		pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
 	dev->revision = class & 0xff;
 	dev->class = class >> 8;		    /* upper 3 bytes */
 
@@ -1517,8 +1522,13 @@ int pci_setup_device(struct pci_dev *dev)
 			goto bad;
 		pci_read_irq(dev);
 		pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
-		pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
-		pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+		if (dev->is_virtfn) {
+			dev->subsystem_vendor = dev->physfn->sriov->subsystem_vendor;
+			dev->subsystem_device = dev->physfn->sriov->subsystem_device;
+		} else {
+			pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
+			pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+		}
 
 		/*
 		 * Do the ugly legacy mode stuff here rather than broken chip
-- 
2.7.4

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

* [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them
  2018-03-01 21:31 [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct KarimAllah Ahmed
@ 2018-03-01 21:31 ` KarimAllah Ahmed
  2018-03-02 21:48   ` Bjorn Helgaas
  2018-03-02 21:36 ` [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct Bjorn Helgaas
  1 sibling, 1 reply; 6+ messages in thread
From: KarimAllah Ahmed @ 2018-03-01 21:31 UTC (permalink / raw)
  To: linux-kernel, linux-pci; +Cc: KarimAllah Ahmed, Bjorn Helgaas

Use the cached VF BARs size instead of re-reading them from the hardware.
That avoids doing unnecessarily bus transactions which is specially
noticable when you have a PF with a large number of VFs.

Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
---
 drivers/pci/probe.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index a96837e..aeaa10a 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -180,6 +180,7 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
 int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 		    struct resource *res, unsigned int pos)
 {
+	int bar = res - dev->resource;
 	u32 l = 0, sz = 0, mask;
 	u64 l64, sz64, mask64;
 	u16 orig_cmd;
@@ -199,9 +200,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 	res->name = pci_name(dev);
 
 	pci_read_config_dword(dev, pos, &l);
-	pci_write_config_dword(dev, pos, l | mask);
-	pci_read_config_dword(dev, pos, &sz);
-	pci_write_config_dword(dev, pos, l);
+	if (dev->is_virtfn) {
+		sz = dev->physfn->sriov->barsz[bar] & 0xffffffff;
+	} else {
+		pci_write_config_dword(dev, pos, l | mask);
+		pci_read_config_dword(dev, pos, &sz);
+		pci_write_config_dword(dev, pos, l);
+	}
 
 	/*
 	 * All bits set in sz means the device isn't working properly.
@@ -241,9 +246,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 
 	if (res->flags & IORESOURCE_MEM_64) {
 		pci_read_config_dword(dev, pos + 4, &l);
-		pci_write_config_dword(dev, pos + 4, ~0);
-		pci_read_config_dword(dev, pos + 4, &sz);
-		pci_write_config_dword(dev, pos + 4, l);
+
+		if (dev->is_virtfn) {
+			sz = (dev->physfn->sriov->barsz[bar] >> 32) & 0xffffffff;
+		} else {
+			pci_write_config_dword(dev, pos + 4, ~0);
+			pci_read_config_dword(dev, pos + 4, &sz);
+			pci_write_config_dword(dev, pos + 4, l);
+		}
 
 		l64 |= ((u64)l << 32);
 		sz64 |= ((u64)sz << 32);
@@ -332,6 +342,8 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
 	for (pos = 0; pos < howmany; pos++) {
 		struct resource *res = &dev->resource[pos];
 		reg = PCI_BASE_ADDRESS_0 + (pos << 2);
+		if (dev->is_virtfn && dev->physfn->sriov->barsz[pos] == 0)
+			continue;
 		pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
 	}
 
-- 
2.7.4

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

* Re: [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct
  2018-03-01 21:31 [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct KarimAllah Ahmed
  2018-03-01 21:31 ` [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them KarimAllah Ahmed
@ 2018-03-02 21:36 ` Bjorn Helgaas
  2018-03-06 10:37   ` Raslan, KarimAllah
  1 sibling, 1 reply; 6+ messages in thread
From: Bjorn Helgaas @ 2018-03-02 21:36 UTC (permalink / raw)
  To: KarimAllah Ahmed; +Cc: linux-kernel, linux-pci, Bjorn Helgaas

On Thu, Mar 01, 2018 at 10:31:36PM +0100, KarimAllah Ahmed wrote:
> Store more data about PCI VFs into the SRIOV to avoid reading them from the
> config space of all the PCI VFs. This is specially a useful optimization
> when bringing up thousands of VFs.
> 
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>

Applied to pci/virtualization for v4.17, thanks!

I removed the pci_sriov.device field, which seemed to be unused, and
tweaked a few other things, so make sure I didn't break anything.  Here's
what I have currently applied:

commit e17b7b429b095200f93ad37c4efeb7a99b6fce3b
Author: KarimAllah Ahmed <karahmed@amazon.de>
Date:   Thu Mar 1 22:31:36 2018 +0100

    PCI/IOV: Use VF0 cached config registers for other VFs
    
    Cache some config data from VF0 and use it for all other VFs instead of
    reading it from the config space of each VF.  We assume these items are the
    same across all associated VFs:
    
      Revision ID
      Class Code
      Subsystem Vendor ID
      Subsystem ID
    
    This is an optimization when enabling SR-IOV on a device with many VFs.
    
    Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
    [bhelgaas: changelog, simplify comments, remove unused "device"]
    Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 677924ae0350..30bf8f706ed9 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -114,6 +114,29 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
 	return dev->sriov->barsz[resno - PCI_IOV_RESOURCES];
 }
 
+static void pci_read_vf_config_common(struct pci_dev *virtfn)
+{
+	struct pci_dev *physfn = virtfn->physfn;
+
+	/*
+	 * Some config registers are the same across all associated VFs.
+	 * Read them once from VF0 so we can skip reading them from the
+	 * other VFs.
+	 *
+	 * PCIe r4.0, sec 9.3.4.1, technically doesn't require all VFs to
+	 * have the same Revision ID and Subsystem ID, but we assume they
+	 * do.
+	 */
+	pci_read_config_dword(virtfn, PCI_CLASS_REVISION,
+			      &physfn->sriov->class);
+	pci_read_config_byte(virtfn, PCI_HEADER_TYPE,
+			     &physfn->sriov->hdr_type);
+	pci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID,
+			     &physfn->sriov->subsystem_vendor);
+	pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
+			     &physfn->sriov->subsystem_device);
+}
+
 int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 {
 	int i;
@@ -136,13 +159,17 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
 	virtfn->vendor = dev->vendor;
 	virtfn->device = iov->vf_device;
+	virtfn->is_virtfn = 1;
+	virtfn->physfn = pci_dev_get(dev);
+
+	if (id == 0)
+		pci_read_vf_config_common(virtfn);
+
 	rc = pci_setup_device(virtfn);
 	if (rc)
-		goto failed0;
+		goto failed1;
 
 	virtfn->dev.parent = dev->dev.parent;
-	virtfn->physfn = pci_dev_get(dev);
-	virtfn->is_virtfn = 1;
 	virtfn->multifunction = 0;
 
 	for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
@@ -163,10 +190,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 	sprintf(buf, "virtfn%u", id);
 	rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
 	if (rc)
-		goto failed1;
+		goto failed2;
 	rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
 	if (rc)
-		goto failed2;
+		goto failed3;
 
 	kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
@@ -174,11 +201,12 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 
 	return 0;
 
-failed2:
+failed3:
 	sysfs_remove_link(&dev->dev.kobj, buf);
+failed2:
+	pci_stop_and_remove_bus_device(virtfn);
 failed1:
 	pci_dev_put(dev);
-	pci_stop_and_remove_bus_device(virtfn);
 failed0:
 	virtfn_remove_bus(dev->bus, bus);
 failed:
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index fcd81911b127..db76933be859 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -271,6 +271,10 @@ struct pci_sriov {
 	u16		driver_max_VFs;	/* Max num VFs driver supports */
 	struct pci_dev	*dev;		/* Lowest numbered PF */
 	struct pci_dev	*self;		/* This PF */
+	u32		class;		/* VF class */
+	u8		hdr_type;	/* VF header type */
+	u16		subsystem_vendor; /* VF subsystem vendor */
+	u16		subsystem_device; /* VF subsystem device */
 	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
 	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
 };
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index a1cddca37793..78deb950bda1 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1461,7 +1461,9 @@ int pci_setup_device(struct pci_dev *dev)
 	struct pci_bus_region region;
 	struct resource *res;
 
-	if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
+	if (dev->is_virtfn)
+		hdr_type = dev->physfn->sriov->hdr_type;
+	else if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
 		return -EIO;
 
 	dev->sysdata = dev->bus->sysdata;
@@ -1484,7 +1486,10 @@ int pci_setup_device(struct pci_dev *dev)
 		     dev->bus->number, PCI_SLOT(dev->devfn),
 		     PCI_FUNC(dev->devfn));
 
-	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
+	if (dev->is_virtfn)
+		class = dev->physfn->sriov->class;
+	else
+		pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
 	dev->revision = class & 0xff;
 	dev->class = class >> 8;		    /* upper 3 bytes */
 
@@ -1524,8 +1529,13 @@ int pci_setup_device(struct pci_dev *dev)
 			goto bad;
 		pci_read_irq(dev);
 		pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
-		pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
-		pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+		if (dev->is_virtfn) {
+			dev->subsystem_vendor = dev->physfn->sriov->subsystem_vendor;
+			dev->subsystem_device = dev->physfn->sriov->subsystem_device;
+		} else {
+			pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
+			pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
+		}
 
 		/*
 		 * Do the ugly legacy mode stuff here rather than broken chip

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

* Re: [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them
  2018-03-01 21:31 ` [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them KarimAllah Ahmed
@ 2018-03-02 21:48   ` Bjorn Helgaas
  2018-03-03  4:34     ` Raslan, KarimAllah
  0 siblings, 1 reply; 6+ messages in thread
From: Bjorn Helgaas @ 2018-03-02 21:48 UTC (permalink / raw)
  To: KarimAllah Ahmed; +Cc: linux-kernel, linux-pci, Bjorn Helgaas

On Thu, Mar 01, 2018 at 10:31:37PM +0100, KarimAllah Ahmed wrote:
> Use the cached VF BARs size instead of re-reading them from the hardware.
> That avoids doing unnecessarily bus transactions which is specially
> noticable when you have a PF with a large number of VFs.

Thanks a lot for breaking this out!  It seems trivial, but it did make it
much easier for me to think about this one.

> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
> ---
>  drivers/pci/probe.c | 24 ++++++++++++++++++------
>  1 file changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index a96837e..aeaa10a 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -180,6 +180,7 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
>  int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
>  		    struct resource *res, unsigned int pos)
>  {
> +	int bar = res - dev->resource;
>  	u32 l = 0, sz = 0, mask;
>  	u64 l64, sz64, mask64;
>  	u16 orig_cmd;
> @@ -199,9 +200,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
>  	res->name = pci_name(dev);
>  
>  	pci_read_config_dword(dev, pos, &l);
> -	pci_write_config_dword(dev, pos, l | mask);
> -	pci_read_config_dword(dev, pos, &sz);
> -	pci_write_config_dword(dev, pos, l);
> +	if (dev->is_virtfn) {
> +		sz = dev->physfn->sriov->barsz[bar] & 0xffffffff;
> +	} else {
> +		pci_write_config_dword(dev, pos, l | mask);
> +		pci_read_config_dword(dev, pos, &sz);
> +		pci_write_config_dword(dev, pos, l);
> +	}

I don't quite understand this.  This is reading the regular BARs (config
offsets 0x10, 0x14, ..., 0x24).  Per sec 9.3.4.1.11, these are all RO Zero
for VFs.  That should make them look like they're all unimplemented.

But this patch makes us use the size we discovered from the PF's VF BARn
registers in its SR-IOV capability.  Won't that cause us to fill in the
VF's dev->resource[n], when we didn't do it before?

>  	/*
>  	 * All bits set in sz means the device isn't working properly.
> @@ -241,9 +246,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
>  
>  	if (res->flags & IORESOURCE_MEM_64) {
>  		pci_read_config_dword(dev, pos + 4, &l);
> -		pci_write_config_dword(dev, pos + 4, ~0);
> -		pci_read_config_dword(dev, pos + 4, &sz);
> -		pci_write_config_dword(dev, pos + 4, l);
> +
> +		if (dev->is_virtfn) {
> +			sz = (dev->physfn->sriov->barsz[bar] >> 32) & 0xffffffff;
> +		} else {
> +			pci_write_config_dword(dev, pos + 4, ~0);
> +			pci_read_config_dword(dev, pos + 4, &sz);
> +			pci_write_config_dword(dev, pos + 4, l);
> +		}
>  
>  		l64 |= ((u64)l << 32);
>  		sz64 |= ((u64)sz << 32);
> @@ -332,6 +342,8 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
>  	for (pos = 0; pos < howmany; pos++) {
>  		struct resource *res = &dev->resource[pos];
>  		reg = PCI_BASE_ADDRESS_0 + (pos << 2);
> +		if (dev->is_virtfn && dev->physfn->sriov->barsz[pos] == 0)
> +			continue;

Since we know the VF BARs are all zero (the ones in the VF config space,
not the ones in the PF SR-IOV capability), including the VF ROM BAR, it
would make sense to me to totally skip this whole function, e.g.,

  if (dev->non_compliant_bars)
    return;

  if (dev->is_virtfn)
    return;

>  		pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
>  	}
>  
> -- 
> 2.7.4
> 

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

* Re: [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them
  2018-03-02 21:48   ` Bjorn Helgaas
@ 2018-03-03  4:34     ` Raslan, KarimAllah
  0 siblings, 0 replies; 6+ messages in thread
From: Raslan, KarimAllah @ 2018-03-03  4:34 UTC (permalink / raw)
  To: helgaas@kernel.org
  Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
	bhelgaas@google.com

T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjQ4IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K
PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozN1BNICswMTAwLCBLYXJpbUFsbGFoIEFo
bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFVzZSB0aGUgY2FjaGVkIFZGIEJBUnMgc2l6ZSBpbnN0ZWFk
IG9mIHJlLXJlYWRpbmcgdGhlbSBmcm9tIHRoZSBoYXJkd2FyZS4NCj4gPiBUaGF0IGF2b2lkcyBk
b2luZyB1bm5lY2Vzc2FyaWx5IGJ1cyB0cmFuc2FjdGlvbnMgd2hpY2ggaXMgc3BlY2lhbGx5DQo+
ID4gbm90aWNhYmxlIHdoZW4geW91IGhhdmUgYSBQRiB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIFZG
cy4NCj4gDQo+IFRoYW5rcyBhIGxvdCBmb3IgYnJlYWtpbmcgdGhpcyBvdXQhICBJdCBzZWVtcyB0
cml2aWFsLCBidXQgaXQgZGlkIG1ha2UgaXQNCj4gbXVjaCBlYXNpZXIgZm9yIG1lIHRvIHRoaW5r
IGFib3V0IHRoaXMgb25lLg0KPiANCj4gPiANCj4gPiBDYzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdh
YXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZw0KPiA+IENj
OiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1B
bGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3Bj
aS9wcm9iZS5jIHwgMjQgKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gIDEgZmlsZSBjaGFu
Z2VkLCAxOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYw0KPiA+IGluZGV4
IGE5NjgzN2UuLmFlYWExMGEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYw0K
PiA+ICsrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMNCj4gPiBAQCAtMTgwLDYgKzE4MCw3IEBAIHN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWNvZGVfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYs
IHUzMiBiYXIpDQo+ID4gIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwg
ZW51bSBwY2lfYmFyX3R5cGUgdHlwZSwNCj4gPiAgCQkgICAgc3RydWN0IHJlc291cmNlICpyZXMs
IHVuc2lnbmVkIGludCBwb3MpDQo+ID4gIHsNCj4gPiArCWludCBiYXIgPSByZXMgLSBkZXYtPnJl
c291cmNlOw0KPiA+ICAJdTMyIGwgPSAwLCBzeiA9IDAsIG1hc2s7DQo+ID4gIAl1NjQgbDY0LCBz
ejY0LCBtYXNrNjQ7DQo+ID4gIAl1MTYgb3JpZ19jbWQ7DQo+ID4gQEAgLTE5OSw5ICsyMDAsMTMg
QEAgaW50IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJf
dHlwZSB0eXBlLA0KPiA+ICAJcmVzLT5uYW1lID0gcGNpX25hbWUoZGV2KTsNCj4gPiAgDQo+ID4g
IAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZsKTsNCj4gPiAtCXBjaV93cml0ZV9j
b25maWdfZHdvcmQoZGV2LCBwb3MsIGwgfCBtYXNrKTsNCj4gPiAtCXBjaV9yZWFkX2NvbmZpZ19k
d29yZChkZXYsIHBvcywgJnN6KTsNCj4gPiAtCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBw
b3MsIGwpOw0KPiA+ICsJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJc3ogPSBkZXYtPnBo
eXNmbi0+c3Jpb3YtPmJhcnN6W2Jhcl0gJiAweGZmZmZmZmZmOw0KPiA+ICsJfSBlbHNlIHsNCj4g
PiArCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zLCBsIHwgbWFzayk7DQo+ID4gKwkJ
cGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmc3opOw0KPiA+ICsJCXBjaV93cml0ZV9j
b25maWdfZHdvcmQoZGV2LCBwb3MsIGwpOw0KPiA+ICsJfQ0KPiANCj4gSSBkb24ndCBxdWl0ZSB1
bmRlcnN0YW5kIHRoaXMuICBUaGlzIGlzIHJlYWRpbmcgdGhlIHJlZ3VsYXIgQkFScyAoY29uZmln
DQo+IG9mZnNldHMgMHgxMCwgMHgxNCwgLi4uLCAweDI0KS4gIFBlciBzZWMgOS4zLjQuMS4xMSwg
dGhlc2UgYXJlIGFsbCBSTyBaZXJvDQo+IGZvciBWRnMuICBUaGF0IHNob3VsZCBtYWtlIHRoZW0g
bG9vayBsaWtlIHRoZXkncmUgYWxsIHVuaW1wbGVtZW50ZWQuDQo+IA0KPiBCdXQgdGhpcyBwYXRj
aCBtYWtlcyB1cyB1c2UgdGhlIHNpemUgd2UgZGlzY292ZXJlZCBmcm9tIHRoZSBQRidzIFZGIEJB
Um4NCj4gcmVnaXN0ZXJzIGluIGl0cyBTUi1JT1YgY2FwYWJpbGl0eS4gIFdvbid0IHRoYXQgY2F1
c2UgdXMgdG8gZmlsbCBpbiB0aGUNCj4gVkYncyBkZXYtPnJlc291cmNlW25dLCB3aGVuIHdlIGRp
ZG4ndCBkbyBpdCBiZWZvcmU/DQoNCk9oIC4uIHRoYXQgaXMgY29ycmVjdCEgSSBkaWQgbm90IG5v
dGljZSB0aGlzIHBhcnQgZnJvbSB0aGUgc3BlYyA6KQ0KDQo+IA0KPiA+IA0KPiA+ICAJLyoNCj4g
PiAgCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2aWNlIGlzbid0IHdvcmtpbmcg
cHJvcGVybHkuDQo+ID4gQEAgLTI0MSw5ICsyNDYsMTQgQEAgaW50IF9fcGNpX3JlYWRfYmFzZShz
dHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0eXBlLA0KPiA+ICANCj4gPiAg
CWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsNCj4gPiAgCQlwY2lfcmVhZF9j
b25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCAmbCk7DQo+ID4gLQkJcGNpX3dyaXRlX2NvbmZpZ19k
d29yZChkZXYsIHBvcyArIDQsIH4wKTsNCj4gPiAtCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2
LCBwb3MgKyA0LCAmc3opOw0KPiA+IC0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg
KyA0LCBsKTsNCj4gPiArDQo+ID4gKwkJaWYgKGRldi0+aXNfdmlydGZuKSB7DQo+ID4gKwkJCXN6
ID0gKGRldi0+cGh5c2ZuLT5zcmlvdi0+YmFyc3pbYmFyXSA+PiAzMikgJiAweGZmZmZmZmZmOw0K
PiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3Mg
KyA0LCB+MCk7DQo+ID4gKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIDQsICZz
eik7DQo+ID4gKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyA0LCBsKTsNCj4g
PiArCQl9DQo+ID4gIA0KPiA+ICAJCWw2NCB8PSAoKHU2NClsIDw8IDMyKTsNCj4gPiAgCQlzejY0
IHw9ICgodTY0KXN6IDw8IDMyKTsNCj4gPiBAQCAtMzMyLDYgKzM0Miw4IEBAIHN0YXRpYyB2b2lk
IHBjaV9yZWFkX2Jhc2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBob3dtYW55
LCBpbnQgcm9tKQ0KPiA+ICAJZm9yIChwb3MgPSAwOyBwb3MgPCBob3dtYW55OyBwb3MrKykgew0K
PiA+ICAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVzb3VyY2VbcG9zXTsNCj4gPiAg
CQlyZWcgPSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAocG9zIDw8IDIpOw0KPiA+ICsJCWlmIChkZXYt
PmlzX3ZpcnRmbiAmJiBkZXYtPnBoeXNmbi0+c3Jpb3YtPmJhcnN6W3Bvc10gPT0gMCkNCj4gPiAr
CQkJY29udGludWU7DQo+IA0KPiBTaW5jZSB3ZSBrbm93IHRoZSBWRiBCQVJzIGFyZSBhbGwgemVy
byAodGhlIG9uZXMgaW4gdGhlIFZGIGNvbmZpZyBzcGFjZSwNCj4gbm90IHRoZSBvbmVzIGluIHRo
ZSBQRiBTUi1JT1YgY2FwYWJpbGl0eSksIGluY2x1ZGluZyB0aGUgVkYgUk9NIEJBUiwgaXQNCj4g
d291bGQgbWFrZSBzZW5zZSB0byBtZSB0byB0b3RhbGx5IHNraXAgdGhpcyB3aG9sZSBmdW5jdGlv
biwgZS5nLiwNCj4gDQo+ICAgaWYgKGRldi0+bm9uX2NvbXBsaWFudF9iYXJzKQ0KPiAgICAgcmV0
dXJuOw0KPiANCj4gICBpZiAoZGV2LT5pc192aXJ0Zm4pDQo+ICAgICByZXR1cm47DQo+IA0KDQpD
b3JyZWN0ISBEb25lLg0KDQo+ID4gDQo+ID4gIAkJcG9zICs9IF9fcGNpX3JlYWRfYmFzZShkZXYs
IHBjaV9iYXJfdW5rbm93biwgcmVzLCByZWcpOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtLSANCj4g
PiAyLjcuNA0KPiA+IA0KPiANCkFtYXpvbiBEZXZlbG9wbWVudCBDZW50ZXIgR2VybWFueSBHbWJI
CkJlcmxpbiAtIERyZXNkZW4gLSBBYWNoZW4KbWFpbiBvZmZpY2U6IEtyYXVzZW5zdHIuIDM4LCAx
MDExNyBCZXJsaW4KR2VzY2hhZWZ0c2Z1ZWhyZXI6IERyLiBSYWxmIEhlcmJyaWNoLCBDaHJpc3Rp
YW4gU2NobGFlZ2VyClVzdC1JRDogREUyODkyMzc4NzkKRWluZ2V0cmFnZW4gYW0gQW10c2dlcmlj
aHQgQ2hhcmxvdHRlbmJ1cmcgSFJCIDE0OTE3MyBCCg==

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

* Re: [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct
  2018-03-02 21:36 ` [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct Bjorn Helgaas
@ 2018-03-06 10:37   ` Raslan, KarimAllah
  0 siblings, 0 replies; 6+ messages in thread
From: Raslan, KarimAllah @ 2018-03-06 10:37 UTC (permalink / raw)
  To: helgaas@kernel.org
  Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
	bhelgaas@google.com

T24gRnJpLCAyMDE4LTAzLTAyIGF0IDE1OjM2IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K
PiBPbiBUaHUsIE1hciAwMSwgMjAxOCBhdCAxMDozMTozNlBNICswMTAwLCBLYXJpbUFsbGFoIEFo
bWVkIHdyb3RlOg0KPiA+IA0KPiA+IFN0b3JlIG1vcmUgZGF0YSBhYm91dCBQQ0kgVkZzIGludG8g
dGhlIFNSSU9WIHRvIGF2b2lkIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiA+IGNvbmZpZyBzcGFj
ZSBvZiBhbGwgdGhlIFBDSSBWRnMuIFRoaXMgaXMgc3BlY2lhbGx5IGEgdXNlZnVsIG9wdGltaXph
dGlvbg0KPiA+IHdoZW4gYnJpbmdpbmcgdXAgdGhvdXNhbmRzIG9mIFZGcy4NCj4gPiANCj4gPiBD
YzogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogbGludXgtcGNp
QHZnZXIua2VybmVsLm9yZw0KPiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnDQo+
ID4gU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRlPg0K
PiANCj4gQXBwbGllZCB0byBwY2kvdmlydHVhbGl6YXRpb24gZm9yIHY0LjE3LCB0aGFua3MhDQo+
IA0KPiBJIHJlbW92ZWQgdGhlIHBjaV9zcmlvdi5kZXZpY2UgZmllbGQsIHdoaWNoIHNlZW1lZCB0
byBiZSB1bnVzZWQsIGFuZA0KPiB0d2Vha2VkIGEgZmV3IG90aGVyIHRoaW5ncywgc28gbWFrZSBz
dXJlIEkgZGlkbid0IGJyZWFrIGFueXRoaW5nLg0KDQpZdXAsIHN0aWxsIGxvb2tzIGdvb2QgKGFu
ZCB3b3JrcykgZm9yIG1lLiBUaGFua3MuDQoNCj4gSGVyZSdzIHdoYXQgSSBoYXZlIGN1cnJlbnRs
eSBhcHBsaWVkOg0KPiANCj4gY29tbWl0IGUxN2I3YjQyOWIwOTUyMDBmOTNhZDM3YzRlZmViN2E5
OWI2ZmNlM2INCj4gQXV0aG9yOiBLYXJpbUFsbGFoIEFobWVkIDxrYXJhaG1lZEBhbWF6b24uZGU+
DQo+IERhdGU6ICAgVGh1IE1hciAxIDIyOjMxOjM2IDIwMTggKzAxMDANCj4gDQo+ICAgICBQQ0kv
SU9WOiBVc2UgVkYwIGNhY2hlZCBjb25maWcgcmVnaXN0ZXJzIGZvciBvdGhlciBWRnMNCj4gICAg
IA0KPiAgICAgQ2FjaGUgc29tZSBjb25maWcgZGF0YSBmcm9tIFZGMCBhbmQgdXNlIGl0IGZvciBh
bGwgb3RoZXIgVkZzIGluc3RlYWQgb2YNCj4gICAgIHJlYWRpbmcgaXQgZnJvbSB0aGUgY29uZmln
IHNwYWNlIG9mIGVhY2ggVkYuICBXZSBhc3N1bWUgdGhlc2UgaXRlbXMgYXJlIHRoZQ0KPiAgICAg
c2FtZSBhY3Jvc3MgYWxsIGFzc29jaWF0ZWQgVkZzOg0KPiAgICAgDQo+ICAgICAgIFJldmlzaW9u
IElEDQo+ICAgICAgIENsYXNzIENvZGUNCj4gICAgICAgU3Vic3lzdGVtIFZlbmRvciBJRA0KPiAg
ICAgICBTdWJzeXN0ZW0gSUQNCj4gICAgIA0KPiAgICAgVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24g
d2hlbiBlbmFibGluZyBTUi1JT1Ygb24gYSBkZXZpY2Ugd2l0aCBtYW55IFZGcy4NCj4gICAgIA0K
PiAgICAgU2lnbmVkLW9mZi1ieTogS2FyaW1BbGxhaCBBaG1lZCA8a2FyYWhtZWRAYW1hem9uLmRl
Pg0KPiAgICAgW2JoZWxnYWFzOiBjaGFuZ2Vsb2csIHNpbXBsaWZ5IGNvbW1lbnRzLCByZW1vdmUg
dW51c2VkICJkZXZpY2UiXQ0KPiAgICAgU2lnbmVkLW9mZi1ieTogQmpvcm4gSGVsZ2FhcyA8aGVs
Z2Fhc0BrZXJuZWwub3JnPg0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIv
ZHJpdmVycy9wY2kvaW92LmMNCj4gaW5kZXggNjc3OTI0YWUwMzUwLi4zMGJmOGY3MDZlZDkgMTAw
NjQ0DQo+IC0tLSBhL2RyaXZlcnMvcGNpL2lvdi5jDQo+ICsrKyBiL2RyaXZlcnMvcGNpL2lvdi5j
DQo+IEBAIC0xMTQsNiArMTE0LDI5IEBAIHJlc291cmNlX3NpemVfdCBwY2lfaW92X3Jlc291cmNl
X3NpemUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQ0KPiAgCXJldHVybiBkZXYtPnNy
aW92LT5iYXJzeltyZXNubyAtIFBDSV9JT1ZfUkVTT1VSQ0VTXTsNCj4gIH0NCj4gIA0KPiArc3Rh
dGljIHZvaWQgcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqdmlydGZu
KQ0KPiArew0KPiArCXN0cnVjdCBwY2lfZGV2ICpwaHlzZm4gPSB2aXJ0Zm4tPnBoeXNmbjsNCj4g
Kw0KPiArCS8qDQo+ICsJICogU29tZSBjb25maWcgcmVnaXN0ZXJzIGFyZSB0aGUgc2FtZSBhY3Jv
c3MgYWxsIGFzc29jaWF0ZWQgVkZzLg0KPiArCSAqIFJlYWQgdGhlbSBvbmNlIGZyb20gVkYwIHNv
IHdlIGNhbiBza2lwIHJlYWRpbmcgdGhlbSBmcm9tIHRoZQ0KPiArCSAqIG90aGVyIFZGcy4NCj4g
KwkgKg0KPiArCSAqIFBDSWUgcjQuMCwgc2VjIDkuMy40LjEsIHRlY2huaWNhbGx5IGRvZXNuJ3Qg
cmVxdWlyZSBhbGwgVkZzIHRvDQo+ICsJICogaGF2ZSB0aGUgc2FtZSBSZXZpc2lvbiBJRCBhbmQg
U3Vic3lzdGVtIElELCBidXQgd2UgYXNzdW1lIHRoZXkNCj4gKwkgKiBkby4NCj4gKwkgKi8NCj4g
KwlwY2lfcmVhZF9jb25maWdfZHdvcmQodmlydGZuLCBQQ0lfQ0xBU1NfUkVWSVNJT04sDQo+ICsJ
CQkgICAgICAmcGh5c2ZuLT5zcmlvdi0+Y2xhc3MpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRl
KHZpcnRmbiwgUENJX0hFQURFUl9UWVBFLA0KPiArCQkJICAgICAmcGh5c2ZuLT5zcmlvdi0+aGRy
X3R5cGUpOw0KPiArCXBjaV9yZWFkX2NvbmZpZ193b3JkKHZpcnRmbiwgUENJX1NVQlNZU1RFTV9W
RU5ET1JfSUQsDQo+ICsJCQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fdmVuZG9yKTsN
Cj4gKwlwY2lfcmVhZF9jb25maWdfd29yZCh2aXJ0Zm4sIFBDSV9TVUJTWVNURU1fSUQsDQo+ICsJ
CQkgICAgICZwaHlzZm4tPnNyaW92LT5zdWJzeXN0ZW1fZGV2aWNlKTsNCj4gK30NCj4gKw0KPiAg
aW50IHBjaV9pb3ZfYWRkX3ZpcnRmbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQpDQo+ICB7
DQo+ICAJaW50IGk7DQo+IEBAIC0xMzYsMTMgKzE1OSwxNyBAQCBpbnQgcGNpX2lvdl9hZGRfdmly
dGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCkNCj4gIAl2aXJ0Zm4tPmRldmZuID0gcGNp
X2lvdl92aXJ0Zm5fZGV2Zm4oZGV2LCBpZCk7DQo+ICAJdmlydGZuLT52ZW5kb3IgPSBkZXYtPnZl
bmRvcjsNCj4gIAl2aXJ0Zm4tPmRldmljZSA9IGlvdi0+dmZfZGV2aWNlOw0KPiArCXZpcnRmbi0+
aXNfdmlydGZuID0gMTsNCj4gKwl2aXJ0Zm4tPnBoeXNmbiA9IHBjaV9kZXZfZ2V0KGRldik7DQo+
ICsNCj4gKwlpZiAoaWQgPT0gMCkNCj4gKwkJcGNpX3JlYWRfdmZfY29uZmlnX2NvbW1vbih2aXJ0
Zm4pOw0KPiArDQo+ICAJcmMgPSBwY2lfc2V0dXBfZGV2aWNlKHZpcnRmbik7DQo+ICAJaWYgKHJj
KQ0KPiAtCQlnb3RvIGZhaWxlZDA7DQo+ICsJCWdvdG8gZmFpbGVkMTsNCj4gIA0KPiAgCXZpcnRm
bi0+ZGV2LnBhcmVudCA9IGRldi0+ZGV2LnBhcmVudDsNCj4gLQl2aXJ0Zm4tPnBoeXNmbiA9IHBj
aV9kZXZfZ2V0KGRldik7DQo+IC0JdmlydGZuLT5pc192aXJ0Zm4gPSAxOw0KPiAgCXZpcnRmbi0+
bXVsdGlmdW5jdGlvbiA9IDA7DQo+ICANCj4gIAlmb3IgKGkgPSAwOyBpIDwgUENJX1NSSU9WX05V
TV9CQVJTOyBpKyspIHsNCj4gQEAgLTE2MywxMCArMTkwLDEwIEBAIGludCBwY2lfaW92X2FkZF92
aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKQ0KPiAgCXNwcmludGYoYnVmLCAidmly
dGZuJXUiLCBpZCk7DQo+ICAJcmMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5kZXYua29iaiwg
JnZpcnRmbi0+ZGV2LmtvYmosIGJ1Zik7DQo+ICAJaWYgKHJjKQ0KPiAtCQlnb3RvIGZhaWxlZDE7
DQo+ICsJCWdvdG8gZmFpbGVkMjsNCj4gIAlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ2aXJ0Zm4t
PmRldi5rb2JqLCAmZGV2LT5kZXYua29iaiwgInBoeXNmbiIpOw0KPiAgCWlmIChyYykNCj4gLQkJ
Z290byBmYWlsZWQyOw0KPiArCQlnb3RvIGZhaWxlZDM7DQo+ICANCj4gIAlrb2JqZWN0X3VldmVu
dCgmdmlydGZuLT5kZXYua29iaiwgS09CSl9DSEFOR0UpOw0KPiAgDQo+IEBAIC0xNzQsMTEgKzIw
MSwxMiBAQCBpbnQgcGNpX2lvdl9hZGRfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBp
ZCkNCj4gIA0KPiAgCXJldHVybiAwOw0KPiAgDQo+IC1mYWlsZWQyOg0KPiArZmFpbGVkMzoNCj4g
IAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgYnVmKTsNCj4gK2ZhaWxlZDI6DQo+
ICsJcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNlKHZpcnRmbik7DQo+ICBmYWlsZWQxOg0K
PiAgCXBjaV9kZXZfcHV0KGRldik7DQo+IC0JcGNpX3N0b3BfYW5kX3JlbW92ZV9idXNfZGV2aWNl
KHZpcnRmbik7DQo+ICBmYWlsZWQwOg0KPiAgCXZpcnRmbl9yZW1vdmVfYnVzKGRldi0+YnVzLCBi
dXMpOw0KPiAgZmFpbGVkOg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2
ZXJzL3BjaS9wY2kuaA0KPiBpbmRleCBmY2Q4MTkxMWIxMjcuLmRiNzY5MzNiZTg1OSAxMDA2NDQN
Cj4gLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgNCj4gKysrIGIvZHJpdmVycy9wY2kvcGNpLmgNCj4g
QEAgLTI3MSw2ICsyNzEsMTAgQEAgc3RydWN0IHBjaV9zcmlvdiB7DQo+ICAJdTE2CQlkcml2ZXJf
bWF4X1ZGczsJLyogTWF4IG51bSBWRnMgZHJpdmVyIHN1cHBvcnRzICovDQo+ICAJc3RydWN0IHBj
aV9kZXYJKmRldjsJCS8qIExvd2VzdCBudW1iZXJlZCBQRiAqLw0KPiAgCXN0cnVjdCBwY2lfZGV2
CSpzZWxmOwkJLyogVGhpcyBQRiAqLw0KPiArCXUzMgkJY2xhc3M7CQkvKiBWRiBjbGFzcyAqLw0K
PiArCXU4CQloZHJfdHlwZTsJLyogVkYgaGVhZGVyIHR5cGUgKi8NCj4gKwl1MTYJCXN1YnN5c3Rl
bV92ZW5kb3I7IC8qIFZGIHN1YnN5c3RlbSB2ZW5kb3IgKi8NCj4gKwl1MTYJCXN1YnN5c3RlbV9k
ZXZpY2U7IC8qIFZGIHN1YnN5c3RlbSBkZXZpY2UgKi8NCj4gIAlyZXNvdXJjZV9zaXplX3QJYmFy
c3pbUENJX1NSSU9WX05VTV9CQVJTXTsJLyogVkYgQkFSIHNpemUgKi8NCj4gIAlib29sCQlkcml2
ZXJzX2F1dG9wcm9iZTsgLyogQXV0byBwcm9iaW5nIG9mIFZGcyBieSBkcml2ZXIgKi8NCj4gIH07
DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUu
Yw0KPiBpbmRleCBhMWNkZGNhMzc3OTMuLjc4ZGViOTUwYmRhMSAxMDA2NDQNCj4gLS0tIGEvZHJp
dmVycy9wY2kvcHJvYmUuYw0KPiArKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jDQo+IEBAIC0xNDYx
LDcgKzE0NjEsOSBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K
PiAgCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247DQo+ICAJc3RydWN0IHJlc291cmNlICpy
ZXM7DQo+ICANCj4gLQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZ
UEUsICZoZHJfdHlwZSkpDQo+ICsJaWYgKGRldi0+aXNfdmlydGZuKQ0KPiArCQloZHJfdHlwZSA9
IGRldi0+cGh5c2ZuLT5zcmlvdi0+aGRyX3R5cGU7DQo+ICsJZWxzZSBpZiAocGNpX3JlYWRfY29u
ZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpDQo+ICAJCXJldHVybiAt
RUlPOw0KPiAgDQo+ICAJZGV2LT5zeXNkYXRhID0gZGV2LT5idXMtPnN5c2RhdGE7DQo+IEBAIC0x
NDg0LDcgKzE0ODYsMTAgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRl
dikNCj4gIAkJICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwNCj4g
IAkJICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7DQo+ICANCj4gLQlwY2lfcmVhZF9jb25maWdf
ZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzcyk7DQo+ICsJaWYgKGRldi0+aXNf
dmlydGZuKQ0KPiArCQljbGFzcyA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+Y2xhc3M7DQo+ICsJZWxz
ZQ0KPiArCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZj
bGFzcyk7DQo+ICAJZGV2LT5yZXZpc2lvbiA9IGNsYXNzICYgMHhmZjsNCj4gIAlkZXYtPmNsYXNz
ID0gY2xhc3MgPj4gODsJCSAgICAvKiB1cHBlciAzIGJ5dGVzICovDQo+ICANCj4gQEAgLTE1MjQs
OCArMTUyOSwxMyBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0K
PiAgCQkJZ290byBiYWQ7DQo+ICAJCXBjaV9yZWFkX2lycShkZXYpOw0KPiAgCQlwY2lfcmVhZF9i
YXNlcyhkZXYsIDYsIFBDSV9ST01fQUREUkVTUyk7DQo+IC0JCXBjaV9yZWFkX2NvbmZpZ193b3Jk
KGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0K
PiAtCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVUJTWVNURU1fSUQsICZkZXYtPnN1
YnN5c3RlbV9kZXZpY2UpOw0KPiArCQlpZiAoZGV2LT5pc192aXJ0Zm4pIHsNCj4gKwkJCWRldi0+
c3Vic3lzdGVtX3ZlbmRvciA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lzdGVtX3ZlbmRvcjsN
Cj4gKwkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGRldi0+cGh5c2ZuLT5zcmlvdi0+c3Vic3lz
dGVtX2RldmljZTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRl
diwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOw0KPiAr
CQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmZGV2LT5zdWJz
eXN0ZW1fZGV2aWNlKTsNCj4gKwkJfQ0KPiAgDQo+ICAJCS8qDQo+ICAJCSAqIERvIHRoZSB1Z2x5
IGxlZ2FjeSBtb2RlIHN0dWZmIGhlcmUgcmF0aGVyIHRoYW4gYnJva2VuIGNoaXANCj4gDQpBbWF6
b24gRGV2ZWxvcG1lbnQgQ2VudGVyIEdlcm1hbnkgR21iSApCZXJsaW4gLSBEcmVzZGVuIC0gQWFj
aGVuCm1haW4gb2ZmaWNlOiBLcmF1c2Vuc3RyLiAzOCwgMTAxMTcgQmVybGluCkdlc2NoYWVmdHNm
dWVocmVyOiBEci4gUmFsZiBIZXJicmljaCwgQ2hyaXN0aWFuIFNjaGxhZWdlcgpVc3QtSUQ6IERF
Mjg5MjM3ODc5CkVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIEhSQiAx
NDkxNzMgQgo=

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

end of thread, other threads:[~2018-03-06 10:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-01 21:31 [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct KarimAllah Ahmed
2018-03-01 21:31 ` [PATCH v3 2/2] PCI/IOV: Use the cached VF BARs size instead of re-reading them KarimAllah Ahmed
2018-03-02 21:48   ` Bjorn Helgaas
2018-03-03  4:34     ` Raslan, KarimAllah
2018-03-02 21:36 ` [PATCH v3 1/2] PCI/IOV: Store more data about VFs into the SRIOV struct Bjorn Helgaas
2018-03-06 10:37   ` Raslan, KarimAllah

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).