59c59
< BasePrefetcher::PrefetchInfo::PrefetchInfo(PacketPtr pkt, Addr addr)
---
> BasePrefetcher::PrefetchInfo::PrefetchInfo(PacketPtr pkt, Addr addr, bool miss)
62c62,63
< secure(pkt->isSecure())
---
> secure(pkt->isSecure()), size(pkt->req->getSize()), write(pkt->isWrite()),
> paddress(pkt->req->getPaddr()), cacheMiss(miss)
63a65,72
> unsigned int req_size = pkt->req->getSize();
> if (!write && miss) {
> data = nullptr;
> } else {
> data = new uint8_t[req_size];
> Addr offset = pkt->req->getPaddr() - pkt->getAddr();
> std::memcpy(data, &(pkt->getConstPtr<uint8_t>()[offset]), req_size);
> }
68c77,78
< secure(pfi.secure)
---
> secure(pfi.secure), size(pfi.size), write(pfi.write),
> paddress(pfi.paddress), cacheMiss(pfi.cacheMiss), data(nullptr)
78c88
< parent.probeNotify(pkt);
---
> parent.probeNotify(pkt, miss);
117c127
< BasePrefetcher::observeAccess(const PacketPtr &pkt) const
---
> BasePrefetcher::observeAccess(const PacketPtr &pkt, bool miss) const
119d128
< Addr addr = pkt->getAddr();
123d131
< bool is_secure = pkt->isSecure();
134,135c142
< return !inCache(addr, is_secure) &&
< !inMissQueue(addr, is_secure);
---
> return miss;
196c203
< BasePrefetcher::probeNotify(const PacketPtr &pkt)
---
> BasePrefetcher::probeNotify(const PacketPtr &pkt, bool miss)
202a210,212
> if (!pkt->req->hasPaddr()) {
> panic("Request must have a physical address");
> }
209c219
< if (observeAccess(pkt)) {
---
> if (observeAccess(pkt, miss)) {
211c221
< PrefetchInfo pfi(pkt, pkt->req->getVaddr());
---
> PrefetchInfo pfi(pkt, pkt->req->getVaddr(), miss);
213,214c223,224
< } else if (!useVirtualAddresses && pkt->req->hasPaddr()) {
< PrefetchInfo pfi(pkt, pkt->req->getPaddr());
---
> } else if (!useVirtualAddresses) {
> PrefetchInfo pfi(pkt, pkt->req->getPaddr(), miss);
230,231c240,243
< listeners.push_back(new PrefetchListener(*this, pm, "Miss"));
< listeners.push_back(new PrefetchListener(*this, pm, "Fill", true));
---
> listeners.push_back(new PrefetchListener(*this, pm, "Miss", false,
> true));
> listeners.push_back(new PrefetchListener(*this, pm, "Fill", true,
> false));
233c245,246
< listeners.push_back(new PrefetchListener(*this, pm, "Hit"));
---
> listeners.push_back(new PrefetchListener(*this, pm, "Hit", false,
> false));