Index: sys/arm/include/atomic-v6.h =================================================================== --- sys/arm/include/atomic-v6.h +++ sys/arm/include/atomic-v6.h @@ -863,6 +863,7 @@ { int newv, oldv, result; + bit &= 0x1f; __asm __volatile( " mov ip, #1 \n" " lsl ip, ip, %[bit] \n" @@ -907,6 +908,7 @@ { int newv, oldv, result; + bit &= 0x1f; __asm __volatile( " mov ip, #1 \n" " lsl ip, ip, %[bit] \n" @@ -953,10 +955,8 @@ p32 = (volatile uint32_t *)p; /* Assume little-endian */ - if (v >= 32) { - v &= 0x1f; + if ((v & 0x20) != 0) p32++; - } return (atomic_testandset_32(p32, v)); }