From: Andrew Bardsley Date: Thu, 30 Oct 2014 04:18:24 +0000 (-0500) Subject: cpu: Fix barrier push to store buffer when full bug in Minor X-Git-Tag: stable_2015_04_15~163 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=536c72333f71f6e816d4b5e95e39754638bd76ea;p=gem5.git 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. --- 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; }