Module Name: src
Committed By: njoly
Date: Sun Mar 28 22:03:51 UTC 2010
Modified Files:
src/sys/compat/netbsd32: netbsd32_compat_50.c netbsd32_time.c
Log Message:
Cleanup compat netbsd32 nanosleep syscalls to use the common
nanosleep1() call instead of their own stuff.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.36 -r1.37 src/sys/compat/netbsd32/netbsd32_time.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/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.10 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.11
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.10 Tue Mar 2 16:09:11 2010
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c Sun Mar 28 22:03:51 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_compat_50.c,v 1.10 2010/03/02 16:09:11 pooka Exp $ */
+/* $NetBSD: netbsd32_compat_50.c,v 1.11 2010/03/28 22:03:51 njoly 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.10 2010/03/02 16:09:11 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.11 2010/03/28 22:03:51 njoly Exp $");
#if defined(_KERNEL_OPT)
#include "opt_sysv.h"
@@ -441,50 +441,22 @@
syscallarg(const netbsd32_timespec50p_t) rqtp;
syscallarg(netbsd32_timespecp_t) rmtp;
} */
- static int nanowait;
struct netbsd32_timespec50 ts32;
- struct timespec rqt, ctime, rmt;
- int error, timo;
+ struct timespec rqt, rmt;
+ int error, error1;
error = copyin(SCARG_P32(uap, rqtp), &ts32, sizeof(ts32));
if (error)
return (error);
-
netbsd32_to_timespec50(&ts32, &rqt);
- if (itimespecfix(&rqt))
- return (EINVAL);
-
- getnanotime(&ctime);
- timespecadd(&rqt, &ctime, &rqt);
- timo = tshzto(&rqt);
- /*
- * Avoid inadvertantly sleeping forever
- */
- if (timo == 0)
- timo = 1;
- error = tsleep(&nanowait, PWAIT | PCATCH, "nanosleep", timo);
- if (error == ERESTART)
- error = EINTR;
- if (error == EWOULDBLOCK)
- error = 0;
-
- if (SCARG_P32(uap, rmtp)) {
- int error1;
-
- getnanotime(&rmt);
-
- timespecsub(&rqt, &rmt, &rmt);
- if (rmt.tv_sec < 0)
- timespecclear(&rmt);
-
- netbsd32_from_timespec50(&rmt, &ts32);
- error1 = copyout(&ts32, SCARG_P32(uap,rmtp), sizeof(ts32));
- if (error1)
- return (error1);
- }
+ error = nanosleep1(l, &rqt, SCARG_P32(uap, rmtp) ? &rmt : NULL);
+ if (SCARG_P32(uap, rmtp) == NULL || (error != 0 && error != EINTR))
+ return error;
- return error;
+ netbsd32_from_timespec50(&rmt, &ts32);
+ error1 = copyout(&ts32, SCARG_P32(uap,rmtp), sizeof(ts32));
+ return error1 ? error1 : error;
}
static int
Index: src/sys/compat/netbsd32/netbsd32_time.c
diff -u src/sys/compat/netbsd32/netbsd32_time.c:1.36 src/sys/compat/netbsd32/netbsd32_time.c:1.37
--- src/sys/compat/netbsd32/netbsd32_time.c:1.36 Thu Feb 26 21:08:48 2009
+++ src/sys/compat/netbsd32/netbsd32_time.c Sun Mar 28 22:03:51 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_time.c,v 1.36 2009/02/26 21:08:48 christos Exp $ */
+/* $NetBSD: netbsd32_time.c,v 1.37 2010/03/28 22:03:51 njoly Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_time.c,v 1.36 2009/02/26 21:08:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_time.c,v 1.37 2010/03/28 22:03:51 njoly Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ntp.h"
@@ -425,50 +425,22 @@
syscallarg(const netbsd32_timespecp_t) rqtp;
syscallarg(netbsd32_timespecp_t) rmtp;
} */
- static int nanowait;
struct netbsd32_timespec ts32;
- struct timespec rqt, ctime, rmt;
- int error, timo;
+ struct timespec rqt, rmt;
+ int error, error1;
error = copyin(SCARG_P32(uap, rqtp), &ts32, sizeof(ts32));
if (error)
return (error);
-
netbsd32_to_timespec(&ts32, &rqt);
- if (itimespecfix(&rqt))
- return (EINVAL);
-
- getnanotime(&ctime);
- timespecadd(&rqt, &ctime, &rqt);
- timo = tshzto(&rqt);
- /*
- * Avoid inadvertantly sleeping forever
- */
- if (timo == 0)
- timo = 1;
- error = tsleep(&nanowait, PWAIT | PCATCH, "nanosleep", timo);
- if (error == ERESTART)
- error = EINTR;
- if (error == EWOULDBLOCK)
- error = 0;
-
- if (SCARG_P32(uap, rmtp)) {
- int error1;
-
- getnanotime(&rmt);
-
- timespecsub(&rqt, &rmt, &rmt);
- if (rmt.tv_sec < 0)
- timespecclear(&rmt);
-
- netbsd32_from_timespec(&rmt, &ts32);
- error1 = copyout(&ts32, SCARG_P32(uap,rmtp), sizeof(ts32));
- if (error1)
- return (error1);
- }
+ error = nanosleep1(l, &rqt, SCARG_P32(uap, rmtp) ? &rmt : NULL);
+ if (SCARG_P32(uap, rmtp) == NULL || (error != 0 && error != EINTR))
+ return error;
- return error;
+ netbsd32_from_timespec(&rmt, &ts32);
+ error1 = copyout(&ts32, SCARG_P32(uap,rmtp), sizeof(ts32));
+ return error1 ? error1 : error;
}
static int