selftests/bpf: Use value with enough-size when updating per-cpu map
When updating per-cpu map in map_percpu_stats test, patch_map_thread() only passes 4-bytes-sized value to bpf_map_update_elem(). The expected size of the value is 8 * num_possible_cpus(), so fix it by passing a value with enough-size for per-cpu map update. Signed-off-by: Hou Tao <houtao1@huawei.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20231101032455.3808547-2-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
cd9c127069
commit
d79924ca57
@ -131,6 +131,12 @@ static bool is_lru(__u32 map_type)
|
||||
map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH;
|
||||
}
|
||||
|
||||
static bool is_percpu(__u32 map_type)
|
||||
{
|
||||
return map_type == BPF_MAP_TYPE_PERCPU_HASH ||
|
||||
map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH;
|
||||
}
|
||||
|
||||
struct upsert_opts {
|
||||
__u32 map_type;
|
||||
int map_fd;
|
||||
@ -150,17 +156,26 @@ static int create_small_hash(void)
|
||||
|
||||
static void *patch_map_thread(void *arg)
|
||||
{
|
||||
/* 8KB is enough for 1024 CPUs. And it is shared between N_THREADS. */
|
||||
static __u8 blob[8 << 10];
|
||||
struct upsert_opts *opts = arg;
|
||||
void *val_ptr;
|
||||
int val;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < opts->n; i++) {
|
||||
if (opts->map_type == BPF_MAP_TYPE_HASH_OF_MAPS)
|
||||
if (opts->map_type == BPF_MAP_TYPE_HASH_OF_MAPS) {
|
||||
val = create_small_hash();
|
||||
else
|
||||
val_ptr = &val;
|
||||
} else if (is_percpu(opts->map_type)) {
|
||||
val_ptr = blob;
|
||||
} else {
|
||||
val = rand();
|
||||
ret = bpf_map_update_elem(opts->map_fd, &i, &val, 0);
|
||||
val_ptr = &val;
|
||||
}
|
||||
|
||||
ret = bpf_map_update_elem(opts->map_fd, &i, val_ptr, 0);
|
||||
CHECK(ret < 0, "bpf_map_update_elem", "key=%d error: %s\n", i, strerror(errno));
|
||||
|
||||
if (opts->map_type == BPF_MAP_TYPE_HASH_OF_MAPS)
|
||||
|
Loading…
x
Reference in New Issue
Block a user