summaryrefslogtreecommitdiff
path: root/src/mem/ruby/system/Sequencer.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/system/Sequencer.hh')
-rw-r--r--src/mem/ruby/system/Sequencer.hh34
1 files changed, 15 insertions, 19 deletions
diff --git a/src/mem/ruby/system/Sequencer.hh b/src/mem/ruby/system/Sequencer.hh
index 33fd53064..71ffa99bf 100644
--- a/src/mem/ruby/system/Sequencer.hh
+++ b/src/mem/ruby/system/Sequencer.hh
@@ -30,6 +30,7 @@
#define __MEM_RUBY_SYSTEM_SEQUENCER_HH__
#include <iostream>
+#include <list>
#include <unordered_map>
#include "mem/ruby/common/Address.hh"
@@ -44,11 +45,12 @@ struct SequencerRequest
{
PacketPtr pkt;
RubyRequestType m_type;
+ RubyRequestType m_second_type;
Cycles issue_time;
-
SequencerRequest(PacketPtr _pkt, RubyRequestType _m_type,
- Cycles _issue_time)
- : pkt(_pkt), m_type(_m_type), issue_time(_issue_time)
+ RubyRequestType _m_second_type, Cycles _issue_time)
+ : pkt(_pkt), m_type(_m_type), m_second_type(_m_second_type),
+ issue_time(_issue_time)
{}
};
@@ -151,21 +153,21 @@ class Sequencer : public RubyPort
private:
void issueRequest(PacketPtr pkt, RubyRequestType type);
- void hitCallback(SequencerRequest* request, DataBlock& data,
+ void hitCallback(SequencerRequest* srequest, DataBlock& data,
bool llscSuccess,
const MachineType mach, const bool externalHit,
const Cycles initialRequestTime,
const Cycles forwardRequestTime,
const Cycles firstResponseTime);
- void recordMissLatency(const Cycles t, const RubyRequestType type,
+ void recordMissLatency(SequencerRequest* srequest, bool llscSuccess,
const MachineType respondingMach,
- bool isExternalHit, Cycles issuedTime,
- Cycles initialRequestTime,
- Cycles forwardRequestTime, Cycles firstResponseTime,
- Cycles completionTime);
+ bool isExternalHit, Cycles initialRequestTime,
+ Cycles forwardRequestTime,
+ Cycles firstResponseTime);
- RequestStatus insertRequest(PacketPtr pkt, RubyRequestType request_type);
+ RequestStatus insertRequest(PacketPtr pkt, RubyRequestType primary_type,
+ RubyRequestType secondary_type);
bool handleLlsc(Addr address, SequencerRequest* request);
// Private copy constructor and assignment operator
@@ -186,19 +188,13 @@ class Sequencer : public RubyPort
Cycles m_data_cache_hit_latency;
Cycles m_inst_cache_hit_latency;
- typedef std::unordered_map<Addr, SequencerRequest*> RequestTable;
- RequestTable m_writeRequestTable;
- RequestTable m_readRequestTable;
+ // RequestTable contains both read and write requests, handles aliasing
+ std::unordered_map<Addr, std::list<SequencerRequest>> m_RequestTable;
+
// Global outstanding request count, across all request tables
int m_outstanding_count;
bool m_deadlock_check_scheduled;
- //! Counters for recording aliasing information.
- Stats::Scalar m_store_waiting_on_load;
- Stats::Scalar m_store_waiting_on_store;
- Stats::Scalar m_load_waiting_on_store;
- Stats::Scalar m_load_waiting_on_load;
-
int m_coreId;
bool m_runningGarnetStandalone;