From e0603719902c282f98dd60ecffdf1dc9c7b1a738 Mon Sep 17 00:00:00 2001 From: AlmuHS Date: Thu, 27 Jun 2019 18:47:47 +0200 Subject: experiment: get rid of temporary direct mapping after start AP --- i386/i386/mp_desc.c | 8 ++++++++ i386/i386at/model_dep.c | 2 ++ 2 files changed, 10 insertions(+) diff --git a/i386/i386/mp_desc.c b/i386/i386/mp_desc.c index c1dac103..e55b7500 100644 --- a/i386/i386/mp_desc.c +++ b/i386/i386/mp_desc.c @@ -529,6 +529,9 @@ start_other_cpus(void) int cpu; vm_offset_t stack_start; int apic_id = lapic->apic_id.r >>24; + extern pt_entry_t *kernel_page_dir; + extern int nb_direct_value; + int i = 0; printf("found %d cpus\n", ncpu); printf("The current cpu is: %d\n", cpu_number()); @@ -563,6 +566,11 @@ start_other_cpus(void) stack_start += STACK_SIZE; } } + + /* Get rid of the temporary direct mapping and flush it out of the TLB. */ + for (i = 0 ; i < nb_direct_value; i++){ + kernel_page_dir[lin2pdenum_cont(INIT_VM_MIN_KERNEL_ADDRESS) + i] = 0; + } } #endif /* NCPUS > 1 */ diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c index 49a81054..015f5abe 100644 --- a/i386/i386at/model_dep.c +++ b/i386/i386at/model_dep.c @@ -143,6 +143,7 @@ extern void linux_init(void); unsigned kernel_page_dir_addr = 0; unsigned pdpbase_addr = 0; +int nb_direct_value = 0; /* * Find devices. The system is alive. @@ -461,6 +462,7 @@ i386at_init(void) if ((vm_offset_t)(-delta) < delta) delta = (vm_offset_t)(-delta); nb_direct = delta >> PDESHIFT; + nb_direct_value = nb_direct; for (i = 0; i < nb_direct; i++) kernel_page_dir[lin2pdenum_cont(INIT_VM_MIN_KERNEL_ADDRESS) + i] = kernel_page_dir[lin2pdenum_cont(LINEAR_MIN_KERNEL_ADDRESS) + i]; -- cgit v1.2.3