Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[ARM] 3852/1: convert atomic bitops and __xchg over to raw_local_irq_{save,restore}

Thomas Gleixner noticed that bitops.h should also use the raw_* irq
disable/enable variants, and __xchg needs them as well.

Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Lennert Buytenhek and committed by
Russell King
e7cc2c59 0c92e830

+16 -16
+12 -12
include/asm-arm/bitops.h
··· 37 37 38 38 p += bit >> 5; 39 39 40 - local_irq_save(flags); 40 + raw_local_irq_save(flags); 41 41 *p |= mask; 42 - local_irq_restore(flags); 42 + raw_local_irq_restore(flags); 43 43 } 44 44 45 45 static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long *p) ··· 49 49 50 50 p += bit >> 5; 51 51 52 - local_irq_save(flags); 52 + raw_local_irq_save(flags); 53 53 *p &= ~mask; 54 - local_irq_restore(flags); 54 + raw_local_irq_restore(flags); 55 55 } 56 56 57 57 static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned long *p) ··· 61 61 62 62 p += bit >> 5; 63 63 64 - local_irq_save(flags); 64 + raw_local_irq_save(flags); 65 65 *p ^= mask; 66 - local_irq_restore(flags); 66 + raw_local_irq_restore(flags); 67 67 } 68 68 69 69 static inline int ··· 75 75 76 76 p += bit >> 5; 77 77 78 - local_irq_save(flags); 78 + raw_local_irq_save(flags); 79 79 res = *p; 80 80 *p = res | mask; 81 - local_irq_restore(flags); 81 + raw_local_irq_restore(flags); 82 82 83 83 return res & mask; 84 84 } ··· 92 92 93 93 p += bit >> 5; 94 94 95 - local_irq_save(flags); 95 + raw_local_irq_save(flags); 96 96 res = *p; 97 97 *p = res & ~mask; 98 - local_irq_restore(flags); 98 + raw_local_irq_restore(flags); 99 99 100 100 return res & mask; 101 101 } ··· 109 109 110 110 p += bit >> 5; 111 111 112 - local_irq_save(flags); 112 + raw_local_irq_save(flags); 113 113 res = *p; 114 114 *p = res ^ mask; 115 - local_irq_restore(flags); 115 + raw_local_irq_restore(flags); 116 116 117 117 return res & mask; 118 118 }
+4 -4
include/asm-arm/system.h
··· 282 282 #error SMP is not supported on this platform 283 283 #endif 284 284 case 1: 285 - local_irq_save(flags); 285 + raw_local_irq_save(flags); 286 286 ret = *(volatile unsigned char *)ptr; 287 287 *(volatile unsigned char *)ptr = x; 288 - local_irq_restore(flags); 288 + raw_local_irq_restore(flags); 289 289 break; 290 290 291 291 case 4: 292 - local_irq_save(flags); 292 + raw_local_irq_save(flags); 293 293 ret = *(volatile unsigned long *)ptr; 294 294 *(volatile unsigned long *)ptr = x; 295 - local_irq_restore(flags); 295 + raw_local_irq_restore(flags); 296 296 break; 297 297 #else 298 298 case 1: