All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf comm str: Fix perf top coredump due to concurrent read and write
@ 2025-05-19 11:48 Fei Lang
  2025-05-19 22:48 ` Ian Rogers
  0 siblings, 1 reply; 3+ messages in thread
From: Fei Lang @ 2025-05-19 11:48 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung
  Cc: mark.rutland, alexander.shishkin, jolsa, irogers, adrian.hunter,
	kan.liang, james.clark, linux-kernel, hewenliang4, liuchao173,
	laihangliang1

(gdb) bt
    __strcmp_evex () at ../sysdeps/x86_64/multiarch/strcmp-evex.S:314
    sort.comm_collapse () at util/sort.c:202
    hist_entry__collapse at util/hist.c:1312
    hists__collapse_insert_entry at util/hist.c:1620
    hists__collapse_resort at util/hist.c:1704
    perf_top__resort_hists at builtin-top.c:303
    perf_top__print_sym_table at builtin-top.c:350
    display_thread at builtin-top.c:700

Link:https://bugzilla.kernel.org/show_bug.cgi?id=220096

Fixes: <3178f58b9894> ("perf comm str: Avoid sort during insert")
Signed-off-by: Fei Lang <langfei@huawei.com>
---
 tools/perf/util/comm.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
index 8aa456d7c2cd..0438870d31d2 100644
--- a/tools/perf/util/comm.c
+++ b/tools/perf/util/comm.c
@@ -209,13 +209,16 @@ struct comm *comm__new(const char *str, u64 timestamp, bool exec)
 int comm__override(struct comm *comm, const char *str, u64 timestamp, bool exec)
 {
 	struct comm_str *new, *old = comm->comm_str;
+	struct comm_strs *comm_strs = comm_strs__get();
 
 	new = comm_strs__findnew(str);
 	if (!new)
 		return -ENOMEM;
 
+	down_write(&comm_strs->lock);
 	comm_str__put(old);
 	comm->comm_str = new;
+	up_write(&comm_strs->lock);
 	comm->start = timestamp;
 	if (exec)
 		comm->exec = true;
@@ -225,11 +228,22 @@ int comm__override(struct comm *comm, const char *str, u64 timestamp, bool exec)
 
 void comm__free(struct comm *comm)
 {
+	struct comm_strs *comm_strs = comm_strs__get();
+
+	down_write(&comm_strs->lock);
 	comm_str__put(comm->comm_str);
 	free(comm);
+	up_write(&comm_strs->lock);
 }
 
 const char *comm__str(const struct comm *comm)
 {
-	return comm_str__str(comm->comm_str);
+	struct comm_strs *comm_strs = comm_strs__get();
+	char *p;
+
+	down_read(&comm_strs->lock);
+	p = comm_str__str(comm->comm_str);
+	up_read(&comm_strs->lock);
+
+	return p;
 }
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-05-21 18:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-19 11:48 [PATCH] perf comm str: Fix perf top coredump due to concurrent read and write Fei Lang
2025-05-19 22:48 ` Ian Rogers
2025-05-21 18:05   ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.