diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2011-04-07 09:27:21 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2011-04-07 09:27:21 -0500 |
commit | f696ed61ff611faef2c93cc9e207557ac84cde00 (patch) | |
tree | dfda200b018fcb12b7333c02fac24a785b0789dc | |
parent | 557aba52655dec84a73bdbc19c59b62ec916159d (diff) | |
download | talos-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.H | 7 | ||||
-rw-r--r-- | src/kernel/kernel.C | 10 |
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(); |