perf sched: Include file offset in event skip messages

Add the perf.data file offset to the CPU out-of-bounds and
machine__resolve failure messages emitted when samples are skipped in
process_sched_switch_event(), process_sched_runtime_event(), and
timehist_sched_change_event().  Also switch event type from raw integer
to perf_event__name() string for readability.

Reviewed-by: Ian Rogers <irogers@google.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2026-06-01 14:21:44 -03:00
parent 43f827251a
commit d38bee6d80

View File

@ -1792,8 +1792,10 @@ static int process_sched_switch_event(const struct perf_tool *tool,
u32 prev_pid = perf_sample__intval(sample, "prev_pid"),
next_pid = perf_sample__intval(sample, "next_pid");
/* perf.data is untrusted input — CPU may be absent or corrupted */
if (this_cpu < 0 || this_cpu >= MAX_CPUS) {
pr_warning("Out-of-bound sample CPU %d. Skipping sample\n", this_cpu);
pr_warning("WARNING: at offset %#" PRIx64 ": out-of-bound sample CPU %d, skipping sample\n",
sample->file_offset, this_cpu);
return 0;
}
@ -1819,8 +1821,10 @@ static int process_sched_runtime_event(const struct perf_tool *tool,
{
struct perf_sched *sched = container_of(tool, struct perf_sched, tool);
/* perf.data is untrusted input — CPU may be absent or corrupted */
if (sample->cpu >= MAX_CPUS) {
pr_warning("Out-of-bound sample CPU %u. Skipping sample\n", sample->cpu);
pr_warning("WARNING: at offset %#" PRIx64 ": out-of-bound sample CPU %u, skipping sample\n",
sample->file_offset, sample->cpu);
return 0;
}
@ -2786,15 +2790,18 @@ static int timehist_sched_change_event(const struct perf_tool *tool,
int rc = 0;
const char state = perf_sample__taskstate(sample, "prev_state");
/* perf.data is untrusted input — CPU may be absent or corrupted */
if (sample->cpu >= MAX_CPUS) {
pr_warning("Out-of-bound sample CPU %d. Skipping sample\n", sample->cpu);
pr_warning("WARNING: at offset %#" PRIx64 ": out-of-bound sample CPU %d, skipping sample\n",
sample->file_offset, sample->cpu);
return 0;
}
addr_location__init(&al);
if (machine__resolve(machine, &al, sample) < 0) {
pr_err("problem processing %d event. skipping it\n",
event->header.type);
pr_err("problem processing %s (%u) event at offset %#" PRIx64 ", skipping it\n",
perf_event__name(event->header.type), event->header.type,
sample->file_offset);
rc = -1;
goto out;
}