mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-22 05:30:24 +00:00
Revert "hv: Let trampoline execution use 1GB pages"
There're some silicon bug on lakefield, TNT and EHL platforms which cause CPU
couldn't support 1GB large page.
This reverts commit f01aad7e77
in order to release
hardware platform 1GB large page support constrain on CPU side.
Tracked-On: #4550
Signed-off-by: Li Fei1 <fei1.li@intel.com>
This commit is contained in:
parent
7fa5a0055d
commit
83dc1e5ed2
@ -179,8 +179,7 @@ trampoline_gdt_ptr:
|
||||
.short (trampoline_gdt_end - trampoline_gdt) - 1
|
||||
.quad trampoline_gdt
|
||||
|
||||
/* PML4 and PDPT tables initialized to map first 4 GBytes of memory */
|
||||
/* Assumes CPU supports 1GB large pages */
|
||||
/* PML4, PDPT, and PD tables initialized to map first 4 GBytes of memory */
|
||||
.align 4
|
||||
.global cpu_boot_page_tables_ptr
|
||||
cpu_boot_page_tables_ptr:
|
||||
@ -198,9 +197,19 @@ cpu_boot_page_tables_start:
|
||||
trampoline_pdpt_addr:
|
||||
address = 0
|
||||
.rept 4
|
||||
/* 0x83 = (PAGE_PRESENT | PAGE_PSE | PAGE_RW) */
|
||||
.quad address + 0x83
|
||||
address = address + 0x40000000
|
||||
/* 0x3 = (PAGE_PRESENT | PAGE_RW) */
|
||||
.quad trampoline_pdt_addr + address + 0x3
|
||||
/*0x1000 = PAGE_SIZE*/
|
||||
address = address + 0x1000
|
||||
.endr
|
||||
/*0x1000 = PAGE_SIZE*/
|
||||
.align 0x1000
|
||||
trampoline_pdt_addr:
|
||||
address = 0
|
||||
.rept 2048
|
||||
/* 0x83 = (PAGE_PSE | PAGE_PRESENT | PAGE_RW) */
|
||||
.quad address + 0x83
|
||||
address = address + 0x200000
|
||||
.endr
|
||||
|
||||
.end
|
||||
|
@ -59,13 +59,11 @@ uint64_t get_trampoline_start16_paddr(void)
|
||||
return trampoline_start16_paddr;
|
||||
}
|
||||
|
||||
/*
|
||||
* @pre pcpu_has_cap(X86_FEATURE_PAGE1GB) == true
|
||||
*/
|
||||
static void update_trampoline_code_refs(uint64_t dest_pa)
|
||||
{
|
||||
void *ptr;
|
||||
uint64_t val;
|
||||
int32_t i;
|
||||
|
||||
/*
|
||||
* calculate the fixup CS:IP according to fixup target address
|
||||
@ -89,6 +87,11 @@ static void update_trampoline_code_refs(uint64_t dest_pa)
|
||||
ptr = hpa2hva(dest_pa + trampoline_relo_addr(&cpu_boot_page_tables_start));
|
||||
*(uint64_t *)(ptr) += dest_pa;
|
||||
|
||||
ptr = hpa2hva(dest_pa + trampoline_relo_addr(&trampoline_pdpt_addr));
|
||||
for (i = 0; i < 4; i++) {
|
||||
*(uint64_t *)(ptr + sizeof(uint64_t) * i) += dest_pa;
|
||||
}
|
||||
|
||||
/* update the gdt base pointer with relocated offset */
|
||||
ptr = hpa2hva(dest_pa + trampoline_relo_addr(&trampoline_gdt_ptr));
|
||||
*(uint64_t *)(ptr + 2) += dest_pa;
|
||||
|
Loading…
Reference in New Issue
Block a user