Author: mjg
Date: Sun Nov 12 03:13:01 2017
New Revision: 325734
URL: https://svnweb.freebsd.org/changeset/base/325734

Log:
  amd64: stop nesting preemption counter in spinlock_enter
  
  Discussed with:       jhb

Modified:
  head/sys/amd64/amd64/machdep.c

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c      Sun Nov 12 02:34:33 2017        
(r325733)
+++ head/sys/amd64/amd64/machdep.c      Sun Nov 12 03:13:01 2017        
(r325734)
@@ -1853,9 +1853,9 @@ spinlock_enter(void)
                flags = intr_disable();
                td->td_md.md_spinlock_count = 1;
                td->td_md.md_saved_flags = flags;
+               critical_enter();
        } else
                td->td_md.md_spinlock_count++;
-       critical_enter();
 }
 
 void
@@ -1865,11 +1865,12 @@ spinlock_exit(void)
        register_t flags;
 
        td = curthread;
-       critical_exit();
        flags = td->td_md.md_saved_flags;
        td->td_md.md_spinlock_count--;
-       if (td->td_md.md_spinlock_count == 0)
+       if (td->td_md.md_spinlock_count == 0) {
+               critical_exit();
                intr_restore(flags);
+       }
 }
 
 /*
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to