Module Name: src Committed By: christos Date: Sun Mar 29 19:21:20 UTC 2009
Modified Files: src/sys/compat/common: kern_time_50.c src/sys/compat/linux/common: linux_misc.c src/sys/compat/linux32/common: linux32_unistd.c src/sys/compat/netbsd32: netbsd32_compat_50.c netbsd32_select.c src/sys/compat/osf1: osf1_generic.c src/sys/kern: kern_event.c kern_time.c sys_select.c src/sys/netsmb: smb_trantcp.c src/sys/sys: poll.h select.h timevar.h Log Message: Move the internal poll/select related API's to use timespec instead of timeval (rides the uvm bump). To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/compat/common/kern_time_50.c cvs rdiff -u -r1.206 -r1.207 src/sys/compat/linux/common/linux_misc.c cvs rdiff -u -r1.31 -r1.32 src/sys/compat/linux32/common/linux32_unistd.c cvs rdiff -u -r1.3 -r1.4 src/sys/compat/netbsd32/netbsd32_compat_50.c cvs rdiff -u -r1.16 -r1.17 src/sys/compat/netbsd32/netbsd32_select.c cvs rdiff -u -r1.13 -r1.14 src/sys/compat/osf1/osf1_generic.c cvs rdiff -u -r1.61 -r1.62 src/sys/kern/kern_event.c cvs rdiff -u -r1.159 -r1.160 src/sys/kern/kern_time.c cvs rdiff -u -r1.13 -r1.14 src/sys/kern/sys_select.c cvs rdiff -u -r1.41 -r1.42 src/sys/netsmb/smb_trantcp.c cvs rdiff -u -r1.13 -r1.14 src/sys/sys/poll.h cvs rdiff -u -r1.34 -r1.35 src/sys/sys/select.h cvs rdiff -u -r1.24 -r1.25 src/sys/sys/timevar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/kern_time_50.c diff -u src/sys/compat/common/kern_time_50.c:1.6 src/sys/compat/common/kern_time_50.c:1.7 --- src/sys/compat/common/kern_time_50.c:1.6 Thu Mar 26 18:22:14 2009 +++ src/sys/compat/common/kern_time_50.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time_50.c,v 1.6 2009/03/26 22:22:14 gmcgarry Exp $ */ +/* $NetBSD: kern_time_50.c,v 1.7 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.6 2009/03/26 22:22:14 gmcgarry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.7 2009/03/29 19:21:19 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_ntp.h" @@ -414,21 +414,21 @@ syscallarg(fd_set *) ex; syscallarg(struct timeval50 *) tv; } */ - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; struct timeval50 atv50; int error; if (SCARG(uap, tv)) { - error = copyin(SCARG(uap, tv), (void *)&atv50, - sizeof(atv50)); + error = copyin(SCARG(uap, tv), (void *)&atv50, sizeof(atv50)); if (error) return error; - timeval50_to_timeval(&atv50, &atv); - tv = &atv; + ats.tv_sec = atv50.tv_sec; + ats.tv_nsec = atv50.tv_usec * 1000; + ts = &ats; } return selcommon(l, retval, SCARG(uap, nd), SCARG(uap, in), - SCARG(uap, ou), SCARG(uap, ex), tv, NULL); + SCARG(uap, ou), SCARG(uap, ex), ts, NULL); } int @@ -444,8 +444,7 @@ syscallarg(sigset_t *) mask; } */ struct timespec50 ats50; - struct timespec ats; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; int error; @@ -454,9 +453,7 @@ if (error) return error; timespec50_to_timespec(&ats50, &ats); - atv.tv_sec = ats.tv_sec; - atv.tv_usec = ats.tv_nsec / 1000; - tv = &atv; + ts = &ats; } if (SCARG(uap, mask) != NULL) { error = copyin(SCARG(uap, mask), &amask, sizeof(amask)); @@ -466,7 +463,7 @@ } return selcommon(l, retval, SCARG(uap, nd), SCARG(uap, in), - SCARG(uap, ou), SCARG(uap, ex), tv, mask); + SCARG(uap, ou), SCARG(uap, ex), ts, mask); } int compat_50_sys_pollts(struct lwp *l, const struct compat_50_sys_pollts_args *uap, @@ -478,8 +475,7 @@ syscallarg(const struct timespec50 *) ts; syscallarg(const sigset_t *) mask; } */ - struct timespec ats; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; struct timespec50 ats50; sigset_t amask, *mask = NULL; int error; @@ -489,9 +485,7 @@ if (error) return error; timespec50_to_timespec(&ats50, &ats); - atv.tv_sec = ats.tv_sec; - atv.tv_usec = ats.tv_nsec / 1000; - tv = &atv; + ts = &ats; } if (SCARG(uap, mask)) { error = copyin(SCARG(uap, mask), &amask, sizeof(amask)); @@ -501,7 +495,7 @@ } return pollcommon(l, retval, SCARG(uap, fds), SCARG(uap, nfds), - tv, mask); + ts, mask); } int Index: src/sys/compat/linux/common/linux_misc.c diff -u src/sys/compat/linux/common/linux_misc.c:1.206 src/sys/compat/linux/common/linux_misc.c:1.207 --- src/sys/compat/linux/common/linux_misc.c:1.206 Sat Mar 14 17:04:18 2009 +++ src/sys/compat/linux/common/linux_misc.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_misc.c,v 1.206 2009/03/14 21:04:18 dsl Exp $ */ +/* $NetBSD: linux_misc.c,v 1.207 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc. @@ -57,7 +57,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.206 2009/03/14 21:04:18 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.207 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -854,7 +854,7 @@ int linux_select1(struct lwp *l, register_t *retval, int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct linux_timeval *timeout) { - struct timeval tv0, tv1, utv, *tv = NULL; + struct timespec ts0, ts1, uts, *ts = NULL; struct linux_timeval ltv; int error; @@ -865,28 +865,28 @@ if (timeout) { if ((error = copyin(timeout, <v, sizeof(ltv)))) return error; - utv.tv_sec = ltv.tv_sec; - utv.tv_usec = ltv.tv_usec; - if (itimerfix(&utv)) { + uts.tv_sec = ltv.tv_sec; + uts.tv_nsec = ltv.tv_usec * 1000; + if (itimespecfix(&uts)) { /* * The timeval was invalid. Convert it to something * valid that will act as it does under Linux. */ - utv.tv_sec += utv.tv_usec / 1000000; - utv.tv_usec %= 1000000; - if (utv.tv_usec < 0) { - utv.tv_sec -= 1; - utv.tv_usec += 1000000; + uts.tv_sec += uts.tv_nsec / 1000000000; + uts.tv_nsec %= 1000000000; + if (uts.tv_nsec < 0) { + uts.tv_sec -= 1; + uts.tv_nsec += 1000000000; } - if (utv.tv_sec < 0) - timerclear(&utv); + if (uts.tv_sec < 0) + timespecclear(&uts); } - tv = &utv; - microtime(&tv0); + ts = &uts; + nanotime(&ts0); } error = selcommon(l, retval, nfds, readfds, writefds, exceptfds, - tv, NULL); + ts, NULL); if (error) { /* @@ -906,15 +906,15 @@ * before we started the call, and subtracting * that result from the user-supplied value. */ - microtime(&tv1); - timersub(&tv1, &tv0, &tv1); - timersub(&utv, &tv1, &utv); - if (utv.tv_sec < 0) - timerclear(&utv); + nanotime(&ts1); + timespecsub(&ts1, &ts0, &ts1); + timespecsub(&uts, &ts1, &uts); + if (uts.tv_sec < 0) + timespecclear(&uts); } else - timerclear(&utv); - ltv.tv_sec = utv.tv_sec; - ltv.tv_usec = utv.tv_usec; + timespecclear(&uts); + ltv.tv_sec = uts.tv_sec; + ltv.tv_usec = uts.tv_nsec / 1000; if ((error = copyout(<v, timeout, sizeof(ltv)))) return error; } Index: src/sys/compat/linux32/common/linux32_unistd.c diff -u src/sys/compat/linux32/common/linux32_unistd.c:1.31 src/sys/compat/linux32/common/linux32_unistd.c:1.32 --- src/sys/compat/linux32/common/linux32_unistd.c:1.31 Sun Mar 15 11:56:50 2009 +++ src/sys/compat/linux32/common/linux32_unistd.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: linux32_unistd.c,v 1.31 2009/03/15 15:56:50 cegger Exp $ */ +/* $NetBSD: linux32_unistd.c,v 1.32 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux32_unistd.c,v 1.31 2009/03/15 15:56:50 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux32_unistd.c,v 1.32 2009/03/29 19:21:19 christos Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -147,11 +147,10 @@ fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - struct timeval tv0, tv1, utv, *tv = NULL; + struct timespec ts0, ts1, uts, *ts = NULL; struct netbsd32_timeval50 utv32; int error; - timerclear(&utv); /* XXX GCC4 */ /* * Store current time for computation of the amount of @@ -161,28 +160,30 @@ if ((error = copyin(timeout, &utv32, sizeof(utv32)))) return error; - netbsd32_to_timeval50(&utv32, &utv); + uts.tv_sec = utv32.tv_sec; + uts.tv_nsec = utv32.tv_usec * 1000; - if (itimerfix(&utv)) { + if (itimespecfix(&uts)) { /* * The timeval was invalid. Convert it to something * valid that will act as it does under Linux. */ - utv.tv_sec += utv.tv_usec / 1000000; - utv.tv_usec %= 1000000; - if (utv.tv_usec < 0) { - utv.tv_sec -= 1; - utv.tv_usec += 1000000; + uts.tv_sec += uts.tv_nsec / 1000000000; + uts.tv_nsec %= 1000000000; + if (uts.tv_nsec < 0) { + uts.tv_sec -= 1; + uts.tv_nsec += 1000000000; } - if (utv.tv_sec < 0) - timerclear(&utv); + if (uts.tv_sec < 0) + timespecclear(&uts); } - microtime(&tv0); - tv = &utv; - } + nanotime(&ts0); + ts = &uts; + } else + timespecclear(&uts); /* XXX GCC4 */ error = selcommon(l, retval, nfds, - readfds, writefds, exceptfds, tv, NULL); + readfds, writefds, exceptfds, ts, NULL); if (error) { /* @@ -202,16 +203,17 @@ * before we started the call, and subtracting * that result from the user-supplied value. */ - microtime(&tv1); - timersub(&tv1, &tv0, &tv1); - timersub(&utv, &tv1, &utv); - if (utv.tv_sec < 0) - timerclear(&utv); + nanotime(&ts1); + timespecsub(&ts1, &ts0, &ts1); + timespecsub(&uts, &ts1, &uts); + if (uts.tv_sec < 0) + timespecclear(&uts); } else { - timerclear(&utv); + timespecclear(&uts); } - netbsd32_from_timeval50(&utv, &utv32); + utv32.tv_sec = uts.tv_sec; + utv32.tv_usec = uts.tv_nsec / 1000; if ((error = copyout(&utv32, timeout, sizeof(utv32)))) return error; Index: src/sys/compat/netbsd32/netbsd32_compat_50.c diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.3 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.4 --- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.3 Mon Jan 26 08:00:04 2009 +++ src/sys/compat/netbsd32/netbsd32_compat_50.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_compat_50.c,v 1.3 2009/01/26 13:00:04 njoly Exp $ */ +/* $NetBSD: netbsd32_compat_50.c,v 1.4 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.3 2009/01/26 13:00:04 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.4 2009/03/29 19:21:19 christos Exp $"); #if defined(_KERNEL_OPT) #include "opt_sysv.h" @@ -129,18 +129,19 @@ } */ int error; struct netbsd32_timeval50 tv32; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; if (SCARG_P32(uap, tv)) { error = copyin(SCARG_P32(uap, tv), &tv32, sizeof(tv32)); if (error != 0) return error; - netbsd32_to_timeval50(&tv32, &atv); - tv = &atv; + ats.tv_sec = tv32.tv_sec; + ats.tv_nsec = tv32.tv_usec * 1000; + ts = &ats; } return selcommon(l, retval, SCARG(uap, nd), SCARG_P32(uap, in), - SCARG_P32(uap, ou), SCARG_P32(uap, ex), tv, NULL); + SCARG_P32(uap, ou), SCARG_P32(uap, ex), ts, NULL); return 0; } @@ -706,18 +707,15 @@ } */ int error; struct netbsd32_timespec50 ts32; - struct timespec ts; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; if (SCARG_P32(uap, ts)) { error = copyin(SCARG_P32(uap, ts), &ts32, sizeof(ts32)); if (error != 0) return error; - netbsd32_to_timespec50(&ts32, &ts); - atv.tv_sec = ts.tv_sec; - atv.tv_usec = ts.tv_nsec / 1000; - tv = &atv; + netbsd32_to_timespec50(&ts32, &ats); + ts = &ats; } if (SCARG_P32(uap, mask)) { error = copyin(SCARG_P32(uap, mask), &amask, sizeof(amask)); @@ -727,7 +725,7 @@ } return selcommon(l, retval, SCARG(uap, nd), SCARG_P32(uap, in), - SCARG_P32(uap, ou), SCARG_P32(uap, ex), tv, mask); + SCARG_P32(uap, ou), SCARG_P32(uap, ex), ts, mask); return 0; } @@ -743,18 +741,15 @@ } */ int error; struct netbsd32_timespec50 ts32; - struct timespec ts; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; if (SCARG_P32(uap, ts)) { error = copyin(SCARG_P32(uap, ts), &ts32, sizeof(ts32)); if (error != 0) return error; - netbsd32_to_timespec50(&ts32, &ts); - atv.tv_sec = ts.tv_sec; - atv.tv_usec = ts.tv_nsec / 1000; - tv = &atv; + netbsd32_to_timespec50(&ts32, &ats); + ts = &ats; } if (NETBSD32PTR64( SCARG(uap, mask))) { error = copyin(SCARG_P32(uap, mask), &amask, sizeof(amask)); @@ -764,7 +759,7 @@ } return pollcommon(l, retval, SCARG_P32(uap, fds), - SCARG(uap, nfds), tv, mask); + SCARG(uap, nfds), ts, mask); } int Index: src/sys/compat/netbsd32/netbsd32_select.c diff -u src/sys/compat/netbsd32/netbsd32_select.c:1.16 src/sys/compat/netbsd32/netbsd32_select.c:1.17 --- src/sys/compat/netbsd32/netbsd32_select.c:1.16 Sat Jan 10 21:45:49 2009 +++ src/sys/compat/netbsd32/netbsd32_select.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_select.c,v 1.16 2009/01/11 02:45:49 christos Exp $ */ +/* $NetBSD: netbsd32_select.c,v 1.17 2009/03/29 19:21:19 christos Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_select.c,v 1.16 2009/01/11 02:45:49 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_select.c,v 1.17 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -62,18 +62,19 @@ } */ int error; struct netbsd32_timeval tv32; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; if (SCARG_P32(uap, tv)) { error = copyin(SCARG_P32(uap, tv), &tv32, sizeof(tv32)); if (error != 0) return error; - netbsd32_to_timeval(&tv32, &atv); - tv = &atv; + ats.tv_sec = tv32.tv_sec; + ats.tv_nsec = tv32.tv_usec * 1000; + ts = &ats; } return selcommon(l, retval, SCARG(uap, nd), SCARG_P32(uap, in), - SCARG_P32(uap, ou), SCARG_P32(uap, ex), tv, NULL); + SCARG_P32(uap, ou), SCARG_P32(uap, ex), ts, NULL); } int @@ -89,18 +90,15 @@ } */ int error; struct netbsd32_timespec ts32; - struct timespec ts; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; if (SCARG_P32(uap, ts)) { error = copyin(SCARG_P32(uap, ts), &ts32, sizeof(ts32)); if (error != 0) return error; - netbsd32_to_timespec(&ts32, &ts); - atv.tv_sec = ts.tv_sec; - atv.tv_usec = ts.tv_nsec / 1000; - tv = &atv; + netbsd32_to_timespec(&ts32, &ats); + ts = &ats; } if (SCARG_P32(uap, mask)) { error = copyin(SCARG_P32(uap, mask), &amask, sizeof(amask)); @@ -110,7 +108,7 @@ } return selcommon(l, retval, SCARG(uap, nd), SCARG_P32(uap, in), - SCARG_P32(uap, ou), SCARG_P32(uap, ex), tv, mask); + SCARG_P32(uap, ou), SCARG_P32(uap, ex), ts, mask); } int @@ -124,18 +122,15 @@ } */ int error; struct netbsd32_timespec ts32; - struct timespec ts; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; if (SCARG_P32(uap, ts)) { error = copyin(SCARG_P32(uap, ts), &ts32, sizeof(ts32)); if (error != 0) return error; - netbsd32_to_timespec(&ts32, &ts); - atv.tv_sec = ts.tv_sec; - atv.tv_usec = ts.tv_nsec / 1000; - tv = &atv; + netbsd32_to_timespec(&ts32, &ats); + ts = &ats; } if (NETBSD32PTR64( SCARG(uap, mask))) { error = copyin(SCARG_P32(uap, mask), &amask, sizeof(amask)); @@ -145,5 +140,5 @@ } return pollcommon(l, retval, SCARG_P32(uap, fds), - SCARG(uap, nfds), tv, mask); + SCARG(uap, nfds), ts, mask); } Index: src/sys/compat/osf1/osf1_generic.c diff -u src/sys/compat/osf1/osf1_generic.c:1.13 src/sys/compat/osf1/osf1_generic.c:1.14 --- src/sys/compat/osf1/osf1_generic.c:1.13 Thu Dec 20 18:03:02 2007 +++ src/sys/compat/osf1/osf1_generic.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: osf1_generic.c,v 1.13 2007/12/20 23:03:02 dsl Exp $ */ +/* $NetBSD: osf1_generic.c,v 1.14 2009/03/29 19:21:19 christos Exp $ */ /* * Copyright (c) 1999 Christopher G. Demetriou. All rights reserved. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: osf1_generic.c,v 1.13 2007/12/20 23:03:02 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: osf1_generic.c,v 1.14 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -162,23 +162,20 @@ osf1_sys_select(struct lwp *l, const struct osf1_sys_select_args *uap, register_t *retval) { struct osf1_timeval otv; - struct timeval tv, *tvp; + struct timespec ats, *ts = NULL; int error; - if (SCARG(uap, tv) == NULL) - tvp = NULL; - else { + if (SCARG(uap, tv)) { /* get the OSF/1 timeval argument */ error = copyin(SCARG(uap, tv), &otv, sizeof otv); if (error != 0) return error; - /* copy to the NetBSD timeval */ - tv.tv_sec = otv.tv_sec; - tv.tv_usec = otv.tv_usec; - tvp = &tv; + ats.tv_sec = otv.tv_sec; + ats.tv_nsec = otv.tv_usec * 1000; + ts = &atv; } return selcommon(l, retval, SCARG(uap, nd), SCARG(uap, in), - SCARG(uap, ou), SCARG(uap, ex), tvp, NULL); + SCARG(uap, ou), SCARG(uap, ex), tsp, NULL); } Index: src/sys/kern/kern_event.c diff -u src/sys/kern/kern_event.c:1.61 src/sys/kern/kern_event.c:1.62 --- src/sys/kern/kern_event.c:1.61 Sat Jan 10 21:45:52 2009 +++ src/sys/kern/kern_event.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_event.c,v 1.61 2009/01/11 02:45:52 christos Exp $ */ +/* $NetBSD: kern_event.c,v 1.62 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -55,7 +55,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.61 2009/01/11 02:45:52 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_event.c,v 1.62 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1064,7 +1064,7 @@ { struct kqueue *kq; struct kevent *kevp; - struct timeval atv, sleeptv; + struct timespec ats, sleepts; struct knote *kn, *marker; size_t count, nkev, nevents; int timeout, error, rv; @@ -1080,12 +1080,11 @@ } if (tsp) { /* timeout supplied */ - TIMESPEC_TO_TIMEVAL(&atv, tsp); - if (inittimeleft(&atv, &sleeptv) == -1) { + if (inittimeleft(&ats, &sleepts) == -1) { *retval = maxevents; return EINVAL; } - timeout = tvtohz(&atv); + timeout = tstohz(&ats); if (timeout <= 0) timeout = -1; /* do poll */ } else { @@ -1104,7 +1103,7 @@ &kq->kq_lock, timeout); if (error == 0) { if (tsp == NULL || (timeout = - gettimeleft(&atv, &sleeptv)) > 0) + gettimeleft(&ats, &sleepts)) > 0) goto retry; } else { /* don't restart after signals... */ @@ -1125,8 +1124,8 @@ /* it's our marker, stop */ TAILQ_REMOVE(&kq->kq_head, kn, kn_tqe); if (count < maxevents || (tsp != NULL && - (timeout = gettimeleft(&atv, - &sleeptv)) <= 0)) + (timeout = gettimeleft(&ats, + &sleepts)) <= 0)) goto done; goto retry; } Index: src/sys/kern/kern_time.c diff -u src/sys/kern/kern_time.c:1.159 src/sys/kern/kern_time.c:1.160 --- src/sys/kern/kern_time.c:1.159 Sat Jan 31 10:53:36 2009 +++ src/sys/kern/kern_time.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time.c,v 1.159 2009/01/31 15:53:36 yamt Exp $ */ +/* $NetBSD: kern_time.c,v 1.160 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2000, 2004, 2005, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.159 2009/01/31 15:53:36 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.160 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/resourcevar.h> @@ -297,8 +297,8 @@ struct timespec rmtstart; int error, timo; - if (itimespecfix(rqt)) - return (EINVAL); + if ((error = itimespecfix(rqt)) != 0) + return error; timo = tstohz(rqt); /* @@ -769,14 +769,16 @@ struct itimerspec val, oval; struct ptimers *pts; struct ptimer *pt; + int error; pts = p->p_timers; if (pts == NULL || timerid < 2 || timerid >= TIMER_MAX) return EINVAL; val = *value; - if (itimespecfix(&val.it_value) || itimespecfix(&val.it_interval)) - return EINVAL; + if ((error = itimespecfix(&val.it_value)) != 0 || + (error = itimespecfix(&val.it_interval)) != 0) + return error; mutex_spin_enter(&timer_lock); if ((pt = pts->pts_timers[timerid]) == NULL) { Index: src/sys/kern/sys_select.c diff -u src/sys/kern/sys_select.c:1.13 src/sys/kern/sys_select.c:1.14 --- src/sys/kern/sys_select.c:1.13 Sat Mar 21 09:11:14 2009 +++ src/sys/kern/sys_select.c Sun Mar 29 15:21:19 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_select.c,v 1.13 2009/03/21 13:11:14 ad Exp $ */ +/* $NetBSD: sys_select.c,v 1.14 2009/03/29 19:21:19 christos Exp $ */ /*- * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_select.c,v 1.13 2009/03/21 13:11:14 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_select.c,v 1.14 2009/03/29 19:21:19 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -135,8 +135,7 @@ syscallarg(const struct timespec *) ts; syscallarg(sigset_t *) mask; } */ - struct timespec ats; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; int error; @@ -144,9 +143,7 @@ error = copyin(SCARG(uap, ts), &ats, sizeof(ats)); if (error) return error; - atv.tv_sec = ats.tv_sec; - atv.tv_usec = ats.tv_nsec / 1000; - tv = &atv; + ts = &ats; } if (SCARG(uap, mask) != NULL) { error = copyin(SCARG(uap, mask), &amask, sizeof(amask)); @@ -156,34 +153,34 @@ } return selcommon(l, retval, SCARG(uap, nd), SCARG(uap, in), - SCARG(uap, ou), SCARG(uap, ex), tv, mask); + SCARG(uap, ou), SCARG(uap, ex), ts, mask); } int -inittimeleft(struct timeval *tv, struct timeval *sleeptv) +inittimeleft(struct timespec *ts, struct timespec *sleepts) { - if (itimerfix(tv)) + if (itimespecfix(ts)) return -1; - getmicrouptime(sleeptv); + getnanouptime(sleepts); return 0; } int -gettimeleft(struct timeval *tv, struct timeval *sleeptv) +gettimeleft(struct timespec *ts, struct timespec *sleepts) { /* * We have to recalculate the timeout on every retry. */ - struct timeval slepttv; + struct timespec sleptts; /* - * reduce tv by elapsed time + * reduce ts by elapsed time * based on monotonic time scale */ - getmicrouptime(&slepttv); - timeradd(tv, sleeptv, tv); - timersub(tv, &slepttv, tv); - *sleeptv = slepttv; - return tvtohz(tv); + getnanouptime(&sleptts); + timespecadd(ts, sleepts, ts); + timespecsub(ts, &sleptts, ts); + *sleepts = sleptts; + return tstohz(ts); } int @@ -197,24 +194,25 @@ syscallarg(fd_set *) ex; syscallarg(struct timeval *) tv; } */ - struct timeval atv, *tv = NULL; + struct timeval atv; + struct timespec ats, *ts = NULL; int error; if (SCARG(uap, tv)) { - error = copyin(SCARG(uap, tv), (void *)&atv, - sizeof(atv)); + error = copyin(SCARG(uap, tv), (void *)&atv, sizeof(atv)); if (error) return error; - tv = &atv; + TIMEVAL_TO_TIMESPEC(&atv, &ats); + ts = &ats; } return selcommon(l, retval, SCARG(uap, nd), SCARG(uap, in), - SCARG(uap, ou), SCARG(uap, ex), tv, NULL); + SCARG(uap, ou), SCARG(uap, ex), ts, NULL); } int selcommon(lwp_t *l, register_t *retval, int nd, fd_set *u_in, - fd_set *u_ou, fd_set *u_ex, struct timeval *tv, sigset_t *mask) + fd_set *u_ou, fd_set *u_ex, struct timespec *ts, sigset_t *mask) { char smallbits[howmany(FD_SETSIZE, NFDBITS) * sizeof(fd_mask) * 6]; @@ -223,7 +221,7 @@ int ncoll, error, timo; size_t ni; sigset_t oldmask; - struct timeval sleeptv; + struct timespec sleepts; selcpu_t *sc; kmutex_t *lock; @@ -255,7 +253,7 @@ #undef getbits timo = 0; - if (tv && inittimeleft(tv, &sleeptv) == -1) { + if (ts && inittimeleft(ts, &sleepts) == -1) { error = EINVAL; goto done; } @@ -290,7 +288,7 @@ if (error || *retval) break; - if (tv && (timo = gettimeleft(tv, &sleeptv)) <= 0) + if (ts && (timo = gettimeleft(ts, &sleepts)) <= 0) break; mutex_spin_enter(lock); if (l->l_selflag != SEL_SCANNING || sc->sc_ncoll != ncoll) { @@ -374,16 +372,16 @@ syscallarg(u_int) nfds; syscallarg(int) timeout; } */ - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; if (SCARG(uap, timeout) != INFTIM) { - atv.tv_sec = SCARG(uap, timeout) / 1000; - atv.tv_usec = (SCARG(uap, timeout) % 1000) * 1000; - tv = &atv; + ats.tv_sec = SCARG(uap, timeout) / 1000; + ats.tv_nsec = (SCARG(uap, timeout) % 1000) * 1000000; + ts = &ats; } return pollcommon(l, retval, SCARG(uap, fds), SCARG(uap, nfds), - tv, NULL); + ts, NULL); } /* @@ -399,8 +397,7 @@ syscallarg(const struct timespec *) ts; syscallarg(const sigset_t *) mask; } */ - struct timespec ats; - struct timeval atv, *tv = NULL; + struct timespec ats, *ts = NULL; sigset_t amask, *mask = NULL; int error; @@ -408,9 +405,7 @@ error = copyin(SCARG(uap, ts), &ats, sizeof(ats)); if (error) return error; - atv.tv_sec = ats.tv_sec; - atv.tv_usec = ats.tv_nsec / 1000; - tv = &atv; + ts = &ats; } if (SCARG(uap, mask)) { error = copyin(SCARG(uap, mask), &amask, sizeof(amask)); @@ -420,13 +415,12 @@ } return pollcommon(l, retval, SCARG(uap, fds), SCARG(uap, nfds), - tv, mask); + ts, mask); } int -pollcommon(lwp_t *l, register_t *retval, - struct pollfd *u_fds, u_int nfds, - struct timeval *tv, sigset_t *mask) +pollcommon(lwp_t *l, register_t *retval, struct pollfd *u_fds, u_int nfds, + struct timespec *ts, sigset_t *mask) { struct pollfd smallfds[32]; struct pollfd *fds; @@ -434,7 +428,7 @@ sigset_t oldmask; int ncoll, error, timo; size_t ni; - struct timeval sleeptv; + struct timespec sleepts; selcpu_t *sc; kmutex_t *lock; @@ -455,7 +449,7 @@ goto done; timo = 0; - if (tv && inittimeleft(tv, &sleeptv) == -1) { + if (ts && inittimeleft(ts, &sleepts) == -1) { error = EINVAL; goto done; } @@ -489,7 +483,7 @@ if (error || *retval) break; - if (tv && (timo = gettimeleft(tv, &sleeptv)) <= 0) + if (ts && (timo = gettimeleft(ts, &sleepts)) <= 0) break; mutex_spin_enter(lock); if (l->l_selflag != SEL_SCANNING || sc->sc_ncoll != ncoll) { @@ -791,18 +785,18 @@ } int -pollsock(struct socket *so, const struct timeval *tvp, int events) +pollsock(struct socket *so, const struct timespec *tsp, int events) { int ncoll, error, timo; - struct timeval sleeptv, tv; + struct timespec sleepts, ts; selcpu_t *sc; lwp_t *l; kmutex_t *lock; timo = 0; - if (tvp != NULL) { - tv = *tvp; - if (inittimeleft(&tv, &sleeptv) == -1) + if (tsp != NULL) { + ts = *tsp; + if (inittimeleft(&ts, &sleepts) == -1) return EINVAL; } @@ -825,7 +819,7 @@ l->l_selflag = SEL_SCANNING; if (sopoll(so, events) != 0) break; - if (tvp && (timo = gettimeleft(&tv, &sleeptv)) <= 0) + if (tsp && (timo = gettimeleft(&ts, &sleepts)) <= 0) break; mutex_spin_enter(lock); if (l->l_selflag != SEL_SCANNING || sc->sc_ncoll != ncoll) { Index: src/sys/netsmb/smb_trantcp.c diff -u src/sys/netsmb/smb_trantcp.c:1.41 src/sys/netsmb/smb_trantcp.c:1.42 --- src/sys/netsmb/smb_trantcp.c:1.41 Wed Mar 18 12:00:24 2009 +++ src/sys/netsmb/smb_trantcp.c Sun Mar 29 15:21:20 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: smb_trantcp.c,v 1.41 2009/03/18 16:00:24 cegger Exp $ */ +/* $NetBSD: smb_trantcp.c,v 1.42 2009/03/29 19:21:20 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: smb_trantcp.c,v 1.41 2009/03/18 16:00:24 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: smb_trantcp.c,v 1.42 2009/03/29 19:21:20 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -96,7 +96,7 @@ static int nb_tcpsndbuf = NB_SNDQ; static int nb_tcprcvbuf = NB_RCVQ; -static const struct timeval nb_timo = { 15, 0 }; /* XXX sysctl? */ +static const struct timespec nb_timo = { 15, 0 }; /* XXX sysctl? */ #define nb_sosend(so,m,flags,l) (*(so)->so_send)(so, NULL, (struct uio *)0, \ m, (struct mbuf *)0, flags, l) @@ -113,11 +113,11 @@ } static int -nbssn_rselect(struct nbpcb *nbp, const struct timeval *tv, int events, +nbssn_rselect(struct nbpcb *nbp, const struct timespec *ts, int events, struct lwp *l) { - return pollsock(nbp->nbp_tso, tv, events); + return pollsock(nbp->nbp_tso, ts, events); } static int @@ -636,6 +636,7 @@ static int smb_nbst_getparam(struct smb_vc *vcp, int param, void *data) { + struct timeval *tvp; switch (param) { case SMBTP_SNDSZ: *(int*)data = nb_tcpsndbuf; @@ -644,7 +645,9 @@ *(int*)data = nb_tcprcvbuf; break; case SMBTP_TIMEOUT: - *(struct timeval*)data = nb_timo; + tvp = (struct timeval *)data; + tvp->tv_sec = nb_timo.tv_sec; + tvp->tv_usec = nb_timo.tv_nsec / 1000; break; default: return EINVAL; Index: src/sys/sys/poll.h diff -u src/sys/sys/poll.h:1.13 src/sys/sys/poll.h:1.14 --- src/sys/sys/poll.h:1.13 Sat Jan 10 21:45:55 2009 +++ src/sys/sys/poll.h Sun Mar 29 15:21:20 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: poll.h,v 1.13 2009/01/11 02:45:55 christos Exp $ */ +/* $NetBSD: poll.h,v 1.14 2009/03/29 19:21:20 christos Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -71,10 +71,10 @@ #include <sys/signal.h> /* for sigset_t */ struct lwp; -struct timeval; +struct timespec; int pollcommon(struct lwp *, register_t *, struct pollfd *, u_int, - struct timeval *, sigset_t *); + struct timespec *, sigset_t *); #else #include <sys/cdefs.h> Index: src/sys/sys/select.h diff -u src/sys/sys/select.h:1.34 src/sys/sys/select.h:1.35 --- src/sys/sys/select.h:1.34 Sat Jan 10 21:45:55 2009 +++ src/sys/sys/select.h Sun Mar 29 15:21:20 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: select.h,v 1.34 2009/01/11 02:45:55 christos Exp $ */ +/* $NetBSD: select.h,v 1.35 2009/03/29 19:21:20 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -44,18 +44,18 @@ struct lwp; struct proc; -struct timeval; +struct timespec; struct cpu_info; struct socket; int selcommon(struct lwp *, register_t *, int, fd_set *, fd_set *, - fd_set *, struct timeval *, sigset_t *); + fd_set *, struct timespec *, sigset_t *); void selrecord(struct lwp *selector, struct selinfo *); void selnotify(struct selinfo *, int, long); void selsysinit(struct cpu_info *); void selinit(struct selinfo *); void seldestroy(struct selinfo *); -int pollsock(struct socket *, const struct timeval *, int); +int pollsock(struct socket *, const struct timespec *, int); #else /* _KERNEL */ Index: src/sys/sys/timevar.h diff -u src/sys/sys/timevar.h:1.24 src/sys/sys/timevar.h:1.25 --- src/sys/sys/timevar.h:1.24 Sat Jan 10 21:45:56 2009 +++ src/sys/sys/timevar.h Sun Mar 29 15:21:20 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: timevar.h,v 1.24 2009/01/11 02:45:56 christos Exp $ */ +/* $NetBSD: timevar.h,v 1.25 2009/03/29 19:21:20 christos Exp $ */ /* * Copyright (c) 2005, 2008 The NetBSD Foundation. @@ -173,8 +173,8 @@ void timer_tick(struct lwp *, bool); int tstohz(const struct timespec *); int tvtohz(const struct timeval *); -int inittimeleft(struct timeval *, struct timeval *); -int gettimeleft(struct timeval *, struct timeval *); +int inittimeleft(struct timespec *, struct timespec *); +int gettimeleft(struct timespec *, struct timespec *); void timerupcall(struct lwp *); void time_init(void); void time_init2(void);