[snip] > + /* kernel driver type is unsupported */ > + RTE_LOG(DEBUG, EAL, > + "kernel driver type for PCI device " PCI_PRI_FMT "," > + " is unsupported",
Nit: log messages usually start with a capital. > + dev->addr.domain, dev->addr.bus, > + dev->addr.devid, dev->addr.function); > + return -1; > + } > + > + return ERROR_SUCCESS; > +} [snip] > +static int > +pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) > +{ > + struct rte_pci_device *dev; > + int ret = -1; > + > + dev = malloc(sizeof(*dev)); > + if (dev == NULL) { > + goto end; > + } Braces not needed here. Checkpatch should've complained. > + > + memset(dev, 0, sizeof(*dev)); > + > + char pci_device_info[PATH_MAX]; > + BOOL res; > + struct rte_pci_addr addr; > + struct rte_pci_id pci_id; > + > + /* Retrieve PCI device IDs */ > + res = SetupDiGetDeviceRegistryPropertyA(dev_info, device_info_data, > + SPDRP_HARDWAREID, NULL, (BYTE *)&pci_device_info, > + sizeof(pci_device_info), NULL); > + if (!res) { > + RTE_LOG_WIN32_ERR( > + "SetupDiGetDeviceRegistryPropertyA(SPDRP_HARDWAREID)"); > + goto end; > + } > + > + ret = get_pci_hardware_info((const char *)&pci_device_info, &pci_id); What do you think of calling SetupDiGetDeviceRegistryPropertyA from get_pci_hardware_info (like other functions in this file work) and renaming the latter to something like get_device_pci_id (for what it exactly does)? Current get_pci_hardware_info may become parse_pci_id static helper. [snip] > @@ -165,5 +366,44 @@ pci_uio_remap_resource(struct rte_pci_device *dev > __rte_unused) > int > rte_pci_scan(void) > { > + int ret = -1; > + DWORD device_index = 0, found_device = 0; > + HDEVINFO dev_info; > + SP_DEVINFO_DATA device_info_data; > + > + /* for debug purposes, PCI can be disabled */ > + if (!rte_eal_has_pci()) > + return 0; > + > + dev_info = SetupDiGetClassDevs(&GUID_DEVCLASS_NET, TEXT("PCI"), NULL, > + DIGCF_PRESENT); > + if (dev_info == INVALID_HANDLE_VALUE) { > + RTE_LOG_WIN32_ERR("SetupDiGetClassDevs(pci_scan)"); > + RTE_LOG(ERR, EAL, "Unable to enumerate PCI devices.\n"); > + goto end; > + } > + > + device_info_data.cbSize = sizeof(SP_DEVINFO_DATA); > + device_index = 0; > + > + while (SetupDiEnumDeviceInfo(dev_info, device_index, > + &device_info_data)) { > + device_index++; > + ret = pci_scan_one(dev_info, &device_info_data); > + if (ret == ERROR_SUCCESS) > + found_device++; > + else if (ret != ERROR_CONTINUE) > + goto end; > + > + memset(&device_info_data, 0, sizeof(SP_DEVINFO_DATA)); > + device_info_data.cbSize = sizeof(SP_DEVINFO_DATA); > + } > + > + RTE_LOG(DEBUG, EAL, "PCI scan found %lu devices\n", found_device); > return 0; "dev_info" leaks here. > +end: > + if (dev_info != INVALID_HANDLE_VALUE) > + SetupDiDestroyDeviceInfoList(dev_info); > + > + return ret; > } [snip] -- Dmitry Kozlyuk