Changeset 60720 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Apr 27, 2016 3:32:57 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106907
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r60717 r60720 244 244 245 245 /* Construct. */ 246 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu);247 uint64_t uApicBaseMsr = XAPIC_APICBASE_PHYSADDR248 | MSR_APICBASE_XAPIC_ENABLE_BIT;246 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 247 PAPIC pApic = VM_TO_APIC(pVCpu->CTX_SUFF(pVM)); 248 uint64_t uApicBaseMsr = XAPIC_APICBASE_PHYSADDR; 249 249 if (pVCpu->idCpu == 0) 250 250 uApicBaseMsr |= MSR_APICBASE_BOOTSTRAP_CPU_BIT; 251 251 252 /* Update CPUID. */ 253 APICUpdateCpuIdForMode(pVCpu->CTX_SUFF(pVM), APICMODE_XAPIC); 254 LogRel(("APIC%u: Switched mode to xAPIC\n", pVCpu->idCpu)); 252 /* If the VM was configured with disabled mode, don't enable xAPIC mode. */ 253 if (pApic->enmOriginalMode != APICMODE_DISABLED) 254 { 255 uApicBaseMsr |= MSR_APICBASE_XAPIC_ENABLE_BIT; 256 257 /** @todo CPUID bits needs to be done on a per-VCPU basis! */ 258 CPUMSetGuestCpuIdFeature(pVCpu->CTX_SUFF(pVM), CPUMCPUIDFEATURE_APIC); 259 LogRel(("APIC%u: Switched mode to xAPIC\n", pVCpu->idCpu)); 260 } 255 261 256 262 /* Commit. */ … … 1452 1458 rc = CFGMR3QueryU8Def(pCfg, "Mode", &uOriginalMode, APICMODE_XAPIC); 1453 1459 AssertLogRelRCReturn(rc, rc); 1460 1454 1461 /* Validate APIC modes. */ 1455 switch (uOriginalMode) 1462 APICMODE const enmOriginalMode = (APICMODE)uOriginalMode; 1463 switch (enmOriginalMode) 1456 1464 { 1457 1465 case APICMODE_DISABLED: 1466 pApic->enmOriginalMode = enmOriginalMode; 1467 CPUMClearGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_APIC); 1468 CPUMClearGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_X2APIC); 1469 break; 1470 1458 1471 case APICMODE_X2APIC: 1472 pApic->enmOriginalMode = enmOriginalMode; 1473 CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_X2APIC); 1474 break; 1475 1459 1476 case APICMODE_XAPIC: 1460 pApic->enmOriginalMode = (APICMODE)uOriginalMode; 1477 pApic->enmOriginalMode = enmOriginalMode; 1478 /* The CPUID bit will be updated in apicR3ResetBaseMsr(). */ 1461 1479 break; 1480 1462 1481 default: 1463 1482 return VMR3SetError(pVM->pUVM, VERR_INVALID_STATE, RT_SRC_POS, "APIC mode %#x unknown.", uOriginalMode);
Note:
See TracChangeset
for help on using the changeset viewer.