• source navigation • diff markup • identifier search • freetext search •
Version: 2.6.24 2.6.25 2.6.26 2.6.27 2.6.28 2.6.29 2.6.30 2.6.31 2.6.32 2.6.33 2.6.34 2.6.35
Architecture: x86 arm avr32 blackfin m68k m68knommu microblaze mips powerpc sh
1 /* 2 * kernel/mutex.c 3 * 4 * Mutexes: blocking mutual exclusion locks 5 * 6 * Started by Ingo Molnar: 7 * 8 * Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com> 9 * 10 * Many thanks to Arjan van de Ven, Thomas Gleixner, Steven Rostedt and 11 * David Howells for suggestions and improvements. 12 * 13 * - Adaptive spinning for mutexes by Peter Zijlstra. (Ported to mainline 14 * from the -rt tree, where it was originally implemented for rtmutexes 15 * by Steven Rostedt, based on work by Gregory Haskins, Peter Morreale 16 * and Sven Dietrich. 17 * 18 * Also see Documentation/mutex-design.txt. 19 */ 20 #include <linux/mutex.h> 21 #include <linux/sched.h> 22 #include <linux/module.h> 23 #include <linux/spinlock.h> 24 #include <linux/interrupt.h> 25 #include <linux/debug_locks.h> 26 27 /* 28 * In the DEBUG case we are using the "NULL fastpath" for mutexes, 29 * which forces all calls into the slowpath: 30 */ 31 #ifdef CONFIG_DEBUG_MUTEXES 32 # include "mutex-debug.h" 33 # include <asm-generic/mutex-null.h> 34 #else 35 # include "mutex.h" 36 # include <asm/mutex.h> 37 #endif 38 39 /*** 40 * mutex_init - initialize the mutex 41 * @lock: the mutex to be initialized 42 * @key: the lock_class_key for the class; used by mutex lock debugging 43 * 44 * Initialize the mutex to unlocked state. 45 * 46 * It is not allowed to initialize an already locked mutex. 47 */ 48 void 49 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key) 50 { 51 atomic_set(&lock->count, 1); 52 spin_lock_init(&lock->wait_lock); 53 INIT_LIST_HEAD(&lock->wait_list); 54 mutex_clear_owner(lock); 55 56 debug_mutex_init(lock, name, key); 57 } 58 59 EXPORT_SYMBOL(__mutex_init); 60 61 #ifndef CONFIG_DEBUG_LOCK_ALLOC 62 /* 63 * We split the mutex lock/unlock logic into separate fastpath and 64 * slowpath functions, to reduce the register pressure on the fastpath. 65 * We also put the fastpath first in the kernel image, to make sure the 66 * branch is predicted by the CPU as default-untaken. 67 */ 68 static __used noinline void __sched 69 __mutex_lock_slowpath(atomic_t *lock_count); 70 71 /*** 72 * mutex_lock - acquire the mutex 73 * @lock: the mutex to be acquired 74 * 75 * Lock the mutex exclusively for this task. If the mutex is not 76 * available right now, it will sleep until it can get it. 77 * 78 * The mutex must later on be released by the same task that 79 * acquired it. Recursive locking is not allowed. The task 80 * may not exit without first unlocking the mutex. Also, kernel 81 * memory where the mutex resides mutex must not be freed with 82 * the mutex still locked. The mutex must first be initialized 83 * (or statically defined) before it can be locked. memset()-ing 84 * the mutex to 0 is not allowed. 85 * 86 * ( The CONFIG_DEBUG_MUTEXES .config option turns on debugging 87 * checks that will enforce the restrictions and will also do 88 * deadlock debugging. ) 89 * 90 * This function is similar to (but not equivalent to) down(). 91 */ 92 void __sched mutex_lock(struct mutex *lock) 93 { 94 might_sleep(); 95 /* 96 * The locking fastpath is the 1->0 transition from 97 * 'unlocked' into 'locked' state. 98 */ 99 __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath); 100 mutex_set_owner(lock); 101 } 102 103 EXPORT_SYMBOL(mutex_lock); 104 #endif 105 106 static __used noinline void __sched __mutex_unlock_slowpath(atomic_t *lock_count); 107 108 /*** 109 * mutex_unlock - release the mutex 110 * @lock: the mutex to be released 111 * 112 * Unlock a mutex that has been locked by this task previously. 113 * 114 * This function must not be used in interrupt context. Unlocking 115 * of a not locked mutex is not allowed. 116 * 117 * This function is similar to (but not equivalent to) up(). 118 */ 119 void __sched mutex_unlock(struct mutex *lock) 120 { 121 /* 122 * The unlocking fastpath is the 0->1 transition from 'locked' 123 * into 'unlocked' state: 124 */ 125 #ifndef CONFIG_DEBUG_MUTEXES 126 /* 127 * When debugging is enabled we must not clear the owner before time, 128 * the slow path will always be taken, and that clears the owner field 129 * after verifying that it was indeed current. 130 */ 131 mutex_clear_owner(lock); 132 #endif 133 __mutex_fastpath_unlock(&lock->count, __mutex_unlock_slowpath); 134 } 135 136 EXPORT_SYMBOL(mutex_unlock); 137 138 /* 139 * Lock a mutex (possibly interruptible), slowpath: 140 */ 141 static inline int __sched 142 __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, 143 unsigned long ip) 144 { 145 struct task_struct *task = current; 146 struct mutex_waiter waiter; 147 unsigned long flags; 148 149 preempt_disable(); 150 mutex_acquire(&lock->dep_map, subclass, 0, ip); 151 152 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER 153 /* 154 * Optimistic spinning. 155 * 156 * We try to spin for acquisition when we find that there are no 157 * pending waiters and the lock owner is currently running on a 158 * (different) CPU. 159 * 160 * The rationale is that if the lock owner is running, it is likely to 161 * release the lock soon. 162 * 163 * Since this needs the lock owner, and this mutex implementation 164 * doesn't track the owner atomically in the lock field, we need to 165 * track it non-atomically. 166 * 167 * We can't do this for DEBUG_MUTEXES because that relies on wait_lock 168 * to serialize everything. 169 */ 170 171 for (;;) { 172 struct thread_info *owner; 173 174 /* 175 * If we own the BKL, then don't spin. The owner of 176 * the mutex might be waiting on us to release the BKL. 177 */ 178 if (unlikely(current->lock_depth >= 0)) 179 break; 180 181 /* 182 * If there's an owner, wait for it to either 183 * release the lock or go to sleep. 184 */ 185 owner = ACCESS_ONCE(lock->owner); 186 if (owner && !mutex_spin_on_owner(lock, owner)) 187 break; 188 189 if (atomic_cmpxchg(&lock->count, 1, 0) == 1) { 190 lock_acquired(&lock->dep_map, ip); 191 mutex_set_owner(lock); 192 preempt_enable(); 193 return 0; 194 } 195 196 /* 197 * When there's no owner, we might have preempted between the 198 * owner acquiring the lock and setting the owner field. If 199 * we're an RT task that will live-lock because we won't let 200 * the owner complete. 201 */ 202 if (!owner && (need_resched() || rt_task(task))) 203 break; 204 205 /* 206 * The cpu_relax() call is a compiler barrier which forces 207 * everything in this loop to be re-loaded. We don't need 208 * memory barriers as we'll eventually observe the right 209 * values at the cost of a few extra spins. 210 */ 211 cpu_relax(); 212 } 213 #endif 214 spin_lock_mutex(&lock->wait_lock, flags); 215 216 debug_mutex_lock_common(lock, &waiter); 217 debug_mutex_add_waiter(lock, &waiter, task_thread_info(task)); 218 219 /* add waiting tasks to the end of the waitqueue (FIFO): */ 220 list_add_tail(&waiter.list, &lock->wait_list); 221 waiter.task = task; 222 223 if (atomic_xchg(&lock->count, -1) == 1) 224 goto done; 225 226 lock_contended(&lock->dep_map, ip); 227 228 for (;;) { 229 /* 230 * Lets try to take the lock again - this is needed even if 231 * we get here for the first time (shortly after failing to 232 * acquire the lock), to make sure that we get a wakeup once 233 * it's unlocked. Later on, if we sleep, this is the 234 * operation that gives us the lock. We xchg it to -1, so 235 * that when we release the lock, we properly wake up the 236 * other waiters: 237 */ 238 if (atomic_xchg(&lock->count, -1) == 1) 239 break; 240 241 /* 242 * got a signal? (This code gets eliminated in the 243 * TASK_UNINTERRUPTIBLE case.) 244 */ 245 if (unlikely(signal_pending_state(state, task))) { 246 mutex_remove_waiter(lock, &waiter, 247 task_thread_info(task)); 248 mutex_release(&lock->dep_map, 1, ip); 249 spin_unlock_mutex(&lock->wait_lock, flags); 250 251 debug_mutex_free_waiter(&waiter); 252 preempt_enable(); 253 return -EINTR; 254 } 255 __set_task_state(task, state); 256 257 /* didnt get the lock, go to sleep: */ 258 spin_unlock_mutex(&lock->wait_lock, flags); 259 preempt_enable_no_resched(); 260 schedule(); 261 preempt_disable(); 262 spin_lock_mutex(&lock->wait_lock, flags); 263 } 264 265 done: 266 lock_acquired(&lock->dep_map, ip); 267 /* got the lock - rejoice! */ 268 mutex_remove_waiter(lock, &waiter, current_thread_info()); 269 mutex_set_owner(lock); 270 271 /* set it to 0 if there are no waiters left: */ 272 if (likely(list_empty(&lock->wait_list))) 273 atomic_set(&lock->count, 0); 274 275 spin_unlock_mutex(&lock->wait_lock, flags); 276 277 debug_mutex_free_waiter(&waiter); 278 preempt_enable(); 279 280 return 0; 281 } 282 283 #ifdef CONFIG_DEBUG_LOCK_ALLOC 284 void __sched 285 mutex_lock_nested(struct mutex *lock, unsigned int subclass) 286 { 287 might_sleep(); 288 __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass, _RET_IP_); 289 } 290 291 EXPORT_SYMBOL_GPL(mutex_lock_nested); 292 293 int __sched 294 mutex_lock_killable_nested(struct mutex *lock, unsigned int subclass) 295 { 296 might_sleep(); 297 return __mutex_lock_common(lock, TASK_KILLABLE, subclass, _RET_IP_); 298 } 299 EXPORT_SYMBOL_GPL(mutex_lock_killable_nested); 300 301 int __sched 302 mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass) 303 { 304 might_sleep(); 305 return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 306 subclass, _RET_IP_); 307 } 308 309 EXPORT_SYMBOL_GPL(mutex_lock_interruptible_nested); 310 #endif 311 312 /* 313 * Release the lock, slowpath: 314 */ 315 static inline void 316 __mutex_unlock_common_slowpath(atomic_t *lock_count, int nested) 317 { 318 struct mutex *lock = container_of(lock_count, struct mutex, count); 319 unsigned long flags; 320 321 spin_lock_mutex(&lock->wait_lock, flags); 322 mutex_release(&lock->dep_map, nested, _RET_IP_); 323 debug_mutex_unlock(lock); 324 325 /* 326 * some architectures leave the lock unlocked in the fastpath failure 327 * case, others need to leave it locked. In the later case we have to 328 * unlock it here 329 */ 330 if (__mutex_slowpath_needs_to_unlock()) 331 atomic_set(&lock->count, 1); 332 333 if (!list_empty(&lock->wait_list)) { 334 /* get the first entry from the wait-list: */ 335 struct mutex_waiter *waiter = 336 list_entry(lock->wait_list.next, 337 struct mutex_waiter, list); 338 339 debug_mutex_wake_waiter(lock, waiter); 340 341 wake_up_process(waiter->task); 342 } 343 344 spin_unlock_mutex(&lock->wait_lock, flags); 345 } 346 347 /* 348 * Release the lock, slowpath: 349 */ 350 static __used noinline void 351 __mutex_unlock_slowpath(atomic_t *lock_count) 352 { 353 __mutex_unlock_common_slowpath(lock_count, 1); 354 } 355 356 #ifndef CONFIG_DEBUG_LOCK_ALLOC 357 /* 358 * Here come the less common (and hence less performance-critical) APIs: 359 * mutex_lock_interruptible() and mutex_trylock(). 360 */ 361 static noinline int __sched 362 __mutex_lock_killable_slowpath(atomic_t *lock_count); 363 364 static noinline int __sched 365 __mutex_lock_interruptible_slowpath(atomic_t *lock_count); 366 367 /*** 368 * mutex_lock_interruptible - acquire the mutex, interruptable 369 * @lock: the mutex to be acquired 370 * 371 * Lock the mutex like mutex_lock(), and return 0 if the mutex has 372 * been acquired or sleep until the mutex becomes available. If a 373 * signal arrives while waiting for the lock then this function 374 * returns -EINTR. 375 * 376 * This function is similar to (but not equivalent to) down_interruptible(). 377 */ 378 int __sched mutex_lock_interruptible(struct mutex *lock) 379 { 380 int ret; 381 382 might_sleep(); 383 ret = __mutex_fastpath_lock_retval 384 (&lock->count, __mutex_lock_interruptible_slowpath); 385 if (!ret) 386 mutex_set_owner(lock); 387 388 return ret; 389 } 390 391 EXPORT_SYMBOL(mutex_lock_interruptible); 392 393 int __sched mutex_lock_killable(struct mutex *lock) 394 { 395 int ret; 396 397 might_sleep(); 398 ret = __mutex_fastpath_lock_retval 399 (&lock->count, __mutex_lock_killable_slowpath); 400 if (!ret) 401 mutex_set_owner(lock); 402 403 return ret; 404 } 405 EXPORT_SYMBOL(mutex_lock_killable); 406 407 static __used noinline void __sched 408 __mutex_lock_slowpath(atomic_t *lock_count) 409 { 410 struct mutex *lock = container_of(lock_count, struct mutex, count); 411 412 __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, 0, _RET_IP_); 413 } 414 415 static noinline int __sched 416 __mutex_lock_killable_slowpath(atomic_t *lock_count) 417 { 418 struct mutex *lock = container_of(lock_count, struct mutex, count); 419 420 return __mutex_lock_common(lock, TASK_KILLABLE, 0, _RET_IP_); 421 } 422 423 static noinline int __sched 424 __mutex_lock_interruptible_slowpath(atomic_t *lock_count) 425 { 426 struct mutex *lock = container_of(lock_count, struct mutex, count); 427 428 return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 0, _RET_IP_); 429 } 430 #endif 431 432 /* 433 * Spinlock based trylock, we take the spinlock and check whether we 434 * can get the lock: 435 */ 436 static inline int __mutex_trylock_slowpath(atomic_t *lock_count) 437 { 438 struct mutex *lock = container_of(lock_count, struct mutex, count); 439 unsigned long flags; 440 int prev; 441 442 spin_lock_mutex(&lock->wait_lock, flags); 443 444 prev = atomic_xchg(&lock->count, -1); 445 if (likely(prev == 1)) { 446 mutex_set_owner(lock); 447 mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_); 448 } 449 450 /* Set it back to 0 if there are no waiters: */ 451 if (likely(list_empty(&lock->wait_list))) 452 atomic_set(&lock->count, 0); 453 454 spin_unlock_mutex(&lock->wait_lock, flags); 455 456 return prev == 1; 457 } 458 459 /*** 460 * mutex_trylock - try acquire the mutex, without waiting 461 * @lock: the mutex to be acquired 462 * 463 * Try to acquire the mutex atomically. Returns 1 if the mutex 464 * has been acquired successfully, and 0 on contention. 465 * 466 * NOTE: this function follows the spin_trylock() convention, so 467 * it is negated to the down_trylock() return values! Be careful 468 * about this when converting semaphore users to mutexes. 469 * 470 * This function must not be used in interrupt context. The 471 * mutex must be released by the same task that acquired it. 472 */ 473 int __sched mutex_trylock(struct mutex *lock) 474 { 475 int ret; 476 477 ret = __mutex_fastpath_trylock(&lock->count, __mutex_trylock_slowpath); 478 if (ret) 479 mutex_set_owner(lock); 480 481 return ret; 482 } 483 EXPORT_SYMBOL(mutex_trylock); 484 485 /** 486 * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0 487 * @cnt: the atomic which we are to dec 488 * @lock: the mutex to return holding if we dec to 0 489 * 490 * return true and hold lock if we dec to 0, return false otherwise 491 */ 492 int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock) 493 { 494 /* dec if we can't possibly hit 0 */ 495 if (atomic_add_unless(cnt, -1, 1)) 496 return 0; 497 /* we might hit 0, so take the lock */ 498 mutex_lock(lock); 499 if (!atomic_dec_and_test(cnt)) { 500 /* when we actually did the dec, we didn't hit 0 */ 501 mutex_unlock(lock); 502 return 0; 503 } 504 /* we hit 0, and we hold the lock */ 505 return 1; 506 } 507 EXPORT_SYMBOL(atomic_dec_and_mutex_lock); 508
This page was automatically generated by LXR 0.3.1. • Linux is a registered trademark of Linus Torvalds