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>
83 lines
2.0 KiB
C
83 lines
2.0 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <linux/compiler.h>
|
|
#include <linux/bitmap.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/zalloc.h>
|
|
#include <perf/cpumap.h>
|
|
#include <internal/cpumap.h>
|
|
#include "debug.h"
|
|
#include "env.h"
|
|
#include "mem2node.h"
|
|
#include "tests.h"
|
|
|
|
static struct node {
|
|
int node;
|
|
const char *map;
|
|
} test_nodes[] = {
|
|
{ .node = 0, .map = "0" },
|
|
{ .node = 1, .map = "1-2" },
|
|
{ .node = 3, .map = "5-7,9" },
|
|
};
|
|
|
|
#define T TEST_ASSERT_VAL
|
|
|
|
static unsigned long *get_bitmap(const char *str, int nbits)
|
|
{
|
|
struct perf_cpu_map *map = perf_cpu_map__new(str);
|
|
unsigned long *bm = NULL;
|
|
|
|
bm = bitmap_zalloc(nbits);
|
|
|
|
if (map && bm) {
|
|
struct perf_cpu cpu;
|
|
unsigned int i;
|
|
|
|
perf_cpu_map__for_each_cpu(cpu, i, map)
|
|
__set_bit(cpu.cpu, bm);
|
|
}
|
|
|
|
if (map)
|
|
perf_cpu_map__put(map);
|
|
else
|
|
free(bm);
|
|
|
|
return bm && map ? bm : NULL;
|
|
}
|
|
|
|
static int test__mem2node(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
|
|
{
|
|
struct mem2node map;
|
|
struct memory_node nodes[3];
|
|
struct perf_env env = {
|
|
.memory_nodes = (struct memory_node *) &nodes[0],
|
|
.nr_memory_nodes = ARRAY_SIZE(nodes),
|
|
.memory_bsize = 0x100,
|
|
};
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(nodes); i++) {
|
|
nodes[i].node = test_nodes[i].node;
|
|
nodes[i].size = 10;
|
|
|
|
T("failed: alloc bitmap",
|
|
(nodes[i].set = get_bitmap(test_nodes[i].map, 10)));
|
|
}
|
|
|
|
T("failed: mem2node__init", !mem2node__init(&map, &env));
|
|
T("failed: mem2node__node", 0 == mem2node__node(&map, 0x50));
|
|
T("failed: mem2node__node", 1 == mem2node__node(&map, 0x100));
|
|
T("failed: mem2node__node", 1 == mem2node__node(&map, 0x250));
|
|
T("failed: mem2node__node", 3 == mem2node__node(&map, 0x500));
|
|
T("failed: mem2node__node", 3 == mem2node__node(&map, 0x650));
|
|
T("failed: mem2node__node", -1 == mem2node__node(&map, 0x450));
|
|
T("failed: mem2node__node", -1 == mem2node__node(&map, 0x1050));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(nodes); i++)
|
|
zfree(&nodes[i].set);
|
|
|
|
mem2node__exit(&map);
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SUITE("mem2node", mem2node);
|