From: Anouk Van Laer Date: Fri, 16 Nov 2018 15:45:00 +0000 (+0000) Subject: arch, arm: Update miscRegs in getTE X-Git-Tag: v19.0.0.0~753 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cb2be9940a055bf73647e9eef3779992d5af36b7;p=gem5.git arch, arm: Update miscRegs in getTE Normally, a translation will start via translateTiming/functional which will check if the miscRegs have been updated and if so, will update the TLB state accordingly. However, in a 2 stage system, if there is a hit in stage 1, the resulting IPA will be sent to the S2-TLB for translation via a getTE() function call (via the stage2_lookup object). This will cause the state of the S2-TLB to be out of sync. Change-Id: I117e4032fc76d7d31f4f999887b5573a7e5811e6 Reviewed-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/14995 Tested-by: kokoro Maintainer: Giacomo Travaglini --- diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index f30e195c1..2b50d4b28 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -1418,6 +1418,11 @@ TLB::getTE(TlbEntry **te, const RequestPtr &req, ThreadContext *tc, Mode mode, Translation *translation, bool timing, bool functional, bool is_secure, TLB::ArmTranslationType tranType) { + // In a 2-stage system, the IPA->PA translation can be started via this + // call so make sure the miscRegs are correct. + if (isStage2) { + updateMiscReg(tc, tranType); + } bool is_fetch = (mode == Execute); bool is_write = (mode == Write);