diff options
author | Stephen Cprek <smcprek@us.ibm.com> | 2013-10-28 10:26:46 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-31 16:11:32 -0500 |
commit | 2737de709eae85817841027506b4e18f9e620025 (patch) | |
tree | 514b5fb0b3a13099dc80bbd8ba08580f82879275 /src/kernel/timemgr.C | |
parent | 665dc1aff603fee08413c24deef941d5d43d35f5 (diff) | |
download | talos-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.C | 19 |
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; } |