diff options
Diffstat (limited to 'arch/mips/sibyte/sb1250/irq.c')
-rw-r--r-- | arch/mips/sibyte/sb1250/irq.c | 36 |
1 files changed, 2 insertions, 34 deletions
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c index 7659174819c6..500d17e84c09 100644 --- a/arch/mips/sibyte/sb1250/irq.c +++ b/arch/mips/sibyte/sb1250/irq.c | |||
@@ -400,43 +400,11 @@ static void sb1250_kgdb_interrupt(void) | |||
400 | 400 | ||
401 | #endif /* CONFIG_KGDB */ | 401 | #endif /* CONFIG_KGDB */ |
402 | 402 | ||
403 | static inline void sb1250_timer_interrupt(void) | ||
404 | { | ||
405 | int cpu = smp_processor_id(); | ||
406 | int irq = K_INT_TIMER_0 + cpu; | ||
407 | |||
408 | irq_enter(); | ||
409 | kstat_this_cpu.irqs[irq]++; | ||
410 | |||
411 | write_seqlock(&xtime_lock); | ||
412 | |||
413 | /* ACK interrupt */ | ||
414 | ____raw_writeq(M_SCD_TIMER_ENABLE | M_SCD_TIMER_MODE_CONTINUOUS, | ||
415 | IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG))); | ||
416 | |||
417 | /* | ||
418 | * call the generic timer interrupt handling | ||
419 | */ | ||
420 | do_timer(1); | ||
421 | |||
422 | write_sequnlock(&xtime_lock); | ||
423 | |||
424 | /* | ||
425 | * In UP mode, we call local_timer_interrupt() to do profiling | ||
426 | * and process accouting. | ||
427 | * | ||
428 | * In SMP mode, local_timer_interrupt() is invoked by appropriate | ||
429 | * low-level local timer interrupt handler. | ||
430 | */ | ||
431 | local_timer_interrupt(irq); | ||
432 | |||
433 | irq_exit(); | ||
434 | } | ||
435 | |||
436 | extern void sb1250_mailbox_interrupt(void); | 403 | extern void sb1250_mailbox_interrupt(void); |
437 | 404 | ||
438 | asmlinkage void plat_irq_dispatch(void) | 405 | asmlinkage void plat_irq_dispatch(void) |
439 | { | 406 | { |
407 | unsigned int cpu = smp_processor_id(); | ||
440 | unsigned int pending; | 408 | unsigned int pending; |
441 | 409 | ||
442 | /* | 410 | /* |
@@ -454,7 +422,7 @@ asmlinkage void plat_irq_dispatch(void) | |||
454 | if (pending & CAUSEF_IP7) /* CPU performance counter interrupt */ | 422 | if (pending & CAUSEF_IP7) /* CPU performance counter interrupt */ |
455 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); | 423 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); |
456 | else if (pending & CAUSEF_IP4) | 424 | else if (pending & CAUSEF_IP4) |
457 | sb1250_timer_interrupt(); | 425 | do_IRQ(K_INT_TIMER_0 + cpu); /* sb1250_timer_interrupt() */ |
458 | 426 | ||
459 | #ifdef CONFIG_SMP | 427 | #ifdef CONFIG_SMP |
460 | else if (pending & CAUSEF_IP3) | 428 | else if (pending & CAUSEF_IP3) |