summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2011-09-22 18:59:55 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2011-09-22 18:59:55 -0700
commit84f0a1bd91b8af5517711fba00533daddb2359e1 (patch)
treee9dd08fe7ff8a575efc08c5a927c719f674d06fe
parentba79155d9d0f42457f74b533e27f0af2ab1b5e4a (diff)
downloadgem5-84f0a1bd91b8af5517711fba00533daddb2359e1.tar.xz
event: minor cleanup
Initialize flags via the Event constructor instead of calling setFlags() in the body of the derived class's constructor. I forget exactly why, but this made life easier when implementing multi-queue support. Also rename Event::getFlags() to isFlagSet() to better match common usage, and get rid of some unused Event methods.
-rw-r--r--src/cpu/o3/commit_impl.hh3
-rw-r--r--src/cpu/o3/inst_queue_impl.hh5
-rw-r--r--src/cpu/o3/lsq_unit_impl.hh4
-rw-r--r--src/dev/etherlink.cc8
-rw-r--r--src/mem/ruby/eventqueue/RubyEventQueueNode.hh4
-rw-r--r--src/sim/debug.cc3
-rw-r--r--src/sim/eventq.hh26
-rw-r--r--src/sim/sim_events.cc7
-rw-r--r--src/sim/stat_control.cc4
9 files changed, 23 insertions, 41 deletions
diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh
index f218cc76a..75ae87c75 100644
--- a/src/cpu/o3/commit_impl.hh
+++ b/src/cpu/o3/commit_impl.hh
@@ -71,9 +71,8 @@ using namespace std;
template <class Impl>
DefaultCommit<Impl>::TrapEvent::TrapEvent(DefaultCommit<Impl> *_commit,
ThreadID _tid)
- : Event(CPU_Tick_Pri), commit(_commit), tid(_tid)
+ : Event(CPU_Tick_Pri, AutoDelete), commit(_commit), tid(_tid)
{
- this->setFlags(AutoDelete);
}
template <class Impl>
diff --git a/src/cpu/o3/inst_queue_impl.hh b/src/cpu/o3/inst_queue_impl.hh
index 9f1dc77b2..b2016cc9c 100644
--- a/src/cpu/o3/inst_queue_impl.hh
+++ b/src/cpu/o3/inst_queue_impl.hh
@@ -56,10 +56,9 @@ using namespace std;
template <class Impl>
InstructionQueue<Impl>::FUCompletion::FUCompletion(DynInstPtr &_inst,
int fu_idx, InstructionQueue<Impl> *iq_ptr)
- : Event(Stat_Event_Pri), inst(_inst), fuIdx(fu_idx), iqPtr(iq_ptr),
- freeFU(false)
+ : Event(Stat_Event_Pri, AutoDelete),
+ inst(_inst), fuIdx(fu_idx), iqPtr(iq_ptr), freeFU(false)
{
- this->setFlags(Event::AutoDelete);
}
template <class Impl>
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh
index f934e2032..2a37d8b5c 100644
--- a/src/cpu/o3/lsq_unit_impl.hh
+++ b/src/cpu/o3/lsq_unit_impl.hh
@@ -60,9 +60,9 @@
template<class Impl>
LSQUnit<Impl>::WritebackEvent::WritebackEvent(DynInstPtr &_inst, PacketPtr _pkt,
LSQUnit *lsq_ptr)
- : inst(_inst), pkt(_pkt), lsqPtr(lsq_ptr)
+ : Event(Default_Pri, AutoDelete),
+ inst(_inst), pkt(_pkt), lsqPtr(lsq_ptr)
{
- this->setFlags(Event::AutoDelete);
}
template<class Impl>
diff --git a/src/dev/etherlink.cc b/src/dev/etherlink.cc
index 289b74543..5ebc4fba5 100644
--- a/src/dev/etherlink.cc
+++ b/src/dev/etherlink.cc
@@ -228,17 +228,13 @@ EtherLink::Link::unserialize(const string &base, Checkpoint *cp,
}
LinkDelayEvent::LinkDelayEvent()
- : link(NULL)
+ : Event(Default_Pri, AutoSerialize | AutoDelete), link(NULL)
{
- setFlags(AutoSerialize);
- setFlags(AutoDelete);
}
LinkDelayEvent::LinkDelayEvent(EtherLink::Link *l, EthPacketPtr p)
- : link(l), packet(p)
+ : Event(Default_Pri, AutoSerialize | AutoDelete), link(l), packet(p)
{
- setFlags(AutoSerialize);
- setFlags(AutoDelete);
}
void
diff --git a/src/mem/ruby/eventqueue/RubyEventQueueNode.hh b/src/mem/ruby/eventqueue/RubyEventQueueNode.hh
index 0bdc48e61..de1550654 100644
--- a/src/mem/ruby/eventqueue/RubyEventQueueNode.hh
+++ b/src/mem/ruby/eventqueue/RubyEventQueueNode.hh
@@ -39,9 +39,9 @@ class RubyEventQueueNode : public Event
{
public:
RubyEventQueueNode(Consumer* _consumer, RubyEventQueue* _eventq)
- : m_consumer_ptr(_consumer), m_eventq_ptr(_eventq)
+ : Event(Default_Pri, AutoDelete),
+ m_consumer_ptr(_consumer), m_eventq_ptr(_eventq)
{
- setFlags(AutoDelete);
}
void print(std::ostream& out) const;
diff --git a/src/sim/debug.cc b/src/sim/debug.cc
index bd7924117..fadd89ae1 100644
--- a/src/sim/debug.cc
+++ b/src/sim/debug.cc
@@ -57,9 +57,8 @@ struct DebugBreakEvent : public Event
// constructor: schedule at specified time
//
DebugBreakEvent::DebugBreakEvent()
- : Event(Debug_Break_Pri)
+ : Event(Debug_Break_Pri, AutoDelete)
{
- setFlags(AutoDelete);
}
//
diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh
index fcfa119c4..1509d05a5 100644
--- a/src/sim/eventq.hh
+++ b/src/sim/eventq.hh
@@ -149,20 +149,13 @@ class Event : public Serializable, public FastAlloc
return flags & PublicRead;
}
- Flags
- getFlags(Flags _flags) const
+ bool
+ isFlagSet(Flags _flags) const
{
assert(_flags.noneSet(~PublicRead));
return flags.isSet(_flags);
}
- Flags
- allFlags(Flags _flags) const
- {
- assert(_flags.noneSet(~PublicRead));
- return flags.allSet(_flags);
- }
-
/// Accessor for flags.
void
setFlags(Flags _flags)
@@ -247,9 +240,11 @@ class Event : public Serializable, public FastAlloc
* Event constructor
* @param queue that the event gets scheduled on
*/
- Event(Priority p = Default_Pri)
- : nextBin(NULL), nextInBin(NULL), _priority(p), flags(Initialized)
+ Event(Priority p = Default_Pri, Flags f = 0)
+ : nextBin(NULL), nextInBin(NULL), _priority(p),
+ flags(Initialized | f)
{
+ assert(f.noneSet(~PublicWrite));
#ifndef NDEBUG
instance = ++instanceCounter;
queue = NULL;
@@ -406,16 +401,11 @@ class EventQueue : public Serializable
}
}
- // default: process all events up to 'now' (curTick())
- void serviceEvents() { serviceEvents(curTick()); }
-
// return true if no events are queued
bool empty() const { return head == NULL; }
void dump() const;
- Tick nextEventTime() { return empty() ? curTick() : head->when(); }
-
bool debugVerify() const;
#ifndef SWIG
@@ -559,8 +549,8 @@ DelayFunction(EventQueue *eventq, Tick when, T *object)
public:
DelayEvent(T *o)
- : object(o)
- { this->setFlags(AutoDelete); }
+ : Event(Default_Pri, AutoDelete), object(o)
+ { }
void process() { (object->*F)(); }
const char *description() const { return "delay"; }
};
diff --git a/src/sim/sim_events.cc b/src/sim/sim_events.cc
index aac844429..725e7da9d 100644
--- a/src/sim/sim_events.cc
+++ b/src/sim/sim_events.cc
@@ -40,9 +40,8 @@
using namespace std;
SimLoopExitEvent::SimLoopExitEvent(const std::string &_cause, int c, Tick r)
- : Event(Sim_Exit_Pri), cause(_cause), code(c), repeat(r)
+ : Event(Sim_Exit_Pri, IsExitEvent), cause(_cause), code(c), repeat(r)
{
- setFlags(IsExitEvent);
}
@@ -55,7 +54,7 @@ SimLoopExitEvent::process()
// if this got scheduled on a different queue (e.g. the committed
// instruction queue) then make a corresponding event on the main
// queue.
- if (!getFlags(IsMainQueue)) {
+ if (!isFlagSet(IsMainQueue)) {
exitSimLoop(cause, code);
delete this;
}
@@ -65,7 +64,7 @@ SimLoopExitEvent::process()
// but if you are doing this on intervals, don't forget to make another
if (repeat) {
- assert(getFlags(IsMainQueue));
+ assert(isFlagSet(IsMainQueue));
mainEventQueue.schedule(this, curTick() + repeat);
}
}
diff --git a/src/sim/stat_control.cc b/src/sim/stat_control.cc
index 80aec224e..7cf77174f 100644
--- a/src/sim/stat_control.cc
+++ b/src/sim/stat_control.cc
@@ -175,9 +175,9 @@ class StatEvent : public Event
public:
StatEvent(bool _dump, bool _reset, Tick _repeat)
- : Event(Stat_Event_Pri), dump(_dump), reset(_reset), repeat(_repeat)
+ : Event(Stat_Event_Pri, AutoDelete),
+ dump(_dump), reset(_reset), repeat(_repeat)
{
- setFlags(AutoDelete);
}
virtual void