456a457
> * @param writebacks List for any writebacks that need to be performed.
459c460,461
< virtual bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat);
---
> virtual bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat,
> PacketList &writebacks);
551a554
> * @param writebacks A list with packets for any performed writebacks
554c557,558
< virtual Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk) = 0;
---
> virtual Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk,
> PacketList &writebacks) = 0;
594,596d597
< *
< * @param pkt The writeback packet.
< * @param forward_time Tick to which the writeback should be scheduled.
598c599
< virtual void doWritebacks(PacketPtr pkt, Tick forward_time) = 0;
---
> virtual void doWritebacks(PacketList& writebacks, Tick forward_time) = 0;
601,603c602
< * Send writebacks down the memory hierarchy in atomic mode.
< *
< * @param pkt The writeback packet.
---
> * Send writebacks down the memory hierarchy in atomic mode
605c604
< virtual void doWritebacksAtomic(PacketPtr pkt) = 0;
---
> virtual void doWritebacksAtomic(PacketList& writebacks) = 0;
651c650,651
< doWritebacksAtomic(tempBlockWriteback);
---
> PacketList writebacks{tempBlockWriteback};
> doWritebacksAtomic(writebacks);
683,684c683
< * @param delay The delay until the packet's metadata is present.
< * @param tag_latency Latency to access the tags of the replacement victim.
---
> * @param writebacks List for any writebacks that need to be performed.
688c687
< uint32_t delay, Cycles tag_latency);
---
> PacketList &writebacks);
720a720,724
> * Note that the reason we return a list of writebacks rather than
> * inserting them directly in the write buffer is that this function
> * is called by both atomic and timing-mode accesses, and in atomic
> * mode we don't mess with the write buffer (we just perform the
> * writebacks atomically once the original request is complete).
723a728
> * @param writebacks List for any writebacks that need to be performed.
727c732,733
< CacheBlk *handleFill(PacketPtr pkt, CacheBlk *blk, bool allocate);
---
> CacheBlk *handleFill(PacketPtr pkt, CacheBlk *blk,
> PacketList &writebacks, bool allocate);
730,734c736
< * Allocate a new block for the packet's data. The victim block might be
< * valid, and thus the necessary writebacks are done. May return nullptr
< * if there are no replaceable blocks. If a replaceable block is found,
< * it inserts the new block in its place. The new block, however, is not
< * set as valid yet.
---
> * Allocate a new block and perform any necessary writebacks
735a738,742
> * Find a victim block and if necessary prepare writebacks for any
> * existing data. May return nullptr if there are no replaceable
> * blocks. If a replaceable block is found, it inserts the new block in
> * its place. The new block, however, is not set as valid yet.
> *
737c744
< * @param tag_latency Latency to access the tags of the replacement victim.
---
> * @param writebacks A list of writeback packets for the evicted blocks
740,741c747
< CacheBlk *allocateBlock(const PacketPtr pkt, Cycles tag_latency);
<
---
> CacheBlk *allocateBlock(const PacketPtr pkt, PacketList &writebacks);
758,759c764
< * @param forward_time Tick to which the writeback should be scheduled if
< * in timing mode.
---
> * @param writebacks Return a list of packets with writebacks
761c766
< void evictBlock(CacheBlk *blk, Tick forward_time);
---
> void evictBlock(CacheBlk *blk, PacketList &writebacks);