42 #ifndef __ARCH_ARM_LOCKED_MEM_HH__ 43 #define __ARCH_ARM_LOCKED_MEM_HH__ 53 #include "debug/LLSC.hh" 66 DPRINTF(LLSC,
"%s: handling snoop for address: %#x locked: %d\n",
67 xc->getCpuPtr()->name(),pkt->
getAddr(),
76 DPRINTF(LLSC,
"%s: handling snoop for address: %#x locked addr: %#x\n",
77 xc->getCpuPtr()->name(),snoop_addr, locked_addr);
78 if (locked_addr == snoop_addr) {
79 DPRINTF(LLSC,
"%s: address match, clearing lock and signaling sev\n",
80 xc->getCpuPtr()->name());
84 xc->getCpuPtr()->wakeup(xc->threadId());
94 DPRINTF(LLSC,
"%s: Placing address %#x in monitor\n", xc->getCpuPtr()->name(),
102 DPRINTF(LLSC,
"%s: handling snoop lock hit address: %#x\n",
115 DPRINTF(LLSC,
"%s: handling locked write for address %#x in monitor\n",
116 xc->getCpuPtr()->name(), req->getPaddr());
121 if (!lock_flag || (req->getPaddr() & cacheBlockMask) != lock_addr) {
124 req->setExtraData(0);
126 DPRINTF(LLSC,
"%s: clearing lock flag in handle locked write\n",
127 xc->getCpuPtr()->name());
132 int stCondFailures = xc->readStCondFailures();
134 xc->setStCondFailures(stCondFailures);
135 if (stCondFailures % 100000 == 0) {
136 warn(
"context %d: %d consecutive " 137 "store conditional failures\n",
138 xc->contextId(), stCondFailures);
155 DPRINTF(LLSC,
"Clearing lock and signaling sev\n");
159 xc->getCpuPtr()->wakeup(xc->threadId());
bool handleLockedWrite(XC *xc, const RequestPtr &req, Addr cacheBlockMask)
void handleLockedSnoopHit(XC *xc)
void handleLockedSnoop(XC *xc, PacketPtr pkt, Addr cacheBlockMask)
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
std::shared_ptr< Request > RequestPtr
bool isInvalidate() const
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
void globalClearExclusive(XC *xc)
Declaration of the Packet class.
void handleLockedRead(XC *xc, const RequestPtr &req)