locking/rtmutex: Move debug functions as inlines into common header
There is no value in having two header files providing just empty stubs and a C file which implements trivial debug functions which can just be inlined. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20210326153944.052454464@linutronix.de
This commit is contained in:
Родитель
f5a98866e5
Коммит
f41dcc1869
|
@ -12,7 +12,6 @@ ifdef CONFIG_FUNCTION_TRACER
|
|||
CFLAGS_REMOVE_lockdep.o = $(CC_FLAGS_FTRACE)
|
||||
CFLAGS_REMOVE_lockdep_proc.o = $(CC_FLAGS_FTRACE)
|
||||
CFLAGS_REMOVE_mutex-debug.o = $(CC_FLAGS_FTRACE)
|
||||
CFLAGS_REMOVE_rtmutex-debug.o = $(CC_FLAGS_FTRACE)
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_DEBUG_IRQFLAGS) += irqflag-debug.o
|
||||
|
@ -26,7 +25,6 @@ obj-$(CONFIG_LOCK_SPIN_ON_OWNER) += osq_lock.o
|
|||
obj-$(CONFIG_PROVE_LOCKING) += spinlock.o
|
||||
obj-$(CONFIG_QUEUED_SPINLOCKS) += qspinlock.o
|
||||
obj-$(CONFIG_RT_MUTEXES) += rtmutex.o
|
||||
obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o
|
||||
obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
|
||||
obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o
|
||||
obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* RT-Mutexes: blocking mutual exclusion locks with PI support
|
||||
*
|
||||
* started by Ingo Molnar and Thomas Gleixner:
|
||||
*
|
||||
* Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
* Copyright (C) 2006 Timesys Corp., Thomas Gleixner <tglx@timesys.com>
|
||||
*
|
||||
* This code is based on the rt.c implementation in the preempt-rt tree.
|
||||
* Portions of said code are
|
||||
*
|
||||
* Copyright (C) 2004 LynuxWorks, Inc., Igor Manyilov, Bill Huey
|
||||
* Copyright (C) 2006 Esben Nielsen
|
||||
* Copyright (C) 2006 Kihon Technologies Inc.,
|
||||
* Steven Rostedt <rostedt@goodmis.org>
|
||||
*
|
||||
* See rt.c in preempt-rt for proper credits and further information
|
||||
*/
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/rt.h>
|
||||
#include <linux/sched/debug.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/debug_locks.h>
|
||||
|
||||
#include "rtmutex_common.h"
|
||||
|
||||
void debug_rt_mutex_unlock(struct rt_mutex *lock)
|
||||
{
|
||||
DEBUG_LOCKS_WARN_ON(rt_mutex_owner(lock) != current);
|
||||
}
|
||||
|
||||
void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock)
|
||||
{
|
||||
DEBUG_LOCKS_WARN_ON(!rt_mutex_owner(lock));
|
||||
}
|
||||
|
||||
void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
|
||||
{
|
||||
memset(waiter, 0x11, sizeof(*waiter));
|
||||
}
|
||||
|
||||
void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter)
|
||||
{
|
||||
memset(waiter, 0x22, sizeof(*waiter));
|
||||
}
|
||||
|
||||
void debug_rt_mutex_init(struct rt_mutex *lock, const char *name, struct lock_class_key *key)
|
||||
{
|
||||
/*
|
||||
* Make sure we are not reinitializing a held lock:
|
||||
*/
|
||||
debug_check_no_locks_freed((void *)lock, sizeof(*lock));
|
||||
|
||||
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
||||
lockdep_init_map(&lock->dep_map, name, key, 0);
|
||||
#endif
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* RT-Mutexes: blocking mutual exclusion locks with PI support
|
||||
*
|
||||
* started by Ingo Molnar and Thomas Gleixner:
|
||||
*
|
||||
* Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
* Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
|
||||
*
|
||||
* This file contains macros used solely by rtmutex.c. Debug version.
|
||||
*/
|
||||
|
||||
extern void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
|
||||
extern void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter);
|
||||
extern void debug_rt_mutex_init(struct rt_mutex *lock, const char *name, struct lock_class_key *key);
|
||||
extern void debug_rt_mutex_unlock(struct rt_mutex *lock);
|
||||
extern void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock);
|
||||
|
||||
static inline bool debug_rt_mutex_detect_deadlock(struct rt_mutex_waiter *waiter,
|
||||
enum rtmutex_chainwalk walk)
|
||||
{
|
||||
return (waiter != NULL);
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* RT-Mutexes: blocking mutual exclusion locks with PI support
|
||||
*
|
||||
* started by Ingo Molnar and Thomas Gleixner:
|
||||
*
|
||||
* Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
* Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
|
||||
*
|
||||
* This file contains macros used solely by rtmutex.c.
|
||||
* Non-debug version.
|
||||
*/
|
||||
|
||||
#define debug_rt_mutex_init_waiter(w) do { } while (0)
|
||||
#define debug_rt_mutex_free_waiter(w) do { } while (0)
|
||||
#define debug_rt_mutex_proxy_unlock(l) do { } while (0)
|
||||
#define debug_rt_mutex_unlock(l) do { } while (0)
|
||||
#define debug_rt_mutex_init(m, n, k) do { } while (0)
|
||||
|
||||
static inline bool debug_rt_mutex_detect_deadlock(struct rt_mutex_waiter *w,
|
||||
enum rtmutex_chainwalk walk)
|
||||
{
|
||||
return walk == RT_MUTEX_FULL_CHAINWALK;
|
||||
}
|
|
@ -13,6 +13,7 @@
|
|||
#ifndef __KERNEL_RTMUTEX_COMMON_H
|
||||
#define __KERNEL_RTMUTEX_COMMON_H
|
||||
|
||||
#include <linux/debug_locks.h>
|
||||
#include <linux/rtmutex.h>
|
||||
#include <linux/sched/wake_q.h>
|
||||
|
||||
|
@ -135,10 +136,29 @@ extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock,
|
|||
|
||||
extern void rt_mutex_postunlock(struct wake_q_head *wake_q);
|
||||
|
||||
#ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
# include "rtmutex-debug.h"
|
||||
#else
|
||||
# include "rtmutex.h"
|
||||
#endif
|
||||
/* Debug functions */
|
||||
static inline void debug_rt_mutex_unlock(struct rt_mutex *lock)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
|
||||
DEBUG_LOCKS_WARN_ON(rt_mutex_owner(lock) != current);
|
||||
}
|
||||
|
||||
static inline void debug_rt_mutex_proxy_unlock(struct rt_mutex *lock)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
|
||||
DEBUG_LOCKS_WARN_ON(!rt_mutex_owner(lock));
|
||||
}
|
||||
|
||||
static inline void debug_rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
|
||||
memset(waiter, 0x11, sizeof(*waiter));
|
||||
}
|
||||
|
||||
static inline void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
|
||||
memset(waiter, 0x22, sizeof(*waiter));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче