All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: acme@kernel.org, howardchu95@gmail.com, adrian.hunter@intel.com,
	james.clark@linaro.org, jolsa@kernel.org,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	mingo@redhat.com, peterz@infradead.org
Subject: Re: [PATCH v5 07/23] perf trace: Skip internal tracepoint fields in formatting and beauty map
Date: Wed, 23 Sep 2026 23:44:42 -0700	[thread overview]
Message-ID: <arTG2hd1H2ZH4Nl0@z2> (raw)
In-Reply-To: <4315f435177b66e0b25ca9b74a89cc2f51d3801d.1790145937.git.irogers@google.com>

On Wed, Sep 23, 2026 at 12:13:47AM -0700, Ian Rogers wrote:
> Linux 6.19+ added __data_loc char[] internal fields for string
> arguments in syscalls:sys_enter_<name> tracepoints (e.g.,
> __data_loc_oldname in sys_enter_renameat2). While is_internal_field()
> was added to detect them, several places did not properly account for
> them:
> 
> 1. In syscall_arg_fmt__init_array(), when an internal field was
>    skipped, the arg pointer was still incremented, causing the
>    subsequent argument formatters to be mismatched. Leaving the slot out
>    is only right for syscall tracepoints, where syscall__scnprintf_args()
>    indexes the array the same packed way and sc->nr_args is counted to
>    match. Every other tracepoint reaches the array through
>    trace__fprintf_tp_fields(), which advances the field list and the
>    array in lockstep, and for those a __data_loc char[] is an ordinary
>    dynamic string to be shown rather than something the kernel appended
>    to a syscall behind perf's back. Add a skip_internal argument so that
>    each caller gets the layout it indexes.
> 2. In syscall__scnprintf_args(), internal fields were not skipped,
>    causing spurious trailing arguments like ", 0, 16" to be formatted
>    and printed.
> 3. In trace__bpf_sys_enter_beauty_map(), internal fields were not
>    skipped, offsetting beauty array argument indices and breaking string
>    and buffer augmentation.
> 4. In trace__find_usable_bpf_prog_entry(), candidate pointer checks
>    matched on internal pointer fields, breaking signature compatibility
>    matching between syscalls for augmenter sharing. Introduce
>    next_user_arg() and advance both cursors with it, so that the two
>    argument lists are always compared at a real argument and the walk
>    ends when one syscall runs out of arguments rather than when one
>    happens to have trailing internal fields.
> 5. syscall__augmented_args() computed the augmented payload as
>    sample->raw_size - sc->args_size for any sys_enter style sample.
>    sc->args_size deliberately stops at the last non-internal field, so
>    on 6.19+ a native syscalls:sys_enter_<name> record leaves the
>    __data_loc words and their string payloads in the remainder. Those
>    bytes are not a struct augmented_arg, so
>    syscall_arg__scnprintf_augmented_string() read a bogus length and
>    walked arg->augmented.args out of bounds. This is reachable from
>    trace__event_handler(), which calls trace__fprintf_sys_enter() for
>    any evsel whose tracepoint name starts with "sys_enter_".
> 6. In syscall__read_info(), syscall__alloc_arg_fmts() was called before
>    checking and dropping the leading __syscall_nr (or nr) field, using
>    nr_fields - 1 unconditionally. If a tracepoint format lacks that
>    leading field, the allocated arg_fmt array is one entry too small and
>    syscall_arg_fmt__init_array() writes one entry past the end of the
>    heap buffer. Drop __syscall_nr/nr first and size the allocation from
>    the remaining fields.
> 
> Update these functions to check and skip is_internal_field() so that
> arguments are correctly formatted and beauty map entries match the
> expected syscall signatures, restrict syscall__augmented_args() to the
> __augmented_syscalls__ bpf-output evsel, and size arg_fmt after dropping
> the syscall number field.
> 
> Publish sc->args only once that allocation has succeeded. sc->name is
> set earlier in syscall__read_info(), and a later call takes a syscall
> with a name to have been read already and returns it as it stands, so
> a syscall left with arguments and no arg_fmt to describe them would be
> printed by walking the arguments and indexing an array that was never
> allocated.
> 
> Assisted-by: Antigravity:gemini-3.1-pro
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/builtin-trace.c | 194 ++++++++++++++++++++++++++++---------
>  1 file changed, 148 insertions(+), 46 deletions(-)
> 
> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> index f90c6bb4d8b4..6ffd4a0718ca 100644
> --- a/tools/perf/builtin-trace.c
> +++ b/tools/perf/builtin-trace.c
> @@ -2276,22 +2276,40 @@ static bool field_is_ptr_sized(const struct tep_format_field *field)
>  	return field->size == ptr_size || field->size == sizeof(u64);
>  }
>  
> +/*
> + * @skip_internal: whether an internal field is left out of the array rather
> + * than given a slot of its own.
> + *
> + * Syscall tracepoints want it left out, as syscall__scnprintf_args() walks the
> + * array with an index that skips internal fields too and sc->nr_args is counted
> + * the same way.
> + *
> + * Other tracepoints do not: trace__fprintf_tp_fields() advances the field list
> + * and this array in lockstep, so every field needs a slot or the fields after
> + * an internal one are formatted with the wrong entry. For them a
> + * __data_loc char[] is also an ordinary dynamic string to be shown, rather than
> + * something the kernel appended to a syscall tracepoint behind perf's back.
> + */

Isn't it only called for syscall tracepoints?


>  static struct tep_format_field *
>  syscall_arg_fmt__init_array(struct syscall_arg_fmt *arg, struct tep_format_field *field,
> -			    bool *use_btf)
> +			    bool *use_btf, bool skip_internal)
>  {
>  	struct tep_format_field *last_field = NULL;
>  	int len;
>  
> -	for (; field; field = field->next, ++arg) {
> -		/* assume it's the last argument */
> -		if (is_internal_field(field))
> +	for (; field; field = field->next) {
> +		if (is_internal_field(field)) {
> +			if (!skip_internal)
> +				++arg;
>  			continue;

If so, it'd be much simpler if we do s/continue/break/ instead. :)


> +		}
>  
>  		last_field = field;
>  
> -		if (arg->scnprintf)
> +		if (arg->scnprintf) {
> +			++arg;
>  			continue;
> +		}
>  
>  		len = strlen(field->name);
>  
> @@ -2348,6 +2366,7 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *arg, struct tep_format_field
>  				}
>  			}
>  		}
> +		++arg;
>  	}
>  
>  	return last_field;
> @@ -2356,7 +2375,8 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *arg, struct tep_format_field
>  static int syscall__set_arg_fmts(struct syscall *sc)
>  {
>  	struct tep_format_field *last_field = syscall_arg_fmt__init_array(sc->arg_fmt, sc->args,
> -									  &sc->use_btf);
> +									  &sc->use_btf,
> +									  /*skip_internal=*/true);
>  
>  	if (last_field)
>  		sc->args_size = last_field->offset + last_field->size;
> @@ -2368,7 +2388,8 @@ static int syscall__read_info(struct syscall *sc, struct trace *trace)
>  {
>  	char tp_name[128];
>  	const char *name;
> -	struct tep_format_field *field;
> +	struct tep_format_field *args, *field;
> +	int nr_args;
>  	int err;
>  
>  	if (sc->nonexistent)
> @@ -2407,24 +2428,35 @@ static int syscall__read_info(struct syscall *sc, struct trace *trace)
>  		return err;
>  	}
>  
> -	/*
> -	 * The tracepoint format contains __syscall_nr field, so it's one more
> -	 * than the actual number of syscall arguments.
> -	 */
> -	if (syscall__alloc_arg_fmts(sc, sc->tp_format->format.nr_fields - 1))
> -		return -ENOMEM;
> -
> -	sc->args = sc->tp_format->format.fields;
> +	args = sc->tp_format->format.fields;
> +	nr_args = sc->tp_format->format.nr_fields;
>  	/*
>  	 * We need to check and discard the first variable '__syscall_nr'
>  	 * or 'nr' that mean the syscall number. It is needless here.
>  	 * So drop '__syscall_nr' or 'nr' field but does not exist on older kernels.
> +	 *
> +	 * Do this before allocating, and size the array from what is left, so
> +	 * that a format without the field does not leave
> +	 * syscall_arg_fmt__init_array() walking one entry past the end.
>  	 */
> -	if (sc->args && (!strcmp(sc->args->name, "__syscall_nr") || !strcmp(sc->args->name, "nr"))) {
> -		sc->args = sc->args->next;
> -		--sc->nr_args;
> +	if (args && (!strcmp(args->name, "__syscall_nr") || !strcmp(args->name, "nr"))) {
> +		args = args->next;
> +		--nr_args;
>  	}
>  
> +	if (syscall__alloc_arg_fmts(sc, nr_args))
> +		return -ENOMEM;
> +
> +	/*
> +	 * Only now that there is an arg_fmt for each of them are the arguments
> +	 * published. sc->name was set above, so a later syscall__read_info()
> +	 * takes this syscall to be read already and returns it as it stands;
> +	 * were sc->args set with sc->arg_fmt still NULL, the printing of that
> +	 * syscall would walk the arguments and index an array that does not
> +	 * exist.
> +	 */
> +	sc->args = args;
> +

I think it's better to split this change.  It looks independent to the
skip-internal-fields.

>  	field = sc->args;
>  	while (field) {
>  		if (is_internal_field(field))
> @@ -2452,7 +2484,8 @@ static int evsel__init_tp_arg_scnprintf(struct evsel *evsel, bool *use_btf)
>  		const struct tep_event *tp_format = evsel__tp_format(evsel);
>  
>  		if (tp_format) {
> -			syscall_arg_fmt__init_array(fmt, tp_format->format.fields, use_btf);
> +			syscall_arg_fmt__init_array(fmt, tp_format->format.fields, use_btf,
> +						    /*skip_internal=*/false);
>  			return 0;
>  		}
>  	}
> @@ -2642,10 +2675,16 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
>  	if (sc->args != NULL) {
>  		struct tep_format_field *field;
>  
> -		for (field = sc->args; field;
> -		     field = field->next, ++arg.idx, bit <<= 1) {
> -			if (arg.mask & bit)
> +		for (field = sc->args; field; field = field->next) {
> +			/* Skip internal fields so they are not printed as spurious arguments */
> +			if (is_internal_field(field))
> +				continue;

Similarly, it can stop when it's an internal field or arg.idx equals to
sc->nr_args.


> +
> +			if (arg.mask & bit) {
> +				++arg.idx;
> +				bit <<= 1;
>  				continue;
> +			}
>  
>  			arg.fmt = &sc->arg_fmt[arg.idx];
>  			val = syscall_arg__val(&arg, arg.idx);
> @@ -2664,8 +2703,11 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
>  			 */
>  			if (val == 0 && !trace->show_zeros &&
>  			    !(sc->arg_fmt && sc->arg_fmt[arg.idx].show_zero) &&
> -			    !(sc->arg_fmt && sc->arg_fmt[arg.idx].strtoul == STUL_BTF_TYPE))
> +			    !(sc->arg_fmt && sc->arg_fmt[arg.idx].strtoul == STUL_BTF_TYPE)) {
> +				++arg.idx;
> +				bit <<= 1;
>  				continue;
> +			}
>  
>  			printed += scnprintf(bf + printed, size - printed, "%s", printed ? ", " : "");
>  
> @@ -2680,12 +2722,16 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
>  								   size - printed, val, field->type);
>  				if (btf_printed) {
>  					printed += btf_printed;
> +					++arg.idx;
> +					bit <<= 1;
>  					continue;
>  				}
>  			}
>  
>  			printed += syscall_arg_fmt__scnprintf_val(&sc->arg_fmt[arg.idx],
>  								  bf + printed, size - printed, &arg, val);
> +			++arg.idx;
> +			bit <<= 1;
>  		}
>  	} else if (IS_ERR(sc->tp_format)) {
>  		/*
> @@ -2946,7 +2992,9 @@ static int trace__fprintf_sample(struct trace *trace, struct perf_sample *sample
>  	return printed;
>  }
>  
> -static void *syscall__augmented_args(struct syscall *sc, struct perf_sample *sample, int *augmented_args_size, int raw_augmented_args_size)
> +static void *syscall__augmented_args(struct trace *trace, struct syscall *sc,
> +				     struct perf_sample *sample,
> +				     int *augmented_args_size, int raw_augmented_args_size)
>  {
>  	/*
>  	 * For now with BPF raw_augmented we hook into raw_syscalls:sys_enter
> @@ -2964,6 +3012,24 @@ static void *syscall__augmented_args(struct syscall *sc, struct perf_sample *sam
>  	 */
>  	int args_size = raw_augmented_args_size ?: sc->args_size;
>  
> +	/*
> +	 * Augmented arguments are a perf trace specific payload, they are only
> +	 * ever appended to samples emitted by the BPF __augmented_syscalls__
> +	 * bpf-output event.
> +	 *
> +	 * Native syscalls:sys_enter_NAME tracepoints may also carry trailing
> +	 * data of their own: since Linux 6.19 they append __data_loc char[]
> +	 * fields plus the string payloads they point at. Those bytes are not a
> +	 * struct augmented_arg, so treating them as one would make
> +	 * syscall_arg__scnprintf_augmented_string() read a bogus length and
> +	 * walk arg->augmented.args far out of bounds.
> +	 *
> +	 * So only look for augmented arguments on the event that can actually
> +	 * produce them.
> +	 */
> +	if (sample->evsel != trace->syscalls.events.bpf_output)
> +		return NULL;
> +
>  	*augmented_args_size = sample->raw_size - args_size;
>  	if (*augmented_args_size > 0) {
>  		static uintptr_t argbuf[1024]; /* assuming single-threaded */
> @@ -3022,17 +3088,13 @@ static int trace__sys_enter(struct trace *trace,
>  	if (!(trace->duration_filter || trace->summary_only || trace->min_stack))
>  		trace__printf_interrupted_entry(trace);
>  	/*
> -	 * If this is raw_syscalls.sys_enter, then it always comes with the 6 possible
> -	 * arguments, even if the syscall being handled, say "openat", uses only 4 arguments
> -	 * this breaks syscall__augmented_args() check for augmented args, as we calculate
> -	 * syscall->args_size using each syscalls:sys_enter_NAME tracefs format file,
> -	 * so when handling, say the openat syscall, we end up getting 6 args for the
> -	 * raw_syscalls:sys_enter event, when we expected just 4, we end up mistakenly
> -	 * thinking that the extra 2 u64 args are the augmented filename, so just check
> -	 * here and avoid using augmented syscalls when the evsel is the raw_syscalls one.
> +	 * syscall__augmented_args() only returns a payload for the BPF
> +	 * __augmented_syscalls__ event, so raw_syscalls:sys_enter (which always
> +	 * carries all 6 possible arguments rather than sc->args_size worth) and
> +	 * the native syscalls:sys_enter_NAME tracepoints are both handled there.
>  	 */
> -	if (evsel != trace->syscalls.events.sys_enter)
> -		augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size, trace->raw_augmented_syscalls_args_size);

Looks like an independent fix too.


> +	augmented_args = syscall__augmented_args(trace, sc, sample, &augmented_args_size,
> +						 trace->raw_augmented_syscalls_args_size);
>  	ttrace->entry_time = sample->time;
>  	ttrace->entry_cpu = sample->cpu;
>  	msg = ttrace->entry_str;
> @@ -3077,7 +3139,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct perf_sample *sam
>  	struct syscall *sc;
>  	char msg[1024];
>  	void *args, *augmented_args = NULL;
> -	int augmented_args_size, e_machine;
> +	int augmented_args_size = 0, e_machine;
>  	size_t printed = 0;
>  
>  
> @@ -3095,7 +3157,8 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct perf_sample *sam
>  		goto out_put;
>  
>  	args = perf_evsel__sc_tp_ptr(args, sample);
> -	augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size, trace->raw_augmented_syscalls_args_size);
> +	augmented_args = syscall__augmented_args(trace, sc, sample, &augmented_args_size,
> +						 trace->raw_augmented_syscalls_args_size);
>  	printed += syscall__scnprintf_args(sc, msg, sizeof(msg), args, augmented_args, augmented_args_size, trace, thread);
>  	fprintf(trace->output, "%.*s", (int)printed, msg);
>  	err = 0;
> @@ -4127,10 +4190,16 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i
>  	if (trace->btf == NULL)
>  		return -1;
>  
> -	for (i = 0, field = sc->args; field; ++i, field = field->next) {
> +	for (i = 0, field = sc->args; field; field = field->next) {
> +		/* Skip internal fields to keep beauty array index aligned with syscall arguments */
> +		if (is_internal_field(field))
> +			continue;

Ditto.  Please just break.


> +
>  		// XXX We're only collecting pointer payloads _from_ user space
> -		if (!sc->arg_fmt[i].from_user)
> +		if (!sc->arg_fmt[i].from_user) {
> +			++i;
>  			continue;
> +		}
>  
>  		struct_offset = strstr(field->type, "struct ");
>  		if (struct_offset == NULL)
> @@ -4149,8 +4218,10 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i
>  			name[cnt] = '\0';
>  
>  			/* cache struct's btf_type and type_id */
> -			if (syscall_arg_fmt__cache_btf_struct(&sc->arg_fmt[i], trace->btf, name))
> +			if (syscall_arg_fmt__cache_btf_struct(&sc->arg_fmt[i], trace->btf, name)) {
> +				++i;
>  				continue;
> +			}
>  
>  			bt = sc->arg_fmt[i].type;
>  			beauty_array[i] = bt->size;
> @@ -4176,7 +4247,9 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i
>  			struct tep_format_field *field_tmp;
>  
>  			/* find the size of the buffer that appears in pairs with buf */
> -			for (j = 0, field_tmp = sc->args; field_tmp; ++j, field_tmp = field_tmp->next) {
> +			for (j = 0, field_tmp = sc->args; field_tmp; field_tmp = field_tmp->next) {
> +				if (is_internal_field(field_tmp))
> +					continue;
>  				if (!(field_tmp->flags & TEP_FIELD_IS_POINTER) && /* only integers */
>  				    (strstr(field_tmp->name, "count") ||
>  				     strstr(field_tmp->name, "siz") ||  /* size, bufsiz */
> @@ -4186,8 +4259,10 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i
>  					can_augment = true;
>  					break;
>  				}
> +				++j;
>  			}
>  		}
> +		++i;
>  	}
>  
>  	if (can_augment)
> @@ -4196,6 +4271,19 @@ static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int e_machine, i
>  	return -1;
>  }
>  
> +/*
> + * Advance to the first field that is a real syscall argument, so that callers
> + * walking two argument lists in step never have to reason about internal
> + * fields appearing in one list but not the other.
> + */
> +static struct tep_format_field *next_user_arg(struct tep_format_field *field)
> +{
> +	while (field && is_internal_field(field))
> +		field = field->next;
> +
> +	return field;
> +}

I don't think it's necessary.  The internal arguments come at the end.
Just stopping at an internal field or counting number of args would be
simpler.

Thanks,
Namhyung


> +
>  static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace,
>  							     struct syscall *sc)
>  {
> @@ -4203,7 +4291,7 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace
>  	/*
>  	 * We're only interested in syscalls that have a pointer:
>  	 */
> -	for (field = sc->args; field; field = field->next) {
> +	for (field = next_user_arg(sc->args); field; field = next_user_arg(field->next)) {
>  		if (field->flags & TEP_FIELD_IS_POINTER)
>  			goto try_to_find_pair;
>  	}
> @@ -4221,21 +4309,31 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace
>  		    pair->bpf_prog.sys_enter == unaugmented_prog)
>  			continue;
>  
> -		for (field = sc->args, candidate_field = pair->args;
> -		     field && candidate_field; field = field->next, candidate_field = candidate_field->next) {
> +		/*
> +		 * Both cursors only ever point at real arguments, so the loop
> +		 * ends when one of the two syscalls runs out of them, rather
> +		 * than when one happens to have trailing internal fields.
> +		 */
> +		field = next_user_arg(sc->args);
> +		candidate_field = next_user_arg(pair->args);
> +		while (field && candidate_field) {
>  			bool is_pointer = field->flags & TEP_FIELD_IS_POINTER,
>  			     candidate_is_pointer = candidate_field->flags & TEP_FIELD_IS_POINTER;
>  
>  			if (is_pointer) {
> -			       if (!candidate_is_pointer) {
> +				if (!candidate_is_pointer) {
>  					// The candidate just doesn't copies our pointer arg, might copy other pointers we want.
> +					field = next_user_arg(field->next);
> +					candidate_field = next_user_arg(candidate_field->next);
>  					continue;
> -			       }
> +				}
>  			} else {
>  				if (candidate_is_pointer) {
>  					// The candidate might copy a pointer we don't have, skip it.
>  					goto next_candidate;
>  				}
> +				field = next_user_arg(field->next);
> +				candidate_field = next_user_arg(candidate_field->next);
>  				continue;
>  			}
>  
> @@ -4256,6 +4354,8 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace
>  				goto next_candidate;
>  
>  			is_candidate = true;
> +			field = next_user_arg(field->next);
> +			candidate_field = next_user_arg(candidate_field->next);
>  		}
>  
>  		if (!is_candidate)
> @@ -4267,7 +4367,9 @@ static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace *trace
>  		 * more than what is common to the two syscalls.
>  		 */
>  		if (candidate_field) {
> -			for (candidate_field = candidate_field->next; candidate_field; candidate_field = candidate_field->next)
> +			candidate_field = next_user_arg(candidate_field->next);
> +			for (; candidate_field;
> +			     candidate_field = next_user_arg(candidate_field->next))
>  				if (candidate_field->flags & TEP_FIELD_IS_POINTER)
>  					goto next_candidate;
>  		}
> -- 
> 2.56.0.rc1.315.gc6ed9934b7-goog
> 

  parent reply	other threads:[~2026-09-24  6:44 UTC|newest]

Thread overview: 268+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-17  6:42 [PATCH v1 00/13] perf trace: Fix BPF filtering and make tracing tests non-exclusive Ian Rogers
2026-09-17  6:42 ` [PATCH v1 01/13] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-17  6:49   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 02/13] perf trace: Skip internal tracepoint fields in formatting and beauty map Ian Rogers
2026-09-17  6:52   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 03/13] perf trace: Do not set unaugmented BPF program on sys_exit map Ian Rogers
2026-09-17  6:51   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 04/13] perf trace: Filter events in BPF and avoid tracepoint vetoes Ian Rogers
2026-09-17  6:56   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 05/13] perf trace: Handle fork and exit directly in BPF filter maps Ian Rogers
2026-09-17  6:50   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 06/13] perf test test_task_analyzer: Isolate in temporary directory and make non-exclusive Ian Rogers
2026-09-17  6:49   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 07/13] perf test common: Do not globally disable tracing events in clear_all_probes Ian Rogers
2026-09-17  6:52   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 08/13] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-17  6:48   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 09/13] perf test record+probe_libc_inet_pton: Scope event to PID, add retries, " Ian Rogers
2026-09-17  6:49   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 10/13] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-17  6:49   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 11/13] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-17  6:52   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 12/13] perf test trace_summary: Make non-exclusive Ian Rogers
2026-09-17  6:52   ` sashiko-bot
2026-09-17  6:42 ` [PATCH v1 13/13] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-17  6:52   ` sashiko-bot
2026-09-17 16:38 ` [PATCH v2 00/14] perf trace: Fix BPF filtering and make tracing tests non-exclusive Ian Rogers
2026-09-17 16:38   ` [PATCH v2 01/14] perf trace: Include the headers declaring pid_t and strcmp Ian Rogers
2026-09-17 16:46     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 02/14] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-17 16:44     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 03/14] perf trace: Skip internal tracepoint fields in formatting and beauty map Ian Rogers
2026-09-17 16:50     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 04/14] perf trace: Do not set unaugmented BPF program on sys_exit map Ian Rogers
2026-09-17 16:54     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 05/14] perf trace: Filter events in BPF and avoid tracepoint vetoes Ian Rogers
2026-09-17 16:50     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 06/14] perf trace: Handle fork and exit directly in BPF filter maps Ian Rogers
2026-09-17 16:59     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 07/14] perf test test_task_analyzer: Isolate in temporary directory and make non-exclusive Ian Rogers
2026-09-17 16:47     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 08/14] perf test common: Do not globally disable tracing events in clear_all_probes Ian Rogers
2026-09-17 16:53     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 09/14] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-17 16:52     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 10/14] perf test record+probe_libc_inet_pton: Scope event to PID, add retries, " Ian Rogers
2026-09-17 16:57     ` sashiko-bot
2026-09-17 16:38   ` [PATCH v2 11/14] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-17 16:51     ` sashiko-bot
2026-09-17 16:39   ` [PATCH v2 12/14] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-17 16:54     ` sashiko-bot
2026-09-17 16:39   ` [PATCH v2 13/14] perf test trace_summary: Make non-exclusive Ian Rogers
2026-09-17 16:55     ` sashiko-bot
2026-09-17 16:39   ` [PATCH v2 14/14] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-17 16:56     ` sashiko-bot
2026-09-18 14:06   ` [PATCH v3 00/16] perf trace: Fix BPF filtering and make tracing tests non-exclusive Ian Rogers
2026-09-18 14:06     ` [PATCH v3 01/16] perf trace: Include the headers declaring pid_t, strcmp and assert Ian Rogers
2026-09-18 14:13       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 02/16] perf trace: Free the whole evsel_trace in evsel__put_and_free_priv Ian Rogers
2026-09-18 14:22       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 03/16] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-18 14:16       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 04/16] perf trace: Skip internal tracepoint fields in formatting and beauty map Ian Rogers
2026-09-18 14:28       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 05/16] perf trace: Do not set unaugmented BPF program on sys_exit map Ian Rogers
2026-09-18 14:33       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 06/16] perf trace: Filter events in BPF and avoid tracepoint vetoes Ian Rogers
2026-09-18 14:31       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 07/16] perf trace: Handle fork and exit directly in BPF filter maps Ian Rogers
2026-09-18 14:35       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 08/16] perf trace: Enumerate the target again once BPF is attached Ian Rogers
2026-09-18 14:47       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 09/16] perf test test_task_analyzer: Isolate in temporary directory and make non-exclusive Ian Rogers
2026-09-18 14:36       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 10/16] perf test common: Only disable probes in clear_all_probes Ian Rogers
2026-09-18 14:46       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 11/16] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-18 14:41       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 12/16] perf test record+probe_libc_inet_pton: Scope event to PID, add retries, " Ian Rogers
2026-09-18 14:45       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 13/16] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-18 14:46       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 14/16] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-18 14:51       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 15/16] perf test trace_summary: Make non-exclusive Ian Rogers
2026-09-18 14:51       ` sashiko-bot
2026-09-18 14:06     ` [PATCH v3 16/16] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-18 21:19     ` [PATCH v4 00/18] perf trace: Fix BPF filtering and make tracing tests non-exclusive Ian Rogers
2026-09-18 21:19       ` [PATCH v4 01/18] perf trace: Include the headers declaring pid_t, strcmp and assert Ian Rogers
2026-09-18 21:25         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 02/18] perf trace: Free the whole evsel_trace in evsel__put_and_free_priv Ian Rogers
2026-09-18 21:28         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 03/18] perf evsel: Report an allocation failure as ENOMEM when setting filters Ian Rogers
2026-09-18 21:30         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 04/18] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-18 21:26         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 05/18] perf trace: Skip internal tracepoint fields in formatting and beauty map Ian Rogers
2026-09-18 21:28         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 06/18] perf trace: Do not set unaugmented BPF program on sys_exit map Ian Rogers
2026-09-18 21:35         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 07/18] perf trace: Filter events in BPF and avoid tracepoint vetoes Ian Rogers
2026-09-18 21:29         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 08/18] perf trace: Handle fork and exit directly in BPF filter maps Ian Rogers
2026-09-18 21:31         ` sashiko-bot
2026-09-18 22:00           ` Ian Rogers
2026-09-18 21:19       ` [PATCH v4 09/18] perf trace: Enumerate the target again once BPF is attached Ian Rogers
2026-09-18 21:32         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 10/18] perf trace: Drop targets that died before they were filtered Ian Rogers
2026-09-18 21:27         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 11/18] perf test test_task_analyzer: Isolate in temporary directory and make non-exclusive Ian Rogers
2026-09-18 21:23         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 12/18] perf test common: Only disable probes in clear_all_probes Ian Rogers
2026-09-18 21:26         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 13/18] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-18 21:28         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 14/18] perf test record+probe_libc_inet_pton: Scope event to PID, add retries, " Ian Rogers
2026-09-18 21:30         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 15/18] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-18 21:27         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 16/18] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-18 21:31         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 17/18] perf test trace_summary: Make non-exclusive Ian Rogers
2026-09-18 21:31         ` sashiko-bot
2026-09-18 21:19       ` [PATCH v4 18/18] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-18 21:30         ` sashiko-bot
2026-09-22 13:11       ` [PATCH v4 00/18] perf trace: Fix BPF filtering and make tracing tests non-exclusive Arnaldo Carvalho de Melo
2026-09-22 22:43         ` Ian Rogers
2026-09-23  7:13       ` [PATCH v5 00/23] " Ian Rogers
2026-09-23  7:13         ` [PATCH v5 01/23] perf trace: Set the augmented arg header in the augmenters that omit it Ian Rogers
2026-09-23  7:25           ` sashiko-bot
2026-09-24  5:39           ` Namhyung Kim
2026-09-23  7:13         ` [PATCH v5 02/23] perf trace: Include the augmented arg header in nanosleep's payload length Ian Rogers
2026-09-23  7:25           ` sashiko-bot
2026-09-23 16:10             ` Ian Rogers
2026-09-23  7:13         ` [PATCH v5 03/23] perf trace: Include the headers declaring pid_t, strcmp and assert Ian Rogers
2026-09-23  7:20           ` sashiko-bot
2026-09-24  5:44           ` Namhyung Kim
2026-09-23  7:13         ` [PATCH v5 04/23] perf trace: Free the whole evsel_trace in evsel__put_and_free_priv Ian Rogers
2026-09-23  7:29           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 05/23] perf evsel: Report an allocation failure as ENOMEM when setting filters Ian Rogers
2026-09-23  7:23           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 06/23] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-23  7:21           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 07/23] perf trace: Skip internal tracepoint fields in formatting and beauty map Ian Rogers
2026-09-23  7:26           ` sashiko-bot
2026-09-24  6:44           ` Namhyung Kim [this message]
2026-09-23  7:13         ` [PATCH v5 08/23] perf trace: Bounds check augmented arguments before reading them Ian Rogers
2026-09-23  7:26           ` sashiko-bot
2026-09-24  6:58           ` Namhyung Kim
2026-09-23  7:13         ` [PATCH v5 09/23] perf trace: Bound the fixed size augmented argument beautifiers Ian Rogers
2026-09-23  7:22           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 10/23] perf trace: Do not read sample padding as an augmented argument Ian Rogers
2026-09-23  7:21           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 11/23] perf trace: Do not set unaugmented BPF program on sys_exit map Ian Rogers
2026-09-23  7:22           ` sashiko-bot
2026-09-24 22:49           ` Namhyung Kim
2026-09-23  7:13         ` [PATCH v5 12/23] perf trace: Filter events in BPF and avoid tracepoint vetoes Ian Rogers
2026-09-23  7:27           ` sashiko-bot
2026-09-25  2:59           ` Namhyung Kim
2026-09-25  4:10             ` Ian Rogers
2026-09-23  7:13         ` [PATCH v5 13/23] perf trace: Handle fork and exit directly in BPF filter maps Ian Rogers
2026-09-23  7:22           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 14/23] perf trace: Enumerate the target again once BPF is attached Ian Rogers
2026-09-23  7:29           ` sashiko-bot
2026-09-23 16:07             ` Ian Rogers
2026-09-23  7:13         ` [PATCH v5 15/23] perf trace: Drop targets that died before they were filtered Ian Rogers
2026-09-23  7:27           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 16/23] perf test test_task_analyzer: Isolate in temporary directory and make non-exclusive Ian Rogers
2026-09-23  7:24           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 17/23] perf test common: Only disable probes in clear_all_probes Ian Rogers
2026-09-23  7:27           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 18/23] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-23  7:28           ` sashiko-bot
2026-09-23  7:13         ` [PATCH v5 19/23] perf test record+probe_libc_inet_pton: Scope event to PID, add retries, " Ian Rogers
2026-09-23  7:28           ` sashiko-bot
2026-09-23  7:14         ` [PATCH v5 20/23] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-23  7:23           ` sashiko-bot
2026-09-23  7:14         ` [PATCH v5 21/23] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-23  7:29           ` sashiko-bot
2026-09-23  7:14         ` [PATCH v5 22/23] perf test trace_summary: Make non-exclusive Ian Rogers
2026-09-23  7:35           ` sashiko-bot
2026-09-23  7:14         ` [PATCH v5 23/23] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-23  7:26           ` sashiko-bot
2026-09-24  7:05         ` [PATCH v5 00/23] perf trace: Fix BPF filtering and make tracing tests non-exclusive Namhyung Kim
2026-09-28 18:25         ` [PATCH v6 00/26] " Ian Rogers
2026-09-28 18:25           ` [PATCH v6 01/26] perf trace: Set the augmented arg header in the augmenters that omit it Ian Rogers
2026-09-28 18:41             ` sashiko-bot
2026-09-30  3:50             ` Namhyung Kim
2026-09-28 18:25           ` [PATCH v6 02/26] perf trace: Include the augmented arg header in nanosleep's payload length Ian Rogers
2026-09-28 18:38             ` sashiko-bot
2026-09-30  4:02             ` Namhyung Kim
2026-09-28 18:25           ` [PATCH v6 03/26] perf trace: Don't read sample padding as an augmented argument Ian Rogers
2026-09-28 18:36             ` sashiko-bot
2026-09-30  4:14             ` Namhyung Kim
2026-09-28 18:25           ` [PATCH v6 04/26] perf trace: Bounds check augmented arguments before reading them Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-30  4:15             ` Namhyung Kim
2026-09-30 18:20             ` Aaron Tomlin
2026-09-30 18:34               ` Arnaldo Carvalho de Melo
2026-09-28 18:25           ` [PATCH v6 05/26] perf trace: Bound the fixed size augmented argument beautifiers Ian Rogers
2026-09-28 18:34             ` sashiko-bot
2026-09-30 18:22             ` Aaron Tomlin
2026-09-30 18:37               ` Arnaldo Carvalho de Melo
2026-09-28 18:25           ` [PATCH v6 06/26] perf trace: Copy sockaddr arguments by their length Ian Rogers
2026-09-28 18:38             ` sashiko-bot
2026-09-30 19:14             ` Arnaldo Carvalho de Melo
2026-09-30 23:08               ` Namhyung Kim
2026-10-01  6:01                 ` Ian Rogers
2026-10-01 15:32                   ` Arnaldo Carvalho de Melo
2026-10-01  9:07                 ` Arnaldo Carvalho de Melo
2026-10-01 17:17                   ` Ian Rogers
2026-10-01 18:34                     ` Arnaldo Carvalho de Melo
2026-10-02  6:54                       ` [PATCH 1/2] perf trace: Only call bpf_get_current_pid_tgid() when filtering tasks Ian Rogers
2026-10-02  6:54                         ` [PATCH 2/2] perf trace: Increase TRACE_AUG_MAX_BUF to 128 and document beauty_map encoding Ian Rogers
2026-10-02  9:14                           ` sashiko-bot
2026-10-02 16:17                           ` Arnaldo Carvalho de Melo
2026-10-02 20:04                           ` Aaron Tomlin
2026-10-02  9:14                         ` [PATCH 1/2] perf trace: Only call bpf_get_current_pid_tgid() when filtering tasks sashiko-bot
2026-10-02 16:17                         ` Arnaldo Carvalho de Melo
2026-10-02 20:03                         ` Aaron Tomlin
2026-09-28 18:25           ` [PATCH v6 07/26] perf trace: Start BPF summary before starting workload Ian Rogers
2026-09-28 18:35             ` sashiko-bot
2026-09-30 19:32             ` Aaron Tomlin
2026-09-28 18:25           ` [PATCH v6 08/26] perf trace: Stop at internal fields when walking syscall arguments Ian Rogers
2026-09-28 18:36             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 09/26] perf trace: Don't allocate syscall arg formats for internal fields Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 10/26] perf trace: Only take augmented arguments from the BPF output event Ian Rogers
2026-09-28 18:33             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 11/26] perf trace: Split unaugmented sys_exit program Ian Rogers
2026-09-28 18:35             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 12/26] perf trace: Use the CPU map index for the BPF output event's fds Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 13/26] perf trace: Destroy the BPF skeleton if it fails to load Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 14/26] perf thread_map: Add thread_map__tgid() Ian Rogers
2026-09-28 18:33             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 15/26] perf trace: Filter the target's tasks in BPF Ian Rogers
2026-09-28 18:39             ` sashiko-bot
2026-10-01 15:43             ` Arnaldo Carvalho de Melo
2026-10-01 16:36               ` Ian Rogers
2026-09-28 18:25           ` [PATCH v6 16/26] perf trace: Open the BPF output event on every CPU for task targets Ian Rogers
2026-09-28 18:36             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 17/26] perf trace: Do not return 0 from syscall tracepoint BPF Ian Rogers
2026-09-28 18:46             ` sashiko-bot
2026-09-28 19:26               ` Ian Rogers
2026-09-28 18:25           ` [PATCH v6 18/26] perf trace: Remove unused code Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-30 19:34             ` Aaron Tomlin
2026-09-28 18:25           ` [PATCH v6 19/26] perf trace: Add an option to disable syscall augmentation Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-28 18:25           ` [PATCH v6 20/26] perf test common: Only disable probes in clear_all_probes Ian Rogers
2026-09-28 18:37             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 21/26] perf test probe_vfs_getname: Scope probe name to PID and make non-exclusive Ian Rogers
2026-09-28 18:39             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 22/26] perf test record+probe_libc_inet_pton: Scope event " Ian Rogers
2026-09-28 18:41             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 23/26] perf test trace_summary: Improve error diagnostics Ian Rogers
2026-09-28 18:35             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 24/26] perf test trace_btf_general: Drop --max-events=1 and make non-exclusive Ian Rogers
2026-09-28 18:39             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 25/26] perf test: Remove exclusive tag from perf trace tests Ian Rogers
2026-09-28 18:40             ` sashiko-bot
2026-09-28 18:26           ` [PATCH v6 26/26] perf test uprobe_from_different_cu: Scope probe name to PID Ian Rogers
2026-09-28 18:38             ` sashiko-bot
2026-09-30 17:32           ` [PATCH v6 00/26] perf trace: Fix BPF filtering and make tracing tests non-exclusive Arnaldo Carvalho de Melo
2026-10-01  6:47             ` Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=arTG2hd1H2ZH4Nl0@z2 \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=howardchu95@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.