From 501f1709240f51d4debbdacb388f2d939aef9ca0 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Thu, 19 Jan 2017 11:58:49 -0500 Subject: [PATCH] ruby: Check all VNETs for injection in garnet NetworkInterface The NetworkInterface wakeup currently iterates over all VNETs and breaks the loop if a VNET is unable to allocate a VC. This can cause a deadlock if a lower numbered VNET is unable to allocate a VC while a higher numbered VNET has idle VCs. This seems like a bug as Garnet 1.0 uses a while loop over an if-statement, suggesting the break was intended for this while loop. This patch removes the break statement, which allows up to one message to be dequeued from a VNET and injected into the network. --- src/mem/ruby/network/garnet2.0/NetworkInterface.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mem/ruby/network/garnet2.0/NetworkInterface.cc b/src/mem/ruby/network/garnet2.0/NetworkInterface.cc index 0ac55d260..fe9f1b87e 100644 --- a/src/mem/ruby/network/garnet2.0/NetworkInterface.cc +++ b/src/mem/ruby/network/garnet2.0/NetworkInterface.cc @@ -159,8 +159,6 @@ NetworkInterface::wakeup() msg_ptr = b->peekMsgPtr(); if (flitisizeMessage(msg_ptr, vnet)) { b->dequeue(curTime); - } else { - break; } } }