gem5  v20.1.0.0
Public Member Functions | List of all members
WriteQueue Class Reference

A write queue for all eviction packets, i.e. More...

#include <write_queue.hh>

Inheritance diagram for WriteQueue:
Queue< WriteQueueEntry > Drainable

Public Member Functions

 WriteQueue (const std::string &_label, int num_entries, int reserve)
 Create a write queue with a given number of entries. More...
 
WriteQueueEntryallocate (Addr blk_addr, unsigned blk_size, PacketPtr pkt, Tick when_ready, Counter order)
 Allocates a new WriteQueueEntry for the request and size. More...
 
void markInService (WriteQueueEntry *entry)
 Mark the given entry as in service. More...
 
- Public Member Functions inherited from Queue< WriteQueueEntry >
 Queue (const std::string &_label, int num_entries, int reserve)
 Create a queue with a given number of entries. More...
 
bool isEmpty () const
 
bool isFull () const
 
int numInService () const
 
WriteQueueEntryfindMatch (Addr blk_addr, bool is_secure, bool ignore_uncacheable=true) const
 Find the first entry that matches the provided address. More...
 
bool trySatisfyFunctional (PacketPtr pkt)
 
WriteQueueEntryfindPending (const QueueEntry *entry) const
 Find any pending requests that overlap the given request of a different queue. More...
 
WriteQueueEntrygetNext () const
 Returns the WriteQueueEntry at the head of the readyList. More...
 
Tick nextReadyTime () const
 
void deallocate (WriteQueueEntry *entry)
 Removes the given entry from the queue. More...
 
DrainState drain () override
 Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight. More...
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Queue< WriteQueueEntry >
WriteQueueEntry ::Iterator addToReadyList (WriteQueueEntry *entry)
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
virtual void drainResume ()
 Resume execution after a successful drain. More...
 
void signalDrainDone () const
 Signal that an object is drained. More...
 
- Protected Attributes inherited from Queue< WriteQueueEntry >
const std::string label
 Local label (for functional print requests) More...
 
const int numEntries
 The total number of entries in this queue. More...
 
const int numReserve
 The number of entries to hold as a temporary overflow space. More...
 
std::vector< WriteQueueEntryentries
 Actual storage. More...
 
WriteQueueEntry ::List allocatedList
 Holds pointers to all allocated entries. More...
 
WriteQueueEntry ::List readyList
 Holds pointers to entries that haven't been sent downstream. More...
 
WriteQueueEntry ::List freeList
 Holds non allocated entries. More...
 
int _numInService
 The number of entries that are in service. More...
 
int allocated
 The number of currently allocated entries. More...
 

Detailed Description

A write queue for all eviction packets, i.e.

writebacks and clean evictions, as well as uncacheable writes.

Definition at line 57 of file write_queue.hh.

Constructor & Destructor Documentation

◆ WriteQueue()

WriteQueue::WriteQueue ( const std::string &  _label,
int  num_entries,
int  reserve 
)

Create a write queue with a given number of entries.

Parameters
num_entriesThe number of entries in this queue.
reserveThe maximum number of entries needed to satisfy any access.

Definition at line 51 of file write_queue.cc.

Member Function Documentation

◆ allocate()

WriteQueueEntry * WriteQueue::allocate ( Addr  blk_addr,
unsigned  blk_size,
PacketPtr  pkt,
Tick  when_ready,
Counter  order 
)

Allocates a new WriteQueueEntry for the request and size.

This places the request as the first target in the WriteQueueEntry.

Parameters
blk_addrThe address of the block.
blk_sizeThe number of bytes to request.
pktThe original write.
when_readyWhen is the WriteQueueEntry be ready to act upon.
orderThe logical order of this WriteQueueEntry
Returns
The a pointer to the WriteQueueEntry allocated.
Precondition
There are free entries.

Definition at line 57 of file write_queue.cc.

References Queue< WriteQueueEntry >::addToReadyList(), WriteQueueEntry::allocate(), Queue< WriteQueueEntry >::allocated, Queue< WriteQueueEntry >::allocatedList, WriteQueueEntry::allocIter, Queue< WriteQueueEntry >::freeList, WriteQueueEntry::getNumTargets(), and WriteQueueEntry::readyIter.

Referenced by BaseCache::allocateWriteBuffer().

◆ markInService()

void WriteQueue::markInService ( WriteQueueEntry entry)

Mark the given entry as in service.

This removes the entry from the readyList or deallocates the entry if it does not expect a response (writeback/eviction rather than an uncacheable write).

Parameters
entryThe entry to mark in service.

Definition at line 74 of file write_queue.cc.

References Queue< WriteQueueEntry >::deallocate(), and WriteQueueEntry::popTarget().

Referenced by BaseCache::markInService().


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:34 for gem5 by doxygen 1.8.17