From 2dceae68f94ccad219ec24ef7c6bbbc13c14a9a3 Mon Sep 17 00:00:00 2001 From: Tal Shnaiderman Date: Sun, 23 Aug 2020 16:06:04 +0300 Subject: [PATCH] bus/pci: fix hardware IDs parsing on Windows Swap subsystem vendor id and subsystem device id. Parse the SPDRP_HARDWAREID string with correct type values. Fixes: b762221ac24 ("bus/pci: support Windows with bifurcated drivers") Cc: stable@dpdk.org Signed-off-by: Tal Shnaiderman Acked-by: Narcisa Vasile --- drivers/bus/pci/windows/pci.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index 489aa7902a..c80bd55716 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -270,17 +270,18 @@ static int parse_pci_hardware_id(const char *buf, struct rte_pci_id *pci_id) { int ids = 0; - uint16_t vendor_id, device_id, subvendor_id = 0; + uint16_t vendor_id, device_id; + uint32_t subvendor_id = 0; - ids = sscanf_s(buf, "PCI\\VEN_%x&DEV_%x&SUBSYS_%x", &vendor_id, - &device_id, &subvendor_id); + ids = sscanf_s(buf, "PCI\\VEN_%" PRIx16 "&DEV_%" PRIx16 "&SUBSYS_%" + PRIx32, &vendor_id, &device_id, &subvendor_id); if (ids != 3) return -1; pci_id->vendor_id = vendor_id; pci_id->device_id = device_id; - pci_id->subsystem_vendor_id = subvendor_id >> 16; - pci_id->subsystem_device_id = subvendor_id & 0xffff; + pci_id->subsystem_device_id = subvendor_id >> 16; + pci_id->subsystem_vendor_id = subvendor_id & 0xffff; return 0; } -- 2.20.1