From: Brian King I reverted the patch to use a spinlock and added a comment. Signed-off-by: Brian King Signed-off-by: Andrew Morton --- drivers/pci/access.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-) diff -puN drivers/pci/access.c~pci-block-config-access-during-bist-resend drivers/pci/access.c --- 25/drivers/pci/access.c~pci-block-config-access-during-bist-resend Fri Sep 9 16:50:39 2005 +++ 25-akpm/drivers/pci/access.c Fri Sep 9 16:50:39 2005 @@ -122,11 +122,14 @@ PCI_USER_WRITE_CONFIG(dword, u32) **/ void pci_block_user_cfg_access(struct pci_dev *dev) { + unsigned long flags; + pci_save_state(dev); + + /* spinlock to synchronize with anyone reading config space now */ + spin_lock_irqsave(&pci_lock, flags); dev->block_ucfg_access = 1; - mb(); - while (spin_is_locked(&pci_lock)) - cpu_relax(); + spin_unlock_irqrestore(&pci_lock, flags); } EXPORT_SYMBOL_GPL(pci_block_user_cfg_access); @@ -138,9 +141,11 @@ EXPORT_SYMBOL_GPL(pci_block_user_cfg_acc **/ void pci_unblock_user_cfg_access(struct pci_dev *dev) { + unsigned long flags; + + /* spinlock to synchronize with anyone reading saved config space */ + spin_lock_irqsave(&pci_lock, flags); dev->block_ucfg_access = 0; - mb(); - while (spin_is_locked(&pci_lock)) - cpu_relax(); + spin_unlock_irqrestore(&pci_lock, flags); } EXPORT_SYMBOL_GPL(pci_unblock_user_cfg_access); _