Skip to content

Commit

Permalink
spinlock: use inline replase macro
Browse files Browse the repository at this point in the history
reason:
we.avoid.use gcc express statement extension in spinlock, to enhance compatibility

Signed-off-by: hujun5 <[email protected]>
  • Loading branch information
hujun260 committed Nov 25, 2024
1 parent 358261a commit 25d3d07
Showing 1 changed file with 40 additions and 24 deletions.
64 changes: 40 additions & 24 deletions include/nuttx/spinlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -633,19 +633,28 @@ irqstate_t spin_lock_irqsave(FAR volatile spinlock_t *lock)
****************************************************************************/

#ifdef CONFIG_SPINLOCK
# define spin_trylock_irqsave_wo_note(l, f) \
({ \
f = up_irq_save(); \
spin_trylock_wo_note(l) ? \
true : ({ up_irq_restore(f); false; }); \
})
static inline_function
bool spin_trylock_irqsave_wo_note(FAR volatile spinlock_t *lock,
irqstate_t *flags)
{
*flags = up_irq_save();

if (!spin_trylock_wo_note(lock))
{
up_irq_restore(*flags);
return false;
}

return true;
}
#else
# define spin_trylock_irqsave_wo_note(l, f) \
({ \
(void)(l); \
f = up_irq_save(); \
true; \
})
static inline_function
bool spin_trylock_irqsave_wo_note(FAR volatile spinlock_t *lock,
irqstate_t *flags)
{
*flags = up_irq_save();
return true;
}
#endif /* CONFIG_SPINLOCK */

/****************************************************************************
Expand All @@ -669,19 +678,26 @@ irqstate_t spin_lock_irqsave(FAR volatile spinlock_t *lock)
****************************************************************************/

#ifdef CONFIG_SPINLOCK
# define spin_trylock_irqsave(l, f) \
({ \
f = up_irq_save(); \
spin_trylock(l) ? \
true : ({ up_irq_restore(f); false; }); \
})
static inline_function
bool spin_trylock_irqsave(FAR volatile spinlock_t *lock, irqstate_t *flags)
{
*flags = up_irq_save();

if (!spin_trylock(lock))
{
up_irq_restore(*flags);
return false;
}

return true;
}
#else
# define spin_trylock_irqsave(l, f) \
({ \
(void)(l); \
f = up_irq_save(); \
true; \
})
static inline_function
bool spin_trylock_irqsave(FAR volatile spinlock_t *lock, irqstate_t *flags)
{
*flags = up_irq_save();
return true;
}
#endif /* CONFIG_SPINLOCK */

/****************************************************************************
Expand Down

0 comments on commit 25d3d07

Please sign in to comment.