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
/*