On Tue, Aug 15, 2023 at 8:56 AM Andre Przywara <andre.przywara@xxxxxxx> wrote: > > As cachestat is a new syscall, it won't be available on older kernels, > for instance those running on a build machine. In this case, a run > reports all tests as "not ok" at the moment. Interesting - I was under the assumption that if you backported the selftests for cachestat, you would also backport the syscall's implementation and wiring. But yeah, I guess if you build with !CONFIG_CACHESTAT_SYSCALL, these tests would fail. > > Test for the cachestat syscall availability first, before doing further > tests, and bail out early with a TAP SKIP comment. > > This also uses the opportunity to add the proper TAP headers, and add > one check for the syscall error handling (illegal file descriptor). Thanks for the addition! > > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> > --- > .../selftests/cachestat/test_cachestat.c | 22 ++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/cachestat/test_cachestat.c b/tools/testing/selftests/cachestat/test_cachestat.c > index a5a4ac8dcb76c..77620e7ecf562 100644 > --- a/tools/testing/selftests/cachestat/test_cachestat.c > +++ b/tools/testing/selftests/cachestat/test_cachestat.c > @@ -15,6 +15,8 @@ > > #include "../kselftest.h" > > +#define NR_TESTS 8 > + > static const char * const dev_files[] = { > "/dev/zero", "/dev/null", "/dev/urandom", > "/proc/version", "/proc" > @@ -235,7 +237,25 @@ bool test_cachestat_shmem(void) > > int main(void) > { > - int ret = 0; > + int ret; > + > + ksft_print_header(); > + > + ret = syscall(__NR_cachestat, -1, NULL, NULL, 0); > + if (ret == -1 && errno == ENOSYS) { nit: if (ret && errno == ENOSYS) sounds cleaner, but up to you. > + printf("1..0 # Skipped: cachestat syscall not available\n"); nit: perhaps ksft_print_msg()? > + return KSFT_SKIP; > + } > + > + ksft_set_plan(NR_TESTS); > + > + if (ret == -1 && errno == EBADF) { > + ksft_test_result_pass("bad file descriptor recognized\n"); > + ret = 0; > + } else { > + ksft_test_result_fail("bad file descriptor ignored\n"); > + ret = 1; > + } Nice! > > for (int i = 0; i < 5; i++) { > const char *dev_filename = dev_files[i]; > -- > 2.25.1 > Nitpicking aside: Acked-by: Nhat Pham <nphamcs@xxxxxxxxx>