Message ID | 20230801094833.4146816-1-ruanjinjie@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [bpf-next,v3] selftests/bpf: replace fall through comment by fallthrough pseudo-keyword | expand |
On 8/1/23 2:48 AM, Ruan Jinjie wrote: > Replace the existing /* fall through */ comments with the > new pseudo-keyword macro fallthrough[1]. > > [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through > > Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com> > --- > v3: > - Update the subject prefix and fix the 'fallthrough' undeclared build error. > --- > v2: > - Update the subject and commit message. > --- > tools/testing/selftests/bpf/prog_tests/kfunc_call.c | 4 ++-- > tools/testing/selftests/bpf/progs/test_cls_redirect.c | 2 +- > tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c | 2 +- > tools/testing/selftests/bpf/test_verifier.c | 3 ++- > 4 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c > index a543742cd7bd..0fd08172965a 100644 > --- a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c > +++ b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c > @@ -101,7 +101,7 @@ static void verify_success(struct kfunc_test_params *param) > case syscall_test: > topts.ctx_in = &args; > topts.ctx_size_in = sizeof(args); > - /* fallthrough */ > + fallthrough; This won't work for clang built kernel/selftests: In file included from progs/test_cls_redirect_subprogs.c:2: progs/test_cls_redirect.c:303:4: error: use of undeclared identifier 'fallthrough' 303 | fallthrough; | ^ CLNG-BPF [test_maps] netns_cookie_prog.bpf.o CLNG-BPF [test_maps] test_skmsg_load_helpers.bpf.o CLNG-BPF [test_maps] bpf_iter_setsockopt.bpf.o CLNG-BPF [test_maps] timer.bpf.o progs/test_cls_redirect.c:303:4: error: use of undeclared identifier 'fallthrough' 303 | fallthrough; | ^ Try to build the kernel with: make -j LLVM=1 make headers_install and then build the selftests with make -C tools/testing/selftests/bpf -j LLVM=1 [~/work/bpf-next/tools/include (master)]$ egrep -r fallthrough egrep: warning: egrep is obsolescent; using grep -E linux/compiler-gcc.h:#if __has_attribute(__fallthrough__) linux/compiler-gcc.h:# define fallthrough __attribute__((__fallthrough__)) linux/compiler-gcc.h:# define fallthrough do {} while (0) /* fallthrough */ [~/work/bpf-next/tools/include (master)]$ Looks like 'fallthrough' is not defined for clang build tools/selftests. > case syscall_null_ctx_test: > break; > case tc_test: > @@ -167,7 +167,7 @@ static void verify_fail(struct kfunc_test_params *param) > case syscall_test: > topts.ctx_in = &args; > topts.ctx_size_in = sizeof(args); > - /* fallthrough */ > + fallthrough; > case syscall_null_ctx_test: > break; > case tc_test: [...]
On 2023/8/1 23:40, Yonghong Song wrote: > > > On 8/1/23 2:48 AM, Ruan Jinjie wrote: >> Replace the existing /* fall through */ comments with the >> new pseudo-keyword macro fallthrough[1]. >> >> [1] >> https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through >> >> Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com> >> --- >> v3: >> - Update the subject prefix and fix the 'fallthrough' undeclared build >> error. >> --- >> v2: >> - Update the subject and commit message. >> --- >> tools/testing/selftests/bpf/prog_tests/kfunc_call.c | 4 ++-- >> tools/testing/selftests/bpf/progs/test_cls_redirect.c | 2 +- >> tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c | 2 +- >> tools/testing/selftests/bpf/test_verifier.c | 3 ++- >> 4 files changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c >> b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c >> index a543742cd7bd..0fd08172965a 100644 >> --- a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c >> +++ b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c >> @@ -101,7 +101,7 @@ static void verify_success(struct >> kfunc_test_params *param) >> case syscall_test: >> topts.ctx_in = &args; >> topts.ctx_size_in = sizeof(args); >> - /* fallthrough */ >> + fallthrough; > > This won't work for clang built kernel/selftests: > > In file included from progs/test_cls_redirect_subprogs.c:2: > progs/test_cls_redirect.c:303:4: error: use of undeclared identifier > 'fallthrough' > 303 | fallthrough; > | ^ > CLNG-BPF [test_maps] netns_cookie_prog.bpf.o > CLNG-BPF [test_maps] test_skmsg_load_helpers.bpf.o > CLNG-BPF [test_maps] bpf_iter_setsockopt.bpf.o > CLNG-BPF [test_maps] timer.bpf.o > progs/test_cls_redirect.c:303:4: error: use of undeclared identifier > 'fallthrough' > 303 | fallthrough; Thank you very much! I'll fix it in v4. > | ^ > > Try to build the kernel with: > make -j LLVM=1 > make headers_install > > and then build the selftests with > make -C tools/testing/selftests/bpf -j LLVM=1 > > [~/work/bpf-next/tools/include (master)]$ egrep -r fallthrough > egrep: warning: egrep is obsolescent; using grep -E > linux/compiler-gcc.h:#if __has_attribute(__fallthrough__) > linux/compiler-gcc.h:# define fallthrough __attribute__((__fallthrough__)) > linux/compiler-gcc.h:# define fallthrough do {} while > (0) /* fallthrough */ > [~/work/bpf-next/tools/include (master)]$ > > Looks like 'fallthrough' is not defined for clang build tools/selftests. > >> case syscall_null_ctx_test: >> break; >> case tc_test: >> @@ -167,7 +167,7 @@ static void verify_fail(struct kfunc_test_params >> *param) >> case syscall_test: >> topts.ctx_in = &args; >> topts.ctx_size_in = sizeof(args); >> - /* fallthrough */ >> + fallthrough; >> case syscall_null_ctx_test: >> break; >> case tc_test: > [...]
diff --git a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c index a543742cd7bd..0fd08172965a 100644 --- a/tools/testing/selftests/bpf/prog_tests/kfunc_call.c +++ b/tools/testing/selftests/bpf/prog_tests/kfunc_call.c @@ -101,7 +101,7 @@ static void verify_success(struct kfunc_test_params *param) case syscall_test: topts.ctx_in = &args; topts.ctx_size_in = sizeof(args); - /* fallthrough */ + fallthrough; case syscall_null_ctx_test: break; case tc_test: @@ -167,7 +167,7 @@ static void verify_fail(struct kfunc_test_params *param) case syscall_test: topts.ctx_in = &args; topts.ctx_size_in = sizeof(args); - /* fallthrough */ + fallthrough; case syscall_null_ctx_test: break; case tc_test: diff --git a/tools/testing/selftests/bpf/progs/test_cls_redirect.c b/tools/testing/selftests/bpf/progs/test_cls_redirect.c index 66b304982245..f97960759558 100644 --- a/tools/testing/selftests/bpf/progs/test_cls_redirect.c +++ b/tools/testing/selftests/bpf/progs/test_cls_redirect.c @@ -300,7 +300,7 @@ bool pkt_skip_ipv6_extension_headers(buf_t *pkt, case IPPROTO_FRAGMENT: *is_fragment = true; /* NB: We don't check that hdrlen == 0 as per spec. */ - /* fallthrough; */ + fallthrough; case IPPROTO_HOPOPTS: case IPPROTO_ROUTING: diff --git a/tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c b/tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c index f41c81212ee9..54dbf307c692 100644 --- a/tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c +++ b/tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c @@ -204,7 +204,7 @@ static bool pkt_skip_ipv6_extension_headers(struct bpf_dynptr *dynptr, __u64 *of case IPPROTO_FRAGMENT: *is_fragment = true; /* NB: We don't check that hdrlen == 0 as per spec. */ - /* fallthrough; */ + fallthrough; case IPPROTO_HOPOPTS: case IPPROTO_ROUTING: diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 31f1c935cd07..8f2e3852c207 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -28,6 +28,7 @@ #include <linux/bpf.h> #include <linux/if_ether.h> #include <linux/btf.h> +#include <linux/compiler.h> #include <bpf/btf.h> #include <bpf/bpf.h> @@ -1289,7 +1290,7 @@ static int do_prog_test_run(int fd_prog, bool unpriv, uint32_t expected_val, printf("Did not run the program (no permission) "); return 0; } - /* fallthrough; */ + fallthrough; default: printf("FAIL: Unexpected bpf_prog_test_run error (%s) ", strerror(saved_errno));
Replace the existing /* fall through */ comments with the new pseudo-keyword macro fallthrough[1]. [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com> --- v3: - Update the subject prefix and fix the 'fallthrough' undeclared build error. --- v2: - Update the subject and commit message. --- tools/testing/selftests/bpf/prog_tests/kfunc_call.c | 4 ++-- tools/testing/selftests/bpf/progs/test_cls_redirect.c | 2 +- tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c | 2 +- tools/testing/selftests/bpf/test_verifier.c | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-)