Make irqsave/irqrestore (much) cheaper.

This commit is contained in:
px4dev 2012-09-15 17:21:26 -07:00
parent 273b6cf085
commit 9d0992d2a7

View File

@ -131,6 +131,8 @@ struct xcptcontext
/* Disable IRQs */
static inline void irqdisable(void) __attribute__((always_inline, no_instrument_function));
static inline void irqdisable(void)
{
__asm__ __volatile__ ("\tcpsid i\n");
@ -138,6 +140,8 @@ static inline void irqdisable(void)
/* Save the current primask state & disable IRQs */
static inline irqstate_t irqsave(void) __attribute__((always_inline, no_instrument_function));
static inline irqstate_t irqsave(void)
{
unsigned short primask;
@ -158,6 +162,8 @@ static inline irqstate_t irqsave(void)
/* Enable IRQs */
static inline void irqenable(void) __attribute__((always_inline, no_instrument_function));
static inline void irqenable(void)
{
__asm__ __volatile__ ("\tcpsie i\n");
@ -165,6 +171,8 @@ static inline void irqenable(void)
/* Restore saved primask state */
static inline void irqrestore(irqstate_t primask) __attribute__((always_inline, no_instrument_function));
static inline void irqrestore(irqstate_t primask)
{
/* If bit 0 of the primask is 0, then we need to restore