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 <mattdsinclair@gmail.com> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -269,8 +269,8 @@ VIPERCoalescer::invTCPCallback(Addr addr)
|
||||
|
||||
if (m_num_pending_invs == 0) {
|
||||
std::vector<PacketPtr> pkt_list { m_cache_inv_pkt };
|
||||
completeHitCallback(pkt_list);
|
||||
m_cache_inv_pkt = nullptr;
|
||||
completeHitCallback(pkt_list);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user