On Mon, Feb 05, 2024 at 05:09:51PM -0800, Alexei Starovoitov wrote: > On Fri, Feb 2, 2024 at 8:34 AM Anton Protopopov <aspsk@xxxxxxxxxxxxx> wrote: > > > > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > > index 4def3dde35f6..bdd6be718e82 100644 > > --- a/include/linux/bpf.h > > +++ b/include/linux/bpf.h > > @@ -1524,6 +1524,13 @@ struct bpf_prog_aux { > > }; > > /* an array of original indexes for all xlated instructions */ > > u32 *orig_idx; > > + /* for every xlated instruction point to all generated jited > > + * instructions, if allocated > > + */ > > + struct { > > + u32 off; /* local offset in the jitted code */ > > + u32 len; /* the total len of generated jit code */ > > + } *xlated_to_jit; > > Simply put Nack to this approach. > > Patches 2 and 3 add an extreme amount of memory overhead. > > As we discussed during office hours we need a "pointer to insn" concept > aka "index on insn". > The verifier would need to track that such things exist and adjust > indices of insns when patching affects those indices. > > For every static branch there will be one such "pointer to insn". > Different algorithms can be used to keep them correct. > The simplest 'lets iterate over all such pointers and update them' > during patch_insn() may even be ok to start. > > Such "pointer to insn" won't add any memory overhead. > When patch+jit is done all such "pointer to insn" are fixed value. Ok, thanks for looking, this makes sense.