I don't have a real 586, but I can tell qemu to pretend to be one,
which at least executes this code.

Using kd_waitok here seems suspect, because if we're out of memory
this early I can't see anything else freeing any up, but
uvm_km_zalloc() will also sleep rather than return failure.
Should this use kd_nowait and panic if the allocation fails instead?

ok?

Index: arch/i386/i386/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v
retrieving revision 1.642
diff -u -p -u -p -r1.642 machdep.c
--- arch/i386/i386/machdep.c    28 Dec 2020 14:02:07 -0000      1.642
+++ arch/i386/i386/machdep.c    3 Jan 2021 23:01:34 -0000
@@ -3100,7 +3100,7 @@ fix_f00f(void)
        void *p;
 
        /* Allocate two new pages */
-       va = uvm_km_zalloc(kernel_map, NBPG*2);
+       va = (vaddr_t)km_alloc(NBPG*2, &kv_any, &kp_zero, &kd_waitok);
        p = (void *)(va + NBPG - 7*sizeof(*idt));
 
        /* Copy over old IDT */

Reply via email to