From 33dc762d67b0337e12c1cfcdbbd14916c84d92de Mon Sep 17 00:00:00 2001 From: Anouk Van Laer Date: Wed, 24 Oct 2018 09:49:53 +0100 Subject: 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 Reviewed-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/13782 Maintainer: Andreas Sandberg --- src/arch/arm/stage2_lookup.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/arch/arm/stage2_lookup.cc b/src/arch/arm/stage2_lookup.cc index e74ec9071..b5e11638b 100644 --- a/src/arch/arm/stage2_lookup.cc +++ b/src/arch/arm/stage2_lookup.cc @@ -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 -- cgit v1.2.3