diff options
author | Gedare Bloom <gedare@rtems.org> | 2013-05-21 11:40:11 -0500 |
---|---|---|
committer | Gedare Bloom <gedare@rtems.org> | 2013-05-21 11:40:11 -0500 |
commit | 22b60c57e697289baa205f11b164f356363c2bee (patch) | |
tree | 4206562aae3cdb8b82a3ec8e873f15444502c678 /src/arch/x86/pagetable_walker.hh | |
parent | 30fe807316ebc4b6c37ca522b3cfd6c592ca9003 (diff) | |
download | gem5-22b60c57e697289baa205f11b164f356363c2bee.tar.xz |
x86: Squash outstanding walks when instructions are squashed.
This is the x86 version of the ARM changeset baa17ba80e06. In case an
instruction has been squashed by the o3 cpu, this patch allows page
table walker to avoid carrying out a pending translation that the
instruction requested for.
Diffstat (limited to 'src/arch/x86/pagetable_walker.hh')
-rw-r--r-- | src/arch/x86/pagetable_walker.hh | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/arch/x86/pagetable_walker.hh b/src/arch/x86/pagetable_walker.hh index c2781ca1b..c6766689b 100644 --- a/src/arch/x86/pagetable_walker.hh +++ b/src/arch/x86/pagetable_walker.hh @@ -87,6 +87,7 @@ namespace X86ISA // State to track each walk of the page table class WalkerState { + friend class Walker; private: enum State { Ready, @@ -176,6 +177,12 @@ namespace X86ISA System * sys; MasterID masterId; + // The number of outstanding walks that can be squashed per cycle. + unsigned numSquashable; + + // Wrapper for checking for squashes before starting a translation. + void startWalkWrapper(); + // Functions for dealing with packets. bool recvTimingResp(PacketPtr pkt); void recvRetry(); @@ -199,7 +206,8 @@ namespace X86ISA Walker(const Params *params) : MemObject(params), port(name() + ".port", this), funcState(this, NULL, NULL, true), tlb(NULL), sys(params->system), - masterId(sys->getMasterId(name())) + masterId(sys->getMasterId(name())), + numSquashable(params->num_squash_per_cycle) { } }; |