From a284af51ec6487772e56857a255ec763a4b68c3e Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 2 Apr 2022 17:25:24 +0200 Subject: [PATCH] Prepare refactoring pasted code --- src/driver/hypervisor.cpp | 18 ++++++++++-------- src/driver/vmx.hpp | 35 ++++------------------------------- 2 files changed, 14 insertions(+), 39 deletions(-) diff --git a/src/driver/hypervisor.cpp b/src/driver/hypervisor.cpp index cb59a7e..851e664 100644 --- a/src/driver/hypervisor.cpp +++ b/src/driver/hypervisor.cpp @@ -279,7 +279,6 @@ void ShvVmxEptInitialize(vmx::vm_state* VpData) { UINT32 i, j; vmx::pdpte tempEpdpte; - vmx::large_pde tempEpde; // // Fill out the EPML4E which covers the first 512GB of RAM @@ -311,14 +310,17 @@ void ShvVmxEptInitialize(vmx::vm_state* VpData) // // Fill out a RWX Large PDE // - tempEpde.full = 0; - tempEpde.read = tempEpde.write = tempEpde.execute = 1; - tempEpde.large = 1; + epde_2mb temp_epde; + temp_epde.flags = 0; + temp_epde.read_access = 1; + temp_epde.write_access = 1; + temp_epde.execute_access = 1; + temp_epde.large_page = 1; // // Loop every 1GB of RAM (described by the PDPTE) // - __stosq((UINT64*)VpData->epde, tempEpde.full, PDPTE_ENTRY_COUNT * PDE_ENTRY_COUNT); + __stosq((UINT64*)VpData->epde, temp_epde.flags, PDPTE_ENTRY_COUNT * PDE_ENTRY_COUNT); for (i = 0; i < PDPTE_ENTRY_COUNT; i++) { // @@ -327,9 +329,9 @@ void ShvVmxEptInitialize(vmx::vm_state* VpData) for (j = 0; j < PDE_ENTRY_COUNT; j++) { VpData->epde[i][j].page_frame_number = (i * 512) + j; - VpData->epde[i][j].type = ShvVmxMtrrAdjustEffectiveMemoryType(VpData, - VpData->epde[i][j].page_frame_number * _2MB, - MEMORY_TYPE_WRITE_BACK); + VpData->epde[i][j].memory_type = ShvVmxMtrrAdjustEffectiveMemoryType(VpData, + VpData->epde[i][j].page_frame_number * _2MB, + MEMORY_TYPE_WRITE_BACK); } } } diff --git a/src/driver/vmx.hpp b/src/driver/vmx.hpp index 4300832..76646fa 100644 --- a/src/driver/vmx.hpp +++ b/src/driver/vmx.hpp @@ -2,9 +2,9 @@ #include -#define PML4E_ENTRY_COUNT 512 -#define PDPTE_ENTRY_COUNT 512 -#define PDE_ENTRY_COUNT 512 +#define PML4E_ENTRY_COUNT 512 // EPT_PML4E_ENTRY_COUNT +#define PDPTE_ENTRY_COUNT 512 // EPT_PDPTE_ENTRY_COUNT +#define PDE_ENTRY_COUNT 512 // EPT_PDE_ENTRY_COUNT namespace vmx { @@ -61,33 +61,6 @@ namespace vmx }; }; - struct large_pde - { - union - { - struct - { - uint64_t read : 1; - uint64_t write : 1; - uint64_t execute : 1; - uint64_t type : 3; - uint64_t ignore_pat : 1; - uint64_t large : 1; - uint64_t accessed : 1; - uint64_t dirty : 1; - uint64_t user_mode_execute : 1; - uint64_t software_use : 1; - uint64_t reserved : 9; - uint64_t page_frame_number : 27; - uint64_t reserved_high : 4; - uint64_t software_use_high : 11; - uint64_t suppress_vme : 1; - }; - - uint64_t full; - }; - }; - struct kdescriptor { uint16_t pad[3]; @@ -141,7 +114,7 @@ namespace vmx DECLSPEC_ALIGN(PAGE_SIZE) uint8_t msr_bitmap[PAGE_SIZE]{}; DECLSPEC_ALIGN(PAGE_SIZE) epml4e epml4[PML4E_ENTRY_COUNT]{}; DECLSPEC_ALIGN(PAGE_SIZE) pdpte epdpt[PDPTE_ENTRY_COUNT]{}; - DECLSPEC_ALIGN(PAGE_SIZE) large_pde epde[PDPTE_ENTRY_COUNT][PDE_ENTRY_COUNT]{}; + DECLSPEC_ALIGN(PAGE_SIZE) epde_2mb epde[PDPTE_ENTRY_COUNT][PDE_ENTRY_COUNT]{}; DECLSPEC_ALIGN(PAGE_SIZE) vmcs vmx_on{}; DECLSPEC_ALIGN(PAGE_SIZE) vmcs vmcs{};