Hi folks,
new year, new try: I would love to get some help from someone who understands
the low level details of a VAX calls frame better than me:
https://mail-index.netbsd.org/port-vax/2024/02/29/msg004920.html
The problem: I would like to get rid of the superflous (and harmfull)
pmap_activate() call in vax/vm_machdep.c
https://nxr.netbsd.org/xref/src/sys/arch/vax/vax/vm_machdep.c#113
107 /*
108 * Activate address space for the new process. The PTEs have
109 * already been allocated by way of pmap_create().
110 * This writes the page table registers to the PCB.
111 */
112 pcb2->pcb_pm = NULL;
->> 113 pmap_activate(l2);
Not that I really know how everything about this is expected to
interact, but I at least understand what the routine does :-)
114
115 /* Mark guard page invalid in kernel stack */
116 kvtopte((uintptr_t)uv + REDZONEADDR)->pg_v = 0;
117
118 /*
119 * Set up the calls frame above (below) the trapframe and populate
120 * it with something good. This is so that we can simulate that we
121 * called cpu_lwp_bootstrap with a CALLS insn and it can return to
122 * sret.
123 */
Without that pmap_activate() the new lwp can not start (lwp_startup crashes
when jumping into it). My guess: the pmap_activate() hides something missing
from the cpu_lwp_bootstrap() setup.
Can you help spot what is missing there?
Thanks,
Martin