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:
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user