[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250902091759.590664-1-wangjinchao600@gmail.com>
Date: Tue, 2 Sep 2025 17:17:54 +0800
From: Jinchao Wang <wangjinchao600@...il.com>
To: Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>,
Ian Rogers <irogers@...gle.com>,
Adrian Hunter <adrian.hunter@...el.com>,
"Liang, Kan" <kan.liang@...ux.intel.com>,
linux-perf-users@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
Jinchao Wang <wangjinchao600@...il.com>
Subject: [PATCH] perf/HWBP: Optimize __modify_bp_slot() handling
Skip unnecessary release/reserve when old and new types share the same
slot.
Reserve the new slot first, then release the old one to maintain
consistency and avoid transient failures.
Signed-off-by: Jinchao Wang <wangjinchao600@...il.com>
---
kernel/events/hw_breakpoint.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index 8ec2cb688903..1cc9cb32ceb4 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -625,23 +625,20 @@ void release_bp_slot(struct perf_event *bp)
static int __modify_bp_slot(struct perf_event *bp, u64 old_type, u64 new_type)
{
int err;
+ enum bp_type_idx old_type_idx, new_type_idx;
- __release_bp_slot(bp, old_type);
+ old_type_idx = find_slot_idx(old_type);
+ new_type_idx = find_slot_idx(new_type);
+ if (old_type_idx == new_type_idx)
+ return 0;
err = __reserve_bp_slot(bp, new_type);
- if (err) {
- /*
- * Reserve the old_type slot back in case
- * there's no space for the new type.
- *
- * This must succeed, because we just released
- * the old_type slot in the __release_bp_slot
- * call above. If not, something is broken.
- */
- WARN_ON(__reserve_bp_slot(bp, old_type));
- }
+ if (err)
+ return err;
- return err;
+ __release_bp_slot(bp, old_type);
+
+ return 0;
}
static int modify_bp_slot(struct perf_event *bp, u64 old_type, u64 new_type)
--
2.43.0
Powered by blists - more mailing lists