What are the differences among these similar nanosleep functions, especially the second one and the third one:
https://gitlab.denx.de/Xenomai/xenomai/-/blob/v3.1/lib/cobalt/clock.c: line:353 COBALT_IMPL(int, nanosleep, (const struct timespec *rqtp, struct timespec *rmtp)) { int ret; ret = __WRAP(clock_nanosleep(CLOCK_REALTIME, 0, rqtp, rmtp)); if (ret) { errno = ret; return -1; } return 0; } https://gitlab.denx.de/Xenomai/xenomai/-/blob/v3.1/kernel/cobalt/posix/clock.c line:272 int __cobalt_clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqt, struct timespec *rmt) { struct restart_block *restart; struct xnthread *cur; xnsticks_t timeout, rem; spl_t s; trace_cobalt_clock_nanosleep(clock_id, flags, rqt); if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_MONOTONIC_RAW && clock_id != CLOCK_REALTIME) return -EOPNOTSUPP; if (rqt->tv_sec < 0) return -EINVAL; if ((unsigned long)rqt->tv_nsec >= ONE_BILLION) return -EINVAL; if (flags & ~TIMER_ABSTIME) return -EINVAL; cur = xnthread_current(); ... } https://gitlab.denx.de/Xenomai/xenomai/-/blob/v3.1/kernel/cobalt/posix/clock.c line:360 COBALT_SYSCALL(clock_nanosleep, primary, (clockid_t clock_id, int flags, const struct timespec __user *u_rqt, struct timespec __user *u_rmt)) { struct timespec rqt, rmt, *rmtp = NULL; int ret; if (u_rmt) rmtp = &rmt; if (cobalt_copy_from_user(&rqt, u_rqt, sizeof(rqt))) return -EFAULT; ret = __cobalt_clock_nanosleep(clock_id, flags, &rqt, rmtp); if (ret == -EINTR && flags == 0 && rmtp) { if (cobalt_copy_to_user(u_rmt, rmtp, sizeof(*u_rmt))) return -EFAULT; } return ret; } BTW, the patch that you required has been sent out in the last email (refer to https://www.mail-archive.com/[email protected]/msg17909.html). Thank you for your attention to this matter. Looking forward to hearing from you. Best Regards.
