From 32509d83878816cd870cea1ccbb8a9eb46a1e3f6 Mon Sep 17 00:00:00 2001 From: Kevin Lim Date: Thu, 25 May 2006 11:50:42 -0400 Subject: [PATCH] Fix up kernel stats, allow them to not be used as well. arch/alpha/ev5.cc: Fix up some stuff I missed in the last kernel stats checkin. cpu/checker/cpu.cc: Allow the checker to disable its kernel stats. cpu/cpu_exec_context.cc: Allow CPUExecContext to be created without kernelStats. cpu/cpu_exec_context.hh: Allow CPUExecContext to be created without kernelStats. Default usage leaves kernelStats on. --HG-- extra : convert_revision : 8ed5bffd3a5b6275baa07fb4ea385eeab1a0456a --- arch/alpha/ev5.cc | 13 +++++++------ cpu/checker/cpu.cc | 4 ++-- cpu/cpu_exec_context.cc | 15 +++++++++++---- cpu/cpu_exec_context.hh | 3 ++- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/arch/alpha/ev5.cc b/arch/alpha/ev5.cc index ad3a9ec4c..f113a2767 100644 --- a/arch/alpha/ev5.cc +++ b/arch/alpha/ev5.cc @@ -146,7 +146,8 @@ CPUExecContext::hwrei() setNextPC(readMiscReg(AlphaISA::IPR_EXC_ADDR)); if (!misspeculating()) { - kernelStats->hwrei(); + if (kernelStats) + kernelStats->hwrei(); cpu->checkInterrupts = true; } @@ -372,10 +373,9 @@ AlphaISA::MiscRegFile::setIpr(int idx, uint64_t val, ExecContext *xc) if (val & 0x18) { if (xc->getKernelStats()) xc->getKernelStats()->mode(Kernel::user, xc); - else { - if (xc->getKernelStats()) - xc->getKernelStats()->mode(Kernel::kernel, xc); - } + } else { + if (xc->getKernelStats()) + xc->getKernelStats()->mode(Kernel::kernel, xc); } case AlphaISA::IPR_ICM: @@ -562,7 +562,8 @@ AlphaISA::MiscRegFile::copyIprs(ExecContext *xc) bool CPUExecContext::simPalCheck(int palFunc) { - kernelStats->callpal(palFunc, proxy); + if (kernelStats) + kernelStats->callpal(palFunc, proxy); switch (palFunc) { case PAL::halt: diff --git a/cpu/checker/cpu.cc b/cpu/checker/cpu.cc index 08ab5d5c8..41ff6e769 100644 --- a/cpu/checker/cpu.cc +++ b/cpu/checker/cpu.cc @@ -103,7 +103,7 @@ CheckerCPU::setMemory(FunctionalMemory *mem) execContexts.push_back(xcProxy); #else if (systemPtr) { - cpuXC = new CPUExecContext(this, 0, systemPtr, itb, dtb, memPtr); + cpuXC = new CPUExecContext(this, 0, systemPtr, itb, dtb, memPtr, false); cpuXC->setStatus(ExecContext::Suspended); xcProxy = cpuXC->getProxy(); @@ -122,7 +122,7 @@ CheckerCPU::setSystem(System *system) systemPtr = system; if (memPtr) { - cpuXC = new CPUExecContext(this, 0, systemPtr, itb, dtb, memPtr); + cpuXC = new CPUExecContext(this, 0, systemPtr, itb, dtb, memPtr, false); cpuXC->setStatus(ExecContext::Suspended); xcProxy = cpuXC->getProxy(); diff --git a/cpu/cpu_exec_context.cc b/cpu/cpu_exec_context.cc index 78ce058e8..e30295ef8 100644 --- a/cpu/cpu_exec_context.cc +++ b/cpu/cpu_exec_context.cc @@ -53,8 +53,9 @@ using namespace std; // constructor #if FULL_SYSTEM CPUExecContext::CPUExecContext(BaseCPU *_cpu, int _thread_num, System *_sys, - AlphaITB *_itb, AlphaDTB *_dtb, - FunctionalMemory *_mem) + AlphaITB *_itb, AlphaDTB *_dtb, + FunctionalMemory *_mem, + bool use_kernel_stats) : _status(ExecContext::Unallocated), cpu(_cpu), thread_num(_thread_num), cpu_id(-1), lastActivate(0), lastSuspend(0), mem(_mem), itb(_itb), dtb(_dtb), system(_sys), memctrl(_sys->memctrl), physmem(_sys->physmem), @@ -79,6 +80,12 @@ CPUExecContext::CPUExecContext(BaseCPU *_cpu, int _thread_num, System *_sys, static ProfileNode dummyNode; profileNode = &dummyNode; profilePC = 3; + + if (use_kernel_stats) { + kernelStats = new Kernel::Statistics(system); + } else { + kernelStats = NULL; + } } #else CPUExecContext::CPUExecContext(BaseCPU *_cpu, int _thread_num, @@ -279,8 +286,8 @@ void CPUExecContext::regStats(const string &name) { #if FULL_SYSTEM - kernelStats = new Kernel::Statistics(system); - kernelStats->regStats(name + ".kern"); + if (kernelStats) + kernelStats->regStats(name + ".kern"); #endif } diff --git a/cpu/cpu_exec_context.hh b/cpu/cpu_exec_context.hh index 3d1428933..061fe450a 100644 --- a/cpu/cpu_exec_context.hh +++ b/cpu/cpu_exec_context.hh @@ -193,7 +193,8 @@ class CPUExecContext // constructor: initialize context from given process structure #if FULL_SYSTEM CPUExecContext(BaseCPU *_cpu, int _thread_num, System *_system, - AlphaITB *_itb, AlphaDTB *_dtb, FunctionalMemory *_dem); + AlphaITB *_itb, AlphaDTB *_dtb, FunctionalMemory *_mem, + bool use_kernel_stats = true); #else CPUExecContext(BaseCPU *_cpu, int _thread_num, Process *_process, int _asid); CPUExecContext(BaseCPU *_cpu, int _thread_num, FunctionalMemory *_mem,