From: Leon Hwang <hffilwlqm@gmail.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
Leon Hwang <hffilwlqm@gmail.com>
Subject: [RFC PATCH bpf-next 2/2] selftests/bpf: Add testcases for generic kfunc bpf_ffs64()
Date: Wed, 31 Jan 2024 23:56:07 +0800 [thread overview]
Message-ID: <20240131155607.51157-3-hffilwlqm@gmail.com> (raw)
In-Reply-To: <20240131155607.51157-1-hffilwlqm@gmail.com>
Add a selftest to confirm the kfunc bpf_ffs64() runs OK.
./tools/testing/selftests/bpf/test_progs -t bitops
12/1 bitops/bitops_ffs64:OK
12 bitops:OK
Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED
Signed-off-by: Leon Hwang <hffilwlqm@gmail.com>
---
.../testing/selftests/bpf/prog_tests/bitops.c | 54 +++++++++++++++++++
tools/testing/selftests/bpf/progs/bitops.c | 21 ++++++++
2 files changed, 75 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/bitops.c
create mode 100644 tools/testing/selftests/bpf/progs/bitops.c
diff --git a/tools/testing/selftests/bpf/prog_tests/bitops.c b/tools/testing/selftests/bpf/prog_tests/bitops.c
new file mode 100644
index 0000000000000..e4c68da626280
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/bitops.c
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright Leon Hwang */
+
+#include <test_progs.h>
+
+/* test_ffs64 tests the generic kfunc bpf_ffs64().
+ */
+static void test_ffs64(void)
+{
+ struct bpf_object *obj = NULL;
+ struct bpf_program *prog;
+ char buff[128] = {};
+ int err, prog_fd;
+
+ LIBBPF_OPTS(bpf_test_run_opts, topts,
+ .data_in = buff,
+ .data_size_in = sizeof(buff),
+ .repeat = 1,
+ );
+
+ err = bpf_prog_test_load("bitops.bpf.o", BPF_PROG_TYPE_SCHED_CLS, &obj,
+ &prog_fd);
+ if (!ASSERT_OK(err, "load obj"))
+ return;
+
+ prog = bpf_object__find_program_by_name(obj, "tc_ffs64");
+ if (!ASSERT_OK_PTR(prog, "find tc_ffs64"))
+ goto out;
+
+#define TEST_FFS(n) \
+ do { \
+ u64 __n = 1; \
+ \
+ *(u64 *)(void *) buff = (u64) (__n << n); \
+ err = bpf_prog_test_run_opts(prog_fd, &topts); \
+ ASSERT_OK(err, "run prog"); \
+ ASSERT_EQ(topts.retval, n, "run prog"); \
+ } while (0)
+
+ TEST_FFS(0);
+ TEST_FFS(1);
+ TEST_FFS(31);
+ TEST_FFS(63);
+
+#undef TEST_FFS
+out:
+ bpf_object__close(obj);
+}
+
+void test_bitops(void)
+{
+ if (test__start_subtest("bitops_ffs64"))
+ test_ffs64();
+}
diff --git a/tools/testing/selftests/bpf/progs/bitops.c b/tools/testing/selftests/bpf/progs/bitops.c
new file mode 100644
index 0000000000000..0863d1392b3d4
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/bitops.c
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright Leon Hwang */
+
+#include "vmlinux.h"
+#include <bpf/bpf_helpers.h>
+
+unsigned long bpf_ffs64(u64 word) __ksym;
+
+SEC("tc")
+int tc_ffs64(struct __sk_buff *skb)
+{
+ void *data_end = (void *)(long)skb->data_end;
+ u64 *data = (u64 *)(long)skb->data;
+
+ if ((void *)(u64)(data + 1) > data_end)
+ return -1;
+
+ return bpf_ffs64(*data);
+}
+
+char _license[] SEC("license") = "GPL";
--
2.42.1
next prev parent reply other threads:[~2024-01-31 15:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-31 15:56 [RFC PATCH bpf-next 0/2] bpf: Add generic kfunc bpf_ffs64() Leon Hwang
2024-01-31 15:56 ` [RFC PATCH bpf-next 1/2] " Leon Hwang
2024-01-31 15:56 ` Leon Hwang [this message]
2024-02-02 22:18 ` [RFC PATCH bpf-next 0/2] " Andrii Nakryiko
2024-02-04 19:19 ` Yonghong Song
2024-02-05 18:18 ` Andrii Nakryiko
2024-02-05 18:34 ` Yonghong Song
2024-03-03 13:18 ` Leon Hwang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240131155607.51157-3-hffilwlqm@gmail.com \
--to=hffilwlqm@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox