[PATCH v1 05/17] perf probe-event: Ensure probe event nsinfo is always cleared

Ian Rogers posted 17 patches 1 week, 2 days ago
[PATCH v1 05/17] perf probe-event: Ensure probe event nsinfo is always cleared
Posted by Ian Rogers 1 week, 2 days ago
Move nsinfo__zput from cleanup_perf_probe_events to
clear_perf_probe_event so it is always executed. Clean up
clear_perf_probe_event to not call nsinfo__zput and use the pev
variable to avoid repeated array accesses.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/util/probe-event.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 6ab2eb551b6c..710e4620923e 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2419,6 +2419,7 @@ void clear_perf_probe_event(struct perf_probe_event *pev)
 	}
 	pev->nargs = 0;
 	zfree(&pev->args);
+	nsinfo__zput(pev->nsi);
 }
 
 #define strdup_or_goto(str, label)	\
@@ -3767,12 +3768,11 @@ void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs)
 	/* Loop 3: cleanup and free trace events  */
 	for (i = 0; i < npevs; i++) {
 		pev = &pevs[i];
-		for (j = 0; j < pevs[i].ntevs; j++)
-			clear_probe_trace_event(&pevs[i].tevs[j]);
-		zfree(&pevs[i].tevs);
-		pevs[i].ntevs = 0;
-		nsinfo__zput(pev->nsi);
-		clear_perf_probe_event(&pevs[i]);
+		for (j = 0; j < pev->ntevs; j++)
+			clear_probe_trace_event(&pev->tevs[j]);
+		zfree(&pev->tevs);
+		pev->ntevs = 0;
+		clear_perf_probe_event(pev);
 	}
 }
 
-- 
2.52.0.rc2.455.g230fcf2819-goog
Re: [PATCH v1 05/17] perf probe-event: Ensure probe event nsinfo is always cleared
Posted by Namhyung Kim 5 days, 18 hours ago
On Sat, Nov 22, 2025 at 12:19:17AM -0800, Ian Rogers wrote:
> Move nsinfo__zput from cleanup_perf_probe_events to
> clear_perf_probe_event so it is always executed. Clean up
> clear_perf_probe_event to not call nsinfo__zput and use the pev

Do you mean clear_perf_probe_events?


> variable to avoid repeated array accesses.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/probe-event.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 6ab2eb551b6c..710e4620923e 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -2419,6 +2419,7 @@ void clear_perf_probe_event(struct perf_probe_event *pev)
>  	}
>  	pev->nargs = 0;
>  	zfree(&pev->args);
> +	nsinfo__zput(pev->nsi);

I'm not sure pev->nsi is always set properly.  At least it seems to miss
in the perf_probe_event__copy().

Thanks,
Namhyung


>  }
>  
>  #define strdup_or_goto(str, label)	\
> @@ -3767,12 +3768,11 @@ void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs)
>  	/* Loop 3: cleanup and free trace events  */
>  	for (i = 0; i < npevs; i++) {
>  		pev = &pevs[i];
> -		for (j = 0; j < pevs[i].ntevs; j++)
> -			clear_probe_trace_event(&pevs[i].tevs[j]);
> -		zfree(&pevs[i].tevs);
> -		pevs[i].ntevs = 0;
> -		nsinfo__zput(pev->nsi);
> -		clear_perf_probe_event(&pevs[i]);
> +		for (j = 0; j < pev->ntevs; j++)
> +			clear_probe_trace_event(&pev->tevs[j]);
> +		zfree(&pev->tevs);
> +		pev->ntevs = 0;
> +		clear_perf_probe_event(pev);
>  	}
>  }
>  
> -- 
> 2.52.0.rc2.455.g230fcf2819-goog
>