summaryrefslogtreecommitdiff
path: root/arch/x86/include/asm/insn-eval.h
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2025-09-05 10:24:47 +0200
committerPeter Zijlstra <peterz@infradead.org>2025-10-16 11:13:47 +0200
commit8a5c6cbfe4a35c6a22d2f8bbaf49b8cc3f45fcc6 (patch)
tree0d963feafee2ea519b5cb4558c6c42fda1270e13 /arch/x86/include/asm/insn-eval.h
parent866cf36bfee4fba6a492d2dcc5133f857e3446b0 (diff)
x86/insn,uprobes,alternative: Unify insn_is_nop()
Both uprobes and alternatives have insn_is_nop() variants, unify them and make sure insn_is_nop() works for both x86_64 and i386. Specifically, uprobe must not compare userspace instructions to kernel nops as that does not work right in the compat case. For the uprobe case we therefore must recognise common 32bit and 64bit nops. Because uprobe will consume the instruction as a nop, it must not mistakenly claim a non-nop instruction to be a nop. Eg. 'REX.b3 NOP' is 'xchg %r8,%rax' - not a nop. For the kernel case similar constraints apply, is it used to optimize NOPs by replacing strings of short(er) nops with longer nops. Must not claim an instruction is a nop if it really isn't. Not recognising a nop is non-fatal. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Diffstat (limited to 'arch/x86/include/asm/insn-eval.h')
-rw-r--r--arch/x86/include/asm/insn-eval.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/include/asm/insn-eval.h b/arch/x86/include/asm/insn-eval.h
index 54368a43abf6..4733e9064ee5 100644
--- a/arch/x86/include/asm/insn-eval.h
+++ b/arch/x86/include/asm/insn-eval.h
@@ -44,4 +44,6 @@ enum insn_mmio_type {
enum insn_mmio_type insn_decode_mmio(struct insn *insn, int *bytes);
+bool insn_is_nop(struct insn *insn);
+
#endif /* _ASM_X86_INSN_EVAL_H */