summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-08-26 13:25:48 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-08-31 10:18:36 -0500
commite6b1dcfdee1467cf7f43b64c8dddb87f13bf2f10 (patch)
tree9a2fa0e8e602bd2bffa10b8c3c033885eaefef8b /src
parente4b2a0f558f49f24bf31f763c13027ebcabc5efa (diff)
downloadtalos-hostboot-e6b1dcfdee1467cf7f43b64c8dddb87f13bf2f10.tar.gz
talos-hostboot-e6b1dcfdee1467cf7f43b64c8dddb87f13bf2f10.zip
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 <dgilbert@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/kernel/block.C9
1 files changed, 6 insertions, 3 deletions
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<void*>(i_addr),l_page,i_task);
+ reinterpret_cast<void*>(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 :
OpenPOWER on IntegriCloud