[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/2] xen/spinlocks: spin_trylock with interrupts off is always fine
On 30.10.2020 15:24, Juergen Gross wrote: > Even if a spinlock was taken with interrupts on before calling > spin_trylock() with interrupts off is fine, as it can't block. > > Add a bool parameter "try" to check_lock() for handling this case. > > Remove the call of check_lock() from _spin_is_locked(), as it really > serves no purpose and it can even lead to false crashes, e.g. when > a lock was taken correctly with interrupts enabled and the call of > _spin_is_locked() happened with interrupts off. In case the lock is > taken with wrong interrupt flags this will be catched when taking > the lock. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> albeit I guess ... > @@ -42,7 +42,13 @@ static void check_lock(union lock_debug *debug) > * > * To guard against this subtle bug we latch the IRQ safety of every > * spinlock in the system, on first use. > + * > + * A spin_trylock() or spin_is_locked() with interrupts off is always > + * fine, as those can't block and above deadlock scenario doesn't apply. > */ > + if ( try && irq_safe ) > + return; ... the reference to spin_is_locked() here wants dropping, since ... > @@ -220,8 +226,6 @@ void _spin_unlock_irqrestore(spinlock_t *lock, unsigned > long flags) > > int _spin_is_locked(spinlock_t *lock) > { > - check_lock(&lock->debug); ... you drop the call here? Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |