gem5
v20.1.0.0
|
#include <lsq.hh>
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 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 BaseTLB::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 Packet::SenderState | |
SenderState () | |
virtual | ~SenderState () |
Protected Member Functions | |
void | finish (const Fault &fault_, const RequestPtr &request_, ThreadContext *tc, BaseTLB::Mode mode) |
TLB response interface. More... | |
Protected Member Functions inherited from Minor::LSQ::LSQRequest | |
void | markDelayed () |
BaseTLB::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< RequestPtr > | fragmentRequests |
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 Minor::LSQ::LSQRequest | |
enum | LSQRequestState { NotIssued, InTranslation, Translated, Failed, RequestIssuing, StoreToStoreBuffer, RequestNeedsRetry, StoreInStoreBuffer, StoreBufferIssuing, StoreBufferNeedsRetry, Complete } |
Static Public Member Functions inherited from 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 Minor::LSQ::LSQRequest | |
LSQ & | port |
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 | |
SenderState * | predecessor |
LSQ< Impl >::SplitDataRequest::SplitDataRequest | ( | LSQ & | port_, |
MinorDynInstPtr | inst_, | ||
bool | isLoad_, | ||
PacketDataPtr | data_ = NULL , |
||
uint64_t * | res_ = NULL |
||
) |
Definition at line 390 of file lsq.cc.
References sendNextFragmentToTranslation().
LSQ< Impl >::SplitDataRequest::~SplitDataRequest | ( | ) |
|
protectedvirtual |
TLB response interface.
Implements BaseTLB::Translation.
Definition at line 332 of file lsq.cc.
References Complete, curTick(), DPRINTFS, Minor::Pipeline::ExecuteStageId, and NoFault.
Get the head packet as counted by numIssuedFragments.
Implements Minor::LSQ::LSQRequest.
|
inlinevirtual |
True if this request has any issued packets in the memory system and so can't be interrupted until it gets responses.
Implements Minor::LSQ::LSQRequest.
Definition at line 445 of file lsq.hh.
References numIssuedFragments, and numRetiredFragments.
void LSQ< Impl >::SplitDataRequest::makeFragmentPackets | ( | ) |
void LSQ< Impl >::SplitDataRequest::makeFragmentRequests | ( | ) |
Make all the Requests for this transfer's fragments so that those requests can be sent for address translation.
Definition at line 417 of file lsq.cc.
References addrBlockOffset(), DPRINTFS, fragment, and isAnyActiveElement().
For loads, paste the response data into the main response packet.
Implements Minor::LSQ::LSQRequest.
Definition at line 627 of file lsq.cc.
References Complete, data, DPRINTFS, Packet::getConstPtr(), Packet::getSize(), Packet::isError(), NoFault, and Packet::req.
void LSQ< Impl >::SplitDataRequest::sendNextFragmentToTranslation | ( | ) |
Part of the address translation loop, see startAddTranslation.
Definition at line 704 of file lsq.cc.
References DPRINTFS, ThreadContext::getDTBPtr(), BaseTLB::Read, BaseTLB::translateTiming(), and BaseTLB::Write.
Referenced by SplitDataRequest().
|
inlinevirtual |
Have we stepped past the end of fragmentPackets?
Implements Minor::LSQ::LSQRequest.
Definition at line 449 of file lsq.hh.
References numIssuedFragments, and numTranslatedFragments.
|
virtual |
Start a loop of do { sendNextFragmentToTranslation ; translateTiming ; finish } while (numTranslatedFragments != numFragments) to complete all this requests' fragments' address translations.
Implements Minor::LSQ::LSQRequest.
Definition at line 586 of file lsq.cc.
References Minor::LSQ::LSQRequest::Complete, and Minor::LSQ::LSQRequest::InTranslation.
|
virtual |
Step on numIssuedFragments.
Implements Minor::LSQ::LSQRequest.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Number of fragments already issued (<= numFragments)
Definition at line 400 of file lsq.hh.
Referenced by hasPacketsInMemSystem(), and sentAllPackets().
|
protected |
Number of fragments retired back to this request.
Definition at line 403 of file lsq.hh.
Referenced by hasPacketsInMemSystem().
|
protected |
Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments.
When numTranslatedFramgents == numFragments, translation is complete
Definition at line 397 of file lsq.hh.
Referenced by sentAllPackets().
|
protected |