arch, cpu: Do not forward snoops to table walker

This patch simplifies the overall CPU by changing the TLB caches such
that they do not forward snoops to the table walker port(s). Note that
only ARM and X86 are affected.

There is no reason for the ports to snoop as they do not actually take
any action, and from a performance point of view we are better of not
snooping more than we have to.

Should it at a later point be required to snoop for a particular TLB
design it is easy enough to add it back.
This commit is contained in:
Andreas Hansson 2015-05-05 03:22:27 -04:00
parent 14e5b2ea55
commit 554ddc7c07
4 changed files with 3 additions and 42 deletions

View file

@ -79,4 +79,5 @@ class PageTableWalkerCache(BaseCache):
mshrs = 10 mshrs = 10
size = '1kB' size = '1kB'
tgts_per_mshr = 12 tgts_per_mshr = 12
forward_snoops = False
is_top_level = True is_top_level = True

View file

@ -174,7 +174,7 @@ class O3_ARM_v7aWalkCache(BaseCache):
assoc = 8 assoc = 8
write_buffers = 16 write_buffers = 16
is_top_level = True is_top_level = True
forward_snoops = False
# L2 Cache # L2 Cache
class O3_ARM_v7aL2(BaseCache): class O3_ARM_v7aL2(BaseCache):

View file

@ -57,40 +57,8 @@ class Stage2MMU : public SimObject
protected: protected:
/**
* A snooping DMA port that currently does nothing besides
* extending the DMA port to accept snoops without
* complaining. Currently we take no action on any snoops.
*/
class SnoopingDmaPort : public DmaPort
{
protected:
virtual void recvTimingSnoopReq(PacketPtr pkt)
{ }
virtual Tick recvAtomicSnoop(PacketPtr pkt)
{ return 0; }
virtual void recvFunctionalSnoop(PacketPtr pkt)
{ }
virtual bool isSnooping() const { return true; }
public:
/**
* A snooping DMA port merely calls the construtor of the DMA
* port.
*/
SnoopingDmaPort(MemObject *dev, System *s) :
DmaPort(dev, s)
{ }
};
/** Port to issue translation requests from */ /** Port to issue translation requests from */
SnoopingDmaPort port; DmaPort port;
/** Request id for requests generated by this MMU */ /** Request id for requests generated by this MMU */
MasterID masterId; MasterID masterId;

View file

@ -70,15 +70,7 @@ namespace X86ISA
Walker *walker; Walker *walker;
bool recvTimingResp(PacketPtr pkt); bool recvTimingResp(PacketPtr pkt);
/**
* Snooping a coherence request, do nothing.
*/
void recvTimingSnoopReq(PacketPtr pkt) { }
Tick recvAtomicSnoop(PacketPtr pkt) { return 0; }
void recvFunctionalSnoop(PacketPtr pkt) { }
void recvReqRetry(); void recvReqRetry();
bool isSnooping() const { return true; }
}; };
friend class WalkerPort; friend class WalkerPort;