On Thu, Oct 21, 2021 at 4:38 PM Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote: > > On Thu, Oct 21, 2021 at 04:24:33PM -0700, Alexei Starovoitov wrote: > > On Thu, Oct 21, 2021 at 3:40 PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > > > On Thu, Oct 21, 2021 at 11:03:33AM -0700, Alexei Starovoitov wrote: > > > > > > > > I nicked it from emit_bpf_tail_call() in the 32bit jit :-) It seemed a > > > > > lot more robust than the 64bit one and I couldn't figure out why the > > > > > difference. > > > > > > > > Interesting. Daniel will recognize that trick then :) > > > > > > > > Is there concurrency on the jit? > > > > > > > > The JIT of different progs can happen in parallel. > > > > > > In that case I don't think the patch is safe. I'll see if I can find a > > > variant that doesn't use static storage. > > > > The variable can only change from one fixed value to another fixed value. > > Different threads will compute the same value. So I think it's safe > > as-is. READ_ONCE/WRITE_ONCE won't hurt though. > > But the size of the generated code differs based on the > emit_bpf_tail_call_indirect() args: 'callee_regs_used' and > 'stack_depth'. So the fixed value can change. Ahh. Right. It's potentially a different offset for every prog. Let's put it into struct jit_context then.