91c91,92
< SnoopFilter (const SnoopFilterParams *p) : SimObject(p),
---
> SnoopFilter (const SnoopFilterParams *p) :
> SimObject(p), reqLookupResult(cachedLocations.end()), retryItem{0, 0},
107,110c108,113
< * Lookup a request (from a slave port) in the snoop filter and return a
< * list of other slave ports that need forwarding of the resulting snoops.
< * Additionally, update the tracking structures with new request
< * information.
---
> * Lookup a request (from a slave port) in the snoop filter and
> * return a list of other slave ports that need forwarding of the
> * resulting snoops. Additionally, update the tracking structures
> * with new request information. Note that the caller must also
> * call finishRequest once it is known if the request needs to
> * retry or not.
120,121c123,126
< * For a successful request, update all data structures in the snoop filter
< * reflecting the changes caused by that request
---
> * For an un-successful request, revert the change to the snoop
> * filter. Also take care of erasing any null entries. This method
> * relies on the result from lookupRequest being stored in
> * reqLookupResult.
123,124d127
< * @param cpkt Pointer to the request packet. Not changed.
< * @param slave_port Slave port where the request came from.
125a129
> * @param cpkt Request packet, merely for sanity checking
127,128c131
< void updateRequest(const Packet* cpkt, const SlavePort& slave_port,
< bool will_retry);
---
> void finishRequest(bool will_retry, const Packet* cpkt);
237a241,245
> * Iterator used to store the result from lookupRequest until we
> * call finishRequest.
> */
> SnoopFilterCache::iterator reqLookupResult;
> /**
239c247
< * incase updateRequest needs to undo changes made in lookupRequest
---
> * incase finishRequest needs to undo changes made in lookupRequest