svn commit: r287960 - in head/sys/arm64: arm64 include
Konstantin Belousov
kib at FreeBSD.org
Fri Sep 18 16:52:19 UTC 2015
Author: kib
Date: Fri Sep 18 16:52:18 2015
New Revision: 287960
URL: https://svnweb.freebsd.org/changeset/base/287960
Log:
Clear exclusive monitors when handling data aborts, the monitors are
in unknown state per spec.
Reviewed by: andrew (previous version)
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D3668
Modified:
head/sys/arm64/arm64/trap.c
head/sys/arm64/include/cpufunc.h
Modified: head/sys/arm64/arm64/trap.c
==============================================================================
--- head/sys/arm64/arm64/trap.c Fri Sep 18 13:44:15 2015 (r287959)
+++ head/sys/arm64/arm64/trap.c Fri Sep 18 16:52:18 2015 (r287960)
@@ -155,6 +155,13 @@ data_abort(struct trapframe *frame, uint
uint64_t far;
int error, sig, ucode;
+ /*
+ * According to the ARMv8-A rev. A.g, B2.10.5 "Load-Exclusive
+ * and Store-Exclusive instruction usage restrictions", state
+ * of the exclusive monitors after data abort exception is unknown.
+ */
+ clrex();
+
#ifdef KDB
if (kdb_active) {
kdb_reenter();
Modified: head/sys/arm64/include/cpufunc.h
==============================================================================
--- head/sys/arm64/include/cpufunc.h Fri Sep 18 13:44:15 2015 (r287959)
+++ head/sys/arm64/include/cpufunc.h Fri Sep 18 16:52:18 2015 (r287960)
@@ -108,6 +108,17 @@ get_mpidr(void)
return (mpidr);
}
+static __inline void
+clrex(void)
+{
+
+ /*
+ * Ensure compiler barrier, otherwise the monitor clear might
+ * occur too late for us ?
+ */
+ __asm __volatile("clrex" : : : "memory");
+}
+
#define cpu_nullop() arm64_nullop()
#define cpufunc_nullop() arm64_nullop()
#define cpu_setttb(a) arm64_setttb(a)
More information about the svn-src-head
mailing list