arch, arm: Return s1Req upon fault in s2Lookup

When a s2Lookup object is created, a new request is created, based
upon the original, stage 1 request sent out by the CPU. When a fault
occurs during the second stage of translation, this new request is
returned. This can lead to issues with the O3 CPU. The O3 fetch stage
will not acknowledge the fault as it is a different request than the
one it sent out and does not contain a contextID. This commit
rectifies this.

Change-Id: I21cb7377a59aed9d90d99f048b2106eaf219e93a
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/13782
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
Anouk Van Laer
2018-10-24 09:49:53 +01:00
parent 0e9da43cb6
commit 33dc762d67

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2013, 2016 ARM Limited
* Copyright (c) 2010-2013, 2016, 2018 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -191,7 +191,8 @@ Stage2LookUp::finish(const Fault &_fault, const RequestPtr &req,
mergeTe(req, mode);
if (fault != NoFault) {
transState->finish(fault, req, tc, mode);
// Returning with a fault requires the original request
transState->finish(fault, s1Req, tc, mode);
} else if (timing) {
// Now notify the original stage 1 translation that we finally have
// a result