31d30
< #include "mem/gems_common/Map.hh"
95,108c94,109
< std::vector<Address> keys = m_readRequestTable.keys();
< for (int i = 0; i < keys.size(); i++) {
< SequencerRequest* request = m_readRequestTable.lookup(keys[i]);
< if (current_time - request->issue_time >= m_deadlock_threshold) {
< WARN_MSG("Possible Deadlock detected");
< WARN_EXPR(request);
< WARN_EXPR(m_version);
< WARN_EXPR(request->ruby_request.paddr);
< WARN_EXPR(keys.size());
< WARN_EXPR(current_time);
< WARN_EXPR(request->issue_time);
< WARN_EXPR(current_time - request->issue_time);
< ERROR_MSG("Aborting");
< }
---
> RequestTable::iterator read = m_readRequestTable.begin();
> RequestTable::iterator read_end = m_readRequestTable.end();
> for (; read != read_end; ++read) {
> SequencerRequest* request = read->second;
> if (current_time - request->issue_time < m_deadlock_threshold)
> continue;
>
> WARN_MSG("Possible Deadlock detected");
> WARN_EXPR(request);
> WARN_EXPR(m_version);
> WARN_EXPR(request->ruby_request.paddr);
> WARN_EXPR(m_readRequestTable.size());
> WARN_EXPR(current_time);
> WARN_EXPR(request->issue_time);
> WARN_EXPR(current_time - request->issue_time);
> ERROR_MSG("Aborting");
111,123c112,126
< keys = m_writeRequestTable.keys();
< for (int i = 0; i < keys.size(); i++) {
< SequencerRequest* request = m_writeRequestTable.lookup(keys[i]);
< if (current_time - request->issue_time >= m_deadlock_threshold) {
< WARN_MSG("Possible Deadlock detected");
< WARN_EXPR(request);
< WARN_EXPR(m_version);
< WARN_EXPR(current_time);
< WARN_EXPR(request->issue_time);
< WARN_EXPR(current_time - request->issue_time);
< WARN_EXPR(keys.size());
< ERROR_MSG("Aborting");
< }
---
> RequestTable::iterator write = m_writeRequestTable.begin();
> RequestTable::iterator write_end = m_writeRequestTable.end();
> for (; write != write_end; ++write) {
> SequencerRequest* request = write->second;
> if (current_time - request->issue_time < m_deadlock_threshold)
> continue;
>
> WARN_MSG("Possible Deadlock detected");
> WARN_EXPR(request);
> WARN_EXPR(m_version);
> WARN_EXPR(current_time);
> WARN_EXPR(request->issue_time);
> WARN_EXPR(current_time - request->issue_time);
> WARN_EXPR(m_writeRequestTable.size());
> ERROR_MSG("Aborting");
163,165c166,167
< std::vector<Address> rkeys = m_readRequestTable.keys();
< int read_size = rkeys.size();
< out << "proc " << m_version << " Read Requests = " << read_size << endl;
---
> out << "proc " << m_Read
> << " version Requests = " << m_readRequestTable.size() << endl;
168,169c170,173
< for (int i = 0; i < read_size; ++i) {
< SequencerRequest *request = m_readRequestTable.lookup(rkeys[i]);
---
> RequestTable::iterator read = m_readRequestTable.begin();
> RequestTable::iterator read_end = m_readRequestTable.end();
> for (; read != read_end; ++read) {
> SequencerRequest* request = read->second;
177,179c181,182
< std::vector<Address> wkeys = m_writeRequestTable.keys();
< int write_size = wkeys.size();
< out << "proc " << m_version << " Write Requests = " << write_size << endl;
---
> out << "proc " << m_version
> << " Write Requests = " << m_writeRequestTable.size << endl;
182,183c185,188
< for (int i = 0; i < write_size; ++i){
< CacheMsg &request = m_writeRequestTable.lookup(wkeys[i]);
---
> RequestTable::iterator write = m_writeRequestTable.begin();
> RequestTable::iterator write_end = m_writeRequestTable.end();
> for (; write != write_end; ++write) {
> SequencerRequest* request = write->second;
234,235c239,244
< if (m_writeRequestTable.exist(line_addr)) {
< m_writeRequestTable.lookup(line_addr) = request;
---
> pair<RequestTable::iterator, bool> r =
> m_writeRequestTable.insert(RequestTable::value_type(line_addr, 0));
> bool success = r.second;
> RequestTable::iterator i = r.first;
> if (!success) {
> i->second = request;
241,242c250
< m_writeRequestTable.allocate(line_addr);
< m_writeRequestTable.lookup(line_addr) = request;
---
> i->second = request;
245,246c253,258
< if (m_readRequestTable.exist(line_addr)) {
< m_readRequestTable.lookup(line_addr) = request;
---
> pair<RequestTable::iterator, bool> r =
> m_readRequestTable.insert(RequestTable::value_type(line_addr, 0));
> bool success = r.second;
> RequestTable::iterator i = r.first;
> if (!success) {
> i->second = request;
252,253c264
< m_readRequestTable.allocate(line_addr);
< m_readRequestTable.lookup(line_addr) = request;
---
> i->second = request;
265a277,284
> Sequencer::markRemoved()
> {
> m_outstanding_count--;
> assert(m_outstanding_count ==
> m_writeRequestTable.size() + m_readRequestTable.size());
> }
>
> void
279c298
< m_writeRequestTable.deallocate(line_addr);
---
> m_writeRequestTable.erase(line_addr);
281c300
< m_readRequestTable.deallocate(line_addr);
---
> m_readRequestTable.erase(line_addr);
283d301
< m_outstanding_count--;
285c303
< assert(m_outstanding_count == m_writeRequestTable.size() + m_readRequestTable.size());
---
> markRemoved();
292c310
< assert(m_writeRequestTable.exist(line_address(address)));
---
> assert(m_writeRequestTable.count(line_address(address)));
294c312,314
< SequencerRequest* request = m_writeRequestTable.lookup(address);
---
> RequestTable::iterator i = m_writeRequestTable.find(address);
> assert(i != m_writeRequestTable.end());
> SequencerRequest* request = i->second;
296c316,317
< removeRequest(request);
---
> m_writeRequestTable.erase(i);
> markRemoved();
319c340
< assert(m_readRequestTable.exist(line_address(address)));
---
> assert(m_readRequestTable.count(line_address(address)));
321,322c342,344
< SequencerRequest* request = m_readRequestTable.lookup(address);
< removeRequest(request);
---
> RequestTable::iterator i = m_readRequestTable.find(address);
> assert(i != m_readRequestTable.end());
> SequencerRequest* request = i->second;
323a346,348
> m_readRequestTable.erase(i);
> markRemoved();
>
412c437
< m_writeRequestTable.exist(line_address(Address(request.paddr)));
---
> !!m_writeRequestTable.count(line_address(Address(request.paddr)));
414c439
< m_readRequestTable.exist(line_address(Address(request.paddr)));
---
> !!m_readRequestTable.count(line_address(Address(request.paddr)));
444c469
< return m_writeRequestTable.size() == 0 && m_readRequestTable.size() == 0;
---
> return m_writeRequestTable.empty() && m_readRequestTable.empty();
582a608,622
> template <class KEY, class VALUE>
> std::ostream &
> operator<<(ostream &out, const m5::hash_map<KEY, VALUE> &map)
> {
> typename m5::hash_map<KEY, VALUE>::const_iterator i = map.begin();
> typename m5::hash_map<KEY, VALUE>::const_iterator end = map.end();
>
> out << "[";
> for (; i != end; ++i)
> out << " " << i->first << "=" << i->second;
> out << " ]";
>
> return out;
> }
>