perf trace record fails some cases in powerpc
# ./perf test "perf trace record and replay"
128: perf trace record and replay : FAILED!
# ./perf trace record sleep 1
# echo $?
32
This is happening because of non-zero err value from
auxtrace_record__init() function.
static int record__auxtrace_init(struct record *rec)
{
int err;
if ((rec->opts.auxtrace_snapshot_opts || rec->opts.auxtrace_sample_opts)
&& record__threads_enabled(rec)) {
pr_err("AUX area tracing options are not available in parallel streaming mode.\n");
return -EINVAL;
}
if (!rec->itr) {
rec->itr = auxtrace_record__init(rec->evlist, &err);
if (err)
return err;
}
Here "int err" is not initialised. The code expects "err" to be set
from auxtrace_record__init() function.
Update auxtrace_record__init() in arch/powerpc/util/auxtrace.c to clear
err value in the beginning.
- Clear err value in beginning of function. Any fail later will
set appropriate return code to err.
- Even if we haven't found any event for auxtrace, perf record
should continue for other events. NULL return
will indicate that there is no auxtrace record initialized.
- Not having "err" set here will affect monitoring of other events
also because perf record will fail seeing random value in err.
Set err to -EINVAL before invoking auxtrace_record__init() in
builtin-record.c
With the fix,
# ./perf trace record sleep 1
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.033 MB perf.data (228 samples) ]
Fixes: 1dbfaf94cf66 ("perf powerpc: Add basic CONFIG_AUXTRACE support for VPA pmu on powerpc")
Signed-off-by: Athira Rajeev <redacted>
---
Changelog:
v1 -> v2
Addressed review comment from Adrian:
- Set err to -EINVAL before invoking auxtrace_record__init() in
builtin-record.c
- Added kernel-doc to auxtrace_record__init() in tools/perf/util/auxtrace.c
Addressed review comment from Namhyung:
- Added fixes tag
tools/perf/arch/powerpc/util/auxtrace.c | 6 ++++++
tools/perf/builtin-record.c | 1 +
2 files changed, 7 insertions(+)
@@ -865,6 +865,7 @@ static int record__auxtrace_init(struct record *rec)}if(!rec->itr){+err=-EINVAL;rec->itr=auxtrace_record__init(rec->evlist,&err);if(err)returnerr;
Add documentation comment describing the parameters
and return code for auxtrace_record__init() in util/auxtrace.c
Using "struct evlist *evlist __maybe_unused", gives below
warning with "scripts/kernel-doc".
# ./scripts/kernel-doc -none tools/perf/util/auxtrace.c
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Updated parameter as "struct evlist __maybe_unused *evlist"
With the change, there is no erros/warnings with kernel-doc
Signed-off-by: Athira Rajeev <redacted>
---
Changelog:
v3 -> v4:
Addressed review comment from Sashiko:
Update return value expectation for fail as
non zero return err code.
v2 -> v3:
Addressed review comment from Sashiko:
Update return value expectation for success and fail
correctly.
tools/perf/util/auxtrace.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
From: Namhyung Kim <namhyung@kernel.org> Date: 2026-05-04 01:47:06
Hello,
On Sat, May 02, 2026 at 08:02:37PM +0530, Athira Rajeev wrote:
Add documentation comment describing the parameters
and return code for auxtrace_record__init() in util/auxtrace.c
Using "struct evlist *evlist __maybe_unused", gives below
warning with "scripts/kernel-doc".
# ./scripts/kernel-doc -none tools/perf/util/auxtrace.c
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Updated parameter as "struct evlist __maybe_unused *evlist"
With the change, there is no erros/warnings with kernel-doc
Hmm.. this is not what we used to have. I'm not sure if we want to
update them all. Maybe better to leave it for now.
quoted hunk
Signed-off-by: Athira Rajeev <redacted>
---
Changelog:
v3 -> v4:
Addressed review comment from Sashiko:
Update return value expectation for fail as
non zero return err code.
v2 -> v3:
Addressed review comment from Sashiko:
Update return value expectation for success and fail
correctly.
tools/perf/util/auxtrace.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
@@ -896,8 +896,23 @@ int auxtrace_parse_aux_action(struct evlist *evlist)return0;}+/**+*auxtrace_record__init-InitializeanAUXareatracingrecord.+*@evlist:ThelistofeventstocheckforAUXareatracingevent.+*@err:Pointertoanintegertostorereturncode.+*+*Thisfunctionlooksthroughthe@evlisttodeterminewhichAUXarea+*tracinghardwareisbeingusedandinitializestheauxtrace_record+*structure.+*+*Return:+*a)Apointertothestructauxtrace_recordonsuccess.
I think you should mention that the this function should set *err to
zero on success.
Thanks,
Namhyung
+ * b) NULL with @err = 0 if no AUX area tracing event is found/supported
+ * (not considered an error).
+ * c) NULL with non-zero @err on actual auxtrace_record__init failure.
+ */
struct auxtrace_record *__weak
-auxtrace_record__init(struct evlist *evlist __maybe_unused, int *err)
+auxtrace_record__init(struct evlist __maybe_unused *evlist, int *err)
{
*err = 0;
return NULL;
--
2.47.3
On 4 May 2026, at 7:16 AM, Namhyung Kim [off-list ref] wrote:
Hello,
On Sat, May 02, 2026 at 08:02:37PM +0530, Athira Rajeev wrote:
quoted
Add documentation comment describing the parameters
and return code for auxtrace_record__init() in util/auxtrace.c
Using "struct evlist *evlist __maybe_unused", gives below
warning with "scripts/kernel-doc".
# ./scripts/kernel-doc -none tools/perf/util/auxtrace.c
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Warning: tools/perf/util/auxtrace.c:912 function parameter '__maybe_unused' not described in 'auxtrace_record__init'
Updated parameter as "struct evlist __maybe_unused *evlist"
With the change, there is no erros/warnings with kernel-doc
Hmm.. this is not what we used to have. I'm not sure if we want to
update them all. Maybe better to leave it for now.
Sure, I will keep it as original version.
quoted
Signed-off-by: Athira Rajeev <redacted>
---
Changelog:
v3 -> v4:
Addressed review comment from Sashiko:
Update return value expectation for fail as
non zero return err code.
v2 -> v3:
Addressed review comment from Sashiko:
Update return value expectation for success and fail
correctly.
tools/perf/util/auxtrace.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
@@ -896,8 +896,23 @@ int auxtrace_parse_aux_action(struct evlist *evlist)
return 0;
}
+/**
+ * auxtrace_record__init - Initialize an AUX area tracing record.
+ * @evlist: The list of events to check for AUX area tracing event.
+ * @err: Pointer to an integer to store return code.
+ *
+ * This function looks through the @evlist to determine which AUX area
+ * tracing hardware is being used and initializes the auxtrace_record
+ * structure.
+ *
+ * Return:
+ * a) A pointer to the struct auxtrace_record on success.
I think you should mention that the this function should set *err to
zero on success.
Sure, I will update this
Thanks
Athira
Thanks,
Namhyung
quoted
+ * b) NULL with @err = 0 if no AUX area tracing event is found/supported
+ * (not considered an error).
+ * c) NULL with non-zero @err on actual auxtrace_record__init failure.
+ */
struct auxtrace_record *__weak
-auxtrace_record__init(struct evlist *evlist __maybe_unused, int *err)
+auxtrace_record__init(struct evlist __maybe_unused *evlist, int *err)
{
*err = 0;
return NULL;
--
2.47.3
From: Adrian Hunter <adrian.hunter@intel.com> Date: 2026-05-04 05:15:17
On 02/05/2026 17:32, Athira Rajeev wrote:
perf trace record fails some cases in powerpc
# ./perf test "perf trace record and replay"
128: perf trace record and replay : FAILED!
# ./perf trace record sleep 1
# echo $?
32
This is happening because of non-zero err value from
auxtrace_record__init() function.
static int record__auxtrace_init(struct record *rec)
{
int err;
if ((rec->opts.auxtrace_snapshot_opts || rec->opts.auxtrace_sample_opts)
&& record__threads_enabled(rec)) {
pr_err("AUX area tracing options are not available in parallel streaming mode.\n");
return -EINVAL;
}
if (!rec->itr) {
rec->itr = auxtrace_record__init(rec->evlist, &err);
if (err)
return err;
}
Here "int err" is not initialised. The code expects "err" to be set
from auxtrace_record__init() function.
Update auxtrace_record__init() in arch/powerpc/util/auxtrace.c to clear
err value in the beginning.
- Clear err value in beginning of function. Any fail later will
set appropriate return code to err.
- Even if we haven't found any event for auxtrace, perf record
should continue for other events. NULL return
will indicate that there is no auxtrace record initialized.
- Not having "err" set here will affect monitoring of other events
also because perf record will fail seeing random value in err.
Set err to -EINVAL before invoking auxtrace_record__init() in
builtin-record.c
With the fix,
# ./perf trace record sleep 1
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.033 MB perf.data (228 samples) ]
Fixes: 1dbfaf94cf66 ("perf powerpc: Add basic CONFIG_AUXTRACE support for VPA pmu on powerpc")
Signed-off-by: Athira Rajeev <redacted>
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
quoted hunk
---
Changelog:
v1 -> v2
Addressed review comment from Adrian:
- Set err to -EINVAL before invoking auxtrace_record__init() in
builtin-record.c
- Added kernel-doc to auxtrace_record__init() in tools/perf/util/auxtrace.c
Addressed review comment from Namhyung:
- Added fixes tag
tools/perf/arch/powerpc/util/auxtrace.c | 6 ++++++
tools/perf/builtin-record.c | 1 +
2 files changed, 7 insertions(+)
@@ -865,6 +865,7 @@ static int record__auxtrace_init(struct record *rec)}if(!rec->itr){+err=-EINVAL;rec->itr=auxtrace_record__init(rec->evlist,&err);if(err)returnerr;