From: Kyle Roarty Date: Tue, 10 Nov 2020 06:36:05 +0000 (-0600) Subject: mem-ruby: Fix deadlock in VIPERCoalescer X-Git-Tag: develop-gem5-snapshot~461 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a107f62b41e37c421344e3c88ebf32be7d6020e9;p=gem5.git mem-ruby: Fix deadlock in VIPERCoalescer Certain instructions (some atomics and buffer_wbinvl1_vol) deadlock in the coalescer, where sendTimingReq fails, fails a retry, and then never retries again. This fix sets m_cache_inv_pkt to null before calling completeHitCallback(), as that allows the failed packets to be retried again. Change-Id: I4a51c741360f385f8b4c3f2a31a9410f18e095d9 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/37477 Reviewed-by: Matt Sinclair Reviewed-by: Matthew Poremba Maintainer: Matt Sinclair Tested-by: kokoro --- diff --git a/src/mem/ruby/system/VIPERCoalescer.cc b/src/mem/ruby/system/VIPERCoalescer.cc index 111f9f22b..1aea4a364 100644 --- a/src/mem/ruby/system/VIPERCoalescer.cc +++ b/src/mem/ruby/system/VIPERCoalescer.cc @@ -269,8 +269,8 @@ VIPERCoalescer::invTCPCallback(Addr addr) if (m_num_pending_invs == 0) { std::vector pkt_list { m_cache_inv_pkt }; - completeHitCallback(pkt_list); m_cache_inv_pkt = nullptr; + completeHitCallback(pkt_list); } }