From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH V2 5/6] syscalls: Don't pass struct timespec to tst_syscall()
Date: Wed, 17 Jun 2020 14:22:06 +0200 [thread overview]
Message-ID: <20200617122206.GB8389@yuki.lan> (raw)
In-Reply-To: <20200522084205.hvkx4maxujzb2s2y@vireshk-i7>
Hi!
> > > int tst_clock_getres(clockid_t clk_id, struct timespec *res)
> > > {
> > > - return tst_syscall(__NR_clock_getres, clk_id, res);
> > > + int (*func)(clockid_t clk_id, void *ts);
> > > + struct tst_ts tts = { 0, };
> > > + int ret;
> > > +
> > > +#if defined(__NR_clock_getres_time64)
> > > + tts.type = TST_KERN_TIMESPEC;
> > > + func = sys_clock_getres64;
> > > +#elif defined(__NR_clock_getres)
> > > + tts.type = TST_KERN_OLD_TIMESPEC;
> > > + func = sys_clock_getres;
> > > +#else
> > > + tts.type = TST_LIBC_TIMESPEC;
> > > + func = libc_clock_getres;
> > > +#endif
> > > +
> > > + ret = func(clk_id, tst_ts_get(&tts));
> >
> > This is not enough to run on old kernels that have __NR_clock_getres
> > but don't have __NR_clock_getres_time64,
>
> What about reversing the order of the two ? Check __NR_clock_getres
> first ?
>
> > you need a runtime fallback
> > instead of a compile-time fallback.
>
> Why so ?
The existence of the __NR_... does not mean that particular syscall is
supported or even exists. As said previously LTP defines unimplemented
syscalls to -1 to avoid #ifdef hell.
Also even if the 64bit syscall is defined in headers on particular 32bit
platform calling it on old kernel will still fail because the
functionality is simply not there.
Hence we have to select the right function on the first call to the
tst_clock_* functions.
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2020-06-17 12:22 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-22 6:54 [LTP] [PATCH V2 0/6] syscalls: Remove incorrect usage of libc structures Viresh Kumar
2020-05-22 6:54 ` [LTP] [PATCH V2 1/6] tst_safe_clocks: Remove safe_clock_adjtime() Viresh Kumar
2020-05-22 6:54 ` [LTP] [PATCH V2 2/6] syscalls: settimeofday01: Set .restore_wallclock flag Viresh Kumar
2020-05-22 6:54 ` [LTP] [PATCH V2 3/6] syscalls: settimeofday02: Remove time restoration code Viresh Kumar
2020-05-22 6:54 ` [LTP] [PATCH V2 4/6] syscalls: settimeofday: Use gettimeofday() Viresh Kumar
2020-06-17 12:17 ` Cyril Hrubis
2020-05-22 6:54 ` [LTP] [PATCH V2 5/6] syscalls: Don't pass struct timespec to tst_syscall() Viresh Kumar
2020-05-22 8:02 ` Arnd Bergmann
2020-05-22 8:42 ` Viresh Kumar
2020-05-22 8:58 ` Cyril Hrubis
2020-06-17 12:22 ` Cyril Hrubis [this message]
2020-05-27 9:43 ` [LTP] [PATCH V3 " Viresh Kumar
2020-05-27 9:49 ` Arnd Bergmann
2020-06-17 12:30 ` Cyril Hrubis
2020-06-18 5:25 ` [LTP] [PATCH V4 " Viresh Kumar
2020-06-18 11:06 ` Cyril Hrubis
2020-07-03 9:55 ` Li Wang
2020-07-03 12:26 ` Harish
2020-07-03 12:59 ` Cyril Hrubis
2020-07-04 7:14 ` Li Wang
2020-07-06 8:44 ` Harish
2020-07-06 8:57 ` Li Wang
2020-07-06 9:21 ` Harish
2020-07-07 9:03 ` Cyril Hrubis
2020-07-07 9:18 ` Viresh Kumar
2020-07-07 11:49 ` Cyril Hrubis
2020-07-08 2:34 ` Viresh Kumar
2020-07-06 2:21 ` Viresh Kumar
2020-05-22 6:54 ` [LTP] [PATCH V2 6/6] syscalls: Don't pass struct timeval " Viresh Kumar
2020-06-17 14:08 ` Cyril Hrubis
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=20200617122206.GB8389@yuki.lan \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/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