mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
Fix thread0 kernel stack initialization on riscv.
- td_kstack_pages was not being initialized. - td_kstack is supposed to be the base address of the stack region, not the top. The arm ports seem to have similar problems and will be fixed next. Reported by: Jenkins via lwhsu MFC after: 1 week Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
5b87ecc643
commit
0ef3ca7ae3
2 changed files with 4 additions and 3 deletions
|
|
@ -209,7 +209,7 @@ va:
|
|||
sd t0, 0(sp) /* kern_l1pt */
|
||||
sd s9, 8(sp) /* kern_phys */
|
||||
|
||||
la t0, initstack_end
|
||||
la t0, initstack
|
||||
sd t0, 16(sp) /* kern_stack */
|
||||
|
||||
li t0, (VM_MAX_KERNEL_ADDRESS - 2 * L2_SIZE)
|
||||
|
|
|
|||
|
|
@ -123,7 +123,6 @@ uint32_t boot_hart; /* The hart we booted on. */
|
|||
cpuset_t all_harts;
|
||||
|
||||
extern int *end;
|
||||
extern int *initstack_end;
|
||||
|
||||
static void
|
||||
cpu_startup(void *dummy)
|
||||
|
|
@ -658,7 +657,9 @@ init_proc0(vm_offset_t kstack)
|
|||
|
||||
proc_linkup0(&proc0, &thread0);
|
||||
thread0.td_kstack = kstack;
|
||||
thread0.td_pcb = (struct pcb *)(thread0.td_kstack) - 1;
|
||||
thread0.td_kstack_pages = KSTACK_PAGES;
|
||||
thread0.td_pcb = (struct pcb *)(thread0.td_kstack +
|
||||
thread0.td_kstack_pages * PAGE_SIZE) - 1;
|
||||
thread0.td_pcb->pcb_fpflags = 0;
|
||||
thread0.td_frame = &proc0_tf;
|
||||
pcpup->pc_curpcb = thread0.td_pcb;
|
||||
|
|
|
|||
Loading…
Reference in a new issue