diff options
author | Andreas Sandberg <Andreas.Sandberg@arm.com> | 2013-01-07 13:05:40 -0500 |
---|---|---|
committer | Andreas Sandberg <Andreas.Sandberg@arm.com> | 2013-01-07 13:05:40 -0500 |
commit | 94561dd5268d139b721561166cbce94170701c2c (patch) | |
tree | 2e534ce3e0cdf0a9bbdec41978ef3bb775eb2929 /src/arch/x86 | |
parent | d44f2f611ff51941a8702a33a0bc57d7f574e462 (diff) | |
download | gem5-94561dd5268d139b721561166cbce94170701c2c.tar.xz |
arch: Add support for invalidating TLBs when draining
This patch adds support for the memInvalidate() drain method. TLB
flushing is requested by calling the virtual flushAll() method on the
TLB.
Note: This patch renames invalidateAll() to flushAll() on x86 and
SPARC to make the interface consistent across all supported
architectures.
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/isa.cc | 12 | ||||
-rw-r--r-- | src/arch/x86/tlb.cc | 4 | ||||
-rw-r--r-- | src/arch/x86/tlb.hh | 6 | ||||
-rw-r--r-- | src/arch/x86/utility.cc | 4 |
4 files changed, 12 insertions, 14 deletions
diff --git a/src/arch/x86/isa.cc b/src/arch/x86/isa.cc index 9dbab8c7e..852ce6bc8 100644 --- a/src/arch/x86/isa.cc +++ b/src/arch/x86/isa.cc @@ -191,8 +191,8 @@ ISA::setMiscReg(int miscReg, MiscReg val, ThreadContext * tc) } } if (toggled.pg) { - tc->getITBPtr()->invalidateAll(); - tc->getDTBPtr()->invalidateAll(); + tc->getITBPtr()->flushAll(); + tc->getDTBPtr()->flushAll(); } //This must always be 1. newCR0.et = 1; @@ -208,15 +208,15 @@ ISA::setMiscReg(int miscReg, MiscReg val, ThreadContext * tc) case MISCREG_CR2: break; case MISCREG_CR3: - tc->getITBPtr()->invalidateNonGlobal(); - tc->getDTBPtr()->invalidateNonGlobal(); + tc->getITBPtr()->flushNonGlobal(); + tc->getDTBPtr()->flushNonGlobal(); break; case MISCREG_CR4: { CR4 toggled = regVal[miscReg] ^ val; if (toggled.pae || toggled.pse || toggled.pge) { - tc->getITBPtr()->invalidateAll(); - tc->getDTBPtr()->invalidateAll(); + tc->getITBPtr()->flushAll(); + tc->getDTBPtr()->flushAll(); } } break; diff --git a/src/arch/x86/tlb.cc b/src/arch/x86/tlb.cc index fb7dac02e..33de0129a 100644 --- a/src/arch/x86/tlb.cc +++ b/src/arch/x86/tlb.cc @@ -129,7 +129,7 @@ TLB::lookup(Addr va, bool update_lru) } void -TLB::invalidateAll() +TLB::flushAll() { DPRINTF(TLB, "Invalidating all entries.\n"); for (unsigned i = 0; i < size; i++) { @@ -148,7 +148,7 @@ TLB::setConfigAddress(uint32_t addr) } void -TLB::invalidateNonGlobal() +TLB::flushNonGlobal() { DPRINTF(TLB, "Invalidating all non global entries.\n"); for (unsigned i = 0; i < size; i++) { diff --git a/src/arch/x86/tlb.hh b/src/arch/x86/tlb.hh index 85bcead57..39ae240af 100644 --- a/src/arch/x86/tlb.hh +++ b/src/arch/x86/tlb.hh @@ -75,8 +75,6 @@ namespace X86ISA typedef X86TLBParams Params; TLB(const Params *p); - void dumpAll(); - TlbEntry *lookup(Addr va, bool update_lru = true); void setConfigAddress(uint32_t addr); @@ -90,9 +88,9 @@ namespace X86ISA public: Walker *getWalker(); - void invalidateAll(); + void flushAll(); - void invalidateNonGlobal(); + void flushNonGlobal(); void demapPage(Addr va, uint64_t asn); diff --git a/src/arch/x86/utility.cc b/src/arch/x86/utility.cc index 65c1a9d32..e56e96b99 100644 --- a/src/arch/x86/utility.cc +++ b/src/arch/x86/utility.cc @@ -213,8 +213,8 @@ copyMiscRegs(ThreadContext *src, ThreadContext *dest) dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i)); } - dest->getITBPtr()->invalidateAll(); - dest->getDTBPtr()->invalidateAll(); + dest->getITBPtr()->flushAll(); + dest->getDTBPtr()->flushAll(); } void |