From: Matthew Poremba Date: Thu, 19 Jan 2017 16:58:49 +0000 (-0500) Subject: ruby: Check all VNETs for injection in garnet NetworkInterface X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=501f1709240f51d4debbdacb388f2d939aef9ca0;p=gem5.git 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. --- 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; } } }