From f0e9a2a08184bd4fe0549d79d3de7ba9575dbf57 Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Fri, 28 Oct 2016 18:23:50 -0700 Subject: [PATCH] Fix PutBlock after Release bug There is logic in the broadcast hub to skip the outer acquire if there is an outgoing release, since the data will be written out through the release channel. However, this will cause an issue in the case of PutBlock requests. If the tail beats of the PutBlock show up after the outer release has already been sent, the data will be corrupted. The fix is to make the outer release block if there are pending inner PutBlock beats. --- src/main/scala/uncore/agents/Broadcast.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/uncore/agents/Broadcast.scala b/src/main/scala/uncore/agents/Broadcast.scala index 53a7d780..6226b83e 100644 --- a/src/main/scala/uncore/agents/Broadcast.scala +++ b/src/main/scala/uncore/agents/Broadcast.scala @@ -175,6 +175,7 @@ class BufferedBroadcastAcquireTracker(trackerId: Int)(implicit p: Parameters) // If there was a writeback, forward it outwards outerRelease( + block_orel = pending_put_data(vol_ognt_counter.up.idx), coh = outer_coh.onHit(M_XWR), data = data_buffer(vol_ognt_counter.up.idx))