Re: [PATCH 3/6] cyclictest: Fix error error returns for uclibc clock_nanosleep() fallback

Florian Bezdeka <[email protected]> Tue, 07 Apr 2026 10:59:02 +0200
Newsgroups org.kernel.vger.linux-rt-users
Message-ID <[email protected]>
On Tue, 2026-04-07 at 10:50 +0200, Thomas Weißschuh (Schneider Electric)
wrote:
> On Tue, Apr 07, 2026 at 10:16:08AM +0200, Florian Bezdeka wrote:
> > On Tue, 2026-04-07 at 08:48 +0200, Thomas Weißschuh (Schneider Electric)
> > wrote:
> > > clock_nanosleep() is expected to return errors as a positive number,
> > > without relying on errno.
> > > 
> > > Signed-off-by: Thomas Weißschuh (Schneider Electric) <[email protected]>
> > > ---
> > >  src/cyclictest/cyclictest.c | 8 +++++++-
> > >  1 file changed, 7 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
> > > index 0c30e767e685..dacf0b7a718e 100644
> > > --- a/src/cyclictest/cyclictest.c
> > > +++ b/src/cyclictest/cyclictest.c
> > > @@ -62,12 +62,18 @@
> > >  static int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *req,
> > >  			   struct timespec *rem)
> > >  {
> > > +	int retval;
> > > +
> > >  	if (clock_id == CLOCK_THREAD_CPUTIME_ID)
> > >  		return -EINVAL;
> > >  	if (clock_id == CLOCK_PROCESS_CPUTIME_ID)
> > >  		clock_id = MAKE_PROCESS_CPUCLOCK(0, CPUCLOCK_SCHED);
> > >  
> > > -	return syscall(__NR_clock_nanosleep, clock_id, flags, req, rem);
> > > +	retval = syscall(__NR_clock_nanosleep, clock_id, flags, req, rem);
> > > +	if (retval == 0)
> > > +		return 0;
> > > +
> > > +	return errno;
> > 
> > That doesn't match with the commit message above, does it? syscall() to
> > my knowledge will not set/touch errno. syscall() will return whatever
> > came back from the kernel.
> 
> syscall() *does* indeed touch errno. From syscall(2):
> "A -1 return value indicates an error, and an error number is stored in errno."

Right. I stopped reading to early. 

I would vote for

if (retval == -1)
	return errno;

then. But that's just a minor detail.

> 
> Unfortunately there is no standard variant of syscall() which does not
> touch errno.
> 
> > The value of errno is "undefined" (in terms of "contains the last error
> > code, wherever this is coming from") here.
> > 
> > Looking at patch 4: Looks like this patch can be dropped.
> 
> No, this patch (patch 3) is only for the fallback definition of uclibc.
> Patch 4 is necessary for all libcs. For some (to me unknown) reason
> clock_nanosleep() works different from all the other libc functions.

POSIX...
> > 

Thanks for the clarifications. Here as well as in the other thread.

Best regards,
Florian