Module Name: src Committed By: riastradh Date: Thu Dec 19 23:41:46 UTC 2024
Modified Files: src/sys/kern: kern_time.c src/tests/lib/libc/sys: t_timer_create.c Log Message: timer_settime(2): Return relative duration remaining. Not absolute time of next event. PR kern/58917: timer_settime and timerfd_settime return absolute time of next event To generate a diff of this commit: cvs rdiff -u -r1.222 -r1.223 src/sys/kern/kern_time.c cvs rdiff -u -r1.8 -r1.9 src/tests/lib/libc/sys/t_timer_create.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_time.c diff -u src/sys/kern/kern_time.c:1.222 src/sys/kern/kern_time.c:1.223 --- src/sys/kern/kern_time.c:1.222 Thu Dec 19 23:36:49 2024 +++ src/sys/kern/kern_time.c Thu Dec 19 23:41:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time.c,v 1.222 2024/12/19 23:36:49 riastradh Exp $ */ +/* $NetBSD: kern_time.c,v 1.223 2024/12/19 23:41:45 riastradh Exp $ */ /*- * Copyright (c) 2000, 2004, 2005, 2007, 2008, 2009, 2020 @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.222 2024/12/19 23:36:49 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.223 2024/12/19 23:41:45 riastradh Exp $"); #include <sys/param.h> #include <sys/resourcevar.h> @@ -1386,7 +1386,7 @@ dotimer_settime(int timerid, struct itim struct itimerspec *ovalue, int flags, struct proc *p) { struct timespec now; - struct itimerspec val, oval; + struct itimerspec val; struct ptimers *pts; struct itimer *it; int error; @@ -1407,7 +1407,8 @@ dotimer_settime(int timerid, struct itim return EINVAL; } - oval = it->it_time; + if (ovalue) + itimer_gettime(it, ovalue); it->it_time = val; /* @@ -1450,9 +1451,6 @@ dotimer_settime(int timerid, struct itim KASSERT(error == 0); itimer_unlock(); - if (ovalue) - *ovalue = oval; - return 0; } Index: src/tests/lib/libc/sys/t_timer_create.c diff -u src/tests/lib/libc/sys/t_timer_create.c:1.8 src/tests/lib/libc/sys/t_timer_create.c:1.9 --- src/tests/lib/libc/sys/t_timer_create.c:1.8 Thu Dec 19 23:36:49 2024 +++ src/tests/lib/libc/sys/t_timer_create.c Thu Dec 19 23:41:46 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_timer_create.c,v 1.8 2024/12/19 23:36:49 riastradh Exp $ */ +/* $NetBSD: t_timer_create.c,v 1.9 2024/12/19 23:41:46 riastradh Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -168,23 +168,11 @@ timer_signal_create(clockid_t cid, enum timespecadd(&rtim.it_value, (&(const struct timespec){2, 0}), &rtim.it_value); } - atf_tc_expect_fail("PR kern/58917:" - " timer_settime and timerfd_settime return" - " absolute time of next event"); ATF_CHECK_MSG(timespeccmp(&otim.it_value, &rtim.it_value, <=), "time remaining %lld sec %d nsec," " expected at most %lld sec %d nsec", (long long)otim.it_value.tv_sec, (int)otim.it_value.tv_nsec, (long long)rtim.it_value.tv_sec, (int)rtim.it_value.tv_nsec); - atf_tc_expect_pass(); - - /* - * Until we fix PR kern/58917, adjust it to be relative to the - * start time. - */ - timespecsub(&otim.it_value, &t0, &otim.it_value); - fprintf(stderr, "adjust otim to %lld sec %d nsec\n", - (long long)otim.it_value.tv_sec, (int)otim.it_value.tv_nsec); #if 0 /*