On Fri, Jun 14, 2019 at 09:41:37AM +0200, Peter Zijlstra wrote: > On Thu, Jun 13, 2019 at 11:00:09PM -0700, Alexei Starovoitov wrote: > > > There is something wrong with > > commit d15d356887e7 ("perf/x86: Make perf callchains work without > > CONFIG_FRAME_POINTER") > > It assumes we can always unwind stack, which is, imo, not a weird thing. > > > If I simply revert it and have CONFIG_UNWINDER_FRAME_POINTER=y > > JITed stacks work just fine, because > > bpf_get_stackid()->get_perf_callchain() > > need to start unwinding before any bpf stuff. > > How does stack unwinding work if we try and unwind from an interrupt > that hits inside a BPF program? That too needs to work properly. > > > After that commit it needs to go through which is a bug on its own. > > imo patch 1 doesn't really fix that issue. > > This we agree on, patch 1 doesn't solve that at all. But we also should > not loose the initial regs->ip value. > > > As far as mangled rbp can we partially undo old > > commit 177366bf7ceb ("bpf: change x86 JITed program stack layout") > > that introduced that rbp adjustment. > > > Going through bpf code is only interesting in case of panics somewhere > > in bpf helpers. Back then we didn't even have ksym of jited code. > > I disagree here, interrupts/NMIs hitting inside BPF should be able to > reliably unwind the entire stack. Back then is irrelevant, these days we > expect a reliable unwind.
Right. Also, JIT code can call into C code, which could a) try to unwind b) call WARN() c) hit a panic d) get preempted by code which does any of the above e) etc > > Anyhow I agree that we need to make the jited frame proper, > > but unwinding need to start before any bpf stuff. > > That's a bigger issue. > > I strongly disagree, we should be able to unwind through bpf. -- Josh