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
This commit is contained in:
Kevin Lim 2006-05-25 11:50:42 -04:00
parent 3fe3523232
commit 32509d8387
4 changed files with 22 additions and 13 deletions

View file

@ -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:

View file

@ -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();

View file

@ -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
}

View file

@ -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,