Re: [PATCH v3 1/2] nmi_backtrace: Allow excluding an arbitrary CPU

From: Doug Anderson
Date: Fri Aug 04 2023 - 09:57:34 EST


Hi,

On Fri, Aug 4, 2023 at 12:50 AM Michal Hocko <mhocko@xxxxxxxx> wrote:
>
> On Thu 03-08-23 16:07:57, Douglas Anderson wrote:
> > The APIs that allow backtracing across CPUs have always had a way to
> > exclude the current CPU. This convenience means callers didn't need to
> > find a place to allocate a CPU mask just to handle the common case.
> >
> > Let's extend the API to take a CPU ID to exclude instead of just a
> > boolean. This isn't any more complex for the API to handle and allows
> > the hardlockup detector to exclude a different CPU (the one it already
> > did a trace for) without needing to find space for a CPU mask.
> >
> > Arguably, this new API also encourages safer behavior. Specifically if
> > the caller wants to avoid tracing the current CPU (maybe because they
> > already traced the current CPU) this makes it more obvious to the
> > caller that they need to make sure that the current CPU ID can't
> > change.
>
> Yes, this looks like the best way forward.
>
> It would have been slightly safer to modify arch_trigger_cpumask_backtrace
> by switching arguments so that some leftovers are captured easier.

I'm not sure I understand. Oh, you're saying make the prototype of
arch_trigger_cpumask_backtrace() incompatible so that if someone is
directly calling it then it'll be a compile-time error? I guess the
hope is that nobody is calling that directly and they're calling
through the trigger_...() functions.

For now I'm going to leave this alone.


> You also have this leftover
> diff --git a/include/linux/nmi.h b/include/linux/nmi.h
> index 00982b133dc1..9f1743ee2b28 100644
> --- a/include/linux/nmi.h
> +++ b/include/linux/nmi.h
> @@ -190,10 +190,6 @@ static inline bool trigger_all_cpu_backtrace(void)
> {
> return false;
> }
> -static inline bool trigger_allbutself_cpu_backtrace(void)
> -{
> - return false;
> -}

Ah yes. I missed that case. Let me send a quick v4.


> static inline bool trigger_cpumask_backtrace(struct cpumask *mask)
> {
> return false;
>
> > Signed-off-by: Douglas Anderson <dianders@xxxxxxxxxxxx>
>
> Anyway
> Acked-by: Michal Hocko <mhocko@xxxxxxxx>

Thanks!