Changeset 39078 in vbox for trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
- Timestamp:
- Oct 21, 2011 2:18:22 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 74507
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r39038 r39078 1089 1089 1090 1090 # else /* Nested paging, EPT except PGM_GST_TYPE = PROT */ 1091 NOREF(uErr); NOREF(pRegFrame); NOREF(pvFault); 1091 1092 AssertReleaseMsgFailed(("Shw=%d Gst=%d is not implemented!\n", PGM_GST_TYPE, PGM_SHW_TYPE)); 1092 1093 return VERR_INTERNAL_ERROR; … … 1386 1387 #else /* guest real and protected mode */ 1387 1388 /* There's no such thing as InvalidatePage when paging is disabled, so just ignore. */ 1389 NOREF(pVCpu); NOREF(GCPtrPage); 1388 1390 return VINF_SUCCESS; 1389 1391 #endif … … 1400 1402 * @param GCPhysPage Guest physical address (only valid if pShwPage->fDirty is set) 1401 1403 */ 1402 DECLINLINE(void) PGM_BTH_NAME(SyncPageWorkerTrackDeref)(PVMCPU pVCpu, PPGMPOOLPAGE pShwPage, RTHCPHYS HCPhys, uint16_t iPte, RTGCPHYS GCPhysPage) 1404 DECLINLINE(void) PGM_BTH_NAME(SyncPageWorkerTrackDeref)(PVMCPU pVCpu, PPGMPOOLPAGE pShwPage, RTHCPHYS HCPhys, uint16_t iPte, 1405 RTGCPHYS GCPhysPage) 1403 1406 { 1404 1407 PVM pVM = pVCpu->CTX_SUFF(pVM); … … 1423 1426 return; 1424 1427 } 1428 # else 1429 NOREF(GCPhysPage); 1425 1430 # endif 1426 1431 … … 1515 1520 DECLINLINE(void) PGM_BTH_NAME(SyncHandlerPte)(PVM pVM, PCPGMPAGE pPage, uint64_t fPteSrc, PSHWPTE pPteDst) 1516 1521 { 1522 NOREF(pVM); 1517 1523 /** @todo r=bird: Are we actually handling dirty and access bits for pages with access handlers correctly? No. 1518 1524 * Update: \#PF should deal with this before or after calling the handlers. It has all the info to do the job efficiently. */ … … 2156 2162 && (PGM_SHW_TYPE != PGM_TYPE_EPT || PGM_GST_TYPE == PGM_TYPE_PROT) \ 2157 2163 && !defined(IN_RC) 2164 NOREF(PdeSrc); 2158 2165 2159 2166 # ifdef PGM_SYNC_N_PAGES … … 2267 2274 2268 2275 #else 2276 NOREF(PdeSrc); 2269 2277 AssertReleaseMsgFailed(("Shw=%d Gst=%d is not implemented!\n", PGM_GST_TYPE, PGM_SHW_TYPE)); 2270 2278 return VERR_INTERNAL_ERROR; … … 2353 2361 * @param GCPtrPage Guest context page address. 2354 2362 */ 2355 static int PGM_BTH_NAME(CheckDirtyPageFault)(PVMCPU pVCpu, uint32_t uErr, PSHWPDE pPdeDst, GSTPDE const *pPdeSrc, RTGCPTR GCPtrPage) 2363 static int PGM_BTH_NAME(CheckDirtyPageFault)(PVMCPU pVCpu, uint32_t uErr, PSHWPDE pPdeDst, GSTPDE const *pPdeSrc, 2364 RTGCPTR GCPtrPage) 2356 2365 { 2357 2366 PVM pVM = pVCpu->CTX_SUFF(pVM); 2358 2367 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 2368 NOREF(uErr); 2359 2369 2360 2370 PGM_LOCK_ASSERT_OWNER(pVM); … … 3008 3018 && (PGM_SHW_TYPE != PGM_TYPE_EPT || PGM_GST_TYPE == PGM_TYPE_PROT) \ 3009 3019 && !defined(IN_RC) 3020 NOREF(iPDSrc); NOREF(pPDSrc); 3010 3021 3011 3022 STAM_PROFILE_START(&pVCpu->pgm.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a); … … 3206 3217 3207 3218 #else 3219 NOREF(iPDSrc); NOREF(pPDSrc); 3208 3220 AssertReleaseMsgFailed(("Shw=%d Gst=%d is not implemented!\n", PGM_SHW_TYPE, PGM_GST_TYPE)); 3209 3221 return VERR_INTERNAL_ERROR; … … 3346 3358 3347 3359 #elif PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT 3360 NOREF(pVCpu); NOREF(GCPtrPage); 3348 3361 return VINF_SUCCESS; /* ignore */ 3349 3362 #else … … 3558 3571 { 3559 3572 PVM pVM = pVCpu->CTX_SUFF(pVM); NOREF(pVM); 3560 3561 LogFlow(("SyncCR3 fGlobal=%d\n", !!VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3))); 3573 NOREF(cr0); NOREF(cr3); NOREF(cr4); NOREF(fGlobal); 3574 3575 LogFlow(("SyncCR3 FF=%d fGlobal=%d\n", !!VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3), fGlobal)); 3562 3576 3563 3577 #if PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT … … 3647 3661 PGM_BTH_DECL(unsigned, AssertCR3)(PVMCPU pVCpu, uint64_t cr3, uint64_t cr4, RTGCPTR GCPtr, RTGCPTR cb) 3648 3662 { 3663 NOREF(pVCpu); NOREF(cr3); NOREF(cr4); NOREF(GCPtr); NOREF(cb); 3649 3664 #if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT 3650 3665 return 0; … … 3654 3669 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); NOREF(pPool); 3655 3670 3656 # if PGM_GST_TYPE == PGM_TYPE_PAE3671 # if PGM_GST_TYPE == PGM_TYPE_PAE 3657 3672 /** @todo currently broken; crashes below somewhere */ 3658 3673 AssertFailed(); 3659 # endif3660 3661 # ifPGM_GST_TYPE == PGM_TYPE_32BIT \3674 # endif 3675 3676 # if PGM_GST_TYPE == PGM_TYPE_32BIT \ 3662 3677 || PGM_GST_TYPE == PGM_TYPE_PAE \ 3663 3678 || PGM_GST_TYPE == PGM_TYPE_AMD64 … … 3667 3682 RTGCPHYS GCPhysGst; /* page address derived from the guest page tables. */ 3668 3683 RTHCPHYS HCPhysShw; /* page address derived from the shadow page tables. */ 3669 # ifndef IN_RING03684 # ifndef IN_RING0 3670 3685 RTHCPHYS HCPhys; /* general usage. */ 3671 # endif3686 # endif 3672 3687 int rc; 3673 3688 … … 3678 3693 ("Invalid GCPhysCR3=%RGp cr3=%RGp\n", pPGM->GCPhysCR3, (RTGCPHYS)cr3), 3679 3694 false); 3680 # if !defined(IN_RING0) && PGM_GST_TYPE != PGM_TYPE_AMD643681 # if PGM_GST_TYPE == PGM_TYPE_32BIT3695 # if !defined(IN_RING0) && PGM_GST_TYPE != PGM_TYPE_AMD64 3696 # if PGM_GST_TYPE == PGM_TYPE_32BIT 3682 3697 rc = PGMShwGetPage(pVCpu, (RTRCUINTPTR)pPGM->pGst32BitPdRC, NULL, &HCPhysShw); 3683 # else3698 # else 3684 3699 rc = PGMShwGetPage(pVCpu, (RTRCUINTPTR)pPGM->pGstPaePdptRC, NULL, &HCPhysShw); 3685 # endif3700 # endif 3686 3701 AssertRCReturn(rc, 1); 3687 3702 HCPhys = NIL_RTHCPHYS; 3688 3703 rc = pgmRamGCPhys2HCPhys(pVM, cr3 & GST_CR3_PAGE_MASK, &HCPhys); 3689 3704 AssertMsgReturn(HCPhys == HCPhysShw, ("HCPhys=%RHp HCPhyswShw=%RHp (cr3)\n", HCPhys, HCPhysShw), false); 3690 # if PGM_GST_TYPE == PGM_TYPE_32BIT && defined(IN_RING3)3705 # if PGM_GST_TYPE == PGM_TYPE_32BIT && defined(IN_RING3) 3691 3706 pgmGstGet32bitPDPtr(pVCpu); 3692 3707 RTGCPHYS GCPhys; … … 3694 3709 AssertRCReturn(rc, 1); 3695 3710 AssertMsgReturn((cr3 & GST_CR3_PAGE_MASK) == GCPhys, ("GCPhys=%RGp cr3=%RGp\n", GCPhys, (RTGCPHYS)cr3), false); 3696 # endif3697 # endif /* !IN_RING0 */3711 # endif 3712 # endif /* !IN_RING0 */ 3698 3713 3699 3714 /* 3700 3715 * Get and check the Shadow CR3. 3701 3716 */ 3702 # if PGM_SHW_TYPE == PGM_TYPE_32BIT3717 # if PGM_SHW_TYPE == PGM_TYPE_32BIT 3703 3718 unsigned cPDEs = X86_PG_ENTRIES; 3704 3719 unsigned cIncrement = X86_PG_ENTRIES * PAGE_SIZE; 3705 # elif PGM_SHW_TYPE == PGM_TYPE_PAE3706 # if PGM_GST_TYPE == PGM_TYPE_32BIT3720 # elif PGM_SHW_TYPE == PGM_TYPE_PAE 3721 # if PGM_GST_TYPE == PGM_TYPE_32BIT 3707 3722 unsigned cPDEs = X86_PG_PAE_ENTRIES * 4; /* treat it as a 2048 entry table. */ 3708 # else3723 # else 3709 3724 unsigned cPDEs = X86_PG_PAE_ENTRIES; 3710 # endif3725 # endif 3711 3726 unsigned cIncrement = X86_PG_PAE_ENTRIES * PAGE_SIZE; 3712 # elif PGM_SHW_TYPE == PGM_TYPE_AMD643727 # elif PGM_SHW_TYPE == PGM_TYPE_AMD64 3713 3728 unsigned cPDEs = X86_PG_PAE_ENTRIES; 3714 3729 unsigned cIncrement = X86_PG_PAE_ENTRIES * PAGE_SIZE; 3715 # endif3730 # endif 3716 3731 if (cb != ~(RTGCPTR)0) 3717 3732 cPDEs = RT_MIN(cb >> SHW_PD_SHIFT, 1); … … 3719 3734 /** @todo call the other two PGMAssert*() functions. */ 3720 3735 3721 # if PGM_GST_TYPE == PGM_TYPE_AMD643736 # if PGM_GST_TYPE == PGM_TYPE_AMD64 3722 3737 unsigned iPml4 = (GCPtr >> X86_PML4_SHIFT) & X86_PML4_MASK; 3723 3738 … … 3767 3782 continue; 3768 3783 } 3769 # else /* PGM_GST_TYPE != PGM_TYPE_AMD64 */3770 { 3771 # endif /* PGM_GST_TYPE != PGM_TYPE_AMD64 */3772 3773 # if PGM_GST_TYPE == PGM_TYPE_AMD64 || PGM_GST_TYPE == PGM_TYPE_PAE3784 # else /* PGM_GST_TYPE != PGM_TYPE_AMD64 */ 3785 { 3786 # endif /* PGM_GST_TYPE != PGM_TYPE_AMD64 */ 3787 3788 # if PGM_GST_TYPE == PGM_TYPE_AMD64 || PGM_GST_TYPE == PGM_TYPE_PAE 3774 3789 /* 3775 3790 * Check the PDPTEs too. … … 3785 3800 X86PDPE PdpeSrc; 3786 3801 PdpeSrc.u = 0; /* initialized to shut up gcc 4.5 */ 3787 # if PGM_GST_TYPE == PGM_TYPE_PAE3802 # if PGM_GST_TYPE == PGM_TYPE_PAE 3788 3803 PGSTPD pPDSrc = pgmGstGetPaePDPtr(pVCpu, GCPtr, &iPDSrc, &PdpeSrc); 3789 3804 PX86PDPT pPdptDst = pgmShwGetPaePDPTPtr(pVCpu); 3790 # else3805 # else 3791 3806 PX86PML4E pPml4eSrcIgn; 3792 3807 PX86PDPT pPdptDst; … … 3802 3817 } 3803 3818 Assert(pPDDst); 3804 # endif3819 # endif 3805 3820 Assert(iPDSrc == 0); 3806 3821 … … 3826 3841 if (GCPhysPdeSrc != pShwPde->GCPhys) 3827 3842 { 3828 # if PGM_GST_TYPE == PGM_TYPE_AMD643843 # if PGM_GST_TYPE == PGM_TYPE_AMD64 3829 3844 AssertMsgFailed(("Physical address doesn't match! iPml4 %d iPdpt %d pPdpeDst.u=%#RX64 pPdpeSrc.u=%RX64 Phys %RX64 vs %RX64\n", iPml4, iPdpt, pPdpeDst->u, PdpeSrc.u, pShwPde->GCPhys, GCPhysPdeSrc)); 3830 # else3845 # else 3831 3846 AssertMsgFailed(("Physical address doesn't match! iPdpt %d pPdpeDst.u=%#RX64 pPdpeSrc.u=%RX64 Phys %RX64 vs %RX64\n", iPdpt, pPdpeDst->u, PdpeSrc.u, pShwPde->GCPhys, GCPhysPdeSrc)); 3832 # endif3847 # endif 3833 3848 GCPtr += 512 * _2M; 3834 3849 cErrors++; … … 3836 3851 } 3837 3852 3838 # if PGM_GST_TYPE == PGM_TYPE_AMD643853 # if PGM_GST_TYPE == PGM_TYPE_AMD64 3839 3854 if ( pPdpeDst->lm.u1User != PdpeSrc.lm.u1User 3840 3855 || pPdpeDst->lm.u1Write != PdpeSrc.lm.u1Write … … 3846 3861 continue; 3847 3862 } 3848 # endif3849 3850 # else /* PGM_GST_TYPE != PGM_TYPE_AMD64 && PGM_GST_TYPE != PGM_TYPE_PAE */3851 { 3852 # endif /* PGM_GST_TYPE != PGM_TYPE_AMD64 && PGM_GST_TYPE != PGM_TYPE_PAE */3853 # if PGM_GST_TYPE == PGM_TYPE_32BIT3863 # endif 3864 3865 # else /* PGM_GST_TYPE != PGM_TYPE_AMD64 && PGM_GST_TYPE != PGM_TYPE_PAE */ 3866 { 3867 # endif /* PGM_GST_TYPE != PGM_TYPE_AMD64 && PGM_GST_TYPE != PGM_TYPE_PAE */ 3868 # if PGM_GST_TYPE == PGM_TYPE_32BIT 3854 3869 GSTPD const *pPDSrc = pgmGstGet32bitPDPtr(pVCpu); 3855 # if PGM_SHW_TYPE == PGM_TYPE_32BIT3870 # if PGM_SHW_TYPE == PGM_TYPE_32BIT 3856 3871 PCX86PD pPDDst = pgmShwGet32BitPDPtr(pVCpu); 3857 # endif3858 # endif /* PGM_GST_TYPE == PGM_TYPE_32BIT */3872 # endif 3873 # endif /* PGM_GST_TYPE == PGM_TYPE_32BIT */ 3859 3874 /* 3860 3875 * Iterate the shadow page directory. … … 3867 3882 iPDDst++, GCPtr += cIncrement) 3868 3883 { 3869 # if PGM_SHW_TYPE == PGM_TYPE_PAE3884 # if PGM_SHW_TYPE == PGM_TYPE_PAE 3870 3885 const SHWPDE PdeDst = *pgmShwGetPaePDEPtr(pVCpu, GCPtr); 3871 # else3886 # else 3872 3887 const SHWPDE PdeDst = pPDDst->a[iPDDst]; 3873 # endif3888 # endif 3874 3889 if (PdeDst.u & PGM_PDFLAGS_MAPPING) 3875 3890 { … … 3924 3939 { 3925 3940 GCPhysGst = GST_GET_PDE_GCPHYS(PdeSrc); 3926 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT3941 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT 3927 3942 GCPhysGst |= (iPDDst & 1) * (PAGE_SIZE / 2); 3928 # endif3943 # endif 3929 3944 } 3930 3945 else 3931 3946 { 3932 # if PGM_GST_TYPE == PGM_TYPE_32BIT3947 # if PGM_GST_TYPE == PGM_TYPE_32BIT 3933 3948 if (PdeSrc.u & X86_PDE4M_PG_HIGH_MASK) 3934 3949 { … … 3938 3953 continue; 3939 3954 } 3940 # endif3955 # endif 3941 3956 GCPhysGst = GST_GET_BIG_PDE_GCPHYS(pVM, PdeSrc); 3942 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT3957 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT 3943 3958 GCPhysGst |= GCPtr & RT_BIT(X86_PAGE_2M_SHIFT); 3944 # endif3959 # endif 3945 3960 } 3946 3961 … … 4004 4019 4005 4020 /* iterate the page table. */ 4006 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT4021 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT 4007 4022 /* Select the right PDE as we're emulating a 4kb page table with 2 shadow page tables. */ 4008 4023 const unsigned offPTSrc = ((GCPtr >> SHW_PD_SHIFT) & 1) * 512; 4009 # else4024 # else 4010 4025 const unsigned offPTSrc = 0; 4011 # endif4026 # endif 4012 4027 for (unsigned iPT = 0, off = 0; 4013 4028 iPT < RT_ELEMENTS(pPTDst->a); … … 4024 4039 if (!PteSrc.n.u1Present) 4025 4040 { 4026 # ifdef IN_RING34041 # ifdef IN_RING3 4027 4042 PGMAssertHandlerAndFlagsInSync(pVM); 4028 4043 DBGFR3PagingDumpEx(pVM, pVCpu->idCpu, DBGFPGDMP_FLAGS_CURRENT_CR3 | DBGFPGDMP_FLAGS_CURRENT_MODE 4029 4044 | DBGFPGDMP_FLAGS_GUEST | DBGFPGDMP_FLAGS_HEADER | DBGFPGDMP_FLAGS_PRINT_CR3, 4030 4045 0, 0, UINT64_MAX, 99, NULL); 4031 # endif4046 # endif 4032 4047 AssertMsgFailed(("Out of sync (!P) PTE at %RGv! PteSrc=%#RX64 PteDst=%#RX64 pPTSrc=%RGv iPTSrc=%x PdeSrc=%x physpte=%RGp\n", 4033 4048 GCPtr + off, (uint64_t)PteSrc.u, SHW_PTE_LOG64(PteDst), pPTSrc, iPT + offPTSrc, PdeSrc.au32[0], … … 4038 4053 4039 4054 uint64_t fIgnoreFlags = GST_PTE_PG_MASK | X86_PTE_AVL_MASK | X86_PTE_G | X86_PTE_D | X86_PTE_PWT | X86_PTE_PCD | X86_PTE_PAT; 4040 # if 1 /** @todo sync accessed bit properly... */4055 # if 1 /** @todo sync accessed bit properly... */ 4041 4056 fIgnoreFlags |= X86_PTE_A; 4042 # endif4057 # endif 4043 4058 4044 4059 /* match the physical addresses */ … … 4046 4061 GCPhysGst = GST_GET_PTE_GCPHYS(PteSrc); 4047 4062 4048 # ifdef IN_RING34063 # ifdef IN_RING3 4049 4064 rc = PGMPhysGCPhys2HCPhys(pVM, GCPhysGst, &HCPhys); 4050 4065 if (RT_FAILURE(rc)) … … 4065 4080 continue; 4066 4081 } 4067 # endif4082 # endif 4068 4083 4069 4084 pPhysPage = pgmPhysGetPage(pVM, GCPhysGst); 4070 4085 if (!pPhysPage) 4071 4086 { 4072 # ifdef IN_RING3 /** @todo make MMR3PageDummyHCPhys an 'All' function! */4087 # ifdef IN_RING3 /** @todo make MMR3PageDummyHCPhys an 'All' function! */ 4073 4088 if (HCPhysShw != MMR3PageDummyHCPhys(pVM)) /** @todo this is wrong. */ 4074 4089 { … … 4078 4093 continue; 4079 4094 } 4080 # endif4095 # endif 4081 4096 if (SHW_PTE_IS_RW(PteDst)) 4082 4097 { … … 4112 4127 { 4113 4128 if ( SHW_PTE_IS_P(PteDst) 4114 # if PGM_SHW_TYPE == PGM_TYPE_EPT || PGM_SHW_TYPE == PGM_TYPE_PAE || PGM_SHW_TYPE == PGM_TYPE_AMD644129 # if PGM_SHW_TYPE == PGM_TYPE_EPT || PGM_SHW_TYPE == PGM_TYPE_PAE || PGM_SHW_TYPE == PGM_TYPE_AMD64 4115 4130 && !PGM_PAGE_IS_MMIO(pPhysPage) 4116 # endif4131 # endif 4117 4132 ) 4118 4133 { … … 4149 4164 cErrors++; 4150 4165 } 4151 # if 0 /** @todo sync access bit properly... */4166 # if 0 /** @todo sync access bit properly... */ 4152 4167 if (PteDst.n.u1Accessed != PteSrc.n.u1Accessed) 4153 4168 { … … 4157 4172 } 4158 4173 fIgnoreFlags |= X86_PTE_RW; 4159 # else4174 # else 4160 4175 fIgnoreFlags |= X86_PTE_RW | X86_PTE_A; 4161 # endif4176 # endif 4162 4177 } 4163 4178 else if (SHW_PTE_IS_TRACK_DIRTY(PteDst)) … … 4179 4194 fIgnoreFlags |= X86_PTE_P; 4180 4195 } 4181 # ifdef DEBUG_sandervl4196 # ifdef DEBUG_sandervl 4182 4197 fIgnoreFlags |= X86_PTE_D | X86_PTE_A; 4183 # endif4198 # endif 4184 4199 } 4185 4200 … … 4218 4233 continue; 4219 4234 } 4220 # if 0 /** @todo sync access bit properly... */4235 # if 0 /** @todo sync access bit properly... */ 4221 4236 if (PdeDst.n.u1Accessed != PdeSrc.b.u1Accessed) 4222 4237 { … … 4226 4241 } 4227 4242 fIgnoreFlags |= X86_PTE_RW; 4228 # else4243 # else 4229 4244 fIgnoreFlags |= X86_PTE_RW | X86_PTE_A; 4230 # endif4245 # endif 4231 4246 } 4232 4247 else if (PdeDst.u & PGM_PDFLAGS_TRACK_DIRTY) … … 4280 4295 HCPhysShw = SHW_PTE_GET_HCPHYS(PteDst); 4281 4296 4282 # ifdef IN_RING34297 # ifdef IN_RING3 4283 4298 rc = PGMPhysGCPhys2HCPhys(pVM, GCPhysGst, &HCPhys); 4284 4299 if (RT_FAILURE(rc)) … … 4298 4313 continue; 4299 4314 } 4300 # endif4315 # endif 4301 4316 pPhysPage = pgmPhysGetPage(pVM, GCPhysGst); 4302 4317 if (!pPhysPage) 4303 4318 { 4304 # ifdef IN_RING3 /** @todo make MMR3PageDummyHCPhys an 'All' function! */4319 # ifdef IN_RING3 /** @todo make MMR3PageDummyHCPhys an 'All' function! */ 4305 4320 if (HCPhysShw != MMR3PageDummyHCPhys(pVM)) /** @todo this is wrong. */ 4306 4321 { … … 4310 4325 continue; 4311 4326 } 4312 # endif4327 # endif 4313 4328 if (SHW_PTE_IS_RW(PteDst)) 4314 4329 { … … 4347 4362 { 4348 4363 if ( SHW_PTE_IS_P(PteDst) 4349 # if PGM_SHW_TYPE == PGM_TYPE_EPT || PGM_SHW_TYPE == PGM_TYPE_PAE || PGM_SHW_TYPE == PGM_TYPE_AMD644364 # if PGM_SHW_TYPE == PGM_TYPE_EPT || PGM_SHW_TYPE == PGM_TYPE_PAE || PGM_SHW_TYPE == PGM_TYPE_AMD64 4350 4365 && !PGM_PAGE_IS_MMIO(pPhysPage) 4351 # endif4366 # endif 4352 4367 ) 4353 4368 { … … 4382 4397 } /* for each PML4E */ 4383 4398 4384 # ifdef DEBUG4399 # ifdef DEBUG 4385 4400 if (cErrors) 4386 4401 LogFlow(("AssertCR3: cErrors=%d\n", cErrors)); 4387 # endif 4388 4389 #endif /* GST == 32BIT, PAE or AMD64 */ 4402 # endif 4403 # endif /* GST is in {32BIT, PAE, AMD64} */ 4390 4404 return cErrors; 4391 4392 4405 #endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT */ 4393 4406 } … … 4619 4632 } 4620 4633 pgmUnlock(pVM); 4634 # else 4635 NOREF(GCPhysCR3); 4621 4636 # endif 4622 4637
Note:
See TracChangeset
for help on using the changeset viewer.