"Look ma, no branches!"

Cc: Jesper Dangaard Brouer <bro...@redhat.com>
Cc: Steven Rostedt <rost...@goodmis.org>
Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
---
 kernel/events/internal.h |   17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

--- a/kernel/events/internal.h
+++ b/kernel/events/internal.h
@@ -205,16 +205,15 @@ DEFINE_OUTPUT_COPY(__output_copy_user, a
 
 static inline int get_recursion_context(int *recursion)
 {
-       int rctx;
+       unsigned int pc = preempt_count();
+       unsigned int rctx = 0;
 
-       if (unlikely(in_nmi()))
-               rctx = 3;
-       else if (in_irq())
-               rctx = 2;
-       else if (in_serving_softirq())
-               rctx = 1;
-       else
-               rctx = 0;
+       if (pc & (NMI_MASK))
+               rctx++;
+       if (pc & (NMI_MASK | HARDIRQ_MASK))
+               rctx++;
+       if (pc & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET))
+               rctx++;
 
        if (recursion[rctx])
                return -1;


Reply via email to