Re: [PATCH v4 29/39] unwind_user/deferred: Add unwind cache

Peter Zijlstra <[email protected]>
Newsgroups org.kernel.vger.linux-toolchains,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-trace-kernel
Message-ID <[email protected]>
On Wed, Jan 22, 2025 at 02:36:25PM -0800, Josh Poimboeuf wrote:
> On Wed, Jan 22, 2025 at 02:57:00PM +0100, Peter Zijlstra wrote:
> > On Tue, Jan 21, 2025 at 06:31:21PM -0800, Josh Poimboeuf wrote:
> > > Cache the results of the unwind to ensure the unwind is only performed
> > > once, even when called by multiple tracers.
> > > 
> > > Signed-off-by: Josh Poimboeuf <[email protected]>
> > > ---
> > >  include/linux/unwind_deferred_types.h |  8 +++++++-
> > >  kernel/unwind/deferred.c              | 26 ++++++++++++++++++++------
> > >  2 files changed, 27 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/include/linux/unwind_deferred_types.h b/include/linux/unwind_deferred_types.h
> > > index 9749824aea09..6f71a06329fb 100644
> > > --- a/include/linux/unwind_deferred_types.h
> > > +++ b/include/linux/unwind_deferred_types.h
> > > @@ -2,8 +2,14 @@
> > >  #ifndef _LINUX_UNWIND_USER_DEFERRED_TYPES_H
> > >  #define _LINUX_UNWIND_USER_DEFERRED_TYPES_H
> > >  
> > > -struct unwind_task_info {
> > > +struct unwind_cache {
> > >  	unsigned long		*entries;
> > > +	unsigned int		nr_entries;
> > > +	u64			cookie;
> > > +};
> > 
> > If you make the return to user path clear nr_entries you don't need a
> > second cookie field I think.
> 
> But if the NMI happens late in the exit-to-user path, with IRQs
> disabled, right before nr_entries gets cleared, the cache won't get
> used in the task work.
> 
> However I think we can clear it on entry-from-user.

Return to user runs with interrupts disabled, if an NMI hits that, it
will have to set TIF_NOTIFY_RESUME again and queue the IRQ work thing.
That self-IPI will hit the moment we do IRET (which is what re-enables
interrupts) and we're going back into the kernel.

Anyway, I suppose that is a long way of saying that you should be able
to do this on return to user.

But yes, enter-from-user should work too.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.