From 4489e37344fd22a8f0916c352bf081325b9b52e7 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sun, 23 Jan 2022 04:00:25 -0800 Subject: [PATCH] arch-x86: Fix writing back 32 bit PTEs in the walker. The page table walker might need to write back page table entries to set their accessed bits. It was already checking whether the access was 32 or 64 bit when the PTE was retrieved from the incoming packet, but was not checking the size when it was written back out, causing an assert to fail when working with 32 bit legacy PTEs. Change-Id: I7d02241cad20681e6cac0111edf2454335c466fa Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/55808 Reviewed-by: Matthew Poremba Maintainer: Gabe Black Tested-by: kokoro --- src/arch/x86/pagetable_walker.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/arch/x86/pagetable_walker.cc b/src/arch/x86/pagetable_walker.cc index 56358959d2..15c3a1eaf7 100644 --- a/src/arch/x86/pagetable_walker.cc +++ b/src/arch/x86/pagetable_walker.cc @@ -530,7 +530,10 @@ Walker::WalkerState::stepWalk(PacketPtr &write) // value back to memory. if (doWrite) { write = oldRead; - write->setLE(pte); + if (dataSize == 8) + write->setLE(pte); + else + write->setLE(pte); write->cmd = MemCmd::WriteReq; } else { write = NULL;