git: kernel - Fix GCC reordering problem with td_critcount

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Oct 2 18:43:41 PDT 2017


commit a4d95680362b7eba0c4840b8d5598533900a2f17
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Oct 2 18:42:34 2017 -0700

    kernel - Fix GCC reordering problem with td_critcount
    
    * Wrap all ++td->td_critcount and --td->td_critcount use cases
      with an inline which executes cpu_ccfence() before and after,
      to guarantee that GCC does not try to reorder the operation around
      critical memory changes.
    
    * This fixes a race in lockmgr() and possibly a few other places
      too.

Summary of changes:
 sys/kern/kern_mutex.c                      | 40 ++++++++++++++++--------------
 sys/kern/kern_spinlock.c                   |  3 ++-
 sys/kern/lwkt_thread.c                     |  1 +
 sys/platform/vkernel64/platform/machintr.c |  2 ++
 sys/platform/vkernel64/x86_64/exception.c  | 20 +++++++++------
 sys/sys/mutex2.h                           | 12 ++++-----
 sys/sys/spinlock2.h                        | 20 +++++++--------
 sys/sys/thread2.h                          | 28 ++++++++++++++++++---
 8 files changed, 78 insertions(+), 48 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/a4d95680362b7eba0c4840b8d5598533900a2f17


-- 
DragonFly BSD source repository


More information about the Commits mailing list