aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2008-05-12 15:20:44 -0400
committerThomas Gleixner <tglx@linutronix.de>2008-05-23 14:39:40 -0400
commit0764d23cf066c52de42b653144605b481d3fbdbc (patch)
tree940c6fb3f1fd674bdabbebc21a15b48a48e2ec24
parent361943ad0ba3f16e66859e30a408915e008ba91e (diff)
ftrace: lockdep notrace annotations
Add notrace annotations to lockdep to keep ftrace from causing recursive problems with lock tracing and debugging. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--kernel/lockdep.c23
-rw-r--r--kernel/spinlock.c2
2 files changed, 13 insertions, 12 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index e21924365ea3..ac46847ba0c9 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -271,14 +271,14 @@ static struct list_head chainhash_table[CHAINHASH_SIZE];
271 ((key1) >> (64-MAX_LOCKDEP_KEYS_BITS)) ^ \ 271 ((key1) >> (64-MAX_LOCKDEP_KEYS_BITS)) ^ \
272 (key2)) 272 (key2))
273 273
274void lockdep_off(void) 274notrace void lockdep_off(void)
275{ 275{
276 current->lockdep_recursion++; 276 current->lockdep_recursion++;
277} 277}
278 278
279EXPORT_SYMBOL(lockdep_off); 279EXPORT_SYMBOL(lockdep_off);
280 280
281void lockdep_on(void) 281notrace void lockdep_on(void)
282{ 282{
283 current->lockdep_recursion--; 283 current->lockdep_recursion--;
284} 284}
@@ -1041,7 +1041,7 @@ find_usage_forwards(struct lock_class *source, unsigned int depth)
1041 * Return 1 otherwise and keep <backwards_match> unchanged. 1041 * Return 1 otherwise and keep <backwards_match> unchanged.
1042 * Return 0 on error. 1042 * Return 0 on error.
1043 */ 1043 */
1044static noinline int 1044static noinline notrace int
1045find_usage_backwards(struct lock_class *source, unsigned int depth) 1045find_usage_backwards(struct lock_class *source, unsigned int depth)
1046{ 1046{
1047 struct lock_list *entry; 1047 struct lock_list *entry;
@@ -1591,7 +1591,7 @@ static inline int validate_chain(struct task_struct *curr,
1591 * We are building curr_chain_key incrementally, so double-check 1591 * We are building curr_chain_key incrementally, so double-check
1592 * it from scratch, to make sure that it's done correctly: 1592 * it from scratch, to make sure that it's done correctly:
1593 */ 1593 */
1594static void check_chain_key(struct task_struct *curr) 1594static notrace void check_chain_key(struct task_struct *curr)
1595{ 1595{
1596#ifdef CONFIG_DEBUG_LOCKDEP 1596#ifdef CONFIG_DEBUG_LOCKDEP
1597 struct held_lock *hlock, *prev_hlock = NULL; 1597 struct held_lock *hlock, *prev_hlock = NULL;
@@ -1967,7 +1967,7 @@ static int mark_lock_irq(struct task_struct *curr, struct held_lock *this,
1967/* 1967/*
1968 * Mark all held locks with a usage bit: 1968 * Mark all held locks with a usage bit:
1969 */ 1969 */
1970static int 1970static notrace int
1971mark_held_locks(struct task_struct *curr, int hardirq) 1971mark_held_locks(struct task_struct *curr, int hardirq)
1972{ 1972{
1973 enum lock_usage_bit usage_bit; 1973 enum lock_usage_bit usage_bit;
@@ -2260,8 +2260,8 @@ static inline int separate_irq_context(struct task_struct *curr,
2260/* 2260/*
2261 * Mark a lock with a usage bit, and validate the state transition: 2261 * Mark a lock with a usage bit, and validate the state transition:
2262 */ 2262 */
2263static int mark_lock(struct task_struct *curr, struct held_lock *this, 2263static notrace int mark_lock(struct task_struct *curr, struct held_lock *this,
2264 enum lock_usage_bit new_bit) 2264 enum lock_usage_bit new_bit)
2265{ 2265{
2266 unsigned int new_mask = 1 << new_bit, ret = 1; 2266 unsigned int new_mask = 1 << new_bit, ret = 1;
2267 2267
@@ -2663,7 +2663,7 @@ __lock_release(struct lockdep_map *lock, int nested, unsigned long ip)
2663/* 2663/*
2664 * Check whether we follow the irq-flags state precisely: 2664 * Check whether we follow the irq-flags state precisely:
2665 */ 2665 */
2666static void check_flags(unsigned long flags) 2666static notrace void check_flags(unsigned long flags)
2667{ 2667{
2668#if defined(CONFIG_DEBUG_LOCKDEP) && defined(CONFIG_TRACE_IRQFLAGS) 2668#if defined(CONFIG_DEBUG_LOCKDEP) && defined(CONFIG_TRACE_IRQFLAGS)
2669 if (!debug_locks) 2669 if (!debug_locks)
@@ -2700,8 +2700,8 @@ static void check_flags(unsigned long flags)
2700 * We are not always called with irqs disabled - do that here, 2700 * We are not always called with irqs disabled - do that here,
2701 * and also avoid lockdep recursion: 2701 * and also avoid lockdep recursion:
2702 */ 2702 */
2703void lock_acquire(struct lockdep_map *lock, unsigned int subclass, 2703notrace void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
2704 int trylock, int read, int check, unsigned long ip) 2704 int trylock, int read, int check, unsigned long ip)
2705{ 2705{
2706 unsigned long flags; 2706 unsigned long flags;
2707 2707
@@ -2723,7 +2723,8 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
2723 2723
2724EXPORT_SYMBOL_GPL(lock_acquire); 2724EXPORT_SYMBOL_GPL(lock_acquire);
2725 2725
2726void lock_release(struct lockdep_map *lock, int nested, unsigned long ip) 2726notrace void lock_release(struct lockdep_map *lock, int nested,
2727 unsigned long ip)
2727{ 2728{
2728 unsigned long flags; 2729 unsigned long flags;
2729 2730
diff --git a/kernel/spinlock.c b/kernel/spinlock.c
index ae28c8245123..a1fb54c93cdd 100644
--- a/kernel/spinlock.c
+++ b/kernel/spinlock.c
@@ -436,7 +436,7 @@ int __lockfunc _spin_trylock_bh(spinlock_t *lock)
436} 436}
437EXPORT_SYMBOL(_spin_trylock_bh); 437EXPORT_SYMBOL(_spin_trylock_bh);
438 438
439int in_lock_functions(unsigned long addr) 439notrace int in_lock_functions(unsigned long addr)
440{ 440{
441 /* Linker adds these: start and end of __lockfunc functions */ 441 /* Linker adds these: start and end of __lockfunc functions */
442 extern char __lock_text_start[], __lock_text_end[]; 442 extern char __lock_text_start[], __lock_text_end[];