VirtualBox

Changeset 108462 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 5, 2025 5:35:56 PM (2 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167836
Message:

VMM/GIC: bugref:10404 Saved state bits.

File:
1 edited

Legend:

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

    r108452 r108462  
    5151*********************************************************************************************************************************/
    5252/** GIC saved state version. */
    53 #define GIC_SAVED_STATE_VERSION                     2
     53#define GIC_SAVED_STATE_VERSION                     3
    5454
    5555# define GIC_SYSREGRANGE(a_uFirst, a_uLast, a_szName) \
     
    336336    LogFlowFunc(("\n"));
    337337
    338 #define GIC_SSM_PUT_ARRAY(a_pfnSSM, a_Array) \
    339     do \
    340     { \
    341         pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(a_Array)); \
    342         for (uint32_t i = 0; i < RT_ELEMENTS(a_Array); i++) \
    343             (a_pfnSSM)(pSSM, (a_Array)[i]); \
    344     } while (0)
    345 
    346338    /*
    347339     * Save per-VM data.
     
    361353    pHlp->pfnSSMPutBool(pSSM, pGicDev->fRangeSelSupport);
    362354#endif
     355
     356    /* Distributor state. */
    363357    pHlp->pfnSSMPutBool(pSSM, pGicDev->fIntrGroup0Enabled);
    364358    pHlp->pfnSSMPutBool(pSSM, pGicDev->fIntrGroup1Enabled);
    365359    pHlp->pfnSSMPutBool(pSSM, pGicDev->fAffRoutingEnabled);
    366     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrGroup);
    367     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrConfig);
    368     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrEnabled);
    369     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrPending);
    370     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrActive);
    371     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8,  pGicDev->abIntrPriority);
    372     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->au32IntrRouting);
    373     GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicDev->bmIntrRoutingMode);
     360    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrGroup[0],       sizeof(pGicDev->bmIntrGroup));
     361    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrConfig[0],      sizeof(pGicDev->bmIntrConfig));
     362    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrEnabled[0],     sizeof(pGicDev->bmIntrEnabled));
     363    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrPending[0],     sizeof(pGicDev->bmIntrPending));
     364    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrActive[0],      sizeof(pGicDev->bmIntrActive));
     365    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->abIntrPriority[0],    sizeof(pGicDev->abIntrPriority));
     366    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->au32IntrRouting[0],   sizeof(pGicDev->au32IntrRouting));
     367    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrRoutingMode[0], sizeof(pGicDev->bmIntrRoutingMode));
    374368
    375369    /*
     
    381375        Assert(pGicCpu);
    382376
    383         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrGroup);
    384         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrConfig);
    385         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrEnabled);
    386         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrPending);
    387         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU32, pGicCpu->bmIntrActive);
    388         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8,  pGicCpu->abIntrPriority);
    389 
    390         pHlp->pfnSSMPutU64(pSSM,             pGicCpu->uIccCtlr);
    391         GIC_SSM_PUT_ARRAY(pHlp->pfnSSMPutU8, pGicCpu->abRunningPriorities);
    392         pHlp->pfnSSMPutU8(pSSM,              pGicCpu->idxRunningPriority);
    393         pHlp->pfnSSMPutU8(pSSM,              pGicCpu->bInterruptPriority);
    394         pHlp->pfnSSMPutU8(pSSM,              pGicCpu->bBinaryPtGroup0);
    395         pHlp->pfnSSMPutU8(pSSM,              pGicCpu->bBinaryPtGroup1);
    396         pHlp->pfnSSMPutBool(pSSM,            pGicCpu->fIntrGroup0Enabled);
    397         pHlp->pfnSSMPutBool(pSSM,            pGicCpu->fIntrGroup1Enabled);
     377        /* Redistributor state. */
     378        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrGroup[0],    sizeof(pGicCpu->bmIntrGroup));
     379        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrConfig[0],   sizeof(pGicCpu->bmIntrConfig));
     380        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrEnabled[0],  sizeof(pGicCpu->bmIntrEnabled));
     381        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrPending[0],  sizeof(pGicCpu->bmIntrPending));
     382        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->bmIntrActive[0],   sizeof(pGicCpu->bmIntrActive));
     383        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->abIntrPriority[0], sizeof(pGicCpu->abIntrPriority));
     384
     385        /* ICC system register state. */
     386        pHlp->pfnSSMPutU64(pSSM, pGicCpu->uIccCtlr);
     387        pHlp->pfnSSMPutMem(pSSM, &pGicCpu->abRunningPriorities[0], sizeof(pGicCpu->abRunningPriorities));
     388        pHlp->pfnSSMPutU8(pSSM,   pGicCpu->idxRunningPriority);
     389        pHlp->pfnSSMPutU8(pSSM,   pGicCpu->bInterruptPriority);
     390        pHlp->pfnSSMPutU8(pSSM,   pGicCpu->bBinaryPtGroup0);
     391        pHlp->pfnSSMPutU8(pSSM,   pGicCpu->bBinaryPtGroup1);
     392        pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup0Enabled);
     393        pHlp->pfnSSMPutBool(pSSM, pGicCpu->fIntrGroup1Enabled);
    398394    }
    399395
     
    475471        return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Invalid saved-state version %u (%#x)"), uVersion, uVersion);
    476472
    477 #define GIC_SSM_GET_ARRAY(a_pfnSSM, a_Array) \
    478     do \
    479     { \
    480         uint32_t       cItems    = 0; \
    481         uint32_t const cExpected = RT_ELEMENTS(a_Array); \
    482         int const      rcSsm     = pHlp->pfnSSMGetU32(pSSM, &cItems); \
    483         AssertRCReturn(rcSsm, rcSsm); \
    484         if (cItems != cExpected) \
    485             return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, \
    486                                            N_("Config mismatch: number of elements in " RT_STR(a_Array) ": got=%u expected=%u"), \
    487                                            cItems, cExpected); \
    488         for (uint32_t i = 0; i < cExpected; i++) \
    489             (a_pfnSSM)(pSSM, &(a_Array)[i]); \
    490     } while (0)
    491 
    492473    /*
    493474     * Load per-VM data.
     
    508489    pHlp->pfnSSMGetBool(pSSM, &pGicDev->fRangeSelSupport);
    509490#endif
     491
     492    /* Distributor state. */
    510493    pHlp->pfnSSMGetBool(pSSM, &pGicDev->fIntrGroup0Enabled);
    511494    pHlp->pfnSSMGetBool(pSSM, &pGicDev->fIntrGroup1Enabled);
    512495    pHlp->pfnSSMGetBool(pSSM, &pGicDev->fAffRoutingEnabled);
    513     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrGroup);
    514     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrConfig);
    515     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrEnabled);
    516     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrPending);
    517     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrActive);
    518     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8,  pGicDev->abIntrPriority);
    519     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->au32IntrRouting);
    520     GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicDev->bmIntrRoutingMode);
     496    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrGroup[0],       sizeof(pGicDev->bmIntrGroup));
     497    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrConfig[0],      sizeof(pGicDev->bmIntrConfig));
     498    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrEnabled[0],     sizeof(pGicDev->bmIntrEnabled));
     499    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrPending[0],     sizeof(pGicDev->bmIntrPending));
     500    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrActive[0],      sizeof(pGicDev->bmIntrActive));
     501    pHlp->pfnSSMGetMem(pSSM, &pGicDev->abIntrPriority[0],    sizeof(pGicDev->abIntrPriority));
     502    pHlp->pfnSSMGetMem(pSSM, &pGicDev->au32IntrRouting[0],   sizeof(pGicDev->au32IntrRouting));
     503    pHlp->pfnSSMGetMem(pSSM, &pGicDev->bmIntrRoutingMode[0], sizeof(pGicDev->bmIntrRoutingMode));
    521504
    522505    /*
     
    528511        Assert(pGicCpu);
    529512
    530         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrGroup);
    531         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrConfig);
    532         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrEnabled);
    533         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrPending);
    534         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU32, pGicCpu->bmIntrActive);
    535         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8,  pGicCpu->abIntrPriority);
    536 
    537         pHlp->pfnSSMGetU64(pSSM,             &pGicCpu->uIccCtlr);
    538         GIC_SSM_GET_ARRAY(pHlp->pfnSSMGetU8, pGicCpu->abRunningPriorities);
    539         pHlp->pfnSSMGetU8(pSSM,              &pGicCpu->idxRunningPriority);
    540         pHlp->pfnSSMGetU8(pSSM,              &pGicCpu->bInterruptPriority);
    541         pHlp->pfnSSMGetU8(pSSM,              &pGicCpu->bBinaryPtGroup0);
    542         pHlp->pfnSSMGetU8(pSSM,              &pGicCpu->bBinaryPtGroup1);
    543         pHlp->pfnSSMGetBool(pSSM,            &pGicCpu->fIntrGroup0Enabled);
    544         pHlp->pfnSSMGetBool(pSSM,            &pGicCpu->fIntrGroup1Enabled);
     513        /* Redistributor state. */
     514        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrGroup[0],    sizeof(pGicCpu->bmIntrGroup));
     515        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrConfig[0],   sizeof(pGicCpu->bmIntrConfig));
     516        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrEnabled[0],  sizeof(pGicCpu->bmIntrEnabled));
     517        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrPending[0],  sizeof(pGicCpu->bmIntrPending));
     518        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->bmIntrActive[0],   sizeof(pGicCpu->bmIntrActive));
     519        pHlp->pfnSSMGetMem(pSSM, &pGicCpu->abIntrPriority[0], sizeof(pGicCpu->abIntrPriority));
     520
     521        /* ICC system register state. */
     522        pHlp->pfnSSMGetU64(pSSM,  &pGicCpu->uIccCtlr);
     523        pHlp->pfnSSMGetMem(pSSM,  &pGicCpu->abRunningPriorities[0], sizeof(pGicCpu->abRunningPriorities));
     524        pHlp->pfnSSMGetU8(pSSM,   &pGicCpu->idxRunningPriority);
     525        pHlp->pfnSSMGetU8(pSSM,   &pGicCpu->bInterruptPriority);
     526        pHlp->pfnSSMGetU8(pSSM,   &pGicCpu->bBinaryPtGroup0);
     527        pHlp->pfnSSMGetU8(pSSM,   &pGicCpu->bBinaryPtGroup1);
     528        pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup0Enabled);
     529        pHlp->pfnSSMGetBool(pSSM, &pGicCpu->fIntrGroup1Enabled);
    545530    }
    546531
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