diff options
Diffstat (limited to 'sys/ia64')
-rw-r--r-- | sys/ia64/ia64/exception.S | 2 | ||||
-rw-r--r-- | sys/ia64/ia64/exception.s | 2 | ||||
-rw-r--r-- | sys/ia64/ia64/genassym.c | 65 | ||||
-rw-r--r-- | sys/ia64/ia64/interrupt.c | 8 | ||||
-rw-r--r-- | sys/ia64/ia64/locore.S | 24 | ||||
-rw-r--r-- | sys/ia64/ia64/locore.s | 24 | ||||
-rw-r--r-- | sys/ia64/ia64/machdep.c | 144 | ||||
-rw-r--r-- | sys/ia64/ia64/mem.c | 12 | ||||
-rw-r--r-- | sys/ia64/ia64/pmap.c | 124 | ||||
-rw-r--r-- | sys/ia64/ia64/procfs_machdep.c | 38 | ||||
-rw-r--r-- | sys/ia64/ia64/ssc.c | 10 | ||||
-rw-r--r-- | sys/ia64/ia64/sscdisk.c | 8 | ||||
-rw-r--r-- | sys/ia64/ia64/support.S | 54 | ||||
-rw-r--r-- | sys/ia64/ia64/support.s | 54 | ||||
-rw-r--r-- | sys/ia64/ia64/swtch.s | 27 | ||||
-rw-r--r-- | sys/ia64/ia64/sys_machdep.c | 4 | ||||
-rw-r--r-- | sys/ia64/ia64/trap.c | 86 | ||||
-rw-r--r-- | sys/ia64/ia64/vm_machdep.c | 107 | ||||
-rw-r--r-- | sys/ia64/include/cpu.h | 14 | ||||
-rw-r--r-- | sys/ia64/include/globaldata.h | 17 | ||||
-rw-r--r-- | sys/ia64/include/globals.h | 8 | ||||
-rw-r--r-- | sys/ia64/include/md_var.h | 10 | ||||
-rw-r--r-- | sys/ia64/include/mutex.h | 2 | ||||
-rw-r--r-- | sys/ia64/include/param.h | 6 | ||||
-rw-r--r-- | sys/ia64/include/pcpu.h | 17 | ||||
-rw-r--r-- | sys/ia64/include/proc.h | 8 | ||||
-rw-r--r-- | sys/ia64/include/reg.h | 4 |
27 files changed, 465 insertions, 414 deletions
diff --git a/sys/ia64/ia64/exception.S b/sys/ia64/ia64/exception.S index bec2ae1c192c..60c321ae0553 100644 --- a/sys/ia64/ia64/exception.S +++ b/sys/ia64/ia64/exception.S @@ -31,7 +31,7 @@ #include <assym.s> /* - * ar.k7 = curproc + * ar.k7 = curthread * ar.k6 = ksp * ar.k5 = kbsp * ar.k4 = globalp diff --git a/sys/ia64/ia64/exception.s b/sys/ia64/ia64/exception.s index bec2ae1c192c..60c321ae0553 100644 --- a/sys/ia64/ia64/exception.s +++ b/sys/ia64/ia64/exception.s @@ -31,7 +31,7 @@ #include <assym.s> /* - * ar.k7 = curproc + * ar.k7 = curthread * ar.k6 = ksp * ar.k5 = kbsp * ar.k4 = globalp diff --git a/sys/ia64/ia64/genassym.c b/sys/ia64/ia64/genassym.c index 7da41b092551..0984c87fe5e6 100644 --- a/sys/ia64/ia64/genassym.c +++ b/sys/ia64/ia64/genassym.c @@ -65,11 +65,8 @@ #include <nfs/nfs.h> #include <nfs/nfsdiskless.h> -ASSYM(UPAGES, UPAGES); -ASSYM(PAGE_SIZE, PAGE_SIZE); - -ASSYM(GD_CURPROC, offsetof(struct globaldata, gd_curproc)); -ASSYM(GD_FPCURPROC, offsetof(struct globaldata, gd_fpcurproc)); +ASSYM(GD_CURTHREAD, offsetof(struct globaldata, gd_curthread)); +ASSYM(GD_FPCURTHREAD, offsetof(struct globaldata, gd_fpcurthread)); ASSYM(GD_CURPCB, offsetof(struct globaldata, gd_curpcb)); ASSYM(GD_SWITCHTIME, offsetof(struct globaldata, gd_switchtime)); ASSYM(GD_CPUID, offsetof(struct globaldata, gd_cpuid)); @@ -79,13 +76,13 @@ ASSYM(MTX_RECURSE, offsetof(struct mtx, mtx_recurse)); ASSYM(MTX_SAVECRIT, offsetof(struct mtx, mtx_savecrit)); ASSYM(MTX_UNOWNED, MTX_UNOWNED); -ASSYM(P_ADDR, offsetof(struct proc, p_addr)); -ASSYM(P_MD_FLAGS, offsetof(struct proc, p_md.md_flags)); +ASSYM(TD_PROC, offsetof(struct thread, td_proc)); +ASSYM(TD_PCB, offsetof(struct thread, td_pcb)); +ASSYM(TD_KSTACK, offsetof(struct thread, td_kstack)); +ASSYM(TD_MD_FLAGS, offsetof(struct thread, td_md.md_flags)); ASSYM(VM_MAXUSER_ADDRESS, VM_MAXUSER_ADDRESS); -ASSYM(SIZEOF_USER, sizeof(struct user)); - ASSYM(FRAME_SYSCALL, FRAME_SYSCALL); ASSYM(TF_CR_IPSR, offsetof(struct trapframe, tf_cr_ipsr)); @@ -101,35 +98,35 @@ ASSYM(FRAME_R6, FRAME_R6); ASSYM(FRAME_R7, FRAME_R7); ASSYM(FRAME_SP, FRAME_SP); -ASSYM(U_PCB_R4, offsetof(struct user, u_pcb.pcb_r4)); -ASSYM(U_PCB_R5, offsetof(struct user, u_pcb.pcb_r5)); -ASSYM(U_PCB_R6, offsetof(struct user, u_pcb.pcb_r6)); -ASSYM(U_PCB_R7, offsetof(struct user, u_pcb.pcb_r7)); +ASSYM(PCB_R4, offsetof(struct pcb, pcb_r4)); +ASSYM(PCB_R5, offsetof(struct pcb, pcb_r5)); +ASSYM(PCB_R6, offsetof(struct pcb, pcb_r6)); +ASSYM(PCB_R7, offsetof(struct pcb, pcb_r7)); -ASSYM(U_PCB_F2, offsetof(struct user, u_pcb.pcb_f2)); -ASSYM(U_PCB_F3, offsetof(struct user, u_pcb.pcb_f3)); -ASSYM(U_PCB_F4, offsetof(struct user, u_pcb.pcb_f4)); -ASSYM(U_PCB_F5, offsetof(struct user, u_pcb.pcb_f5)); +ASSYM(PCB_F2, offsetof(struct pcb, pcb_f2)); +ASSYM(PCB_F3, offsetof(struct pcb, pcb_f3)); +ASSYM(PCB_F4, offsetof(struct pcb, pcb_f4)); +ASSYM(PCB_F5, offsetof(struct pcb, pcb_f5)); -ASSYM(U_PCB_B0, offsetof(struct user, u_pcb.pcb_b0)); -ASSYM(U_PCB_B1, offsetof(struct user, u_pcb.pcb_b1)); -ASSYM(U_PCB_B2, offsetof(struct user, u_pcb.pcb_b2)); -ASSYM(U_PCB_B3, offsetof(struct user, u_pcb.pcb_b3)); -ASSYM(U_PCB_B4, offsetof(struct user, u_pcb.pcb_b4)); -ASSYM(U_PCB_B5, offsetof(struct user, u_pcb.pcb_b5)); +ASSYM(PCB_B0, offsetof(struct pcb, pcb_b0)); +ASSYM(PCB_B1, offsetof(struct pcb, pcb_b1)); +ASSYM(PCB_B2, offsetof(struct pcb, pcb_b2)); +ASSYM(PCB_B3, offsetof(struct pcb, pcb_b3)); +ASSYM(PCB_B4, offsetof(struct pcb, pcb_b4)); +ASSYM(PCB_B5, offsetof(struct pcb, pcb_b5)); -ASSYM(U_PCB_OLD_UNAT, offsetof(struct user, u_pcb.pcb_old_unat)); -ASSYM(U_PCB_SP, offsetof(struct user, u_pcb.pcb_sp)); -ASSYM(U_PCB_PFS, offsetof(struct user, u_pcb.pcb_pfs)); -ASSYM(U_PCB_BSPSTORE, offsetof(struct user, u_pcb.pcb_bspstore)); +ASSYM(PCB_OLD_UNAT, offsetof(struct pcb, pcb_old_unat)); +ASSYM(PCB_SP, offsetof(struct pcb, pcb_sp)); +ASSYM(PCB_PFS, offsetof(struct pcb, pcb_pfs)); +ASSYM(PCB_BSPSTORE, offsetof(struct pcb, pcb_bspstore)); -ASSYM(U_PCB_UNAT, offsetof(struct user, u_pcb.pcb_unat)); -ASSYM(U_PCB_RNAT, offsetof(struct user, u_pcb.pcb_rnat)); -ASSYM(U_PCB_PR, offsetof(struct user, u_pcb.pcb_pr)); +ASSYM(PCB_UNAT, offsetof(struct pcb, pcb_unat)); +ASSYM(PCB_RNAT, offsetof(struct pcb, pcb_rnat)); +ASSYM(PCB_PR, offsetof(struct pcb, pcb_pr)); -ASSYM(U_PCB_ONFAULT, offsetof(struct user, u_pcb.pcb_onfault)); +ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); -ASSYM(U_PCB_HIGHFP, offsetof(struct user, u_pcb.pcb_highfp)); +ASSYM(PCB_HIGHFP, offsetof(struct pcb, pcb_highfp)); ASSYM(UC_MCONTEXT_MC_AR_BSP, offsetof(ucontext_t, uc_mcontext.mc_ar_bsp)); ASSYM(UC_MCONTEXT_MC_AR_RNAT, offsetof(ucontext_t, uc_mcontext.mc_ar_rnat)); @@ -137,4 +134,8 @@ ASSYM(UC_MCONTEXT_MC_AR_RNAT, offsetof(ucontext_t, uc_mcontext.mc_ar_rnat)); ASSYM(EFAULT, EFAULT); ASSYM(ENAMETOOLONG, ENAMETOOLONG); +ASSYM(PAGE_SIZE, PAGE_SIZE); +ASSYM(KSTACK_PAGES, KSTACK_PAGES); + ASSYM(SIZEOF_TRAPFRAME, sizeof(struct trapframe)); +ASSYM(SIZEOF_PCB, sizeof(struct pcb)); diff --git a/sys/ia64/ia64/interrupt.c b/sys/ia64/ia64/interrupt.c index b4b51a8fc141..8661fcd3fcb7 100644 --- a/sys/ia64/ia64/interrupt.c +++ b/sys/ia64/ia64/interrupt.c @@ -81,10 +81,10 @@ static u_int schedclk2; void interrupt(u_int64_t vector, struct trapframe *framep) { - struct proc *p; + struct thread *td; - p = curproc; - atomic_add_int(&p->p_intr_nesting_level, 1); + td = curthread; + atomic_add_int(&td->td_intr_nesting_level, 1); switch (vector) { case 240: /* clock interrupt */ CTR0(KTR_INTR, "clock interrupt"); @@ -107,7 +107,7 @@ interrupt(u_int64_t vector, struct trapframe *framep) panic("unexpected interrupt: vec %ld\n", vector); /* NOTREACHED */ } - atomic_subtract_int(&p->p_intr_nesting_level, 1); + atomic_subtract_int(&td->td_intr_nesting_level, 1); } diff --git a/sys/ia64/ia64/locore.S b/sys/ia64/ia64/locore.S index 6aed337e277c..55c081625d05 100644 --- a/sys/ia64/ia64/locore.S +++ b/sys/ia64/ia64/locore.S @@ -64,9 +64,9 @@ #endif .section .data.proc0,"aw" - .global proc0paddr + .global kstack .align PAGE_SIZE -proc0paddr: .space UPAGES * PAGE_SIZE +kstack: .space KSTACK_PAGES * PAGE_SIZE .text @@ -80,23 +80,19 @@ ENTRY(__start, 1) ;; mov cr.iva=r8 mov cr.pta=r9 - movl r10=proc0 ;; - add r10=P_ADDR,r10 - movl r11=proc0paddr + movl r11=kstack ;; - st8 [r10]=r11 srlz.i ;; srlz.d - mov r9=UPAGES*PAGE_SIZE-16 + mov r9=KSTACK_PAGES*PAGE_SIZE-SIZEOF_PCB-16 ;; movl gp=__gp // find kernel globals add sp=r9,r11 // proc0's stack - add r10=SIZEOF_USER,r11 // proc0's backing store mov ar.rsc=0 // turn off rse ;; - mov ar.bspstore=r10 // switch backing store + mov ar.bspstore=r11 // switch backing store ;; loadrs // invalidate regs ;; @@ -105,17 +101,19 @@ ENTRY(__start, 1) br.call.sptk.many rp=ia64_init /* - * switch to proc0 and then initialise the rest of the kernel. + * switch to thread0 and then initialise the rest of the kernel. */ alloc r16=ar.pfs,0,0,1,0 ;; - movl out0=proc0 + movl out0=thread0 ;; - add out0=P_ADDR,out0 + ld8 out0=[out0] + ;; + add out0=TD_PCB,out0 ;; ld8 out0=[out0] ;; - add r16=U_PCB_B0,out0 // return to mi_startup + add r16=PCB_B0,out0 // return to mi_startup movl r17=mi_startup ;; st8 [r16]=r17 diff --git a/sys/ia64/ia64/locore.s b/sys/ia64/ia64/locore.s index 6aed337e277c..55c081625d05 100644 --- a/sys/ia64/ia64/locore.s +++ b/sys/ia64/ia64/locore.s @@ -64,9 +64,9 @@ #endif .section .data.proc0,"aw" - .global proc0paddr + .global kstack .align PAGE_SIZE -proc0paddr: .space UPAGES * PAGE_SIZE +kstack: .space KSTACK_PAGES * PAGE_SIZE .text @@ -80,23 +80,19 @@ ENTRY(__start, 1) ;; mov cr.iva=r8 mov cr.pta=r9 - movl r10=proc0 ;; - add r10=P_ADDR,r10 - movl r11=proc0paddr + movl r11=kstack ;; - st8 [r10]=r11 srlz.i ;; srlz.d - mov r9=UPAGES*PAGE_SIZE-16 + mov r9=KSTACK_PAGES*PAGE_SIZE-SIZEOF_PCB-16 ;; movl gp=__gp // find kernel globals add sp=r9,r11 // proc0's stack - add r10=SIZEOF_USER,r11 // proc0's backing store mov ar.rsc=0 // turn off rse ;; - mov ar.bspstore=r10 // switch backing store + mov ar.bspstore=r11 // switch backing store ;; loadrs // invalidate regs ;; @@ -105,17 +101,19 @@ ENTRY(__start, 1) br.call.sptk.many rp=ia64_init /* - * switch to proc0 and then initialise the rest of the kernel. + * switch to thread0 and then initialise the rest of the kernel. */ alloc r16=ar.pfs,0,0,1,0 ;; - movl out0=proc0 + movl out0=thread0 ;; - add out0=P_ADDR,out0 + ld8 out0=[out0] + ;; + add out0=TD_PCB,out0 ;; ld8 out0=[out0] ;; - add r16=U_PCB_B0,out0 // return to mi_startup + add r16=PCB_B0,out0 // return to mi_startup movl r17=mi_startup ;; st8 [r16]=r17 diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c index eb6a997664e6..e5af47609be0 100644 --- a/sys/ia64/ia64/machdep.c +++ b/sys/ia64/ia64/machdep.c @@ -86,7 +86,9 @@ struct bootinfo bootinfo; struct mtx sched_lock; struct mtx Giant; -char proc0paddr[UPAGES * PAGE_SIZE]; +extern char kstack[]; +struct user *proc0uarea; +vm_offset_t proc0kstack; char machine[] = "ia64"; SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD, machine, 0, ""); @@ -546,11 +548,23 @@ ia64_init() } + proc_linkup(&proc0); + /* + * Init mapping for u page(s) for proc 0 + */ + proc0uarea = (struct user *)pmap_steal_memory(UAREA_PAGES * PAGE_SIZE); + proc0kstack = (vm_offset_t)kstack; + proc0.p_uarea = proc0uarea; + thread0 = &proc0.p_thread; + thread0->td_kstack = proc0kstack; + thread0->td_pcb = (struct pcb *) + (thread0->td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; /* * Setup the global data for the bootstrap cpu. */ { - size_t sz = round_page(UPAGES * PAGE_SIZE); + /* This is not a 'struct user' */ + size_t sz = round_page(KSTACK_PAGES * PAGE_SIZE); globalp = (struct globaldata *) pmap_steal_memory(sz); globaldata_init(globalp, 0, sz); ia64_set_k4((u_int64_t) globalp); @@ -568,18 +582,18 @@ ia64_init() * Set the kernel sp, reserving space for an (empty) trapframe, * and make proc0's trapframe pointer point to it for sanity. * Initialise proc0's backing store to start after u area. + * + * XXX what is all this +/- 16 stuff? */ - proc0.p_addr->u_pcb.pcb_sp = - (u_int64_t)proc0.p_addr + USPACE - sizeof(struct trapframe) - 16; - proc0.p_addr->u_pcb.pcb_bspstore = (u_int64_t) (proc0.p_addr + 1); - proc0.p_frame = - (struct trapframe *)(proc0.p_addr->u_pcb.pcb_sp + 16); + thread0->td_frame = (struct trapframe *)thread0->td_pcb - 1; + thread0->td_pcb->pcb_sp = (u_int64_t)thread0->td_frame - 16; + thread0->td_pcb->pcb_bspstore = (u_int64_t)proc0kstack; /* Setup curproc so that mutexes work */ - PCPU_SET(curproc, &proc0); + PCPU_SET(curthread, thread0); PCPU_SET(spinlocks, NULL); - LIST_INIT(&proc0.p_contested); + LIST_INIT(&thread0->td_contested); /* * Initialise mutexes. @@ -739,16 +753,19 @@ DELAY(int n) void sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) { - struct proc *p = curproc; + struct proc *p; + struct thread *td; struct trapframe *frame; struct sigacts *psp; struct sigframe sf, *sfp; u_int64_t sbs = 0; int oonstack, rndfsize; + td = curthread; + p = td->td_proc; PROC_LOCK_ASSERT(p, MA_OWNED); psp = p->p_sigacts; - frame = p->p_frame; + frame = td->td_frame; oonstack = sigonstack(frame->tf_r[FRAME_SP]); rndfsize = ((sizeof(sf) + 15) / 16) * 16; @@ -843,12 +860,12 @@ sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) #if 0 /* save the floating-point state, if necessary, then copy it. */ - ia64_fpstate_save(p, 1); - sf.sf_uc.uc_mcontext.mc_ownedfp = p->p_md.md_flags & MDP_FPUSED; - bcopy(&p->p_addr->u_pcb.pcb_fp, + ia64_fpstate_save(td, 1); + sf.sf_uc.uc_mcontext.mc_ownedfp = td->td_md.md_flags & MDP_FPUSED; + bcopy(&td->td_pcb->pcb_fp, (struct fpreg *)sf.sf_uc.uc_mcontext.mc_fpregs, sizeof(struct fpreg)); - sf.sf_uc.uc_mcontext.mc_fp_control = p->p_addr->u_pcb.pcb_fp_control; + sf.sf_uc.uc_mcontext.mc_fp_control = td->td_pcb.pcb_fp_control; #endif /* @@ -907,7 +924,7 @@ sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) */ #ifdef COMPAT_43 int -osigreturn(struct proc *p, +osigreturn(struct thread *td, struct osigreturn_args /* { struct osigcontext *sigcntxp; } */ *uap) @@ -927,18 +944,20 @@ osigreturn(struct proc *p, */ int -sigreturn(struct proc *p, +sigreturn(struct thread *td, struct sigreturn_args /* { ucontext_t *sigcntxp; } */ *uap) { ucontext_t uc, *ucp; struct pcb *pcb; - struct trapframe *frame = p->p_frame; + struct trapframe *frame = td->td_frame; struct __mcontext *mcp; + struct proc *p; ucp = uap->sigcntxp; - pcb = &p->p_addr->u_pcb; + pcb = td->td_pcb; + p = td->td_proc; #ifdef DEBUG if (sigdebug & SDB_FOLLOW) @@ -1000,12 +1019,11 @@ sigreturn(struct proc *p, PROC_UNLOCK(p); /* XXX ksc.sc_ownedfp ? */ - ia64_fpstate_drop(p); + ia64_fpstate_drop(td); #if 0 bcopy((struct fpreg *)uc.uc_mcontext.mc_fpregs, - &p->p_addr->u_pcb.pcb_fp, sizeof(struct fpreg)); - p->p_addr->u_pcb.pcb_fp_control = - uc.uc_mcontext.mc_fp_control; + &td->td_pcb->pcb_fp, sizeof(struct fpreg)); + td->td_pcb->pcb_fp_control = uc.uc_mcontext.mc_fp_control; #endif #ifdef DEBUG @@ -1039,11 +1057,11 @@ cpu_halt(void) * Clear registers on exec */ void -setregs(struct proc *p, u_long entry, u_long stack, u_long ps_strings) +setregs(struct thread *td, u_long entry, u_long stack, u_long ps_strings) { struct trapframe *frame; - frame = p->p_frame; + frame = td->td_frame; /* * Make sure that we restore the entire trapframe after an @@ -1069,25 +1087,25 @@ setregs(struct proc *p, u_long entry, u_long stack, u_long ps_strings) * Setup the new backing store and make sure the new image * starts executing with an empty register stack frame. */ - frame->tf_ar_bspstore = p->p_md.md_bspstore; + frame->tf_ar_bspstore = td->td_md.md_bspstore; frame->tf_ndirty = 0; frame->tf_cr_ifs = (1L<<63); /* ifm=0, v=1 */ frame->tf_ar_rsc = 0xf; /* user mode rsc */ frame->tf_ar_fpsr = IA64_FPSR_DEFAULT; - p->p_md.md_flags &= ~MDP_FPUSED; - ia64_fpstate_drop(p); + td->td_md.md_flags &= ~MDP_FPUSED; + ia64_fpstate_drop(td); } int -ptrace_set_pc(struct proc *p, unsigned long addr) +ptrace_set_pc(struct thread *td, unsigned long addr) { /* TODO set pc in trapframe */ return 0; } int -ptrace_single_step(struct proc *p) +ptrace_single_step(struct thread *td) { /* TODO arrange for user process to single step */ return 0; @@ -1100,8 +1118,8 @@ ia64_pa_access(vm_offset_t pa) } int -fill_regs(p, regs) - struct proc *p; +fill_regs(td, regs) + struct thread *td; struct reg *regs; { /* TODO copy trapframe to regs */ @@ -1109,8 +1127,8 @@ fill_regs(p, regs) } int -set_regs(p, regs) - struct proc *p; +set_regs(td, regs) + struct thread *td; struct reg *regs; { /* TODO copy regs to trapframe */ @@ -1118,29 +1136,29 @@ set_regs(p, regs) } int -fill_fpregs(p, fpregs) - struct proc *p; +fill_fpregs(td, fpregs) + struct thread *td; struct fpreg *fpregs; { /* TODO copy fpu state to fpregs */ - ia64_fpstate_save(p, 0); + ia64_fpstate_save(td, 0); #if 0 - bcopy(&p->p_addr->u_pcb.pcb_fp, fpregs, sizeof *fpregs); + bcopy(&td->td_pcb->pcb_fp, fpregs, sizeof *fpregs); #endif return (0); } int -set_fpregs(p, fpregs) - struct proc *p; +set_fpregs(td, fpregs) + struct thread *td; struct fpreg *fpregs; { /* TODO copy fpregs fpu state */ - ia64_fpstate_drop(p); + ia64_fpstate_drop(td); #if 0 - bcopy(fpregs, &p->p_addr->u_pcb.pcb_fp, sizeof *fpregs); + bcopy(fpregs, &td->td_pcb->pcb_fp, sizeof *fpregs); #endif return (0); } @@ -1236,11 +1254,11 @@ SYSCTL_INT(_machdep, CPU_WALLCLOCK, wall_cmos_clock, CTLFLAG_RW, &wall_cmos_clock, 0, ""); void -ia64_fpstate_check(struct proc *p) +ia64_fpstate_check(struct thread *td) { - if ((p->p_frame->tf_cr_ipsr & IA64_PSR_DFH) == 0) - if (p != PCPU_GET(fpcurproc)) - panic("ia64_check_fpcurproc: bogus"); + if ((td->td_frame->tf_cr_ipsr & IA64_PSR_DFH) == 0) + if (td != PCPU_GET(fpcurthread)) + panic("ia64_check_fpcurthread: bogus"); } /* @@ -1251,17 +1269,17 @@ ia64_fpstate_check(struct proc *p) * by generating a disabled fp trap. */ void -ia64_fpstate_save(struct proc *p, int write) +ia64_fpstate_save(struct thread *td, int write) { - if (p == PCPU_GET(fpcurproc)) { + if (td == PCPU_GET(fpcurthread)) { /* * Save the state in the pcb. */ - savehighfp(p->p_addr->u_pcb.pcb_highfp); + savehighfp(td->td_pcb->pcb_highfp); if (write) { - p->p_frame->tf_cr_ipsr |= IA64_PSR_DFH; - PCPU_SET(fpcurproc, NULL); + td->td_frame->tf_cr_ipsr |= IA64_PSR_DFH; + PCPU_SET(fpcurthread, NULL); } } } @@ -1272,11 +1290,11 @@ ia64_fpstate_save(struct proc *p, int write) * (e.g. on sigreturn). */ void -ia64_fpstate_drop(struct proc *p) +ia64_fpstate_drop(struct thread *td) { - if (p == PCPU_GET(fpcurproc)) { - p->p_frame->tf_cr_ipsr |= IA64_PSR_DFH; - PCPU_SET(fpcurproc, NULL); + if (td == PCPU_GET(fpcurthread)) { + td->td_frame->tf_cr_ipsr |= IA64_PSR_DFH; + PCPU_SET(fpcurthread, NULL); } } @@ -1285,24 +1303,24 @@ ia64_fpstate_drop(struct proc *p) * from the pcb. */ void -ia64_fpstate_switch(struct proc *p) +ia64_fpstate_switch(struct thread *td) { - if (PCPU_GET(fpcurproc)) { + if (PCPU_GET(fpcurthread)) { /* * Dump the old fp state if its valid. */ - savehighfp(PCPU_GET(fpcurproc)->p_addr->u_pcb.pcb_highfp); - PCPU_GET(fpcurproc)->p_frame->tf_cr_ipsr |= IA64_PSR_DFH; + savehighfp(PCPU_GET(fpcurthread)->td_pcb->pcb_highfp); + PCPU_GET(fpcurthread)->td_frame->tf_cr_ipsr |= IA64_PSR_DFH; } /* * Remember the new FP owner and reload its state. */ - PCPU_SET(fpcurproc, p); - restorehighfp(p->p_addr->u_pcb.pcb_highfp); - p->p_frame->tf_cr_ipsr &= ~IA64_PSR_DFH; + PCPU_SET(fpcurthread, td); + restorehighfp(td->td_pcb->pcb_highfp); + td->td_frame->tf_cr_ipsr &= ~IA64_PSR_DFH; - p->p_md.md_flags |= MDP_FPUSED; + td->td_md.md_flags |= MDP_FPUSED; } /* diff --git a/sys/ia64/ia64/mem.c b/sys/ia64/ia64/mem.c index a6dd04603d39..0142a4839588 100644 --- a/sys/ia64/ia64/mem.c +++ b/sys/ia64/ia64/mem.c @@ -99,12 +99,12 @@ static struct cdevsw mem_cdevsw = { struct mem_range_softc mem_range_softc; static int -mmclose(dev_t dev, int flags, int fmt, struct proc *p) +mmclose(dev_t dev, int flags, int fmt, struct thread *td) { switch (minor(dev)) { #ifdef PERFMON case 32: - return perfmon_close(dev, flags, fmt, p); + return perfmon_close(dev, flags, fmt, td); #endif default: break; @@ -113,7 +113,7 @@ mmclose(dev_t dev, int flags, int fmt, struct proc *p) } static int -mmopen(dev_t dev, int flags, int fmt, struct proc *p) +mmopen(dev_t dev, int flags, int fmt, struct thread *td) { switch (minor(dev)) { @@ -124,7 +124,7 @@ mmopen(dev_t dev, int flags, int fmt, struct proc *p) break; case 32: #ifdef PERFMON - return perfmon_open(dev, flags, fmt, p); + return perfmon_open(dev, flags, fmt, td); #else return ENODEV; #endif @@ -236,12 +236,12 @@ memmmap(dev_t dev, vm_offset_t offset, int prot) } static int -mmioctl(dev_t dev, u_long cmd, caddr_t cmdarg, int flags, struct proc *p) +mmioctl(dev_t dev, u_long cmd, caddr_t cmdarg, int flags, struct thread *td) { switch(minor(dev)) { #ifdef PERFMON case 32: - return perfmon_ioctl(dev, cmd, cmdarg, flags, p); + return perfmon_ioctl(dev, cmd, cmdarg, flags, td); #endif default: return ENODEV; diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index 5ddba293f540..3f70fb762aec 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -222,7 +222,7 @@ static int pmap_ridbits = 18; static vm_zone_t pvzone; static struct vm_zone pvzone_store; static struct vm_object pvzone_obj; -static int pv_entry_count=0, pv_entry_max=0, pv_entry_high_water=0; +static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0; static int pmap_pagedaemon_waken = 0; static struct pv_entry *pvinit; @@ -320,7 +320,7 @@ pmap_bootstrap() * Set up proc0's PCB. */ #if 0 - proc0.p_addr->u_pcb.pcb_hw.apcb_asn = 0; + thread0->td_pcb->pcb_hw.apcb_asn = 0; #endif } @@ -505,7 +505,7 @@ pmap_track_modified(vm_offset_t va) } /* - * Create the UPAGES for a new process. + * Create the U area for a new process. * This routine directly affects the fork perf for a process. */ void @@ -518,7 +518,7 @@ pmap_new_proc(struct proc *p) * 7 address for it which makes it impossible to accidentally * lose when recording a trapframe. */ - up = contigmalloc(UPAGES * PAGE_SIZE, M_PMAP, + up = contigmalloc(UAREA_PAGES * PAGE_SIZE, M_PMAP, M_WAITOK, 0ul, 256*1024*1024 - 1, @@ -526,86 +526,96 @@ pmap_new_proc(struct proc *p) 256*1024*1024); p->p_md.md_uservirt = up; - p->p_addr = (struct user *) + p->p_uarea = (struct user *) IA64_PHYS_TO_RR7(ia64_tpa((u_int64_t) up)); } /* - * Dispose the UPAGES for a process that has exited. + * Dispose the U area for a process that has exited. * This routine directly impacts the exit perf of a process. */ void pmap_dispose_proc(p) struct proc *p; { - contigfree(p->p_md.md_uservirt, UPAGES * PAGE_SIZE, M_PMAP); + contigfree(p->p_md.md_uservirt, UAREA_PAGES * PAGE_SIZE, M_PMAP); p->p_md.md_uservirt = 0; - p->p_addr = 0; + p->p_uarea = 0; } /* - * Allow the UPAGES for a process to be prejudicially paged out. + * Allow the U area for a process to be prejudicially paged out. */ void pmap_swapout_proc(p) struct proc *p; { -#if 0 - int i; - vm_object_t upobj; - vm_offset_t up; - vm_page_t m; +} + +/* + * Bring the U area for a specified process back in. + */ +void +pmap_swapin_proc(p) + struct proc *p; +{ +} + +/* + * Create the KSTACK for a new thread. + * This routine directly affects the fork perf for a process/thread. + */ +void +pmap_new_thread(struct thread *td) +{ + vm_offset_t *ks; /* - * Make sure we aren't fpcurproc. + * Use contigmalloc for user area so that we can use a region + * 7 address for it which makes it impossible to accidentally + * lose when recording a trapframe. */ - ia64_fpstate_save(p, 1); + ks = contigmalloc(KSTACK_PAGES * PAGE_SIZE, M_PMAP, + M_WAITOK, + 0ul, + 256*1024*1024 - 1, + PAGE_SIZE, + 256*1024*1024); - upobj = p->p_upages_obj; - up = (vm_offset_t)p->p_addr; - for (i = 0; i < UPAGES; i++) { - m = vm_page_lookup(upobj, i); - if (m == NULL) - panic("pmap_swapout_proc: upage already missing?"); - vm_page_dirty(m); - vm_page_unwire(m, 0); - pmap_kremove(up + i * PAGE_SIZE); - } -#endif + td->td_md.md_kstackvirt = ks; + td->td_kstack = IA64_PHYS_TO_RR7(ia64_tpa((u_int64_t)ks)); } /* - * Bring the UPAGES for a specified process back in. + * Dispose the KSTACK for a thread that has exited. + * This routine directly impacts the exit perf of a process/thread. */ void -pmap_swapin_proc(p) - struct proc *p; +pmap_dispose_thread(td) + struct thread *td; { -#if 0 - int i, rv; - vm_object_t upobj; - vm_offset_t up; - vm_page_t m; + contigfree(td->td_md.md_kstackvirt, KSTACK_PAGES * PAGE_SIZE, M_PMAP); + td->td_md.md_kstackvirt = 0; + td->td_kstack = 0; +} - upobj = p->p_upages_obj; - up = (vm_offset_t)p->p_addr; - for (i = 0; i < UPAGES; i++) { - m = vm_page_grab(upobj, i, VM_ALLOC_NORMAL | VM_ALLOC_RETRY); - pmap_kenter(up + i * PAGE_SIZE, VM_PAGE_TO_PHYS(m)); - if (m->valid != VM_PAGE_BITS_ALL) { - rv = vm_pager_get_pages(upobj, &m, 1, 0); - if (rv != VM_PAGER_OK) - panic("pmap_swapin_proc: cannot get upages for proc: %d\n", p->p_pid); - m = vm_page_lookup(upobj, i); - m->valid = VM_PAGE_BITS_ALL; - } - vm_page_wire(m); - vm_page_wakeup(m); - vm_page_flag_set(m, PG_MAPPED | PG_WRITEABLE); - } -#endif +/* + * Allow the KSTACK for a thread to be prejudicially paged out. + */ +void +pmap_swapout_thread(td) + struct thread *td; +{ } +/* + * Bring the KSTACK for a specified thread back in. + */ +void +pmap_swapin_thread(td) + struct thread *td; +{ +} /*************************************************** * Page table page management routines..... ***************************************************/ @@ -1149,7 +1159,7 @@ pmap_collect() { int i; vm_page_t m; - static int warningdone=0; + static int warningdone = 0; if (pmap_pagedaemon_waken == 0) return; @@ -2199,9 +2209,9 @@ pmap_mincore(pmap, addr) } void -pmap_activate(struct proc *p) +pmap_activate(struct thread *td) { - pmap_install(vmspace_pmap(p->p_vmspace)); + pmap_install(vmspace_pmap(td->td_proc->p_vmspace)); } pmap_t @@ -2281,14 +2291,14 @@ pmap_pid_dump(int pid) int i,j; index = 0; pmap = vmspace_pmap(p->p_vmspace); - for(i=0;i<1024;i++) { + for(i = 0; i < 1024; i++) { pd_entry_t *pde; pt_entry_t *pte; unsigned base = i << PDRSHIFT; pde = &pmap->pm_pdir[i]; if (pde && pmap_pde_v(pde)) { - for(j=0;j<1024;j++) { + for(j = 0; j < 1024; j++) { unsigned va = base + (j << PAGE_SHIFT); if (va >= (vm_offset_t) VM_MIN_KERNEL_ADDRESS) { if (index) { diff --git a/sys/ia64/ia64/procfs_machdep.c b/sys/ia64/ia64/procfs_machdep.c index e623e49a3a27..08582fba6b85 100644 --- a/sys/ia64/ia64/procfs_machdep.c +++ b/sys/ia64/ia64/procfs_machdep.c @@ -85,7 +85,7 @@ int error; \ \ mtx_lock_spin(&sched_lock); \ - if ((p->p_sflag & PS_INMEM) == 0) \ + if ((td->td_proc->p_sflag & PS_INMEM) == 0) \ error = EIO; \ else \ error = (action); \ @@ -94,21 +94,21 @@ } while(0) int -procfs_read_regs(p, regs) - struct proc *p; +procfs_read_regs(td, regs) + struct thread *td; struct reg *regs; { - PROCFS_ACTION(fill_regs(p, regs)); + PROCFS_ACTION(fill_regs(td, regs)); } int -procfs_write_regs(p, regs) - struct proc *p; +procfs_write_regs(td, regs) + struct thread *td; struct reg *regs; { - PROCFS_ACTION(set_regs(p, regs)); + PROCFS_ACTION(set_regs(td, regs)); } /* @@ -117,26 +117,26 @@ procfs_write_regs(p, regs) */ int -procfs_read_fpregs(p, fpregs) - struct proc *p; +procfs_read_fpregs(td, fpregs) + struct thread *td; struct fpreg *fpregs; { - PROCFS_ACTION(fill_fpregs(p, fpregs)); + PROCFS_ACTION(fill_fpregs(td, fpregs)); } int -procfs_write_fpregs(p, fpregs) - struct proc *p; +procfs_write_fpregs(td, fpregs) + struct thread *td; struct fpreg *fpregs; { - PROCFS_ACTION(set_fpregs(p, fpregs)); + PROCFS_ACTION(set_fpregs(td, fpregs)); } int -procfs_sstep(p) - struct proc *p; +procfs_sstep(td) + struct thread *td; { return (EINVAL); } @@ -145,16 +145,16 @@ procfs_sstep(p) * Placeholders */ int -procfs_read_dbregs(p, dbregs) - struct proc *p; +procfs_read_dbregs(td, dbregs) + struct thread *td; struct dbreg *dbregs; { return (EIO); } int -procfs_write_dbregs(p, dbregs) - struct proc *p; +procfs_write_dbregs(td, dbregs) + struct thread *td; struct dbreg *dbregs; { return (EIO); diff --git a/sys/ia64/ia64/ssc.c b/sys/ia64/ia64/ssc.c index ecc593e3590b..52eb48f5cad2 100644 --- a/sys/ia64/ia64/ssc.c +++ b/sys/ia64/ia64/ssc.c @@ -124,7 +124,7 @@ ssccncheckc(dev_t dev) } static int -sscopen(dev_t dev, int flag, int mode, struct proc *p) +sscopen(dev_t dev, int flag, int mode, struct thread *td) { struct tty *tp; int s; @@ -148,7 +148,7 @@ sscopen(dev_t dev, int flag, int mode, struct proc *p) ttsetwater(tp); setuptimeout = 1; - } else if ((tp->t_state & TS_XCLUDE) && suser(p)) { + } else if ((tp->t_state & TS_XCLUDE) && suser(td->td_proc)) { splx(s); return EBUSY; } @@ -167,7 +167,7 @@ sscopen(dev_t dev, int flag, int mode, struct proc *p) } static int -sscclose(dev_t dev, int flag, int mode, struct proc *p) +sscclose(dev_t dev, int flag, int mode, struct thread *td) { int unit = minor(dev); struct tty *tp = ssc_tp; @@ -182,7 +182,7 @@ sscclose(dev_t dev, int flag, int mode, struct proc *p) } static int -sscioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) +sscioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td) { int unit = minor(dev); struct tty *tp = ssc_tp; @@ -191,7 +191,7 @@ sscioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) if (unit != 0) return ENXIO; - error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p); + error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, td); if (error != ENOIOCTL) return error; error = ttioctl(tp, cmd, data, flag); diff --git a/sys/ia64/ia64/sscdisk.c b/sys/ia64/ia64/sscdisk.c index 5b7bd09cf975..8e473ad9cc4c 100644 --- a/sys/ia64/ia64/sscdisk.c +++ b/sys/ia64/ia64/sscdisk.c @@ -121,14 +121,14 @@ struct ssc_s { static int sscunits; static int -sscopen(dev_t dev, int flag, int fmt, struct proc *p) +sscopen(dev_t dev, int flag, int fmt, struct thread *td) { struct ssc_s *sc; struct disklabel *dl; if (ssc_debug) printf("sscopen(%s %x %x %p)\n", - devtoname(dev), flag, fmt, p); + devtoname(dev), flag, fmt, td); sc = dev->si_drv1; @@ -144,12 +144,12 @@ sscopen(dev_t dev, int flag, int fmt, struct proc *p) } static int -sscioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p) +sscioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) { if (ssc_debug) printf("sscioctl(%s %lx %p %x %p)\n", - devtoname(dev), cmd, addr, flags, p); + devtoname(dev), cmd, addr, flags, td); return (ENOIOCTL); } diff --git a/sys/ia64/ia64/support.S b/sys/ia64/ia64/support.S index 2e18b9c7bf5e..d6c71d5077a5 100644 --- a/sys/ia64/ia64/support.S +++ b/sys/ia64/ia64/support.S @@ -70,15 +70,15 @@ ENTRY(suword, 2) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -98,15 +98,15 @@ ENTRY(subyte, 2) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -126,15 +126,15 @@ ENTRY(fuword, 1) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -153,15 +153,15 @@ ENTRY(fubyte, 1) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -242,15 +242,15 @@ ENTRY(copyinstr, 4) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -277,15 +277,15 @@ ENTRY(copyoutstr, 4) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -392,15 +392,15 @@ ENTRY(copyin, 3) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -427,15 +427,15 @@ ENTRY(copyout, 3) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -453,11 +453,11 @@ END(copyout) ENTRY(copyerr, 0) - add r14=GD_CURPROC,r13 ;; // find curproc + add r14=GD_CURTHREAD,r13 ;; // find curthread ld8 r14=[r14] ;; - add r14=P_ADDR,r14 ;; // curproc->p_addr + add r14=TD_PCB,r14 ;; // curthread->td_addr ld8 r14=[r14] ;; - add r14=U_PCB_ONFAULT,r14 ;; // &curproc->p_addr->u_pcb.pcb_onfault + add r14=PCB_ONFAULT,r14 ;; // &curthread->td_pcb->pcb_onfault st8 [r14]=r0 // reset fault handler mov ret0=EFAULT // return EFAULT diff --git a/sys/ia64/ia64/support.s b/sys/ia64/ia64/support.s index 2e18b9c7bf5e..d6c71d5077a5 100644 --- a/sys/ia64/ia64/support.s +++ b/sys/ia64/ia64/support.s @@ -70,15 +70,15 @@ ENTRY(suword, 2) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -98,15 +98,15 @@ ENTRY(subyte, 2) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -126,15 +126,15 @@ ENTRY(fuword, 1) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -153,15 +153,15 @@ ENTRY(fubyte, 1) (p6) br.dpnt.few fusufault movl r14=fusufault // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add r15=U_PCB_ONFAULT,r15 + add r15=PCB_ONFAULT,r15 ;; st8 [r15]=r14 ;; @@ -242,15 +242,15 @@ ENTRY(copyinstr, 4) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -277,15 +277,15 @@ ENTRY(copyoutstr, 4) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -392,15 +392,15 @@ ENTRY(copyin, 3) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -427,15 +427,15 @@ ENTRY(copyout, 3) ;; (p6) br.cond.spnt.few copyerr // if it's not, error out. movl r14=copyerr // set up fault handler. - add r15=GD_CURPROC,r13 // find curproc + add r15=GD_CURTHREAD,r13 // find curthread ;; ld8 r15=[r15] ;; - add r15=P_ADDR,r15 // find pcb + add r15=TD_PCB,r15 // find pcb ;; ld8 r15=[r15] ;; - add loc2=U_PCB_ONFAULT,r15 + add loc2=PCB_ONFAULT,r15 ;; st8 [loc2]=r14 ;; @@ -453,11 +453,11 @@ END(copyout) ENTRY(copyerr, 0) - add r14=GD_CURPROC,r13 ;; // find curproc + add r14=GD_CURTHREAD,r13 ;; // find curthread ld8 r14=[r14] ;; - add r14=P_ADDR,r14 ;; // curproc->p_addr + add r14=TD_PCB,r14 ;; // curthread->td_addr ld8 r14=[r14] ;; - add r14=U_PCB_ONFAULT,r14 ;; // &curproc->p_addr->u_pcb.pcb_onfault + add r14=PCB_ONFAULT,r14 ;; // &curthread->td_pcb->pcb_onfault st8 [r14]=r0 // reset fault handler mov ret0=EFAULT // return EFAULT diff --git a/sys/ia64/ia64/swtch.s b/sys/ia64/ia64/swtch.s index 10f568e3db6b..e26cdb27c2d1 100644 --- a/sys/ia64/ia64/swtch.s +++ b/sys/ia64/ia64/swtch.s @@ -105,7 +105,7 @@ ENTRY(savectx, 1) ENTRY(restorectx, 1) - add r3=U_PCB_UNAT,in0 // point at NaT for r4..r7 + add r3=PCB_UNAT,in0 // point at NaT for r4..r7 mov ar.rsc=0 ;; // switch off the RSE ld8 r16=[r3] // load NaT for r4..r7 ;; @@ -158,9 +158,9 @@ ENTRY(restorectx, 1) ENTRY(cpu_switch, 0) - add r16=GD_CURPROC,r13 ;; + add r16=GD_CURTHREAD,r13 ;; ld8 r17=[r16] ;; - add r17=P_ADDR,r17 ;; + add r17=TD_PCB,r17 ;; ld8 r17=[r17] flushrs // push out caller's dirty regs @@ -209,18 +209,18 @@ ENTRY(cpu_switch, 0) mov ar.rsc=3 // turn RSE back on - br.call.sptk.few rp=chooseproc + br.call.sptk.few rp=choosethread - add r14=GD_CURPROC,r13 ;; + add r14=GD_CURTHREAD,r13 ;; ld8 r15=[r14] ;; #if 0 - cmp.ne p6,p0=r15,ret0 // chooseproc() == curproc ? + cmp.ne p6,p0=r15,ret0 // chooseproc() == curthread ? (p6) br.dptk.few 1f ;; - add r17=P_ADDR,r15 ;; // restore b0 + add r17=TD_PCB,r15 ;; // restore b0 ld8 r17=[r17] ;; - add r17=U_PCB_B0,r17 ;; + add r17=PCB_B0,r17 ;; ld8 r17=[r17] ;; mov b0=r17 @@ -228,7 +228,7 @@ ENTRY(cpu_switch, 0) #endif 1: - st8 [r14]=ret0 // set r13->gd_curproc + st8 [r14]=ret0 // set r13->gd_curthread mov ar.k7=ret0 mov r4=ret0 // save from call ;; @@ -237,12 +237,13 @@ ENTRY(cpu_switch, 0) mov out0=r4 br.call.sptk.few rp=pmap_activate // install RIDs etc. - add r15=P_ADDR,r4 ;; - ld8 r15=[r15] ;; - add r16=SIZEOF_USER,r15 ;; + add r15=TD_PCB,r4 + add r16=TD_KSTACK,r4 ;; + ld8 r15=[r15] + ld8 r16=[r16] ;; mov ar.k5=r16 - add r3=U_PCB_UNAT,r15 // point at NaT for r4..r7 + add r3=PCB_UNAT,r15 // point at NaT for r4..r7 mov ar.rsc=0 ;; // switch off the RSE ld8 r16=[r3] // load NaT for r4..r7 ;; diff --git a/sys/ia64/ia64/sys_machdep.c b/sys/ia64/ia64/sys_machdep.c index 84e7620c8fc5..097dc02501f6 100644 --- a/sys/ia64/ia64/sys_machdep.c +++ b/sys/ia64/ia64/sys_machdep.c @@ -64,8 +64,8 @@ struct sysarch_args { #endif int -sysarch(p, uap) - struct proc *p; +sysarch(td, uap) + struct thread *td; register struct sysarch_args *uap; { int error = 0; diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c index 9baf9e17602a..c21cdf4bb1dd 100644 --- a/sys/ia64/ia64/trap.c +++ b/sys/ia64/ia64/trap.c @@ -69,7 +69,7 @@ #include <ddb/ddb.h> #endif -static int unaligned_fixup(struct trapframe *framep, struct proc *p); +static int unaligned_fixup(struct trapframe *framep, struct thread *td); #ifdef WITNESS extern char *syscallnames[]; @@ -160,10 +160,10 @@ printtrap(int vector, int imm, struct trapframe *framep, int isfatal, int user) printf(" cr.isr = 0x%lx\n", framep->tf_cr_isr); printf(" cr.ifa = 0x%lx\n", framep->tf_cr_ifa); printf(" cr.iim = 0x%x\n", imm); - printf(" curproc = %p\n", curproc); - if (curproc != NULL) - printf(" pid = %d, comm = %s\n", curproc->p_pid, - curproc->p_comm); + printf(" curthread = %p\n", curthread); + if (curthread != NULL) + printf(" pid = %d, comm = %s\n", + curthread->td_proc->p_pid, curthread->td_proc->p_comm); printf("\n"); } @@ -177,6 +177,7 @@ printtrap(int vector, int imm, struct trapframe *framep, int isfatal, int user) void trap(int vector, int imm, struct trapframe *framep) { + struct thread *td; struct proc *p; int i; u_int64_t ucode; @@ -184,13 +185,14 @@ trap(int vector, int imm, struct trapframe *framep) int user; cnt.v_trap++; - p = curproc; + td = curthread; + p = td->td_proc; ucode = 0; user = ((framep->tf_cr_ipsr & IA64_PSR_CPL) == IA64_PSR_CPL_USER); if (user) { - sticks = p->p_sticks; - p->p_frame = framep; + sticks = td->td_kse->ke_sticks; + td->td_frame = framep; } else { sticks = 0; /* XXX bogus -Wuninitialized warning */ } @@ -204,7 +206,7 @@ trap(int vector, int imm, struct trapframe *framep) */ if (user) { mtx_lock(&Giant); - if ((i = unaligned_fixup(framep, p)) == 0) { + if ((i = unaligned_fixup(framep, td)) == 0) { mtx_unlock(&Giant); goto out; } @@ -246,15 +248,15 @@ trap(int vector, int imm, struct trapframe *framep) case IA64_VEC_DISABLED_FP: /* - * on exit from the kernel, if proc == fpcurproc, + * on exit from the kernel, if thread == fpcurthread, * FP is enabled. */ - if (PCPU_GET(fpcurproc) == p) { - printf("trap: fp disabled for fpcurproc == %p", p); + if (PCPU_GET(fpcurthread) == td) { + printf("trap: fp disabled for fpcurthread == %p", td); goto dopanic; } - ia64_fpstate_switch(p); + ia64_fpstate_switch(td); goto out; break; @@ -276,12 +278,11 @@ trap(int vector, int imm, struct trapframe *framep) * when they are running. */ if (!user && - p != NULL && - p->p_addr->u_pcb.pcb_onfault == - (unsigned long)fswintrberr && - p->p_addr->u_pcb.pcb_accessaddr == va) { - framep->tf_cr_iip = p->p_addr->u_pcb.pcb_onfault; - p->p_addr->u_pcb.pcb_onfault = 0; + td != NULL && + td->td_pcb->pcb_onfault == (unsigned long)fswintrberr && + td->td_pcb->pcb_accessaddr == va) { + framep->tf_cr_iip = td->td_pcb->pcb_onfault; + td->td_pcb->pcb_onfault = 0; goto out; } mtx_lock(&Giant); @@ -301,8 +302,8 @@ trap(int vector, int imm, struct trapframe *framep) */ if (!user && ((va >= VM_MIN_KERNEL_ADDRESS) - || (p == NULL) - || (p->p_addr->u_pcb.pcb_onfault == 0))) { + || (td == NULL) + || (td->td_pcb->pcb_onfault == 0))) { if (va >= trunc_page(PS_STRINGS - szsigcode - SPARE_USRSPACE) @@ -405,7 +406,7 @@ trap(int vector, int imm, struct trapframe *framep) trapsignal(p, i, ucode); out: if (user) - userret(p, framep, sticks); + userret(td, framep, sticks); if (mtx_owned(&Giant)) mtx_unlock(&Giant); return; @@ -439,15 +440,18 @@ void syscall(int code, u_int64_t *args, struct trapframe *framep) { struct sysent *callp; + struct thread *td; struct proc *p; int error = 0; u_int64_t oldip, oldri; u_int sticks; cnt.v_syscall++; - p = curproc; - p->p_frame = framep; - sticks = p->p_sticks; + td = curthread; + p = td->td_proc; + + td->td_frame = framep; + sticks = td->td_kse->ke_sticks; mtx_lock(&Giant); /* @@ -463,7 +467,7 @@ syscall(int code, u_int64_t *args, struct trapframe *framep) } #ifdef DIAGNOSTIC - ia64_fpstate_check(p); + ia64_fpstate_check(td); #endif if (p->p_sysent->sv_prepsyscall) { @@ -496,19 +500,19 @@ syscall(int code, u_int64_t *args, struct trapframe *framep) ktrsyscall(p->p_tracep, code, (callp->sy_narg & SYF_ARGMASK), args); #endif if (error == 0) { - p->p_retval[0] = 0; - p->p_retval[1] = 0; + td->td_retval[0] = 0; + td->td_retval[1] = 0; STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK)); - error = (*callp->sy_call)(p, args); + error = (*callp->sy_call)(td, args); } switch (error) { case 0: - framep->tf_r[FRAME_R8] = p->p_retval[0]; - framep->tf_r[FRAME_R9] = p->p_retval[1]; + framep->tf_r[FRAME_R8] = td->td_retval[0]; + framep->tf_r[FRAME_R9] = td->td_retval[1]; framep->tf_r[FRAME_R10] = 0; break; case ERESTART: @@ -530,10 +534,10 @@ syscall(int code, u_int64_t *args, struct trapframe *framep) break; } - userret(p, framep, sticks); + userret(td, framep, sticks); #ifdef KTRACE if (KTRPOINT(p, KTR_SYSRET)) - ktrsysret(p->p_tracep, code, error, p->p_retval[0]); + ktrsysret(p->p_tracep, code, error, td->td_retval[0]); #endif mtx_unlock(&Giant); @@ -545,7 +549,7 @@ syscall(int code, u_int64_t *args, struct trapframe *framep) STOPEVENT(p, S_SCX, code); #ifdef WITNESS - if (witness_list(p)) { + if (witness_list(td)) { panic("system call %s returning with mutex(s) held\n", syscallnames[code]); } @@ -558,21 +562,25 @@ extern int ia64_unaligned_print, ia64_unaligned_fix; extern int ia64_unaligned_sigbus; static int -unaligned_fixup(struct trapframe *framep, struct proc *p) +unaligned_fixup(struct trapframe *framep, struct thread *td) { vm_offset_t va = framep->tf_cr_ifa; int doprint, dofix, dosigbus; int signal, size = 0; unsigned long uac; + struct proc *p; /* * Figure out what actions to take. */ - if (p) - uac = p->p_md.md_flags & MDP_UAC_MASK; - else + if (td) { + uac = td->td_md.md_flags & MDP_UAC_MASK; + p = td->td_proc; + } else { uac = 0; + p = NULL; + } doprint = ia64_unaligned_print && !(uac & MDP_UAC_NOPRINT); dofix = ia64_unaligned_fix && !(uac & MDP_UAC_NOFIX); @@ -593,7 +601,7 @@ unaligned_fixup(struct trapframe *framep, struct proc *p) */ if (doprint) { uprintf("pid %d (%s): unaligned access: va=0x%lx pc=0x%lx\n", - p->p_pid, p->p_comm, va, p->p_frame->tf_cr_iip); + p->p_pid, p->p_comm, va, td->td_frame->tf_cr_iip); } /* diff --git a/sys/ia64/ia64/vm_machdep.c b/sys/ia64/ia64/vm_machdep.c index 3774212e68b6..492b8ec7c75a 100644 --- a/sys/ia64/ia64/vm_machdep.c +++ b/sys/ia64/ia64/vm_machdep.c @@ -124,25 +124,30 @@ struct ia64_fdesc { * ready to run and return to user mode. */ void -cpu_fork(p1, p2, flags) - register struct proc *p1, *p2; +cpu_fork(td1, p2, flags) + register struct thread *td1; + register struct proc *p2; int flags; { - struct user *up; + struct proc *p1; + struct thread *td2; struct trapframe *p2tf; u_int64_t bspstore, *p1bs, *p2bs, rnatloc, rnat; if ((flags & RFPROC) == 0) return; - p2->p_frame = p1->p_frame; - p2->p_md.md_flags = p1->p_md.md_flags & (MDP_FPUSED | MDP_UAC_MASK); + p1 = td1->td_proc; + td2 = &p2->p_thread; + td2->td_pcb = (struct pcb *) + (td2->td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; + td2->td_md.md_flags = td1->td_md.md_flags & (MDP_FPUSED | MDP_UAC_MASK); /* * Copy floating point state from the FP chip to the PCB * if this process has state stored there. */ - ia64_fpstate_save(p1, 0); + ia64_fpstate_save(td1, 0); /* * Copy pcb and stack from proc p1 to p2. We do this as @@ -150,15 +155,15 @@ cpu_fork(p1, p2, flags) * stack. The stack and pcb need to agree. Make sure that the * new process has FEN disabled. */ - p2->p_addr->u_pcb = p1->p_addr->u_pcb; + bcopy(td1->td_pcb, td2->td_pcb, sizeof(struct pcb)); /* * Set the floating point state. */ #if 0 - if ((p2->p_addr->u_pcb.pcb_fp_control & IEEE_INHERIT) == 0) { - p2->p_addr->u_pcb.pcb_fp_control = 0; - p2->p_addr->u_pcb.pcb_fp.fpr_cr = (FPCR_DYN_NORMAL + if ((td2->td_pcb->pcb_fp_control & IEEE_INHERIT) == 0) { + td2->td_pcb->pcb_fp_control = 0; + td2->td_pcb->pcb_fp.fpr_cr = (FPCR_DYN_NORMAL | FPCR_INVD | FPCR_DZED | FPCR_OVFD | FPCR_INED | FPCR_UNFD); @@ -170,9 +175,9 @@ cpu_fork(p1, p2, flags) * is started, to resume here, returning nonzero from setjmp. */ #ifdef DIAGNOSTIC - if (p1 != curproc) + if (td1 != curthread) panic("cpu_fork: curproc"); - ia64_fpstate_check(p1); + ia64_fpstate_check(td1); #endif /* @@ -182,25 +187,24 @@ cpu_fork(p1, p2, flags) * copy trapframe from parent so return to user mode * will be to right address, with correct registers. */ - p2->p_frame = (struct trapframe *) - ((char *)p2->p_addr + USPACE - sizeof(struct trapframe)); - bcopy(p1->p_frame, p2->p_frame, sizeof(struct trapframe)); + td2->td_frame = (struct trapframe *)td2->td_pcb - 1; + bcopy(td1->td_frame, td2->td_frame, sizeof(struct trapframe)); /* * Set up return-value registers as fork() libc stub expects. */ - p2tf = p2->p_frame; + p2tf = td2->td_frame; p2tf->tf_r[FRAME_R8] = 0; /* child's pid (linux) */ p2tf->tf_r[FRAME_R9] = 1; /* is child (FreeBSD) */ p2tf->tf_r[FRAME_R10] = 0; /* no error */ /* * Turn off RSE for a moment and work out our current - * ar.bspstore. This assumes that p1==curproc. Also + * ar.bspstore. This assumes that td1==curthread. Also * flush dirty regs to ensure that the user's stacked * regs are written out to backing store. * - * We could cope with p1!=curproc by digging values + * We could cope with td1!=curthread by digging values * out of its PCB but I don't see the point since * current usage never allows it. */ @@ -208,23 +212,23 @@ cpu_fork(p1, p2, flags) __asm __volatile("flushrs;;" ::: "memory"); __asm __volatile("mov %0=ar.bspstore" : "=r"(bspstore)); - p1bs = (u_int64_t *) (p1->p_addr + 1); - p2bs = (u_int64_t *) (p2->p_addr + 1); + p1bs = (u_int64_t *)td1->td_kstack; + p2bs = (u_int64_t *)td2->td_kstack; /* - * Copy enough of p1's backing store to include all + * Copy enough of td1's backing store to include all * the user's stacked regs. */ - bcopy(p1bs, p2bs, p1->p_frame->tf_ndirty); + bcopy(p1bs, p2bs, td1->td_frame->tf_ndirty); /* - * To calculate the ar.rnat for p2, we need to decide - * if p1's ar.bspstore has advanced past the place + * To calculate the ar.rnat for td2, we need to decide + * if td1's ar.bspstore has advanced past the place * where the last ar.rnat which covers the user's * saved registers would be placed. If so, we read - * that one from memory, otherwise we take p1's + * that one from memory, otherwise we take td1's * current ar.rnat. */ - rnatloc = (u_int64_t)p1bs + p1->p_frame->tf_ndirty; + rnatloc = (u_int64_t)p1bs + td1->td_frame->tf_ndirty; rnatloc |= 0x1f8; if (bspstore > rnatloc) rnat = *(u_int64_t *) rnatloc; @@ -242,21 +246,22 @@ cpu_fork(p1, p2, flags) * should work since the child will normally return * straight into exception_restore. */ - up = p2->p_addr; - up->u_pcb.pcb_bspstore = (u_int64_t)p2bs + p1->p_frame->tf_ndirty; - up->u_pcb.pcb_rnat = rnat; - up->u_pcb.pcb_pfs = 0; + td2->td_pcb->pcb_bspstore = (u_int64_t)p2bs + td1->td_frame->tf_ndirty; + td2->td_pcb->pcb_rnat = rnat; + td2->td_pcb->pcb_pfs = 0; /* * Arrange for continuation at fork_return(), which * will return to exception_restore(). Note that the * child process doesn't stay in the kernel for long! + * + * XXX what is this +/- 16 stuff here? */ - up->u_pcb.pcb_sp = (u_int64_t)p2tf - 16; - up->u_pcb.pcb_r4 = (u_int64_t)fork_return; - up->u_pcb.pcb_r5 = FDESC_FUNC(exception_restore); - up->u_pcb.pcb_r6 = (u_int64_t)p2; - up->u_pcb.pcb_b0 = FDESC_FUNC(fork_trampoline); + td2->td_pcb->pcb_sp = (u_int64_t)p2tf - 16; + td2->td_pcb->pcb_r4 = (u_int64_t)fork_return; + td2->td_pcb->pcb_r5 = FDESC_FUNC(exception_restore); + td2->td_pcb->pcb_r6 = (u_int64_t)td2; + td2->td_pcb->pcb_b0 = FDESC_FUNC(fork_trampoline); } /* @@ -266,13 +271,13 @@ cpu_fork(p1, p2, flags) * This is needed to make kernel threads stay in kernel mode. */ void -cpu_set_fork_handler(p, func, arg) - struct proc *p; +cpu_set_fork_handler(td, func, arg) + struct thread *td; void (*func) __P((void *)); void *arg; { - p->p_addr->u_pcb.pcb_r4 = (u_int64_t) func; - p->p_addr->u_pcb.pcb_r6 = (u_int64_t) arg; + td->td_pcb->pcb_r4 = (u_int64_t) func; + td->td_pcb->pcb_r6 = (u_int64_t) arg; } /* @@ -281,11 +286,11 @@ cpu_set_fork_handler(p, func, arg) * When the proc is reaped, cpu_wait() will gc the VM state. */ void -cpu_exit(p) - register struct proc *p; +cpu_exit(td) + register struct thread *td; { - ia64_fpstate_drop(p); + ia64_fpstate_drop(td); } void @@ -307,14 +312,22 @@ cpu_throw(void) * Dump the machine specific header information at the start of a core dump. */ int -cpu_coredump(p, vp, cred) - struct proc *p; +cpu_coredump(td, vp, cred) + struct thread *td; struct vnode *vp; struct ucred *cred; { - - return (vn_rdwr(UIO_WRITE, vp, (caddr_t) p->p_addr, ctob(UPAGES), - (off_t)0, UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, p)); + int error; + + error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_proc->p_uarea, + ctob(UAREA_PAGES), (off_t)0, + UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td); + if (error) + return error; + error = vn_rdwr(UIO_WRITE, vp, (caddr_t) td->td_kstack, + ctob(KSTACK_PAGES), (off_t)0, + UIO_SYSSPACE, IO_UNIT, cred, (int *)NULL, td); + return error; } /* diff --git a/sys/ia64/include/cpu.h b/sys/ia64/include/cpu.h index 062bebc70db3..d7dfde8e9561 100644 --- a/sys/ia64/include/cpu.h +++ b/sys/ia64/include/cpu.h @@ -52,7 +52,7 @@ #include <machine/frame.h> -#define cpu_getstack(p) ((p)->p_frame->tf_r[FRAME_SP]) +#define cpu_getstack(td) ((td)->td_frame->tf_r[FRAME_SP]) /* * Arguments to hardclock and gatherstats encapsulate the previous @@ -99,7 +99,7 @@ struct clockframe { #ifdef _KERNEL struct pcb; -struct proc; +struct thread; struct reg; struct rpb; struct trapframe; @@ -109,7 +109,6 @@ extern volatile int mc_expected, mc_received; int badaddr __P((void *, size_t)); int badaddr_read __P((void *, size_t, void *)); -void child_return __P((struct proc *p)); u_int64_t console_restart __P((u_int64_t, u_int64_t, u_int64_t)); void do_sir __P((void)); void dumpconf __P((void)); @@ -118,10 +117,10 @@ void frametoreg __P((struct trapframe *, struct reg *)); long fswintrberr __P((void)); /* MAGIC */ int ia64_pa_access __P((u_long)); void ia64_init __P((void)); -void ia64_fpstate_check __P((struct proc *p)); -void ia64_fpstate_save __P((struct proc *p, int write)); -void ia64_fpstate_drop __P((struct proc *p)); -void ia64_fpstate_switch __P((struct proc *p)); +void ia64_fpstate_check __P((struct thread *p)); +void ia64_fpstate_save __P((struct thread *p, int write)); +void ia64_fpstate_drop __P((struct thread *p)); +void ia64_fpstate_switch __P((struct thread *p)); void init_prom_interface __P((struct rpb*)); void interrupt __P((u_int64_t, struct trapframe *)); void machine_check @@ -133,7 +132,6 @@ void regtoframe __P((struct reg *, struct trapframe *)); int savectx __P((struct pcb *)); void restorectx __P((struct pcb *)); void set_iointr __P((void (*)(void *, unsigned long))); -void switch_exit __P((struct proc *)); /* MAGIC */ void fork_trampoline __P((void)); /* MAGIC */ void syscall __P((int, u_int64_t *, struct trapframe *)); void trap __P((int vector, int imm, struct trapframe *framep)); diff --git a/sys/ia64/include/globaldata.h b/sys/ia64/include/globaldata.h index 308086c8a506..50f49908424e 100644 --- a/sys/ia64/include/globaldata.h +++ b/sys/ia64/include/globaldata.h @@ -44,15 +44,14 @@ * point at the globaldata structure. */ struct globaldata { - struct proc *gd_curproc; /* current process */ - struct proc *gd_idleproc; /* idle process */ - struct proc *gd_fpcurproc; /* fp state owner */ - struct pcb *gd_curpcb; /* current pcb */ - struct timeval gd_switchtime; - int gd_switchticks; - u_int gd_cpuid; /* this cpu number */ - u_int gd_other_cpus; /* all other cpus */ - u_int64_t gd_idlepcbphys; /* pa of gd_idlepcb */ + struct thread *gd_curthread; /* current thread */ + struct thread *gd_idlethread; /* idle thread */ + struct thread *gd_fpcurthread; /* fp state owner */ + struct pcb *gd_curpcb; /* current pcb */ + struct timeval gd_switchtime; + int gd_switchticks; + u_int gd_cpuid; /* this cpu number */ + u_int gd_other_cpus; /* all other cpus */ u_int64_t gd_pending_ipis; /* pending IPI events */ struct pmap *gd_current_pmap; /* which pmap is active */ u_int32_t gd_next_asn; /* next ASN to allocate */ diff --git a/sys/ia64/include/globals.h b/sys/ia64/include/globals.h index 20ca26ee2a0c..b953cf179376 100644 --- a/sys/ia64/include/globals.h +++ b/sys/ia64/include/globals.h @@ -40,9 +40,11 @@ register struct globaldata *globalp __asm__("r13"); #define PCPU_PTR(member) (&GLOBALP->gd_ ## member) #define PCPU_SET(member,value) (GLOBALP->gd_ ## member = (value)) -#define CURPROC PCPU_GET(curproc) -#define CURTHD PCPU_GET(curproc) /* temporary */ -#define curproc PCPU_GET(curproc) +#define curthread PCPU_GET(curthread) +#define CURPROC (curthread->td_proc) +#define curproc (curthread->td_proc) +#define curksegrp (curthread->td_ksegrp) +#define curkse (curthread->td_kse) #endif /* _KERNEL */ diff --git a/sys/ia64/include/md_var.h b/sys/ia64/include/md_var.h index 2154611dcf58..789b3899bf6f 100644 --- a/sys/ia64/include/md_var.h +++ b/sys/ia64/include/md_var.h @@ -39,7 +39,7 @@ extern int szsigcode; extern int Maxmem; struct fpreg; -struct proc; +struct thread; struct reg; void busdma_swi __P((void)); @@ -47,9 +47,9 @@ void cpu_halt __P((void)); void cpu_reset __P((void)); int is_physical_memory __P((vm_offset_t addr)); void swi_vm __P((void *)); -int fill_regs __P((struct proc *, struct reg *)); -int set_regs __P((struct proc *, struct reg *)); -int fill_fpregs __P((struct proc *, struct fpreg *)); -int set_fpregs __P((struct proc *, struct fpreg *)); +int fill_regs __P((struct thread *, struct reg *)); +int set_regs __P((struct thread *, struct reg *)); +int fill_fpregs __P((struct thread *, struct fpreg *)); +int set_fpregs __P((struct thread *, struct fpreg *)); #endif /* !_MACHINE_MD_VAR_H_ */ diff --git a/sys/ia64/include/mutex.h b/sys/ia64/include/mutex.h index 2e7916c6bdfc..6581d70351b3 100644 --- a/sys/ia64/include/mutex.h +++ b/sys/ia64/include/mutex.h @@ -55,7 +55,7 @@ add rLCK=MTX_LOCK,rLCK ;; \ rsm psr.i ; \ mov ar.ccv=MTX_UNOWNED ; \ - add rNEW=PC_CURPROC,rNEW ;; \ + add rNEW=PC_CURTHREAD,rNEW ;; \ ld8 rNEW=[rNEW] ;; \ 1: cmpxchg8.acq rOLD=[rLCK],rNEW,ar.ccv ;; \ cmp.eq p1,p0=MTX_UNOWNED,rOLD ;; \ diff --git a/sys/ia64/include/param.h b/sys/ia64/include/param.h index 8c8f91ddf2e0..db8761973987 100644 --- a/sys/ia64/include/param.h +++ b/sys/ia64/include/param.h @@ -152,8 +152,10 @@ #define SSIZE 1 /* initial stack size/NBPG */ #define SINCR 1 /* increment of stack/NBPG */ -#define UPAGES 4 /* pages of u-area */ -#define USPACE (UPAGES * PAGE_SIZE) /* total size of u-area */ +#define KSTACK_PAGES 4 /* pages of kernel stack */ +#define UAREA_PAGES 1 /* pages of u-area */ + +/* #define KSTACK_GUARD */ /* compile in kstack guard page */ /* * Constants related to network buffer management. diff --git a/sys/ia64/include/pcpu.h b/sys/ia64/include/pcpu.h index 308086c8a506..50f49908424e 100644 --- a/sys/ia64/include/pcpu.h +++ b/sys/ia64/include/pcpu.h @@ -44,15 +44,14 @@ * point at the globaldata structure. */ struct globaldata { - struct proc *gd_curproc; /* current process */ - struct proc *gd_idleproc; /* idle process */ - struct proc *gd_fpcurproc; /* fp state owner */ - struct pcb *gd_curpcb; /* current pcb */ - struct timeval gd_switchtime; - int gd_switchticks; - u_int gd_cpuid; /* this cpu number */ - u_int gd_other_cpus; /* all other cpus */ - u_int64_t gd_idlepcbphys; /* pa of gd_idlepcb */ + struct thread *gd_curthread; /* current thread */ + struct thread *gd_idlethread; /* idle thread */ + struct thread *gd_fpcurthread; /* fp state owner */ + struct pcb *gd_curpcb; /* current pcb */ + struct timeval gd_switchtime; + int gd_switchticks; + u_int gd_cpuid; /* this cpu number */ + u_int gd_other_cpus; /* all other cpus */ u_int64_t gd_pending_ipis; /* pending IPI events */ struct pmap *gd_current_pmap; /* which pmap is active */ u_int32_t gd_next_asn; /* next ASN to allocate */ diff --git a/sys/ia64/include/proc.h b/sys/ia64/include/proc.h index 9d900f0e34ef..aeacc2a2cf2d 100644 --- a/sys/ia64/include/proc.h +++ b/sys/ia64/include/proc.h @@ -35,9 +35,9 @@ * Machine-dependent part of the proc struct for the Alpha. */ -struct mdproc { +struct mdthread { u_long md_flags; - struct user *md_uservirt; /* virtual address of p_addr */ + void *md_kstackvirt; /* virtual address of td_kstack */ vm_offset_t md_bspstore; /* initial ar.bspstore */ }; @@ -47,3 +47,7 @@ struct mdproc { #define MDP_UAC_SIGBUS 0x0040 /* Deliver SIGBUS upon unaligned access */ #define MDP_UAC_MASK (MDP_UAC_NOPRINT | MDP_UAC_NOFIX | MDP_UAC_SIGBUS) + +struct mdproc { + struct user *md_uservirt; /* virtual address of p_addr */ +}; diff --git a/sys/ia64/include/reg.h b/sys/ia64/include/reg.h index 31a06af6e86e..5ac4bfac0cd3 100644 --- a/sys/ia64/include/reg.h +++ b/sys/ia64/include/reg.h @@ -54,11 +54,11 @@ struct dbreg { #ifdef _KERNEL -struct proc; +struct thread; void restorehighfp __P((struct ia64_fpreg *)); void savehighfp __P((struct ia64_fpreg *)); -void setregs __P((struct proc *, u_long, u_long, u_long)); +void setregs __P((struct thread *, u_long, u_long, u_long)); #endif #endif /* _MACHINE_REG_H_ */ |