gem5
|
#include <lsq.hh>
Classes | |
class | TranslationEvent |
Event to step between translations. More... | |
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_, 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... | |
Protected Attributes | |
TranslationEvent | translationEvent |
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< Request * > | 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 |
Request | request |
The underlying request of this LSQRequest. More... | |
Fault | fault |
Fault generated performing this request. 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... | |
LSQRequestState | state |
Public Attributes inherited from Packet::SenderState | |
SenderState * | predecessor |
Minor::LSQ::SplitDataRequest::SplitDataRequest | ( | LSQ & | port_, |
MinorDynInstPtr | inst_, | ||
bool | isLoad_, | ||
PacketDataPtr | data_ = NULL , |
||
uint64_t * | res_ = NULL |
||
) |
Minor::LSQ::SplitDataRequest::~SplitDataRequest | ( | ) |
|
protectedvirtual |
TLB response interface.
Implements BaseTLB::Translation.
Definition at line 278 of file lsq.cc.
References curTick(), DPRINTFS, Minor::Pipeline::ExecuteStageId, M5_VAR_USED, and NoFault.
|
virtual |
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 453 of file lsq.hh.
References numIssuedFragments, and numRetiredFragments.
void Minor::LSQ::SplitDataRequest::makeFragmentPackets | ( | ) |
Make the packets to go with the requests so they can be sent to the memory system.
Definition at line 445 of file lsq.cc.
References data, DPRINTFS, fragment, Request::getFlags(), Request::getPaddr(), Request::getSize(), Request::getVaddr(), Request::hasPaddr(), and Minor::makePacketForRequest().
void 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 353 of file lsq.cc.
References Minor::addrBlockOffset(), DPRINTFS, fragment, M5_VAR_USED, Request::setContext(), and Request::setVirt().
|
virtual |
For loads, paste the response data into the main response packet.
Implements Minor::LSQ::LSQRequest.
Definition at line 530 of file lsq.cc.
References data, DPRINTFS, Packet::getConstPtr(), Request::getSize(), Packet::getSize(), Request::getVaddr(), Packet::isError(), NoFault, and Packet::req.
void Minor::LSQ::SplitDataRequest::sendNextFragmentToTranslation | ( | ) |
Part of the address translation loop, see startAddTranslation.
Definition at line 607 of file lsq.cc.
References DPRINTFS, ThreadContext::getDTBPtr(), BaseTLB::Read, and BaseTLB::Write.
Referenced by Minor::LSQ::SplitDataRequest::TranslationEvent::process().
|
inlinevirtual |
Have we stepped past the end of fragmentPackets?
Implements Minor::LSQ::LSQRequest.
Definition at line 457 of file lsq.hh.
References numFragments, and numIssuedFragments.
|
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 493 of file lsq.cc.
References Minor::LSQ::LSQRequest::InTranslation.
|
virtual |
Step on numIssuedFragments.
Implements Minor::LSQ::LSQRequest.
|
protected |
|
protected |
|
protected |
Number of fragments this request is split into.
Definition at line 396 of file lsq.hh.
Referenced by sentAllPackets().
|
protected |
|
protected |
Number of fragments already issued (<= numFragments)
Definition at line 408 of file lsq.hh.
Referenced by hasPacketsInMemSystem(), and sentAllPackets().
|
protected |
Number of fragments retired back to this request.
Definition at line 411 of file lsq.hh.
Referenced by hasPacketsInMemSystem().
|
protected |
|
protected |