VirtualBox

Changeset 61608 in vbox


Ignore:
Timestamp:
Jun 9, 2016 10:14:25 AM (9 years ago)
Author:
vboxsync
Message:

VMM/APIC: Manually register the x2APIC MSR ranges when x2APIC mode is configured for the APIC.

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/APICAll.cpp

    r61582 r61608  
    17771777     */
    17781778    VMCPU_ASSERT_EMT(pVCpu);
    1779     Assert(u32Reg >= MSR_IA32_X2APIC_START && u32Reg <= MSR_IA32_X2APIC_END);
     1779    Assert(u32Reg >= MSR_IA32_X2APIC_ID && u32Reg <= MSR_IA32_X2APIC_SELF_IPI);
    17801780    Assert(pu64Value);
    17811781
     
    18841884     */
    18851885    VMCPU_ASSERT_EMT(pVCpu);
    1886     Assert(u32Reg >= MSR_IA32_X2APIC_START && u32Reg <= MSR_IA32_X2APIC_END);
     1886    Assert(u32Reg >= MSR_IA32_X2APIC_ID && u32Reg <= MSR_IA32_X2APIC_SELF_IPI);
    18871887
    18881888#ifndef IN_RING3
  • trunk/src/VBox/VMM/VMMR3/APIC.cpp

    r61586 r61608  
    4848#define APIC_SAVED_STATE_VERSION_ANCIENT          1
    4949
     50#ifdef VBOX_WITH_STATISTICS
     51# define X2APIC_MSRRANGE(a_uFirst, a_uLast, a_szName) \
     52    { (a_uFirst), (a_uLast), kCpumMsrRdFn_Ia32X2ApicN, kCpumMsrWrFn_Ia32X2ApicN, 0, 0, 0, 0, 0, a_szName, { 0 }, { 0 }, { 0 }, { 0 } }
     53#else
     54# define X2APIC_MSRRANGE(a_uFirst, a_uLast, a_szName) \
     55    { (a_uFirst), (a_uLast), kCpumMsrRdFn_Ia32X2ApicN, kCpumMsrWrFn_Ia32X2ApicN, 0, 0, 0, 0, 0, a_szName }
     56#endif
     57
    5058
    5159/*********************************************************************************************************************************
    5260*   Global Variables                                                                                                             *
    5361*********************************************************************************************************************************/
     62/**
     63 * Array of MSR ranges supported by the x2APIC.
     64 */
     65static CPUMMSRRANGE const g_aMsrRanges_x2Apic[] =
     66{
     67    X2APIC_MSRRANGE(MSR_IA32_X2APIC_ID,        MSR_IA32_X2APIC_VERSION,   "x2APIC range 0"),
     68    X2APIC_MSRRANGE(MSR_IA32_X2APIC_VERSION,   MSR_IA32_X2APIC_TPR,       "x2APIC range 1"),
     69    X2APIC_MSRRANGE(MSR_IA32_X2APIC_TPR,       MSR_IA32_X2APIC_TPR,       "x2APIC range 2"),
     70    X2APIC_MSRRANGE(MSR_IA32_X2APIC_PPR,       MSR_IA32_X2APIC_EOI,       "x2APIC range 3"),
     71    X2APIC_MSRRANGE(MSR_IA32_X2APIC_LDR,       MSR_IA32_X2APIC_LDR,       "x2APIC range 4"),
     72    X2APIC_MSRRANGE(MSR_IA32_X2APIC_SVR,       MSR_IA32_X2APIC_SVR,       "x2APIC range 5"),
     73    X2APIC_MSRRANGE(MSR_IA32_X2APIC_ISR0,      MSR_IA32_X2APIC_ISR7,      "x2APIC range 7"),
     74    X2APIC_MSRRANGE(MSR_IA32_X2APIC_TMR0,      MSR_IA32_X2APIC_TMR7,      "x2APIC range 8"),
     75    X2APIC_MSRRANGE(MSR_IA32_X2APIC_IRR0,      MSR_IA32_X2APIC_IRR7,      "x2APIC range 8"),
     76    X2APIC_MSRRANGE(MSR_IA32_X2APIC_ESR,       MSR_IA32_X2APIC_ESR,       "x2APIC range 9"),
     77    X2APIC_MSRRANGE(MSR_IA32_X2APIC_LVT_CMCI,  MSR_IA32_X2APIC_ICR,       "x2APIC range 10"),
     78    X2APIC_MSRRANGE(MSR_IA32_X2APIC_LVT_TIMER, MSR_IA32_X2APIC_TIMER_CCR, "x2APIC range 11"),
     79    X2APIC_MSRRANGE(MSR_IA32_X2APIC_TIMER_DCR, MSR_IA32_X2APIC_SELF_IPI,  "x2APIC range 12")
     80};
     81#undef X2APIC_MSRRANGE
     82
    5483/** Saved state field descriptors for XAPICPAGE. */
    5584static const SSMFIELD g_aXApicPageFields[] =
     
    16471676
    16481677        case APICMODE_X2APIC:
     1678        {
    16491679            pApic->enmOriginalMode = enmOriginalMode;
    16501680            CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_X2APIC);
     1681
     1682            /* Insert all MSR ranges of the x2APIC. */
     1683            LogRel(("APIC: Registering x2APIC MSR ranges\n"));
     1684            for (size_t i = 0; i < RT_ELEMENTS(g_aMsrRanges_x2Apic); i++)
     1685            {
     1686                rc = CPUMR3MsrRangesInsert(pVM, &g_aMsrRanges_x2Apic[i]);
     1687                AssertLogRelRCReturn(rc, rc);
     1688            }
    16511689            break;
     1690        }
    16521691
    16531692        case APICMODE_XAPIC:
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette