diff options
author | Paul Mackerras <paulus@samba.org> | 2007-02-08 07:03:11 +0300 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-02-08 07:03:11 +0300 |
commit | d5112a4f31a361409d3c57dc9d58dd69f8014bef (patch) | |
tree | 64771300b2191cb94d9aaf60355661a01c2ccd1a /include/asm-mips/irqflags.h | |
parent | 12e86f92fcfe4f0bcab0ad7fa4088a64c60d9b38 (diff) | |
parent | 5fad293bcbd48d9a2370020cf60e4b4a42559b12 (diff) | |
download | linux-d5112a4f31a361409d3c57dc9d58dd69f8014bef.tar.xz |
Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc into for-2.6.21
Diffstat (limited to 'include/asm-mips/irqflags.h')
-rw-r--r-- | include/asm-mips/irqflags.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/asm-mips/irqflags.h b/include/asm-mips/irqflags.h index 46bf5de5ac72..af3b07dfad4b 100644 --- a/include/asm-mips/irqflags.h +++ b/include/asm-mips/irqflags.h @@ -15,6 +15,27 @@ #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" @@ -193,6 +214,7 @@ do { \ : "=r" (__tmp1) \ : "0" (flags) \ : "memory"); \ + irq_restore_epilog(flags); \ } while(0) static inline int raw_irqs_disabled_flags(unsigned long flags) |