Commit 4fe87745a6722d42ff27a60768c77958fa1fc498

Authored by Peter Zijlstra
Committed by Linus Torvalds
1 parent c46261de0d

lockstat: hook into spinlock_t, rwlock_t, rwsem and mutex

Call the new lockstat tracking functions from the various lock primitives.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 3 changed files with 26 additions and 18 deletions Side-by-side Diff

... ... @@ -139,6 +139,12 @@
139 139 list_add_tail(&waiter.list, &lock->wait_list);
140 140 waiter.task = task;
141 141  
  142 + old_val = atomic_xchg(&lock->count, -1);
  143 + if (old_val == 1)
  144 + goto done;
  145 +
  146 + lock_contended(&lock->dep_map, _RET_IP_);
  147 +
142 148 for (;;) {
143 149 /*
144 150 * Lets try to take the lock again - this is needed even if
... ... @@ -174,6 +180,8 @@
174 180 spin_lock_mutex(&lock->wait_lock, flags);
175 181 }
176 182  
  183 + lock_acquired(&lock->dep_map);
  184 +done:
177 185 /* got the lock - rejoice! */
178 186 mutex_remove_waiter(lock, &waiter, task_thread_info(task));
179 187 debug_mutex_set_owner(lock, task_thread_info(task));
... ... @@ -20,7 +20,7 @@
20 20 might_sleep();
21 21 rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_);
22 22  
23   - __down_read(sem);
  23 + LOCK_CONTENDED(sem, __down_read_trylock, __down_read);
24 24 }
25 25  
26 26 EXPORT_SYMBOL(down_read);
... ... @@ -47,7 +47,7 @@
47 47 might_sleep();
48 48 rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_);
49 49  
50   - __down_write(sem);
  50 + LOCK_CONTENDED(sem, __down_write_trylock, __down_write);
51 51 }
52 52  
53 53 EXPORT_SYMBOL(down_write);
... ... @@ -111,7 +111,7 @@
111 111 might_sleep();
112 112 rwsem_acquire_read(&sem->dep_map, subclass, 0, _RET_IP_);
113 113  
114   - __down_read(sem);
  114 + LOCK_CONTENDED(sem, __down_read_trylock, __down_read);
115 115 }
116 116  
117 117 EXPORT_SYMBOL(down_read_nested);
... ... @@ -130,7 +130,7 @@
130 130 might_sleep();
131 131 rwsem_acquire(&sem->dep_map, subclass, 0, _RET_IP_);
132 132  
133   - __down_write_nested(sem, subclass);
  133 + LOCK_CONTENDED(sem, __down_write_trylock, __down_write);
134 134 }
135 135  
136 136 EXPORT_SYMBOL(down_write_nested);
... ... @@ -72,7 +72,7 @@
72 72 {
73 73 preempt_disable();
74 74 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
75   - _raw_read_lock(lock);
  75 + LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
76 76 }
77 77 EXPORT_SYMBOL(_read_lock);
78 78  
... ... @@ -89,7 +89,7 @@
89 89 * that interrupts are not re-enabled during lock-acquire:
90 90 */
91 91 #ifdef CONFIG_LOCKDEP
92   - _raw_spin_lock(lock);
  92 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
93 93 #else
94 94 _raw_spin_lock_flags(lock, &flags);
95 95 #endif
... ... @@ -102,7 +102,7 @@
102 102 local_irq_disable();
103 103 preempt_disable();
104 104 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
105   - _raw_spin_lock(lock);
  105 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
106 106 }
107 107 EXPORT_SYMBOL(_spin_lock_irq);
108 108  
... ... @@ -111,7 +111,7 @@
111 111 local_bh_disable();
112 112 preempt_disable();
113 113 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
114   - _raw_spin_lock(lock);
  114 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
115 115 }
116 116 EXPORT_SYMBOL(_spin_lock_bh);
117 117  
... ... @@ -122,7 +122,7 @@
122 122 local_irq_save(flags);
123 123 preempt_disable();
124 124 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
125   - _raw_read_lock(lock);
  125 + LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
126 126 return flags;
127 127 }
128 128 EXPORT_SYMBOL(_read_lock_irqsave);
... ... @@ -132,7 +132,7 @@
132 132 local_irq_disable();
133 133 preempt_disable();
134 134 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
135   - _raw_read_lock(lock);
  135 + LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
136 136 }
137 137 EXPORT_SYMBOL(_read_lock_irq);
138 138  
... ... @@ -141,7 +141,7 @@
141 141 local_bh_disable();
142 142 preempt_disable();
143 143 rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_);
144   - _raw_read_lock(lock);
  144 + LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock);
145 145 }
146 146 EXPORT_SYMBOL(_read_lock_bh);
147 147  
... ... @@ -152,7 +152,7 @@
152 152 local_irq_save(flags);
153 153 preempt_disable();
154 154 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
155   - _raw_write_lock(lock);
  155 + LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
156 156 return flags;
157 157 }
158 158 EXPORT_SYMBOL(_write_lock_irqsave);
... ... @@ -162,7 +162,7 @@
162 162 local_irq_disable();
163 163 preempt_disable();
164 164 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
165   - _raw_write_lock(lock);
  165 + LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
166 166 }
167 167 EXPORT_SYMBOL(_write_lock_irq);
168 168  
... ... @@ -171,7 +171,7 @@
171 171 local_bh_disable();
172 172 preempt_disable();
173 173 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
174   - _raw_write_lock(lock);
  174 + LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
175 175 }
176 176 EXPORT_SYMBOL(_write_lock_bh);
177 177  
... ... @@ -179,7 +179,7 @@
179 179 {
180 180 preempt_disable();
181 181 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
182   - _raw_spin_lock(lock);
  182 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
183 183 }
184 184  
185 185 EXPORT_SYMBOL(_spin_lock);
... ... @@ -188,7 +188,7 @@
188 188 {
189 189 preempt_disable();
190 190 rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_);
191   - _raw_write_lock(lock);
  191 + LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock);
192 192 }
193 193  
194 194 EXPORT_SYMBOL(_write_lock);
... ... @@ -289,7 +289,7 @@
289 289 {
290 290 preempt_disable();
291 291 spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
292   - _raw_spin_lock(lock);
  292 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
293 293 }
294 294  
295 295 EXPORT_SYMBOL(_spin_lock_nested);
... ... @@ -306,7 +306,7 @@
306 306 * that interrupts are not re-enabled during lock-acquire:
307 307 */
308 308 #ifdef CONFIG_LOCKDEP
309   - _raw_spin_lock(lock);
  309 + LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
310 310 #else
311 311 _raw_spin_lock_flags(lock, &flags);
312 312 #endif