diff options
Diffstat (limited to 'kernel/locking/lockdep.c')
-rw-r--r-- | kernel/locking/lockdep.c | 35 |
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) | 2843 | static 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 | } |
2884 | EXPORT_SYMBOL(trace_hardirqs_on_caller); | ||
2885 | |||
2886 | void trace_hardirqs_on(void) | ||
2887 | { | ||
2888 | trace_hardirqs_on_caller(CALLER_ADDR0); | ||
2889 | } | ||
2890 | EXPORT_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) | 2888 | static 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 | } |
2922 | EXPORT_SYMBOL(trace_hardirqs_off_caller); | ||
2923 | |||
2924 | void trace_hardirqs_off(void) | ||
2925 | { | ||
2926 | trace_hardirqs_off_caller(CALLER_ADDR0); | ||
2927 | } | ||
2928 | EXPORT_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 | ||
4333 | void __init lockdep_info(void) | 4318 | void __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 | |||
4326 | void __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 | ||