diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-08-15 19:59:40 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-09-27 08:37:35 -0400 |
commit | dc41fb43966ae1318fe34a8e5f959924a7c05d81 (patch) | |
tree | 4dbca3a63776353c118877c417d0f9a23d11b61e /arch/mips/sibyte/sb1250/irq.c | |
parent | 73b76c78fdf3a25faecbffb52c925950d46152b6 (diff) |
[MIPS] Fix 32-bit kernel by replacing 64-bit-only code.
dclz() expects its 64-bit argument being passed as a single register
but on 32-bit kernels it'll actually be in a register pair.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/sibyte/sb1250/irq.c')
-rw-r--r-- | arch/mips/sibyte/sb1250/irq.c | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c index 1de71adec6c6..a451b4c7732d 100644 --- a/arch/mips/sibyte/sb1250/irq.c +++ b/arch/mips/sibyte/sb1250/irq.c | |||
@@ -419,21 +419,6 @@ static void sb1250_kgdb_interrupt(struct pt_regs *regs) | |||
419 | 419 | ||
420 | #endif /* CONFIG_KGDB */ | 420 | #endif /* CONFIG_KGDB */ |
421 | 421 | ||
422 | static inline int dclz(unsigned long long x) | ||
423 | { | ||
424 | int lz; | ||
425 | |||
426 | __asm__ ( | ||
427 | " .set push \n" | ||
428 | " .set mips64 \n" | ||
429 | " dclz %0, %1 \n" | ||
430 | " .set pop \n" | ||
431 | : "=r" (lz) | ||
432 | : "r" (x)); | ||
433 | |||
434 | return lz; | ||
435 | } | ||
436 | |||
437 | extern void sb1250_timer_interrupt(struct pt_regs *regs); | 422 | extern void sb1250_timer_interrupt(struct pt_regs *regs); |
438 | extern void sb1250_mailbox_interrupt(struct pt_regs *regs); | 423 | extern void sb1250_mailbox_interrupt(struct pt_regs *regs); |
439 | extern void sb1250_kgdb_interrupt(struct pt_regs *regs); | 424 | extern void sb1250_kgdb_interrupt(struct pt_regs *regs); |
@@ -490,6 +475,6 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) | |||
490 | mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), | 475 | mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), |
491 | R_IMR_INTERRUPT_STATUS_BASE))); | 476 | R_IMR_INTERRUPT_STATUS_BASE))); |
492 | if (mask) | 477 | if (mask) |
493 | do_IRQ(63 - dclz(mask), regs); | 478 | do_IRQ(fls64(mask) - 1, regs); |
494 | } | 479 | } |
495 | } | 480 | } |