git: kernel - wakeup() lfence -> mfence

Matthew Dillon dillon at
Thu Aug 24 22:32:41 PDT 2017

commit 9b302485d4f8583183e666fd23820ad7eb08c968
Author: Matthew Dillon <dillon at>
Date:   Thu Aug 24 22:16:34 2017 -0700

    kernel - wakeup() lfence -> mfence
    * wakeup() needs to use a mfence() before loading from the global cpumasks
      array.   lfence() is not sufficient.
    * Issue arises where the mutex code sets a variable non-atomically and
      then calls wakeup().  If the write to the variable is reordered around
      wakeup()'s read of the global cpumask, then wakeup() can race the mutex
      link wait setup and cause the mutex to stall.

Summary of changes:
 sys/kern/kern_synch.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list