On Thu, Oct 14, 2021 at 07:03:07PM +0100, Mark Rutland wrote: > On Fri, Oct 08, 2021 at 03:45:59PM +0200, Peter Zijlstra wrote: > > On Fri, Oct 08, 2021 at 01:40:52PM +0100, Mark Rutland wrote: > > > [Adding Josh, since there might be a concern here from a livepatch pov] > > > > > > > > > +static unsigned long __get_wchan(struct task_struct *p) > > > > +{ > > > > + unsigned long entry = 0; > > > > + > > > > + stack_trace_save_tsk(p, &entry, 1, 0); > > > > > > This assumes stack_trace_save_tsk() will skip sched functions, but I > > > don't think that's ever been a requirement? It's certinaly not > > > documented anywhere that I could find, and arm64 doesn't do so today, > > > and this patch causes wchan to just log `__switch_to` for everything. > > > > Confused, arm64 has arch_stack_walk() and should thus use > > kernel/stacktrace.c's stack_trace_consume_entry_nosched. > > Looking at this arm64's *current* get_wchan() unwinds once before > checking in_sched_functions(), so it skips __switch_to(). As of this > patch, we check in_sched_functions() first, which stops the unwind > immediately as __switch_to() isn't marked as __sched. > > I think x86 gets away with this because switch_to() is asm, and that > tail-calls __switch_to() when returning. > > Does switch_to() and below need to be marked __sched? Yes, I would think so, for arches where they otherwise show up on the stacktrace. -- Josh