Module Name:    src
Committed By:   skrll
Date:           Tue Oct 13 21:27:18 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64: lock_stubs.S

Log Message:
Use load-acquire exclusive and store-release exclusive (and remove the
barrier instructions) as suggested by riastradh a little while ago.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/aarch64/aarch64/lock_stubs.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/lock_stubs.S
diff -u src/sys/arch/aarch64/aarch64/lock_stubs.S:1.2 src/sys/arch/aarch64/aarch64/lock_stubs.S:1.3
--- src/sys/arch/aarch64/aarch64/lock_stubs.S:1.2	Thu Aug 13 07:14:04 2020
+++ src/sys/arch/aarch64/aarch64/lock_stubs.S	Tue Oct 13 21:27:18 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: lock_stubs.S,v 1.2 2020/08/13 07:14:04 skrll Exp $	*/
+/*	$NetBSD: lock_stubs.S,v 1.3 2020/10/13 21:27:18 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2014, 2020 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 
 #include "assym.h"
 
-RCSID("$NetBSD: lock_stubs.S,v 1.2 2020/08/13 07:14:04 skrll Exp $")
+RCSID("$NetBSD: lock_stubs.S,v 1.3 2020/10/13 21:27:18 skrll Exp $")
 
 #ifndef LOCKDEBUG
 /*
@@ -45,11 +45,10 @@ RCSID("$NetBSD: lock_stubs.S,v 1.2 2020/
 ENTRY(mutex_enter)
 	mrs	x1, tpidr_el1		/* x1 = curlwp */
 1:
-	ldxr	x2, [x0]		/* load old value */
+	ldaxr	x2, [x0]		/* load old value */
 	cbnz	x2, 3f			/*   equals zero? */
 	stxr	w3, x1, [x0]		/* store curlwp as new value */
 	cbnz	w3, 2f			/*   succeed? nope, try again. */
-	dmb	sy			/* membar_enter() */
 	ret
 2:
 	b	1b
@@ -64,13 +63,12 @@ END(mutex_enter)
  * so just use ldxr+stxr to achieve the same.
  */
 ENTRY(mutex_exit)
-	dmb	sy			/* membar_exit() */
 	mrs	x1, tpidr_el1		/* x1 = curlwp */
 1:
 	ldxr	x2, [x0]		/* load old value */
 	cmp	x1, x2			/*   equals curlwp? */
 	b.ne	3f			/*     slow path if different */
-	stxr	w3, xzr, [x0]		/* store zero as new value */
+	stlxr	w3, xzr, [x0]		/* store zero as new value */
 	cbnz	w3, 2f			/*   succeed? nope, try again. */
 	ret
 2:

Reply via email to