powerpc: Convert confirm_error_lock to raw_spinlock

confirm_error_lock needs to be a real spinlock in RT. Convert it to
raw_spinlock.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Thomas Gleixner 2010-02-18 02:23:07 +00:00 committed by Benjamin Herrenschmidt
parent a9e8bf21cd
commit 3d37262828

View File

@ -100,7 +100,7 @@ int eeh_subsystem_enabled;
EXPORT_SYMBOL(eeh_subsystem_enabled); EXPORT_SYMBOL(eeh_subsystem_enabled);
/* Lock to avoid races due to multiple reports of an error */ /* Lock to avoid races due to multiple reports of an error */
static DEFINE_SPINLOCK(confirm_error_lock); static DEFINE_RAW_SPINLOCK(confirm_error_lock);
/* Buffer for reporting slot-error-detail rtas calls. Its here /* Buffer for reporting slot-error-detail rtas calls. Its here
* in BSS, and not dynamically alloced, so that it ends up in * in BSS, and not dynamically alloced, so that it ends up in
@ -436,7 +436,7 @@ static void __eeh_clear_slot(struct device_node *parent, int mode_flag)
void eeh_clear_slot (struct device_node *dn, int mode_flag) void eeh_clear_slot (struct device_node *dn, int mode_flag)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&confirm_error_lock, flags); raw_spin_lock_irqsave(&confirm_error_lock, flags);
dn = find_device_pe (dn); dn = find_device_pe (dn);
@ -447,7 +447,7 @@ void eeh_clear_slot (struct device_node *dn, int mode_flag)
PCI_DN(dn)->eeh_mode &= ~mode_flag; PCI_DN(dn)->eeh_mode &= ~mode_flag;
PCI_DN(dn)->eeh_check_count = 0; PCI_DN(dn)->eeh_check_count = 0;
__eeh_clear_slot(dn, mode_flag); __eeh_clear_slot(dn, mode_flag);
spin_unlock_irqrestore(&confirm_error_lock, flags); raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
} }
/** /**
@ -506,7 +506,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
* in one slot might report errors simultaneously, and we * in one slot might report errors simultaneously, and we
* only want one error recovery routine running. * only want one error recovery routine running.
*/ */
spin_lock_irqsave(&confirm_error_lock, flags); raw_spin_lock_irqsave(&confirm_error_lock, flags);
rc = 1; rc = 1;
if (pdn->eeh_mode & EEH_MODE_ISOLATED) { if (pdn->eeh_mode & EEH_MODE_ISOLATED) {
pdn->eeh_check_count ++; pdn->eeh_check_count ++;
@ -575,7 +575,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
* with other functions on this device, and functions under * with other functions on this device, and functions under
* bridges. */ * bridges. */
eeh_mark_slot (dn, EEH_MODE_ISOLATED); eeh_mark_slot (dn, EEH_MODE_ISOLATED);
spin_unlock_irqrestore(&confirm_error_lock, flags); raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
eeh_send_failure_event (dn, dev); eeh_send_failure_event (dn, dev);
@ -586,7 +586,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
return 1; return 1;
dn_unlock: dn_unlock:
spin_unlock_irqrestore(&confirm_error_lock, flags); raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
return rc; return rc;
} }
@ -1064,7 +1064,7 @@ void __init eeh_init(void)
struct device_node *phb, *np; struct device_node *phb, *np;
struct eeh_early_enable_info info; struct eeh_early_enable_info info;
spin_lock_init(&confirm_error_lock); raw_spin_lock_init(&confirm_error_lock);
spin_lock_init(&slot_errbuf_lock); spin_lock_init(&slot_errbuf_lock);
np = of_find_node_by_path("/rtas"); np = of_find_node_by_path("/rtas");