David, let me say first that my understanding of this magic is very limited, please correct me. On 12/16, David Laight wrote: > > It all depends on how hard __replace_page() tries to be atomic. > The page has to change from one backed by the executable to a private > one backed by swap - otherwise you can't write to it. This is what uprobe_write_opcode() does, > But the problems arise when the instruction prefetch unit has read > part of the 5-byte instruction (it might even only read half a cache > line at a time). > I'm not sure how long the pipeline can sit in that state - but I > can do a memory read of a PCIe address that takes ~3000 clocks. > (And a misaligned AVX-512 read is probably eight 8-byte transfers.) > > So I think you need to force an interrupt while the PTE is invalid. > And that need to be simultaneous on all cpu running that process. __replace_page() does ptep_get_and_clear(old_pte) + flush_tlb_page(). That's not enough? > Stopping the process using ptrace would do it. Not an option :/ Oleg.