diff options
author | jake <jake@FreeBSD.org> | 2003-04-02 08:03:42 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2003-04-02 08:03:42 +0000 |
commit | a462e7f7305151871d5af4c0cf0569d676d46c53 (patch) | |
tree | 289fd82dd67f91ef3ffdb890d4270ebfc724d822 /sys | |
parent | 02364d4f5d7a3cf2e1a838a47309ccf55842b608 (diff) | |
download | FreeBSD-src-a462e7f7305151871d5af4c0cf0569d676d46c53.zip FreeBSD-src-a462e7f7305151871d5af4c0cf0569d676d46c53.tar.gz |
Implement cpu_thread_setup. Fix cpu_set_upcall.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/sparc64/sparc64/vm_machdep.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/sparc64/sparc64/vm_machdep.c b/sys/sparc64/sparc64/vm_machdep.c index 70d1049..2a3f488 100644 --- a/sys/sparc64/sparc64/vm_machdep.c +++ b/sys/sparc64/sparc64/vm_machdep.c @@ -138,17 +138,23 @@ cpu_thread_clean(struct thread *td) void cpu_thread_setup(struct thread *td) { + struct pcb *pcb; + + pcb = (struct pcb *)((td->td_kstack + KSTACK_PAGES * PAGE_SIZE - + sizeof(struct pcb)) & ~0x3fUL); + td->td_frame = (struct trapframe *)pcb - 1; + td->td_pcb = pcb; } void cpu_set_upcall(struct thread *td, void *v) { - struct pcb *pcb = v; struct trapframe *tf; struct frame *fr; + struct pcb *pcb; - tf = (struct trapframe *)pcb - 1; - td->td_frame = tf; + pcb = td->td_pcb; + tf = td->td_frame; fr = (struct frame *)tf - 1; fr->fr_local[0] = (u_long)fork_return; fr->fr_local[1] = (u_long)td; |