From ce12d4bc632a081dfc76cfda97d570e0381cd2b4 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Thu, 22 Jan 2015 05:00:54 -0500 Subject: x86: Delay X86 table walk on receiving walker response This patch fixes a minor issue in the X86 page table walker where it ended up sending new request packets to the crossbar before the response processing was finished (recvTimingResp is directly calling sendTimingReq). Under certain conditions this caused the crossbar to see illegal combinations of request/response overlap, in turn causing problems with a slightly modified crossbar implementation. --- src/arch/x86/pagetable_walker.hh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/arch/x86/pagetable_walker.hh') diff --git a/src/arch/x86/pagetable_walker.hh b/src/arch/x86/pagetable_walker.hh index c6766689b..c8ec549fe 100644 --- a/src/arch/x86/pagetable_walker.hh +++ b/src/arch/x86/pagetable_walker.hh @@ -183,6 +183,11 @@ namespace X86ISA // Wrapper for checking for squashes before starting a translation. void startWalkWrapper(); + /** + * Event used to call startWalkWrapper. + **/ + EventWrapper startWalkWrapperEvent; + // Functions for dealing with packets. bool recvTimingResp(PacketPtr pkt); void recvRetry(); @@ -207,7 +212,8 @@ namespace X86ISA MemObject(params), port(name() + ".port", this), funcState(this, NULL, NULL, true), tlb(NULL), sys(params->system), masterId(sys->getMasterId(name())), - numSquashable(params->num_squash_per_cycle) + numSquashable(params->num_squash_per_cycle), + startWalkWrapperEvent(this) { } }; -- cgit v1.2.3