[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#891674: Patch to fix the problem



The linux kernel treats PCI domains as 32 bit ints.

diff -ru libpciaccess-0.13.4/include/pciaccess.h libpciaccess-0.13.4-fixed/include/pciaccess.h
--- libpciaccess-0.13.4/include/pciaccess.h	2015-05-01 14:44:47.000000000 +1000
+++ libpciaccess-0.13.4-fixed/include/pciaccess.h	2018-02-28 12:21:12.280963252 +1100
@@ -321,7 +321,7 @@
      * the domain will always be zero.
      */
     /*@{*/
-    uint16_t    domain;
+    uint32_t    domain;
     uint8_t     bus;
     uint8_t     dev;
     uint8_t     func;
diff -ru libpciaccess-0.13.4/src/linux_sysfs.c libpciaccess-0.13.4-fixed/src/linux_sysfs.c
--- libpciaccess-0.13.4/src/linux_sysfs.c	2015-05-01 14:44:47.000000000 +1000
+++ libpciaccess-0.13.4-fixed/src/linux_sysfs.c	2018-02-28 12:21:32.676941130 +1100
@@ -157,7 +157,7 @@
 			(struct pci_device_private *) &p->devices[i];
 
 
-		sscanf(devices[i]->d_name, "%04x:%02x:%02x.%1u",
+		sscanf(devices[i]->d_name, "%x:%02x:%02x.%1u",
 		       & dom, & bus, & dev, & func);
 
 		device->base.domain = dom;

-- 
Dr Peter Chubb         Tel: +61 2 9490 5852      http://ts.data61.csiro.au/
Trustworthy Systems Group                           Data61 (formerly NICTA)

Reply to: