• 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-rc7
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 #if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) && \ 152 !defined(CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES) 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 there's an owner, wait for it to either 176 * release the lock or go to sleep. 177 */ 178 owner = ACCESS_ONCE(lock->owner); 179 if (owner && !mutex_spin_on_owner(lock, owner)) 180 break; 181 182 if (atomic_cmpxchg(&lock->count, 1, 0) == 1) { 183 lock_acquired(&lock->dep_map, ip); 184 mutex_set_owner(lock); 185 preempt_enable(); 186 return 0; 187 } 188 189 /* 190 * When there's no owner, we might have preempted between the 191 * owner acquiring the lock and setting the owner field. If 192 * we're an RT task that will live-lock because we won't let 193 * the owner complete. 194 */ 195 if (!owner && (need_resched() || rt_task(task))) 196 break; 197 198 /* 199 * The cpu_relax() call is a compiler barrier which forces 200 * everything in this loop to be re-loaded. We don't need 201 * memory barriers as we'll eventually observe the right 202 * values at the cost of a few extra spins. 203 */ 204 cpu_relax(); 205 } 206 #endif 207 spin_lock_mutex(&lock->wait_lock, flags); 208 209 debug_mutex_lock_common(lock, &waiter); 210 debug_mutex_add_waiter(lock, &waiter, task_thread_info(task)); 211 212 /* add waiting tasks to the end of the waitqueue (FIFO): */ 213 list_add_tail(&waiter.list, &lock->wait_list); 214 waiter.task = task; 215 216 if (atomic_xchg(&lock->count, -1) == 1) 217 goto done; 218 219 lock_contended(&lock->dep_map, ip); 220 221 for (;;) { 222 /* 223 * Lets try to take the lock again - this is needed even if 224 * we get here for the first time (shortly after failing to 225 * acquire the lock), to make sure that we get a wakeup once 226 * it's unlocked. Later on, if we sleep, this is the 227 * operation that gives us the lock. We xchg it to -1, so 228 * that when we release the lock, we properly wake up the 229 * other waiters: 230 */ 231 if (atomic_xchg(&lock->count, -1) == 1) 232 break; 233 234 /* 235 * got a signal? (This code gets eliminated in the 236 * TASK_UNINTERRUPTIBLE case.) 237 */ 238 if (unlikely(signal_pending_state(state, task))) { 239 mutex_remove_waiter(lock, &waiter, 240 task_thread_info(task)); 241 mutex_release(&lock->dep_map, 1, ip); 242 spin_unlock_mutex(&lock->wait_lock, flags); 243 244 debug_mutex_free_waiter(&waiter); 245 preempt_enable(); 246 return -EINTR; 247 } 248 __set_task_state(task, state); 249 250 /* didnt get the lock, go to sleep: */ 251 spin_unlock_mutex(&lock->wait_lock, flags); 252 preempt_enable_no_resched(); 253 schedule(); 254 preempt_disable(); 255 spin_lock_mutex(&lock->wait_lock, flags); 256 } 257 258 done: 259 lock_acquired(&lock->dep_map, ip); 260 /* got the lock - rejoice! */ 261 mutex_remove_waiter(lock, &waiter, current_thread_info()); 262 mutex_set_owner(lock); 263 264 /* set it to 0 if there are no waiters left: */ 265 if (likely(list_empty(&lock->wait_list))) 266 atomic_set(&lock->count, 0); 267 268 spin_unlock_mutex(&lock->wait_lock, flags); 269 270 debug_mutex_free_waiter(&waiter); 271 preempt_enable(); 272 273 return 0; 274 } 275 276 #ifdef CONFIG_DEBUG_LOCK_ALLOC 277 void __sched 278 mutex_lock_nested(struct mutex *lock, unsigned int subclass) 279 { 280 might_sleep(); 281 __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass, _RET_IP_); 282 } 283 284 EXPORT_SYMBOL_GPL(mutex_lock_nested); 285 286 int __sched 287 mutex_lock_killable_nested(struct mutex *lock, unsigned int subclass) 288 { 289 might_sleep(); 290 return __mutex_lock_common(lock, TASK_KILLABLE, subclass, _RET_IP_); 291 } 292 EXPORT_SYMBOL_GPL(mutex_lock_killable_nested); 293 294 int __sched 295 mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass) 296 { 297 might_sleep(); 298 return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 299 subclass, _RET_IP_); 300 } 301 302 EXPORT_SYMBOL_GPL(mutex_lock_interruptible_nested); 303 #endif 304 305 /* 306 * Release the lock, slowpath: 307 */ 308 static inline void 309 __mutex_unlock_common_slowpath(atomic_t *lock_count, int nested) 310 { 311 struct mutex *lock = container_of(lock_count, struct mutex, count); 312 unsigned long flags; 313 314 spin_lock_mutex(&lock->wait_lock, flags); 315 mutex_release(&lock->dep_map, nested, _RET_IP_); 316 debug_mutex_unlock(lock); 317 318 /* 319 * some architectures leave the lock unlocked in the fastpath failure 320 * case, others need to leave it locked. In the later case we have to 321 * unlock it here 322 */ 323 if (__mutex_slowpath_needs_to_unlock()) 324 atomic_set(&lock->count, 1); 325 326 if (!list_empty(&lock->wait_list)) { 327 /* get the first entry from the wait-list: */ 328 struct mutex_waiter *waiter = 329 list_entry(lock->wait_list.next, 330 struct mutex_waiter, list); 331 332 debug_mutex_wake_waiter(lock, waiter); 333 334 wake_up_process(waiter->task); 335 } 336 337 spin_unlock_mutex(&lock->wait_lock, flags); 338 } 339 340 /* 341 * Release the lock, slowpath: 342 */ 343 static __used noinline void 344 __mutex_unlock_slowpath(atomic_t *lock_count) 345 { 346 __mutex_unlock_common_slowpath(lock_count, 1); 347 } 348 349 #ifndef CONFIG_DEBUG_LOCK_ALLOC 350 /* 351 * Here come the less common (and hence less performance-critical) APIs: 352 * mutex_lock_interruptible() and mutex_trylock(). 353 */ 354 static noinline int __sched 355 __mutex_lock_killable_slowpath(atomic_t *lock_count); 356 357 static noinline int __sched 358 __mutex_lock_interruptible_slowpath(atomic_t *lock_count); 359 360 /*** 361 * mutex_lock_interruptible - acquire the mutex, interruptable 362 * @lock: the mutex to be acquired 363 * 364 * Lock the mutex like mutex_lock(), and return 0 if the mutex has 365 * been acquired or sleep until the mutex becomes available. If a 366 * signal arrives while waiting for the lock then this function 367 * returns -EINTR. 368 * 369 * This function is similar to (but not equivalent to) down_interruptible(). 370 */ 371 int __sched mutex_lock_interruptible(struct mutex *lock) 372 { 373 int ret; 374 375 might_sleep(); 376 ret = __mutex_fastpath_lock_retval 377 (&lock->count, __mutex_lock_interruptible_slowpath); 378 if (!ret) 379 mutex_set_owner(lock); 380 381 return ret; 382 } 383 384 EXPORT_SYMBOL(mutex_lock_interruptible); 385 386 int __sched mutex_lock_killable(struct mutex *lock) 387 { 388 int ret; 389 390 might_sleep(); 391 ret = __mutex_fastpath_lock_retval 392 (&lock->count, __mutex_lock_killable_slowpath); 393 if (!ret) 394 mutex_set_owner(lock); 395 396 return ret; 397 } 398 EXPORT_SYMBOL(mutex_lock_killable); 399 400 static __used noinline void __sched 401 __mutex_lock_slowpath(atomic_t *lock_count) 402 { 403 struct mutex *lock = container_of(lock_count, struct mutex, count); 404 405 __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, 0, _RET_IP_); 406 } 407 408 static noinline int __sched 409 __mutex_lock_killable_slowpath(atomic_t *lock_count) 410 { 411 struct mutex *lock = container_of(lock_count, struct mutex, count); 412 413 return __mutex_lock_common(lock, TASK_KILLABLE, 0, _RET_IP_); 414 } 415 416 static noinline int __sched 417 __mutex_lock_interruptible_slowpath(atomic_t *lock_count) 418 { 419 struct mutex *lock = container_of(lock_count, struct mutex, count); 420 421 return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 0, _RET_IP_); 422 } 423 #endif 424 425 /* 426 * Spinlock based trylock, we take the spinlock and check whether we 427 * can get the lock: 428 */ 429 static inline int __mutex_trylock_slowpath(atomic_t *lock_count) 430 { 431 struct mutex *lock = container_of(lock_count, struct mutex, count); 432 unsigned long flags; 433 int prev; 434 435 spin_lock_mutex(&lock->wait_lock, flags); 436 437 prev = atomic_xchg(&lock->count, -1); 438 if (likely(prev == 1)) { 439 mutex_set_owner(lock); 440 mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_); 441 } 442 443 /* Set it back to 0 if there are no waiters: */ 444 if (likely(list_empty(&lock->wait_list))) 445 atomic_set(&lock->count, 0); 446 447 spin_unlock_mutex(&lock->wait_lock, flags); 448 449 return prev == 1; 450 } 451 452 /*** 453 * mutex_trylock - try acquire the mutex, without waiting 454 * @lock: the mutex to be acquired 455 * 456 * Try to acquire the mutex atomically. Returns 1 if the mutex 457 * has been acquired successfully, and 0 on contention. 458 * 459 * NOTE: this function follows the spin_trylock() convention, so 460 * it is negated to the down_trylock() return values! Be careful 461 * about this when converting semaphore users to mutexes. 462 * 463 * This function must not be used in interrupt context. The 464 * mutex must be released by the same task that acquired it. 465 */ 466 int __sched mutex_trylock(struct mutex *lock) 467 { 468 int ret; 469 470 ret = __mutex_fastpath_trylock(&lock->count, __mutex_trylock_slowpath); 471 if (ret) 472 mutex_set_owner(lock); 473 474 return ret; 475 } 476 EXPORT_SYMBOL(mutex_trylock); 477 478 /** 479 * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0 480 * @cnt: the atomic which we are to dec 481 * @lock: the mutex to return holding if we dec to 0 482 * 483 * return true and hold lock if we dec to 0, return false otherwise 484 */ 485 int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock) 486 { 487 /* dec if we can't possibly hit 0 */ 488 if (atomic_add_unless(cnt, -1, 1)) 489 return 0; 490 /* we might hit 0, so take the lock */ 491 mutex_lock(lock); 492 if (!atomic_dec_and_test(cnt)) { 493 /* when we actually did the dec, we didn't hit 0 */ 494 mutex_unlock(lock); 495 return 0; 496 } 497 /* we hit 0, and we hold the lock */ 498 return 1; 499 } 500 EXPORT_SYMBOL(atomic_dec_and_mutex_lock); 501
This page was automatically generated by LXR 0.3.1. • Linux is a registered trademark of Linus Torvalds