From e6b1dcfdee1467cf7f43b64c8dddb87f13bf2f10 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Fri, 26 Aug 2011 13:25:48 -0500 Subject: Page align vaddr for page fault msgs. Change-Id: Ib582703a77a7000440db2fec88c6a76644ec35bc Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/284 Reviewed-by: Douglas R. Gilbert Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell --- src/kernel/block.C | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/block.C b/src/kernel/block.C index 9a38ba3b0..68db26a95 100644 --- a/src/kernel/block.C +++ b/src/kernel/block.C @@ -72,7 +72,10 @@ bool Block::handlePageFault(task_t* i_task, uint64_t i_addr) iv_nextBlock->handlePageFault(i_task, i_addr) : false); } - ShadowPTE* pte = getPTE(i_addr); + // Calculate page aligned virtual address. + uint64_t l_addr_palign = (i_addr / PAGESIZE) * PAGESIZE; + + ShadowPTE* pte = getPTE(l_addr_palign); if (!pte->isPresent()) { @@ -91,7 +94,7 @@ bool Block::handlePageFault(task_t* i_task, uint64_t i_addr) } //Send message to handler to read page this->iv_msgHdlr->sendMessage(MSG_MM_RP_READ, - reinterpret_cast(i_addr),l_page,i_task); + reinterpret_cast(l_addr_palign),l_page,i_task); //Done(waiting for response) return true; } @@ -111,7 +114,7 @@ bool Block::handlePageFault(task_t* i_task, uint64_t i_addr) // Add page table entry. PageTableManager::addEntry( - (i_addr / PAGESIZE) * PAGESIZE, + l_addr_palign, pte->getPage(), (pte->isExecutable() ? VmmManager::RO_EXE_ACCESS : (pte->isWritable() ? VmmManager::NORMAL_ACCESS : -- cgit v1.2.3