Commit 0fa914c6 authored by Thomas Gleixner's avatar Thomas Gleixner

rtmutex: Cleanup the debug code

Use the existing lock debugging macros.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent d0a77454
...@@ -29,61 +29,6 @@ ...@@ -29,61 +29,6 @@
#include "rtmutex_common.h" #include "rtmutex_common.h"
# define TRACE_WARN_ON(x) WARN_ON(x)
# define TRACE_BUG_ON(x) BUG_ON(x)
# define TRACE_OFF() \
do { \
if (rt_trace_on) { \
rt_trace_on = 0; \
console_verbose(); \
if (raw_spin_is_locked(&current->pi_lock)) \
raw_spin_unlock(&current->pi_lock); \
} \
} while (0)
# define TRACE_OFF_NOLOCK() \
do { \
if (rt_trace_on) { \
rt_trace_on = 0; \
console_verbose(); \
} \
} while (0)
# define TRACE_BUG_LOCKED() \
do { \
TRACE_OFF(); \
BUG(); \
} while (0)
# define TRACE_WARN_ON_LOCKED(c) \
do { \
if (unlikely(c)) { \
TRACE_OFF(); \
WARN_ON(1); \
} \
} while (0)
# define TRACE_BUG_ON_LOCKED(c) \
do { \
if (unlikely(c)) \
TRACE_BUG_LOCKED(); \
} while (0)
#ifdef CONFIG_SMP
# define SMP_TRACE_BUG_ON_LOCKED(c) TRACE_BUG_ON_LOCKED(c)
#else
# define SMP_TRACE_BUG_ON_LOCKED(c) do { } while (0)
#endif
/*
* deadlock detection flag. We turn it off when we detect
* the first problem because we dont want to recurse back
* into the tracing code when doing error printk or
* executing a BUG():
*/
static int rt_trace_on = 1;
static void printk_task(struct task_struct *p) static void printk_task(struct task_struct *p)
{ {
if (p) if (p)
...@@ -111,8 +56,8 @@ static void printk_lock(struct rt_mutex *lock, int print_owner) ...@@ -111,8 +56,8 @@ static void printk_lock(struct rt_mutex *lock, int print_owner)
void rt_mutex_debug_task_free(struct task_struct *task) void rt_mutex_debug_task_free(struct task_struct *task)
{ {
WARN_ON(!plist_head_empty(&task->pi_waiters)); DEBUG_LOCKS_WARN_ON(!plist_head_empty(&task->pi_waiters));
WARN_ON(task->pi_blocked_on); DEBUG_LOCKS_WARN_ON(task->pi_blocked_on);
} }
/* /*
...@@ -125,7 +70,7 @@ void debug_rt_mutex_deadlock(int detect, struct rt_mutex_waiter *act_waiter, ...@@ -125,7 +70,7 @@ void debug_rt_mutex_deadlock(int detect, struct rt_mutex_waiter *act_waiter,
{ {
struct task_struct *task; struct task_struct *task;
if (!rt_trace_on || detect || !act_waiter) if (!debug_locks || detect || !act_waiter)
return; return;
task = rt_mutex_owner(act_waiter->lock); task = rt_mutex_owner(act_waiter->lock);
...@@ -139,7 +84,7 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter) ...@@ -139,7 +84,7 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter)
{ {
struct task_struct *task; struct task_struct *task;
if (!waiter->deadlock_lock || !rt_trace_on) if (!waiter->deadlock_lock || !debug_locks)
return; return;
rcu_read_lock(); rcu_read_lock();
...@@ -149,7 +94,8 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter) ...@@ -149,7 +94,8 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter)
return; return;
} }
TRACE_OFF_NOLOCK(); if (!debug_locks_off())
return;
printk("\n============================================\n"); printk("\n============================================\n");
printk( "[ BUG: circular locking deadlock detected! ]\n"); printk( "[ BUG: circular locking deadlock detected! ]\n");
...@@ -180,7 +126,6 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter) ...@@ -180,7 +126,6 @@ void debug_rt_mutex_print_deadlock(struct rt_mutex_waiter *waiter)
printk("[ turning off deadlock detection." printk("[ turning off deadlock detection."
"Please report this trace. ]\n\n"); "Please report this trace. ]\n\n");
local_irq_disable();
} }
void debug_rt_mutex_lock(struct rt_mutex *lock) void debug_rt_mutex_lock(struct rt_mutex *lock)
...@@ -189,7 +134,7 @@ void debug_rt_mutex_lock(struct rt_mutex *lock) ...@@ -189,7 +134,7 @@ void debug_rt_mutex_lock(struct rt_mutex *lock)
void debug_rt_mutex_unlock(struct rt_mutex *lock) void debug_rt_mutex_unlock(struct rt_mutex *lock)
{ {
TRACE_WARN_ON_LOCKED(rt_mutex_owner(lock) != current); DEBUG_LOCKS_WARN_ON(rt_mutex_owner(lock) != current);
} }
void void
...@@ -199,7 +144,7 @@ debug_rt_mutex_proxy_lock(struct rt_mutex *lock, struct task_struct *powner) ...@@ -199,7 +144,7 @@ debug_rt_mutex_proxy_lock(struct rt_mutex *lock, struct task_struct *powner)
void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock) void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock)
{ {
TRACE_WARN_ON_LOCKED(!rt_mutex_owner(lock)); DEBUG_LOCKS_WARN_ON(!rt_mutex_owner(lock));
} }
void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
...@@ -213,8 +158,8 @@ void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) ...@@ -213,8 +158,8 @@ void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter) void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter)
{ {
put_pid(waiter->deadlock_task_pid); put_pid(waiter->deadlock_task_pid);
TRACE_WARN_ON(!plist_node_empty(&waiter->list_entry)); DEBUG_LOCKS_WARN_ON(!plist_node_empty(&waiter->list_entry));
TRACE_WARN_ON(!plist_node_empty(&waiter->pi_list_entry)); DEBUG_LOCKS_WARN_ON(!plist_node_empty(&waiter->pi_list_entry));
memset(waiter, 0x22, sizeof(*waiter)); memset(waiter, 0x22, sizeof(*waiter));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment