• Benjamin Gray's avatar
    powerpc/watchpoints: Remove ptrace/perf exclusion tracking · bd29813a
    Benjamin Gray authored
    ptrace and perf watchpoints were considered incompatible in
    commit 29da4f91 ("powerpc/watchpoint: Don't allow concurrent perf
    and ptrace events"), but the logic in that commit doesn't really apply.
    
    Ptrace doesn't automatically single step; the ptracer must request this
    explicitly. And the ptracer can do so regardless of whether a
    ptrace/perf watchpoint triggered or not: it could single step every
    instruction if it wanted to. Whatever stopped the ptracee before
    executing the instruction that would trigger the perf watchpoint is no
    longer relevant by this point.
    
    To get correct behaviour when perf and ptrace are watching the same
    data we must ignore the perf watchpoint. After all, ptrace has
    before-execute semantics, and perf is after-execute, so perf doesn't
    actually care about the watchpoint trigger at this point in time.
    Pausing before execution does not mean we will actually end up executing
    the instruction.
    
    Importantly though, we don't remove the perf watchpoint yet. This is
    key.
    
    The ptracer is free to do whatever it likes right now. E.g., it can
    continue the process, single step. or even set the child PC somewhere
    completely different.
    
    If it does try to execute the instruction though, without reinserting
    the watchpoint (in which case we go back to the start of this example),
    the perf watchpoint would immediately trigger. This time there is no
    ptrace watchpoint, so we can safely perform a single step and increment
    the perf counter. Upon receiving the single step exception, the existing
    code already handles propagating or consuming it based on whether
    another subsystem (e.g. ptrace) requested a single step. Again, this is
    needed with or without perf/ptrace exclusion, because ptrace could be
    single stepping this instruction regardless of if a watchpoint is
    involved.
    Signed-off-by: default avatarBenjamin Gray <bgray@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230801011744.153973-6-bgray@linux.ibm.com
    bd29813a
hw_breakpoint.c 13.7 KB