Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/52103 )
Change subject: sim: Create a StubWorkload for System.workload to default
to.
......................................................................
sim: Create a StubWorkload for System.workload to default to.
This way there will always be a workload object, even if nothing needs
to be set up. This default can also be used in low_power_sweep.py,
where the workload object was just a placeholder.
Change-Id: Idfc3e75c65318d75a3eae6a19944ae1f79a2d111
---
M src/sim/workload.hh
M src/sim/system.cc
M src/sim/System.py
M configs/dram/low_power_sweep.py
M src/sim/Workload.py
5 files changed, 55 insertions(+), 13 deletions(-)
diff --git a/configs/dram/low_power_sweep.py
b/configs/dram/low_power_sweep.py
index c21a180..db02a06 100644
--- a/configs/dram/low_power_sweep.py
+++ b/configs/dram/low_power_sweep.py
@@ -90,8 +90,6 @@
voltage_domain =
VoltageDomain(voltage = '1V'))
-system.workload = SEWorkload()
-
# We are fine with 256 MB memory for now.
mem_range = AddrRange('256MB')
# Start address is 0
diff --git a/src/sim/System.py b/src/sim/System.py
index d7b88b0..115fb94 100644
--- a/src/sim/System.py
+++ b/src/sim/System.py
@@ -44,6 +44,7 @@
from m5.objects.DVFSHandler import *
from m5.objects.SimpleMemory import *
+from m5.objects.Workload import StubWorkload
class MemoryMode(Enum): vals = ['invalid', 'atomic', 'timing',
'atomic_noncaching']
@@ -117,7 +118,7 @@
work_cpus_ckpt_count = Param.Counter(0,
"create checkpoint when active cpu count value is reached")
- workload = Param.Workload(NULL, "Workload to run on this system")
+ workload = Param.Workload(StubWorkload(), "Workload to run on this
system")
init_param = Param.UInt64(0, "numerical value to pass into simulator")
readfile = Param.String("", "file to read startup script from")
symbolfile = Param.String("", "file to get the symbols from")
diff --git a/src/sim/Workload.py b/src/sim/Workload.py
index 62aa047..92ed7c3 100644
--- a/src/sim/Workload.py
+++ b/src/sim/Workload.py
@@ -37,6 +37,15 @@
wait_for_remote_gdb = Param.Bool(False,
"Wait for a remote GDB connection");
+class StubWorkload(Workload):
+ type = 'StubWorkload'
+ cxx_header = "sim/workload.hh"
+ cxx_class = 'gem5::StubWorkload'
+
+ entry = Param.Addr(0, 'Dummy entry point for this workload.')
+ byte_order = Param.ByteOrder('little',
+ 'Dummy byte order for this workload.')
+
class KernelWorkload(Workload):
type = 'KernelWorkload'
cxx_header = "sim/kernel_workload.hh"
diff --git a/src/sim/system.cc b/src/sim/system.cc
index 14e6a78..5ebf0f4 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -96,9 +96,7 @@
System::Threads::Thread::quiesce() const
{
context->suspend();
- auto *workload = context->getSystemPtr()->workload;
- if (workload)
- workload->recordQuiesce();
+ context->getSystemPtr()->workload->recordQuiesce();
}
void
@@ -217,8 +215,8 @@
AddrRange(1, 0)), // Create an empty range if disabled
redirectPaths(p.redirect_paths)
{
- if (workload)
- workload->setSystem(this);
+ panic_if(!workload, "No workload set for system %s.", name());
+ workload->setSystem(this);
// add self to global system list
systemList.push_back(this);
@@ -277,8 +275,7 @@
{
threads.insert(tc, assigned);
- if (workload)
- workload->registerThreadContext(tc);
+ workload->registerThreadContext(tc);
for (auto *e: liveEvents)
tc->schedule(e);
@@ -310,8 +307,7 @@
auto *otc = threads[context_id];
threads.replace(tc, context_id);
- if (workload)
- workload->replaceThreadContext(tc);
+ workload->replaceThreadContext(tc);
for (auto *e: liveEvents) {
otc->remove(e);
@@ -454,7 +450,7 @@
bool
System::trapToGdb(int signal, ContextID ctx_id) const
{
- return workload && workload->trapToGdb(signal, ctx_id);
+ return workload->trapToGdb(signal, ctx_id);
}
void
diff --git a/src/sim/workload.hh b/src/sim/workload.hh
index fa62555..a57b6c1 100644
--- a/src/sim/workload.hh
+++ b/src/sim/workload.hh
@@ -33,6 +33,7 @@
#include "base/loader/object_file.hh"
#include "base/loader/symtab.hh"
+#include "params/StubWorkload.hh"
#include "params/Workload.hh"
#include "sim/sim_object.hh"
#include "sim/stats.hh"
@@ -159,6 +160,30 @@
/** @} */
};
+class StubWorkload : public Workload
+{
+ private:
+ PARAMS(StubWorkload);
+ loader::SymbolTable _symtab;
+
+ public:
+ StubWorkload(const StubWorkloadParams ¶ms) : Workload(params) {}
+
+ Addr getEntry() const override { return params().entry; }
+ ByteOrder byteOrder() const override { return params().byte_order; }
+ loader::Arch getArch() const override { return loader::UnknownArch; }
+ const loader::SymbolTable &
+ symtab(ThreadContext *tc) override
+ {
+ return _symtab;
+ }
+ bool
+ insertSymbol(const loader::Symbol &symbol) override
+ {
+ return _symtab.insert(symbol);
+ }
+};
+
} // namespace gem5
#endif // __SIM_WORKLOAD_HH__
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/52103
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Idfc3e75c65318d75a3eae6a19944ae1f79a2d111
Gerrit-Change-Number: 52103
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s