Interrupt controllers' hooks are executed in the atomic context, so
they are not permitted to sleep (with RT kernels non-raw spinlocks are
sleepable). So, pci_pic_lock has to be a real (non-sleepable) spinlock.

Signed-off-by: Anton Vorontsov <avoront...@ru.mvista.com>
---
 arch/powerpc/platforms/82xx/pq2ads-pci-pic.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c 
b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
index 9d962d7..d4a09f8 100644
--- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
+++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
@@ -24,7 +24,7 @@
 
 #include "pq2.h"
 
-static DEFINE_SPINLOCK(pci_pic_lock);
+static DEFINE_RAW_SPINLOCK(pci_pic_lock);
 
 struct pq2ads_pci_pic {
        struct device_node *node;
@@ -45,12 +45,12 @@ static void pq2ads_pci_mask_irq(unsigned int virq)
 
        if (irq != -1) {
                unsigned long flags;
-               spin_lock_irqsave(&pci_pic_lock, flags);
+               raw_spin_lock_irqsave(&pci_pic_lock, flags);
 
                setbits32(&priv->regs->mask, 1 << irq);
                mb();
 
-               spin_unlock_irqrestore(&pci_pic_lock, flags);
+               raw_spin_unlock_irqrestore(&pci_pic_lock, flags);
        }
 }
 
@@ -62,9 +62,9 @@ static void pq2ads_pci_unmask_irq(unsigned int virq)
        if (irq != -1) {
                unsigned long flags;
 
-               spin_lock_irqsave(&pci_pic_lock, flags);
+               raw_spin_lock_irqsave(&pci_pic_lock, flags);
                clrbits32(&priv->regs->mask, 1 << irq);
-               spin_unlock_irqrestore(&pci_pic_lock, flags);
+               raw_spin_unlock_irqrestore(&pci_pic_lock, flags);
        }
 }
 
-- 
1.6.5.7

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to