summaryrefslogtreecommitdiff
path: root/src/systemc/core/process.hh
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-07 16:53:12 -0700
committerGabe Black <gabeblack@google.com>2018-10-09 21:43:06 +0000
commit442d556fbfa85673c9a3be222cb9630ba5b05be1 (patch)
tree80916cf992900b91591915bb9de2f42e5235eccb /src/systemc/core/process.hh
parentc524f21396457c55435f852bcf0bb4befb91ddba (diff)
downloadgem5-442d556fbfa85673c9a3be222cb9630ba5b05be1.tar.xz
systemc: Implement the deprecated "timed_out" function.
This function requires some slightly annoying bookkeeping since it doesn't just report whether the current process is running as a result of a timeout, it reports whether it's running as a result of a timeout *and* it could have been running from some other sensitivity instead. Pure timeouts don't count as timeouts which makes it harder to handle in a general way. Change-Id: I533d97fe66d20d7b83aba80f2ef45a8944668070 Reviewed-on: https://gem5-review.googlesource.com/c/12608 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/process.hh')
-rw-r--r--src/systemc/core/process.hh16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/systemc/core/process.hh b/src/systemc/core/process.hh
index 4b43e1b7b..1ea599747 100644
--- a/src/systemc/core/process.hh
+++ b/src/systemc/core/process.hh
@@ -64,7 +64,9 @@ class Sensitivity
Sensitivity(Process *p) : process(p) {}
virtual ~Sensitivity() {}
- virtual void notifyWork(Event *e);
+ void satisfy(bool timedOut=false);
+
+ virtual void notifyWork(Event *e) { satisfy(); }
void notify(Event *e);
void notify() { notify(nullptr); }
@@ -130,6 +132,8 @@ class SensitivityTimeoutAndEvent :
Process *p, ::sc_core::sc_time t, const ::sc_core::sc_event *e) :
Sensitivity(p), SensitivityTimeout(p, t), SensitivityEvent(p, e)
{}
+
+ void notifyWork(Event *e) override { satisfy(e == nullptr); }
};
class SensitivityTimeoutAndEventAndList :
@@ -156,6 +160,8 @@ class SensitivityTimeoutAndEventOrList :
Sensitivity(p), SensitivityTimeout(p, t),
SensitivityEventOrList(p, eol)
{}
+
+ void notifyWork(Event *e) override { satisfy(e == nullptr); }
};
typedef std::vector<Sensitivity *> Sensitivities;
@@ -338,6 +344,8 @@ class Process : public ::sc_core::sc_process_b, public ListNode
bool hasStaticSensitivities() { return !staticSensitivities.empty(); }
bool internal() { return _internal; }
+ bool timedOut() { return _timedOut; }
+ void timedOut(bool to) { _timedOut = to; }
protected:
Process(const char *name, ProcessFuncWrapper *func, bool internal=false);
@@ -360,6 +368,9 @@ class Process : public ::sc_core::sc_process_b, public ListNode
bool _internal;
+ // Needed to support the deprecated "timed_out" function.
+ bool _timedOut;
+
bool _needsStart;
bool _dynamic;
bool _isUnwinding;
@@ -386,8 +397,9 @@ class Process : public ::sc_core::sc_process_b, public ListNode
};
inline void
-Sensitivity::notifyWork(Event *e)
+Sensitivity::satisfy(bool timedOut)
{
+ process->timedOut(timedOut);
process->satisfySensitivity(this);
}