diff options
Diffstat (limited to 'src/mem/ruby/network/garnet2.0/NetworkInterface.cc')
-rw-r--r-- | src/mem/ruby/network/garnet2.0/NetworkInterface.cc | 11 |
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; } |