mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 14:51:51 -04:00
The index into the cpumap array and the number of entries within the array can never be negative, so let's make them unsigned. This is prompted by reports that gcc 13 with -O6 is giving a alloc-size-larger-than errors. The change makes the cpumap changes and then updates the declaration of index variables throughout perf and libperf to be unsigned. The two things are hard to separate as compiler warnings about mixing signed and unsigned types breaks the build. Reported-by: Chingbin Li <liqb365@163.com> Closes: https://lore.kernel.org/lkml/20260212025127.841090-1-liqb365@163.com/ Tested-by: Chingbin Li <liqb365@163.com> Signed-off-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
35 lines
1.2 KiB
C
35 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __LIBPERF_INTERNAL_CPUMAP_H
|
|
#define __LIBPERF_INTERNAL_CPUMAP_H
|
|
|
|
#include <linux/refcount.h>
|
|
#include <perf/cpumap.h>
|
|
#include <internal/rc_check.h>
|
|
|
|
/**
|
|
* A sized, reference counted, sorted array of integers representing CPU
|
|
* numbers. This is commonly used to capture which CPUs a PMU is associated
|
|
* with. The indices into the cpumap are frequently used as they avoid having
|
|
* gaps if CPU numbers were used. For events associated with a pid, rather than
|
|
* a CPU, a single dummy map with an entry of -1 is used.
|
|
*/
|
|
DECLARE_RC_STRUCT(perf_cpu_map) {
|
|
refcount_t refcnt;
|
|
/** Length of the map array. */
|
|
unsigned int nr;
|
|
/** The CPU values. */
|
|
struct perf_cpu map[];
|
|
};
|
|
|
|
struct perf_cpu_map *perf_cpu_map__alloc(unsigned int nr_cpus);
|
|
int perf_cpu_map__idx(const struct perf_cpu_map *cpus, struct perf_cpu cpu);
|
|
bool perf_cpu_map__is_subset(const struct perf_cpu_map *a, const struct perf_cpu_map *b);
|
|
|
|
void perf_cpu_map__set_nr(struct perf_cpu_map *map, unsigned int nr_cpus);
|
|
|
|
static inline refcount_t *perf_cpu_map__refcnt(struct perf_cpu_map *map)
|
|
{
|
|
return &RC_CHK_ACCESS(map)->refcnt;
|
|
}
|
|
#endif /* __LIBPERF_INTERNAL_CPUMAP_H */
|