cpu-o3: Reset fault status for mem access in pushRequest
authorGabor Dozsa <gabor.dozsa@arm.com>
Thu, 15 Feb 2018 11:46:19 +0000 (11:46 +0000)
committerGabor Dozsa <gabor.dozsa@arm.com>
Mon, 8 Jul 2019 10:54:49 +0000 (10:54 +0000)
Reset the fault status always before translation is initiated in
pushRequest() in the LSQ. This avoids the problem when a strictly
ordered load needs to be re-executed multiple times. If the
translation is delayed at one of those attempts then the
internal panicFault (from the previous execution attempt) can get
fired at commit.

Change-Id: I0c22b2f7afd6e2cb00bc359a4a01042efd2d01d2
Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19388
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/cpu/o3/lsq_impl.hh

index 70621a5237562af4e012c5b7f8dc41926c12fe58..d4e0a289ee5b4d23c4714f9c5b1a7beac9bbccb6 100644 (file)
@@ -724,6 +724,10 @@ LSQ<Impl>::pushRequest(const DynInstPtr& inst, bool isLoad, uint8_t *data,
         inst->setRequest();
         req->taskId(cpu->taskId());
 
+        // There might be fault from a previous execution attempt if this is
+        // a strictly ordered load
+        inst->getFault() = NoFault;
+
         req->initiateTranslation();
     }