On 9/10/2020 12:30 AM, Tal Shnaiderman wrote:
Subject: Re: [PATCH] bus/pci: support segment value as address domain on
Windows

On Tue, Aug 25, 2020 at 02:43:16PM +0300, Tal Shnaiderman wrote:
Set the domain value for rte_pci_addr probing on Windows to the value
of the PCI segment returned by SPDRP_BUSNUMBER.

Signed-off-by: Tal Shnaiderman <tal...@nvidia.com>
---
  drivers/bus/pci/windows/pci.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/bus/pci/windows/pci.c
b/drivers/bus/pci/windows/pci.c index 489aa7902a..a40acec609 100644
--- a/drivers/bus/pci/windows/pci.c
+++ b/drivers/bus/pci/windows/pci.c
@@ -195,8 +195,8 @@ get_device_pci_address(HDEVINFO dev_info,
                return -1;
        }

-       addr->domain = 0;
-       addr->bus = bus_num;
+       addr->domain = bus_num >> 8;
+       addr->bus = bus_num & 0xff;
        addr->devid = dev_and_func >> 16;
        addr->function = dev_and_func & 0xffff;
        return 0;
--
Is this needed to avoid collision of devices with the same B:D:F?
Right, it can happen in virtualization setups when several virtual functions 
can have the same BDF, e.g.:

PS  > Get-NetAdapterHardwareInfo

Name                           Segment Bus Device Function Slot NumaNode 
PcieLinkSpeed
----                           ------- --- ------ -------- ---- -------- 
-------------
Ethernet                                   0   0     10       0                 
     Unknown
Ethernet 4                       58601   0      2        0             0       
Unknown
Ethernet 5                       52956   0      2        0             0       
Unknown

DPDK currently can detect either Ethernet 4 or ethernet 5 if only BDF is 
checked.
Unix uses the Domain value, the equivalent value for Windows is Segment.

Thanks for the explanation, Tal.

I had always been curious how Windows stores the PCIe segment (domain) number.

On VMs hosted on Hyper-V, the VF segment numbers are always in the high 16-bit values.

Is this documented somewhere, or did you find this by experimentation?


ranjit m.

Reply via email to