mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-05 09:57:21 +02:00
83c338369a
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>
57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <linux/compiler.h>
|
|
#include <linux/bitmap.h>
|
|
#include <perf/cpumap.h>
|
|
#include <internal/cpumap.h>
|
|
#include "tests.h"
|
|
#include "debug.h"
|
|
|
|
#define NBITS 100
|
|
|
|
static unsigned long *get_bitmap(const char *str, int nbits)
|
|
{
|
|
struct perf_cpu_map *map = perf_cpu_map__new(str);
|
|
unsigned long *bm;
|
|
|
|
bm = bitmap_zalloc(nbits);
|
|
|
|
if (map && bm) {
|
|
unsigned int i;
|
|
struct perf_cpu cpu;
|
|
|
|
perf_cpu_map__for_each_cpu(cpu, i, map)
|
|
__set_bit(cpu.cpu, bm);
|
|
}
|
|
|
|
perf_cpu_map__put(map);
|
|
return bm;
|
|
}
|
|
|
|
static int test_bitmap(const char *str)
|
|
{
|
|
unsigned long *bm = get_bitmap(str, NBITS);
|
|
char buf[100];
|
|
int ret;
|
|
|
|
bitmap_scnprintf(bm, NBITS, buf, sizeof(buf));
|
|
pr_debug("bitmap: %s\n", buf);
|
|
|
|
ret = !strcmp(buf, str);
|
|
free(bm);
|
|
return ret;
|
|
}
|
|
|
|
static int test__bitmap_print(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
|
|
{
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1,5"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1,3,5,7,9,11,13,15,17,19,21-40"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("2-5"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1,3-6,8-10,24,35-37"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1,3-6,8-10,24,35-37"));
|
|
TEST_ASSERT_VAL("failed to convert map", test_bitmap("1-10,12-20,22-30,32-40"));
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SUITE("Print bitmap", bitmap_print);
|