On Fri, 12 Sep 2025 18:11:12 +0800 Jinchao Wang <wangjinchao600@xxxxxxxxx> wrote: > The new arch_reinstall_hw_breakpoint() function can be used in an > atomic context, unlike the more expensive free and re-allocation path. > This allows callers to efficiently re-establish an existing breakpoint. > Looks good to me. Reviewed-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> Thanks! > Signed-off-by: Jinchao Wang <wangjinchao600@xxxxxxxxx> > --- > arch/x86/include/asm/hw_breakpoint.h | 2 ++ > arch/x86/kernel/hw_breakpoint.c | 9 +++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/arch/x86/include/asm/hw_breakpoint.h b/arch/x86/include/asm/hw_breakpoint.h > index aa6adac6c3a2..c22cc4e87fc5 100644 > --- a/arch/x86/include/asm/hw_breakpoint.h > +++ b/arch/x86/include/asm/hw_breakpoint.h > @@ -21,6 +21,7 @@ struct arch_hw_breakpoint { > > enum bp_slot_action { > BP_SLOT_ACTION_INSTALL, > + BP_SLOT_ACTION_REINSTALL, > BP_SLOT_ACTION_UNINSTALL, > }; > > @@ -65,6 +66,7 @@ extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused, > > > int arch_install_hw_breakpoint(struct perf_event *bp); > +int arch_reinstall_hw_breakpoint(struct perf_event *bp); > void arch_uninstall_hw_breakpoint(struct perf_event *bp); > void hw_breakpoint_pmu_read(struct perf_event *bp); > void hw_breakpoint_pmu_unthrottle(struct perf_event *bp); > diff --git a/arch/x86/kernel/hw_breakpoint.c b/arch/x86/kernel/hw_breakpoint.c > index 3658ace4bd8d..29c9369264d4 100644 > --- a/arch/x86/kernel/hw_breakpoint.c > +++ b/arch/x86/kernel/hw_breakpoint.c > @@ -99,6 +99,10 @@ static int manage_bp_slot(struct perf_event *bp, enum bp_slot_action action) > old_bp = NULL; > new_bp = bp; > break; > + case BP_SLOT_ACTION_REINSTALL: > + old_bp = bp; > + new_bp = bp; > + break; > case BP_SLOT_ACTION_UNINSTALL: > old_bp = bp; > new_bp = NULL; > @@ -187,6 +191,11 @@ int arch_install_hw_breakpoint(struct perf_event *bp) > return arch_manage_bp(bp, BP_SLOT_ACTION_INSTALL); > } > > +int arch_reinstall_hw_breakpoint(struct perf_event *bp) > +{ > + return arch_manage_bp(bp, BP_SLOT_ACTION_REINSTALL); > +} > + > void arch_uninstall_hw_breakpoint(struct perf_event *bp) > { > arch_manage_bp(bp, BP_SLOT_ACTION_UNINSTALL); > -- > 2.43.0 > > -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>