abstract_mem.cc (9931:086fc5c038af) abstract_mem.cc (10102:b5de69974a2e)
1/*
2 * Copyright (c) 2010-2012 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 30 unchanged lines hidden (view full) ---

39 *
40 * Authors: Ron Dreslinski
41 * Ali Saidi
42 * Andreas Hansson
43 */
44
45#include "arch/registers.hh"
46#include "config/the_isa.hh"
1/*
2 * Copyright (c) 2010-2012 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 30 unchanged lines hidden (view full) ---

39 *
40 * Authors: Ron Dreslinski
41 * Ali Saidi
42 * Andreas Hansson
43 */
44
45#include "arch/registers.hh"
46#include "config/the_isa.hh"
47#include "cpu/base.hh"
48#include "cpu/thread_context.hh"
47#include "debug/LLSC.hh"
48#include "debug/MemoryAccess.hh"
49#include "mem/abstract_mem.hh"
50#include "mem/packet_access.hh"
51#include "sim/system.hh"
52
53using namespace std;
54

--- 200 unchanged lines hidden (view full) ---

255 // We write address paddr. However, there may be several entries with a
256 // reservation on this address (for other contextIds) and they must all
257 // be removed.
258 i = lockedAddrList.begin();
259 while (i != lockedAddrList.end()) {
260 if (i->addr == paddr) {
261 DPRINTF(LLSC, "Erasing lock record: context %d addr %#x\n",
262 i->contextId, paddr);
49#include "debug/LLSC.hh"
50#include "debug/MemoryAccess.hh"
51#include "mem/abstract_mem.hh"
52#include "mem/packet_access.hh"
53#include "sim/system.hh"
54
55using namespace std;
56

--- 200 unchanged lines hidden (view full) ---

257 // We write address paddr. However, there may be several entries with a
258 // reservation on this address (for other contextIds) and they must all
259 // be removed.
260 i = lockedAddrList.begin();
261 while (i != lockedAddrList.end()) {
262 if (i->addr == paddr) {
263 DPRINTF(LLSC, "Erasing lock record: context %d addr %#x\n",
264 i->contextId, paddr);
265 // For ARM, a spinlock would typically include a Wait
266 // For Event (WFE) to conserve energy. The ARMv8
267 // architecture specifies that an event is
268 // automatically generated when clearing the exclusive
269 // monitor to wake up the processor in WFE.
270 system()->getThreadContext(i->contextId)->getCpuPtr()->wakeup();
263 i = lockedAddrList.erase(i);
264 } else {
265 i++;
266 }
267 }
268 }
269
270 return allowStore;

--- 152 unchanged lines hidden ---
271 i = lockedAddrList.erase(i);
272 } else {
273 i++;
274 }
275 }
276 }
277
278 return allowStore;

--- 152 unchanged lines hidden ---