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? Thanks, Mark.