PERFORCE change 31093 for review
John Baldwin
jhb at FreeBSD.org
Tue May 13 13:49:32 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=31093
Change 31093 by jhb at jhb_laptop on 2003/05/13 13:49:26
IFC @31091 (loop back sigacts locking).
Affected files ...
.. //depot/projects/smpng/sys/alpha/alpha/machdep.c#56 integrate
.. //depot/projects/smpng/sys/alpha/osf1/osf1_signal.c#20 integrate
.. //depot/projects/smpng/sys/amd64/amd64/machdep.c#4 integrate
.. //depot/projects/smpng/sys/compat/linprocfs/linprocfs.c#27 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_filio.c#11 integrate
.. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#24 integrate
.. //depot/projects/smpng/sys/dev/acpica/Osd/OsdHardware.c#8 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpivar.h#25 integrate
.. //depot/projects/smpng/sys/i386/acpica/acpi_machdep.c#8 integrate
.. //depot/projects/smpng/sys/i386/acpica/acpi_wakeup.c#15 integrate
.. //depot/projects/smpng/sys/i386/i386/machdep.c#59 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_sysvec.c#32 integrate
.. //depot/projects/smpng/sys/i386/svr4/svr4_machdep.c#12 integrate
.. //depot/projects/smpng/sys/ia64/ia64/machdep.c#54 integrate
.. //depot/projects/smpng/sys/kern/init_main.c#34 integrate
.. //depot/projects/smpng/sys/kern/kern_condvar.c#28 integrate
.. //depot/projects/smpng/sys/kern/kern_exec.c#57 integrate
.. //depot/projects/smpng/sys/kern/kern_exit.c#65 integrate
.. //depot/projects/smpng/sys/kern/kern_fork.c#60 integrate
.. //depot/projects/smpng/sys/kern/kern_kthread.c#12 integrate
.. //depot/projects/smpng/sys/kern/kern_proc.c#52 integrate
.. //depot/projects/smpng/sys/kern/kern_sig.c#67 integrate
.. //depot/projects/smpng/sys/kern/kern_synch.c#49 integrate
.. //depot/projects/smpng/sys/kern/kern_time.c#23 integrate
.. //depot/projects/smpng/sys/kern/subr_trap.c#53 integrate
.. //depot/projects/smpng/sys/kern/tty.c#34 integrate
.. //depot/projects/smpng/sys/kern/tty_pty.c#22 integrate
.. //depot/projects/smpng/sys/netncp/ncp_ncp.c#8 integrate
.. //depot/projects/smpng/sys/netsmb/smb_subr.c#12 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_socket.c#18 integrate
.. //depot/projects/smpng/sys/pc98/i386/machdep.c#53 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/machdep.c#38 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/machdep.c#50 integrate
.. //depot/projects/smpng/sys/sys/proc.h#86 integrate
.. //depot/projects/smpng/sys/sys/signalvar.h#16 integrate
.. //depot/projects/smpng/sys/sys/user.h#15 integrate
.. //depot/projects/smpng/sys/vm/vm_glue.c#27 integrate
Differences ...
==== //depot/projects/smpng/sys/alpha/alpha/machdep.c#56 (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/machdep.c,v 1.201 2003/04/25 01:50:28 deischen Exp $
+ * $FreeBSD: src/sys/alpha/alpha/machdep.c,v 1.202 2003/05/13 20:35:56 jhb Exp $
*/
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -1133,11 +1133,13 @@
td = curthread;
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
+ psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
+
frame = td->td_frame;
- oonstack = sigonstack(alpha_pal_rdusp());
fsize = sizeof ksi;
rndfsize = ((fsize + 15) / 16) * 16;
- psp = p->p_sigacts;
+ oonstack = sigonstack(alpha_pal_rdusp());
/*
* Allocate and validate space for the signal handler
@@ -1155,6 +1157,7 @@
#endif
} else
sip = (osiginfo_t *)(alpha_pal_rdusp() - rndfsize);
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -1210,7 +1213,8 @@
frame->tf_regs[FRAME_A0] = sig;
frame->tf_regs[FRAME_FLAGS] = 0; /* full restore */
PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig))
+ mtx_lock(&psp->ps_mtx);
+ if (SIGISMEMBER(psp->ps_siginfo, sig))
frame->tf_regs[FRAME_A1] = (u_int64_t)sip;
else
frame->tf_regs[FRAME_A1] = code;
@@ -1235,6 +1239,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
frame = td->td_frame;
oonstack = sigonstack(alpha_pal_rdusp());
@@ -1276,6 +1281,7 @@
#endif
} else
sfp = (struct sigframe4 *)(alpha_pal_rdusp() - rndfsize);
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/* save the floating-point state, if necessary, then copy it. */
@@ -1311,7 +1317,8 @@
frame->tf_regs[FRAME_PC] = PS_STRINGS - szfreebsd4_sigcode;
frame->tf_regs[FRAME_A0] = sig;
PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ mtx_lock(&psp->ps_mtx);
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
frame->tf_regs[FRAME_A1] = (u_int64_t)&(sfp->sf_si);
/* Fill in POSIX parts */
@@ -1343,6 +1350,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
#ifdef COMPAT_FREEBSD4
if (SIGISMEMBER(psp->ps_freebsd4, sig)) {
freebsd4_sendsig(catcher, sig, mask, code);
@@ -1397,6 +1405,7 @@
#endif
} else
sfp = (struct sigframe *)(alpha_pal_rdusp() - rndfsize);
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/* save the floating-point state, if necessary, then copy it. */
@@ -1432,7 +1441,8 @@
frame->tf_regs[FRAME_PC] = PS_STRINGS - szsigcode;
frame->tf_regs[FRAME_A0] = sig;
PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ mtx_lock(&psp->ps_mtx);
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
frame->tf_regs[FRAME_A1] = (u_int64_t)&(sfp->sf_si);
/* Fill in POSIX parts */
==== //depot/projects/smpng/sys/alpha/osf1/osf1_signal.c#20 (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.32 2003/04/29 06:33:03 alc Exp $
+ * $FreeBSD: src/sys/alpha/osf1/osf1_signal.c,v 1.33 2003/05/13 20:35:56 jhb Exp $
*/
#include "opt_compat.h"
@@ -471,6 +471,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
frame = td->td_frame;
oonstack = sigonstack(alpha_pal_rdusp());
@@ -490,6 +491,7 @@
p->p_sigstk.ss_flags |= SS_ONSTACK;
} else
sip = (osiginfo_t *)(alpha_pal_rdusp() - rndfsize);
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -551,6 +553,7 @@
frame->tf_regs[FRAME_FLAGS] = 0; /* full restore */
alpha_pal_wrusp((unsigned long)sip);
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
==== //depot/projects/smpng/sys/amd64/amd64/machdep.c#4 (text+ko) ====
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.575 2003/05/12 18:37:56 peter Exp $
+ * $FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.576 2003/05/13 20:35:57 jhb Exp $
*/
#include "opt_atalk.h"
@@ -235,6 +235,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
regs = td->td_frame;
oonstack = sigonstack(regs->tf_rsp);
@@ -262,7 +263,6 @@
sp = (char *)regs->tf_rsp - sizeof(struct sigframe) - 128;
/* Align to 16 bytes. */
sfp = (struct sigframe *)((unsigned long)sp & ~0xF);
- PROC_UNLOCK(p);
/* Translate the signal if appropriate. */
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
@@ -271,8 +271,7 @@
/* Build the argument list for the signal handler. */
regs->tf_rdi = sig; /* arg 1 in %rdi */
regs->tf_rdx = (register_t)&sfp->sf_uc; /* arg 3 in %rdx */
- PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
regs->tf_rsi = (register_t)&sfp->sf_si; /* arg 2 in %rsi */
sf.sf_ahu.sf_action = (__siginfohandler_t *)catcher;
@@ -287,6 +286,7 @@
regs->tf_rcx = regs->tf_addr; /* arg 4 in %rcx */
sf.sf_ahu.sf_handler = catcher;
}
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -305,6 +305,7 @@
regs->tf_rflags &= ~PSL_T;
regs->tf_cs = _ucodesel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
/*
==== //depot/projects/smpng/sys/compat/linprocfs/linprocfs.c#27 (text+ko) ====
@@ -38,7 +38,7 @@
*
* @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
*
- * $FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.64 2003/04/17 21:58:45 jhb Exp $
+ * $FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.65 2003/05/13 20:35:57 jhb Exp $
*/
#include <sys/param.h>
@@ -547,6 +547,7 @@
char *state;
segsz_t lsize;
struct thread *td2;
+ struct sigacts *ps;
int i;
PROC_LOCK(p);
@@ -653,8 +654,11 @@
* relation to struct proc, so SigBlk is left unimplemented.
*/
sbuf_printf(sb, "SigBlk:\t%08x\n", 0); /* XXX */
- sbuf_printf(sb, "SigIgn:\t%08x\n", p->p_sigignore.__bits[0]);
- sbuf_printf(sb, "SigCgt:\t%08x\n", p->p_sigcatch.__bits[0]);
+ ps = p->p_sigacts;
+ mtx_lock(&ps->ps_mtx);
+ sbuf_printf(sb, "SigIgn:\t%08x\n", ps->ps_sigignore.__bits[0]);
+ sbuf_printf(sb, "SigCgt:\t%08x\n", ps->ps_sigcatch.__bits[0]);
+ mtx_unlock(&ps->ps_mtx);
PROC_UNLOCK(p);
/*
==== //depot/projects/smpng/sys/compat/svr4/svr4_filio.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/svr4/svr4_filio.c,v 1.27 2003/03/31 22:49:14 jeff Exp $
+ * $FreeBSD: src/sys/compat/svr4/svr4_filio.c,v 1.28 2003/05/13 20:35:57 jhb Exp $
*/
#include <sys/param.h>
@@ -132,10 +132,21 @@
DPRINTF(("svr4_read(%d, 0x%0x, %d) = %d\n",
uap->fd, uap->buf, uap->nbyte, rv));
if (rv == EAGAIN) {
+#ifdef DEBUG_SVR4
+ struct sigacts *ps;
+
+ PROC_LOCK(td->td_proc);
+ ps = td->td_proc->p_sigacts;
+ mtx_lock(&ps->ps_mtx);
+#endif
DPRINTF(("sigmask = 0x%x\n", td->td_sigmask));
- DPRINTF(("sigignore = 0x%x\n", td->td_proc->p_sigignore));
- DPRINTF(("sigcaught = 0x%x\n", td->td_proc->p_sigcatch));
+ DPRINTF(("sigignore = 0x%x\n", ps->ps_sigignore));
+ DPRINTF(("sigcaught = 0x%x\n", ps->ps_sigcatch));
DPRINTF(("siglist = 0x%x\n", td->td_siglist));
+#ifdef DEBUG_SVR4
+ mtx_unlock(&ps->ps_mtx);
+ PROC_UNLOCK(td->td_proc);
+#endif
}
#if defined(GROTTY_READ_HACK)
==== //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#24 (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_misc.c,v 1.62 2003/04/17 22:09:08 jhb Exp $
+ * $FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.63 2003/05/13 20:35:57 jhb Exp $
*/
/*
@@ -1363,12 +1363,8 @@
sx_xunlock(&proctree_lock);
PROC_LOCK(q);
- if (--q->p_procsig->ps_refcnt == 0) {
- if (q->p_sigacts != &q->p_uarea->u_sigacts)
- FREE(q->p_sigacts, M_SUBPROC);
- FREE(q->p_procsig, M_SUBPROC);
- q->p_procsig = NULL;
- }
+ sigacts_free(q->p_sigacts);
+ q->p_sigacts = NULL;
PROC_UNLOCK(q);
/*
==== //depot/projects/smpng/sys/dev/acpica/Osd/OsdHardware.c#8 (text+ko) ====
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/Osd/OsdHardware.c,v 1.7 2003/05/12 16:54:55 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/Osd/OsdHardware.c,v 1.8 2003/05/13 16:59:46 jhb Exp $
*/
/*
@@ -36,7 +36,11 @@
#include <machine/bus_pio.h>
#include <machine/bus.h>
#include <machine/pci_cfgreg.h>
+#if __FreeBSD_version >= 500000
#include <dev/pci/pcireg.h>
+#else
+#include <pci/pcireg.h>
+#endif
/*
* ACPICA's rather gung-ho approach to hardware resource ownership is a little
==== //depot/projects/smpng/sys/dev/acpica/acpivar.h#25 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/acpica/acpivar.h,v 1.40 2003/04/29 18:50:33 njl Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpivar.h,v 1.41 2003/05/13 16:59:46 jhb Exp $
*/
#include "bus_if.h"
@@ -39,6 +39,10 @@
#include <machine/bus.h>
#include <machine/resource.h>
+#if __FreeBSD_version < 500000
+typedef vm_offset_t vm_paddr_t;
+#endif
+
struct acpi_softc {
device_t acpi_dev;
dev_t acpi_dev_t;
@@ -389,12 +393,14 @@
extern int acpi_acad_get_acline(int *);
+#if __FreeBSD_version >= 500000
#ifndef ACPI_MAX_THREADS
#define ACPI_MAX_THREADS 3
#endif
#if ACPI_MAX_THREADS > 0
#define ACPI_USE_THREADS
#endif
+#endif
#ifdef ACPI_USE_THREADS
/*
==== //depot/projects/smpng/sys/i386/acpica/acpi_machdep.c#8 (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/i386/acpica/acpi_machdep.c,v 1.8 2003/03/24 19:14:45 mdodd Exp $
+ * $FreeBSD: src/sys/i386/acpica/acpi_machdep.c,v 1.9 2003/05/13 16:59:46 jhb Exp $
*/
#include <sys/param.h>
@@ -52,7 +52,11 @@
#include <machine/apm_bios.h>
#include <machine/pc/bios.h>
+#if __FreeBSD_version < 500000
+#include <i386/apm/apm.h>
+#else
#include <i386/bios/apm.h>
+#endif
static struct apm_softc apm_softc;
==== //depot/projects/smpng/sys/i386/acpica/acpi_wakeup.c#15 (text+ko) ====
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/i386/acpica/acpi_wakeup.c,v 1.18 2003/03/25 00:07:01 jake Exp $
+ * $FreeBSD: src/sys/i386/acpica/acpi_wakeup.c,v 1.19 2003/05/13 16:59:46 jhb Exp $
*/
#include <sys/param.h>
@@ -58,6 +58,11 @@
#include "acpi_wakecode.h"
+#if __FreeBSD_version < 500000
+#define vm_page_lock_queues()
+#define vm_page_unlock_queues()
+#endif
+
extern void initializecpu(void);
static struct region_descriptor r_idt, r_gdt, *p_gdt;
==== //depot/projects/smpng/sys/i386/i386/machdep.c#59 (text+ko) ====
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.563 2003/04/25 01:50:28 deischen Exp $
+ * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.564 2003/05/13 20:35:58 jhb Exp $
*/
#include "opt_atalk.h"
@@ -295,6 +295,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
regs = td->td_frame;
oonstack = sigonstack(regs->tf_esp);
@@ -308,7 +309,6 @@
#endif
} else
fp = (struct osigframe *)regs->tf_esp - 1;
- PROC_UNLOCK(p);
/* Translate the signal if appropriate. */
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
@@ -317,8 +317,7 @@
/* Build the argument list for the signal handler. */
sf.sf_signum = sig;
sf.sf_scp = (register_t)&fp->sf_siginfo.si_sc;
- PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
sf.sf_arg2 = (register_t)&fp->sf_siginfo;
sf.sf_siginfo.si_signo = sig;
@@ -330,6 +329,7 @@
sf.sf_addr = regs->tf_err;
sf.sf_ahu.sf_handler = catcher;
}
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/* Save most if not all of trap frame. */
@@ -402,6 +402,7 @@
load_gs(_udatasel);
regs->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
#endif /* COMPAT_43 */
@@ -424,6 +425,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
regs = td->td_frame;
oonstack = sigonstack(regs->tf_esp);
@@ -447,7 +449,6 @@
#endif
} else
sfp = (struct sigframe4 *)regs->tf_esp - 1;
- PROC_UNLOCK(p);
/* Translate the signal if appropriate. */
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
@@ -456,8 +457,7 @@
/* Build the argument list for the signal handler. */
sf.sf_signum = sig;
sf.sf_ucontext = (register_t)&sfp->sf_uc;
- PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
sf.sf_siginfo = (register_t)&sfp->sf_si;
sf.sf_ahu.sf_action = (__siginfohandler_t *)catcher;
@@ -472,6 +472,7 @@
sf.sf_addr = regs->tf_err;
sf.sf_ahu.sf_handler = catcher;
}
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -523,6 +524,7 @@
regs->tf_fs = _udatasel;
regs->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
#endif /* COMPAT_FREEBSD4 */
@@ -545,6 +547,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
#ifdef COMPAT_FREEBSD4
if (SIGISMEMBER(psp->ps_freebsd4, sig)) {
freebsd4_sendsig(catcher, sig, mask, code);
@@ -585,7 +588,6 @@
sp = (char *)regs->tf_esp - sizeof(struct sigframe);
/* Align to 16 bytes. */
sfp = (struct sigframe *)((unsigned int)sp & ~0xF);
- PROC_UNLOCK(p);
/* Translate the signal if appropriate. */
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
@@ -594,8 +596,7 @@
/* Build the argument list for the signal handler. */
sf.sf_signum = sig;
sf.sf_ucontext = (register_t)&sfp->sf_uc;
- PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
sf.sf_siginfo = (register_t)&sfp->sf_si;
sf.sf_ahu.sf_action = (__siginfohandler_t *)catcher;
@@ -610,6 +611,7 @@
sf.sf_addr = regs->tf_err;
sf.sf_ahu.sf_handler = catcher;
}
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -661,6 +663,7 @@
regs->tf_fs = _udatasel;
regs->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
/*
==== //depot/projects/smpng/sys/i386/linux/linux_sysvec.c#32 (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/i386/linux/linux_sysvec.c,v 1.122 2003/05/11 21:51:11 mdodd Exp $
+ * $FreeBSD: src/sys/i386/linux/linux_sysvec.c,v 1.123 2003/05/13 20:35:58 jhb Exp $
*/
/* XXX we use functions that might not exist. */
@@ -268,11 +268,14 @@
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
+ struct sigacts *psp;
struct trapframe *regs;
struct l_rt_sigframe *fp, frame;
int oonstack;
PROC_LOCK_ASSERT(p, MA_OWNED);
+ psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
regs = td->td_frame;
oonstack = sigonstack(regs->tf_esp);
@@ -285,11 +288,12 @@
* Allocate space for the signal handler context.
*/
if ((p->p_flag & P_ALTSTACK) && !oonstack &&
- SIGISMEMBER(p->p_sigacts->ps_sigonstack, sig)) {
+ SIGISMEMBER(psp->ps_sigonstack, sig)) {
fp = (struct l_rt_sigframe *)(p->p_sigstk.ss_sp +
p->p_sigstk.ss_size - sizeof(struct l_rt_sigframe));
} else
fp = (struct l_rt_sigframe *)regs->tf_esp - 1;
+ mtx_unlock(&psp->ps_mtx);
/*
* Build the argument list for the signal handler.
@@ -378,6 +382,7 @@
regs->tf_fs = _udatasel;
regs->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
@@ -396,13 +401,16 @@
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
+ struct sigacts *psp;
struct trapframe *regs;
struct l_sigframe *fp, frame;
l_sigset_t lmask;
int oonstack, i;
PROC_LOCK_ASSERT(p, MA_OWNED);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
linux_rt_sendsig(catcher, sig, mask, code);
return;
@@ -421,11 +429,12 @@
* Allocate space for the signal handler context.
*/
if ((p->p_flag & P_ALTSTACK) && !oonstack &&
- SIGISMEMBER(p->p_sigacts->ps_sigonstack, sig)) {
+ SIGISMEMBER(psp->ps_sigonstack, sig)) {
fp = (struct l_sigframe *)(p->p_sigstk.ss_sp +
p->p_sigstk.ss_size - sizeof(struct l_sigframe));
} else
fp = (struct l_sigframe *)regs->tf_esp - 1;
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -489,6 +498,7 @@
regs->tf_fs = _udatasel;
regs->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
}
/*
==== //depot/projects/smpng/sys/i386/svr4/svr4_machdep.c#12 (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/i386/svr4/svr4_machdep.c,v 1.31 2003/04/17 22:19:47 jhb Exp $
+ * $FreeBSD: src/sys/i386/svr4/svr4_machdep.c,v 1.32 2003/05/13 20:35:58 jhb Exp $
*/
#include <sys/types.h>
@@ -428,6 +428,7 @@
#endif
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
tf = td->td_frame;
oonstack = sigonstack(tf->tf_esp);
@@ -443,6 +444,7 @@
} else {
fp = (struct svr4_sigframe *)tf->tf_esp - 1;
}
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
/*
@@ -505,6 +507,7 @@
load_gs(_udatasel);
tf->tf_ss = _udatasel;
PROC_LOCK(p);
+ mtx_lock(&psp->ps_mtx);
#endif
}
==== //depot/projects/smpng/sys/ia64/ia64/machdep.c#54 (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/ia64/ia64/machdep.c,v 1.130 2003/05/02 20:34:15 marcel Exp $
+ * $FreeBSD: src/sys/ia64/ia64/machdep.c,v 1.131 2003/05/13 20:35:58 jhb Exp $
*/
#include "opt_compat.h"
@@ -756,6 +756,7 @@
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ mtx_assert(&psp->ps_mtx, MA_OWNED);
frame = td->td_frame;
oonstack = sigonstack(frame->tf_r[FRAME_SP]);
rndfsize = ((sizeof(sf) + 15) / 16) * 16;
@@ -822,6 +823,7 @@
#endif
} else
sfp = (struct sigframe *)(frame->tf_r[FRAME_SP] - rndfsize);
+ mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
#ifdef DEBUG
@@ -870,7 +872,8 @@
frame->tf_cr_iip = PS_STRINGS - (esigcode - sigcode);
frame->tf_r[FRAME_R1] = sig;
PROC_LOCK(p);
- if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
+ mtx_lock(&psp->ps_mtx);
+ if (SIGISMEMBER(psp->ps_siginfo, sig)) {
frame->tf_r[FRAME_R15] = (u_int64_t)&(sfp->sf_si);
/* Fill in POSIX parts */
==== //depot/projects/smpng/sys/kern/init_main.c#34 (text+ko) ====
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* @(#)init_main.c 8.9 (Berkeley) 1/21/94
- * $FreeBSD: src/sys/kern/init_main.c,v 1.230 2003/05/01 16:59:22 des Exp $
+ * $FreeBSD: src/sys/kern/init_main.c,v 1.231 2003/05/13 20:35:59 jhb Exp $
*/
#include "opt_init_path.h"
@@ -90,7 +90,6 @@
struct thread thread0;
struct kse kse0;
struct ksegrp ksegrp0;
-static struct procsig procsig0;
static struct filedesc0 filedesc0;
static struct plimit limit0;
struct vmspace vmspace0;
@@ -399,9 +398,8 @@
#endif
td->td_ucred = crhold(p->p_ucred);
- /* Create procsig. */
- p->p_procsig = &procsig0;
- p->p_procsig->ps_refcnt = 1;
+ /* Create sigacts. */
+ p->p_sigacts = sigacts_alloc();
/* Initialize signal state for process 0. */
siginit(&proc0);
@@ -441,11 +439,10 @@
vmspace0.vm_map.pmap = vmspace_pmap(&vmspace0);
/*
- * We continue to place resource usage info and signal
- * actions in the user struct so they're pageable.
+ * We continue to place resource usage info
+ * in the user struct so that it's pageable.
*/
p->p_stats = &p->p_uarea->u_stats;
- p->p_sigacts = &p->p_uarea->u_sigacts;
/*
* Charge root for one process.
==== //depot/projects/smpng/sys/kern/kern_condvar.c#28 (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/kern/kern_condvar.c,v 1.40 2003/04/17 22:21:05 jhb Exp $
+ * $FreeBSD: src/sys/kern/kern_condvar.c,v 1.41 2003/05/13 20:35:59 jhb Exp $
*/
#include "opt_ktrace.h"
@@ -146,7 +146,9 @@
mtx_unlock_spin(&sched_lock);
p = td->td_proc;
PROC_LOCK(p);
+ mtx_lock(&p->p_sigacts->ps_mtx);
sig = cursig(td);
+ mtx_unlock(&p->p_sigacts->ps_mtx);
if (thread_suspend_check(1))
sig = SIGSTOP;
mtx_lock_spin(&sched_lock);
@@ -283,6 +285,7 @@
mtx_unlock_spin(&sched_lock);
PROC_LOCK(p);
+ mtx_lock(&p->p_sigacts->ps_mtx);
if (sig == 0)
sig = cursig(td); /* XXXKSE */
if (sig != 0) {
@@ -291,6 +294,7 @@
else
rval = ERESTART;
}
+ mtx_unlock(&p->p_sigacts->ps_mtx);
if (p->p_flag & P_WEXIT)
rval = EINTR;
PROC_UNLOCK(p);
@@ -446,6 +450,7 @@
mtx_unlock_spin(&sched_lock);
PROC_LOCK(p);
+ mtx_lock(&p->p_sigacts->ps_mtx);
if (sig == 0)
sig = cursig(td);
if (sig != 0) {
@@ -454,6 +459,7 @@
else
rval = ERESTART;
}
+ mtx_unlock(&p->p_sigacts->ps_mtx);
if (p->p_flag & P_WEXIT)
rval = EINTR;
PROC_UNLOCK(p);
==== //depot/projects/smpng/sys/kern/kern_exec.c#57 (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/kern/kern_exec.c,v 1.218 2003/04/01 01:26:20 jeff Exp $
+ * $FreeBSD: src/sys/kern/kern_exec.c,v 1.219 2003/05/13 20:35:59 jhb Exp $
*/
#include "opt_ktrace.h"
@@ -163,7 +163,7 @@
struct vattr attr;
int (*img_first)(struct image_params *);
struct pargs *oldargs = NULL, *newargs = NULL;
- struct procsig *oldprocsig, *newprocsig;
+ struct sigacts *oldsigacts, *newsigacts;
#ifdef KTRACE
struct vnode *tracevp = NULL;
struct ucred *tracecred = NULL;
@@ -413,23 +413,16 @@
* reset.
*/
PROC_LOCK(p);
- mp_fixme("procsig needs a lock");
- if (p->p_procsig->ps_refcnt > 1) {
- oldprocsig = p->p_procsig;
+ if (sigacts_shared(p->p_sigacts)) {
+ oldsigacts = p->p_sigacts;
PROC_UNLOCK(p);
- MALLOC(newprocsig, struct procsig *, sizeof(struct procsig),
- M_SUBPROC, M_WAITOK);
- bcopy(oldprocsig, newprocsig, sizeof(*newprocsig));
- newprocsig->ps_refcnt = 1;
- oldprocsig->ps_refcnt--;
+ newsigacts = sigacts_alloc();
+ sigacts_copy(newsigacts, oldsigacts);
PROC_LOCK(p);
- p->p_procsig = newprocsig;
- if (p->p_sigacts == &p->p_uarea->u_sigacts)
- panic("shared procsig but private sigacts?");
+ p->p_sigacts = newsigacts;
+ } else
+ oldsigacts = NULL;
- p->p_uarea->u_sigacts = *p->p_sigacts;
- p->p_sigacts = &p->p_uarea->u_sigacts;
- }
/* Stop profiling */
stopprofclock(p);
@@ -628,6 +621,8 @@
pargs_drop(oldargs);
if (newargs != NULL)
pargs_drop(newargs);
+ if (oldsigacts != NULL)
+ sigacts_free(oldsigacts);
exec_fail_dealloc:
==== //depot/projects/smpng/sys/kern/kern_exit.c#65 (text+ko) ====
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_exit.c 8.7 (Berkeley) 2/12/94
- * $FreeBSD: src/sys/kern/kern_exit.c,v 1.213 2003/05/01 21:16:38 jhb Exp $
+ * $FreeBSD: src/sys/kern/kern_exit.c,v 1.214 2003/05/13 20:35:59 jhb Exp $
*/
#include "opt_compat.h"
@@ -431,9 +431,11 @@
* 1 instead (and hope it will handle this situation).
*/
PROC_LOCK(p->p_pptr);
- if (p->p_pptr->p_procsig->ps_flag & (PS_NOCLDWAIT | PS_CLDSIGIGN)) {
+ mtx_lock(&p->p_pptr->p_sigacts->ps_mtx);
+ if (p->p_pptr->p_sigacts->ps_flag & (PS_NOCLDWAIT | PS_CLDSIGIGN)) {
struct proc *pp;
+ mtx_unlock(&p->p_pptr->p_sigacts->ps_mtx);
pp = p->p_pptr;
PROC_UNLOCK(pp);
proc_reparent(p, initproc);
@@ -445,7 +447,8 @@
*/
if (LIST_EMPTY(&pp->p_children))
wakeup(pp);
- }
+ } else
+ mtx_unlock(&p->p_pptr->p_sigacts->ps_mtx);
if (p->p_sigparent && p->p_pptr != initproc)
psignal(p->p_pptr, p->p_sigparent);
@@ -656,23 +659,14 @@
(void)chgproccnt(p->p_ucred->cr_ruidinfo, -1, 0);
/*
- * Free up credentials.
+ * Free credentials, arguments, and sigacts
*/
crfree(p->p_ucred);
- p->p_ucred = NULL; /* XXX: why? */
-
- /*
- * Remove unused arguments
- */
+ p->p_ucred = NULL;
pargs_drop(p->p_args);
p->p_args = NULL;
-
- if (--p->p_procsig->ps_refcnt == 0) {
- if (p->p_sigacts != &p->p_uarea->u_sigacts)
- FREE(p->p_sigacts, M_SUBPROC);
- FREE(p->p_procsig, M_SUBPROC);
- p->p_procsig = NULL;
- }
+ sigacts_free(p->p_sigacts);
+ p->p_sigacts = NULL;
/*
* do any thread-system specific cleanups
==== //depot/projects/smpng/sys/kern/kern_fork.c#60 (text+ko) ====
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_fork.c 8.6 (Berkeley) 4/8/94
- * $FreeBSD: src/sys/kern/kern_fork.c,v 1.197 2003/05/01 21:16:38 jhb Exp $
+ * $FreeBSD: src/sys/kern/kern_fork.c,v 1.198 2003/05/13 20:35:59 jhb Exp $
*/
#include "opt_ktrace.h"
@@ -214,7 +214,6 @@
struct kse *ke2;
struct ksegrp *kg2;
struct sigacts *newsigacts;
- struct procsig *newprocsig;
int error;
/* Can't copy and clear */
@@ -412,15 +411,10 @@
/*
* Malloc things while we don't hold any locks.
*/
- if (flags & RFSIGSHARE) {
- MALLOC(newsigacts, struct sigacts *,
- sizeof(struct sigacts), M_SUBPROC, M_WAITOK);
- newprocsig = NULL;
- } else {
+ if (flags & RFSIGSHARE)
newsigacts = NULL;
- MALLOC(newprocsig, struct procsig *, sizeof(struct procsig),
- M_SUBPROC, M_WAITOK);
- }
+ else
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list