diff options
Diffstat (limited to 'kernel/lockdep.c')
-rw-r--r-- | kernel/lockdep.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 02014f7ccc86..cb70c1db85d0 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <linux/hash.h> | 42 | #include <linux/hash.h> |
43 | #include <linux/ftrace.h> | 43 | #include <linux/ftrace.h> |
44 | #include <linux/stringify.h> | 44 | #include <linux/stringify.h> |
45 | #include <trace/lockdep.h> | ||
45 | 46 | ||
46 | #include <asm/sections.h> | 47 | #include <asm/sections.h> |
47 | 48 | ||
@@ -2913,6 +2914,8 @@ void lock_set_class(struct lockdep_map *lock, const char *name, | |||
2913 | } | 2914 | } |
2914 | EXPORT_SYMBOL_GPL(lock_set_class); | 2915 | EXPORT_SYMBOL_GPL(lock_set_class); |
2915 | 2916 | ||
2917 | DEFINE_TRACE(lock_acquire); | ||
2918 | |||
2916 | /* | 2919 | /* |
2917 | * We are not always called with irqs disabled - do that here, | 2920 | * We are not always called with irqs disabled - do that here, |
2918 | * and also avoid lockdep recursion: | 2921 | * and also avoid lockdep recursion: |
@@ -2923,6 +2926,8 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2923 | { | 2926 | { |
2924 | unsigned long flags; | 2927 | unsigned long flags; |
2925 | 2928 | ||
2929 | trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip); | ||
2930 | |||
2926 | if (unlikely(current->lockdep_recursion)) | 2931 | if (unlikely(current->lockdep_recursion)) |
2927 | return; | 2932 | return; |
2928 | 2933 | ||
@@ -2937,11 +2942,15 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2937 | } | 2942 | } |
2938 | EXPORT_SYMBOL_GPL(lock_acquire); | 2943 | EXPORT_SYMBOL_GPL(lock_acquire); |
2939 | 2944 | ||
2945 | DEFINE_TRACE(lock_release); | ||
2946 | |||
2940 | void lock_release(struct lockdep_map *lock, int nested, | 2947 | void lock_release(struct lockdep_map *lock, int nested, |
2941 | unsigned long ip) | 2948 | unsigned long ip) |
2942 | { | 2949 | { |
2943 | unsigned long flags; | 2950 | unsigned long flags; |
2944 | 2951 | ||
2952 | trace_lock_release(lock, nested, ip); | ||
2953 | |||
2945 | if (unlikely(current->lockdep_recursion)) | 2954 | if (unlikely(current->lockdep_recursion)) |
2946 | return; | 2955 | return; |
2947 | 2956 | ||
@@ -3090,10 +3099,14 @@ found_it: | |||
3090 | lock->ip = ip; | 3099 | lock->ip = ip; |
3091 | } | 3100 | } |
3092 | 3101 | ||
3102 | DEFINE_TRACE(lock_contended); | ||
3103 | |||
3093 | void lock_contended(struct lockdep_map *lock, unsigned long ip) | 3104 | void lock_contended(struct lockdep_map *lock, unsigned long ip) |
3094 | { | 3105 | { |
3095 | unsigned long flags; | 3106 | unsigned long flags; |
3096 | 3107 | ||
3108 | trace_lock_contended(lock, ip); | ||
3109 | |||
3097 | if (unlikely(!lock_stat)) | 3110 | if (unlikely(!lock_stat)) |
3098 | return; | 3111 | return; |
3099 | 3112 | ||
@@ -3109,10 +3122,14 @@ void lock_contended(struct lockdep_map *lock, unsigned long ip) | |||
3109 | } | 3122 | } |
3110 | EXPORT_SYMBOL_GPL(lock_contended); | 3123 | EXPORT_SYMBOL_GPL(lock_contended); |
3111 | 3124 | ||
3125 | DEFINE_TRACE(lock_acquired); | ||
3126 | |||
3112 | void lock_acquired(struct lockdep_map *lock, unsigned long ip) | 3127 | void lock_acquired(struct lockdep_map *lock, unsigned long ip) |
3113 | { | 3128 | { |
3114 | unsigned long flags; | 3129 | unsigned long flags; |
3115 | 3130 | ||
3131 | trace_lock_acquired(lock, ip); | ||
3132 | |||
3116 | if (unlikely(!lock_stat)) | 3133 | if (unlikely(!lock_stat)) |
3117 | return; | 3134 | return; |
3118 | 3135 | ||