gem5  v20.1.0.0
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | List of all members
Minor::LSQ::LSQRequest Class Referenceabstract

Derived SenderState to carry data access info. More...

#include <lsq.hh>

Inheritance diagram for Minor::LSQ::LSQRequest:
BaseTLB::Translation Packet::SenderState Minor::LSQ::SingleDataRequest Minor::LSQ::SpecialDataRequest Minor::LSQ::SplitDataRequest Minor::LSQ::BarrierDataRequest Minor::LSQ::FailedDataRequest

Public Types

enum  LSQRequestState {
  NotIssued, InTranslation, Translated, Failed,
  RequestIssuing, StoreToStoreBuffer, RequestNeedsRetry, StoreInStoreBuffer,
  StoreBufferIssuing, StoreBufferNeedsRetry, Complete
}
 

Public Member Functions

 LSQRequest (LSQ &port_, MinorDynInstPtr inst_, bool isLoad_, PacketDataPtr data_=NULL, uint64_t *res_=NULL)
 
virtual ~LSQRequest ()
 
void makePacket ()
 Make a packet to use with the memory transaction. More...
 
bool skippedMemAccess ()
 Was no memory access attempted for this request? More...
 
void setSkipped ()
 Set this request as having been skipped before a memory transfer was attempt. More...
 
AddrRangeCoverage containsAddrRangeOf (LSQRequest *other_request)
 Does this request's address range fully cover the range of other_request? More...
 
virtual void startAddrTranslation ()=0
 Start the address translation process for this request. More...
 
virtual PacketPtr getHeadPacket ()=0
 Get the next packet to issue for this request. More...
 
virtual void stepToNextPacket ()=0
 Step to the next packet for the next call to getHeadPacket. More...
 
virtual bool sentAllPackets ()=0
 Have all packets been sent? More...
 
virtual bool hasPacketsInMemSystem ()=0
 True if this request has any issued packets in the memory system and so can't be interrupted until it gets responses. More...
 
virtual void retireResponse (PacketPtr packet_)=0
 Retire a response packet into the LSQRequest packet possibly completing this transfer. More...
 
virtual bool isBarrier ()
 Is this a request a barrier? More...
 
bool needsToBeSentToStoreBuffer ()
 This request, once processed by the requests/transfers queues, will need to go to the store buffer. More...
 
void setState (LSQRequestState new_state)
 Set state and output trace output. More...
 
bool isComplete () const
 Has this request been completed. More...
 
void reportData (std::ostream &os) const
 MinorTrace report interface. More...
 
- Public Member Functions inherited from BaseTLB::Translation
virtual ~Translation ()
 
virtual void finish (const Fault &fault, const RequestPtr &req, ThreadContext *tc, Mode mode)=0
 
virtual bool squashed () const
 This function is used by the page table walker to determine if it should translate the a pending request or if the underlying request has been squashed. More...
 
- Public Member Functions inherited from Packet::SenderState
 SenderState ()
 
virtual ~SenderState ()
 

Static Public Member Functions

static AddrRangeCoverage containsAddrRangeOf (Addr req1_addr, unsigned int req1_size, Addr req2_addr, unsigned int req2_size)
 Does address range req1 (req1_addr to req1_addr + req1_size - 1) fully cover, partially cover or not cover at all the range req2. More...
 

Public Attributes

LSQport
 Owning port. More...
 
MinorDynInstPtr inst
 Instruction which made this request. More...
 
bool isLoad
 Load/store indication used for building packet. More...
 
PacketDataPtr data
 Dynamically allocated and populated data carried for building write packets. More...
 
PacketPtr packet
 
RequestPtr request
 The underlying request of this LSQRequest. More...
 
uint64_t * res
 Res from pushRequest. More...
 
bool skipped
 Was skipped. More...
 
bool issuedToMemory
 This in an access other than a normal cacheable load that's visited the memory system. More...
 
bool isTranslationDelayed
 Address translation is delayed due to table walk. More...
 
LSQRequestState state
 
- Public Attributes inherited from Packet::SenderState
SenderStatepredecessor
 

Protected Member Functions

void markDelayed ()
 BaseTLB::Translation interface. More...
 
void tryToSuppressFault ()
 Instructions may want to suppress translation faults (e.g. More...
 
void disableMemAccess ()
 
void completeDisabledMemAccess ()
 

Detailed Description

Derived SenderState to carry data access info.

through address translation, the queues in this port and back from the memory system.

Definition at line 118 of file lsq.hh.

Member Enumeration Documentation

◆ LSQRequestState

Enumerator
NotIssued 
InTranslation 
Translated 
Failed 
RequestIssuing 
StoreToStoreBuffer 
RequestNeedsRetry 
StoreInStoreBuffer 
StoreBufferIssuing 
StoreBufferNeedsRetry 
Complete 

Definition at line 161 of file lsq.hh.

Constructor & Destructor Documentation

◆ LSQRequest()

LSQ< Impl >::LSQRequest::LSQRequest ( LSQ port_,
MinorDynInstPtr  inst_,
bool  isLoad_,
PacketDataPtr  data_ = NULL,
uint64_t *  res_ = NULL 
)

Definition at line 56 of file lsq.cc.

References request.

◆ ~LSQRequest()

LSQ< Impl >::LSQRequest::~LSQRequest ( )
virtual

Definition at line 1463 of file lsq.cc.

References data, and packet.

Member Function Documentation

◆ completeDisabledMemAccess()

void LSQ< Impl >::LSQRequest::completeDisabledMemAccess ( )
protected

◆ containsAddrRangeOf() [1/2]

LSQ::AddrRangeCoverage LSQ< Impl >::LSQRequest::containsAddrRangeOf ( Addr  req1_addr,
unsigned int  req1_size,
Addr  req2_addr,
unsigned int  req2_size 
)
static

Does address range req1 (req1_addr to req1_addr + req1_size - 1) fully cover, partially cover or not cover at all the range req2.

Definition at line 118 of file lsq.cc.

References Minor::LSQ::FullAddrRangeCoverage, Minor::LSQ::NoAddrRangeCoverage, and Minor::LSQ::PartialAddrRangeCoverage.

Referenced by Minor::LSQ::StoreBuffer::canForwardDataToLoad(), and Minor::LSQ::StoreBuffer::forwardStoreData().

◆ containsAddrRangeOf() [2/2]

AddrRangeCoverage Minor::LSQ::LSQRequest::containsAddrRangeOf ( LSQRequest other_request)

Does this request's address range fully cover the range of other_request?

◆ disableMemAccess()

void LSQ< Impl >::LSQRequest::disableMemAccess ( )
protected

Definition at line 111 of file lsq.cc.

References DPRINTFS.

◆ getHeadPacket()

virtual PacketPtr Minor::LSQ::LSQRequest::getHeadPacket ( )
pure virtual

Get the next packet to issue for this request.

For split transfers, it will be necessary to step through the available packets by calling do { getHeadPacket ; stepToNextPacket } while (!sentAllPackets) and by retiring response using retireResponse

Implemented in Minor::LSQ::SplitDataRequest, Minor::LSQ::SingleDataRequest, and Minor::LSQ::SpecialDataRequest.

Referenced by Minor::LSQ::tryToSend().

◆ hasPacketsInMemSystem()

virtual bool Minor::LSQ::LSQRequest::hasPacketsInMemSystem ( )
pure virtual

True if this request has any issued packets in the memory system and so can't be interrupted until it gets responses.

Implemented in Minor::LSQ::SplitDataRequest, Minor::LSQ::SingleDataRequest, and Minor::LSQ::SpecialDataRequest.

Referenced by Minor::LSQ::recvTimingResp(), and Minor::LSQ::tryToSendToTransfers().

◆ isBarrier()

bool LSQ< Impl >::LSQRequest::isBarrier ( )
virtual

◆ isComplete()

bool LSQ< Impl >::LSQRequest::isComplete ( ) const

Has this request been completed.

This includes all reasons for completion: successful transfers, faults, skipped because of preceding faults

Definition at line 175 of file lsq.cc.

References Complete, and Minor::LSQ::state.

Referenced by Minor::LSQ::findResponse(), Minor::LSQ::recvTimingResp(), Minor::LSQ::StoreBuffer::step(), and Minor::LSQ::tryToSendToTransfers().

◆ makePacket()

void LSQ< Impl >::LSQRequest::makePacket ( )

Make a packet to use with the memory transaction.

Definition at line 1724 of file lsq.cc.

References data, Minor::makePacketForRequest(), and NoFault.

◆ markDelayed()

void Minor::LSQ::LSQRequest::markDelayed ( )
inlineprotectedvirtual

BaseTLB::Translation interface.

Implements BaseTLB::Translation.

Definition at line 187 of file lsq.hh.

References isTranslationDelayed.

◆ needsToBeSentToStoreBuffer()

bool LSQ< Impl >::LSQRequest::needsToBeSentToStoreBuffer ( )

This request, once processed by the requests/transfers queues, will need to go to the store buffer.

Definition at line 161 of file lsq.cc.

References Minor::LSQ::state.

Referenced by Minor::Execute::handleMemResponse().

◆ reportData()

void LSQ< Impl >::LSQRequest::reportData ( std::ostream &  os) const

MinorTrace report interface.

Definition at line 183 of file lsq.cc.

References X86ISA::os, and Minor::LSQ::state.

Referenced by Minor::LSQ::StoreBuffer::minorTrace().

◆ retireResponse()

virtual void Minor::LSQ::LSQRequest::retireResponse ( PacketPtr  packet_)
pure virtual

Retire a response packet into the LSQRequest packet possibly completing this transfer.

Implemented in Minor::LSQ::SplitDataRequest, Minor::LSQ::SingleDataRequest, and Minor::LSQ::SpecialDataRequest.

Referenced by Minor::LSQ::recvTimingResp().

◆ sentAllPackets()

virtual bool Minor::LSQ::LSQRequest::sentAllPackets ( )
pure virtual

◆ setSkipped()

void Minor::LSQ::LSQRequest::setSkipped ( )
inline

Set this request as having been skipped before a memory transfer was attempt.

Definition at line 211 of file lsq.hh.

References skipped.

Referenced by Minor::LSQ::tryToSendToTransfers().

◆ setState()

void LSQ< Impl >::LSQRequest::setState ( LSQRequestState  new_state)

Set state and output trace output.

Definition at line 167 of file lsq.cc.

References DPRINTFS, and Minor::LSQ::state.

Referenced by Minor::LSQ::StoreBuffer::insert(), Minor::LSQ::recvReqRetry(), Minor::LSQ::tryToSend(), and Minor::LSQ::tryToSendToTransfers().

◆ skippedMemAccess()

bool Minor::LSQ::LSQRequest::skippedMemAccess ( )
inline

Was no memory access attempted for this request?

Definition at line 207 of file lsq.hh.

References skipped.

◆ startAddrTranslation()

virtual void Minor::LSQ::LSQRequest::startAddrTranslation ( )
pure virtual

Start the address translation process for this request.

This will issue a translation request to the TLB.

Implemented in Minor::LSQ::SplitDataRequest, Minor::LSQ::SingleDataRequest, and Minor::LSQ::SpecialDataRequest.

Referenced by Minor::LSQ::pushRequest().

◆ stepToNextPacket()

virtual void Minor::LSQ::LSQRequest::stepToNextPacket ( )
pure virtual

Step to the next packet for the next call to getHeadPacket.

Implemented in Minor::LSQ::SplitDataRequest, Minor::LSQ::SingleDataRequest, and Minor::LSQ::SpecialDataRequest.

Referenced by Minor::LSQ::tryToSend().

◆ tryToSuppressFault()

void LSQ< Impl >::LSQRequest::tryToSuppressFault ( )
protected

Instructions may want to suppress translation faults (e.g.

non-faulting vector loads).

Definition at line 75 of file lsq.cc.

References DPRINTFS, NoFault, and SimpleThread::pcState().

Member Data Documentation

◆ data

PacketDataPtr Minor::LSQ::LSQRequest::data

Dynamically allocated and populated data carried for building write packets.

Definition at line 135 of file lsq.hh.

Referenced by ~LSQRequest().

◆ inst

MinorDynInstPtr Minor::LSQ::LSQRequest::inst

◆ isLoad

bool Minor::LSQ::LSQRequest::isLoad

Load/store indication used for building packet.

This isn't carried by Request so we need to keep it here

Definition at line 131 of file lsq.hh.

Referenced by Minor::LSQ::StoreBuffer::forwardStoreData(), Minor::LSQ::moveFromRequestsToTransfers(), Minor::LSQ::popResponse(), Minor::LSQ::tryToSend(), and Minor::LSQ::tryToSendToTransfers().

◆ issuedToMemory

bool Minor::LSQ::LSQRequest::issuedToMemory

This in an access other than a normal cacheable load that's visited the memory system.

Definition at line 156 of file lsq.hh.

Referenced by Minor::LSQ::popResponse(), and Minor::LSQ::tryToSendToTransfers().

◆ isTranslationDelayed

bool Minor::LSQ::LSQRequest::isTranslationDelayed

Address translation is delayed due to table walk.

Definition at line 159 of file lsq.hh.

Referenced by markDelayed().

◆ packet

PacketPtr Minor::LSQ::LSQRequest::packet

◆ port

LSQ& Minor::LSQ::LSQRequest::port

Owning port.

Definition at line 124 of file lsq.hh.

◆ request

RequestPtr Minor::LSQ::LSQRequest::request

◆ res

uint64_t* Minor::LSQ::LSQRequest::res

Res from pushRequest.

Definition at line 147 of file lsq.hh.

◆ skipped

bool Minor::LSQ::LSQRequest::skipped

Was skipped.

Set to indicate any reason (faulted, bad stream sequence number, in a fault shadow) that this request did not perform a memory transfer

Definition at line 152 of file lsq.hh.

Referenced by setSkipped(), and skippedMemAccess().

◆ state

LSQRequestState Minor::LSQ::LSQRequest::state

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

Generated on Wed Sep 30 2020 14:03:06 for gem5 by doxygen 1.8.17