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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to