From: Brian King <brking@us.ibm.com>

I reverted the patch to use a spinlock and added a comment.

Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
_