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

Reply via email to