diff options
Diffstat (limited to 'src/cpu/o3')
-rw-r--r-- | src/cpu/o3/cpu.cc | 4 | ||||
-rw-r--r-- | src/cpu/o3/cpu.hh | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc index fd51cd123..55ef04ffc 100644 --- a/src/cpu/o3/cpu.cc +++ b/src/cpu/o3/cpu.cc @@ -117,6 +117,10 @@ template <class Impl> void FullO3CPU<Impl>::DcachePort::recvTimingSnoopReq(PacketPtr pkt) { + // X86 ISA: Snooping an invalidation for monitor/mwait + if(cpu->getCpuAddrMonitor()->doMonitor(pkt)) { + cpu->wakeup(); + } lsq->recvTimingSnoopReq(pkt); } diff --git a/src/cpu/o3/cpu.hh b/src/cpu/o3/cpu.hh index 96cd071e4..09b7db867 100644 --- a/src/cpu/o3/cpu.hh +++ b/src/cpu/o3/cpu.hh @@ -162,11 +162,13 @@ class FullO3CPU : public BaseO3CPU /** Pointer to LSQ. */ LSQ<Impl> *lsq; + FullO3CPU<Impl> *cpu; public: /** Default constructor. */ DcachePort(LSQ<Impl> *_lsq, FullO3CPU<Impl>* _cpu) - : MasterPort(_cpu->name() + ".dcache_port", _cpu), lsq(_lsq) + : MasterPort(_cpu->name() + ".dcache_port", _cpu), lsq(_lsq), + cpu(_cpu) { } protected: |