xref: /linux/tools/lib/perf/TODO (revision 3d5e48944e824bddc20d7b874e784f7b279636fe)
1f54ce060SArnaldo Carvalho de MeloFuture ABI changes
2f54ce060SArnaldo Carvalho de Melo==================
3f54ce060SArnaldo Carvalho de Melo
4f54ce060SArnaldo Carvalho de MeloThis file collects items that require a libperf ABI bump.  Each entry
5f54ce060SArnaldo Carvalho de Meloshould describe the current limitation, the desired end state, and the
6f54ce060SArnaldo Carvalho de Meloscope of the change so that a future ABI revision can batch them
7f54ce060SArnaldo Carvalho de Melotogether.
8f54ce060SArnaldo Carvalho de Melo
9f54ce060SArnaldo Carvalho de Melo1. Widen struct perf_cpu.cpu from int16_t to int
10f54ce060SArnaldo Carvalho de Melo   - Current limit: 32767 CPUs.  No architecture exceeds this today
11f54ce060SArnaldo Carvalho de Melo     (x86_64 max is 8192, arm64 is 4096), but NR_CPUS limits keep
12f54ce060SArnaldo Carvalho de Melo     growing.  perf clamps to INT16_MAX in set_max_cpu_num() as a
13f54ce060SArnaldo Carvalho de Melo     safety net.
14*7435c406SArnaldo Carvalho de Melo   - Code simplification: the int16_t forces defensive truncation
15*7435c406SArnaldo Carvalho de Melo     checks at every boundary where a wider CPU index (int from
16*7435c406SArnaldo Carvalho de Melo     sample->cpu, al->cpu, etc.) is narrowed into struct perf_cpu.
17*7435c406SArnaldo Carvalho de Melo     Without these checks, values > 32767 silently wrap to negative
18*7435c406SArnaldo Carvalho de Melo     numbers (two's complement), bypassing bounds validation.
19*7435c406SArnaldo Carvalho de Melo     Widening to int eliminates this entire class of silent
20*7435c406SArnaldo Carvalho de Melo     truncation bugs and removes the need for the INT16_MAX clamp
21*7435c406SArnaldo Carvalho de Melo     in set_max_cpu_num().
22f54ce060SArnaldo Carvalho de Melo   - Scope: struct perf_cpu is embedded everywhere — perf_cpu_map__cpu(),
23f54ce060SArnaldo Carvalho de Melo     perf_cpu_map__min(), perf_cpu_map__max(), perf_cpu_map__has(), the
24f54ce060SArnaldo Carvalho de Melo     for_each_cpu macros, and all internal callers.  The perf_cpu_map
25f54ce060SArnaldo Carvalho de Melo     internal array (RC_CHK_ACCESS(map)->map[]) stores struct perf_cpu
26f54ce060SArnaldo Carvalho de Melo     directly.  Widening changes the struct layout and every function
27f54ce060SArnaldo Carvalho de Melo     that returns or accepts struct perf_cpu by value.
28f54ce060SArnaldo Carvalho de Melo   - Migration: bump LIBPERF version in libperf.map, audit all
29f54ce060SArnaldo Carvalho de Melo     sizeof(struct perf_cpu) assumptions, update perf.data
30f54ce060SArnaldo Carvalho de Melo     serialization if needed.
31