I think the series patches does not cover all area which need to adapt to u32 PCI domain, We still need some other work to do: we need define another macro such as PCI_PRI_FMT. Something like: #define PCI_XXX_PRI_FMT "%.5" PRIx32 ":%.2" PRIx8 ":%.2" PRIx8 ".%" PRIx8
PCI_PRI_STR_SIZE also need to be modified: #define PCI_PRI_STR_SIZE sizeof("XXXXX:XX:XX.X") The macro PCI_PRI_FMT will not works if The domain exceed 16bits. It will impact the following functions: 1 RTE_LOG function, there a lots of RTE_LOG such as: RTE_LOG(WARNING, EAL, "Requested device " PCI_PRI_FMT " cannot be used\n", addr->domain, addr->bus, addr->devid, addr->function); 2 pci_dump_one_device(). 3 rte_eal_pci_device_name() 4 pci_update_device() 5 pci_ioport_map() 6 pci_get_uio_dev() 7 pci_uio_map_resource_by_index() 8 pci_uio_ioport_map() 9 pci_vfio_map_resource() 10 pci_vfio_unmap_resource() All the above functions will related with the macro PCI_PRI_FMT, so I think they need to be modified too. There are some other code need modify: In function rte_eal_compare_pci_addr(), we need do the following work: dev_addr = ((uint64_t)addr->domain << 24) | ((uint64_t)addr->bus << 16) | ((uint64_t)addr->devid << 8) | (uint64_t)addr->function; dev_addr2 = ((uint64_t)addr2->domain << 24) | ((uint64_t)addr2->bus << 16) | ((uint64_t)addr2->devid << 8) | (uint64_t)addr2->function; In function eal_parse_pci_BDF(), we need do the following work: GET_PCIADDR_FIELD(input, dev_addr->domain, UINT32_MAX, ':'); > -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Stephen > Hemminger > Sent: Thursday, June 22, 2017 12:36 AM > To: dev@dpdk.org > Cc: Stephen Hemminger <step...@networkplumber.org>; Stephen > Hemminger <sthem...@microsoft.com> > Subject: [dpdk-dev] [PATCH 2/3] eal: PCI domain should be 32 bits > > In some environments, the PCI domain can be larger than 16 bits. > For example, a PCI device passed through in Azure gets a synthetic domain id > which is internally generated based on GUID. The PCI standard does not > restrict domain to be 16 bits. > > This change breaks ABI for API's that expose PCI address structure. > > Signed-off-by: Stephen Hemminger <sthem...@microsoft.com> > --- > lib/librte_eal/common/include/rte_pci.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_eal/common/include/rte_pci.h > b/lib/librte_eal/common/include/rte_pci.h > index 0284a6208aa5..8b549aadfbe6 100644 > --- a/lib/librte_eal/common/include/rte_pci.h > +++ b/lib/librte_eal/common/include/rte_pci.h > @@ -112,7 +112,7 @@ struct rte_pci_id { > * A structure describing the location of a PCI device. > */ > struct rte_pci_addr { > - uint16_t domain; /**< Device domain */ > + uint32_t domain; /**< Device domain */ > uint8_t bus; /**< Device bus */ > uint8_t devid; /**< Device ID */ > uint8_t function; /**< Device function. */ > -- > 2.11.0