diff options
author | Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 2009-05-04 17:51:54 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2009-05-14 08:50:30 -0400 |
commit | 5d81b83d03eb32085c569854695e102dde7af544 (patch) | |
tree | 41e779fb5912293fefaa73207a46a57956e0affb | |
parent | a6d5ff04e83b36e0d5c2c50ef4d18e9f38b5abc2 (diff) |
MIPS: Sibyte: Fix locking in set_irq_affinity
Locking of irq_desc is now done in irq_set_affinity; don't lock it again
in chip specific set_affinity function.
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/sibyte/bcm1480/irq.c | 7 | ||||
-rw-r--r-- | arch/mips/sibyte/sb1250/irq.c | 7 |
2 files changed, 4 insertions, 10 deletions
diff --git a/arch/mips/sibyte/bcm1480/irq.c b/arch/mips/sibyte/bcm1480/irq.c index 352352b3cb2f..c147c4b35d3f 100644 --- a/arch/mips/sibyte/bcm1480/irq.c +++ b/arch/mips/sibyte/bcm1480/irq.c | |||
@@ -113,7 +113,6 @@ static void bcm1480_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
113 | { | 113 | { |
114 | int i = 0, old_cpu, cpu, int_on, k; | 114 | int i = 0, old_cpu, cpu, int_on, k; |
115 | u64 cur_ints; | 115 | u64 cur_ints; |
116 | struct irq_desc *desc = irq_desc + irq; | ||
117 | unsigned long flags; | 116 | unsigned long flags; |
118 | unsigned int irq_dirty; | 117 | unsigned int irq_dirty; |
119 | 118 | ||
@@ -127,8 +126,7 @@ static void bcm1480_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
127 | cpu = cpu_logical_map(i); | 126 | cpu = cpu_logical_map(i); |
128 | 127 | ||
129 | /* Protect against other affinity changers and IMR manipulation */ | 128 | /* Protect against other affinity changers and IMR manipulation */ |
130 | spin_lock_irqsave(&desc->lock, flags); | 129 | spin_lock_irqsave(&bcm1480_imr_lock, flags); |
131 | spin_lock(&bcm1480_imr_lock); | ||
132 | 130 | ||
133 | /* Swizzle each CPU's IMR (but leave the IP selection alone) */ | 131 | /* Swizzle each CPU's IMR (but leave the IP selection alone) */ |
134 | old_cpu = bcm1480_irq_owner[irq]; | 132 | old_cpu = bcm1480_irq_owner[irq]; |
@@ -153,8 +151,7 @@ static void bcm1480_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
153 | ____raw_writeq(cur_ints, IOADDR(A_BCM1480_IMR_MAPPER(cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING))); | 151 | ____raw_writeq(cur_ints, IOADDR(A_BCM1480_IMR_MAPPER(cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING))); |
154 | } | 152 | } |
155 | } | 153 | } |
156 | spin_unlock(&bcm1480_imr_lock); | 154 | spin_unlock_irqrestore(&bcm1480_imr_lock, flags); |
157 | spin_unlock_irqrestore(&desc->lock, flags); | ||
158 | } | 155 | } |
159 | #endif | 156 | #endif |
160 | 157 | ||
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c index c08ff582da6f..38cb998ade22 100644 --- a/arch/mips/sibyte/sb1250/irq.c +++ b/arch/mips/sibyte/sb1250/irq.c | |||
@@ -107,7 +107,6 @@ static void sb1250_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
107 | { | 107 | { |
108 | int i = 0, old_cpu, cpu, int_on; | 108 | int i = 0, old_cpu, cpu, int_on; |
109 | u64 cur_ints; | 109 | u64 cur_ints; |
110 | struct irq_desc *desc = irq_desc + irq; | ||
111 | unsigned long flags; | 110 | unsigned long flags; |
112 | 111 | ||
113 | i = cpumask_first(mask); | 112 | i = cpumask_first(mask); |
@@ -121,8 +120,7 @@ static void sb1250_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
121 | cpu = cpu_logical_map(i); | 120 | cpu = cpu_logical_map(i); |
122 | 121 | ||
123 | /* Protect against other affinity changers and IMR manipulation */ | 122 | /* Protect against other affinity changers and IMR manipulation */ |
124 | spin_lock_irqsave(&desc->lock, flags); | 123 | spin_lock_irqsave(&sb1250_imr_lock, flags); |
125 | spin_lock(&sb1250_imr_lock); | ||
126 | 124 | ||
127 | /* Swizzle each CPU's IMR (but leave the IP selection alone) */ | 125 | /* Swizzle each CPU's IMR (but leave the IP selection alone) */ |
128 | old_cpu = sb1250_irq_owner[irq]; | 126 | old_cpu = sb1250_irq_owner[irq]; |
@@ -144,8 +142,7 @@ static void sb1250_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
144 | ____raw_writeq(cur_ints, IOADDR(A_IMR_MAPPER(cpu) + | 142 | ____raw_writeq(cur_ints, IOADDR(A_IMR_MAPPER(cpu) + |
145 | R_IMR_INTERRUPT_MASK)); | 143 | R_IMR_INTERRUPT_MASK)); |
146 | } | 144 | } |
147 | spin_unlock(&sb1250_imr_lock); | 145 | spin_unlock_irqrestore(&sb1250_imr_lock, flags); |
148 | spin_unlock_irqrestore(&desc->lock, flags); | ||
149 | } | 146 | } |
150 | #endif | 147 | #endif |
151 | 148 | ||