Message ID | 20221107230950.7117-23-memxor@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | Local kptrs, BPF linked lists | expand |
On Mon, Nov 7, 2022 at 3:11 PM Kumar Kartikeya Dwivedi <memxor@gmail.com> wrote: > > Make updates in preparation for adding more test cases to this selftest: > - Convert from CHECK_ to ASSERT macros. > - Use BPF skeleton > - Fix typo sping -> spin > - Rename spinlock.c -> spin_lock.c > > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> > --- > .../selftests/bpf/prog_tests/spin_lock.c | 46 +++++++++++++++++++ > .../selftests/bpf/prog_tests/spinlock.c | 45 ------------------ > .../selftests/bpf/progs/test_spin_lock.c | 4 +- > 3 files changed, 48 insertions(+), 47 deletions(-) > create mode 100644 tools/testing/selftests/bpf/prog_tests/spin_lock.c > delete mode 100644 tools/testing/selftests/bpf/prog_tests/spinlock.c > [...] > +void test_spinlock(void) > +{ > + struct test_spin_lock *skel; > + pthread_t thread_id[4]; > + int prog_fd, i; > + void *ret; > + > + skel = test_spin_lock__open_and_load(); > + if (!ASSERT_OK_PTR(skel, "test_spin_lock__open_and_load")) > + return; > + prog_fd = bpf_program__fd(skel->progs.bpf_spin_lock_test); > + for (i = 0; i < 4; i++) > + if (!ASSERT_OK(pthread_create(&thread_id[i], NULL, > + &spin_lock_thread, &prog_fd), "pthread_create")) I mean... does that pthread_create() call have to happen inside ASSERT_OK? err = pthread_create(...) if (!ASSERT_OK(err, "pthread_create")) goto end; > + goto end; > + > + for (i = 0; i < 4; i++) { > + if (!ASSERT_OK(pthread_join(thread_id[i], &ret), "pthread_join")) > + goto end; > + if (!ASSERT_EQ(ret, &prog_fd, "ret == prog_fd")) > + goto end; > + } > +end: > + test_spin_lock__destroy(skel); > +} [...]
On Wed, Nov 09, 2022 at 05:43:34AM IST, Andrii Nakryiko wrote: > On Mon, Nov 7, 2022 at 3:11 PM Kumar Kartikeya Dwivedi <memxor@gmail.com> wrote: > > > > Make updates in preparation for adding more test cases to this selftest: > > - Convert from CHECK_ to ASSERT macros. > > - Use BPF skeleton > > - Fix typo sping -> spin > > - Rename spinlock.c -> spin_lock.c > > > > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> > > --- > > .../selftests/bpf/prog_tests/spin_lock.c | 46 +++++++++++++++++++ > > .../selftests/bpf/prog_tests/spinlock.c | 45 ------------------ > > .../selftests/bpf/progs/test_spin_lock.c | 4 +- > > 3 files changed, 48 insertions(+), 47 deletions(-) > > create mode 100644 tools/testing/selftests/bpf/prog_tests/spin_lock.c > > delete mode 100644 tools/testing/selftests/bpf/prog_tests/spinlock.c > > > > [...] > > > +void test_spinlock(void) > > +{ > > + struct test_spin_lock *skel; > > + pthread_t thread_id[4]; > > + int prog_fd, i; > > + void *ret; > > + > > + skel = test_spin_lock__open_and_load(); > > + if (!ASSERT_OK_PTR(skel, "test_spin_lock__open_and_load")) > > + return; > > + prog_fd = bpf_program__fd(skel->progs.bpf_spin_lock_test); > > + for (i = 0; i < 4; i++) > > + if (!ASSERT_OK(pthread_create(&thread_id[i], NULL, > > + &spin_lock_thread, &prog_fd), "pthread_create")) > > I mean... does that pthread_create() call have to happen inside ASSERT_OK? > > err = pthread_create(...) > if (!ASSERT_OK(err, "pthread_create")) > goto end; > Ack, I'll rewrite it like this.
diff --git a/tools/testing/selftests/bpf/prog_tests/spin_lock.c b/tools/testing/selftests/bpf/prog_tests/spin_lock.c new file mode 100644 index 000000000000..1f720002fe56 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/spin_lock.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <test_progs.h> +#include <network_helpers.h> + +#include "test_spin_lock.skel.h" + +static void *spin_lock_thread(void *arg) +{ + int err, prog_fd = *(u32 *) arg; + LIBBPF_OPTS(bpf_test_run_opts, topts, + .data_in = &pkt_v4, + .data_size_in = sizeof(pkt_v4), + .repeat = 10000, + ); + + err = bpf_prog_test_run_opts(prog_fd, &topts); + ASSERT_OK(err, "test_run"); + ASSERT_OK(topts.retval, "test_run retval"); + pthread_exit(arg); +} + +void test_spinlock(void) +{ + struct test_spin_lock *skel; + pthread_t thread_id[4]; + int prog_fd, i; + void *ret; + + skel = test_spin_lock__open_and_load(); + if (!ASSERT_OK_PTR(skel, "test_spin_lock__open_and_load")) + return; + prog_fd = bpf_program__fd(skel->progs.bpf_spin_lock_test); + for (i = 0; i < 4; i++) + if (!ASSERT_OK(pthread_create(&thread_id[i], NULL, + &spin_lock_thread, &prog_fd), "pthread_create")) + goto end; + + for (i = 0; i < 4; i++) { + if (!ASSERT_OK(pthread_join(thread_id[i], &ret), "pthread_join")) + goto end; + if (!ASSERT_EQ(ret, &prog_fd, "ret == prog_fd")) + goto end; + } +end: + test_spin_lock__destroy(skel); +} diff --git a/tools/testing/selftests/bpf/prog_tests/spinlock.c b/tools/testing/selftests/bpf/prog_tests/spinlock.c deleted file mode 100644 index 15eb1372d771..000000000000 --- a/tools/testing/selftests/bpf/prog_tests/spinlock.c +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include <test_progs.h> -#include <network_helpers.h> - -static void *spin_lock_thread(void *arg) -{ - int err, prog_fd = *(u32 *) arg; - LIBBPF_OPTS(bpf_test_run_opts, topts, - .data_in = &pkt_v4, - .data_size_in = sizeof(pkt_v4), - .repeat = 10000, - ); - - err = bpf_prog_test_run_opts(prog_fd, &topts); - ASSERT_OK(err, "test_run"); - ASSERT_OK(topts.retval, "test_run retval"); - pthread_exit(arg); -} - -void test_spinlock(void) -{ - const char *file = "./test_spin_lock.bpf.o"; - pthread_t thread_id[4]; - struct bpf_object *obj = NULL; - int prog_fd; - int err = 0, i; - void *ret; - - err = bpf_prog_test_load(file, BPF_PROG_TYPE_CGROUP_SKB, &obj, &prog_fd); - if (CHECK_FAIL(err)) { - printf("test_spin_lock:bpf_prog_test_load errno %d\n", errno); - goto close_prog; - } - for (i = 0; i < 4; i++) - if (CHECK_FAIL(pthread_create(&thread_id[i], NULL, - &spin_lock_thread, &prog_fd))) - goto close_prog; - - for (i = 0; i < 4; i++) - if (CHECK_FAIL(pthread_join(thread_id[i], &ret) || - ret != (void *)&prog_fd)) - goto close_prog; -close_prog: - bpf_object__close(obj); -} diff --git a/tools/testing/selftests/bpf/progs/test_spin_lock.c b/tools/testing/selftests/bpf/progs/test_spin_lock.c index 7e88309d3229..5bd10409285b 100644 --- a/tools/testing/selftests/bpf/progs/test_spin_lock.c +++ b/tools/testing/selftests/bpf/progs/test_spin_lock.c @@ -45,8 +45,8 @@ struct { #define CREDIT_PER_NS(delta, rate) (((delta) * rate) >> 20) -SEC("tc") -int bpf_sping_lock_test(struct __sk_buff *skb) +SEC("cgroup_skb/ingress") +int bpf_spin_lock_test(struct __sk_buff *skb) { volatile int credit = 0, max_credit = 100, pkt_len = 64; struct hmap_elem zero = {}, *val;
Make updates in preparation for adding more test cases to this selftest: - Convert from CHECK_ to ASSERT macros. - Use BPF skeleton - Fix typo sping -> spin - Rename spinlock.c -> spin_lock.c Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> --- .../selftests/bpf/prog_tests/spin_lock.c | 46 +++++++++++++++++++ .../selftests/bpf/prog_tests/spinlock.c | 45 ------------------ .../selftests/bpf/progs/test_spin_lock.c | 4 +- 3 files changed, 48 insertions(+), 47 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/spin_lock.c delete mode 100644 tools/testing/selftests/bpf/prog_tests/spinlock.c