summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/garnet2.0/NetworkInterface.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/garnet2.0/NetworkInterface.cc')
-rw-r--r--src/mem/ruby/network/garnet2.0/NetworkInterface.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mem/ruby/network/garnet2.0/NetworkInterface.cc b/src/mem/ruby/network/garnet2.0/NetworkInterface.cc
index 6bdaf39af..0ac55d260 100644
--- a/src/mem/ruby/network/garnet2.0/NetworkInterface.cc
+++ b/src/mem/ruby/network/garnet2.0/NetworkInterface.cc
@@ -50,7 +50,9 @@ using m5::stl_helpers::deletePointers;
NetworkInterface::NetworkInterface(const Params *p)
: ClockedObject(p), Consumer(this), m_id(p->id),
m_virtual_networks(p->virt_nets), m_vc_per_vnet(p->vcs_per_vnet),
- m_num_vcs(m_vc_per_vnet * m_virtual_networks)
+ m_num_vcs(m_vc_per_vnet * m_virtual_networks),
+ m_deadlock_threshold(p->garnet_deadlock_threshold),
+ vc_busy_counter(m_virtual_networks, 0)
{
m_router_id = -1;
m_vc_round_robin = 0;
@@ -314,9 +316,16 @@ NetworkInterface::calculateVC(int vnet)
if (m_out_vc_state[(vnet*m_vc_per_vnet) + delta]->isInState(
IDLE_, curCycle())) {
+ vc_busy_counter[vnet] = 0;
return ((vnet*m_vc_per_vnet) + delta);
}
}
+
+ vc_busy_counter[vnet] += 1;
+ panic_if(vc_busy_counter[vnet] > m_deadlock_threshold,
+ "%s: Possible network deadlock in vnet: %d at time: %llu \n",
+ name(), vnet, curTick());
+
return -1;
}