diff -urN /usr/src/linux-2.6.15-rc7/drivers/pci/syscall.c /home/cneira/Linuxjanitoring/linux-janitorpatching/drivers/pci/syscall.c --- /usr/src/linux-2.6.15-rc7/drivers/pci/syscall.c 2005-12-24 20:47:48.000000000 -0300 +++ /home/cneira/Linuxjanitoring/linux-janitorpatching/drivers/pci/syscall.c 2006-01-07 22:53:23.000000000 -0300 @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include "pci.h" @@ -21,6 +22,7 @@ void __user *buf) { struct pci_dev *dev; + u8 byte; u16 word; u32 dword; @@ -35,7 +37,7 @@ if (!dev) goto error; - lock_kernel(); + spin_lock(&pciconfig_read_lock) switch (len) { case 1: cfg_ret = pci_user_read_config_byte(dev, off, &byte); @@ -48,10 +50,10 @@ break; default: err = -EINVAL; - unlock_kernel(); + spin_unlock(&pciconfig_read_lock); goto error; }; - unlock_kernel(); + spin_unlock(&pciconfig_read_lock); err = -EIO; if (cfg_ret != PCIBIOS_SUCCESSFUL) @@ -106,7 +108,7 @@ if (!dev) return -ENODEV; - lock_kernel(); + spin_lock(&pciconfig_write_lock) switch(len) { case 1: err = get_user(byte, (u8 __user *)buf); @@ -139,7 +141,7 @@ err = -EINVAL; break; }; - unlock_kernel(); + spin_unlock(&pciconfig_write_lock) return err; }