The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kernel/mutex-debug.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Mutexes: blocking mutual exclusion locks
    3  *
    4  * started by Ingo Molnar:
    5  *
    6  *  Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
    7  *
    8  * This file contains mutex debugging related internal declarations,
    9  * prototypes and inline functions, for the CONFIG_DEBUG_MUTEXES case.
   10  * More details are in kernel/mutex-debug.c.
   11  */
   12 
   13 /*
   14  * This must be called with lock->wait_lock held.
   15  */
   16 extern void debug_mutex_lock_common(struct mutex *lock,
   17                                     struct mutex_waiter *waiter);
   18 extern void debug_mutex_wake_waiter(struct mutex *lock,
   19                                     struct mutex_waiter *waiter);
   20 extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
   21 extern void debug_mutex_add_waiter(struct mutex *lock,
   22                                    struct mutex_waiter *waiter,
   23                                    struct thread_info *ti);
   24 extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
   25                                 struct thread_info *ti);
   26 extern void debug_mutex_unlock(struct mutex *lock);
   27 extern void debug_mutex_init(struct mutex *lock, const char *name,
   28                              struct lock_class_key *key);
   29 
   30 static inline void mutex_set_owner(struct mutex *lock)
   31 {
   32         lock->owner = current;
   33 }
   34 
   35 static inline void mutex_clear_owner(struct mutex *lock)
   36 {
   37         lock->owner = NULL;
   38 }
   39 
   40 #define spin_lock_mutex(lock, flags)                    \
   41         do {                                            \
   42                 struct mutex *l = container_of(lock, struct mutex, wait_lock); \
   43                                                         \
   44                 DEBUG_LOCKS_WARN_ON(in_interrupt());    \
   45                 local_irq_save(flags);                  \
   46                 arch_spin_lock(&(lock)->rlock.raw_lock);\
   47                 DEBUG_LOCKS_WARN_ON(l->magic != l);     \
   48         } while (0)
   49 
   50 #define spin_unlock_mutex(lock, flags)                          \
   51         do {                                                    \
   52                 arch_spin_unlock(&(lock)->rlock.raw_lock);      \
   53                 local_irq_restore(flags);                       \
   54                 preempt_check_resched();                        \
   55         } while (0)

Cache object: 07896c659cbf2ba4d9d652efa2e8db73


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.