Changeset ffe4a87 in mainline for kernel/generic/src/synch/spinlock.c


Ignore:
Timestamp:
2010-05-25T22:15:03Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e805e2f
Parents:
d7da4284
Message:

Add interfaces for testing the status of plain spinlocks and the IRQ spinlocks.

Note that because of the non-SMP version of spinlocks, the status must be
checked only in the affirmative manner. Instead of:

ASSERT(!spinlock_locked(…));


one needs to do:

ASSERT(spinlock_unlocked(…));

Otherwise the assertion will be hit on debug non-SMP kernels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/synch/spinlock.c

    rd7da4284 rffe4a87  
    128128void spinlock_unlock_debug(spinlock_t *lock)
    129129{
    130         ASSERT_SPINLOCK(atomic_get(&lock->val) != 0, lock);
     130        ASSERT_SPINLOCK(spinlock_locked(lock), lock);
    131131       
    132132        /*
     
    165165       
    166166        return rc;
     167}
     168
     169/** Find out whether the spinlock is currently locked.
     170 *
     171 * @param lock          Spinlock.
     172 * @return              True if the spinlock is locked, false otherwise.
     173 */
     174bool spinlock_locked(spinlock_t *lock)
     175{
     176        return atomic_get(&lock->val) != 0;
     177}
     178
     179/** Find out whether the spinlock is currently unlocked.
     180 *
     181 * @param lock          Spinlock.
     182 * @return              True if the spinlock is not locked, false otherwise.
     183 */
     184bool spinlock_unlocked(spinlock_t *lock)
     185{
     186        return atomic_get(&lock->val) == 0;
    167187}
    168188
     
    314334}
    315335
     336/** Find out whether the IRQ spinlock is currently locked.
     337 *
     338 * @param lock          IRQ spinlock.
     339 * @return              True if the IRQ spinlock is locked, false otherwise.
     340 */
     341bool irq_spinlock_locked(irq_spinlock_t *ilock)
     342{
     343        return spinlock_locked(&ilock->lock);
     344}
     345
     346/** Find out whether the IRQ spinlock is currently unlocked.
     347 *
     348 * @param lock          IRQ spinlock.
     349 * @return              True if the IRQ spinlock is not locked, false otherwise.
     350 */
     351bool irq_spinlock_unlocked(irq_spinlock_t *ilock)
     352{
     353        return spinlock_unlocked(&ilock->lock);
     354}
     355
    316356/** @}
    317357 */
Note: See TracChangeset for help on using the changeset viewer.