index
:
litmus-rt.git
archive/unc-master-3.0
archived-2013.1
archived-private-master
archived-semi-part
demo
ecrts-pgm-final
ecrts14-pgm-final
gpusync-rtss12
gpusync/staging
linux-tip
litmus2008-patch-series
master
pgm
prop/litmus-signals
prop/robust-tie-break
staging
test
tracing-devel
v2.6.34-with-arm-patches
v2015.1
wip-2011.2-bbb
wip-2011.2-bbb-trace
wip-2012.3-gpu
wip-2012.3-gpu-preport
wip-2012.3-gpu-rtss13
wip-2012.3-gpu-sobliv-budget-w-kshark
wip-aedzl-final
wip-aedzl-revised
wip-arbit-deadline
wip-aux-tasks
wip-bbb
wip-bbb-prio-don
wip-better-break
wip-binary-heap
wip-budget
wip-color
wip-color-jlh
wip-d10-hz1000
wip-default-clustering
wip-dissipation-jerickso
wip-dissipation2-jerickso
wip-ecrts14-pgm
wip-edf-hsb
wip-edf-os
wip-edf-tie-break
wip-edzl-critique
wip-edzl-final
wip-edzl-revised
wip-events
wip-extra-debug
wip-fix-switch-jerickso
wip-fix3
wip-fmlp-dequeue
wip-ft-irq-flag
wip-gpu-cleanup
wip-gpu-interrupts
wip-gpu-rtas12
wip-gpu-rtss12
wip-gpu-rtss12-srp
wip-gpusync-merge
wip-ikglp
wip-k-fmlp
wip-kernel-coloring
wip-kernthreads
wip-klmirqd-to-aux
wip-kshark
wip-litmus-3.2
wip-litmus2011.2
wip-litmus3.0-2011.2
wip-master-2.6.33-rt
wip-mc
wip-mc-bipasa
wip-mc-jerickso
wip-mc2-cache-slack
wip-mcrit-mac
wip-merge-3.0
wip-merge-v3.0
wip-migration-affinity
wip-mmap-uncache
wip-modechange
wip-nested-locking
wip-omlp-gedf
wip-pai
wip-percore-lib
wip-performance
wip-pgm
wip-pgm-split
/*
* Mutexes: blocking mutual exclusion locks
*
* started by Ingo Molnar:
*
* Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
*
* This file contains mutex debugging related internal declarations,
* prototypes and inline functions, for the CONFIG_DEBUG_MUTEXES case.
* More details are in kernel/mutex-debug.c.
*/
/*
* This must be called with lock->wait_lock held.
*/
extern
void
debug_mutex_lock_common
(
struct
mutex
*
lock
,
struct
mutex_waiter
*
waiter
);
extern
void
debug_mutex_wake_waiter
(
struct
mutex
*
lock
,
struct
mutex_waiter
*
waiter
);
extern
void
debug_mutex_free_waiter
(
struct
mutex_waiter
*
waiter
);
extern
void
debug_mutex_add_waiter
(
struct
mutex
*
lock
,
struct
mutex_waiter
*
waiter
,
struct
thread_info
*
ti
);
extern
void
mutex_remove_waiter
(
struct
mutex
*
lock
,
struct
mutex_waiter
*
waiter
,
struct
thread_info
*
ti
);
extern
void
debug_mutex_unlock
(
struct
mutex
*
lock
);
extern
void
debug_mutex_init
(
struct
mutex
*
lock
,
const char
*
name
,
struct
lock_class_key
*
key
);
static
inline
void
mutex_set_owner
(
struct
mutex
*
lock
)
{
lock
->
owner
=
current
;
}
static
inline
void
mutex_clear_owner
(
struct
mutex
*
lock
)
{
lock
->
owner
=
NULL
;
}
#define spin_lock_mutex(lock, flags) \
do { \
struct mutex *l = container_of(lock, struct mutex, wait_lock); \
\
DEBUG_LOCKS_WARN_ON(in_interrupt()); \
local_irq_save(flags); \
arch_spin_lock(&(lock)->rlock.raw_lock);\
DEBUG_LOCKS_WARN_ON(l->magic != l); \
} while (0)
#define spin_unlock_mutex(lock, flags) \
do { \
arch_spin_unlock(&(lock)->rlock.raw_lock); \
local_irq_restore(flags); \
preempt_check_resched(); \
} while (0)