PGMAllShw.h revision 4a33af43d9d1a46f9c239af3fc8ce6d72f289538
5b281ba489ca18f0380d7efc7a5108b606cce449vboxsync * VBox - Page Manager, Shadow Paging Template - All context code.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006-2010 Oracle Corporation
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * available from http://www.virtualbox.org. This file is free software;
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync/*******************************************************************************
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync* Defined Constants And Macros *
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync*******************************************************************************/
8e034cd2a6b0c86697554278e970163287003bb9vboxsync# define SHW_PTE_IS_P_RW(Pte) ( (Pte).n.u1Present && (Pte).n.u1Write )
8e034cd2a6b0c86697554278e970163287003bb9vboxsync# define SHW_PTE_IS_TRACK_DIRTY(Pte) ( !!((Pte).u & PGM_PTFLAGS_TRACK_DIRTY) )
2c203bb219df5391ed7f3888c85e12a4e47817davboxsync# define SHW_PTE_GET_HCPHYS(Pte) ( (Pte).u & X86_PTE_PG_MASK )
29bdc01040c07a3dd482a94a2cb8f0a90f8587a7vboxsync# define SHW_PTE_GET_U(Pte) ( (Pte).u ) /**< Use with care. */
# define SHW_POOL_ROOT_IDX PGMPOOL_IDX_NESTED_ROOT /* do not use! exception is real mode & protected mode without paging. */
PGM_SHW_DECL(int, ModifyPage)(PVMCPU pVCpu, RTGCUINTPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask, uint32_t fOpFlags);
return VERR_PAGE_TABLE_NOT_PRESENT;
return VERR_PAGE_TABLE_NOT_PRESENT;
return rc;
return VERR_PAGE_TABLE_NOT_PRESENT;
return rc;
if (rc != VINF_SUCCESS) /** @todo this function isn't expected to return informational status codes. Check callers / fix. */
return rc;
return VERR_PAGE_TABLE_NOT_PRESENT;
if (pfFlags)
# if PGM_WITH_NX(PGM_SHW_TYPE, PGM_SHW_TYPE) /** @todo why do we have to check the guest state here? */
if (pHCPhys)
*pHCPhys = (Pde.u & SHW_PDE_PG_MASK) + (GCPtr & (RT_BIT(SHW_PD_SHIFT) - 1) & X86_PAGE_4K_BASE_MASK);
return VINF_SUCCESS;
return rc2;
return VERR_PAGE_NOT_PRESENT;
if (pfFlags)
# if PGM_WITH_NX(PGM_SHW_TYPE, PGM_SHW_TYPE) /** @todo why do we have to check the guest state here? */
if (pHCPhys)
return VINF_SUCCESS;
PGM_SHW_DECL(int, ModifyPage)(PVMCPU pVCpu, RTGCUINTPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask, uint32_t fOpFlags)
return VERR_PAGE_TABLE_NOT_PRESENT;
int rc;
return VERR_PAGE_TABLE_NOT_PRESENT;
return rc;
return VERR_PAGE_TABLE_NOT_PRESENT;
return rc;
return rc;
return VERR_PAGE_TABLE_NOT_PRESENT;
return rc;
SHW_PTE_SET(NewPte, (SHW_PTE_GET_U(OrgPte) & (fMask | SHW_PTE_PG_MASK)) | (fFlags & ~SHW_PTE_PG_MASK));
AssertFailed();
if (pPage)
Log(("%s: pgmPhysPageMakeWritable on %RGv / %RGp %R[pgmpage]\n", __PRETTY_FUNCTION__, GCPtr, GCPhys, pPage));
if (!cb)
return VINF_SUCCESS;
iPTE++;