summaryrefslogtreecommitdiffstats
path: root/sys/i386/svr4/svr4_machdep.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
committerjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
commit5596676e6c6c1e81e899cd0531f9b1c28a292669 (patch)
treeb1a19fcdf05759281fab0d89efb13f0fdf42102e /sys/i386/svr4/svr4_machdep.c
parent83e00d4274950d2b531c24692cd123538ffbddb9 (diff)
downloadFreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.zip
FreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.tar.gz
KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
Diffstat (limited to 'sys/i386/svr4/svr4_machdep.c')
-rw-r--r--sys/i386/svr4/svr4_machdep.c57
1 files changed, 30 insertions, 27 deletions
diff --git a/sys/i386/svr4/svr4_machdep.c b/sys/i386/svr4/svr4_machdep.c
index 7dc2d47..f1522f6 100644
--- a/sys/i386/svr4/svr4_machdep.c
+++ b/sys/i386/svr4/svr4_machdep.c
@@ -77,26 +77,27 @@ static void svr4_getsiginfo __P((union svr4_siginfo *, int, u_long, caddr_t));
#if defined(__NetBSD__)
void
-svr4_setregs(p, epp, stack)
- struct proc *p;
+svr4_setregs(td, epp, stack)
+ struct thread *td;
struct exec_package *epp;
u_long stack;
{
- register struct pcb *pcb = &p->p_addr->u_pcb;
+ register struct pcb *pcb = td->td_pcb;
pcb->pcb_savefpu.sv_env.en_cw = __SVR4_NPXCW__;
- setregs(p, epp, stack, 0UL);
+ setregs(td, epp, stack, 0UL);
}
#endif /* __NetBSD__ */
void
-svr4_getcontext(p, uc, mask, oonstack)
- struct proc *p;
+svr4_getcontext(td, uc, mask, oonstack)
+ struct thread *td;
struct svr4_ucontext *uc;
sigset_t *mask;
int oonstack;
{
- struct trapframe *tf = p->p_frame;
+ struct proc *p = td->td_proc;
+ struct trapframe *tf = td->td_frame;
svr4_greg_t *r = uc->uc_mcontext.greg;
struct svr4_sigaltstack *s = &uc->uc_stack;
#if defined(DONE_MORE_SIGALTSTACK_WORK)
@@ -104,7 +105,7 @@ svr4_getcontext(p, uc, mask, oonstack)
struct sigaltstack *sf;
#endif
- PROC_LOCK(p);
+ PROC_LOCK(td->td_proc);
#if defined(DONE_MORE_SIGALTSTACK_WORK)
psp = p->p_sigacts;
sf = &p->p_sigstk;
@@ -122,7 +123,7 @@ svr4_getcontext(p, uc, mask, oonstack)
r[SVR4_X86_FS] = tf->tf_vm86_fs;
r[SVR4_X86_ES] = tf->tf_vm86_es;
r[SVR4_X86_DS] = tf->tf_vm86_ds;
- r[SVR4_X86_EFL] = get_vflags(p);
+ r[SVR4_X86_EFL] = get_vflags(td);
} else
#endif
{
@@ -162,7 +163,7 @@ svr4_getcontext(p, uc, mask, oonstack)
s->ss_size = 16384;
s->ss_flags = 0;
#endif
- PROC_UNLOCK(p);
+ PROC_UNLOCK(td->td_proc);
/*
* Set the signal mask
@@ -186,24 +187,25 @@ svr4_getcontext(p, uc, mask, oonstack)
* a machine fault.
*/
int
-svr4_setcontext(p, uc)
- struct proc *p;
+svr4_setcontext(td, uc)
+ struct thread *td;
struct svr4_ucontext *uc;
{
#if defined(DONE_MORE_SIGALTSTACK_WORK)
struct sigacts *psp;
#endif
+ struct proc *p = td->td_proc;
register struct trapframe *tf;
svr4_greg_t *r = uc->uc_mcontext.greg;
struct svr4_sigaltstack *s = &uc->uc_stack;
struct sigaltstack *sf;
sigset_t mask;
- PROC_LOCK(p);
+ PROC_LOCK(td->td_proc);
#if defined(DONE_MORE_SIGALTSTACK_WORK)
- psp = p->p_sigacts;
+ psp = td->td_proc->p_sigacts;
#endif
- sf = &p->p_sigstk;
+ sf = &td->td_proc->p_sigstk;
/*
* XXX:
@@ -219,7 +221,7 @@ svr4_setcontext(p, uc)
DPRINTF(("svr4_setcontext(%d)\n", p->p_pid));
- tf = p->p_frame;
+ tf = td->td_frame;
/*
* Restore register context.
@@ -231,7 +233,7 @@ svr4_setcontext(p, uc)
tf->tf_vm86_fs = r[SVR4_X86_FS];
tf->tf_vm86_es = r[SVR4_X86_ES];
tf->tf_vm86_ds = r[SVR4_X86_DS];
- set_vflags(p, r[SVR4_X86_EFL]);
+ set_vflags(td, r[SVR4_X86_EFL]);
} else
#endif
{
@@ -293,7 +295,7 @@ svr4_setcontext(p, uc)
SIG_CANTMASK(mask);
p->p_sigmask = mask;
}
- PROC_UNLOCK(p);
+ PROC_UNLOCK(td->td_proc);
return 0; /*EJUSTRETURN;*/
}
@@ -409,7 +411,8 @@ svr4_sendsig(catcher, sig, mask, code)
sigset_t *mask;
u_long code;
{
- register struct proc *p = curproc;
+ register struct thread *td = curthread;
+ struct proc *p = td->td_proc;
register struct trapframe *tf;
struct svr4_sigframe *fp, frame;
struct sigacts *psp;
@@ -421,7 +424,7 @@ svr4_sendsig(catcher, sig, mask, code)
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
- tf = p->p_frame;
+ tf = td->td_frame;
oonstack = sigonstack(tf->tf_esp);
/*
@@ -435,7 +438,7 @@ svr4_sendsig(catcher, sig, mask, code)
} else {
fp = (struct svr4_sigframe *)tf->tf_esp - 1;
}
- PROC_UNLOCK(p);
+ PROC_UNLOCK(td->td_proc);
/*
* Build the argument list for the signal handler.
@@ -447,7 +450,7 @@ svr4_sendsig(catcher, sig, mask, code)
* modify many kernel files to enable that]
*/
- svr4_getcontext(p, &frame.sf_uc, mask, oonstack);
+ svr4_getcontext(td, &frame.sf_uc, mask, oonstack);
#if defined(DEBUG_SVR4)
printf("obtained ucontext\n");
#endif
@@ -469,8 +472,8 @@ svr4_sendsig(catcher, sig, mask, code)
* Process has trashed its stack; give it an illegal
* instruction to halt it in its tracks.
*/
- PROC_LOCK(p);
- sigexit(p, SIGILL);
+ PROC_LOCK(td->td_proc);
+ sigexit(td, SIGILL);
/* NOTREACHED */
}
#if defined(__NetBSD__)
@@ -502,8 +505,8 @@ svr4_sendsig(catcher, sig, mask, code)
int
-svr4_sys_sysarch(p, v)
- struct proc *p;
+svr4_sys_sysarch(td, v)
+ struct thread *td;
struct svr4_sys_sysarch_args *v;
{
struct svr4_sys_sysarch_args *uap = v;
@@ -583,7 +586,7 @@ svr4_sys_sysarch(p, v)
return error;
}
- return sys_sysarch(p, &ua, retval);
+ return sys_sysarch(td, &ua, retval);
}
#endif
OpenPOWER on IntegriCloud