svn commit: r287536 - head/sys/arm64/arm64

Andrew Turner andrew at FreeBSD.org
Mon Sep 7 14:01:19 UTC 2015


Author: andrew
Date: Mon Sep  7 14:01:18 2015
New Revision: 287536
URL: https://svnweb.freebsd.org/changeset/base/287536

Log:
  Use load-acquire semantics while waiting for td_lock to be released. The
  store should have release semantics and will have due to the dsb above it
  so add a comment to explain this. [1]
  
  While here update the code to not reload the current thread, it's already
  in a register, we just need to not trash it.
  
  Suggested by:	kib [1]
  Sponsored by:	ABT Systems Ltd

Modified:
  head/sys/arm64/arm64/swtch.S

Modified: head/sys/arm64/arm64/swtch.S
==============================================================================
--- head/sys/arm64/arm64/swtch.S	Mon Sep  7 14:00:38 2015	(r287535)
+++ head/sys/arm64/arm64/swtch.S	Mon Sep  7 14:01:18 2015	(r287536)
@@ -160,17 +160,18 @@ ENTRY(cpu_switch)
 	dsb	sy
 	isb
 
-	/* Release the old thread */
+	/*
+	 * Release the old thread. This doesn't need to be a store-release
+	 * as the above dsb instruction will provide release semantics.
+	 */
 	str	x2, [x0, #TD_LOCK]
 #if defined(SCHED_ULE) && defined(SMP)
 	/* Read the value in blocked_lock */
 	ldr	x0, =_C_LABEL(blocked_lock)
-	ldr	x1, [x0]
-	/* Load curthread */
-	ldr	x2, [x18, #PC_CURTHREAD]
+	ldr	x2, [x0]
 1:
-	ldr	x3, [x2, #TD_LOCK]
-	cmp	x3, x1
+	ldar	x3, [x1, #TD_LOCK]
+	cmp	x3, x2
 	b.eq	1b
 #endif
 


More information about the svn-src-head mailing list