PERFORCE change 29410 for review

John Baldwin jhb at FreeBSD.org
Tue Apr 22 11:30:25 PDT 2003


http://perforce.freebsd.org/chv.cgi?CH=29410

Change 29410 by jhb at jhb_laptop on 2003/04/22 11:30:04

	IFC @29409.

Affected files ...

.. //depot/projects/smpng/sys/alpha/alpha/dec_2100_a500.c#5 integrate
.. //depot/projects/smpng/sys/alpha/alpha/trap.c#46 integrate
.. //depot/projects/smpng/sys/alpha/conf/GENERIC#28 integrate
.. //depot/projects/smpng/sys/alpha/linux/linux_machdep.c#13 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_signal.c#17 integrate
.. //depot/projects/smpng/sys/compat/linux/linux_signal.c#11 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_signal.c#10 integrate
.. //depot/projects/smpng/sys/conf/files#74 integrate
.. //depot/projects/smpng/sys/conf/files.sparc64#27 integrate
.. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_state.c#9 integrate
.. //depot/projects/smpng/sys/crypto/blowfish/arch/i386/bf_enc_586.S#2 integrate
.. //depot/projects/smpng/sys/crypto/des/arch/i386/des_enc.S#2 integrate
.. //depot/projects/smpng/sys/dev/awi/am79c930.c#3 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwdev.c#7 integrate
.. //depot/projects/smpng/sys/dev/hea/eni_transmit.c#5 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/emu10k1.c#11 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/ac97.c#16 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/buffer.c#7 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/feeder_fmt.c#7 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/feeder_rate.c#6 integrate
.. //depot/projects/smpng/sys/dev/tx/if_tx.c#9 integrate
.. //depot/projects/smpng/sys/dev/tx/if_txreg.h#3 integrate
.. //depot/projects/smpng/sys/dev/tx/if_txvar.h#6 integrate
.. //depot/projects/smpng/sys/dev/usb/if_axe.c#1 branch
.. //depot/projects/smpng/sys/dev/usb/if_axereg.h#1 branch
.. //depot/projects/smpng/sys/dev/usb/usbdevs#29 integrate
.. //depot/projects/smpng/sys/dev/usb/usbdevs.h#30 integrate
.. //depot/projects/smpng/sys/dev/usb/usbdevs_data.h#30 integrate
.. //depot/projects/smpng/sys/geom/geom_bsd.c#27 integrate
.. //depot/projects/smpng/sys/geom/geom_slice.c#18 integrate
.. //depot/projects/smpng/sys/geom/geom_slice.h#11 integrate
.. //depot/projects/smpng/sys/geom/geom_sunlabel.c#18 integrate
.. //depot/projects/smpng/sys/geom/geom_sunlabel_enc.c#1 branch
.. //depot/projects/smpng/sys/gnu/dev/sound/pci/emu10k1-ac97.h#1 branch
.. //depot/projects/smpng/sys/i386/conf/GENERIC#35 integrate
.. //depot/projects/smpng/sys/i386/i386/trap.c#53 integrate
.. //depot/projects/smpng/sys/i386/i386/vm_machdep.c#34 integrate
.. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_signal.c#9 integrate
.. //depot/projects/smpng/sys/i386/include/cpufunc.h#22 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_machdep.c#22 integrate
.. //depot/projects/smpng/sys/i386/svr4/svr4_locore.s#2 integrate
.. //depot/projects/smpng/sys/ia64/conf/GENERIC#32 integrate
.. //depot/projects/smpng/sys/ia64/ia32/ia32_misc.c#5 integrate
.. //depot/projects/smpng/sys/ia64/ia64/pmap.c#43 integrate
.. //depot/projects/smpng/sys/ia64/ia64/trap.c#45 integrate
.. //depot/projects/smpng/sys/ia64/include/pmap.h#12 integrate
.. //depot/projects/smpng/sys/kern/kern_exit.c#62 integrate
.. //depot/projects/smpng/sys/kern/kern_sig.c#60 integrate
.. //depot/projects/smpng/sys/kern/kern_thread.c#27 integrate
.. //depot/projects/smpng/sys/kern/subr_bus.c#22 integrate
.. //depot/projects/smpng/sys/kern/uipc_jumbo.c#6 integrate
.. //depot/projects/smpng/sys/kern/vfs_bio.c#43 integrate
.. //depot/projects/smpng/sys/kern/vfs_cluster.c#23 integrate
.. //depot/projects/smpng/sys/modules/Makefile#49 integrate
.. //depot/projects/smpng/sys/modules/axe/Makefile#1 branch
.. //depot/projects/smpng/sys/modules/netgraph/Makefile#8 integrate
.. //depot/projects/smpng/sys/netgraph/ng_fec.c#4 integrate
.. //depot/projects/smpng/sys/netinet/tcp_input.c#32 integrate
.. //depot/projects/smpng/sys/netinet6/icmp6.c#14 integrate
.. //depot/projects/smpng/sys/pc98/conf/GENERIC#32 integrate
.. //depot/projects/smpng/sys/pci/if_dc.c#34 integrate
.. //depot/projects/smpng/sys/pci/if_pcn.c#16 integrate
.. //depot/projects/smpng/sys/pci/if_rl.c#28 integrate
.. //depot/projects/smpng/sys/pci/if_sf.c#18 integrate
.. //depot/projects/smpng/sys/pci/if_sis.c#24 integrate
.. //depot/projects/smpng/sys/pci/if_sk.c#17 integrate
.. //depot/projects/smpng/sys/pci/if_ste.c#20 integrate
.. //depot/projects/smpng/sys/pci/if_ti.c#26 integrate
.. //depot/projects/smpng/sys/pci/if_tl.c#15 integrate
.. //depot/projects/smpng/sys/pci/if_vr.c#17 integrate
.. //depot/projects/smpng/sys/pci/if_wb.c#16 integrate
.. //depot/projects/smpng/sys/pci/if_xl.c#27 integrate
.. //depot/projects/smpng/sys/powerpc/conf/GENERIC#16 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/busdma_machdep.c#10 integrate
.. //depot/projects/smpng/sys/sparc64/conf/GENERIC#28 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/trap.c#49 integrate
.. //depot/projects/smpng/sys/sys/bus.h#9 integrate
.. //depot/projects/smpng/sys/sys/kse.h#8 integrate
.. //depot/projects/smpng/sys/sys/proc.h#80 integrate
.. //depot/projects/smpng/sys/sys/resourcevar.h#12 integrate
.. //depot/projects/smpng/sys/sys/sun_disklabel.h#3 integrate
.. //depot/projects/smpng/sys/vm/swap_pager.c#24 integrate
.. //depot/projects/smpng/sys/vm/swap_pager.h#7 integrate
.. //depot/projects/smpng/sys/vm/uma_core.c#29 integrate
.. //depot/projects/smpng/sys/vm/vm_fault.c#24 integrate
.. //depot/projects/smpng/sys/vm/vm_map.c#33 integrate
.. //depot/projects/smpng/sys/vm/vm_object.c#30 integrate
.. //depot/projects/smpng/sys/vm/vm_object.h#16 integrate
.. //depot/projects/smpng/sys/vm/vm_page.c#35 integrate
.. //depot/projects/smpng/sys/vm/vm_pageout.c#26 integrate

Differences ...

==== //depot/projects/smpng/sys/alpha/alpha/dec_2100_a500.c#5 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/alpha/alpha/dec_2100_a500.c,v 1.12 2002/08/22 19:52:15 peter Exp $
+ * $FreeBSD: src/sys/alpha/alpha/dec_2100_a500.c,v 1.13 2003/04/21 16:34:18 obrien Exp $
  */
 
 #include "opt_ddb.h"
@@ -51,14 +51,14 @@
 
 void dec_2100_a500_init(int);
 static void dec_2100_a500_cons_init(void);
-static void dec_2100_a500_intr_init(void );
+static void dec_2100_a500_intr_init(void);
 
 extern int siocnattach(int, int);
 extern int siogdbattach(int, int);
 extern int sccnattach(void);
 
 void
-dec_2100_a500_init(cputype)
+dec_2100_a500_init(int cputype)
 {
 	/*
 	 * See if we're a `Sable' or a `Lynx'.
@@ -140,7 +140,7 @@
 
 
 void
-dec_2100_a500_intr_init(void )
+dec_2100_a500_intr_init(void)
 {
 
 	outb(SLAVE0_ICU, 0);

==== //depot/projects/smpng/sys/alpha/alpha/trap.c#46 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/alpha/alpha/trap.c,v 1.111 2003/04/18 20:19:59 jhb Exp $ */
+/* $FreeBSD: src/sys/alpha/alpha/trap.c,v 1.112 2003/04/22 03:17:41 davidxu Exp $ */
 /* $NetBSD: trap.c,v 1.31 1998/03/26 02:21:46 thorpej Exp $ */
 
 /*
@@ -298,13 +298,6 @@
 		td->td_frame = framep;
 		if (td->td_ucred != p->p_ucred)
 			cred_update_thread(td);
-		PROC_LOCK(p);
-		if ((p->p_flag & P_WEXIT) && (p->p_singlethread != td)) {
-			mtx_lock_spin(&sched_lock);
-			thread_exit();
-			/* NOTREACHED */
-		}
-		PROC_UNLOCK(p);
 	} else {
 		sticks = 0;		/* XXX bogus -Wuninitialized warning */
 		KASSERT(cold || td->td_ucred != NULL,

==== //depot/projects/smpng/sys/alpha/conf/GENERIC#28 (text+ko) ====

@@ -18,7 +18,7 @@
 #
 # For hardware specific information check HARDWARE.TXT
 #
-# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.157 2003/03/22 14:18:22 ru Exp $
+# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.159 2003/04/21 16:44:04 simokawa Exp $
 
 machine		alpha
 cpu		EV4
@@ -184,5 +184,11 @@
 device		ums		# Mouse
 # USB Ethernet
 device		aue		# ADMtek USB ethernet
+device		axe		# ASIX Electronics USB ethernet
 device		cue		# CATC USB ethernet
 device		kue		# Kawasaki LSI USB ethernet
+
+# FireWire support
+device		firewire	# FireWire bus code
+device		sbp		# SCSI over FireWire (Requires scbus and da)
+device		fwe		# Ethernet over FireWire (non-standard!)

==== //depot/projects/smpng/sys/alpha/linux/linux_machdep.c#13 (text+ko) ====

@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.28 2003/04/16 20:05:42 jhb Exp $
+ * $FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.30 2003/04/22 18:23:47 jhb Exp $
  */
 
 #include <sys/param.h>
@@ -35,6 +35,7 @@
 #include <sys/mount.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
+#include <sys/syscallsubr.h>
 #include <sys/sysproto.h>
 #include <sys/unistd.h>
 #include <sys/user.h>
@@ -129,7 +130,6 @@
 	struct proc *p2;
 	struct thread *td2;
 	int exit_signal;
-	vm_offset_t start;
 
 #ifdef DEBUG
 	if (ldebug(clone)) {
@@ -158,10 +158,8 @@
 	if (!(args->flags & CLONE_FILES))
 		ff |= RFFDG;
 
-	error = 0;
-	start = 0;
-
-	if ((error = fork1(td, ff, 0, &p2)) != 0)
+	error = fork1(td, ff, 0, &p2);
+	if (error)
 		return (error);
 
 	PROC_LOCK(p2);
@@ -181,7 +179,7 @@
 	 */
 	mtx_lock_spin(&sched_lock);
 	TD_SET_CAN_RUN(td2);
-	setrunqueue(FIRST_THREAD_IN_PROC(p2));
+	setrunqueue(td2);
 	mtx_unlock_spin(&sched_lock);
 
 	td->td_retval[0] = p2->p_pid;
@@ -306,11 +304,7 @@
 {
 	int error;
 	l_sigset_t lmask;
-	sigset_t *bmask;
-	struct sigsuspend_args bsd;
-	caddr_t sg;
-
-	sg = stackgap_init();
+	sigset_t bmask;
 
 #ifdef DEBUG
 	if (ldebug(rt_sigsuspend))
@@ -324,10 +318,8 @@
 	if (error)
 		return (error);
 
-	bmask = stackgap_alloc(&sg, sizeof(sigset_t));
-	linux_to_bsd_sigset(&lmask, bmask);
-	bsd.sigmask = bmask;
-	return (sigsuspend(td, &bsd));
+	linux_to_bsd_sigset(&lmask, &bmask);
+	return (kern_sigsuspend(td, bmask));
 }
 
 int

==== //depot/projects/smpng/sys/alpha/osf1/osf1_signal.c#17 (text+ko) ====

@@ -30,7 +30,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/alpha/osf1/osf1_signal.c,v 1.29 2003/03/31 22:49:14 jeff Exp $
+ * $FreeBSD: src/sys/alpha/osf1/osf1_signal.c,v 1.30 2003/04/22 18:23:47 jhb Exp $
  */
 
 #include "opt_compat.h"
@@ -54,6 +54,7 @@
 #include <sys/vmmeter.h>
 #include <sys/msgbuf.h>
 #include <sys/exec.h>
+#include <sys/syscallsubr.h>
 #include <sys/sysctl.h>
 #include <sys/uio.h>
 #include <net/netisr.h>
@@ -218,49 +219,29 @@
 	struct thread *td;
 	struct osf1_sigaction_args *uap;
 {
+	struct osf1_sigaction osa;
+	struct sigaction nbsa, obsa;
+	struct sigaction *nbsap;
 	int error;
-	caddr_t sg;
-	struct osf1_sigaction *nosa, *oosa, tmposa;
-	struct sigaction *nbsa, *obsa, tmpbsa;
-	struct sigaction_args sa;
 
-	sg = stackgap_init();
-	nosa = uap->nsa;
-	oosa = uap->osa;
 	if (osf1_sigdbg && uap->sigtramp)
 		uprintf("osf1_sigaction: trampoline handler at %p\n",
 		    uap->sigtramp);
-		td->td_md.osf_sigtramp = uap->sigtramp;
-	if (oosa != NULL)
-		obsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-	else
-		obsa = NULL;
-	if (nosa != NULL) {
-		nbsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-		if ((error = copyin(nosa, &tmposa, sizeof(tmposa))) != 0)
-			return error;
-		osf1_to_bsd_sigaction(&tmposa, &tmpbsa);
-		if ((error = copyout(&tmpbsa, nbsa, sizeof(tmpbsa))) != 0)
-			return error;
+	td->td_md.osf_sigtramp = uap->sigtramp;
+	if (uap->nsa != NULL) {
+		if ((error = copyin(uap->nsa, &osa, sizeof(osa))) != 0)
+			return (error);
+		osf1_to_bsd_sigaction(&osa, &nbsa);
+		nbsap = &nbsa;
 	} else
-		nbsa = NULL;
+		nbsap = NULL;
+	error = kern_sigaction(td, uap->signum, &nbsa, &obsa, 0);
 
-	sa.sig = uap->signum;
-	sa.act = nbsa;
-	sa.oact = obsa;
-
-	if ((error = sigaction(td, &sa)) != 0)
-		return error;
-
-	if (oosa != NULL) {
-		if ((error = copyin(obsa, &tmpbsa, sizeof(tmpbsa))) != 0)
-			return error;
-		bsd_to_osf1_sigaction(&tmpbsa, &tmposa);
-		if ((error = copyout(&tmposa, oosa, sizeof(tmposa))) != 0)
-			return error;
+	if (error == 0 && uap->osa != NULL) {
+		bsd_to_osf1_sigaction(&obsa, &osa);
+		error = copyout(&osa, uap->osa, sizeof(osa));
 	}
-
-	return 0;
+	return (error);
 }
 
 int
@@ -268,46 +249,23 @@
 	register struct thread *td;
 	struct osf1_sigaltstack_args *uap;
 {
+	struct osf1_sigaltstack oss;
+	struct sigaltstack nbss, obss, *nbssp;
 	int error;
-	caddr_t sg;
-	struct osf1_sigaltstack *noss, *ooss, tmposs;
-	struct sigaltstack *nbss, *obss, tmpbss;
-	struct sigaltstack_args sa;
 
-	sg = stackgap_init();
-	noss = uap->nss;
-	ooss = uap->oss;
-
-	if (ooss != NULL)
-		obss = stackgap_alloc(&sg, sizeof(struct sigaltstack));
-	else
-		obss = NULL;
-
-	if (noss != NULL) {
-		nbss = stackgap_alloc(&sg, sizeof(struct sigaltstack));
-		if ((error = copyin(noss, &tmposs, sizeof(tmposs))) != 0)
-			return error;
-		osf1_to_bsd_sigaltstack(&tmposs, &tmpbss);
-		if ((error = copyout(&tmpbss, nbss, sizeof(tmpbss))) != 0)
-			return error;
+	if (uap->nss != NULL) {
+		if ((error = copyin(uap->nss, &oss, sizeof(oss))) != 0)
+			return (error);
+		osf1_to_bsd_sigaltstack(&oss, &nbss);
+		nbssp = &nbss;
 	} else
-		nbss = NULL;
-
-	sa.ss = nbss;
-	sa.oss = obss;
-
-	if ((error = sigaltstack(td, &sa)) != 0)
-		return error;
-
-	if (obss != NULL) {
-		if ((error = copyin(obss, &tmpbss, sizeof(tmpbss))) != 0)
-			return error;
-		bsd_to_osf1_sigaltstack(&tmpbss, &tmposs);
-		if ((error = copyout(&tmposs, ooss, sizeof(tmposs))) != 0)
-			return error;
+		nbssp = NULL;
+	error = kern_sigaltstack(td, nbssp, &obss);
+	if (error == 0 && uap->oss != NULL) {
+		bsd_to_osf1_sigaltstack(&obss, &oss);
+		error = copyout(&oss, uap->oss, sizeof(oss));
 	}
-
-	return 0;
+	return (error);
 }
 
 int
@@ -317,10 +275,6 @@
 {
 	struct proc *p;
 	int error, signum;
-	caddr_t sg;
-
-	p = td->td_proc;
-	sg = stackgap_init();
 
 	signum = OSF1_SIGNO(uap->signum);
 	if (signum <= 0 || signum > OSF1_NSIG) {
@@ -337,127 +291,81 @@
 		 * that SIG_HOLD is allowed as
 		 * an action.
 		 */
-		if ((u_long)uap->handler ==  OSF1_SIG_HOLD) {
+		if ((u_long)uap->handler == OSF1_SIG_HOLD) {
 			sigset_t mask;
-			sigset_t *bmask;
-			struct sigprocmask_args sa;
 
-			bmask = stackgap_alloc(&sg, sizeof(sigset_t));
 			SIGEMPTYSET(mask);
 			SIGADDSET(mask, signum);
-			sa.how = SIG_BLOCK;
-			sa.set = bmask;
-			sa.oset = NULL;
-			if ((error = copyout(&mask, bmask, sizeof(mask))) != 0)
-				return (error);
-			return sigprocmask(td, &sa);
+			return (kern_sigprocmask(td, SIG_BLOCK, &mask, NULL,
+				    0));
 		}
 		/* FALLTHROUGH */
 
 	case OSF1_SIGNAL_MASK:
 		{
-			struct sigaction_args sa_args;
-			struct sigaction *nbsa, *obsa, sa;
+			struct sigaction nbsa, obsa;
 
-			nbsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			obsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			sa_args.sig = signum;
-			sa_args.act = nbsa;
-			sa_args.oact = obsa;
-
-			sa.sa_handler = uap->handler;
-			SIGEMPTYSET(sa.sa_mask);
-			sa.sa_flags = 0;
+			nbsa.sa_handler = uap->handler;
+			SIGEMPTYSET(nbsa.sa_mask);
+			nbsa.sa_flags = 0;
 #if 0
 			if (signum != SIGALRM)
-				sa.sa_flags = SA_RESTART;
+				nbsa.sa_flags = SA_RESTART;
 #endif
-			if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0)
-				return error;
-			if ((error = sigaction(td, &sa_args)) != 0) {
+			error = kern_sigaction(td, signum, &nbsa, &obsa, 0);
+			if (error != 0) {
 				DPRINTF("signal: sigaction failed: %d\n",
 					 error);
 				td->td_retval[0] = -1;
-				return error;
+				return (error);
 			}
-			if ((error = copyin(obsa, &sa, sizeof(sa))) != 0)
-				return error;
-			td->td_retval[0] = (long)sa.sa_handler;
+			td->td_retval[0] = (long)obsa.sa_handler;
 			return 0;
 		}
 
 	case OSF1_SIGHOLD_MASK:
 		{
-			struct sigprocmask_args sa;
 			sigset_t set;
-			sigset_t *bset;
 
-			bset = stackgap_alloc(&sg, sizeof(sigset_t));
 			SIGEMPTYSET(set);
 			SIGADDSET(set, signum);
-			sa.how = SIG_BLOCK;
-			sa.set = bset;
-			sa.oset = NULL;
-			if ((error = copyout(&set, bset, sizeof(set))) != 0)
-				return (error);
-			return sigprocmask(td, &sa);
+			return (kern_sigprocmask(td, SIG_BLOCK, &set, NULL, 0));
 		}
 
 	case OSF1_SIGRELSE_MASK:
 		{
-			struct sigprocmask_args sa;
 			sigset_t set;
-			sigset_t *bset;
 
-			bset = stackgap_alloc(&sg, sizeof(sigset_t));
 			SIGEMPTYSET(set);
 			SIGADDSET(set, signum);
-			sa.how = SIG_UNBLOCK;
-			sa.set = bset;
-			sa.oset = NULL;
-			if ((error = copyout(&set, bset, sizeof(set))) != 0)
-				return (error);
-			return sigprocmask(td, &sa);
+			return (kern_sigprocmask(td, SIG_UNBLOCK, &set, NULL,
+				    0));
 
 		}
 
 	case OSF1_SIGIGNORE_MASK:
 		{
-			struct sigaction_args sa_args;
-			struct sigaction *bsa, sa;
-
-			bsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			sa_args.sig = signum;
-			sa_args.act = bsa;
-			sa_args.oact = NULL;
+			struct sigaction sa;
 
 			sa.sa_handler = SIG_IGN;
 			SIGEMPTYSET(sa.sa_mask);
 			sa.sa_flags = 0;
-			if ((error = copyout(&sa, bsa, sizeof(sa))) != 0)
-				return error;
-			if ((error = sigaction(td, &sa_args)) != 0) {
+			error = kern_sigaction(td, signum, &sa, NULL, 0);
+			if (error != 0)
 				DPRINTF(("sigignore: sigaction failed\n"));
-				return error;
-			}
-			return 0;
+			return (error);
 		}
 
 	case OSF1_SIGPAUSE_MASK:
 		{
-			struct sigsuspend_args sa;
-			sigset_t set;
-			sigset_t *bmask;
+			sigset_t mask;
 
-			bmask = stackgap_alloc(&sg, sizeof(sigset_t));
+			p = td->td_proc;
 			PROC_LOCK(p);
-			set = td->td_sigmask;
+			mask = td->td_sigmask;
 			PROC_UNLOCK(p);
-			SIGDELSET(set, signum);
-			sa.sigmask = bmask;
-			if ((error = copyout(&set, bmask, sizeof(set))) != 0)
-				return (error);
-			return sigsuspend(td, &sa);
+			SIGDELSET(mask, signum);
+			return kern_sigsuspend(td, mask);
 		}
 
 	default:
@@ -473,46 +381,18 @@
 		syscallarg(osf1_sigset_t *) set;
 	} */ *uap;
 {
-	struct proc *p;
+	osf1_sigset_t oss;
+	sigset_t obss, nbss;
 	int error;
-	osf1_sigset_t oss;
-	sigset_t bss;
 
-	p = td->td_proc;
-	error = 0;
-		/* Fix the return value first if needed */
-	bsd_to_osf1_sigset(&td->td_sigmask, &oss);
-	td->td_retval[0] = oss;
-
-	osf1_to_bsd_sigset(&uap->mask, &bss);
-
-	PROC_LOCK(p);
-
-	switch (uap->how) {
-	case OSF1_SIG_BLOCK:
-		SIGSETOR(td->td_sigmask, bss);
-		SIG_CANTMASK(td->td_sigmask);
-		break;
-
-	case OSF1_SIG_UNBLOCK:
-		SIGSETNAND(td->td_sigmask, bss);
-		signotify(td);
-		break;
-
-	case OSF1_SIG_SETMASK:
-		td->td_sigmask = bss;
-		SIG_CANTMASK(td->td_sigmask);
-		signotify(td);
-		break;
-
-	default:
-		error = EINVAL;
-		break;
+	/* OSF/1 sigprocmask flag values match FreeBSD flag values. */
+	osf1_to_bsd_sigset(&uap->mask, &nbss);
+	error = kern_sigprocmask(td, uap->how, &nbss, &obss, 0);
+	if (error == 0) {
+		bsd_to_osf1_sigset(&obss, &oss);
+		td->td_retval[0] = oss;
 	}
-
-	PROC_UNLOCK(p);
-
-	return error;
+	return (error);
 }
 
 int
@@ -544,22 +424,12 @@
 		syscallarg(osf1_sigset_t *) ss;
 	} */ *uap;
 {
-	int error;
-	caddr_t sg;
 	osf1_sigset_t oss;
 	sigset_t bss;
-	sigset_t *bmask;
-	struct sigsuspend_args sa;
 
-	sg = stackgap_init();
-
-	bmask = stackgap_alloc(&sg, sizeof(sigset_t));
 	oss = uap->ss;
 	osf1_to_bsd_sigset(&oss, &bss);
-	sa.sigmask = bmask;
-	if ((error = copyout(&bss, bmask, sizeof(bss))) != 0)
-		return (error);
-	return sigsuspend(td, &sa);
+	return kern_sigsuspend(td, bss);
 }
 
 int

==== //depot/projects/smpng/sys/compat/linux/linux_signal.c#11 (text+ko) ====

@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/compat/linux/linux_signal.c,v 1.41 2003/04/17 22:07:56 jhb Exp $
+ * $FreeBSD: src/sys/compat/linux/linux_signal.c,v 1.42 2003/04/22 18:23:47 jhb Exp $
  */
 
 #include <sys/param.h>
@@ -227,40 +227,22 @@
 linux_do_sigprocmask(struct thread *td, int how, l_sigset_t *new,
 		     l_sigset_t *old)
 {
+	sigset_t omask, nmask;
+	sigset_t *nmaskp;
 	int error;
-	sigset_t mask;
-	struct proc *p = td->td_proc;
 
-	error = 0;
 	td->td_retval[0] = 0;
 
-	PROC_LOCK(p);
-	if (old != NULL)
-		bsd_to_linux_sigset(&td->td_sigmask, old);
-
 	if (new != NULL) {
-		linux_to_bsd_sigset(new, &mask);
+		linux_to_bsd_sigset(new, &nmask);
+		nmaskp = &nmask;
+	} else
+		nmaskp = NULL;
 
-		switch (how) {
-		case LINUX_SIG_BLOCK:
-			SIGSETOR(td->td_sigmask, mask);
-			SIG_CANTMASK(td->td_sigmask);
-			break;
-		case LINUX_SIG_UNBLOCK:
-			SIGSETNAND(td->td_sigmask, mask);
-			signotify(td);
-			break;
-		case LINUX_SIG_SETMASK:
-			td->td_sigmask = mask;
-			SIG_CANTMASK(td->td_sigmask);
-			signotify(td);
-			break;
-		default:
-			error = EINVAL;
-			break;
-		}
-	}
-	PROC_UNLOCK(p);
+	/* Linux sigprocmask flag values are one less than FreeBSD values. */
+	error = kern_sigprocmask(td, how + 1, nmaskp, &omask, 0);
+	if (error != 0 && old != NULL)
+		bsd_to_linux_sigset(&omask, old);
 
 	return (error);
 }

==== //depot/projects/smpng/sys/compat/svr4/svr4_signal.c#10 (text+ko) ====

@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * 
- * $FreeBSD: src/sys/compat/svr4/svr4_signal.c,v 1.26 2003/04/17 22:02:46 jhb Exp $
+ * $FreeBSD: src/sys/compat/svr4/svr4_signal.c,v 1.27 2003/04/22 18:23:48 jhb Exp $
  */
 
 #include <sys/param.h>
@@ -36,6 +36,7 @@
 #include <sys/proc.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
+#include <sys/syscallsubr.h>
 #include <sys/sysproto.h>
 
 #include <machine/cpu.h>
@@ -262,61 +263,38 @@
 	register struct thread *td;
 	struct svr4_sys_sigaction_args *uap;
 {
-	struct svr4_sigaction *nisa, *oisa, tmpisa;
-	struct sigaction *nbsa, *obsa, tmpbsa;
-	struct sigaction_args sa;
-	caddr_t sg;
+	struct svr4_sigaction isa;
+	struct sigaction nbsa, obsa;
+	struct sigaction *nbsap;
 	int error;
 
 	DPRINTF(("@@@ svr4_sys_sigaction(%d, %d, %d)\n", td->td_proc->p_pid,
 			uap->signum,
 			SVR4_SVR42BSD_SIG(uap->signum)));
 	
-	sg = stackgap_init();
-	nisa = uap->nsa;
-	oisa = uap->osa;
-
-	if (oisa != NULL)
-		obsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-	else
-		obsa = NULL;
-
-	if (nisa != NULL) {
-		nbsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-		if ((error = copyin(nisa, &tmpisa, sizeof(tmpisa))) != 0)
-			return error;
-		svr4_to_bsd_sigaction(&tmpisa, &tmpbsa);
-		if ((error = copyout(&tmpbsa, nbsa, sizeof(tmpbsa))) != 0)
-			return error;
+	if (uap->nsa != NULL) {
+		if ((error = copyin(uap->nsa, &isa, sizeof(isa))) != 0)
+			return (error);
+		svr4_to_bsd_sigaction(&isa, &nbsa);
+		nbsap = &nbsa;
 	} else
-		nbsa = NULL;
-
+		nbsap = NULL;
 #if defined(DEBUG_SVR4)
 	{
 		int i;
 		for (i = 0; i < 4; i++) 
 			DPRINTF(("\tssa_mask[%d] = %lx\n", i,
-						nisa->ssa_mask.bits[i]));
-		DPRINTF(("\tssa_handler = %p\n", nisa->ssa_handler));
+						isa.ssa_mask.bits[i]));
+		DPRINTF(("\tssa_handler = %p\n", isa.ssa_handler));
 	}
 #endif
-
-	sa.sig = SVR4_SVR42BSD_SIG(uap->signum);
-	sa.act = nbsa;
-	sa.oact = obsa;
-
-	if ((error = sigaction(td, &sa)) != 0)
-		return error;
-
-	if (oisa != NULL) {
-		if ((error = copyin(obsa, &tmpbsa, sizeof(tmpbsa))) != 0)
-			return error;
-		bsd_to_svr4_sigaction(&tmpbsa, &tmpisa);
-		if ((error = copyout(&tmpisa, oisa, sizeof(tmpisa))) != 0)
-			return error;
+	error = kern_sigaction(td, SVR4_SVR42BSD_SIG(uap->signum), nbsap, &obsa,
+	    0);
+	if (error == 0 && uap->osa != NULL) {
+		bsd_to_svr4_sigaction(&obsa, &isa);
+		error = copyout(&isa, uap->osa, sizeof(isa));
 	}
-
-	return 0;
+	return (error);
 }
 
 int 
@@ -324,47 +302,23 @@
 	register struct thread *td;
 	struct svr4_sys_sigaltstack_args *uap;
 {
-	struct svr4_sigaltstack *nsss, *osss, tmpsss;
-	struct sigaltstack *nbss, *obss, tmpbss;
-	struct sigaltstack_args sa;
-	caddr_t sg;
-	int error, *retval;
+	struct svr4_sigaltstack sss;
+	struct sigaltstack nbss, obss, *nbssp;
+	int error;
 
-	retval = td->td_retval;
-	sg = stackgap_init();
-	nsss = uap->nss;
-	osss = uap->oss;
-
-	if (osss != NULL)
-		obss = stackgap_alloc(&sg, sizeof(struct sigaltstack));
-	else
-		obss = NULL;
-
-	if (nsss != NULL) {
-		nbss = stackgap_alloc(&sg, sizeof(struct sigaltstack));
-		if ((error = copyin(nsss, &tmpsss, sizeof(tmpsss))) != 0)
-			return error;
-		svr4_to_bsd_sigaltstack(&tmpsss, &tmpbss);
-		if ((error = copyout(&tmpbss, nbss, sizeof(tmpbss))) != 0)
-			return error;
+	if (uap->nss != NULL) {
+		if ((error = copyin(uap->nss, &sss, sizeof(sss))) != 0)
+			return (error);
+		svr4_to_bsd_sigaltstack(&sss, &nbss);
+		nbssp = &nbss;
 	} else
-		nbss = NULL;
-
-	sa.ss = nbss;
-	sa.oss = obss;
-
-	if ((error = sigaltstack(td, &sa)) != 0)
-		return error;
-
-	if (obss != NULL) {
-		if ((error = copyin(obss, &tmpbss, sizeof(tmpbss))) != 0)
-			return error;
-		bsd_to_svr4_sigaltstack(&tmpbss, &tmpsss);
-		if ((error = copyout(&tmpsss, osss, sizeof(tmpsss))) != 0)
-			return error;
+		nbssp = NULL;
+	error = kern_sigaltstack(td, nbssp, &obss);
+	if (error == 0 && uap->oss != NULL) {
+		bsd_to_svr4_sigaltstack(&obss, &sss);
+		error = copyout(&sss, uap->oss, sizeof(sss));
 	}
-
-	return 0;
+	return (error);
 }
 
 /*
@@ -375,11 +329,12 @@
 	register struct thread *td;
 	struct svr4_sys_signal_args *uap;
 {
+	struct proc *p;
 	int signum;
-	int error, *retval = td->td_retval;
-	caddr_t sg = stackgap_init();
+	int error;
 
-	DPRINTF(("@@@ svr4_sys_signal(%d)\n", td->td_proc->p_pid));
+	p = td->td_proc;
+	DPRINTF(("@@@ svr4_sys_signal(%d)\n", p->p_pid));
 
 	signum = SVR4_SVR42BSD_SIG(SVR4_SIGNO(uap->signum));
 	if (signum <= 0 || signum > SVR4_NSIG)
@@ -393,99 +348,66 @@
 
 	case SVR4_SIGNAL_MASK:
 		{
-			struct sigaction_args sa_args;
-			struct sigaction *nbsa, *obsa, sa;
+			struct sigaction nbsa, obsa;
 
-			nbsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			obsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			sa_args.sig = signum;
-			sa_args.act = nbsa;
-			sa_args.oact = obsa;
-
-			sa.sa_handler = (sig_t) uap->handler;
-			SIGEMPTYSET(sa.sa_mask);
-			sa.sa_flags = 0;
-
+			nbsa.sa_handler = (sig_t) uap->handler;
+			SIGEMPTYSET(nbsa.sa_mask);
+			nbsa.sa_flags = 0;
 			if (signum != SIGALRM)
-				sa.sa_flags = SA_RESTART;
-
-			if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0)
-				return error;
-			if ((error = sigaction(td, &sa_args)) != 0) {
+				nbsa.sa_flags = SA_RESTART;
+			error = kern_sigaction(td, signum, &nbsa, &obsa, 0);
+			if (error != 0) {
 				DPRINTF(("signal: sigaction failed: %d\n",
 					 error));
-				*retval = (int)SVR4_SIG_ERR;
-				return error;
+				td->td_retval[0] = (int)SVR4_SIG_ERR;
+				return (error);
 			}
-			if ((error = copyin(obsa, &sa, sizeof(sa))) != 0)
-				return error;
-			*retval = (int)sa.sa_handler;
-			return 0;
+			td->td_retval[0] = (int)obsa.sa_handler;
+			return (0);
 		}
 
 	case SVR4_SIGHOLD_MASK:
 sighold:
 		{
-			struct sigprocmask_args sa;
-			sigset_t *set;
+			sigset_t set;
 
-			set = stackgap_alloc(&sg, sizeof(sigset_t));
-			SIGEMPTYSET(*set);
-			SIGADDSET(*set, signum);
-			sa.how = SIG_BLOCK;
-			sa.set = set;
-			sa.oset = NULL;
-			return sigprocmask(td, &sa);
+			SIGEMPTYSET(set);
+			SIGADDSET(set, signum);
+			return (kern_sigprocmask(td, SIG_BLOCK, &set, NULL, 0));
 		}
 
 	case SVR4_SIGRELSE_MASK:
 		{
-			struct sigprocmask_args sa;
-			sigset_t *set;
+			sigset_t set;
 
-			set = stackgap_alloc(&sg, sizeof(sigset_t));
-			SIGEMPTYSET(*set);
-			SIGADDSET(*set, signum);
-			sa.how = SIG_UNBLOCK;
-			sa.set = set;
-			sa.oset = NULL;
-			return sigprocmask(td, &sa);
+			SIGEMPTYSET(set);
+			SIGADDSET(set, signum);
+			return (kern_sigprocmask(td, SIG_UNBLOCK, &set, NULL,
+				    0));
 		}
 
 	case SVR4_SIGIGNORE_MASK:
 		{
-			struct sigaction_args sa_args;
-			struct sigaction *bsa, sa;
-
-			bsa = stackgap_alloc(&sg, sizeof(struct sigaction));
-			sa_args.sig = signum;
-			sa_args.act = bsa;
-			sa_args.oact = NULL;
+			struct sigaction sa;
 
 			sa.sa_handler = SIG_IGN;
 			SIGEMPTYSET(sa.sa_mask);
 			sa.sa_flags = 0;
-			if ((error = copyout(&sa, bsa, sizeof(sa))) != 0)
-				return error;
-			if ((error = sigaction(td, &sa_args)) != 0) {
+			error = kern_sigaction(td, signum, &sa, NULL, 0);
+			if (error != 0)
 				DPRINTF(("sigignore: sigaction failed\n"));
-				return error;
-			}
-			return 0;
+			return (error);
 		}
 
 	case SVR4_SIGPAUSE_MASK:
 		{
-			struct sigsuspend_args sa;
-			sigset_t *set;

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list