405void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
406{
407 rwlock_release(&lock->dep_map, 1, _RET_IP_);
408 _raw_write_unlock(lock);
409 local_irq_restore(flags);
410 preempt_enable();
411}
412EXPORT_SYMBOL(_write_unlock_irqrestore);
413
414void __lockfunc _write_unlock_irq(rwlock_t *lock)
415{
416 rwlock_release(&lock->dep_map, 1, _RET_IP_);
417 _raw_write_unlock(lock);
418 local_irq_enable();
419 preempt_enable();
420}
421EXPORT_SYMBOL(_write_unlock_irq);
422
423void __lockfunc _write_unlock_bh(rwlock_t *lock)
424{
425 rwlock_release(&lock->dep_map, 1, _RET_IP_);
426 _raw_write_unlock(lock);
427 preempt_enable_no_resched();
428 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
429}
430EXPORT_SYMBOL(_write_unlock_bh);
431
432int __lockfunc _spin_trylock_bh(spinlock_t *lock)
433{
434 local_bh_disable();
435 preempt_disable();
436 if (_raw_spin_trylock(lock)) {
437 spin_acquire(&lock->dep_map, 0, 1, _RET_IP_);
438 return 1;
439 }
440
441 preempt_enable_no_resched();
442 local_bh_enable_ip((unsigned long)__builtin_return_address(0));
443 return 0;
444}
445EXPORT_SYMBOL(_spin_trylock_bh);