VirtualBox

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


Ignore:
Timestamp:
Oct 20, 2015 11:25:21 AM (9 years ago)
Author:
vboxsync
Message:

VMM/GIM: Saved state bump for MSR based debugging support.

File:
1 edited

Legend:

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

    r58316 r58331  
    4545 * GIM Hyper-V saved-state version.
    4646 */
    47 #define GIM_HV_SAVED_STATE_VERSION          UINT32_C(1)
     47#define GIM_HV_SAVED_STATE_VERSION                UINT32_C(2)
     48/** Vanilla saved states, prior to any debug support. */
     49#define GIM_HV_SAVED_STATE_VERSION_PRE_DEBUG      UINT32_C(1)
    4850
    4951#ifdef VBOX_WITH_STATISTICS
     
    426428     */
    427429    if (pHv->uMiscFeat & GIM_HV_MISC_FEAT_GUEST_CRASH_MSRS)
    428         pHv->uCrashCtl = MSR_GIM_HV_CRASH_CTL_NOTIFY_BIT;
     430        pHv->uCrashCtlMsr = MSR_GIM_HV_CRASH_CTL_NOTIFY_BIT;
    429431    for (VMCPUID i = 0; i < pVM->cCpus; i++)
    430432        pVM->aCpus[i].gim.s.u.HvCpu.uSint2Msr = MSR_GIM_HV_SINT_MASKED_BIT;
     
    560562    pHv->u64HypercallMsr        = 0;
    561563    pHv->u64TscPageMsr          = 0;
    562     pHv->uCrashP0               = 0;
    563     pHv->uCrashP1               = 0;
    564     pHv->uCrashP2               = 0;
    565     pHv->uCrashP3               = 0;
    566     pHv->uCrashP4               = 0;
     564    pHv->uCrashP0Msr            = 0;
     565    pHv->uCrashP1Msr            = 0;
     566    pHv->uCrashP2Msr            = 0;
     567    pHv->uCrashP3Msr            = 0;
     568    pHv->uCrashP4Msr            = 0;
    567569    pHv->uDebugStatusMsr        = 0;
    568570    pHv->uDebugPendingBufferMsr = 0;
     
    656658        uTscSequence = pcRefTsc->u32TscSequence;
    657659    }
    658 
    659     return SSMR3PutU32(pSSM, uTscSequence);
     660    SSMR3PutU32(pSSM, uTscSequence);
     661
     662    /*
     663     * Save debug support data.
     664     */
     665    SSMR3PutU64(pSSM, pcHv->uDebugPendingBufferMsr);
     666    SSMR3PutU64(pSSM, pcHv->uDebugSendBufferMsr);
     667    SSMR3PutU64(pSSM, pcHv->uDebugRecvBufferMsr);
     668    SSMR3PutU64(pSSM, pcHv->uDebugStatusMsr);
     669    SSMR3PutU32(pSSM, pcHv->enmDebugReply);
     670    SSMR3PutU32(pSSM, pcHv->uBootpXId);
     671    SSMR3PutU32(pSSM, pcHv->DbgGuestIp4Addr.u);
     672
     673    for (VMCPUID i = 0; i < pVM->cCpus; i++)
     674    {
     675        PGIMHVCPU pHvCpu = &pVM->aCpus[i].gim.s.u.HvCpu;
     676        SSMR3PutU64(pSSM, pHvCpu->uSimpMsr);
     677        SSMR3PutU64(pSSM, pHvCpu->uSint2Msr);
     678    }
     679
     680    return SSMR3PutU8(pSSM, UINT8_MAX);;
    660681}
    661682
     
    677698    int rc = SSMR3GetU32(pSSM, &uHvSavedStatVersion);
    678699    AssertRCReturn(rc, rc);
    679     if (uHvSavedStatVersion != GIM_HV_SAVED_STATE_VERSION)
     700    if (   uHvSavedStatVersion != GIM_HV_SAVED_STATE_VERSION
     701        && uHvSavedStatVersion != GIM_HV_SAVED_STATE_VERSION_PRE_DEBUG)
    680702        return SSMR3SetLoadError(pSSM, VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION, RT_SRC_POS,
    681                                  N_("Unsupported Hyper-V saved-state version %u (expected %u)."), uHvSavedStatVersion,
     703                                 N_("Unsupported Hyper-V saved-state version %u (current %u)!"), uHvSavedStatVersion,
    682704                                 GIM_HV_SAVED_STATE_VERSION);
    683705
     
    765787    }
    766788
    767     return rc;
     789    /*
     790     * Load the debug support data.
     791     */
     792    if (uHvSavedStatVersion > GIM_HV_SAVED_STATE_VERSION_PRE_DEBUG)
     793    {
     794        SSMR3GetU64(pSSM, &pHv->uDebugPendingBufferMsr);
     795        SSMR3GetU64(pSSM, &pHv->uDebugSendBufferMsr);
     796        SSMR3GetU64(pSSM, &pHv->uDebugRecvBufferMsr);
     797        SSMR3GetU64(pSSM, &pHv->uDebugStatusMsr);
     798        SSMR3GetU32(pSSM, (uint32_t *)&pHv->enmDebugReply);
     799        SSMR3GetU32(pSSM, &pHv->uBootpXId);
     800        rc = SSMR3GetU32(pSSM, &pHv->DbgGuestIp4Addr.u);
     801        AssertRCReturn(rc, rc);
     802
     803        for (VMCPUID i = 0; i < pVM->cCpus; i++)
     804        {
     805            PGIMHVCPU pHvCpu = &pVM->aCpus[i].gim.s.u.HvCpu;
     806            SSMR3GetU64(pSSM, &pHvCpu->uSimpMsr);
     807            SSMR3GetU64(pSSM, &pHvCpu->uSint2Msr);
     808        }
     809    }
     810
     811    uint8_t bDelim;
     812    return SSMR3GetU8(pSSM, &bDelim);
    768813}
    769814
     
    11691214                        pIpHdr->ip_sum     = 0;
    11701215                        pIpHdr->ip_src.u   = 0;
    1171                         pIpHdr->ip_dst.u   = pHv->DbgGuestAddr.u;
     1216                        pIpHdr->ip_dst.u   = pHv->DbgGuestIp4Addr.u;
    11721217                        pIpHdr->ip_sum     = RTNetIPv4HdrChecksum(pIpHdr);
    11731218                        /* UDP */
     
    13791424                                pbData  += cbFrameHdr;
    13801425                                cbWrite -= cbFrameHdr;
    1381                                 pHv->DbgGuestAddr = pIp4Hdr->ip_src;
    1382                                 pHv->enmDebugReply = GIMHVDEBUGREPLY_UDP;
     1426                                pHv->DbgGuestIp4Addr = pIp4Hdr->ip_src;
     1427                                pHv->enmDebugReply   = GIMHVDEBUGREPLY_UDP;
    13831428                            }
    13841429                            else
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