summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-08-22 11:42:20 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-08-24 10:55:54 -0500
commit0977c6da14b8fc1623043daa429041863498aeae (patch)
tree23b6676a21fe407340db23cd2dfd75346a88a9a6
parentfa7d388f1a121d42769ea0289e3c043fe229b4d2 (diff)
downloadtalos-hostboot-0977c6da14b8fc1623043daa429041863498aeae.tar.gz
talos-hostboot-0977c6da14b8fc1623043daa429041863498aeae.zip
Allocate zero'd page in block.
Change-Id: Ieb56aa89190d7efd56c357245b24a979ee7ad79a Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/270 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r--src/include/kernel/spte.H4
-rw-r--r--src/kernel/block.C9
2 files changed, 12 insertions, 1 deletions
diff --git a/src/include/kernel/spte.H b/src/include/kernel/spte.H
index 92a50c351..6e4832bb6 100644
--- a/src/include/kernel/spte.H
+++ b/src/include/kernel/spte.H
@@ -63,9 +63,11 @@ class ShadowPTE
uint32_t track_write:1;
/** Has page been written to. */
uint32_t dirty:1;
+ /** Allocate from a zero'd page. */
+ uint32_t allocate_from_zero:1;
/** Reserved for future use. */
- uint32_t reserved:7;
+ uint32_t reserved:6;
} PACKED;
};
diff --git a/src/kernel/block.C b/src/kernel/block.C
index 9426e54ae..19d2962f8 100644
--- a/src/kernel/block.C
+++ b/src/kernel/block.C
@@ -22,6 +22,7 @@
// IBM_PROLOG_END
#include <limits.h>
#include <assert.h>
+#include <string.h>
#include <sys/msg.h>
@@ -93,6 +94,14 @@ bool Block::handlePageFault(task_t* i_task, uint64_t i_addr)
//Done(waiting for response)
return true;
}
+ else if (pte->allocate_from_zero)
+ {
+ void* l_page = PageManager::allocatePage();
+ memset(l_page, '\0', PAGESIZE);
+
+ pte->setPageAddr(reinterpret_cast<uint64_t>(l_page));
+ pte->setPresent(true);
+ }
else
{
return false; //TODO - Swap kernel base block pages for user pages
OpenPOWER on IntegriCloud