[PATCH] pci-sysfs: backport fix for 2.6.11.12

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

 



Greg, before 2.6.12, pci_write_config in pci-sysfs.c was broken, causing
incorrect data being written to the configuration register,
which in the case of my userspace driver results in system failure.

This has been fixed in 2.6.12-rc5:

http://www.kernel.org/diff/diffview.cgi?file=%2Fpub%2Flinux%2Fkernel%2Fv2.6%2Ftesting%2Fpatch-2.6.12-rc5.bz2;z=2656

Would you please consider merging the fix for 2.6.11.12 as well?

Alternatively (since there were multiple other changes in pci-sysfs.c), here's
a small patch to fix just this issue.

Thanks,
MST


cast from (signed) char to unsigned int in pci_write_config
causes the result to be sign extended, clobbering high bits in the result.
Thus:

# setpci -s 07:00.0 14.L=E4
# setpci -s 07:00.0 14.L
ffffffe4

Signed-off-by: Michael S. Tsirkin <[email protected]>

--- linux-2.6.11-openib/drivers/pci/pci-sysfs.c.bad	2005-05-30 13:45:02.000000000 +0300
+++ linux-2.6.11-openib/drivers/pci/pci-sysfs.c	2005-05-30 13:51:39.000000000 +0300
@@ -161,10 +161,10 @@ pci_write_config(struct kobject *kobj, c
 	}
 
 	while (size > 3) {
-		unsigned int val = buf[off - init_off];
-		val |= (unsigned int) buf[off - init_off + 1] << 8;
-		val |= (unsigned int) buf[off - init_off + 2] << 16;
-		val |= (unsigned int) buf[off - init_off + 3] << 24;
+		unsigned int val = (u8)buf[off - init_off];
+		val |= (unsigned int)(u8)buf[off - init_off + 1] << 8;
+		val |= (unsigned int)(u8)buf[off - init_off + 2] << 16;
+		val |= (unsigned int)(u8)buf[off - init_off + 3] << 24;
 		pci_write_config_dword(dev, off, val);
 		off += 4;
 		size -= 4;

-- 
MST - Michael S. Tsirkin
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux