|
gem5 [DEVELOP-FOR-25.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. | |
| void | makeFragmentPackets () |
| Make the packets to go with the requests so they can be sent to the memory system. | |
| void | startAddrTranslation () |
| Start a loop of do { sendNextFragmentToTranslation ; translateTiming ; finish } while (numTranslatedFragments != numFragments) to complete all this requests' fragments' address translations. | |
| PacketPtr | getHeadPacket () |
| Get the head packet as counted by numIssuedFragments. | |
| void | stepToNextPacket () |
| Step on numIssuedFragments. | |
| bool | hasPacketsInMemSystem () |
| True if this request has any issued packets in the memory system and so can't be interrupted until it gets responses. | |
| bool | sentAllPackets () |
| Have we stepped past the end of fragmentPackets? | |
| void | retireResponse (PacketPtr packet_) |
| For loads, paste the response data into the main response packet. | |
| void | sendNextFragmentToTranslation () |
| Part of the address translation loop, see startAddTranslation. | |
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. | |
| bool | skippedMemAccess () |
| Was no memory access attempted for this request? | |
| void | setSkipped () |
| Set this request as having been skipped before a memory transfer was attempt. | |
| AddrRangeCoverage | containsAddrRangeOf (LSQRequest *other_request) |
| Does this request's address range fully cover the range of other_request? | |
| virtual bool | isBarrier () |
| Is this a request a barrier? | |
| bool | needsToBeSentToStoreBuffer () |
| This request, once processed by the requests/transfers queues, will need to go to the store buffer. | |
| void | setState (LSQRequestState new_state) |
| Set state and output trace output. | |
| bool | isComplete () const |
| Has this request been completed. | |
| void | reportData (std::ostream &os) const |
| MinorTrace report interface. | |
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. | |
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. | |
Protected Member Functions inherited from gem5::minor::LSQ::LSQRequest | |
| void | markDelayed () |
| BaseMMU::Translation interface. | |
| void | tryToSuppressFault () |
| Instructions may want to suppress translation faults (e.g. | |
| void | disableMemAccess () |
| void | completeDisabledMemAccess () |
Protected Attributes | |
| EventFunctionWrapper | translationEvent |
| Event to step between translations. | |
| unsigned int | numFragments |
| Number of fragments this request is split into. | |
| unsigned int | numInTranslationFragments |
| Number of fragments in the address translation mechanism. | |
| unsigned int | numTranslatedFragments |
| Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments. | |
| unsigned int | numIssuedFragments |
| Number of fragments already issued (<= numFragments) | |
| unsigned int | numRetiredFragments |
| Number of fragments retired back to this request. | |
| std::vector< RequestPtr > | fragmentRequests |
| Fragment Requests corresponding to the address ranges of each fragment. | |
| std::vector< Packet * > | fragmentPackets |
| Packets matching fragmentRequests to issue fragments to memory. | |
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. | |
Public Attributes inherited from gem5::minor::LSQ::LSQRequest | |
| LSQ & | port |
| Owning port. | |
| MinorDynInstPtr | inst |
| Instruction which made this request. | |
| bool | isLoad |
| Load/store indication used for building packet. | |
| PacketDataPtr | data |
| Dynamically allocated and populated data carried for building write packets. | |
| PacketPtr | packet |
| RequestPtr | request |
| The underlying request of this LSQRequest. | |
| uint64_t * | res |
| Res from pushRequest. | |
| bool | skipped |
| Was skipped. | |
| bool | issuedToMemory |
| This in an access other than a normal cacheable load that's visited the memory system. | |
| bool | isTranslationDelayed |
| Address translation is delayed due to table walk. | |
| LSQRequestState | state |
Public Attributes inherited from gem5::Packet::SenderState | |
| SenderState * | predecessor |
| gem5::minor::LSQ::SplitDataRequest::SplitDataRequest | ( | LSQ & | port_, |
| MinorDynInstPtr | inst_, | ||
| bool | isLoad_, | ||
| PacketDataPtr | data_ = NULL, | ||
| uint64_t * | res_ = NULL ) |
Definition at line 392 of file lsq.cc.
References gem5::minor::LSQ::LSQ(), gem5::minor::LSQ::LSQRequest::LSQRequest(), sendNextFragmentToTranslation(), and translationEvent.
| gem5::minor::LSQ::SplitDataRequest::~SplitDataRequest | ( | ) |
Definition at line 409 of file lsq.cc.
References fragmentPackets, and gem5::ArmISA::i.
|
protectedvirtual |
TLB response interface.
Implements gem5::BaseMMU::Translation.
Definition at line 334 of file lsq.cc.
References gem5::minor::LSQ::LSQRequest::Complete, gem5::minor::LSQ::LSQRequest::completeDisabledMemAccess(), gem5::curTick(), DPRINTFS, gem5::minor::Pipeline::ExecuteStageId, fragmentRequests, gem5::minor::LSQ::LSQRequest::inst, gem5::minor::LSQ::LSQRequest::isTranslationDelayed, makeFragmentPackets(), gem5::ArmISA::mode, gem5::NoFault, numFragments, numInTranslationFragments, numTranslatedFragments, gem5::minor::LSQ::LSQRequest::port, gem5::minor::LSQ::LSQRequest::setState(), gem5::minor::LSQ::LSQRequest::Translated, translationEvent, and gem5::minor::LSQ::LSQRequest::tryToSuppressFault().
|
virtual |
Get the head packet as counted by numIssuedFragments.
Implements gem5::minor::LSQ::LSQRequest.
Definition at line 608 of file lsq.cc.
References fragmentPackets, numIssuedFragments, and numTranslatedFragments.
|
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 453 of file lsq.hh.
References numIssuedFragments, and numRetiredFragments.
Referenced by retireResponse().
| 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 533 of file lsq.cc.
References gem5::minor::LSQ::LSQRequest::data, DPRINTFS, fragmentPackets, fragmentRequests, gem5::minor::LSQ::LSQRequest::inst, gem5::minor::LSQ::LSQRequest::isLoad, gem5::minor::LSQ::LSQRequest::makePacket(), gem5::minor::makePacketForRequest(), numTranslatedFragments, gem5::minor::LSQ::LSQRequest::port, and gem5::minor::LSQ::LSQRequest::request.
Referenced by finish().
| 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 419 of file lsq.cc.
References gem5::addrBlockOffset(), DPRINTFS, fragmentRequests, gem5::isAnyActiveElement(), numFragments, gem5::minor::LSQ::LSQRequest::port, and gem5::minor::LSQ::LSQRequest::request.
Referenced by startAddrTranslation().
|
virtual |
For loads, paste the response data into the main response packet.
Implements gem5::minor::LSQ::LSQRequest.
Definition at line 624 of file lsq.cc.
References gem5::minor::LSQ::LSQRequest::Complete, gem5::minor::LSQ::LSQRequest::data, DPRINTFS, gem5::Packet::getConstPtr(), gem5::Packet::getSize(), hasPacketsInMemSystem(), gem5::minor::LSQ::LSQRequest::inst, gem5::minor::LSQ::LSQRequest::isComplete(), gem5::Packet::isError(), gem5::minor::LSQ::LSQRequest::isLoad, gem5::NoFault, numRetiredFragments, numTranslatedFragments, gem5::minor::LSQ::LSQRequest::packet, gem5::minor::LSQ::LSQRequest::port, gem5::Packet::req, gem5::minor::LSQ::LSQRequest::request, gem5::minor::LSQ::LSQRequest::setSkipped(), gem5::minor::LSQ::LSQRequest::setState(), and gem5::minor::LSQ::LSQRequest::skipped.
| void gem5::minor::LSQ::SplitDataRequest::sendNextFragmentToTranslation | ( | ) |
Part of the address translation loop, see startAddTranslation.
Definition at line 701 of file lsq.cc.
References DPRINTFS, fragmentRequests, gem5::ThreadContext::getMMUPtr(), gem5::minor::LSQ::LSQRequest::inst, gem5::minor::LSQ::LSQRequest::isLoad, numInTranslationFragments, numTranslatedFragments, gem5::minor::LSQ::LSQRequest::port, gem5::BaseMMU::Read, gem5::BaseMMU::translateTiming(), and gem5::BaseMMU::Write.
Referenced by SplitDataRequest(), and startAddrTranslation().
|
inlinevirtual |
Have we stepped past the end of fragmentPackets?
Implements gem5::minor::LSQ::LSQRequest.
Definition at line 457 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 gem5::minor::LSQ::LSQRequest.
Definition at line 583 of file lsq.cc.
References gem5::minor::LSQ::LSQRequest::Complete, gem5::minor::LSQ::LSQRequest::disableMemAccess(), gem5::minor::LSQ::LSQRequest::InTranslation, makeFragmentRequests(), numFragments, numInTranslationFragments, numTranslatedFragments, sendNextFragmentToTranslation(), and gem5::minor::LSQ::LSQRequest::setState().
|
virtual |
Step on numIssuedFragments.
Implements gem5::minor::LSQ::LSQRequest.
Definition at line 616 of file lsq.cc.
References numIssuedFragments, and numTranslatedFragments.
|
protected |
Packets matching fragmentRequests to issue fragments to memory.
Definition at line 418 of file lsq.hh.
Referenced by getHeadPacket(), makeFragmentPackets(), and ~SplitDataRequest().
|
protected |
Fragment Requests corresponding to the address ranges of each fragment.
Definition at line 415 of file lsq.hh.
Referenced by finish(), makeFragmentPackets(), makeFragmentRequests(), and sendNextFragmentToTranslation().
|
protected |
Number of fragments this request is split into.
Definition at line 396 of file lsq.hh.
Referenced by finish(), makeFragmentRequests(), and startAddrTranslation().
|
protected |
Number of fragments in the address translation mechanism.
Definition at line 399 of file lsq.hh.
Referenced by finish(), sendNextFragmentToTranslation(), and startAddrTranslation().
|
protected |
Number of fragments already issued (<= numFragments)
Definition at line 408 of file lsq.hh.
Referenced by getHeadPacket(), hasPacketsInMemSystem(), sentAllPackets(), and stepToNextPacket().
|
protected |
Number of fragments retired back to this request.
Definition at line 411 of file lsq.hh.
Referenced by hasPacketsInMemSystem(), and retireResponse().
|
protected |
Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments.
When numTranslatedFramgents == numFragments, translation is complete
Definition at line 405 of file lsq.hh.
Referenced by finish(), getHeadPacket(), makeFragmentPackets(), retireResponse(), sendNextFragmentToTranslation(), sentAllPackets(), startAddrTranslation(), and stepToNextPacket().
|
protected |
Event to step between translations.
Definition at line 393 of file lsq.hh.
Referenced by finish(), and SplitDataRequest().