VirtualBox

Changeset 108943 in vbox


Ignore:
Timestamp:
Apr 11, 2025 9:04:14 AM (4 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168454
Message:

VMM: Some additions for the ARMv8 PGM testcase, bugref:10388

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllGst-armv8.cpp.h

    r108927 r108943  
    619619    AssertCompile(ARMV8_TCR_EL1_AARCH64_TG0_64KB    == ARMV8_TCR_EL1_AARCH64_TG1_64KB);
    620620
     621    pWalk->GCPtr = GCPtr;
     622
    621623    if RT_CONSTEXPR_IF(a_GranuleSz != ARMV8_TCR_EL1_AARCH64_TG0_INVALID)
    622624    {
     
    733735                {
    734736                    /* Block descriptor. */
    735                     pWalk->GCPtr      = GCPtr;
    736737                    pWalk->fInfo      = PGM_WALKINFO_GIGANTIC_PAGE;
    737738                    pWalk->GCPhys     = (RTGCPHYS)(Desc & fGCPhysLvl1BlockBase) | (GCPtr & offLvl1BlockMask);
     
    763764            {
    764765                /* Block descriptor. */
    765                 pWalk->GCPtr      = GCPtr;
    766766                pWalk->fInfo      = PGM_WALKINFO_BIG_PAGE;
    767767                pWalk->GCPhys     = (RTGCPHYS)(Desc & fGCPhysLvl2BlockBase) | (GCPtr & offLvl2BlockMask);
     
    789789        else return pgmGstWalkFastReturnRsvdError(pVCpu, pWalk, uLvl); /* No block descriptors. */
    790790
    791         pWalk->GCPtr  = GCPtr;
    792791        pWalk->GCPhys = (RTGCPHYS)(Desc & fNextTableOrPageMask) | (GCPtr & offPageMask);
    793792        return pgmGstQueryPageCheckPermissions(pWalk, Desc, fFlags, uLvl);
  • trunk/src/VBox/VMM/testcase/tstPGMAllGst-armv8.cpp

    r108940 r108943  
    921921            BITFIELD_CREATE_BOOL(NotExecutable,       7),
    922922            BITFIELD_CREATE_BOOL(NotAccessibleByMode, 8),
    923             { NULL,     0, 0, NULL }
     923            { "Level",  11, 5, NULL },
     924            { NULL,      0, 0, NULL }
    924925
    925926#undef BITFIELD_CREATE_BOOL
     
    10061007    WalkResult.GCPhysNested = pWalkResult->GCPhysNested;
    10071008    WalkResult.GCPhys       = pWalkResult->GCPhys;
    1008     WalkResult.fFailed      = pWalkResult->fFailed;
    10091009    WalkResult.fEffective   = pWalkResult->fEffective;
    1010     WalkResult.uLevel       = (pWalkResult->fFailed & PGM_WALKFAIL_LEVEL_MASK) >> PGM_WALKFAIL_LEVEL_SHIFT;
    1011     if (pWalkResult->fInfo & PGM_WALKINFO_SUCCEEDED)
    1012         WalkResult.fSucceeded = true;
     1010
    10131011    if (pWalkResult->fInfo & PGM_WALKINFO_IS_SLAT)
    10141012        WalkResult.fIsSlat = true;
     
    10251023    if (pWalkResult->fFailed & PGM_WALKFAIL_BAD_PHYSICAL_ADDRESS)
    10261024        WalkResult.fBadPhysAddr = true;
     1025
     1026    /*
     1027     * QueryPageFast() can return VERR_ACCESS_DENIED, which GetPage() doesn't,
     1028     * so only copy the failed result if GetPage() is expected to fail as well.
     1029     */
     1030    if (RT_FAILURE(rcExpected))
     1031    {         
     1032        WalkResult.fFailed    = pWalkResult->fFailed;
     1033        WalkResult.uLevel     = (pWalkResult->fFailed & PGM_WALKFAIL_LEVEL_MASK) >> PGM_WALKFAIL_LEVEL_SHIFT;
     1034        WalkResult.fSucceeded = false;
     1035    }
     1036    else
     1037        WalkResult.fSucceeded = true;
    10271038
    10281039    /** @todo Incorporate EL (for nested virt and EL3 later on). */
  • trunk/src/VBox/VMM/testcase/tstPGMAllGst-armv8.json

    r108939 r108943  
    5959        {
    6060            0x0:    {                 PhysAddr:             0x1000,             T: 1, V: 1},
     61
    6162            0x1000: { UXN: 0, PXN: 0, PhysAddr: 0x0000c00000000000, AP: 'UPR',  T: 0, V: 1},
     63            0x1008: { UXN: 0, PXN: 0, PhysAddr: 0x0000fffffffff000, AP: 0,      T: 0, V: 0},
     64            0x1010: {                 PhysAddr:             0x2000,             T: 1, V: 1},
     65
     66            0x2000: { UXN: 0, PXN: 0, PhysAddr: 0x0000d00000000000, AP: 'UPR',  T: 0, V: 1},
     67            0x2008: {                 PhysAddr:             0x3000,             T: 1, V: 1},
     68
     69            0x3000: { UXN: 0, PXN: 0, PhysAddr: 0x0000d0d0d0d0d000, AP: 'UPR',  T: 1, V: 1},
     70            0x3008: { UXN: 1, PXN: 1, PhysAddr: 0x0000d0d0d0d0d000, AP: 'UPR',  T: 1, V: 1},
    6271        },
    6372
     
    6776                GCPtr: 0x0,
    6877                Flags: { READ: 1, USER: 1 },
    69                 Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000c00000000000, Info: { Succeeded: 1, GiganticPage: 1}, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
     78                Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000c00000000000,
     79                          Info: { Succeeded: 1, GiganticPage: 1}, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
    7080            },
    7181            {
    7282                GCPtr: 0x0,
    7383                Flags: { EXECUTE: 1, USER: 1 },
    74                 Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000c00000000000, Info: { Succeeded: 1, GiganticPage: 1}, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
    75             }
     84                Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000c00000000000,
     85                          Info: { Succeeded: 1, GiganticPage: 1}, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
     86            },
     87            {
     88                GCPtr: 0x40000000,
     89                Flags: { EXECUTE: 1, USER: 1 },
     90                Result: { rcQueryPageFast: 'VERR_PAGE_TABLE_NOT_PRESENT', rcGetPage: 'VERR_PAGE_TABLE_NOT_PRESENT', GCPhys: 0,
     91                          Info: 0, Failed: { Level: 1, NotPresent: true } , Effective: 0 },
     92            },
     93            {
     94                GCPtr: 0x80000000,
     95                Flags: { EXECUTE: 1, USER: 1 },
     96                Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000d00000000000,
     97                          Info: { Succeeded: 1, BigPage: 1}, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
     98            },
     99            {
     100                GCPtr: 0x80200000,
     101                Flags: { EXECUTE: 1, USER: 1 },
     102                Result: { rcQueryPageFast: 'VINF_SUCCESS', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000d0d0d0d0d000,
     103                          Info: { Succeeded: 1 }, Failed: 0, Effective: { PR: 1, PX: 1, UR: 1, UX: 1} },
     104            },
     105            {
     106                GCPtr: 0x80201000,
     107                Flags: { EXECUTE: 1, USER: 1 },
     108                Result: { rcQueryPageFast: 'VERR_ACCESS_DENIED', rcGetPage: 'VINF_SUCCESS', GCPhys: 0x0000d0d0d0d0d000,
     109                          Info: 0, Failed: { Level: 3, NotExecutable: 1, NotAccessibleByMode: 1}, Effective: { PR: 1, UR: 1 } },
     110            },
    76111        ]
    77112    }
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