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>
This commit is contained in:
Emilio Castillo
2013-10-30 10:35:05 -05:00
parent 4e9d91016a
commit 80fa6a0edc
2 changed files with 2 additions and 2 deletions

View File

@@ -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)) {

View File

@@ -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;