[PATCH] spin_unlock_bh() and preempt_check_resched()
In _spin_unlock_bh(lock): do { \ _raw_spin_unlock(lock); \ preempt_enable(); \ local_bh_enable(); \ __release(lock); \ } while (0) there is no reason for using preempt_enable() instead of a simple preempt_enable_no_resched() Since we know bottom halves are disabled, preempt_schedule() will always return at once (preempt_count!=0), and hence preempt_check_resched() is useless here... This fixes it by using "preempt_enable_no_resched()" instead of the "preempt_enable()", and thus avoids the useless preempt_check_resched() just before re-enabling bottom halves. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
9636273dae
commit
10f02d1c59
@@ -294,7 +294,7 @@ EXPORT_SYMBOL(_spin_unlock_irq);
|
||||
void __lockfunc _spin_unlock_bh(spinlock_t *lock)
|
||||
{
|
||||
_raw_spin_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_spin_unlock_bh);
|
||||
@@ -318,7 +318,7 @@ EXPORT_SYMBOL(_read_unlock_irq);
|
||||
void __lockfunc _read_unlock_bh(rwlock_t *lock)
|
||||
{
|
||||
_raw_read_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_read_unlock_bh);
|
||||
@@ -342,7 +342,7 @@ EXPORT_SYMBOL(_write_unlock_irq);
|
||||
void __lockfunc _write_unlock_bh(rwlock_t *lock)
|
||||
{
|
||||
_raw_write_unlock(lock);
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(_write_unlock_bh);
|
||||
@@ -354,7 +354,7 @@ int __lockfunc _spin_trylock_bh(spinlock_t *lock)
|
||||
if (_raw_spin_trylock(lock))
|
||||
return 1;
|
||||
|
||||
preempt_enable();
|
||||
preempt_enable_no_resched();
|
||||
local_bh_enable();
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user