vmx.h (1ccda935d4fcc82a4371dc23d660197b0a6b6951) | vmx.h (19f703477314a5db09ffc3c0f6be9c45645f8302) |
---|---|
1/* 2 * Copyright (C) 2016 Veertu Inc, 3 * Copyright (C) 2017 Google Inc, 4 * Based on Veertu vddh/vmm/vmx.h 5 * 6 * Interfaces to Hypervisor.framework to read/write X86 registers and VMCS. 7 * 8 * This program is free software; you can redistribute it and/or --- 111 unchanged lines hidden (view full) --- 120 int i; 121 uint64_t pdpte[4] = {0, 0, 0, 0}; 122 uint64_t efer = rvmcs(vcpu, VMCS_GUEST_IA32_EFER); 123 uint64_t old_cr0 = rvmcs(vcpu, VMCS_GUEST_CR0); 124 uint64_t mask = CR0_PG | CR0_CD | CR0_NW | CR0_NE | CR0_ET; 125 126 if ((cr0 & CR0_PG) && (rvmcs(vcpu, VMCS_GUEST_CR4) & CR4_PAE) && 127 !(efer & MSR_EFER_LME)) { | 1/* 2 * Copyright (C) 2016 Veertu Inc, 3 * Copyright (C) 2017 Google Inc, 4 * Based on Veertu vddh/vmm/vmx.h 5 * 6 * Interfaces to Hypervisor.framework to read/write X86 registers and VMCS. 7 * 8 * This program is free software; you can redistribute it and/or --- 111 unchanged lines hidden (view full) --- 120 int i; 121 uint64_t pdpte[4] = {0, 0, 0, 0}; 122 uint64_t efer = rvmcs(vcpu, VMCS_GUEST_IA32_EFER); 123 uint64_t old_cr0 = rvmcs(vcpu, VMCS_GUEST_CR0); 124 uint64_t mask = CR0_PG | CR0_CD | CR0_NW | CR0_NE | CR0_ET; 125 126 if ((cr0 & CR0_PG) && (rvmcs(vcpu, VMCS_GUEST_CR4) & CR4_PAE) && 127 !(efer & MSR_EFER_LME)) { |
128 address_space_rw(&address_space_memory, 129 rvmcs(vcpu, VMCS_GUEST_CR3) & ~0x1f, 130 MEMTXATTRS_UNSPECIFIED, 131 pdpte, 32, false); | 128 address_space_read(&address_space_memory, 129 rvmcs(vcpu, VMCS_GUEST_CR3) & ~0x1f, 130 MEMTXATTRS_UNSPECIFIED, pdpte, 32); |
132 /* Only set PDPTE when appropriate. */ 133 for (i = 0; i < 4; i++) { 134 wvmcs(vcpu, VMCS_GUEST_PDPTE0 + i * 2, pdpte[i]); 135 } 136 } 137 138 wvmcs(vcpu, VMCS_CR0_MASK, mask); 139 wvmcs(vcpu, VMCS_CR0_SHADOW, cr0); --- 87 unchanged lines hidden --- | 131 /* Only set PDPTE when appropriate. */ 132 for (i = 0; i < 4; i++) { 133 wvmcs(vcpu, VMCS_GUEST_PDPTE0 + i * 2, pdpte[i]); 134 } 135 } 136 137 wvmcs(vcpu, VMCS_CR0_MASK, mask); 138 wvmcs(vcpu, VMCS_CR0_SHADOW, cr0); --- 87 unchanged lines hidden --- |