diff options
author | Emilio Castillo <castilloe@unican.es> | 2013-10-30 10:35:05 -0500 |
---|---|---|
committer | Emilio Castillo <castilloe@unican.es> | 2013-10-30 10:35:05 -0500 |
commit | 80fa6a0edcf845974e632fdb40f06dc0bb1aaa31 (patch) | |
tree | 26ae5184b5dbea98f89f8375a0556df33c5a4aa6 /src/mem | |
parent | 4e9d91016a9f23b2ec6a73c01713e4a363d2593a (diff) | |
download | gem5-80fa6a0edcf845974e632fdb40f06dc0bb1aaa31.tar.xz |
ruby: Fixed a deadlock when restoring a checkpoint with garnet
This patch fixes a problem where in Garnet, the enqueue time in the
VCallocator and the SWallocator which is of type Cycles was being stored
inside a variable with int type.
This lead to a known problem restoring checkpoints with garnet & the fixed
pipeline enabled. That value was really big and didn't fit in the variable
overflowing it, therefore some conditions on the VC allocation stage & the
SW allocation stage were not met and the packets didn't advance through the
network, leading to a deadlock panic right after the checkpoint was restored.
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc | 2 | ||||
-rw-r--r-- | src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc index b12c5416c..e292745c1 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc @@ -133,7 +133,7 @@ bool SWallocator_d::is_candidate_inport(int inport, int invc) { int outport = m_input_unit[inport]->get_route(invc); - int t_enqueue_time = m_input_unit[inport]->get_enqueue_time(invc); + Cycles t_enqueue_time = m_input_unit[inport]->get_enqueue_time(invc); int t_vnet = get_vnet(invc); int vc_base = t_vnet*m_vc_per_vnet; if ((m_router->get_net_ptr())->isVNetOrdered(t_vnet)) { diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc index 9569810e8..e9e2226a8 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc @@ -124,7 +124,7 @@ VCallocator_d::is_invc_candidate(int inport_iter, int invc_iter) { int outport = m_input_unit[inport_iter]->get_route(invc_iter); int vnet = get_vnet(invc_iter); - int t_enqueue_time = + Cycles t_enqueue_time = m_input_unit[inport_iter]->get_enqueue_time(invc_iter); int invc_base = vnet*m_vc_per_vnet; |