···11901190config SYS_HAS_CPU_SB111911191 bool1192119211931193+#11941194+# CPU may reorder R->R, R->W, W->R, W->W11951195+# Reordering beyond LL and SC is handled in WEAK_REORDERING_BEYOND_LLSC11961196+#11931197config WEAK_ORDERING11981198+ bool11991199+12001200+#12011201+# CPU may reorder reads and writes beyond LL/SC12021202+# CPU may reorder R->LL, R->LL, W->LL, W->LL, R->SC, R->SC, W->SC, W->SC12031203+#12041204+config WEAK_REORDERING_BEYOND_LLSC11941205 bool11951206endmenu11961207
+17-16
include/asm-mips/atomic.h
···138138{139139 unsigned long result;140140141141- smp_mb();141141+ smp_llsc_mb();142142143143 if (cpu_has_llsc && R10000_LLSC_WAR) {144144 unsigned long temp;···181181 raw_local_irq_restore(flags);182182 }183183184184- smp_mb();184184+ smp_llsc_mb();185185186186 return result;187187}···190190{191191 unsigned long result;192192193193- smp_mb();193193+ smp_llsc_mb();194194195195 if (cpu_has_llsc && R10000_LLSC_WAR) {196196 unsigned long temp;···233233 raw_local_irq_restore(flags);234234 }235235236236- smp_mb();236236+ smp_llsc_mb();237237238238 return result;239239}···250250{251251 unsigned long result;252252253253- smp_mb();253253+ smp_llsc_mb();254254255255 if (cpu_has_llsc && R10000_LLSC_WAR) {256256 unsigned long temp;···302302 raw_local_irq_restore(flags);303303 }304304305305- smp_mb();305305+ smp_llsc_mb();306306307307 return result;308308}···519519{520520 unsigned long result;521521522522- smp_mb();522522+ smp_llsc_mb();523523524524 if (cpu_has_llsc && R10000_LLSC_WAR) {525525 unsigned long temp;···562562 raw_local_irq_restore(flags);563563 }564564565565- smp_mb();565565+ smp_llsc_mb();566566567567 return result;568568}···571571{572572 unsigned long result;573573574574- smp_mb();574574+ smp_llsc_mb();575575576576 if (cpu_has_llsc && R10000_LLSC_WAR) {577577 unsigned long temp;···614614 raw_local_irq_restore(flags);615615 }616616617617- smp_mb();617617+ smp_llsc_mb();618618619619 return result;620620}···631631{632632 unsigned long result;633633634634- smp_mb();634634+ smp_llsc_mb();635635636636 if (cpu_has_llsc && R10000_LLSC_WAR) {637637 unsigned long temp;···683683 raw_local_irq_restore(flags);684684 }685685686686- smp_mb();686686+ smp_llsc_mb();687687688688 return result;689689}···791791 * atomic*_return operations are serializing but not the non-*_return792792 * versions.793793 */794794-#define smp_mb__before_atomic_dec() smp_mb()795795-#define smp_mb__after_atomic_dec() smp_mb()796796-#define smp_mb__before_atomic_inc() smp_mb()797797-#define smp_mb__after_atomic_inc() smp_mb()794794+#define smp_mb__before_atomic_dec() smp_llsc_mb()795795+#define smp_mb__after_atomic_dec() smp_llsc_mb()796796+#define smp_mb__before_atomic_inc() smp_llsc_mb()797797+#define smp_mb__after_atomic_inc() smp_llsc_mb()798798799799#include <asm-generic/atomic.h>800800+800801#endif /* _ASM_ATOMIC_H */
···3838/*3939 * clear_bit() doesn't provide any barrier for the compiler.4040 */4141-#define smp_mb__before_clear_bit() smp_mb()4242-#define smp_mb__after_clear_bit() smp_mb()4141+#define smp_mb__before_clear_bit() smp_llsc_mb()4242+#define smp_mb__after_clear_bit() smp_llsc_mb()43434444/*4545 * set_bit - Atomically set a bit in memory···289289 raw_local_irq_restore(flags);290290 }291291292292- smp_mb();292292+ smp_llsc_mb();293293294294 return res != 0;295295}···377377 raw_local_irq_restore(flags);378378 }379379380380- smp_mb();380380+ smp_llsc_mb();381381382382 return res != 0;383383}···445445 raw_local_irq_restore(flags);446446 }447447448448- smp_mb();448448+ smp_llsc_mb();449449450450 return res != 0;451451}