summaryrefslogtreecommitdiff
path: root/src/arch/arm/locked_mem.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/locked_mem.hh')
-rw-r--r--src/arch/arm/locked_mem.hh16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/arch/arm/locked_mem.hh b/src/arch/arm/locked_mem.hh
index 8aa181245..2fcbc4a92 100644
--- a/src/arch/arm/locked_mem.hh
+++ b/src/arch/arm/locked_mem.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 ARM Limited
+ * Copyright (c) 2012-2013,2017 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -148,6 +148,20 @@ handleLockedWrite(XC *xc, Request *req, Addr cacheBlockMask)
return true;
}
+template <class XC>
+inline void
+globalClearExclusive(XC *xc)
+{
+ // A spinlock would typically include a Wait For Event (WFE) to
+ // conserve energy. The ARMv8 architecture specifies that an event
+ // is automatically generated when clearing the exclusive monitor
+ // to wake up the processor in WFE.
+ DPRINTF(LLSC,"Clearing lock and signaling sev\n");
+ xc->setMiscReg(MISCREG_LOCKFLAG, false);
+ // Implement ARMv8 WFE/SEV semantics
+ xc->setMiscReg(MISCREG_SEV_MAILBOX, true);
+ xc->getCpuPtr()->wakeup(xc->threadId());
+}
} // namespace ArmISA