From 86b1c0fd540b57c1e7bba948ad0417f22f90eb41 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Tue, 18 Sep 2012 22:46:34 -0500 Subject: ruby: avoid using g_system_ptr for event scheduling This patch removes the use of g_system_ptr for event scheduling. Each consumer object now needs to specify upfront an EventManager object it would use for scheduling events. This makes the ruby memory system more amenable for a multi-threaded simulation. --- src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh | 1 + src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc | 1 + src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc | 4 ++-- src/mem/ruby/network/garnet/flexible-pipeline/Router.cc | 2 +- src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src/mem/ruby/network/garnet/flexible-pipeline') diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh b/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh index 04a4ac95a..a2d6db60b 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh @@ -38,6 +38,7 @@ class FlexibleConsumer : public Consumer { public: + FlexibleConsumer(EventManager *em) : Consumer(em) {} virtual bool isBufferNotFull(int vc, int inport) { return true; } virtual void grant_vc(int out_port, int vc, Time grant_time) {} virtual void release_vc(int out_port, int vc, Time release_time) {} diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc index cc7dd7146..824acce80 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc @@ -44,6 +44,7 @@ using m5::stl_helpers::deletePointers; NetworkInterface::NetworkInterface(int id, int virtual_networks, GarnetNetwork *network_ptr) + : FlexibleConsumer(network_ptr) { m_id = id; m_net_ptr = network_ptr; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc index fb7c9bd44..3908d34c3 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc @@ -32,7 +32,7 @@ #include "mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh" NetworkLink::NetworkLink(const Params *p) - : SimObject(p) + : SimObject(p), FlexibleConsumer(this) { linkBuffer = new flitBuffer(); m_in_port = 0; @@ -140,7 +140,7 @@ NetworkLink::wakeup() flit *t_flit = link_srcQueue->getTopFlit(); t_flit->set_time(g_system_ptr->getTime() + m_latency); linkBuffer->insert(t_flit); - link_consumer->scheduleEvent(this, m_latency); + link_consumer->scheduleEvent(m_latency); m_link_utilized++; m_vc_load[t_flit->get_vc()]++; } diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc index 28e9fc497..88361d35a 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc @@ -41,7 +41,7 @@ using namespace std; using m5::stl_helpers::deletePointers; Router::Router(const Params *p) - : BasicRouter(p) + : BasicRouter(p), FlexibleConsumer(this) { m_id = p->router_id; m_virtual_networks = p->virt_nets; diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc b/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc index e68e1b12f..5ed336699 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc @@ -32,6 +32,7 @@ #include "mem/ruby/network/garnet/flexible-pipeline/VCarbiter.hh" VCarbiter::VCarbiter(Router *router) + : Consumer(router) { m_router = router; } -- cgit v1.2.3