46 #ifndef __ARCH_ARM_LOCKED_MEM_HH__ 47 #define __ARCH_ARM_LOCKED_MEM_HH__ 57 #include "debug/LLSC.hh" 70 DPRINTF(LLSC,
"%s: handling snoop for address: %#x locked: %d\n",
71 xc->getCpuPtr()->name(),pkt->
getAddr(),
80 DPRINTF(LLSC,
"%s: handling snoop for address: %#x locked addr: %#x\n",
81 xc->getCpuPtr()->name(),snoop_addr, locked_addr);
82 if (locked_addr == snoop_addr) {
83 DPRINTF(LLSC,
"%s: address match, clearing lock and signaling sev\n",
84 xc->getCpuPtr()->name());
88 xc->getCpuPtr()->wakeup(xc->threadId());
98 DPRINTF(LLSC,
"%s: Placing address %#x in monitor\n", xc->getCpuPtr()->name(),
106 DPRINTF(LLSC,
"%s: handling snoop lock hit address: %#x\n",
119 DPRINTF(LLSC,
"%s: handling locked write for address %#x in monitor\n",
120 xc->getCpuPtr()->name(), req->getPaddr());
125 if (!lock_flag || (req->getPaddr() & cacheBlockMask) != lock_addr) {
128 req->setExtraData(0);
130 DPRINTF(LLSC,
"%s: clearing lock flag in handle locked write\n",
131 xc->getCpuPtr()->name());
136 int stCondFailures = xc->readStCondFailures();
138 xc->setStCondFailures(stCondFailures);
139 if (stCondFailures % 100000 == 0) {
140 warn(
"context %d: %d consecutive " 141 "store conditional failures\n",
142 xc->contextId(), stCondFailures);
159 DPRINTF(LLSC,
"Clearing lock and signaling sev\n");
163 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)