summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-11-20 16:51:32 +0000
committercognet <cognet@FreeBSD.org>2004-11-20 16:51:32 +0000
commitc2bbd5fdeb4509ccc5f9da044dee45d30c218a88 (patch)
treecca168ceb753103e6d06a8b771e9935b4e5458a4 /sys/arm
parent2958d0c63cfb60b21c0f3756ea5dc9912b02089c (diff)
downloadFreeBSD-src-c2bbd5fdeb4509ccc5f9da044dee45d30c218a88.zip
FreeBSD-src-c2bbd5fdeb4509ccc5f9da044dee45d30c218a88.tar.gz
Get the kernel stack right now that the u-area is gone.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/vm_machdep.c5
-rw-r--r--sys/arm/include/param.h2
-rw-r--r--sys/arm/sa11x0/assabet_machdep.c3
-rw-r--r--sys/arm/xscale/i80321/iq31244_machdep.c3
4 files changed, 7 insertions, 6 deletions
diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c
index 481f72c..4e37463 100644
--- a/sys/arm/arm/vm_machdep.c
+++ b/sys/arm/arm/vm_machdep.c
@@ -145,7 +145,6 @@ cpu_fork(register struct thread *td1, register struct proc *p2,
struct trapframe *tf;
struct switchframe *sf;
struct mdproc *mdp2;
- vm_offset_t uarea = td2->td_kstack + td2->td_kstack_pages * PAGE_SIZE;
pcb1 = td1->td_pcb;
pcb2 = (struct pcb *)(td2->td_kstack + td2->td_kstack_pages * PAGE_SIZE) - 1;
@@ -156,8 +155,8 @@ cpu_fork(register struct thread *td1, register struct proc *p2,
bcopy(td1->td_pcb, pcb2, sizeof(*pcb2));
mdp2 = &p2->p_md;
bcopy(&td1->td_proc->p_md, mdp2, sizeof(*mdp2));
- pcb2->un_32.pcb32_und_sp = uarea + USPACE_UNDEF_STACK_TOP;
- pcb2->un_32.pcb32_sp = uarea +
+ pcb2->un_32.pcb32_und_sp = td2->td_kstack + USPACE_UNDEF_STACK_TOP;
+ pcb2->un_32.pcb32_sp = td2->td_kstack +
USPACE_SVC_STACK_TOP - sizeof(*pcb2);
pmap_activate(td2);
td2->td_frame = tf =
diff --git a/sys/arm/include/param.h b/sys/arm/include/param.h
index 65ea52b..885f2d2 100644
--- a/sys/arm/include/param.h
+++ b/sys/arm/include/param.h
@@ -106,7 +106,7 @@
#define KSTACK_GUARD_PAGES 1
#endif /* !KSTACK_GUARD_PAGES */
-#define USPACE_SVC_STACK_TOP 0
+#define USPACE_SVC_STACK_TOP KSTACK_PAGES * PAGE_SIZE
#define USPACE_SVC_STACK_BOTTOM (USPACE_SVC_STACK_TOP - 0x1000)
#define USPACE_UNDEF_STACK_TOP (USPACE_SVC_STACK_BOTTOM - 0x10)
#define USPACE_UNDEF_STACK_BOTTOM (FPCONTEXTSIZE + 10)
diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c
index 92fc4cb..04f637c 100644
--- a/sys/arm/sa11x0/assabet_machdep.c
+++ b/sys/arm/sa11x0/assabet_machdep.c
@@ -417,5 +417,6 @@ initarm(void *arg, void *arg2)
init_param2(physmem);
kdb_init();
avail_end = 0xc0000000 + 0x02000000 - 1;
- return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP));
+ return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP -
+ sizeof(struct pcb)));
}
diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c
index 4e58334..0bb644a 100644
--- a/sys/arm/xscale/i80321/iq31244_machdep.c
+++ b/sys/arm/xscale/i80321/iq31244_machdep.c
@@ -432,5 +432,6 @@ initarm(void *arg, void *arg2)
init_param2(physmem);
avail_end = 0xa0000000 + memsize - 1;
kdb_init();
- return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP));
+ return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP -
+ sizeof(struct pcb)));
}
OpenPOWER on IntegriCloud