summaryrefslogtreecommitdiffstats
path: root/src/kernel/block.C
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2011-12-13 14:22:53 -0600
committerDouglas R. Gilbert <dgilbert@us.ibm.com>2011-12-16 14:28:34 -0600
commitae7ae33719580137181c8072e02bca257dcbd744 (patch)
treea588572faaacd7d322b45ae6107a995c11462bac /src/kernel/block.C
parenta5e1a461f37258b4b4ce284041200647e12cda80 (diff)
downloadtalos-hostboot-ae7ae33719580137181c8072e02bca257dcbd744.tar.gz
talos-hostboot-ae7ae33719580137181c8072e02bca257dcbd744.zip
Fix order of shadow page status and release of memory page
Change-Id: Id9371157bd51a7c646fd9b7440d09532e68c0577 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/579 Tested-by: Jenkins Server Reviewed-by: MATTHEW S. BARTH <msbarth@us.ibm.com> Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Diffstat (limited to 'src/kernel/block.C')
-rw-r--r--src/kernel/block.C20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/kernel/block.C b/src/kernel/block.C
index ce0ec5a65..474f67c53 100644
--- a/src/kernel/block.C
+++ b/src/kernel/block.C
@@ -255,23 +255,15 @@ void Block::releaseAllPages()
page += PAGESIZE)
{
ShadowPTE* pte = getPTE(page);
- if (pte->isPresent() && (0 != pte->getPageAddr()))
+ if (pte->isPresent())
{
-
- // set the permission of the physical address pte entry back to writable now that
- // the associated VA Spte has been released.
- if (BaseSegment::mmSetPermission(reinterpret_cast<void*>(pte->getPageAddr()),
- 0, WRITABLE))
+ uint64_t addr = pte->getPageAddr();
+ if (0 != addr)
{
- printkd("Got an error trying to set permissions in release all pages\n");
+ releaseSPTE(pte);
+ PageManager::freePage(reinterpret_cast<void*>(addr));
}
-
-
- PageManager::freePage(reinterpret_cast<void*>(pte->getPageAddr()));
-
- pte->setPresent(false);
- pte->setPageAddr(NULL);
- }
+ }
}
}
OpenPOWER on IntegriCloud