From ae7ae33719580137181c8072e02bca257dcbd744 Mon Sep 17 00:00:00 2001 From: Doug Gilbert Date: Tue, 13 Dec 2011 14:22:53 -0600 Subject: 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 Reviewed-by: Douglas R. Gilbert --- src/kernel/block.C | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'src/kernel/block.C') 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(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(addr)); } - - - PageManager::freePage(reinterpret_cast(pte->getPageAddr())); - - pte->setPresent(false); - pte->setPageAddr(NULL); - } + } } } -- cgit v1.2.1