All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure
@ 2017-08-28 13:38 Filippo Sironi
  2017-08-28 13:38 ` [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Filippo Sironi @ 2017-08-28 13:38 UTC (permalink / raw)
  To: linux-pci, linux-kernel; +Cc: Filippo Sironi

... and use it instead of reading it over and over from the PF config
space capability.

Signed-off-by: Filippo Sironi <sironi@amazon.de>
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/pci/iov.c | 5 +++--
 drivers/pci/pci.h | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 120485d6f352..e8f7eafaba6a 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -134,7 +134,7 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
 
 	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
 	virtfn->vendor = dev->vendor;
-	pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
+	virtfn->device = iov->vf_did;
 	rc = pci_setup_device(virtfn);
 	if (rc)
 		goto failed0;
@@ -448,6 +448,7 @@ static int sriov_init(struct pci_dev *dev, int pos)
 	iov->nres = nres;
 	iov->ctrl = ctrl;
 	iov->total_VFs = total;
+	pci_read_config_word(dev, pos + PCI_SRIOV_VF_DID, &iov->vf_did);
 	iov->pgsz = pgsz;
 	iov->self = dev;
 	iov->drivers_autoprobe = true;
@@ -723,7 +724,7 @@ int pci_vfs_assigned(struct pci_dev *dev)
 	 * determine the device ID for the VFs, the vendor ID will be the
 	 * same as the PF so there is no need to check for that one
 	 */
-	pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_VF_DID, &dev_id);
+	dev_id = dev->sriov->vf_did;
 
 	/* loop through all the VFs to see if we own any that are assigned */
 	vfdev = pci_get_device(dev->vendor, dev_id, NULL);
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 22e061738c6f..a7270e11e1ef 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -262,6 +262,7 @@ struct pci_sriov {
 	u16 num_VFs;		/* number of VFs available */
 	u16 offset;		/* first VF Routing ID offset */
 	u16 stride;		/* following VF stride */
+	u16 vf_did;		/* VF device ID */
 	u32 pgsz;		/* page size for BAR alignment */
 	u8 link;		/* Function Dependency Link */
 	u8 max_VF_buses;	/* max buses consumed by VFs */
-- 
2.7.4

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

* [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-08-28 13:38 [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Filippo Sironi
@ 2017-08-28 13:38 ` Filippo Sironi
  2017-09-25 18:55   ` Bjorn Helgaas
  2017-10-03 19:33 ` [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Bjorn Helgaas
  2017-10-08 23:09 ` [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
  2 siblings, 1 reply; 13+ messages in thread
From: Filippo Sironi @ 2017-08-28 13:38 UTC (permalink / raw)
  To: linux-pci, linux-kernel; +Cc: Filippo Sironi

... to make it easier for userspace applications consumption.

Signed-off-by: Filippo Sironi <sironi@amazon.de>
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/pci/pci-sysfs.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 2f3780b50723..f920afe7cff3 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -648,6 +648,33 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 	return count;
 }
 
+static ssize_t sriov_offset_show(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%u\n", pdev->sriov->offset);
+}
+
+static ssize_t sriov_stride_show(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%u\n", pdev->sriov->stride);
+}
+
+static ssize_t sriov_vf_did_show(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
+}
+
 static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
 					    struct device_attribute *attr,
 					    char *buf)
@@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
 static struct device_attribute sriov_numvfs_attr =
 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
 		       sriov_numvfs_show, sriov_numvfs_store);
+static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
+static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
+static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
 static struct device_attribute sriov_drivers_autoprobe_attr =
 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
@@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
 static struct attribute *sriov_dev_attrs[] = {
 	&sriov_totalvfs_attr.attr,
 	&sriov_numvfs_attr.attr,
+	&sriov_offset_attr.attr,
+	&sriov_stride_attr.attr,
+	&sriov_vf_did_attr.attr,
 	&sriov_drivers_autoprobe_attr.attr,
 	NULL,
 };
-- 
2.7.4

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-08-28 13:38 ` [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
@ 2017-09-25 18:55   ` Bjorn Helgaas
  2017-09-29  7:53       ` Sironi, Filippo
  0 siblings, 1 reply; 13+ messages in thread
From: Bjorn Helgaas @ 2017-09-25 18:55 UTC (permalink / raw)
  To: Filippo Sironi; +Cc: linux-pci, linux-kernel

Hi Filippo,

On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
> +static ssize_t sriov_vf_did_show(struct device *dev,
> +				 struct device_attribute *attr,
> +				 char *buf)
> +{
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
> +}

What does the vf_did part look like in sysfs?  Do we have a directory with
both "device" and "vf_did" in it?  If so, why do we have both and do we
need both?  Could we put the vf_did in the "device" file?

>  static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>  					    struct device_attribute *attr,
>  					    char *buf)
> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
>  static struct device_attribute sriov_numvfs_attr =
>  		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>  		       sriov_numvfs_show, sriov_numvfs_store);
> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
> +static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
>  static struct device_attribute sriov_drivers_autoprobe_attr =
>  		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>  		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
>  static struct attribute *sriov_dev_attrs[] = {
>  	&sriov_totalvfs_attr.attr,
>  	&sriov_numvfs_attr.attr,
> +	&sriov_offset_attr.attr,
> +	&sriov_stride_attr.attr,
> +	&sriov_vf_did_attr.attr,
>  	&sriov_drivers_autoprobe_attr.attr,
>  	NULL,
>  };
> -- 
> 2.7.4
> 

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-09-25 18:55   ` Bjorn Helgaas
@ 2017-09-29  7:53       ` Sironi, Filippo
  0 siblings, 0 replies; 13+ messages in thread
From: Sironi, Filippo @ 2017-09-29  7:53 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel


Hi Bjorn,

> On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
> 
> Hi Filippo,
> 
> On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
>> +static ssize_t sriov_vf_did_show(struct device *dev,
>> +				 struct device_attribute *attr,
>> +				 char *buf)
>> +{
>> +	struct pci_dev *pdev = to_pci_dev(dev);
>> +
>> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
>> +}
> 
> What does the vf_did part look like in sysfs?  Do we have a directory with
> both "device" and "vf_did" in it?  If so, why do we have both and do we
> need both?  Could we put the vf_did in the "device" file?

On my machine:

/sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
total 0
-rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
-r--r--r-- 1 root root    4096 Sep 28 19:41 class
-rw-r--r-- 1 root root    4096 Sep 28 19:41 config
-r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
-rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
-r--r--r-- 1 root root    4096 Sep 28 19:41 device
-r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/pci/drivers/igb
-rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
-rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
-r--r--r-- 1 root root    4096 Sep 28 19:41 irq
-r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
-r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
-r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
-rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
drwxr-xr-x 3 root root       0 Sep 28 19:41 net
-rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
-r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
drwxr-xr-x 2 root root       0 Sep 28 19:41 power
drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
--w--w---- 1 root root    4096 Sep 28 19:41 remove
--w--w---- 1 root root    4096 Sep 28 19:41 rescan
--w------- 1 root root    4096 Sep 28 19:41 reset
-r--r--r-- 1 root root    4096 Sep 28 19:41 resource
-rw------- 1 root root  131072 Sep 28 19:41 resource0
-rw------- 1 root root 4194304 Sep 28 19:41 resource1
-rw------- 1 root root      32 Sep 28 19:41 resource2
-rw------- 1 root root   16384 Sep 28 19:41 resource3
-r--r--r-- 1 root root    4096 Sep 28 19:41 revision
-rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
-r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
-r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bus/pci
-r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
-r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
-rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
-r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
-r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0

nothing changes on for VFs.
Then:

/sys/bus/pci/devices/0000:03:00.0# cat device 
0x10c9

/sys/bus/pci/devices/0000:03:00.0# cat vf_did
0x10ca

Putting the VF device ID in the PF device file would be a change of
that we expose to userspace.  Something might break.

vf_did provides a easy way to retrieve the VF device ID without reading
the PF config (looking up the SR-IOV capability and reading it) or without
enabling SR-IOV to read for example virtfn0/device.

Similar considerations (ease of access) apply to offset and stride.


>> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>> 					    struct device_attribute *attr,
>> 					    char *buf)
>> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
>> static struct device_attribute sriov_numvfs_attr =
>> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>> 		       sriov_numvfs_show, sriov_numvfs_store);
>> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
>> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
>> +static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
>> static struct device_attribute sriov_drivers_autoprobe_attr =
>> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
>> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
>> static struct attribute *sriov_dev_attrs[] = {
>> 	&sriov_totalvfs_attr.attr,
>> 	&sriov_numvfs_attr.attr,
>> +	&sriov_offset_attr.attr,
>> +	&sriov_stride_attr.attr,
>> +	&sriov_vf_did_attr.attr,
>> 	&sriov_drivers_autoprobe_attr.attr,
>> 	NULL,
>> };
>> -- 
>> 2.7.4
>> 
> 

Amazon Development Center Germany GmbH
Berlin - Dresden - Aachen
main office: Krausenstr. 38, 10117 Berlin
Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
Ust-ID: DE289237879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
@ 2017-09-29  7:53       ` Sironi, Filippo
  0 siblings, 0 replies; 13+ messages in thread
From: Sironi, Filippo @ 2017-09-29  7:53 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel


Hi Bjorn,

> On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
> =

> Hi Filippo,
> =

> On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
>> +static ssize_t sriov_vf_did_show(struct device *dev,
>> +				 struct device_attribute *attr,
>> +				 char *buf)
>> +{
>> +	struct pci_dev *pdev =3D to_pci_dev(dev);
>> +
>> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
>> +}
> =

> What does the vf_did part look like in sysfs?  Do we have a directory with
> both "device" and "vf_did" in it?  If so, why do we have both and do we
> need both?  Could we put the vf_did in the "device" file?

On my machine:

/sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
total 0
-rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
-r--r--r-- 1 root root    4096 Sep 28 19:41 class
-rw-r--r-- 1 root root    4096 Sep 28 19:41 config
-r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
-rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
-r--r--r-- 1 root root    4096 Sep 28 19:41 device
-r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/pci/d=
rivers/igb
-rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
-rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../LNXSY=
STM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
-r--r--r-- 1 root root    4096 Sep 28 19:41 irq
-r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
-r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
-r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
-rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
drwxr-xr-x 3 root root       0 Sep 28 19:41 net
-rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
-r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
drwxr-xr-x 2 root root       0 Sep 28 19:41 power
drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
--w--w---- 1 root root    4096 Sep 28 19:41 remove
--w--w---- 1 root root    4096 Sep 28 19:41 rescan
--w------- 1 root root    4096 Sep 28 19:41 reset
-r--r--r-- 1 root root    4096 Sep 28 19:41 resource
-rw------- 1 root root  131072 Sep 28 19:41 resource0
-rw------- 1 root root 4194304 Sep 28 19:41 resource1
-rw------- 1 root root      32 Sep 28 19:41 resource2
-rw------- 1 root root   16384 Sep 28 19:41 resource3
-r--r--r-- 1 root root    4096 Sep 28 19:41 revision
-rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
-r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
-r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bus/pci
-r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
-r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
-rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
-r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
-r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0

nothing changes on for VFs.
Then:

/sys/bus/pci/devices/0000:03:00.0# cat device =

0x10c9

/sys/bus/pci/devices/0000:03:00.0# cat vf_did
0x10ca

Putting the VF device ID in the PF device file would be a change of
that we expose to userspace.  Something might break.

vf_did provides a easy way to retrieve the VF device ID without reading
the PF config (looking up the SR-IOV capability and reading it) or without
enabling SR-IOV to read for example virtfn0/device.

Similar considerations (ease of access) apply to offset and stride.


>> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>> 					    struct device_attribute *attr,
>> 					    char *buf)
>> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr =
=3D __ATTR_RO(sriov_totalvfs);
>> static struct device_attribute sriov_numvfs_attr =3D
>> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>> 		       sriov_numvfs_show, sriov_numvfs_store);
>> +static struct device_attribute sriov_offset_attr =3D __ATTR_RO(sriov_of=
fset);
>> +static struct device_attribute sriov_stride_attr =3D __ATTR_RO(sriov_st=
ride);
>> +static struct device_attribute sriov_vf_did_attr =3D __ATTR_RO(sriov_vf=
_did);
>> static struct device_attribute sriov_drivers_autoprobe_attr =3D
>> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
>> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_grou=
p =3D {
>> static struct attribute *sriov_dev_attrs[] =3D {
>> 	&sriov_totalvfs_attr.attr,
>> 	&sriov_numvfs_attr.attr,
>> +	&sriov_offset_attr.attr,
>> +	&sriov_stride_attr.attr,
>> +	&sriov_vf_did_attr.attr,
>> 	&sriov_drivers_autoprobe_attr.attr,
>> 	NULL,
>> };
>> -- =

>> 2.7.4
>> =

> =


Amazon Development Center Germany GmbH
Berlin - Dresden - Aachen
main office: Krausenstr. 38, 10117 Berlin
Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
Ust-ID: DE289237879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-09-29  7:53       ` Sironi, Filippo
  (?)
@ 2017-10-03 19:31       ` Bjorn Helgaas
  2017-10-03 19:48         ` Bjorn Helgaas
  -1 siblings, 1 reply; 13+ messages in thread
From: Bjorn Helgaas @ 2017-10-03 19:31 UTC (permalink / raw)
  To: Sironi, Filippo; +Cc: linux-pci, linux-kernel

On Fri, Sep 29, 2017 at 07:53:31AM +0000, Sironi, Filippo wrote:
> 
> Hi Bjorn,
> 
> > On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
> > 
> > Hi Filippo,
> > 
> > On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
> >> +static ssize_t sriov_vf_did_show(struct device *dev,
> >> +				 struct device_attribute *attr,
> >> +				 char *buf)
> >> +{
> >> +	struct pci_dev *pdev = to_pci_dev(dev);
> >> +
> >> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
> >> +}
> > 
> > What does the vf_did part look like in sysfs?  Do we have a directory with
> > both "device" and "vf_did" in it?  If so, why do we have both and do we
> > need both?  Could we put the vf_did in the "device" file?
> 
> On my machine:
> 
> /sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
> total 0
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
> -r--r--r-- 1 root root    4096 Sep 28 19:41 class
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 config
> -r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
> -r--r--r-- 1 root root    4096 Sep 28 19:41 device
> -r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
> lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/pci/drivers/igb
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
> lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
> -r--r--r-- 1 root root    4096 Sep 28 19:41 irq
> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
> -r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
> drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
> drwxr-xr-x 3 root root       0 Sep 28 19:41 net
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
> -r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
> drwxr-xr-x 2 root root       0 Sep 28 19:41 power
> drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
> --w--w---- 1 root root    4096 Sep 28 19:41 remove
> --w--w---- 1 root root    4096 Sep 28 19:41 rescan
> --w------- 1 root root    4096 Sep 28 19:41 reset
> -r--r--r-- 1 root root    4096 Sep 28 19:41 resource
> -rw------- 1 root root  131072 Sep 28 19:41 resource0
> -rw------- 1 root root 4194304 Sep 28 19:41 resource1
> -rw------- 1 root root      32 Sep 28 19:41 resource2
> -rw------- 1 root root   16384 Sep 28 19:41 resource3
> -r--r--r-- 1 root root    4096 Sep 28 19:41 revision
> -rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
> -r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
> -r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
> lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bus/pci
> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
> -rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
> -r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
> -r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
> lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0
> 
> nothing changes on for VFs.
> Then:
> 
> /sys/bus/pci/devices/0000:03:00.0# cat device 
> 0x10c9
> 
> /sys/bus/pci/devices/0000:03:00.0# cat vf_did
> 0x10ca
> 
> Putting the VF device ID in the PF device file would be a change of
> that we expose to userspace.  Something might break.

Oh, sorry, I misunderstood!  I was thinking that you were adding
"vf_did" to the VF directory, not the PF directory.

Then I guess my only issue is that "vf_did" doesn't match the pattern
of other names.  I think "virtfn_device" would give more of a hint and
would match "device" and "subsystem_device".

Bjorn

> vf_did provides a easy way to retrieve the VF device ID without reading
> the PF config (looking up the SR-IOV capability and reading it) or without
> enabling SR-IOV to read for example virtfn0/device.
> 
> Similar considerations (ease of access) apply to offset and stride.
> 
> 
> >> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
> >> 					    struct device_attribute *attr,
> >> 					    char *buf)
> >> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
> >> static struct device_attribute sriov_numvfs_attr =
> >> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
> >> 		       sriov_numvfs_show, sriov_numvfs_store);
> >> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
> >> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
> >> +static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
> >> static struct device_attribute sriov_drivers_autoprobe_attr =
> >> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
> >> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
> >> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
> >> static struct attribute *sriov_dev_attrs[] = {
> >> 	&sriov_totalvfs_attr.attr,
> >> 	&sriov_numvfs_attr.attr,
> >> +	&sriov_offset_attr.attr,
> >> +	&sriov_stride_attr.attr,
> >> +	&sriov_vf_did_attr.attr,
> >> 	&sriov_drivers_autoprobe_attr.attr,
> >> 	NULL,
> >> };
> >> -- 
> >> 2.7.4
> >> 
> > 
> 
> Amazon Development Center Germany GmbH
> Berlin - Dresden - Aachen
> main office: Krausenstr. 38, 10117 Berlin
> Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
> Ust-ID: DE289237879
> Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
> 

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

* Re: [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure
  2017-08-28 13:38 [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Filippo Sironi
  2017-08-28 13:38 ` [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
@ 2017-10-03 19:33 ` Bjorn Helgaas
  2017-10-08 23:09 ` [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
  2 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2017-10-03 19:33 UTC (permalink / raw)
  To: Filippo Sironi; +Cc: linux-pci, linux-kernel

On Mon, Aug 28, 2017 at 03:38:49PM +0200, Filippo Sironi wrote:
> ... and use it instead of reading it over and over from the PF config
> space capability.
> 
> Signed-off-by: Filippo Sironi <sironi@amazon.de>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org

Applied to pci/virtualization for v4.15.

I renamed vf_did to vf_device for consistency with other existing fields.

> ---
>  drivers/pci/iov.c | 5 +++--
>  drivers/pci/pci.h | 1 +
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index 120485d6f352..e8f7eafaba6a 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -134,7 +134,7 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
>  
>  	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
>  	virtfn->vendor = dev->vendor;
> -	pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
> +	virtfn->device = iov->vf_did;
>  	rc = pci_setup_device(virtfn);
>  	if (rc)
>  		goto failed0;
> @@ -448,6 +448,7 @@ static int sriov_init(struct pci_dev *dev, int pos)
>  	iov->nres = nres;
>  	iov->ctrl = ctrl;
>  	iov->total_VFs = total;
> +	pci_read_config_word(dev, pos + PCI_SRIOV_VF_DID, &iov->vf_did);
>  	iov->pgsz = pgsz;
>  	iov->self = dev;
>  	iov->drivers_autoprobe = true;
> @@ -723,7 +724,7 @@ int pci_vfs_assigned(struct pci_dev *dev)
>  	 * determine the device ID for the VFs, the vendor ID will be the
>  	 * same as the PF so there is no need to check for that one
>  	 */
> -	pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_VF_DID, &dev_id);
> +	dev_id = dev->sriov->vf_did;
>  
>  	/* loop through all the VFs to see if we own any that are assigned */
>  	vfdev = pci_get_device(dev->vendor, dev_id, NULL);
> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
> index 22e061738c6f..a7270e11e1ef 100644
> --- a/drivers/pci/pci.h
> +++ b/drivers/pci/pci.h
> @@ -262,6 +262,7 @@ struct pci_sriov {
>  	u16 num_VFs;		/* number of VFs available */
>  	u16 offset;		/* first VF Routing ID offset */
>  	u16 stride;		/* following VF stride */
> +	u16 vf_did;		/* VF device ID */
>  	u32 pgsz;		/* page size for BAR alignment */
>  	u8 link;		/* Function Dependency Link */
>  	u8 max_VF_buses;	/* max buses consumed by VFs */
> -- 
> 2.7.4
> 

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-10-03 19:31       ` Bjorn Helgaas
@ 2017-10-03 19:48         ` Bjorn Helgaas
  2017-10-04 17:32             ` Sironi, Filippo
  0 siblings, 1 reply; 13+ messages in thread
From: Bjorn Helgaas @ 2017-10-03 19:48 UTC (permalink / raw)
  To: Sironi, Filippo; +Cc: linux-pci, linux-kernel

On Tue, Oct 03, 2017 at 02:31:14PM -0500, Bjorn Helgaas wrote:
> On Fri, Sep 29, 2017 at 07:53:31AM +0000, Sironi, Filippo wrote:
> > 
> > Hi Bjorn,
> > 
> > > On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
> > > 
> > > Hi Filippo,
> > > 
> > > On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
> > >> +static ssize_t sriov_vf_did_show(struct device *dev,
> > >> +				 struct device_attribute *attr,
> > >> +				 char *buf)
> > >> +{
> > >> +	struct pci_dev *pdev = to_pci_dev(dev);
> > >> +
> > >> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
> > >> +}
> > > 
> > > What does the vf_did part look like in sysfs?  Do we have a directory with
> > > both "device" and "vf_did" in it?  If so, why do we have both and do we
> > > need both?  Could we put the vf_did in the "device" file?
> > 
> > On my machine:
> > 
> > /sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
> > total 0
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 class
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 config
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 device
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
> > lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/pci/drivers/igb
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
> > lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 irq
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
> > drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
> > drwxr-xr-x 3 root root       0 Sep 28 19:41 net
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
> > drwxr-xr-x 2 root root       0 Sep 28 19:41 power
> > drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
> > --w--w---- 1 root root    4096 Sep 28 19:41 remove
> > --w--w---- 1 root root    4096 Sep 28 19:41 rescan
> > --w------- 1 root root    4096 Sep 28 19:41 reset
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 resource
> > -rw------- 1 root root  131072 Sep 28 19:41 resource0
> > -rw------- 1 root root 4194304 Sep 28 19:41 resource1
> > -rw------- 1 root root      32 Sep 28 19:41 resource2
> > -rw------- 1 root root   16384 Sep 28 19:41 resource3
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 revision
> > -rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
> > lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bus/pci
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
> > -rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
> > -r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
> > lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0
> > 
> > nothing changes on for VFs.
> > Then:
> > 
> > /sys/bus/pci/devices/0000:03:00.0# cat device 
> > 0x10c9
> > 
> > /sys/bus/pci/devices/0000:03:00.0# cat vf_did
> > 0x10ca
> > 
> > Putting the VF device ID in the PF device file would be a change of
> > that we expose to userspace.  Something might break.
> 
> Oh, sorry, I misunderstood!  I was thinking that you were adding
> "vf_did" to the VF directory, not the PF directory.
> 
> Then I guess my only issue is that "vf_did" doesn't match the pattern
> of other names.  I think "virtfn_device" would give more of a hint and
> would match "device" and "subsystem_device".

I was going to just make this tweak myself, but realized I'd actually
propose these changes as well:

  offset -> sriov_offset
  stride -> sriov_stride
  vf_did -> virtfn_device (could be sriov_device as well)

and I can't really test it to make sure I get all the details right.
Can you update those and repost this?

Bjorn

> > vf_did provides a easy way to retrieve the VF device ID without reading
> > the PF config (looking up the SR-IOV capability and reading it) or without
> > enabling SR-IOV to read for example virtfn0/device.
> > 
> > Similar considerations (ease of access) apply to offset and stride.
> > 
> > 
> > >> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
> > >> 					    struct device_attribute *attr,
> > >> 					    char *buf)
> > >> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
> > >> static struct device_attribute sriov_numvfs_attr =
> > >> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
> > >> 		       sriov_numvfs_show, sriov_numvfs_store);
> > >> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
> > >> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
> > >> +static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
> > >> static struct device_attribute sriov_drivers_autoprobe_attr =
> > >> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
> > >> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
> > >> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
> > >> static struct attribute *sriov_dev_attrs[] = {
> > >> 	&sriov_totalvfs_attr.attr,
> > >> 	&sriov_numvfs_attr.attr,
> > >> +	&sriov_offset_attr.attr,
> > >> +	&sriov_stride_attr.attr,
> > >> +	&sriov_vf_did_attr.attr,
> > >> 	&sriov_drivers_autoprobe_attr.attr,
> > >> 	NULL,
> > >> };
> > >> -- 
> > >> 2.7.4
> > >> 
> > > 
> > 
> > Amazon Development Center Germany GmbH
> > Berlin - Dresden - Aachen
> > main office: Krausenstr. 38, 10117 Berlin
> > Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
> > Ust-ID: DE289237879
> > Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
> > 

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-10-03 19:48         ` Bjorn Helgaas
@ 2017-10-04 17:32             ` Sironi, Filippo
  0 siblings, 0 replies; 13+ messages in thread
From: Sironi, Filippo @ 2017-10-04 17:32 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel


> On 3. Oct 2017, at 21:48, Bjorn Helgaas <helgaas@kernel.org> wrote:
> 
> On Tue, Oct 03, 2017 at 02:31:14PM -0500, Bjorn Helgaas wrote:
>> On Fri, Sep 29, 2017 at 07:53:31AM +0000, Sironi, Filippo wrote:
>>> 
>>> Hi Bjorn,
>>> 
>>>> On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
>>>> 
>>>> Hi Filippo,
>>>> 
>>>> On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
>>>>> +static ssize_t sriov_vf_did_show(struct device *dev,
>>>>> +				 struct device_attribute *attr,
>>>>> +				 char *buf)
>>>>> +{
>>>>> +	struct pci_dev *pdev = to_pci_dev(dev);
>>>>> +
>>>>> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
>>>>> +}
>>>> 
>>>> What does the vf_did part look like in sysfs?  Do we have a directory with
>>>> both "device" and "vf_did" in it?  If so, why do we have both and do we
>>>> need both?  Could we put the vf_did in the "device" file?
>>> 
>>> On my machine:
>>> 
>>> /sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
>>> total 0
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 class
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 config
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 device
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/pci/drivers/igb
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 irq
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
>>> drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
>>> drwxr-xr-x 3 root root       0 Sep 28 19:41 net
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
>>> drwxr-xr-x 2 root root       0 Sep 28 19:41 power
>>> drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
>>> --w--w---- 1 root root    4096 Sep 28 19:41 remove
>>> --w--w---- 1 root root    4096 Sep 28 19:41 rescan
>>> --w------- 1 root root    4096 Sep 28 19:41 reset
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 resource
>>> -rw------- 1 root root  131072 Sep 28 19:41 resource0
>>> -rw------- 1 root root 4194304 Sep 28 19:41 resource1
>>> -rw------- 1 root root      32 Sep 28 19:41 resource2
>>> -rw------- 1 root root   16384 Sep 28 19:41 resource3
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 revision
>>> -rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bus/pci
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
>>> lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0
>>> 
>>> nothing changes on for VFs.
>>> Then:
>>> 
>>> /sys/bus/pci/devices/0000:03:00.0# cat device 
>>> 0x10c9
>>> 
>>> /sys/bus/pci/devices/0000:03:00.0# cat vf_did
>>> 0x10ca
>>> 
>>> Putting the VF device ID in the PF device file would be a change of
>>> that we expose to userspace.  Something might break.
>> 
>> Oh, sorry, I misunderstood!  I was thinking that you were adding
>> "vf_did" to the VF directory, not the PF directory.
>> 
>> Then I guess my only issue is that "vf_did" doesn't match the pattern
>> of other names.  I think "virtfn_device" would give more of a hint and
>> would match "device" and "subsystem_device".
> 
> I was going to just make this tweak myself, but realized I'd actually
> propose these changes as well:
> 
>  offset -> sriov_offset
>  stride -> sriov_stride
>  vf_did -> virtfn_device (could be sriov_device as well)
> 
> and I can't really test it to make sure I get all the details right.
> Can you update those and repost this?
> 
> Bjorn

I'll give this a spin tomorrow.

Thanks,
Filippo


>>> vf_did provides a easy way to retrieve the VF device ID without reading
>>> the PF config (looking up the SR-IOV capability and reading it) or without
>>> enabling SR-IOV to read for example virtfn0/device.
>>> 
>>> Similar considerations (ease of access) apply to offset and stride.
>>> 
>>> 
>>>>> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>>>>> 					    struct device_attribute *attr,
>>>>> 					    char *buf)
>>>>> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
>>>>> static struct device_attribute sriov_numvfs_attr =
>>>>> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>>>>> 		       sriov_numvfs_show, sriov_numvfs_store);
>>>>> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
>>>>> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
>>>>> +static struct device_attribute sriov_vf_did_attr = __ATTR_RO(sriov_vf_did);
>>>>> static struct device_attribute sriov_drivers_autoprobe_attr =
>>>>> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>>>>> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
>>>>> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
>>>>> static struct attribute *sriov_dev_attrs[] = {
>>>>> 	&sriov_totalvfs_attr.attr,
>>>>> 	&sriov_numvfs_attr.attr,
>>>>> +	&sriov_offset_attr.attr,
>>>>> +	&sriov_stride_attr.attr,
>>>>> +	&sriov_vf_did_attr.attr,
>>>>> 	&sriov_drivers_autoprobe_attr.attr,
>>>>> 	NULL,
>>>>> };
>>>>> -- 
>>>>> 2.7.4
>>>>> 
>>>> 
>>> 
>>> Amazon Development Center Germany GmbH
>>> Berlin - Dresden - Aachen
>>> main office: Krausenstr. 38, 10117 Berlin
>>> Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
>>> Ust-ID: DE289237879
>>> Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

Amazon Development Center Germany GmbH
Berlin - Dresden - Aachen
main office: Krausenstr. 38, 10117 Berlin
Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
Ust-ID: DE289237879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

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

* Re: [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs
@ 2017-10-04 17:32             ` Sironi, Filippo
  0 siblings, 0 replies; 13+ messages in thread
From: Sironi, Filippo @ 2017-10-04 17:32 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, linux-kernel


> On 3. Oct 2017, at 21:48, Bjorn Helgaas <helgaas@kernel.org> wrote:
> =

> On Tue, Oct 03, 2017 at 02:31:14PM -0500, Bjorn Helgaas wrote:
>> On Fri, Sep 29, 2017 at 07:53:31AM +0000, Sironi, Filippo wrote:
>>> =

>>> Hi Bjorn,
>>> =

>>>> On 25. Sep 2017, at 20:55, Bjorn Helgaas <helgaas@kernel.org> wrote:
>>>> =

>>>> Hi Filippo,
>>>> =

>>>> On Mon, Aug 28, 2017 at 03:38:50PM +0200, Filippo Sironi wrote:
>>>>> +static ssize_t sriov_vf_did_show(struct device *dev,
>>>>> +				 struct device_attribute *attr,
>>>>> +				 char *buf)
>>>>> +{
>>>>> +	struct pci_dev *pdev =3D to_pci_dev(dev);
>>>>> +
>>>>> +	return sprintf(buf, "%x\n", pdev->sriov->vf_did);
>>>>> +}
>>>> =

>>>> What does the vf_did part look like in sysfs?  Do we have a directory =
with
>>>> both "device" and "vf_did" in it?  If so, why do we have both and do we
>>>> need both?  Could we put the vf_did in the "device" file?
>>> =

>>> On my machine:
>>> =

>>> /sys/bus/pci/devices/0000:03:00.0# ls -l  # this is the PF
>>> total 0
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 broken_parity_status
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 class
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 config
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 consistent_dma_mask_bits
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 d3cold_allowed
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 device
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 dma_mask_bits
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 driver -> ../../../../bus/p=
ci/drivers/igb
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 driver_override
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 enable
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 firmware_node -> ../../../L=
NXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 irq
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpulist
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 local_cpus
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 modalias
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 msi_bus
>>> drwxr-xr-x 2 root root       0 Sep 29 09:44 msi_irqs
>>> drwxr-xr-x 3 root root       0 Sep 28 19:41 net
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 numa_node
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 offset  # this is new
>>> drwxr-xr-x 2 root root       0 Sep 28 19:41 power
>>> drwxr-xr-x 3 root root       0 Sep 28 19:41 ptp
>>> --w--w---- 1 root root    4096 Sep 28 19:41 remove
>>> --w--w---- 1 root root    4096 Sep 28 19:41 rescan
>>> --w------- 1 root root    4096 Sep 28 19:41 reset
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 resource
>>> -rw------- 1 root root  131072 Sep 28 19:41 resource0
>>> -rw------- 1 root root 4194304 Sep 28 19:41 resource1
>>> -rw------- 1 root root      32 Sep 28 19:41 resource2
>>> -rw------- 1 root root   16384 Sep 28 19:41 resource3
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 revision
>>> -rw-rw-r-- 1 root root    4096 Sep 29 09:44 sriov_numvfs
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 sriov_totalvfs
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 stride  # this is new
>>> lrwxrwxrwx 1 root root       0 Sep 28 19:41 subsystem -> ../../../../bu=
s/pci
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_device
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 subsystem_vendor
>>> -rw-r--r-- 1 root root    4096 Sep 28 19:41 uevent
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 vendor
>>> -r--r--r-- 1 root root    4096 Sep 28 19:41 vf_did  # this is new
>>> lrwxrwxrwx 1 root root       0 Sep 29 09:44 virtfn0 -> ../0000:03:10.0
>>> =

>>> nothing changes on for VFs.
>>> Then:
>>> =

>>> /sys/bus/pci/devices/0000:03:00.0# cat device =

>>> 0x10c9
>>> =

>>> /sys/bus/pci/devices/0000:03:00.0# cat vf_did
>>> 0x10ca
>>> =

>>> Putting the VF device ID in the PF device file would be a change of
>>> that we expose to userspace.  Something might break.
>> =

>> Oh, sorry, I misunderstood!  I was thinking that you were adding
>> "vf_did" to the VF directory, not the PF directory.
>> =

>> Then I guess my only issue is that "vf_did" doesn't match the pattern
>> of other names.  I think "virtfn_device" would give more of a hint and
>> would match "device" and "subsystem_device".
> =

> I was going to just make this tweak myself, but realized I'd actually
> propose these changes as well:
> =

>  offset -> sriov_offset
>  stride -> sriov_stride
>  vf_did -> virtfn_device (could be sriov_device as well)
> =

> and I can't really test it to make sure I get all the details right.
> Can you update those and repost this?
> =

> Bjorn

I'll give this a spin tomorrow.

Thanks,
Filippo


>>> vf_did provides a easy way to retrieve the VF device ID without reading
>>> the PF config (looking up the SR-IOV capability and reading it) or with=
out
>>> enabling SR-IOV to read for example virtfn0/device.
>>> =

>>> Similar considerations (ease of access) apply to offset and stride.
>>> =

>>> =

>>>>> static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>>>>> 					    struct device_attribute *attr,
>>>>> 					    char *buf)
>>>>> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_att=
r =3D __ATTR_RO(sriov_totalvfs);
>>>>> static struct device_attribute sriov_numvfs_attr =3D
>>>>> 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>>>>> 		       sriov_numvfs_show, sriov_numvfs_store);
>>>>> +static struct device_attribute sriov_offset_attr =3D __ATTR_RO(sriov=
_offset);
>>>>> +static struct device_attribute sriov_stride_attr =3D __ATTR_RO(sriov=
_stride);
>>>>> +static struct device_attribute sriov_vf_did_attr =3D __ATTR_RO(sriov=
_vf_did);
>>>>> static struct device_attribute sriov_drivers_autoprobe_attr =3D
>>>>> 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>>>>> 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
>>>>> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_g=
roup =3D {
>>>>> static struct attribute *sriov_dev_attrs[] =3D {
>>>>> 	&sriov_totalvfs_attr.attr,
>>>>> 	&sriov_numvfs_attr.attr,
>>>>> +	&sriov_offset_attr.attr,
>>>>> +	&sriov_stride_attr.attr,
>>>>> +	&sriov_vf_did_attr.attr,
>>>>> 	&sriov_drivers_autoprobe_attr.attr,
>>>>> 	NULL,
>>>>> };
>>>>> -- =

>>>>> 2.7.4
>>>>> =

>>>> =

>>> =

>>> Amazon Development Center Germany GmbH
>>> Berlin - Dresden - Aachen
>>> main office: Krausenstr. 38, 10117 Berlin
>>> Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
>>> Ust-ID: DE289237879
>>> Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

Amazon Development Center Germany GmbH
Berlin - Dresden - Aachen
main office: Krausenstr. 38, 10117 Berlin
Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger
Ust-ID: DE289237879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B

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

* [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-08-28 13:38 [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Filippo Sironi
  2017-08-28 13:38 ` [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
  2017-10-03 19:33 ` [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Bjorn Helgaas
@ 2017-10-08 23:09 ` Filippo Sironi
  2017-10-08 23:09   ` Filippo Sironi
  2 siblings, 1 reply; 13+ messages in thread
From: Filippo Sironi @ 2017-10-08 23:09 UTC (permalink / raw)
  To: helgaas, linux-pci, linux-kernel; +Cc: Filippo Sironi

Testing done:

$ ls -l /sys/bus/pci/devices/0000\:03\:00.0/
total 0
-rw-r--r-- 1 root root    4096 Oct  9 00:48 broken_parity_status
-r--r--r-- 1 root root    4096 Oct  9 00:48 class
-rw-r--r-- 1 root root    4096 Oct  9 00:46 config
-r--r--r-- 1 root root    4096 Oct  9 00:48 consistent_dma_mask_bits
-r--r--r-- 1 root root    4096 Oct  9 00:48 current_link_speed
-r--r--r-- 1 root root    4096 Oct  9 00:48 current_link_width
-rw-r--r-- 1 root root    4096 Oct  9 00:48 d3cold_allowed
-r--r--r-- 1 root root    4096 Oct  9 00:46 device
-r--r--r-- 1 root root    4096 Oct  9 00:48 dma_mask_bits
lrwxrwxrwx 1 root root       0 Oct  9 00:46 driver -> ../../../../bus/pci/drivers/igb
-rw-r--r-- 1 root root    4096 Oct  9 00:48 driver_override
-rw-r--r-- 1 root root    4096 Oct  9 00:48 enable
lrwxrwxrwx 1 root root       0 Oct  9 00:48 firmware_node -> ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
-r--r--r-- 1 root root    4096 Oct  9 00:46 irq
-r--r--r-- 1 root root    4096 Oct  9 00:48 local_cpulist
-r--r--r-- 1 root root    4096 Oct  9 00:48 local_cpus
-r--r--r-- 1 root root    4096 Oct  9 00:48 max_link_speed
-r--r--r-- 1 root root    4096 Oct  9 00:48 max_link_width
-r--r--r-- 1 root root    4096 Oct  9 00:48 modalias
-rw-r--r-- 1 root root    4096 Oct  9 00:48 msi_bus
drwxr-xr-x 2 root root       0 Oct  9 00:48 msi_irqs
drwxr-xr-x 3 root root       0 Oct  9 00:46 net
-rw-r--r-- 1 root root    4096 Oct  9 00:48 numa_node
drwxr-xr-x 2 root root       0 Oct  9 00:48 power
drwxr-xr-x 3 root root       0 Oct  9 00:46 ptp
--w--w---- 1 root root    4096 Oct  9 00:48 remove
--w--w---- 1 root root    4096 Oct  9 00:48 rescan
--w------- 1 root root    4096 Oct  9 00:48 reset
-r--r--r-- 1 root root    4096 Oct  9 00:46 resource
-rw------- 1 root root  131072 Oct  9 00:48 resource0
-rw------- 1 root root 4194304 Oct  9 00:48 resource1
-rw------- 1 root root      32 Oct  9 00:48 resource2
-rw------- 1 root root   16384 Oct  9 00:48 resource3
-r--r--r-- 1 root root    4096 Oct  9 00:48 revision
-rw-rw-r-- 1 root root    4096 Oct  9 00:48 sriov_drivers_autoprobe
-rw-rw-r-- 1 root root    4096 Oct  9 00:48 sriov_numvfs
-r--r--r-- 1 root root    4096 Oct  9 00:48 sriov_offset
-r--r--r-- 1 root root    4096 Oct  9 00:48 sriov_stride
-r--r--r-- 1 root root    4096 Oct  9 00:48 sriov_totalvfs
-r--r--r-- 1 root root    4096 Oct  9 00:48 sriov_vf_device
lrwxrwxrwx 1 root root       0 Oct  9 00:46 subsystem -> ../../../../bus/pci
-r--r--r-- 1 root root    4096 Oct  9 00:48 subsystem_device
-r--r--r-- 1 root root    4096 Oct  9 00:48 subsystem_vendor
-rw-r--r-- 1 root root    4096 Oct  9 00:46 uevent
-r--r--r-- 1 root root    4096 Oct  9 00:46 vendor
$ cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_offset
128
$ cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_stride
2
$ cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_vf_device 
10ca

Filippo Sironi (1):
  pci: Expose offset, stride, and VF device ID via sysfs

 drivers/pci/pci-sysfs.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

-- 
2.7.4

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

* [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-10-08 23:09 ` [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
@ 2017-10-08 23:09   ` Filippo Sironi
  2017-10-11  0:15     ` Bjorn Helgaas
  0 siblings, 1 reply; 13+ messages in thread
From: Filippo Sironi @ 2017-10-08 23:09 UTC (permalink / raw)
  To: helgaas, linux-pci, linux-kernel; +Cc: Filippo Sironi

... to make it easier for userspace applications to consume them.

Signed-off-by: Filippo Sironi <sironi@amazon.de>
Cc: Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
v2:
* follow up with the rename of vf_did to vf_device

 drivers/pci/pci-sysfs.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 2f3780b50723..e6f4133f8992 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -648,6 +648,33 @@ static ssize_t sriov_numvfs_store(struct device *dev,
 	return count;
 }
 
+static ssize_t sriov_offset_show(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%u\n", pdev->sriov->offset);
+}
+
+static ssize_t sriov_stride_show(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%u\n", pdev->sriov->stride);
+}
+
+static ssize_t sriov_vf_device_show(struct device *dev,
+				    struct device_attribute *attr,
+				    char *buf)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	return sprintf(buf, "%x\n", pdev->sriov->vf_device);
+}
+
 static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
 					    struct device_attribute *attr,
 					    char *buf)
@@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
 static struct device_attribute sriov_numvfs_attr =
 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
 		       sriov_numvfs_show, sriov_numvfs_store);
+static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
+static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
+static struct device_attribute sriov_vf_device_attr = __ATTR_RO(sriov_vf_device);
 static struct device_attribute sriov_drivers_autoprobe_attr =
 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
@@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
 static struct attribute *sriov_dev_attrs[] = {
 	&sriov_totalvfs_attr.attr,
 	&sriov_numvfs_attr.attr,
+	&sriov_offset_attr.attr,
+	&sriov_stride_attr.attr,
+	&sriov_vf_device_attr.attr,
 	&sriov_drivers_autoprobe_attr.attr,
 	NULL,
 };
-- 
2.7.4

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

* Re: [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs
  2017-10-08 23:09   ` Filippo Sironi
@ 2017-10-11  0:15     ` Bjorn Helgaas
  0 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2017-10-11  0:15 UTC (permalink / raw)
  To: Filippo Sironi; +Cc: linux-pci, linux-kernel

On Mon, Oct 09, 2017 at 01:09:11AM +0200, Filippo Sironi wrote:
> ... to make it easier for userspace applications to consume them.
> 
> Signed-off-by: Filippo Sironi <sironi@amazon.de>
> Cc: Bjorn Helgaas <helgaas@kernel.org>
> Cc: linux-pci@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org

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

> ---
> v2:
> * follow up with the rename of vf_did to vf_device
> 
>  drivers/pci/pci-sysfs.c | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
> 
> diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
> index 2f3780b50723..e6f4133f8992 100644
> --- a/drivers/pci/pci-sysfs.c
> +++ b/drivers/pci/pci-sysfs.c
> @@ -648,6 +648,33 @@ static ssize_t sriov_numvfs_store(struct device *dev,
>  	return count;
>  }
>  
> +static ssize_t sriov_offset_show(struct device *dev,
> +				 struct device_attribute *attr,
> +				 char *buf)
> +{
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	return sprintf(buf, "%u\n", pdev->sriov->offset);
> +}
> +
> +static ssize_t sriov_stride_show(struct device *dev,
> +				 struct device_attribute *attr,
> +				 char *buf)
> +{
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	return sprintf(buf, "%u\n", pdev->sriov->stride);
> +}
> +
> +static ssize_t sriov_vf_device_show(struct device *dev,
> +				    struct device_attribute *attr,
> +				    char *buf)
> +{
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	return sprintf(buf, "%x\n", pdev->sriov->vf_device);
> +}
> +
>  static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
>  					    struct device_attribute *attr,
>  					    char *buf)
> @@ -676,6 +703,9 @@ static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
>  static struct device_attribute sriov_numvfs_attr =
>  		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
>  		       sriov_numvfs_show, sriov_numvfs_store);
> +static struct device_attribute sriov_offset_attr = __ATTR_RO(sriov_offset);
> +static struct device_attribute sriov_stride_attr = __ATTR_RO(sriov_stride);
> +static struct device_attribute sriov_vf_device_attr = __ATTR_RO(sriov_vf_device);
>  static struct device_attribute sriov_drivers_autoprobe_attr =
>  		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
>  		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
> @@ -1744,6 +1774,9 @@ static struct attribute_group pci_dev_hp_attr_group = {
>  static struct attribute *sriov_dev_attrs[] = {
>  	&sriov_totalvfs_attr.attr,
>  	&sriov_numvfs_attr.attr,
> +	&sriov_offset_attr.attr,
> +	&sriov_stride_attr.attr,
> +	&sriov_vf_device_attr.attr,
>  	&sriov_drivers_autoprobe_attr.attr,
>  	NULL,
>  };
> -- 
> 2.7.4
> 

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

end of thread, other threads:[~2017-10-11  0:16 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-28 13:38 [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Filippo Sironi
2017-08-28 13:38 ` [PATCH 2/2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
2017-09-25 18:55   ` Bjorn Helgaas
2017-09-29  7:53     ` Sironi, Filippo
2017-09-29  7:53       ` Sironi, Filippo
2017-10-03 19:31       ` Bjorn Helgaas
2017-10-03 19:48         ` Bjorn Helgaas
2017-10-04 17:32           ` Sironi, Filippo
2017-10-04 17:32             ` Sironi, Filippo
2017-10-03 19:33 ` [PATCH 1/2] pci: Cache the VF device ID in the SR-IOV structure Bjorn Helgaas
2017-10-08 23:09 ` [PATCH v2] pci: Expose offset, stride, and VF device ID via sysfs Filippo Sironi
2017-10-08 23:09   ` Filippo Sironi
2017-10-11  0:15     ` Bjorn Helgaas

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.