Date: Tue, 22 Apr 2003 11:30:19 -0700 (PDT) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 29410 for review Message-ID: <200304221830.h3MIUJ8G068650@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=29410 Change 29410 by jhb@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) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304221830.h3MIUJ8G068650>
