]> xenbits.xensource.com Git - people/andrewcoop/hwloc.git/commitdiff
pci: Fix subvendor/device ids (read 16bits inst...
authorBrice Goglin <brice.goglin@inria.fr>
Thu, 20 Jun 2013 15:33:37 +0000 (15:33 +0000)
committerBrice Goglin <brice.goglin@inria.fr>
Thu, 20 Jun 2013 15:33:37 +0000 (15:33 +0000)
pci: Fix subvendor/device ids (read 16bits instead of only 8)

This commit was SVN r5694.

src/topology-pci.c

index 09a6082d82ca0b976e72374ae0acc594a5344b40..6751f32fe327103c4f8cef925c650d637b3f3e87 100644 (file)
@@ -444,6 +444,7 @@ hwloc_look_pci(struct hwloc_backend *backend)
     unsigned isbridge;
     unsigned domain;
     unsigned device_class;
+    unsigned short tmp16;
     char name[128];
     unsigned offset;
 #ifdef HWLOC_HAVE_PCI_FIND_CAP
@@ -500,10 +501,13 @@ hwloc_look_pci(struct hwloc_backend *backend)
     obj->attr->pcidev.class_id = device_class;
     HWLOC_BUILD_ASSERT(PCI_REVISION_ID < CONFIG_SPACE_CACHESIZE);
     obj->attr->pcidev.revision = config_space_cache[PCI_REVISION_ID];
+
+    memcpy(&tmp16, &config_space_cache[PCI_SUBSYSTEM_VENDOR_ID], sizeof(tmp16));
     HWLOC_BUILD_ASSERT(PCI_SUBSYSTEM_VENDOR_ID < CONFIG_SPACE_CACHESIZE);
-    obj->attr->pcidev.subvendor_id = config_space_cache[PCI_SUBSYSTEM_VENDOR_ID];
+    obj->attr->pcidev.subvendor_id = tmp16;
+    memcpy(&tmp16, &config_space_cache[PCI_SUBSYSTEM_ID], sizeof(tmp16));
     HWLOC_BUILD_ASSERT(PCI_SUBSYSTEM_ID < CONFIG_SPACE_CACHESIZE);
-    obj->attr->pcidev.subdevice_id = config_space_cache[PCI_SUBSYSTEM_ID];
+    obj->attr->pcidev.subdevice_id = tmp16;
 
     obj->attr->pcidev.linkspeed = 0; /* unknown */
 #ifdef HWLOC_HAVE_PCI_FIND_CAP