On 12/15, David Laight wrote: > > From: Jiri Olsa > > The optimized uprobe path > > > > - checks the original instruction is 5-byte nop (plus other checks) > > - adds (or uses existing) user space trampoline and overwrites original > > instruction (5-byte nop) with call to user space trampoline > > - the user space trampoline executes uprobe syscall that calls related uprobe > > consumers > > - trampoline returns back to next instruction > ... > > How on earth can you safely overwrite a randomly aligned 5 byte instruction > that might be being prefetched and executed by another thread of the > same process. uprobe_write_opcode() doesn't overwrite the instruction in place. It creates the new page with the same content, overwrites the probed insn in that page, then calls __replace_page(). Oleg.