VirtualBox

Changeset 108833 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Apr 3, 2025 8:16:02 AM (5 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168281
Message:

VMM/GIC: bugref:10877 GITS command-queue thread, work-in-progress.

File:
1 edited

Legend:

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

    r108830 r108833  
    110110{
    111111    Assert(cb == 4 || cb == 8);
     112    Assert(!(offReg & 3));
    112113    RT_NOREF(cb);
    113114
     
    200201    }
    201202
    202     Log4Func(("offReg=%#RX16 (%s) uReg=%#RX64\n", offReg, gitsGetCtrlRegDescription(offReg), uReg));
     203    Log4Func(("offReg=%#RX16 (%s) uReg=%#RX64 [%u-bit]\n", offReg, gitsGetCtrlRegDescription(offReg), uReg, cb << 3));
    203204    return uReg;
    204205}
     
    208209{
    209210    Assert(cb == 8 || cb == 4);
     211    Assert(!(offReg & 3));
    210212    RT_NOREF(pGitsDev, cb);
    211213
    212214    uint64_t uReg = 0;
    213     AssertReleaseMsgFailed(("offReg=%#x (%s) uReg=%#RX64\n", offReg,  gitsGetTranslationRegDescription(offReg), uReg));
     215    AssertReleaseMsgFailed(("offReg=%#x (%s) uReg=%#RX64 [%u-bit]\n", offReg, gitsGetTranslationRegDescription(offReg), uReg, cb << 3));
    214216    return uReg;
    215217}
     
    218220DECL_HIDDEN_CALLBACK(void) gitsMmioWriteCtrl(PGITSDEV pGitsDev, uint16_t offReg, uint64_t uValue, unsigned cb)
    219221{
     222    Assert(cb == 8 || cb == 4);
     223    Assert(!(offReg & 3));
     224
    220225    /*
    221226     * GITS_BASER<n>.
     
    274279    }
    275280
    276     Log4Func(("offReg=%#RX16 (%s) uValue=%#RX32\n", offReg, gitsGetCtrlRegDescription(offReg), uValue));
     281    Log4Func(("offReg=%#RX16 (%s) uValue=%#RX32 [%u-bit]\n", offReg, gitsGetCtrlRegDescription(offReg), uValue, cb << 3));
    277282}
    278283
     
    281286{
    282287    RT_NOREF(pGitsDev);
    283     AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX64 [%-bit]\n", offReg, uValue, cb == 8 ? "64" : "32"));
     288    Assert(cb == 8 || cb == 4);
     289    Assert(!(offReg & 3));
     290    AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX64 [%u-bit]\n", offReg, uValue, cb << 3));
    284291}
    285292
     
    288295{
    289296    Log4Func(("\n"));
    290     pGitsDev->fEnabled              = false;
    291     pGitsDev->fUnmappedMsiReporting = false;
    292     pGitsDev->fQuiescent            = true;
     297    pGitsDev->fEnabled           = false;
     298    pGitsDev->fUnmappedMsiReport = false;
     299    pGitsDev->fQuiescent         = true;
    293300    RT_ZERO(pGitsDev->aItsTableRegs);
    294     pGitsDev->uCmdBaseReg.u         = 0;
    295     pGitsDev->uCmdReadReg           = 0;
    296     pGitsDev->uCmdWriteReg          = 0;
     301    pGitsDev->uCmdBaseReg.u      = 0;
     302    pGitsDev->uCmdReadReg        = 0;
     303    pGitsDev->uCmdWriteReg       = 0;
    297304}
    298305
     
    304311
    305312    pHlp->pfnPrintf(pHlp, "GIC ITS:\n");
    306     pHlp->pfnPrintf(pHlp, "  uArchRev              = %u\n",      pGitsDev->uArchRev);
    307     pHlp->pfnPrintf(pHlp, "  fEnabled              = %RTbool\n", pGitsDev->fEnabled);
    308     pHlp->pfnPrintf(pHlp, "  fUnmappedMsiReporting = %RTbool\n", pGitsDev->fUnmappedMsiReporting);
    309     pHlp->pfnPrintf(pHlp, "  fQuiescent            = %RTbool\n", pGitsDev->fQuiescent);
     313    pHlp->pfnPrintf(pHlp, "  uArchRev           = %u\n",      pGitsDev->uArchRev);
     314    pHlp->pfnPrintf(pHlp, "  fEnabled           = %RTbool\n", pGitsDev->fEnabled);
     315    pHlp->pfnPrintf(pHlp, "  fUnmappedMsiReport = %RTbool\n", pGitsDev->fUnmappedMsiReport);
     316    pHlp->pfnPrintf(pHlp, "  fQuiescent         = %RTbool\n", pGitsDev->fQuiescent);
    310317
    311318    /* GITS_BASER<n>. */
     
    323330        uint8_t const  idxType     = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_TYPE);
    324331        const char *pszType        = s_apszType[idxType];
    325         pHlp->pfnPrintf(pHlp, "  aItsTableReg[%u]      = %#RX64\n", i, uReg);
    326         pHlp->pfnPrintf(pHlp, "    Size                  = %#x (pages=%u total=%.Rhcb)\n", uSize, cPages, cbItsTable);
    327         pHlp->pfnPrintf(pHlp, "    Page size             = %#x (%.Rhcb)\n", idxPageSize, s_acbPageSize[idxPageSize]);
    328         pHlp->pfnPrintf(pHlp, "    Shareability          = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY));
    329         pHlp->pfnPrintf(pHlp, "    Phys addr             = %#RX64\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK);
    330         pHlp->pfnPrintf(pHlp, "    Entry size            = %#x (%u bytes)\n", uEntrySize, uEntrySize > 0 ? uEntrySize + 1 : 0);
    331         pHlp->pfnPrintf(pHlp, "    Outer cache           = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE));
    332         pHlp->pfnPrintf(pHlp, "    Type                  = %#x %s\n", idxType, pszType);
    333         pHlp->pfnPrintf(pHlp, "    Inner cache           = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE));
    334         pHlp->pfnPrintf(pHlp, "    Indirect              = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT)));
    335         pHlp->pfnPrintf(pHlp, "    Valid                 = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID)));
     332        pHlp->pfnPrintf(pHlp, "  aItsTableReg[%u]    = %#RX64\n", i, uReg);
     333        pHlp->pfnPrintf(pHlp, "    Size               = %#x (pages=%u total=%.Rhcb)\n", uSize, cPages, cbItsTable);
     334        pHlp->pfnPrintf(pHlp, "    Page size          = %#x (%.Rhcb)\n", idxPageSize, s_acbPageSize[idxPageSize]);
     335        pHlp->pfnPrintf(pHlp, "    Shareability       = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY));
     336        pHlp->pfnPrintf(pHlp, "    Phys addr          = %#RX64\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK);
     337        pHlp->pfnPrintf(pHlp, "    Entry size         = %#x (%u bytes)\n", uEntrySize, uEntrySize > 0 ? uEntrySize + 1 : 0);
     338        pHlp->pfnPrintf(pHlp, "    Outer cache        = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE));
     339        pHlp->pfnPrintf(pHlp, "    Type               = %#x (%s)\n", idxType, pszType);
     340        pHlp->pfnPrintf(pHlp, "    Inner cache        = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE));
     341        pHlp->pfnPrintf(pHlp, "    Indirect           = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT)));
     342        pHlp->pfnPrintf(pHlp, "    Valid              = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID)));
    336343    }
    337344
     
    341348        uint8_t const uSize   = RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SIZE);
    342349        uint16_t const cPages = uSize > 0 ? uSize + 1 : 0;
    343         pHlp->pfnPrintf(pHlp, "  uCmdBaseReg           = %#RX64\n", uReg);
    344         pHlp->pfnPrintf(pHlp, "    Size                  = %#x (pages=%u total=%.Rhcb)\n", uSize, cPages, _4K * cPages);
    345         pHlp->pfnPrintf(pHlp, "    Shareability          = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SHAREABILITY));
    346         pHlp->pfnPrintf(pHlp, "    Phys addr             = %#RX64\n",   uReg & GITS_BF_CTRL_REG_CBASER_PHYS_ADDR_MASK);
    347         pHlp->pfnPrintf(pHlp, "    Outer cache           = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_OUTER_CACHE));
    348         pHlp->pfnPrintf(pHlp, "    Inner cache           = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_INNER_CACHE));
    349         pHlp->pfnPrintf(pHlp, "    Valid                 = %RTbool\n",  RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_VALID));
     350        pHlp->pfnPrintf(pHlp, "  uCmdBaseReg        = %#RX64\n", uReg);
     351        pHlp->pfnPrintf(pHlp, "    Size               = %#x (pages=%u total=%.Rhcb)\n", uSize, cPages, _4K * cPages);
     352        pHlp->pfnPrintf(pHlp, "    Shareability       = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SHAREABILITY));
     353        pHlp->pfnPrintf(pHlp, "    Phys addr          = %#RX64\n",   uReg & GITS_BF_CTRL_REG_CBASER_PHYS_ADDR_MASK);
     354        pHlp->pfnPrintf(pHlp, "    Outer cache        = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_OUTER_CACHE));
     355        pHlp->pfnPrintf(pHlp, "    Inner cache        = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_INNER_CACHE));
     356        pHlp->pfnPrintf(pHlp, "    Valid              = %RTbool\n",  RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_VALID));
    350357    }
    351358
     
    353360    {
    354361        uint32_t const uReg = pGitsDev->uCmdReadReg;
    355         pHlp->pfnPrintf(pHlp, "  uCmdReadReg           = 0x%05RX32 (stalled=%RTbool offset=%RU32)\n", uReg,
     362        pHlp->pfnPrintf(pHlp, "  uCmdReadReg        = 0x%05RX32 (stalled=%RTbool offset=%RU32)\n", uReg,
    356363                        RT_BF_GET(uReg, GITS_BF_CTRL_REG_CREADR_STALLED), uReg & GITS_BF_CTRL_REG_CREADR_OFFSET_MASK);
    357364    }
     
    360367    {
    361368        uint32_t const uReg = pGitsDev->uCmdWriteReg;
    362         pHlp->pfnPrintf(pHlp, "  uCmdWriteReg          = 0x%05RX32 (  retry=%RTbool offset=%RU32)\n", uReg,
     369        pHlp->pfnPrintf(pHlp, "  uCmdWriteReg       = 0x%05RX32 (  retry=%RTbool offset=%RU32)\n", uReg,
    363370                        RT_BF_GET(uReg, GITS_BF_CTRL_REG_CWRITER_RETRY), uReg & GITS_BF_CTRL_REG_CWRITER_OFFSET_MASK);
    364371    }
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