lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20201030162248.58e388f0@oasis.local.home> Date: Fri, 30 Oct 2020 16:22:48 -0400 From: Steven Rostedt <rostedt@...dmis.org> To: Jesper Dangaard Brouer <brouer@...hat.com> Cc: Peter Zijlstra <peterz@...radead.org>, mingo@...nel.org, tglx@...utronix.de, linux-kernel@...r.kernel.org, kan.liang@...ux.intel.com, acme@...nel.org, mark.rutland@....com, alexander.shishkin@...ux.intel.com, jolsa@...hat.com, namhyung@...nel.org, ak@...ux.intel.com, eranian@...gle.com Subject: Re: [PATCH 4/6] perf: Optimize get_recursion_context() On Fri, 30 Oct 2020 18:11:38 +0100 Jesper Dangaard Brouer <brouer@...hat.com> wrote: > On Fri, 30 Oct 2020 16:13:49 +0100 > Peter Zijlstra <peterz@...radead.org> wrote: > > > "Look ma, no branches!" > > > > Cc: Jesper Dangaard Brouer <brouer@...hat.com> > > Cc: Steven Rostedt <rostedt@...dmis.org> > > Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org> > > --- > > Cool trick! :-) > > Acked-by: Jesper Dangaard Brouer <brouer@...hat.com> > > > 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; > > > > As this is something that ftrace recursion also does, perhaps we should move this into interrupt.h so that anyone that needs a counter can get it quickly, and not keep re-implementing it. /* * Quickly find what context you are in. * 0 - normal * 1 - softirq * 2 - hard interrupt * 3 - NMI */ static inline int irq_context() { unsigned int pc = preempt_count(); int rctx = 0; if (pc & (NMI_MASK)) rctx++; if (pc & (NMI_MASK | HARDIRQ_MASK)) rctx++; if (pc & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET)) rctx++; return rctx; } -- Steve
Powered by blists - more mailing lists