diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2010-02-17 21:23:11 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-02-18 22:52:31 -0500 |
| commit | 47e3c9046bc884d4f727df00f0b6ec73fa387e50 (patch) | |
| tree | b1e780abf188066eccac34db8c81607794eee4a4 | |
| parent | 7cc8a5e3f52c146d46d286f3778b09181639dc61 (diff) | |
powerpc: Convert i8259_lock to raw_spinlock
i8259_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>
| -rw-r--r-- | arch/powerpc/sysdev/i8259.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c index d32581764bde..6323e70e6bf4 100644 --- a/arch/powerpc/sysdev/i8259.c +++ b/arch/powerpc/sysdev/i8259.c | |||
| @@ -23,7 +23,7 @@ static unsigned char cached_8259[2] = { 0xff, 0xff }; | |||
| 23 | #define cached_A1 (cached_8259[0]) | 23 | #define cached_A1 (cached_8259[0]) |
| 24 | #define cached_21 (cached_8259[1]) | 24 | #define cached_21 (cached_8259[1]) |
| 25 | 25 | ||
| 26 | static DEFINE_SPINLOCK(i8259_lock); | 26 | static DEFINE_RAW_SPINLOCK(i8259_lock); |
| 27 | 27 | ||
| 28 | static struct irq_host *i8259_host; | 28 | static struct irq_host *i8259_host; |
| 29 | 29 | ||
| @@ -42,7 +42,7 @@ unsigned int i8259_irq(void) | |||
| 42 | if (pci_intack) | 42 | if (pci_intack) |
| 43 | irq = readb(pci_intack); | 43 | irq = readb(pci_intack); |
| 44 | else { | 44 | else { |
| 45 | spin_lock(&i8259_lock); | 45 | raw_spin_lock(&i8259_lock); |
| 46 | lock = 1; | 46 | lock = 1; |
| 47 | 47 | ||
| 48 | /* Perform an interrupt acknowledge cycle on controller 1. */ | 48 | /* Perform an interrupt acknowledge cycle on controller 1. */ |
| @@ -74,7 +74,7 @@ unsigned int i8259_irq(void) | |||
| 74 | irq = NO_IRQ; | 74 | irq = NO_IRQ; |
| 75 | 75 | ||
| 76 | if (lock) | 76 | if (lock) |
| 77 | spin_unlock(&i8259_lock); | 77 | raw_spin_unlock(&i8259_lock); |
| 78 | return irq; | 78 | return irq; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| @@ -82,7 +82,7 @@ static void i8259_mask_and_ack_irq(unsigned int irq_nr) | |||
| 82 | { | 82 | { |
| 83 | unsigned long flags; | 83 | unsigned long flags; |
| 84 | 84 | ||
| 85 | spin_lock_irqsave(&i8259_lock, flags); | 85 | raw_spin_lock_irqsave(&i8259_lock, flags); |
| 86 | if (irq_nr > 7) { | 86 | if (irq_nr > 7) { |
| 87 | cached_A1 |= 1 << (irq_nr-8); | 87 | cached_A1 |= 1 << (irq_nr-8); |
| 88 | inb(0xA1); /* DUMMY */ | 88 | inb(0xA1); /* DUMMY */ |
| @@ -95,7 +95,7 @@ static void i8259_mask_and_ack_irq(unsigned int irq_nr) | |||
| 95 | outb(cached_21, 0x21); | 95 | outb(cached_21, 0x21); |
| 96 | outb(0x20, 0x20); /* Non-specific EOI */ | 96 | outb(0x20, 0x20); /* Non-specific EOI */ |
| 97 | } | 97 | } |
| 98 | spin_unlock_irqrestore(&i8259_lock, flags); | 98 | raw_spin_unlock_irqrestore(&i8259_lock, flags); |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | static void i8259_set_irq_mask(int irq_nr) | 101 | static void i8259_set_irq_mask(int irq_nr) |
| @@ -110,13 +110,13 @@ static void i8259_mask_irq(unsigned int irq_nr) | |||
| 110 | 110 | ||
| 111 | pr_debug("i8259_mask_irq(%d)\n", irq_nr); | 111 | pr_debug("i8259_mask_irq(%d)\n", irq_nr); |
| 112 | 112 | ||
| 113 | spin_lock_irqsave(&i8259_lock, flags); | 113 | raw_spin_lock_irqsave(&i8259_lock, flags); |
| 114 | if (irq_nr < 8) | 114 | if (irq_nr < 8) |
| 115 | cached_21 |= 1 << irq_nr; | 115 | cached_21 |= 1 << irq_nr; |
| 116 | else | 116 | else |
| 117 | cached_A1 |= 1 << (irq_nr-8); | 117 | cached_A1 |= 1 << (irq_nr-8); |
| 118 | i8259_set_irq_mask(irq_nr); | 118 | i8259_set_irq_mask(irq_nr); |
| 119 | spin_unlock_irqrestore(&i8259_lock, flags); | 119 | raw_spin_unlock_irqrestore(&i8259_lock, flags); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static void i8259_unmask_irq(unsigned int irq_nr) | 122 | static void i8259_unmask_irq(unsigned int irq_nr) |
| @@ -125,13 +125,13 @@ static void i8259_unmask_irq(unsigned int irq_nr) | |||
| 125 | 125 | ||
| 126 | pr_debug("i8259_unmask_irq(%d)\n", irq_nr); | 126 | pr_debug("i8259_unmask_irq(%d)\n", irq_nr); |
| 127 | 127 | ||
| 128 | spin_lock_irqsave(&i8259_lock, flags); | 128 | raw_spin_lock_irqsave(&i8259_lock, flags); |
| 129 | if (irq_nr < 8) | 129 | if (irq_nr < 8) |
| 130 | cached_21 &= ~(1 << irq_nr); | 130 | cached_21 &= ~(1 << irq_nr); |
| 131 | else | 131 | else |
| 132 | cached_A1 &= ~(1 << (irq_nr-8)); | 132 | cached_A1 &= ~(1 << (irq_nr-8)); |
| 133 | i8259_set_irq_mask(irq_nr); | 133 | i8259_set_irq_mask(irq_nr); |
| 134 | spin_unlock_irqrestore(&i8259_lock, flags); | 134 | raw_spin_unlock_irqrestore(&i8259_lock, flags); |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | static struct irq_chip i8259_pic = { | 137 | static struct irq_chip i8259_pic = { |
| @@ -241,7 +241,7 @@ void i8259_init(struct device_node *node, unsigned long intack_addr) | |||
| 241 | unsigned long flags; | 241 | unsigned long flags; |
| 242 | 242 | ||
| 243 | /* initialize the controller */ | 243 | /* initialize the controller */ |
| 244 | spin_lock_irqsave(&i8259_lock, flags); | 244 | raw_spin_lock_irqsave(&i8259_lock, flags); |
| 245 | 245 | ||
| 246 | /* Mask all first */ | 246 | /* Mask all first */ |
| 247 | outb(0xff, 0xA1); | 247 | outb(0xff, 0xA1); |
| @@ -273,7 +273,7 @@ void i8259_init(struct device_node *node, unsigned long intack_addr) | |||
| 273 | outb(cached_A1, 0xA1); | 273 | outb(cached_A1, 0xA1); |
| 274 | outb(cached_21, 0x21); | 274 | outb(cached_21, 0x21); |
| 275 | 275 | ||
| 276 | spin_unlock_irqrestore(&i8259_lock, flags); | 276 | raw_spin_unlock_irqrestore(&i8259_lock, flags); |
| 277 | 277 | ||
| 278 | /* create a legacy host */ | 278 | /* create a legacy host */ |
| 279 | i8259_host = irq_alloc_host(node, IRQ_HOST_MAP_LEGACY, | 279 | i8259_host = irq_alloc_host(node, IRQ_HOST_MAP_LEGACY, |
