summaryrefslogtreecommitdiffstats
path: root/kernel/locking/lockdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/locking/lockdep.c')
-rw-r--r--kernel/locking/lockdep.c35
1 files changed, 14 insertions, 21 deletions
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index fbbb79d5cfa0..03bfaeb9f4e6 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -55,6 +55,7 @@
55 55
56#include "lockdep_internals.h" 56#include "lockdep_internals.h"
57 57
58#include <trace/events/preemptirq.h>
58#define CREATE_TRACE_POINTS 59#define CREATE_TRACE_POINTS
59#include <trace/events/lock.h> 60#include <trace/events/lock.h>
60 61
@@ -2839,10 +2840,9 @@ static void __trace_hardirqs_on_caller(unsigned long ip)
2839 debug_atomic_inc(hardirqs_on_events); 2840 debug_atomic_inc(hardirqs_on_events);
2840} 2841}
2841 2842
2842__visible void trace_hardirqs_on_caller(unsigned long ip) 2843static void lockdep_hardirqs_on(void *none, unsigned long ignore,
2844 unsigned long ip)
2843{ 2845{
2844 time_hardirqs_on(CALLER_ADDR0, ip);
2845
2846 if (unlikely(!debug_locks || current->lockdep_recursion)) 2846 if (unlikely(!debug_locks || current->lockdep_recursion))
2847 return; 2847 return;
2848 2848
@@ -2881,23 +2881,15 @@ __visible void trace_hardirqs_on_caller(unsigned long ip)
2881 __trace_hardirqs_on_caller(ip); 2881 __trace_hardirqs_on_caller(ip);
2882 current->lockdep_recursion = 0; 2882 current->lockdep_recursion = 0;
2883} 2883}
2884EXPORT_SYMBOL(trace_hardirqs_on_caller);
2885
2886void trace_hardirqs_on(void)
2887{
2888 trace_hardirqs_on_caller(CALLER_ADDR0);
2889}
2890EXPORT_SYMBOL(trace_hardirqs_on);
2891 2884
2892/* 2885/*
2893 * Hardirqs were disabled: 2886 * Hardirqs were disabled:
2894 */ 2887 */
2895__visible void trace_hardirqs_off_caller(unsigned long ip) 2888static void lockdep_hardirqs_off(void *none, unsigned long ignore,
2889 unsigned long ip)
2896{ 2890{
2897 struct task_struct *curr = current; 2891 struct task_struct *curr = current;
2898 2892
2899 time_hardirqs_off(CALLER_ADDR0, ip);
2900
2901 if (unlikely(!debug_locks || current->lockdep_recursion)) 2893 if (unlikely(!debug_locks || current->lockdep_recursion))
2902 return; 2894 return;
2903 2895
@@ -2919,13 +2911,6 @@ __visible void trace_hardirqs_off_caller(unsigned long ip)
2919 } else 2911 } else
2920 debug_atomic_inc(redundant_hardirqs_off); 2912 debug_atomic_inc(redundant_hardirqs_off);
2921} 2913}
2922EXPORT_SYMBOL(trace_hardirqs_off_caller);
2923
2924void trace_hardirqs_off(void)
2925{
2926 trace_hardirqs_off_caller(CALLER_ADDR0);
2927}
2928EXPORT_SYMBOL(trace_hardirqs_off);
2929 2914
2930/* 2915/*
2931 * Softirqs will be enabled: 2916 * Softirqs will be enabled:
@@ -4330,7 +4315,15 @@ out_restore:
4330 raw_local_irq_restore(flags); 4315 raw_local_irq_restore(flags);
4331} 4316}
4332 4317
4333void __init lockdep_info(void) 4318void __init lockdep_init_early(void)
4319{
4320#ifdef CONFIG_PROVE_LOCKING
4321 register_trace_prio_irq_disable(lockdep_hardirqs_off, NULL, INT_MAX);
4322 register_trace_prio_irq_enable(lockdep_hardirqs_on, NULL, INT_MIN);
4323#endif
4324}
4325
4326void __init lockdep_init(void)
4334{ 4327{
4335 printk("Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar\n"); 4328 printk("Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar\n");
4336 4329