mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 09:47:44 +00:00
hv: Reserve space for VMs' EPT 4k pages after boot
As ACRN prepares to support servers with large amounts of memory current logic to allocate space for 4K pages of EPT at compile time will increase the size of .bss section of ACRN binary. Bootloaders could run into a situation where they cannot find enough contiguous space to load ACRN binary under 4GB, which is typically heavily fragmented with E820 types Reserved, ACPI data, 32-bit PCI hole etc. This patch does the following 1) Works only for "direct" mode of vboot 2) reserves space for 4K pages of EPT, after boot by parsing platform E820 table, for all types of VMs. Size comparison: w/o patch Size of DRAM Size of .bss 48 GB 0xe1bbc98 (~226 MB) 128 GB 0x222abc98 (~548 MB) w/ patch Size of DRAM Size of .bss 48 GB 0x1991c98 (~26 MB) 128 GB 0x1a81c98 (~28 MB) Tracked-On: #4563 Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
committed by
wenlingz
parent
24cfdacb99
commit
8ffe6fc67a
@@ -37,9 +37,7 @@ struct mem_range {
|
||||
/* HV read multiboot header to get e820 entries info and calc total RAM info */
|
||||
void init_e820(void);
|
||||
|
||||
/* get some RAM below 1MB in e820 entries, hide it from sos_vm, return its start address */
|
||||
uint64_t e820_alloc_low_memory(uint32_t size_arg);
|
||||
|
||||
uint64_t e820_alloc_memory(uint32_t size_arg, uint64_t max_addr);
|
||||
/* get total number of the e820 entries */
|
||||
uint32_t get_e820_entries_count(void);
|
||||
|
||||
|
@@ -40,6 +40,10 @@
|
||||
|
||||
#define PRE_VM_EPT_ADDRESS_SPACE(size) (PTDEV_HI_MMIO_START + PTDEV_HI_MMIO_SIZE)
|
||||
|
||||
#define TOTAL_EPT_4K_PAGES_SIZE (PRE_VM_NUM*(PT_PAGE_NUM(PRE_VM_EPT_ADDRESS_SPACE(CONFIG_UOS_RAM_SIZE))*MEM_4K)) + \
|
||||
(SOS_VM_NUM*(PT_PAGE_NUM(EPT_ADDRESS_SPACE(CONFIG_SOS_RAM_SIZE))*MEM_4K)) + \
|
||||
(MAX_POST_VM_NUM*(PT_PAGE_NUM(EPT_ADDRESS_SPACE(CONFIG_UOS_RAM_SIZE))*MEM_4K))
|
||||
|
||||
#define TRUSTY_PML4_PAGE_NUM(size) (1UL)
|
||||
#define TRUSTY_PDPT_PAGE_NUM(size) (1UL)
|
||||
#define TRUSTY_PD_PAGE_NUM(size) (PD_PAGE_NUM(size))
|
||||
@@ -90,4 +94,7 @@ extern const struct memory_ops ppt_mem_ops;
|
||||
void init_ept_mem_ops(struct memory_ops *mem_ops, uint16_t vm_id);
|
||||
void *get_reserve_sworld_memory_base(void);
|
||||
|
||||
#ifdef CONFIG_LAST_LEVEL_EPT_AT_BOOT
|
||||
void reserve_buffer_for_ept_pages(void);
|
||||
#endif
|
||||
#endif /* PAGE_H */
|
||||
|
@@ -38,9 +38,10 @@
|
||||
* POST_LAUNCHED_VM is launched by ACRN devicemodel, with/without LAPIC_PT depends on usecases.
|
||||
*/
|
||||
enum acrn_vm_load_order {
|
||||
PRE_LAUNCHED_VM = 1,
|
||||
PRE_LAUNCHED_VM = 0,
|
||||
SOS_VM,
|
||||
POST_LAUNCHED_VM /* Launched by Devicemodel in SOS_VM */
|
||||
POST_LAUNCHED_VM, /* Launched by Devicemodel in SOS_VM */
|
||||
MAX_LOAD_ORDER
|
||||
};
|
||||
|
||||
/* ACRN guest severity */
|
||||
|
Reference in New Issue
Block a user