VirtualBox

Changeset 51367 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
May 23, 2014 7:45:35 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
93861
Message:

VMM/GIM: Hyper-V provider, work-in-progress.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/GIM.cpp

    r51333 r51367  
    116116     * Setup the GIM provider for this VM.
    117117     */
    118     LogRel(("GIM: Using provider \"%s\" version %u\n", szProvider, uVersion));
     118    LogRel(("GIM: Using provider \"%s\" (Implementation version: %u)\n", szProvider, uVersion));
    119119    if (!RTStrCmp(szProvider, "None"))
    120120    {
     
    143143        }
    144144    }
    145 
    146145    return rc;
    147146}
  • trunk/src/VBox/VMM/VMMR3/GIMHv.cpp

    r51333 r51367  
    3636*   Defined Constants And Macros                                               *
    3737*******************************************************************************/
    38 #define GIMHV_HYPERCALL                 "GIMHvHypercall"
     38//#define GIMHV_HYPERCALL                 "GIMHvHypercall"
     39#ifdef VBOX_WITH_STATISTICS
     40# define GIMHV_MSRRANGE(a_uFirst, a_uLast, a_szName) \
     41    { (a_uFirst), (a_uLast), kCpumMsrRdFn_Gim, kCpumMsrWrFn_Gim, 0, 0, 0, 0, 0, a_szName, { 0 }, { 0 }, { 0 }, { 0 } }
     42#else
     43# define GIMHV_MSRRANGE(a_uFirst, a_uLast, a_szName) \
     44    { (a_uFirst), (a_uLast), kCpumMsrRdFn_Gim, kCpumMsrWrFn_Gim, 0, 0, 0, 0, 0, a_szName }
     45#endif
     46
     47/**
     48 * Array of MSR ranges supported by Hyper-V.
     49 */
     50static CPUMMSRRANGE const g_aMsrRanges_HyperV[] =
     51{
     52    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE0_START,  MSR_GIM_HV_RANGE0_END,  "Hyper-V range 0"),
     53    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE1_START,  MSR_GIM_HV_RANGE1_END,  "Hyper-V range 1"),
     54    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE2_START,  MSR_GIM_HV_RANGE2_END,  "Hyper-V range 2"),
     55    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE3_START,  MSR_GIM_HV_RANGE3_END,  "Hyper-V range 3"),
     56    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE4_START,  MSR_GIM_HV_RANGE4_END,  "Hyper-V range 4"),
     57    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE5_START,  MSR_GIM_HV_RANGE5_END,  "Hyper-V range 5"),
     58    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE6_START,  MSR_GIM_HV_RANGE6_END,  "Hyper-V range 6"),
     59    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE7_START,  MSR_GIM_HV_RANGE7_END,  "Hyper-V range 7"),
     60    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE8_START,  MSR_GIM_HV_RANGE8_END,  "Hyper-V range 8"),
     61    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE9_START,  MSR_GIM_HV_RANGE9_END,  "Hyper-V range 9"),
     62    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE10_START, MSR_GIM_HV_RANGE10_END, "Hyper-V range 10"),
     63    GIMHV_MSRRANGE(MSR_GIM_HV_RANGE11_START, MSR_GIM_HV_RANGE11_END, "Hyper-V range 11")
     64};
     65#undef GIMHV_MSR
    3966
    4067
     
    73100    if (!pVM->gim.s.u32Version)
    74101    {
    75         uBaseFeat = GIM_HV_BASE_FEAT_PART_REF_COUNT_MSR;
     102        uBaseFeat = 0
     103                  //| GIM_HV_BASE_FEAT_VP_RUNTIME_MSR
     104                  | GIM_HV_BASE_FEAT_PART_REF_COUNT_MSR
     105                  //| GIM_HV_BASE_FEAT_BASIC_SYNTH_IC
     106                  //| GIM_HV_BASE_FEAT_SYNTH_TIMER_MSRS
     107                  //| GIM_HV_BASE_FEAT_APIC_ACCESS_MSRS
     108                  //| GIM_HV_BASE_FEAT_HYPERCALL_MSRS
     109                  | GIM_HV_BASE_FEAT_VP_ID_MSR
     110                  //| GIM_HV_BASE_FEAT_VIRT_SYS_RESET_MSR
     111                  //| GIM_HV_BASE_FEAT_STAT_PAGES_MSR
     112                  //| GIM_HV_BASE_FEAT_PART_REF_TSC_MSR
     113                  //| GIM_HV_BASE_FEAT_GUEST_IDLE_STATE_MSR
     114                  //| GIM_HV_BASE_FEAT_TIMER_FREQ_MSRS
     115                  //| GIM_HV_BASE_FEAT_DEBUG_MSRS
     116                  ;
     117
    76118        pVM->gim.s.u.hv.u16HyperIdVersionMajor = VBOX_VERSION_MAJOR;
    77119        pVM->gim.s.u.hv.u16HyperIdVersionMajor = VBOX_VERSION_MINOR;
     
    108150     * Add Hyper-V specific leaves.
    109151     */
    110     HyperLeaf.uLeaf        = UINT32_C(0x40000002); /* MBZ until MSR_HV_GUEST_OS_ID is set by the guest. */
     152    HyperLeaf.uLeaf        = UINT32_C(0x40000002); /* MBZ until MSR_GIM_HV_GUEST_OS_ID is set by the guest. */
    111153    HyperLeaf.uEax         = 0;
    112154    HyperLeaf.uEbx         = 0;
     
    125167
    126168    /*
    127      * Register the complete MSR range for Hyper-V.
     169     * Insert all MSR ranges of Hyper-V.
    128170     */
    129     CPUMMSRRANGE MsrRange;
    130     RT_ZERO(MsrRange);
    131     MsrRange.uFirst     = UINT32_C(0x40000000);
    132     MsrRange.uLast      = UINT32_C(0x40000105);
    133     MsrRange.enmRdFn    = kCpumMsrRdFn_Gim;
    134     MsrRange.enmWrFn    = kCpumMsrWrFn_Gim;
    135     RTStrCopy(MsrRange.szName, sizeof(MsrRange.szName), "Hyper-V");
    136     rc = CPUMR3MsrRangesInsert(pVM, &MsrRange);
    137     AssertLogRelRCReturn(rc, rc);
    138 
    139 
     171    for (uint32_t i = 0; i < RT_ELEMENTS(g_aMsrRanges_HyperV); i++)
     172    {
     173        rc = CPUMR3MsrRangesInsert(pVM, &g_aMsrRanges_HyperV[i]);
     174        AssertLogRelRCReturn(rc, rc);
     175    }
    140176    return VINF_SUCCESS;
    141177}
     
    144180VMMR3_INT_DECL(void) GIMR3HvRelocate(PVM pVM, RTGCINTPTR offDelta)
    145181{
    146 //    int rc = PDMR3LdrGetSymbolRC(pVM, NULL /* pszModule */, GIMHV_HYPERCALL, &pVM->gim.s.pfnHypercallRC);
    147 //    AssertFatalRC(rc);
     182#if 0
     183    int rc = PDMR3LdrGetSymbolRC(pVM, NULL /* pszModule */, GIMHV_HYPERCALL, &pVM->gim.s.pfnHypercallRC);
     184    AssertFatalRC(rc);
     185#endif
    148186}
    149187
  • trunk/src/VBox/VMM/VMMR3/VM.cpp

    r50953 r51367  
    989989                                                                    if (RT_SUCCESS(rc))
    990990                                                                    {
    991                                                                         /* GIM must be init'd after PDM, relies on PDMR3 for
    992                                                                            symbol resolution.*/
     991                                                                        /* GIM must be init'd after PDM, may rely on PDMR3 for
     992                                                                           symbol resolution. */
    993993                                                                        rc = GIMR3Init(pVM);
    994994                                                                        if (RT_SUCCESS(rc))
Note: See TracChangeset for help on using the changeset viewer.

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