summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2003-04-02 08:03:42 +0000
committerjake <jake@FreeBSD.org>2003-04-02 08:03:42 +0000
commita462e7f7305151871d5af4c0cf0569d676d46c53 (patch)
tree289fd82dd67f91ef3ffdb890d4270ebfc724d822 /sys
parent02364d4f5d7a3cf2e1a838a47309ccf55842b608 (diff)
downloadFreeBSD-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.c12
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;
OpenPOWER on IntegriCloud