diff -r 2cb386a6b972 -r 228050cfc21e src/cpu/testers/directedtest/RubyDirectedTester.cc --- a/src/cpu/testers/directedtest/RubyDirectedTester.cc Sun Aug 19 22:38:21 2012 -0500 +++ b/src/cpu/testers/directedtest/RubyDirectedTester.cc Mon Aug 20 14:02:20 2012 -0500 @@ -42,7 +42,6 @@ #include "cpu/testers/directedtest/DirectedGenerator.hh" #include "cpu/testers/directedtest/RubyDirectedTester.hh" #include "debug/DirectedTest.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "sim/sim_exit.hh" RubyDirectedTester::RubyDirectedTester(const Params *p) diff -r 2cb386a6b972 -r 228050cfc21e src/cpu/testers/rubytest/Check.cc --- a/src/cpu/testers/rubytest/Check.cc Sun Aug 19 22:38:21 2012 -0500 +++ b/src/cpu/testers/rubytest/Check.cc Mon Aug 20 14:02:20 2012 -0500 @@ -313,7 +313,7 @@ proc, address, data, byte_number, (int)m_value + byte_number, (int)data->getByte(byte_number), *this, - g_eventQueue_ptr->getTime()); + g_system_ptr->getTime()); } } DPRINTF(RubyTest, "Action/check success\n"); @@ -328,7 +328,7 @@ } else { panic("Unexpected TesterStatus: %s proc: %d data: %s m_status: %s " "time: %d\n", - *this, proc, data, m_status, g_eventQueue_ptr->getTime()); + *this, proc, data, m_status, g_system_ptr->getTime()); } DPRINTF(RubyTest, "proc: %d, Address: 0x%x\n", proc, diff -r 2cb386a6b972 -r 228050cfc21e src/cpu/testers/rubytest/RubyTester.cc --- a/src/cpu/testers/rubytest/RubyTester.cc Sun Aug 19 22:38:21 2012 -0500 +++ b/src/cpu/testers/rubytest/RubyTester.cc Mon Aug 20 14:02:20 2012 -0500 @@ -45,7 +45,6 @@ #include "debug/RubyTest.hh" #include "mem/ruby/common/Global.hh" #include "mem/ruby/common/SubBlock.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "mem/ruby/system/System.hh" #include "sim/sim_exit.hh" #include "sim/system.hh" @@ -192,7 +191,7 @@ RubyTester::hitCallback(NodeID proc, SubBlock* data) { // Mark that we made progress - m_last_progress_vector[proc] = g_eventQueue_ptr->getTime(); + m_last_progress_vector[proc] = g_system_ptr->getTime(); DPRINTF(RubyTest, "completed request for proc: %d\n", proc); DPRINTF(RubyTest, "addr: 0x%x, size: %d, data: ", @@ -230,7 +229,7 @@ RubyTester::checkForDeadlock() { int size = m_last_progress_vector.size(); - Time current_time = g_eventQueue_ptr->getTime(); + Time current_time = g_system_ptr->getTime(); for (int processor = 0; processor < size; processor++) { if ((current_time - m_last_progress_vector[processor]) > m_deadlock_threshold) { diff -r 2cb386a6b972 -r 228050cfc21e src/mem/ruby/buffers/MessageBuffer.hh --- a/src/mem/ruby/buffers/MessageBuffer.hh Sun Aug 19 22:38:21 2012 -0500 +++ b/src/mem/ruby/buffers/MessageBuffer.hh Mon Aug 20 14:02:20 2012 -0500 @@ -45,7 +45,6 @@ #include "mem/ruby/common/Address.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/ruby/common/Global.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" #include "mem/ruby/slicc_interface/Message.hh" class MessageBuffer @@ -70,7 +69,7 @@ isReady() const { return ((m_prio_heap.size() > 0) && - (m_prio_heap.front().m_time <= g_eventQueue_ptr->getTime())); + (m_prio_heap.front().m_time <= g_system_ptr->getTime())); } void diff -r 2cb386a6b972 -r 228050cfc21e src/mem/ruby/buffers/MessageBuffer.cc --- a/src/mem/ruby/buffers/MessageBuffer.cc Sun Aug 19 22:38:21 2012 -0500 +++ b/src/mem/ruby/buffers/MessageBuffer.cc Mon Aug 20 14:02:20 2012 -0500 @@ -66,10 +66,10 @@ int MessageBuffer::getSize() { - if (m_time_last_time_size_checked == g_eventQueue_ptr->getTime()) { + if (m_time_last_time_size_checked == g_system_ptr->getTime()) { return m_size_last_time_size_checked; } else { - m_time_last_time_size_checked = g_eventQueue_ptr->getTime(); + m_time_last_time_size_checked = g_system_ptr->getTime(); m_size_last_time_size_checked = m_size; return m_size; } @@ -89,11 +89,11 @@ // until next cycle, but enqueue operations effect the visible // size immediately int current_size = max(m_size_at_cycle_start, m_size); - if (m_time_last_time_pop < g_eventQueue_ptr->getTime()) { + if (m_time_last_time_pop < g_system_ptr->getTime()) { // no pops this cycle - m_size is correct current_size = m_size; } else { - if (m_time_last_time_enqueue < g_eventQueue_ptr->getTime()) { + if (m_time_last_time_enqueue < g_system_ptr->getTime()) { // no enqueues this cycle - m_size_at_cycle_start is correct current_size = m_size_at_cycle_start; } else { @@ -155,9 +155,9 @@ m_size++; // record current time incase we have a pop that also adjusts my size - if (m_time_last_time_enqueue < g_eventQueue_ptr->getTime()) { + if (m_time_last_time_enqueue < g_system_ptr->getTime()) { m_msgs_this_cycle = 0; // first msg this cycle - m_time_last_time_enqueue = g_eventQueue_ptr->getTime(); + m_time_last_time_enqueue = g_system_ptr->getTime(); } m_msgs_this_cycle++; @@ -168,7 +168,7 @@ // Calculate the arrival time of the message, that is, the first // cycle the message can be dequeued. assert(delta>0); - Time current_time = g_eventQueue_ptr->getTime(); + Time current_time = g_system_ptr->getTime(); Time arrival_time = 0; if (!RubySystem::getRandomization() || (m_randomization == false)) { // No randomization @@ -192,10 +192,10 @@ panic("FIFO ordering violated: %s name: %s current time: %d " "delta: %d arrival_time: %d last arrival_time: %d\n", *this, m_name, - current_time * g_eventQueue_ptr->getClock(), - delta * g_eventQueue_ptr->getClock(), - arrival_time * g_eventQueue_ptr->getClock(), - m_last_arrival_time * g_eventQueue_ptr->getClock()); + current_time * g_system_ptr->getClock(), + delta * g_system_ptr->getClock(), + arrival_time * g_system_ptr->getClock(), + m_last_arrival_time * g_system_ptr->getClock()); } } @@ -208,10 +208,10 @@ Message* msg_ptr = message.get(); assert(msg_ptr != NULL); - assert(g_eventQueue_ptr->getTime() >= msg_ptr->getLastEnqueueTime() && + assert(g_system_ptr->getTime() >= msg_ptr->getLastEnqueueTime() && "ensure we aren't dequeued early"); - msg_ptr->setDelayedCycles(g_eventQueue_ptr->getTime() - + msg_ptr->setDelayedCycles(g_system_ptr->getTime() - msg_ptr->getLastEnqueueTime() + msg_ptr->getDelayedCycles()); msg_ptr->setLastEnqueueTime(arrival_time); @@ -223,12 +223,12 @@ greater()); DPRINTF(RubyQueue, "Enqueue with arrival_time %lld.\n", - arrival_time * g_eventQueue_ptr->getClock()); + arrival_time * g_system_ptr->getClock()); DPRINTF(RubyQueue, "Enqueue Message: %s.\n", (*(message.get()))); // Schedule the wakeup if (m_consumer_ptr != NULL) { - g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, arrival_time); + m_consumer_ptr->scheduleEventAbsolute(arrival_time); m_consumer_ptr->storeEventInfo(m_vnet_id); } else { panic("No consumer: %s name: %s\n", *this, m_name); @@ -287,9 +287,9 @@ // record previous size and time so the current buffer size isn't // adjusted until next cycle - if (m_time_last_time_pop < g_eventQueue_ptr->getTime()) { + if (m_time_last_time_pop < g_system_ptr->getTime()) { m_size_at_cycle_start = m_size; - m_time_last_time_pop = g_eventQueue_ptr->getTime(); + m_time_last_time_pop = g_system_ptr->getTime(); } m_size--; } @@ -315,12 +315,12 @@ MessageBufferNode node = m_prio_heap.front(); pop_heap(m_prio_heap.begin(), m_prio_heap.end(), greater()); - node.m_time = g_eventQueue_ptr->getTime() + m_recycle_latency; + node.m_time = g_system_ptr->getTime() + m_recycle_latency; m_prio_heap.back() = node; push_heap(m_prio_heap.begin(), m_prio_heap.end(), greater()); - g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, - g_eventQueue_ptr->getTime() + m_recycle_latency); + m_consumer_ptr->scheduleEventAbsolute(g_system_ptr->getTime() + + m_recycle_latency); } void @@ -335,7 +335,7 @@ // while(!m_stall_msg_map[addr].empty()) { m_msg_counter++; - MessageBufferNode msgNode(g_eventQueue_ptr->getTime() + 1, + MessageBufferNode msgNode(g_system_ptr->getTime() + 1, m_msg_counter, m_stall_msg_map[addr].front()); @@ -343,7 +343,7 @@ push_heap(m_prio_heap.begin(), m_prio_heap.end(), greater()); - g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, msgNode.m_time); + m_consumer_ptr->scheduleEventAbsolute(msgNode.m_time); m_stall_msg_map[addr].pop_front(); } m_stall_msg_map.erase(addr); @@ -364,7 +364,7 @@ while(!(map_iter->second).empty()) { m_msg_counter++; - MessageBufferNode msgNode(g_eventQueue_ptr->getTime() + 1, + MessageBufferNode msgNode(g_system_ptr->getTime() + 1, m_msg_counter, (map_iter->second).front()); @@ -372,8 +372,7 @@ push_heap(m_prio_heap.begin(), m_prio_heap.end(), greater()); - g_eventQueue_ptr->scheduleEventAbsolute(m_consumer_ptr, - msgNode.m_time); + m_consumer_ptr->scheduleEventAbsolute(msgNode.m_time); (map_iter->second).pop_front(); } } @@ -407,8 +406,8 @@ // this function should only be called on dequeue // ensure the msg hasn't been enqueued - assert(msg_ptr->getLastEnqueueTime() <= g_eventQueue_ptr->getTime()); - msg_ptr->setDelayedCycles(g_eventQueue_ptr->getTime() - + assert(msg_ptr->getLastEnqueueTime() <= g_system_ptr->getTime()); + msg_ptr->setDelayedCycles(g_system_ptr->getTime() - msg_ptr->getLastEnqueueTime() + msg_ptr->getDelayedCycles()); delay_cycles = msg_ptr->getDelayedCycles(); diff -r 2cb386a6b972 -r 228050cfc21e src/mem/ruby/common/Consumer.hh --- a/src/mem/ruby/common/Consumer.hh Sun Aug 19 22:38:21 2012 -0500 +++ b/src/mem/ruby/common/Consumer.hh Mon Aug 20 14:02:20 2012 -0500 @@ -38,10 +38,8 @@ #include #include -#include "mem/ruby/common/Global.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" - -class MessageBuffer; +#include "mem/ruby/common/TypeDefines.hh" +#include "sim/eventq.hh" class Consumer { @@ -55,55 +53,68 @@ ~Consumer() { } - void - triggerWakeup(RubyEventQueue *eventQueue) - { - Time time = eventQueue->getTime(); - if (m_last_wakeup != time) { - wakeup(); - m_last_wakeup = time; - } - } - virtual void wakeup() = 0; virtual void print(std::ostream& out) const = 0; virtual void storeEventInfo(int info) {} - const Time& + const Tick& getLastScheduledWakeup() const { return m_last_scheduled_wakeup; } void - setLastScheduledWakeup(const Time& time) + setLastScheduledWakeup(const Tick& time) { m_last_scheduled_wakeup = time; } bool - alreadyScheduled(Time time) + alreadyScheduled(Tick time) { return m_scheduled_wakeups.find(time) != m_scheduled_wakeups.end(); } void - insertScheduledWakeupTime(Time time) + insertScheduledWakeupTime(Tick time) { m_scheduled_wakeups.insert(time); } void - removeScheduledWakeupTime(Time time) + removeScheduledWakeupTime(Tick time) { assert(alreadyScheduled(time)); m_scheduled_wakeups.erase(time); } + void scheduleEvent(EventManager* em, Time timeDelta); + void scheduleEventAbsolute(EventManager* em, Time timeAbs); + void scheduleEvent(Time timeDelta); + void scheduleEventAbsolute(Time timeAbs); + private: - Time m_last_scheduled_wakeup; - std::set