changeset ebd44da818d5 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ebd44da818d5
description:
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 <[email protected]>
diffstat:
src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc | 2 +-
src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diffs (24 lines):
diff -r cd0a9c975c8c -r ebd44da818d5
src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc Thu Oct
17 10:20:45 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc Wed Oct
30 10:35:05 2013 -0500
@@ -133,7 +133,7 @@
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 -r cd0a9c975c8c -r ebd44da818d5
src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc Thu Oct
17 10:20:45 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc Wed Oct
30 10:35:05 2013 -0500
@@ -124,7 +124,7 @@
{
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;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev