diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/alpha/ev5.cc | 33 | ||||
-rw-r--r-- | src/arch/alpha/idle_event.cc | 5 | ||||
-rw-r--r-- | src/cpu/checker/cpu.cc | 1 | ||||
-rw-r--r-- | src/cpu/checker/thread_context.hh | 8 | ||||
-rw-r--r-- | src/cpu/o3/cpu.cc | 12 | ||||
-rw-r--r-- | src/cpu/o3/regfile.hh | 1 | ||||
-rw-r--r-- | src/cpu/o3/thread_context.hh | 2 | ||||
-rw-r--r-- | src/cpu/simple/base.cc | 1 | ||||
-rw-r--r-- | src/cpu/simple_thread.hh | 8 | ||||
-rw-r--r-- | src/cpu/thread_context.cc | 4 | ||||
-rw-r--r-- | src/cpu/thread_context.hh | 8 | ||||
-rw-r--r-- | src/cpu/thread_state.cc | 2 | ||||
-rw-r--r-- | src/cpu/thread_state.hh | 10 | ||||
-rw-r--r-- | src/kern/kernel_stats.hh | 2 | ||||
-rw-r--r-- | src/sim/pseudo_inst.cc | 2 |
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" |