Changeset 108943 in vbox
- Timestamp:
- Apr 11, 2025 9:04:14 AM (4 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168454
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllGst-armv8.cpp.h
r108927 r108943 619 619 AssertCompile(ARMV8_TCR_EL1_AARCH64_TG0_64KB == ARMV8_TCR_EL1_AARCH64_TG1_64KB); 620 620 621 pWalk->GCPtr = GCPtr; 622 621 623 if RT_CONSTEXPR_IF(a_GranuleSz != ARMV8_TCR_EL1_AARCH64_TG0_INVALID) 622 624 { … … 733 735 { 734 736 /* Block descriptor. */ 735 pWalk->GCPtr = GCPtr;736 737 pWalk->fInfo = PGM_WALKINFO_GIGANTIC_PAGE; 737 738 pWalk->GCPhys = (RTGCPHYS)(Desc & fGCPhysLvl1BlockBase) | (GCPtr & offLvl1BlockMask); … … 763 764 { 764 765 /* Block descriptor. */ 765 pWalk->GCPtr = GCPtr;766 766 pWalk->fInfo = PGM_WALKINFO_BIG_PAGE; 767 767 pWalk->GCPhys = (RTGCPHYS)(Desc & fGCPhysLvl2BlockBase) | (GCPtr & offLvl2BlockMask); … … 789 789 else return pgmGstWalkFastReturnRsvdError(pVCpu, pWalk, uLvl); /* No block descriptors. */ 790 790 791 pWalk->GCPtr = GCPtr;792 791 pWalk->GCPhys = (RTGCPHYS)(Desc & fNextTableOrPageMask) | (GCPtr & offPageMask); 793 792 return pgmGstQueryPageCheckPermissions(pWalk, Desc, fFlags, uLvl); -
trunk/src/VBox/VMM/testcase/tstPGMAllGst-armv8.cpp
r108940 r108943 921 921 BITFIELD_CREATE_BOOL(NotExecutable, 7), 922 922 BITFIELD_CREATE_BOOL(NotAccessibleByMode, 8), 923 { NULL, 0, 0, NULL } 923 { "Level", 11, 5, NULL }, 924 { NULL, 0, 0, NULL } 924 925 925 926 #undef BITFIELD_CREATE_BOOL … … 1006 1007 WalkResult.GCPhysNested = pWalkResult->GCPhysNested; 1007 1008 WalkResult.GCPhys = pWalkResult->GCPhys; 1008 WalkResult.fFailed = pWalkResult->fFailed;1009 1009 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 1013 1011 if (pWalkResult->fInfo & PGM_WALKINFO_IS_SLAT) 1014 1012 WalkResult.fIsSlat = true; … … 1025 1023 if (pWalkResult->fFailed & PGM_WALKFAIL_BAD_PHYSICAL_ADDRESS) 1026 1024 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; 1027 1038 1028 1039 /** @todo Incorporate EL (for nested virt and EL3 later on). */ -
trunk/src/VBox/VMM/testcase/tstPGMAllGst-armv8.json
r108939 r108943 59 59 { 60 60 0x0: { PhysAddr: 0x1000, T: 1, V: 1}, 61 61 62 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}, 62 71 }, 63 72 … … 67 76 GCPtr: 0x0, 68 77 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} }, 70 80 }, 71 81 { 72 82 GCPtr: 0x0, 73 83 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 }, 76 111 ] 77 112 }
Note:
See TracChangeset
for help on using the changeset viewer.