summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2019-04-27 19:51:20 -0700
committerGabe Black <gabeblack@google.com>2019-04-30 03:49:40 +0000
commiteea1fb6fc887e523f23cd3141869da59e7047c55 (patch)
tree4b82d9aa743f48c18e9373ffe19254e89012550a /src/cpu
parentf9b72476fd948cde713f145834fba81574b0fde0 (diff)
downloadgem5-eea1fb6fc887e523f23cd3141869da59e7047c55.tar.xz
arch: cpu: Track kernel stats using the base ISA agnostic type.
Then cast to the ISA specific type when necessary. This removes (mostly) an ISA specific aspect to some of the interfaces. The ISA specific version of the kernel stats still needs to be constructed and stored in a few places which means that kernel_stats.hh still needs to be a switching arch header, for instance. In the future, I'd like to make the kernel its own object like the Process objects in SE mode, and then it would be able to instantiate and maintain its own stats. Change-Id: I8309d49019124f6bea1482aaea5b5b34e8c97433 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18429 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/cpu')
-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
11 files changed, 26 insertions, 31 deletions
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;