summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-04-07 09:27:21 -0500
committerPatrick Williams <iawillia@us.ibm.com>2011-04-07 09:27:21 -0500
commitf696ed61ff611faef2c93cc9e207557ac84cde00 (patch)
treedfda200b018fcb12b7333c02fac24a785b0789dc
parent557aba52655dec84a73bdbc19c59b62ec916159d (diff)
downloadtalos-hostboot-f696ed61ff611faef2c93cc9e207557ac84cde00.tar.gz
talos-hostboot-f696ed61ff611faef2c93cc9e207557ac84cde00.zip
VBU: dcbz cache lines after code image to ensure they are in the L3.
-rw-r--r--src/include/arch/ppc.H7
-rw-r--r--src/kernel/kernel.C10
2 files changed, 17 insertions, 0 deletions
diff --git a/src/include/arch/ppc.H b/src/include/arch/ppc.H
index 003f804a3..d5ad34d9f 100644
--- a/src/include/arch/ppc.H
+++ b/src/include/arch/ppc.H
@@ -165,6 +165,13 @@ inline void dcbf(void* _ptr)
}
ALWAYS_INLINE
+inline void dcbz(void* _ptr)
+{
+ register void* ptr = _ptr;
+ asm volatile("dcbz 0, %0" : : "b" (ptr) : "memory");
+}
+
+ALWAYS_INLINE
inline void icbi(void* _ptr)
{
register void* ptr = _ptr;
diff --git a/src/kernel/kernel.C b/src/kernel/kernel.C
index dc073631e..f39290a09 100644
--- a/src/kernel/kernel.C
+++ b/src/kernel/kernel.C
@@ -10,6 +10,7 @@
#include <kernel/taskmgr.H>
#include <kernel/vmmmgr.H>
#include <kernel/timemgr.H>
+#include <sys/vfs.h>
#include <stdlib.h>
@@ -74,6 +75,15 @@ void Kernel::cppBootstrap()
void Kernel::memBootstrap()
{
+ // Populate L3 cache lines after code space.
+ uint64_t* cache_line = (uint64_t*) VFS_LAST_ADDRESS;
+ uint64_t* end_cache_line = (uint64_t*) VmmManager::FULL_MEM_SIZE;
+ while (cache_line != end_cache_line)
+ {
+ dcbz(cache_line);
+ cache_line++;
+ }
+
PageManager::init();
HeapManager::init();
VmmManager::init();
OpenPOWER on IntegriCloud