static always_inline bool int_##name(int nr, volatile void *p, bool timeout,\
unsigned int max_try) \
{ \
- volatile uint32_t *ptr = (uint32_t *)p + BITOP_WORD((unsigned int)nr); \
+ volatile uint32_t *ptr = (volatile uint32_t *)p + \
+ BITOP_WORD((unsigned int)nr); \
const uint32_t mask = BITOP_MASK((unsigned int)nr); \
unsigned long res, tmp; \
\
static always_inline bool int_##name(int nr, volatile void *p, int *oldbit, \
bool timeout, unsigned int max_try) \
{ \
- volatile uint32_t *ptr = (uint32_t *)p + BITOP_WORD((unsigned int)nr); \
+ volatile uint32_t *ptr = (volatile uint32_t *)p + \
+ BITOP_WORD((unsigned int)nr); \
unsigned int bit = (unsigned int)nr % BITOP_BITS_PER_WORD; \
const uint32_t mask = BITOP_MASK(bit); \
unsigned long res, tmp; \
"1: ldxrb %w0, %2\n"
" stlxrb %w1, %w3, %2\n"
" cbnz %w1, 1b\n"
- : "=&r" (ret), "=&r" (tmp), "+Q" (*(u8 *)ptr)
+ : "=&r" (ret), "=&r" (tmp), "+Q" (*(volatile u8 *)ptr)
: "r" (x)
: "memory");
break;
"1: ldxrh %w0, %2\n"
" stlxrh %w1, %w3, %2\n"
" cbnz %w1, 1b\n"
- : "=&r" (ret), "=&r" (tmp), "+Q" (*(u16 *)ptr)
+ : "=&r" (ret), "=&r" (tmp), "+Q" (*(volatile u16 *)ptr)
: "r" (x)
: "memory");
break;
"1: ldxr %w0, %2\n"
" stlxr %w1, %w3, %2\n"
" cbnz %w1, 1b\n"
- : "=&r" (ret), "=&r" (tmp), "+Q" (*(u32 *)ptr)
+ : "=&r" (ret), "=&r" (tmp), "+Q" (*(volatile u32 *)ptr)
: "r" (x)
: "memory");
break;
"1: ldxr %0, %2\n"
" stlxr %w1, %3, %2\n"
" cbnz %w1, 1b\n"
- : "=&r" (ret), "=&r" (tmp), "+Q" (*(u64 *)ptr)
+ : "=&r" (ret), "=&r" (tmp), "+Q" (*(volatile u64 *)ptr)
: "r" (x)
: "memory");
break;
" stxr" #sz " %w0, %" #w "4, %2\n" \
"1:\n" \
: "=&r" (res), "=&r" (oldval), \
- "+Q" (*(unsigned long *)ptr) \
+ "+Q" (*(volatile unsigned long *)ptr) \
: "Ir" (*old), "r" (new) \
: "cc"); \
\