Fix up kernel stats, allow them to not be used as well.
authorKevin Lim <ktlim@umich.edu>
Thu, 25 May 2006 15:50:42 +0000 (11:50 -0400)
committerKevin Lim <ktlim@umich.edu>
Thu, 25 May 2006 15:50:42 +0000 (11:50 -0400)
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
cpu/checker/cpu.cc
cpu/cpu_exec_context.cc
cpu/cpu_exec_context.hh

index ad3a9ec4c22fbface974a9b27a3c1df0aa5578f7..f113a276749ad13b7b43b980df3e8bd5cfd1d59b 100644 (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:
index 08ab5d5c85d7708ddc1c06353c6991c22ac956c1..41ff6e7696fb0e7bd24a3295d1dd5284e6499ec4 100644 (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();
index 78ce058e851359c1637b881a80a516623636e1c8..e30295ef80c58648874d99f7d33fd1472c3d7ed6 100644 (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
 }
 
index 3d1428933cdb191da56ee54a21d9740006d218a2..061fe450aade58bed506d614b3cb8b56d034c950 100644 (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,