aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDavid Daney <ddaney@caviumnetworks.com>2009-10-13 11:52:28 -0400
committerRalf Baechle <ralf@linux-mips.org>2009-11-02 06:00:07 -0500
commitb6b74d5490c3ad88de503e0c5d44e4820b79b678 (patch)
treeffecd6d14608dc446cab28bc4d798bba92146de3 /arch
parent0db2b74e9150651a25ffd2e2285575ce193f763c (diff)
MIPS: Octeon: Use write_{un,}lock_irq{restore,save} to set irq affinity
Since the locks are used from interrupt context we need the irqsave/irqrestore versions of the locking functions. Signed-off-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/cavium-octeon/octeon-irq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
index 384f1842bfb1..0bda5c5db150 100644
--- a/arch/mips/cavium-octeon/octeon-irq.c
+++ b/arch/mips/cavium-octeon/octeon-irq.c
@@ -182,9 +182,10 @@ static void octeon_irq_ciu0_disable(unsigned int irq)
182static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest) 182static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest)
183{ 183{
184 int cpu; 184 int cpu;
185 unsigned long flags;
185 int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ 186 int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
186 187
187 write_lock(&octeon_irq_ciu0_rwlock); 188 write_lock_irqsave(&octeon_irq_ciu0_rwlock, flags);
188 for_each_online_cpu(cpu) { 189 for_each_online_cpu(cpu) {
189 int coreid = cpu_logical_map(cpu); 190 int coreid = cpu_logical_map(cpu);
190 uint64_t en0 = 191 uint64_t en0 =
@@ -200,7 +201,7 @@ static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *
200 * of them are done. 201 * of them are done.
201 */ 202 */
202 cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2)); 203 cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2));
203 write_unlock(&octeon_irq_ciu0_rwlock); 204 write_unlock_irqrestore(&octeon_irq_ciu0_rwlock, flags);
204 205
205 return 0; 206 return 0;
206} 207}
@@ -299,9 +300,10 @@ static void octeon_irq_ciu1_disable(unsigned int irq)
299static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *dest) 300static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *dest)
300{ 301{
301 int cpu; 302 int cpu;
303 unsigned long flags;
302 int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ 304 int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
303 305
304 write_lock(&octeon_irq_ciu1_rwlock); 306 write_lock_irqsave(&octeon_irq_ciu1_rwlock, flags);
305 for_each_online_cpu(cpu) { 307 for_each_online_cpu(cpu) {
306 int coreid = cpu_logical_map(cpu); 308 int coreid = cpu_logical_map(cpu);
307 uint64_t en1 = 309 uint64_t en1 =
@@ -318,7 +320,7 @@ static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *
318 * of them are done. 320 * of them are done.
319 */ 321 */
320 cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1)); 322 cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1));
321 write_unlock(&octeon_irq_ciu1_rwlock); 323 write_unlock_irqrestore(&octeon_irq_ciu1_rwlock, flags);
322 324
323 return 0; 325 return 0;
324} 326}