libperf: Document struct perf_cpu int16_t ABI limitation

struct perf_cpu.cpu is int16_t, limiting perf to 32767 CPUs.  This is
part of the libperf ABI (returned by value from perf_cpu_map__cpu() and
friends), so widening it requires an ABI bump.

Add a comment on the struct definition noting this, and create a TODO
file to collect future ABI changes so they can be batched into a single
version bump.

Cc: Ian Rogers <irogers@google.com>
Cc: Namhyung Kim <namhyung@kernel.org>
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-06 14:42:09 -03:00
parent c3e51ed45f
commit f54ce06049
2 changed files with 29 additions and 1 deletions

22
tools/lib/perf/TODO Normal file
View File

@ -0,0 +1,22 @@
Future ABI changes
==================
This file collects items that require a libperf ABI bump. Each entry
should describe the current limitation, the desired end state, and the
scope of the change so that a future ABI revision can batch them
together.
1. Widen struct perf_cpu.cpu from int16_t to int
- Current limit: 32767 CPUs. No architecture exceeds this today
(x86_64 max is 8192, arm64 is 4096), but NR_CPUS limits keep
growing. perf clamps to INT16_MAX in set_max_cpu_num() as a
safety net.
- Scope: struct perf_cpu is embedded everywhere — perf_cpu_map__cpu(),
perf_cpu_map__min(), perf_cpu_map__max(), perf_cpu_map__has(), the
for_each_cpu macros, and all internal callers. The perf_cpu_map
internal array (RC_CHK_ACCESS(map)->map[]) stores struct perf_cpu
directly. Widening changes the struct layout and every function
that returns or accepts struct perf_cpu by value.
- Migration: bump LIBPERF version in libperf.map, audit all
sizeof(struct perf_cpu) assumptions, update perf.data
serialization if needed.

View File

@ -6,7 +6,13 @@
#include <stdbool.h>
#include <stdint.h>
/** A wrapper around a CPU to avoid confusion with the perf_cpu_map's map's indices. */
/**
* struct perf_cpu - wrapper around a CPU number.
* @cpu: CPU number, -1 for the "any CPU"/dummy value.
*
* int16_t limits this to 32767 CPUs. Widening to int requires a libperf
* ABI bump see tools/lib/perf/TODO for the full scope.
*/
struct perf_cpu {
int16_t cpu;
};