Prev: pacmcia:yena_socket.c Remove extra #ifdef CONFIG_YENTA_TI
Next: [PATCH 0/4] perf: Tasks and irq exclusion
From: Frederic Weisbecker on 21 May 2010 10:10 This brings the support to compute irq/preempt contexts on top of a a given preempt count offset instead of the current one. This is going to be useful for perf that needs to know the preempt_count() of the context that an event has interrupted. Signed-off-by: Frederic Weisbecker <fweisbec(a)gmail.com> Cc: Ingo Molnar <mingo(a)elte.hu> Cc: Peter Zijlstra <a.p.zijlstra(a)chello.nl> Cc: Arnaldo Carvalho de Melo <acme(a)redhat.com> Cc: Paul Mackerras <paulus(a)samba.org> --- include/linux/hardirq.h | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index d5b3876..0195547 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h @@ -58,6 +58,7 @@ #define SOFTIRQ_MASK (__IRQ_MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT) #define HARDIRQ_MASK (__IRQ_MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT) #define NMI_MASK (__IRQ_MASK(NMI_BITS) << NMI_SHIFT) +#define IRQ_MASK (SOFTIRQ_MASK | HARDIRQ_MASK | NMI_MASK) #define PREEMPT_OFFSET (1UL << PREEMPT_SHIFT) #define SOFTIRQ_OFFSET (1UL << SOFTIRQ_SHIFT) @@ -74,15 +75,23 @@ #error PREEMPT_ACTIVE is too low! #endif -#define hardirq_count() (preempt_count() & HARDIRQ_MASK) -#define softirq_count() (preempt_count() & SOFTIRQ_MASK) -#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK \ - | NMI_MASK)) +#define hardirq_count_offset(offset) ((offset) & HARDIRQ_MASK) +#define softirq_count_offset(offset) ((offset) & SOFTIRQ_MASK) +#define irq_count_offset(offset) ((offset) & IRQ_MASK) + +#define hardirq_count() hardirq_count_offset(preempt_count()) +#define softirq_count() softirq_count_offset(preempt_count()) +#define irq_count() irq_count_offset(preempt_count()) /* * Are we doing bottom half or hardware interrupt processing? * Are we in a softirq context? Interrupt context? */ +#define in_irq_offset(offset) (hardirq_count_offset(offset)) +#define in_softirq_offset(offset) (softirq_count_offset(offset)) +#define in_interrupt_offset(offset) (irq_count_offset(offset)) + + #define in_irq() (hardirq_count()) #define in_softirq() (softirq_count()) #define in_interrupt() (irq_count()) -- 1.6.2.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |