diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-03-29 20:30:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-03-29 20:30:12 -0700 |
commit | ce20269d1e97030afa476e12b99d2437e748d225 (patch) | |
tree | 644d9962049b4d73ff85e17562e383a57c8ce1fa /include/asm-mips/irqflags.h | |
parent | 9754c5f6cbbd8893a29f139204e87a59eb342ca9 (diff) | |
parent | 8a1e97ee2e025f116765c92409a3cf8f6cb07ad6 (diff) | |
download | talos-op-linux-ce20269d1e97030afa476e12b99d2437e748d225.tar.gz talos-op-linux-ce20269d1e97030afa476e12b99d2437e748d225.zip |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
[MIPS] SMTC: Fix recursion in instant IPI replay code.
[MIPS] BCM1480: Fix setting of irq affinity.
[MIPS] do_page_fault() needs to use raw_smp_processor_id().
[MIPS] SMTC: Fix false trigger of debug code on single VPE.
[MIPS] SMTC: irq_{enter,leave} and kstats keeping for relayed timer ints.
[MIPS] lockdep: Deal with interrupt disable hazard in TRACE_IRQFLAGS
[MIPS] lockdep: Handle interrupts in R3000 style c0_status register.
[MIPS] MV64340: Add missing prototype for mv64340_irq_init().
[MIPS] MT: MIPS_MT_SMTC_INSTANT_REPLAY currently conflicts with PREEMPT.
[MIPS] EV64120: Include <asm/irq.h> to fix warning.
[MIPS] Ocelot: Fix warning.
[MIPS] Ocelot: Give PMON_v1_setup a proper prototype.
Diffstat (limited to 'include/asm-mips/irqflags.h')
-rw-r--r-- | include/asm-mips/irqflags.h | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/include/asm-mips/irqflags.h b/include/asm-mips/irqflags.h index af3b07dfad4b..e459fa05db83 100644 --- a/include/asm-mips/irqflags.h +++ b/include/asm-mips/irqflags.h @@ -13,29 +13,9 @@ #ifndef __ASSEMBLY__ +#include <linux/compiler.h> #include <asm/hazards.h> -/* - * CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY does prompt replay of deferred IPIs, - * at the cost of branch and call overhead on each local_irq_restore() - */ - -#ifdef CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY - -extern void smtc_ipi_replay(void); - -#define irq_restore_epilog(flags) \ -do { \ - if (!(flags & 0x0400)) \ - smtc_ipi_replay(); \ -} while (0) - -#else - -#define irq_restore_epilog(ignore) do { } while (0) - -#endif /* CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY */ - __asm__ ( " .macro raw_local_irq_enable \n" " .set push \n" @@ -205,17 +185,28 @@ __asm__ ( " .set pop \n" " .endm \n"); -#define raw_local_irq_restore(flags) \ -do { \ - unsigned long __tmp1; \ - \ - __asm__ __volatile__( \ - "raw_local_irq_restore\t%0" \ - : "=r" (__tmp1) \ - : "0" (flags) \ - : "memory"); \ - irq_restore_epilog(flags); \ -} while(0) +extern void smtc_ipi_replay(void); + +static inline void raw_local_irq_restore(unsigned long flags) +{ + unsigned long __tmp1; + +#ifdef CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY + /* + * CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY does prompt replay of deferred + * IPIs, at the cost of branch and call overhead on each + * local_irq_restore() + */ + if (unlikely(!(flags & 0x0400))) + smtc_ipi_replay(); +#endif + + __asm__ __volatile__( + "raw_local_irq_restore\t%0" + : "=r" (__tmp1) + : "0" (flags) + : "memory"); +} static inline int raw_irqs_disabled_flags(unsigned long flags) { |