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

Wojciech Macek wma at FreeBSD.org
Thu Jan 28 12:00:18 UTC 2016


Author: wma
Date: Thu Jan 28 12:00:17 2016
New Revision: 294979
URL: https://svnweb.freebsd.org/changeset/base/294979

Log:
  Fix mutex releasing in ARM64 cpu_switch
  
      The code should be comparing pointers, not any data
      gathered from a blocked_lock.
  
  Spotted by:            cognet
  Approved by:           zbb, cognet (mentor)
  Differential revision: https://reviews.freebsd.org/D5100

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

Modified: head/sys/arm64/arm64/swtch.S
==============================================================================
--- head/sys/arm64/arm64/swtch.S	Thu Jan 28 09:25:15 2016	(r294978)
+++ head/sys/arm64/arm64/swtch.S	Thu Jan 28 12:00:17 2016	(r294979)
@@ -166,9 +166,8 @@ ENTRY(cpu_switch)
 	 */
 	str	x2, [x0, #TD_LOCK]
 #if defined(SCHED_ULE) && defined(SMP)
-	/* Read the value in blocked_lock */
-	ldr	x0, =_C_LABEL(blocked_lock)
-	ldr	x2, [x0]
+	/* Spin if TD_LOCK points to a blocked_lock */
+	ldr	x2, =_C_LABEL(blocked_lock)
 1:
 	ldar	x3, [x1, #TD_LOCK]
 	cmp	x3, x2


More information about the svn-src-head mailing list