From f6dc8c5b8e04ce28720155383e971561a23899d5 Mon Sep 17 00:00:00 2001 From: Chase Venters Date: Sat, 8 Jul 2006 11:10:29 -0500 Subject: [PATCH] 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 Acked-by: Arjan van de Ven Signed-off-by: Linus Torvalds --- 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(-) diff --git a/include/asm-frv/processor.h b/include/asm-frv/processor.h index 1c4dba1c5f5716..3744f2e47f48fc 100644 --- a/include/asm-frv/processor.h +++ b/include/asm-frv/processor.h @@ -21,6 +21,7 @@ */ #define current_text_addr() ({ __label__ _l; _l: &&_l;}) +#include #include #include #include @@ -139,7 +140,7 @@ unsigned long get_wchan(struct task_struct *p); extern 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 diff --git a/include/asm-h8300/processor.h b/include/asm-h8300/processor.h index c7e2f454b83a57..99b664aa20837e 100644 --- a/include/asm-h8300/processor.h +++ b/include/asm-h8300/processor.h @@ -17,6 +17,7 @@ */ #define current_text_addr() ({ __label__ _l; _l: &&_l;}) +#include #include #include #include @@ -129,6 +130,6 @@ unsigned long get_wchan(struct task_struct *p); eip; }) #define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) -#define cpu_relax() do { } while (0) +#define cpu_relax() barrier() #endif diff --git a/include/asm-m68knommu/processor.h b/include/asm-m68knommu/processor.h index 0ee158e09abb3f..9d3a1bf412312b 100644 --- a/include/asm-m68knommu/processor.h +++ b/include/asm-m68knommu/processor.h @@ -13,6 +13,7 @@ */ #define current_text_addr() ({ __label__ _l; _l: &&_l;}) +#include #include #include #include @@ -137,6 +138,6 @@ unsigned long get_wchan(struct task_struct *p); eip; }) #define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) -#define cpu_relax() do { } while (0) +#define cpu_relax() barrier() #endif diff --git a/include/asm-sh/processor.h b/include/asm-sh/processor.h index fa5bd2d8803e4d..eeb0f48bb99ead 100644 --- a/include/asm-sh/processor.h +++ b/include/asm-sh/processor.h @@ -9,6 +9,7 @@ #define __ASM_SH_PROCESSOR_H #ifdef __KERNEL__ +#include #include #include #include @@ -263,7 +264,7 @@ extern unsigned long get_wchan(struct task_struct *p); #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 */ diff --git a/include/asm-sh64/processor.h b/include/asm-sh64/processor.h index 1bf252dad8249e..eb2bee4b47b95e 100644 --- a/include/asm-sh64/processor.h +++ b/include/asm-sh64/processor.h @@ -22,6 +22,7 @@ #include #include #include +#include /* * Default implementation of macro that returns current @@ -279,7 +280,7 @@ extern unsigned long get_wchan(struct task_struct *p); #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 */ diff --git a/include/asm-v850/processor.h b/include/asm-v850/processor.h index 6965b66ccaed89..979e3467f9afc1 100644 --- a/include/asm-v850/processor.h +++ b/include/asm-v850/processor.h @@ -18,6 +18,7 @@ #include #endif +#include #include #include @@ -106,7 +107,7 @@ unsigned long get_wchan (struct task_struct *p); #define KSTK_ESP(task) task_sp (task) -#define cpu_relax() ((void)0) +#define cpu_relax() barrier() #else /* __ASSEMBLY__ */ diff --git a/include/asm-xtensa/processor.h b/include/asm-xtensa/processor.h index d1d72ad36f08e4..8b96e77c9d829c 100644 --- a/include/asm-xtensa/processor.h +++ b/include/asm-xtensa/processor.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -191,7 +192,7 @@ extern unsigned long get_wchan(struct task_struct *p); #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. */ -- cgit 1.2.3-korg