Make cpu_relax() imply barrier() on all arches
PATCH 1/1 Make cpu_relax() imply barrier() on all arches
During the recent discussion of taking 'volatile' off of the spinlock, I noticed that while most arches #define cpu_relax() such that it implies barrier(), some arches define cpu_relax() to be empty.
This patch changes the definition of cpu_relax() for frv, h8300, m68knommu, sh, sh64, v850 and xtensa from an empty while(0) to the compiler barrier().
Signed-off-by Chase Venters <[email protected]>
---
include/asm-frv/processor.h | 3 ++- include/asm-h8300/processor.h | 3 ++- include/asm-m68knommu/processor.h | 3 ++- include/asm-sh/processor.h | 3 ++- include/asm-sh64/processor.h | 3 ++- include/asm-v850/processor.h | 3 ++- include/asm-xtensa/processor.h | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-)
include/asm-frv/processor.h +2 -1
@@ -21,6 +21,7 @@ #ifndef __ASSEMBLY__*/ #define current_text_addr () ({ __label__ _l; _l: &&_l;}) +#include <linux/compiler.h> #include <linux/linkage.h> #include <asm/sections.h> #include <asm/segment.h>
@@ -139,7 +140,7 @@ #define KSTK_ESP(tsk) ((tsk)->thread.fraextern struct task_struct *alloc_task_struct (void );extern void free_task_struct (struct task_struct *p); -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()/* data cache prefetch */ #define ARCH_HAS_PREFETCH
include/asm-h8300/processor.h +2 -1
@@ -17,6 +17,7 @@ #define __ASM_H8300_PROCESSOR_H*/ #define current_text_addr () ({ __label__ _l; _l: &&_l;}) +#include <linux/compiler.h> #include <asm/segment.h> #include <asm/fpu.h> #include <asm/ptrace.h>
@@ -129,6 +130,6 @@ #define KSTK_EIP(tsk) \ eip; })#define KSTK_ESP (tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()#endif
(quoted diff) +0 -0
b/include/asm-m68knommu/processor.h
index 0ee158e..9d3a1bf 100644
include/asm-m68knommu/processor.h +2 -1
@@ -13,6 +13,7 @@ #define __ASM_M68K_PROCESSOR_H*/ #define current_text_addr () ({ __label__ _l; _l: &&_l;}) +#include <linux/compiler.h> #include <linux/threads.h> #include <asm/types.h> #include <asm/segment.h>
@@ -137,6 +138,6 @@ #define KSTK_EIP(tsk) \ eip; })#define KSTK_ESP (tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()#endif
include/asm-sh/processor.h +2 -1
@@ -9,6 +9,7 @@ #ifndef __ASM_SH_PROCESSOR_H#define __ASM_SH_PROCESSOR_H#ifdef __KERNEL__ +#include <linux/compiler.h> #include <asm/page.h> #include <asm/types.h> #include <asm/cache.h>
@@ -263,7 +264,7 @@ #define KSTK_EIP(tsk) ((tsk)->thread.pc#define KSTK_ESP (tsk) ((tsk)->thread.sp)#define cpu_sleep () __asm__ __volatile__ ("sleep" : : : "memory") -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()#endif /* __KERNEL__ */ #endif /* __ASM_SH_PROCESSOR_H */
include/asm-sh64/processor.h +2 -1
@@ -22,6 +22,7 @@ #include <asm/types.h>#include <asm/cache.h> #include <asm/registers.h> #include <linux/threads.h> +#include <linux/compiler.h> /* * Default implementation of macro that returns current
@@ -279,7 +280,7 @@ extern unsigned long get_wchan(struct ta#define KSTK_EIP (tsk) ((tsk)->thread.pc)#define KSTK_ESP (tsk) ((tsk)->thread.sp) -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()#endif /* __ASSEMBLY__ */ #endif /* __ASM_SH64_PROCESSOR_H */
include/asm-v850/processor.h +2 -1
@@ -18,6 +18,7 @@ #ifndef __ASSEMBLY__ /* <linux/thread_in#include <linux/thread_info.h> #endif +#include <linux/compiler.h> #include <asm/ptrace.h> #include <asm/entry.h>
@@ -106,7 +107,7 @@ #define KSTK_EIP(task) task_pc (task)#define KSTK_ESP (task) task_sp (task) -#define cpu_relax () ((void)0) +#define cpu_relax () barrier()#else /* __ASSEMBLY__ */
include/asm-xtensa/processor.h +2 -1
@@ -20,6 +20,7 @@ #include <xtensa/config/specreg.h>#include <xtensa/config/tie.h> #include <xtensa/config/system.h> +#include <linux/compiler.h> #include <asm/ptrace.h> #include <asm/types.h> #include <asm/coprocessor.h>
@@ -191,7 +192,7 @@ extern unsigned long get_wchan(struct ta#define KSTK_EIP (tsk) (task_pt_regs(tsk)->pc)#define KSTK_ESP (tsk) (task_pt_regs(tsk)->areg[1]) -#define cpu_relax () do { } while (0) +#define cpu_relax () barrier()/* Special register access. */
Quoted 8 lines · Chase Venters
include/asm-frv/processor.h | 3 ++- include/asm-h8300/processor.h | 3 ++- include/asm-m68knommu/processor.h | 3 ++- include/asm-sh/processor.h | 3 ++- include/asm-sh64/processor.h | 3 ++- include/asm-v850/processor.h | 3 ++- include/asm-xtensa/processor.h | 3 ++-
cpu_relax() indeed is supposed have barrier() semantics!
Acked-by Arjan van de Ven <[email protected]>