Messages in this thread Patch in this message | | | Date | Tue, 10 Nov 2020 12:45:21 -0000 | From | "tip-bot2 for Peter Zijlstra" <> | Subject | [tip: perf/urgent] perf: Optimize get_recursion_context() |
| |
The following commit has been merged into the perf/urgent branch of tip:
Commit-ID: 09da9c81253dd8e43e0d2d7cea02de6f9f19499d Gitweb: https://git.kernel.org/tip/09da9c81253dd8e43e0d2d7cea02de6f9f19499d Author: Peter Zijlstra <peterz@infradead.org> AuthorDate: Fri, 30 Oct 2020 13:43:16 +01:00 Committer: Peter Zijlstra <peterz@infradead.org> CommitterDate: Mon, 09 Nov 2020 18:12:34 +01:00
perf: Optimize get_recursion_context()
"Look ma, no branches!"
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Link: https://lkml.kernel.org/r/20201030151955.187580298@infradead.org --- kernel/events/internal.h | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/kernel/events/internal.h b/kernel/events/internal.h index 402054e..228801e 100644 --- a/kernel/events/internal.h +++ b/kernel/events/internal.h @@ -205,16 +205,12 @@ DEFINE_OUTPUT_COPY(__output_copy_user, arch_perf_out_copy_user) static inline int get_recursion_context(int *recursion) { - int rctx; - - if (unlikely(in_nmi())) - rctx = 3; - else if (in_irq()) - rctx = 2; - else if (in_serving_softirq()) - rctx = 1; - else - rctx = 0; + unsigned int pc = preempt_count(); + unsigned char rctx = 0; + + rctx += !!(pc & (NMI_MASK)); + rctx += !!(pc & (NMI_MASK | HARDIRQ_MASK)); + rctx += !!(pc & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET)); if (recursion[rctx]) return -1;
| |