mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-14 05:49:55 +00:00
Add a test to test all possible and valid allocation size for bpf memory allocator. For each possible allocation size, the test uses the following two steps to test the alloc and free path: 1) allocate N (N > high_watermark) objects to trigger the refill executed in irq_work. 2) free N objects to trigger the freeing executed in irq_work. Signed-off-by: Hou Tao <houtao1@huawei.com> Link: https://lore.kernel.org/r/20230908133923.2675053-5-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (C) 2023. Huawei Technologies Co., Ltd */
|
|
#define _GNU_SOURCE
|
|
#include <sched.h>
|
|
#include <pthread.h>
|
|
#include <stdbool.h>
|
|
#include <bpf/btf.h>
|
|
#include <test_progs.h>
|
|
|
|
#include "test_bpf_ma.skel.h"
|
|
|
|
void test_test_bpf_ma(void)
|
|
{
|
|
struct test_bpf_ma *skel;
|
|
struct btf *btf;
|
|
int i, err;
|
|
|
|
skel = test_bpf_ma__open();
|
|
if (!ASSERT_OK_PTR(skel, "open"))
|
|
return;
|
|
|
|
btf = bpf_object__btf(skel->obj);
|
|
if (!ASSERT_OK_PTR(btf, "btf"))
|
|
goto out;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(skel->rodata->data_sizes); i++) {
|
|
char name[32];
|
|
int id;
|
|
|
|
snprintf(name, sizeof(name), "bin_data_%u", skel->rodata->data_sizes[i]);
|
|
id = btf__find_by_name_kind(btf, name, BTF_KIND_STRUCT);
|
|
if (!ASSERT_GT(id, 0, "bin_data"))
|
|
goto out;
|
|
skel->rodata->data_btf_ids[i] = id;
|
|
}
|
|
|
|
err = test_bpf_ma__load(skel);
|
|
if (!ASSERT_OK(err, "load"))
|
|
goto out;
|
|
|
|
err = test_bpf_ma__attach(skel);
|
|
if (!ASSERT_OK(err, "attach"))
|
|
goto out;
|
|
|
|
skel->bss->pid = getpid();
|
|
usleep(1);
|
|
ASSERT_OK(skel->bss->err, "test error");
|
|
out:
|
|
test_bpf_ma__destroy(skel);
|
|
}
|