summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/alpha/ev5.cc33
-rw-r--r--src/arch/alpha/idle_event.cc5
-rw-r--r--src/cpu/checker/cpu.cc1
-rw-r--r--src/cpu/checker/thread_context.hh8
-rw-r--r--src/cpu/o3/cpu.cc12
-rw-r--r--src/cpu/o3/regfile.hh1
-rw-r--r--src/cpu/o3/thread_context.hh2
-rw-r--r--src/cpu/simple/base.cc1
-rw-r--r--src/cpu/simple_thread.hh8
-rw-r--r--src/cpu/thread_context.cc4
-rw-r--r--src/cpu/thread_context.hh8
-rw-r--r--src/cpu/thread_state.cc2
-rw-r--r--src/cpu/thread_state.hh10
-rw-r--r--src/kern/kernel_stats.hh2
-rw-r--r--src/sim/pseudo_inst.cc2
15 files changed, 53 insertions, 46 deletions
diff --git a/src/arch/alpha/ev5.cc b/src/arch/alpha/ev5.cc
index bac8e8d48..e3e025e2f 100644
--- a/src/arch/alpha/ev5.cc
+++ b/src/arch/alpha/ev5.cc
@@ -219,6 +219,9 @@ int break_ipl = -1;
void
ISA::setIpr(int idx, uint64_t val, ThreadContext *tc)
{
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(
+ tc->getKernelStats());
+ assert(stats || !tc->getKernelStats());
switch (idx) {
case IPR_PALtemp0:
case IPR_PALtemp1:
@@ -267,8 +270,8 @@ ISA::setIpr(int idx, uint64_t val, ThreadContext *tc)
case IPR_PALtemp23:
// write entire quad w/ no side-effect
- if (tc->getKernelStats())
- tc->getKernelStats()->context(ipr[idx], val, tc);
+ if (stats)
+ stats->context(ipr[idx], val, tc);
ipr[idx] = val;
break;
@@ -291,17 +294,17 @@ ISA::setIpr(int idx, uint64_t val, ThreadContext *tc)
case IPR_IPLR:
// only write least significant five bits - interrupt level
ipr[idx] = val & 0x1f;
- if (tc->getKernelStats())
- tc->getKernelStats()->swpipl(ipr[idx]);
+ if (stats)
+ stats->swpipl(ipr[idx]);
break;
case IPR_DTB_CM:
if (val & 0x18) {
- if (tc->getKernelStats())
- tc->getKernelStats()->mode(Kernel::user, tc);
+ if (stats)
+ stats->mode(Kernel::user, tc);
} else {
- if (tc->getKernelStats())
- tc->getKernelStats()->mode(Kernel::kernel, tc);
+ if (stats)
+ stats->mode(Kernel::kernel, tc);
}
M5_FALLTHROUGH;
@@ -485,6 +488,9 @@ using namespace AlphaISA;
Fault
SimpleThread::hwrei()
{
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(kernelStats);
+ assert(stats || !kernelStats);
+
PCState pc = pcState();
if (!(pc.pc() & 0x3))
return std::make_shared<UnimplementedOpcodeFault>();
@@ -494,8 +500,8 @@ SimpleThread::hwrei()
CPA::cpa()->swAutoBegin(this, pc.npc());
- if (kernelStats)
- kernelStats->hwrei();
+ if (stats)
+ stats->hwrei();
// FIXME: XXX check for interrupts? XXX
return NoFault;
@@ -508,8 +514,11 @@ SimpleThread::hwrei()
bool
SimpleThread::simPalCheck(int palFunc)
{
- if (kernelStats)
- kernelStats->callpal(palFunc, this);
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(kernelStats);
+ assert(stats || !kernelStats);
+
+ if (stats)
+ stats->callpal(palFunc, this);
switch (palFunc) {
case PAL::halt:
diff --git a/src/arch/alpha/idle_event.cc b/src/arch/alpha/idle_event.cc
index 080dcb22c..df8a0c661 100644
--- a/src/arch/alpha/idle_event.cc
+++ b/src/arch/alpha/idle_event.cc
@@ -41,7 +41,10 @@ IdleStartEvent::process(ThreadContext *tc)
{
if (tc->getKernelStats()) {
RegVal val = tc->readMiscRegNoEffect(IPR_PALtemp23);
- tc->getKernelStats()->setIdleProcess(val, tc);
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(
+ tc->getKernelStats());
+ assert(stats);
+ stats->setIdleProcess(val, tc);
}
remove();
}
diff --git a/src/cpu/checker/cpu.cc b/src/cpu/checker/cpu.cc
index fe1c3d440..7f8eada4c 100644
--- a/src/cpu/checker/cpu.cc
+++ b/src/cpu/checker/cpu.cc
@@ -47,7 +47,6 @@
#include <string>
#include "arch/generic/tlb.hh"
-#include "arch/kernel_stats.hh"
#include "arch/vtophys.hh"
#include "cpu/base.hh"
#include "cpu/simple_thread.hh"
diff --git a/src/cpu/checker/thread_context.hh b/src/cpu/checker/thread_context.hh
index 26973cdbf..ed8add662 100644
--- a/src/cpu/checker/thread_context.hh
+++ b/src/cpu/checker/thread_context.hh
@@ -52,10 +52,10 @@
#include "debug/Checker.hh"
class EndQuiesceEvent;
+namespace Kernel {
+ class Statistics;
+};
namespace TheISA {
- namespace Kernel {
- class Statistics;
- };
class Decoder;
};
@@ -134,7 +134,7 @@ class CheckerThreadContext : public ThreadContext
System *getSystemPtr() override { return actualTC->getSystemPtr(); }
- TheISA::Kernel::Statistics *
+ ::Kernel::Statistics *
getKernelStats() override
{
return actualTC->getKernelStats();
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 621a6a409..70417d51f 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -925,7 +925,10 @@ FullO3CPU<Impl>::hwrei(ThreadID tid)
// Need to clear the lock flag upon returning from an interrupt.
this->setMiscRegNoEffect(AlphaISA::MISCREG_LOCKFLAG, false, tid);
- this->thread[tid]->kernelStats->hwrei();
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(
+ this->thread[tid]->kernelStats);
+ assert(stats);
+ stats->hwrei();
// FIXME: XXX check for interrupts? XXX
#endif
@@ -937,9 +940,10 @@ bool
FullO3CPU<Impl>::simPalCheck(int palFunc, ThreadID tid)
{
#if THE_ISA == ALPHA_ISA
- if (this->thread[tid]->kernelStats)
- this->thread[tid]->kernelStats->callpal(palFunc,
- this->threadContexts[tid]);
+ auto *stats = dynamic_cast<AlphaISA::Kernel::Statistics *>(
+ this->thread[tid]->kernelStats);
+ if (stats)
+ stats->callpal(palFunc, this->threadContexts[tid]);
switch (palFunc) {
case PAL::halt:
diff --git a/src/cpu/o3/regfile.hh b/src/cpu/o3/regfile.hh
index d2fcd0749..d4b6602ad 100644
--- a/src/cpu/o3/regfile.hh
+++ b/src/cpu/o3/regfile.hh
@@ -48,7 +48,6 @@
#include <vector>
#include "arch/isa_traits.hh"
-#include "arch/kernel_stats.hh"
#include "arch/types.hh"
#include "base/trace.hh"
#include "config/the_isa.hh"
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index b87aac4a7..e5f01871b 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -119,7 +119,7 @@ class O3ThreadContext : public ThreadContext
System *getSystemPtr() override { return cpu->system; }
/** Returns a pointer to this thread's kernel statistics. */
- TheISA::Kernel::Statistics *
+ ::Kernel::Statistics *
getKernelStats() override
{
return thread->kernelStats;
diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index b687a17e0..298ba9f9e 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -43,7 +43,6 @@
#include "cpu/simple/base.hh"
-#include "arch/kernel_stats.hh"
#include "arch/stacktrace.hh"
#include "arch/utility.hh"
#include "arch/vtophys.hh"
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 0d415dc16..33f0bbd8a 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -74,10 +74,8 @@ class CheckerCPU;
class FunctionProfile;
class ProfileNode;
-namespace TheISA {
- namespace Kernel {
- class Statistics;
- }
+namespace Kernel {
+ class Statistics;
}
/**
@@ -212,7 +210,7 @@ class SimpleThread : public ThreadState, public ThreadContext
System *getSystemPtr() override { return system; }
- TheISA::Kernel::Statistics *
+ Kernel::Statistics *
getKernelStats() override
{
return ThreadState::getKernelStats();
diff --git a/src/cpu/thread_context.cc b/src/cpu/thread_context.cc
index 35d96a4e7..dea39015f 100644
--- a/src/cpu/thread_context.cc
+++ b/src/cpu/thread_context.cc
@@ -44,7 +44,6 @@
#include "cpu/thread_context.hh"
#include "arch/generic/vec_pred_reg.hh"
-#include "arch/kernel_stats.hh"
#include "base/logging.hh"
#include "base/trace.hh"
#include "config/the_isa.hh"
@@ -52,6 +51,7 @@
#include "cpu/quiesce_event.hh"
#include "debug/Context.hh"
#include "debug/Quiesce.hh"
+#include "kern/kernel_stats.hh"
#include "params/BaseCPU.hh"
#include "sim/full_system.hh"
@@ -139,7 +139,7 @@ ThreadContext::quiesce()
suspend();
if (getKernelStats())
- getKernelStats()->quiesce();
+ getKernelStats()->quiesce();
}
diff --git a/src/cpu/thread_context.hh b/src/cpu/thread_context.hh
index 00e97b23c..bdf5a0086 100644
--- a/src/cpu/thread_context.hh
+++ b/src/cpu/thread_context.hh
@@ -70,10 +70,8 @@ class FSTranslatingPortProxy;
class PortProxy;
class Process;
class System;
-namespace TheISA {
- namespace Kernel {
- class Statistics;
- }
+namespace Kernel {
+ class Statistics;
}
/**
@@ -150,7 +148,7 @@ class ThreadContext
virtual System *getSystemPtr() = 0;
- virtual TheISA::Kernel::Statistics *getKernelStats() = 0;
+ virtual ::Kernel::Statistics *getKernelStats() = 0;
virtual PortProxy &getPhysProxy() = 0;
diff --git a/src/cpu/thread_state.cc b/src/cpu/thread_state.cc
index 92be17977..acb297113 100644
--- a/src/cpu/thread_state.cc
+++ b/src/cpu/thread_state.cc
@@ -30,11 +30,11 @@
#include "cpu/thread_state.hh"
-#include "arch/kernel_stats.hh"
#include "base/output.hh"
#include "cpu/base.hh"
#include "cpu/profile.hh"
#include "cpu/quiesce_event.hh"
+#include "kern/kernel_stats.hh"
#include "mem/fs_translating_port_proxy.hh"
#include "mem/port.hh"
#include "mem/port_proxy.hh"
diff --git a/src/cpu/thread_state.hh b/src/cpu/thread_state.hh
index 574193d0e..200633922 100644
--- a/src/cpu/thread_state.hh
+++ b/src/cpu/thread_state.hh
@@ -41,10 +41,8 @@
class EndQuiesceEvent;
class FunctionProfile;
class ProfileNode;
-namespace TheISA {
- namespace Kernel {
- class Statistics;
- }
+namespace Kernel {
+ class Statistics;
}
class Checkpoint;
@@ -98,7 +96,7 @@ struct ThreadState : public Serializable {
void profileSample();
- TheISA::Kernel::Statistics *getKernelStats() { return kernelStats; }
+ Kernel::Statistics *getKernelStats() { return kernelStats; }
PortProxy &getPhysProxy();
@@ -185,7 +183,7 @@ struct ThreadState : public Serializable {
Addr profilePC;
EndQuiesceEvent *quiesceEvent;
- TheISA::Kernel::Statistics *kernelStats;
+ Kernel::Statistics *kernelStats;
protected:
Process *process;
diff --git a/src/kern/kernel_stats.hh b/src/kern/kernel_stats.hh
index 41071ce08..37dbb9f15 100644
--- a/src/kern/kernel_stats.hh
+++ b/src/kern/kernel_stats.hh
@@ -53,7 +53,7 @@ class Statistics : public Serializable
virtual ~Statistics() {}
const std::string name() const { return myname; }
- void regStats(const std::string &name);
+ virtual void regStats(const std::string &name);
public:
void arm() { _arm++; }
diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc
index dc37a8c71..8ffb13e3b 100644
--- a/src/sim/pseudo_inst.cc
+++ b/src/sim/pseudo_inst.cc
@@ -53,7 +53,6 @@
#include <gem5/asm/generic/m5ops.h>
-#include "arch/kernel_stats.hh"
#include "arch/pseudo_inst.hh"
#include "arch/utility.hh"
#include "arch/vtophys.hh"
@@ -68,6 +67,7 @@
#include "debug/Quiesce.hh"
#include "debug/WorkItems.hh"
#include "dev/net/dist_iface.hh"
+#include "kern/kernel_stats.hh"
#include "params/BaseCPU.hh"
#include "sim/full_system.hh"
#include "sim/initparam_keys.hh"