From 536c72333f71f6e816d4b5e95e39754638bd76ea Mon Sep 17 00:00:00 2001 From: Andrew Bardsley Date: Wed, 29 Oct 2014 23:18:24 -0500 Subject: [PATCH] cpu: Fix barrier push to store buffer when full bug in Minor This patch fixes a bug where a completing load or store which is also a barrier can push a barrier into the store buffer without first checking that there is a free slot. The bug was not fatal but would print a warning that the store buffer was full when inserting. --- src/cpu/minor/lsq.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc index 0a473af89..cae0d3666 100644 --- a/src/cpu/minor/lsq.cc +++ b/src/cpu/minor/lsq.cc @@ -1370,9 +1370,13 @@ LSQ::findResponse(MinorDynInstPtr inst) /* Same instruction and complete access or a store that's * capable of being moved to the store buffer */ if (request->inst->id == inst->id) { - if (request->isComplete() || - (request->state == LSQRequest::StoreToStoreBuffer && - storeBuffer.canInsert())) + bool complete = request->isComplete(); + bool can_store = storeBuffer.canInsert(); + bool to_store_buffer = request->state == + LSQRequest::StoreToStoreBuffer; + + if ((complete && !(request->isBarrier() && !can_store)) || + (to_store_buffer && can_store)) { ret = request; } -- 2.30.2