320,324c320,327
< AbstractCacheEntry *e = m_dataCache_ptr->lookup(address);
< // The controller has lost the coherence permissions, hence the lock
< // on the cache line maintained by the cache should be cleared.
< if (e && e->isLocked(m_version)) {
< e->clearLocked();
---
> RequestTable::iterator i = m_writeRequestTable.find(address);
> if (i != m_writeRequestTable.end()) {
> SequencerRequest* request = i->second;
> // The controller has lost the coherence permissions, hence the lock
> // on the cache line maintained by the cache should be cleared.
> if (request->m_type == RubyRequestType_Store_Conditional) {
> m_dataCache_ptr->clearLocked(address);
> }
331,334c334
< AbstractCacheEntry *e = m_dataCache_ptr->lookup(address);
< if (!e)
< return true;
<
---
> //
337a338
> //
340c341
< if (!e->isLocked(m_version)) {
---
> if (!m_dataCache_ptr->isLocked(address, m_version)) {
357c358
< e->clearLocked();
---
> m_dataCache_ptr->clearLocked(address);
363,364c364,366
< e->setLocked(m_version);
< } else if (e->isLocked(m_version)) {
---
> m_dataCache_ptr->setLocked(address, m_version);
> } else if ((m_dataCache_ptr->isTagPresent(address)) &&
> (m_dataCache_ptr->isLocked(address, m_version))) {
368c370
< e->clearLocked();
---
> m_dataCache_ptr->clearLocked(address);
499,502d500
< warn_once("Replacement policy updates recently became the responsibility "
< "of SLICC state machines. Make sure to setMRU() near callbacks "
< "in .sm files!");
<
504a503
> Addr request_line_address = makeLineAddress(pkt->getAddr());
507a507,513
> // Set this cache entry to the most recently used
> if (type == RubyRequestType_IFETCH) {
> m_instCache_ptr->setMRU(request_line_address);
> } else {
> m_dataCache_ptr->setMRU(request_line_address);
> }
>