Messages in this thread | | | Date | Wed, 16 Aug 2023 11:11:49 -0600 | Subject | Re: [PATCH 3/3] selftests: cachestat: test for cachestat availability | From | Shuah Khan <> |
| |
On 8/15/23 09:56, Andre Przywara 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. > > 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). > > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > --- > .../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) { > + printf("1..0 # Skipped: cachestat syscall not available\n"); > + return KSFT_SKIP; What happens when other errors besides ENOSYS? The test shouldn't continue.
> + } > + > + 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; > + } > > for (int i = 0; i < 5; i++) { > const char *dev_filename = dev_files[i];
thanks, -- Shuah
| |