gem5  v22.0.0.1
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
gem5::minor::LSQ::SplitDataRequest Class Reference

#include <lsq.hh>

Inheritance diagram for gem5::minor::LSQ::SplitDataRequest:
gem5::minor::LSQ::LSQRequest gem5::BaseMMU::Translation gem5::Packet::SenderState

Public Member Functions

 SplitDataRequest (LSQ &port_, MinorDynInstPtr inst_, bool isLoad_, PacketDataPtr data_=NULL, uint64_t *res_=NULL)
 
 ~SplitDataRequest ()
 
void makeFragmentRequests ()
 Make all the Requests for this transfer's fragments so that those requests can be sent for address translation. More...
 
void makeFragmentPackets ()
 Make the packets to go with the requests so they can be sent to the memory system. More...
 
void startAddrTranslation ()
 Start a loop of do { sendNextFragmentToTranslation ; translateTiming ; finish } while (numTranslatedFragments != numFragments) to complete all this requests' fragments' address translations. More...
 
PacketPtr getHeadPacket ()
 Get the head packet as counted by numIssuedFragments. More...
 
void stepToNextPacket ()
 Step on numIssuedFragments. More...
 
bool hasPacketsInMemSystem ()
 True if this request has any issued packets in the memory system and so can't be interrupted until it gets responses. More...
 
bool sentAllPackets ()
 Have we stepped past the end of fragmentPackets? More...
 
void retireResponse (PacketPtr packet_)
 For loads, paste the response data into the main response packet. More...
 
void sendNextFragmentToTranslation ()
 Part of the address translation loop, see startAddTranslation. More...
 
- Public Member Functions inherited from gem5::minor::LSQ::LSQRequest
 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 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 gem5::BaseMMU::Translation
virtual ~Translation ()
 
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 gem5::Packet::SenderState
 SenderState ()
 
virtual ~SenderState ()
 

Protected Member Functions

void finish (const Fault &fault_, const RequestPtr &request_, ThreadContext *tc, BaseMMU::Mode mode)
 TLB response interface. More...
 
- Protected Member Functions inherited from gem5::minor::LSQ::LSQRequest
void markDelayed ()
 BaseMMU::Translation interface. More...
 
void tryToSuppressFault ()
 Instructions may want to suppress translation faults (e.g. More...
 
void disableMemAccess ()
 
void completeDisabledMemAccess ()
 

Protected Attributes

EventFunctionWrapper translationEvent
 Event to step between translations. More...
 
unsigned int numFragments
 Number of fragments this request is split into. More...
 
unsigned int numInTranslationFragments
 Number of fragments in the address translation mechanism. More...
 
unsigned int numTranslatedFragments
 Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments. More...
 
unsigned int numIssuedFragments
 Number of fragments already issued (<= numFragments) More...
 
unsigned int numRetiredFragments
 Number of fragments retired back to this request. More...
 
std::vector< RequestPtrfragmentRequests
 Fragment Requests corresponding to the address ranges of each fragment. More...
 
std::vector< Packet * > fragmentPackets
 Packets matching fragmentRequests to issue fragments to memory. More...
 

Additional Inherited Members

- Public Types inherited from gem5::minor::LSQ::LSQRequest
enum  LSQRequestState {
  NotIssued, InTranslation, Translated, Failed,
  RequestIssuing, StoreToStoreBuffer, RequestNeedsRetry, StoreInStoreBuffer,
  StoreBufferIssuing, StoreBufferNeedsRetry, Complete
}
 
- Static Public Member Functions inherited from gem5::minor::LSQ::LSQRequest
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 inherited from gem5::minor::LSQ::LSQRequest
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 gem5::Packet::SenderState
SenderStatepredecessor
 

Detailed Description

Definition at line 390 of file lsq.hh.

Constructor & Destructor Documentation

◆ SplitDataRequest()

gem5::minor::LSQ::SplitDataRequest::SplitDataRequest ( LSQ port_,
MinorDynInstPtr  inst_,
bool  isLoad_,
PacketDataPtr  data_ = NULL,
uint64_t *  res_ = NULL 
)

Definition at line 393 of file lsq.cc.

References sendNextFragmentToTranslation().

◆ ~SplitDataRequest()

gem5::minor::LSQ::SplitDataRequest::~SplitDataRequest ( )

Definition at line 410 of file lsq.cc.

References gem5::ArmISA::i.

Member Function Documentation

◆ finish()

void gem5::minor::LSQ::SplitDataRequest::finish ( const Fault fault_,
const RequestPtr request_,
ThreadContext tc,
BaseMMU::Mode  mode 
)
protectedvirtual

TLB response interface.

Implements gem5::BaseMMU::Translation.

Definition at line 335 of file lsq.cc.

References gem5::Complete, gem5::curTick(), DPRINTFS, gem5::minor::Pipeline::ExecuteStageId, and gem5::NoFault.

◆ getHeadPacket()

PacketPtr gem5::minor::LSQ::SplitDataRequest::getHeadPacket ( )
virtual

Get the head packet as counted by numIssuedFragments.

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 609 of file lsq.cc.

◆ hasPacketsInMemSystem()

bool gem5::minor::LSQ::SplitDataRequest::hasPacketsInMemSystem ( )
inlinevirtual

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

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 454 of file lsq.hh.

References numIssuedFragments, and numRetiredFragments.

◆ makeFragmentPackets()

void gem5::minor::LSQ::SplitDataRequest::makeFragmentPackets ( )

Make the packets to go with the requests so they can be sent to the memory system.

Definition at line 534 of file lsq.cc.

References data, DPRINTFS, gem5::VegaISA::fragment, and gem5::minor::makePacketForRequest().

◆ makeFragmentRequests()

void gem5::minor::LSQ::SplitDataRequest::makeFragmentRequests ( )

Make all the Requests for this transfer's fragments so that those requests can be sent for address translation.

Definition at line 420 of file lsq.cc.

References gem5::addrBlockOffset(), DPRINTFS, gem5::VegaISA::fragment, and gem5::isAnyActiveElement().

◆ retireResponse()

void gem5::minor::LSQ::SplitDataRequest::retireResponse ( PacketPtr  packet_)
virtual

For loads, paste the response data into the main response packet.

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 625 of file lsq.cc.

References gem5::Complete, data, DPRINTFS, gem5::Packet::getConstPtr(), gem5::Packet::getSize(), gem5::Packet::isError(), gem5::NoFault, and gem5::Packet::req.

◆ sendNextFragmentToTranslation()

void gem5::minor::LSQ::SplitDataRequest::sendNextFragmentToTranslation ( )

Part of the address translation loop, see startAddTranslation.

Definition at line 702 of file lsq.cc.

References DPRINTFS, gem5::ThreadContext::getMMUPtr(), gem5::BaseMMU::Read, gem5::BaseMMU::translateTiming(), and gem5::BaseMMU::Write.

Referenced by SplitDataRequest().

◆ sentAllPackets()

bool gem5::minor::LSQ::SplitDataRequest::sentAllPackets ( )
inlinevirtual

Have we stepped past the end of fragmentPackets?

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 458 of file lsq.hh.

References numIssuedFragments, and numTranslatedFragments.

◆ startAddrTranslation()

void gem5::minor::LSQ::SplitDataRequest::startAddrTranslation ( )
virtual

Start a loop of do { sendNextFragmentToTranslation ; translateTiming ; finish } while (numTranslatedFragments != numFragments) to complete all this requests' fragments' address translations.

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 584 of file lsq.cc.

References gem5::minor::LSQ::LSQRequest::Complete, and gem5::minor::LSQ::LSQRequest::InTranslation.

◆ stepToNextPacket()

void gem5::minor::LSQ::SplitDataRequest::stepToNextPacket ( )
virtual

Step on numIssuedFragments.

Implements gem5::minor::LSQ::LSQRequest.

Definition at line 617 of file lsq.cc.

Member Data Documentation

◆ fragmentPackets

std::vector<Packet *> gem5::minor::LSQ::SplitDataRequest::fragmentPackets
protected

Packets matching fragmentRequests to issue fragments to memory.

Definition at line 419 of file lsq.hh.

◆ fragmentRequests

std::vector<RequestPtr> gem5::minor::LSQ::SplitDataRequest::fragmentRequests
protected

Fragment Requests corresponding to the address ranges of each fragment.

Definition at line 416 of file lsq.hh.

◆ numFragments

unsigned int gem5::minor::LSQ::SplitDataRequest::numFragments
protected

Number of fragments this request is split into.

Definition at line 397 of file lsq.hh.

◆ numInTranslationFragments

unsigned int gem5::minor::LSQ::SplitDataRequest::numInTranslationFragments
protected

Number of fragments in the address translation mechanism.

Definition at line 400 of file lsq.hh.

◆ numIssuedFragments

unsigned int gem5::minor::LSQ::SplitDataRequest::numIssuedFragments
protected

Number of fragments already issued (<= numFragments)

Definition at line 409 of file lsq.hh.

Referenced by hasPacketsInMemSystem(), and sentAllPackets().

◆ numRetiredFragments

unsigned int gem5::minor::LSQ::SplitDataRequest::numRetiredFragments
protected

Number of fragments retired back to this request.

Definition at line 412 of file lsq.hh.

Referenced by hasPacketsInMemSystem().

◆ numTranslatedFragments

unsigned int gem5::minor::LSQ::SplitDataRequest::numTranslatedFragments
protected

Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments.

When numTranslatedFramgents == numFragments, translation is complete

Definition at line 406 of file lsq.hh.

Referenced by sentAllPackets().

◆ translationEvent

EventFunctionWrapper gem5::minor::LSQ::SplitDataRequest::translationEvent
protected

Event to step between translations.

Definition at line 394 of file lsq.hh.


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

Generated on Sat Jun 18 2022 08:14:25 for gem5 by doxygen 1.8.17