|
gem5
v19.0.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 393 of file lsq.cc.
References fragmentPackets, fragmentRequests, numFragments, numInTranslationFragments, numIssuedFragments, numRetiredFragments, numTranslatedFragments, and sendNextFragmentToTranslation().
| LSQ< Impl >::SplitDataRequest::~SplitDataRequest | ( | ) |
Definition at line 410 of file lsq.cc.
References fragmentPackets, and ArmISA::i.
|
protectedvirtual |
TLB response interface.
Implements BaseTLB::Translation.
Definition at line 335 of file lsq.cc.
References Minor::LSQ::LSQRequest::Complete, Minor::LSQ::LSQRequest::completeDisabledMemAccess(), Minor::LSQ::cpu, curTick(), DPRINTFS, Minor::Pipeline::ExecuteStageId, Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isTranslationDelayed, M5_VAR_USED, NoFault, Minor::LSQ::numAccessesInDTLB, Minor::LSQ::LSQRequest::port, EventManager::schedule(), Minor::LSQ::LSQRequest::setState(), Minor::LSQ::LSQRequest::Translated, Minor::LSQ::tryToSendToTransfers(), Minor::LSQ::LSQRequest::tryToSuppressFault(), and MinorCPU::wakeupOnEvent().
Get the head packet as counted by numIssuedFragments.
Implements Minor::LSQ::LSQRequest.
Definition at line 616 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 Minor::LSQ::LSQRequest.
Definition at line 447 of file lsq.hh.
Referenced by retireResponse().
| void LSQ< Impl >::SplitDataRequest::makeFragmentPackets | ( | ) |
Make the packets to go with the requests so they can be sent to the memory system.
Definition at line 541 of file lsq.cc.
References Minor::LSQ::LSQRequest::data, DPRINTFS, fragment, fragmentPackets, fragmentRequests, Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isLoad, Minor::LSQ::LSQRequest::makePacket(), Minor::makePacketForRequest(), numTranslatedFragments, Minor::LSQ::LSQRequest::port, and Minor::LSQ::LSQRequest::request.
| 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 420 of file lsq.cc.
References addrBlockOffset(), DPRINTFS, fragment, fragmentRequests, isAnyActiveElement(), Minor::LSQ::lineWidth, M5_VAR_USED, numFragments, Minor::LSQ::LSQRequest::port, and Minor::LSQ::LSQRequest::request.
Referenced by startAddrTranslation().
For loads, paste the response data into the main response packet.
Implements Minor::LSQ::LSQRequest.
Definition at line 632 of file lsq.cc.
References Minor::LSQ::LSQRequest::Complete, Packet::copyError(), Minor::LSQ::LSQRequest::data, DPRINTFS, Packet::getConstPtr(), Packet::getPtr(), Packet::getSize(), hasPacketsInMemSystem(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isComplete(), Packet::isError(), Minor::LSQ::LSQRequest::isLoad, Packet::isRead(), Packet::isWrite(), Packet::makeResponse(), Packet::needsResponse(), NoFault, numRetiredFragments, numTranslatedFragments, Minor::LSQ::LSQRequest::packet, Minor::LSQ::LSQRequest::port, Packet::req, Minor::LSQ::LSQRequest::request, Minor::LSQ::LSQRequest::setSkipped(), Minor::LSQ::LSQRequest::setState(), and Minor::LSQ::LSQRequest::skipped.
| void LSQ< Impl >::SplitDataRequest::sendNextFragmentToTranslation | ( | ) |
Part of the address translation loop, see startAddTranslation.
Definition at line 709 of file lsq.cc.
References Minor::LSQ::cpu, DPRINTFS, fragmentRequests, BaseCPU::getContext(), ThreadContext::getDTBPtr(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isLoad, Minor::LSQ::numAccessesInDTLB, numInTranslationFragments, numTranslatedFragments, Minor::LSQ::LSQRequest::port, BaseTLB::Read, BaseTLB::translateTiming(), and BaseTLB::Write.
Referenced by SplitDataRequest(), and startAddrTranslation().
|
inlinevirtual |
Have we stepped past the end of fragmentPackets?
Implements Minor::LSQ::LSQRequest.
|
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 591 of file lsq.cc.
References Minor::LSQ::LSQRequest::Complete, Minor::LSQ::LSQRequest::disableMemAccess(), Minor::LSQ::LSQRequest::InTranslation, makeFragmentRequests(), numFragments, numInTranslationFragments, numTranslatedFragments, sendNextFragmentToTranslation(), and Minor::LSQ::LSQRequest::setState().
|
virtual |
Step on numIssuedFragments.
Implements Minor::LSQ::LSQRequest.
Definition at line 624 of file lsq.cc.
References numIssuedFragments, and numTranslatedFragments.
|
protected |
Packets matching fragmentRequests to issue fragments to memory.
Definition at line 412 of file lsq.hh.
Referenced by getHeadPacket(), makeFragmentPackets(), SplitDataRequest(), and ~SplitDataRequest().
|
protected |
Fragment Requests corresponding to the address ranges of each fragment.
Definition at line 409 of file lsq.hh.
Referenced by makeFragmentPackets(), makeFragmentRequests(), sendNextFragmentToTranslation(), and SplitDataRequest().
|
protected |
Number of fragments this request is split into.
Definition at line 390 of file lsq.hh.
Referenced by makeFragmentRequests(), SplitDataRequest(), and startAddrTranslation().
|
protected |
Number of fragments in the address translation mechanism.
Definition at line 393 of file lsq.hh.
Referenced by sendNextFragmentToTranslation(), SplitDataRequest(), and startAddrTranslation().
|
protected |
Number of fragments already issued (<= numFragments)
Definition at line 402 of file lsq.hh.
Referenced by getHeadPacket(), SplitDataRequest(), and stepToNextPacket().
|
protected |
Number of fragments retired back to this request.
Definition at line 405 of file lsq.hh.
Referenced by retireResponse(), and SplitDataRequest().
|
protected |
Number of fragments that have completed address translation, (numTranslatedFragments + numInTranslationFragments) <= numFragments.
When numTranslatedFramgents == numFragments, translation is complete
Definition at line 399 of file lsq.hh.
Referenced by getHeadPacket(), makeFragmentPackets(), retireResponse(), sendNextFragmentToTranslation(), SplitDataRequest(), startAddrTranslation(), and stepToNextPacket().
|
protected |