summaryrefslogtreecommitdiffstats
path: root/src/kernel/timemgr.C
diff options
context:
space:
mode:
authorStephen Cprek <smcprek@us.ibm.com>2013-10-28 10:26:46 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-31 16:11:32 -0500
commit2737de709eae85817841027506b4e18f9e620025 (patch)
tree514b5fb0b3a13099dc80bbd8ba08580f82879275 /src/kernel/timemgr.C
parent665dc1aff603fee08413c24deef941d5d43d35f5 (diff)
downloadtalos-hostboot-2737de709eae85817841027506b4e18f9e620025.tar.gz
talos-hostboot-2737de709eae85817841027506b4e18f9e620025.zip
Fixed performance issues in SIMICS IPL
Change-Id: Iccce5b641d0e2dc414bacc143a6b3e186f4e49ab CQ: SW224728 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6960 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/timemgr.C')
-rw-r--r--src/kernel/timemgr.C19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/kernel/timemgr.C b/src/kernel/timemgr.C
index fd4c55853..03f9aee79 100644
--- a/src/kernel/timemgr.C
+++ b/src/kernel/timemgr.C
@@ -28,6 +28,17 @@
uint64_t TimeManager::iv_timebaseFreq = 0xFFFFFFFF;
+bool isSimicsRunning() __attribute__((alias("__isSimicsRunning")));
+extern "C" void __isSimicsRunning() NEVER_INLINE;
+
+void __isSimicsRunning()
+{
+ asm volatile("li 3, 0");
+ MAGIC_INSTRUCTION(MAGIC_SIMICS_CHECK);
+}
+
+bool TimeManager::cv_isSimicsRunning = isSimicsRunning();
+
void TimeManager::init()
{
Singleton<TimeManager>::instance()._init();
@@ -114,6 +125,13 @@ uint64_t TimeManager::getIdleTimeSliceCount()
{
uint64_t sliceCount = getTimeSliceCount();
+ // In Simics we want to idle longer to improve overall performance. Set
+ // the idle baseline at 10x normal idle frequency.
+ if (cv_isSimicsRunning)
+ {
+ sliceCount *= 10;
+ }
+
// Get a delayed task, if there is one
_TimeManager_Delay_t* node = _get_delaylist()->front();
@@ -133,6 +151,7 @@ uint64_t TimeManager::getIdleTimeSliceCount()
sliceCount = 1;
}
}
+
return sliceCount;
}
OpenPOWER on IntegriCloud