On Mon, Apr 14, 2025 at 1:36 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Adding support to emulate all nop instructions as the original uprobe > instruction. > > This change speeds up uprobe on top of all nop instructions and is a > preparation for usdt probe optimization, that will be done on top of > nop5 instruction. > > With this change the usdt probe on top of nop5 won't take the performance > hit compared to usdt probe on top of standard nop instruction. > > Suggested-by: Oleg Nesterov <oleg@xxxxxxxxxx> > Suggested-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > v3 changes: > - use insn->length as index to x86_nops [Andrii] > > arch/x86/kernel/uprobes.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c > index 9194695662b2..6d383839e839 100644 > --- a/arch/x86/kernel/uprobes.c > +++ b/arch/x86/kernel/uprobes.c > @@ -840,6 +840,11 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn) > insn_byte_t p; > int i; > > + /* x86_nops[insn->length]; same as jmp with .offs = 0 */ > + if (insn->length <= ASM_NOP_MAX && > + !memcmp(insn->kaddr, x86_nops[insn->length], insn->length)) > + goto setup; > + LGTM, thanks! Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > switch (opc1) { > case 0xeb: /* jmp 8 */ > case 0xe9: /* jmp 32 */ > -- > 2.49.0 >