Changeset 12698 in vbox
- Timestamp:
- Sep 24, 2008 3:47:30 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 37005
- Location:
- trunk/src/VBox/VMM/VMMR0
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HWSVMR0.h
r12653 r12698 141 141 142 142 #define SVM_WRITE_SELREG(REG, reg) \ 143 { \ 143 144 pVMCB->guest.REG.u16Sel = pCtx->reg; \ 144 145 pVMCB->guest.REG.u32Limit = pCtx->reg##Hid.u32Limit; \ 145 146 pVMCB->guest.REG.u64Base = pCtx->reg##Hid.u64Base; \ 146 pVMCB->guest.REG.u16Attr = SVM_HIDSEGATTR_VMX2SVM(pCtx->reg##Hid.Attr.u); 147 pVMCB->guest.REG.u16Attr = SVM_HIDSEGATTR_VMX2SVM(pCtx->reg##Hid.Attr.u); \ 148 } 147 149 148 150 #define SVM_READ_SELREG(REG, reg) \ 151 { \ 149 152 pCtx->reg = pVMCB->guest.REG.u16Sel; \ 150 153 pCtx->reg##Hid.u32Limit = pVMCB->guest.REG.u32Limit; \ 151 154 pCtx->reg##Hid.u64Base = pVMCB->guest.REG.u64Base; \ 152 pCtx->reg##Hid.Attr.u = SVM_HIDSEGATTR_SVM2VMX(pVMCB->guest.REG.u16Attr); 155 pCtx->reg##Hid.Attr.u = SVM_HIDSEGATTR_SVM2VMX(pVMCB->guest.REG.u16Attr); \ 156 } 153 157 154 158 #endif /* IN_RING0 */ -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r12697 r12698 1556 1556 /* In real mode we have a fake TSS, so only sync it back when it's supposed to be valid. */ 1557 1557 if (pCtx->cr0 & X86_CR0_PROTECTION_ENABLE) 1558 { 1558 1559 VMX_READ_SELREG(TR, tr); 1560 } 1561 else 1562 /* Force a TR resync every time in case we switch modes. */ 1563 pVM->hwaccm.s.fContextUseFlags |= HWACCM_CHANGED_GUEST_TR; 1559 1564 1560 1565 VMXReadVMCS(VMX_VMCS_GUEST_GDTR_LIMIT, &val); -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.h
r12653 r12698 138 138 139 139 #define VMX_WRITE_SELREG(REG, reg) \ 140 { \ 140 141 rc = VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_##REG, pCtx->reg); \ 141 142 rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_LIMIT, pCtx->reg##Hid.u32Limit); \ … … 149 150 val = 0x10000; /* Invalid guest state error otherwise. (BIT(16) = Unusable) */ \ 150 151 \ 151 rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, val); 152 rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, val); \ 153 } 152 154 153 155 #define VMX_READ_SELREG(REG, reg) \ 156 { \ 154 157 VMXReadVMCS(VMX_VMCS_GUEST_FIELD_##REG, &val); \ 155 158 pCtx->reg = val; \ … … 159 162 pCtx->reg##Hid.u64Base = val; \ 160 163 VMXReadVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, &val); \ 161 pCtx->reg##Hid.Attr.u = val; 164 pCtx->reg##Hid.Attr.u = val; \ 165 } 162 166 163 167 #define VMX_LOG_SELREG(REG, szSelReg) \ 168 { \ 164 169 VMXReadVMCS(VMX_VMCS_GUEST_FIELD_##REG, &val); \ 165 170 Log(("%s Selector %x\n", szSelReg, val)); \ … … 169 174 Log(("%s Base %RX64\n", szSelReg, val)); \ 170 175 VMXReadVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, &val); \ 171 Log(("%s Attributes %x\n", szSelReg, val)); 176 Log(("%s Attributes %x\n", szSelReg, val)); \ 177 } 172 178 173 179
Note:
See TracChangeset
for help on using the changeset viewer.