aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>2009-05-04 17:51:54 -0400
committerRalf Baechle <ralf@linux-mips.org>2009-05-14 08:50:30 -0400
commit5d81b83d03eb32085c569854695e102dde7af544 (patch)
tree41e779fb5912293fefaa73207a46a57956e0affb
parenta6d5ff04e83b36e0d5c2c50ef4d18e9f38b5abc2 (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.c7
-rw-r--r--arch/mips/sibyte/sb1250/irq.c7
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