[PATCH] alpha: atomic dependency fix
My alpha build is exploding because asm/atomic.h now needs smb_mb(), which is over in the (not included) system.h. I fear what will happen if I include system.h into atomic.h, so let's put the barriers into their own header file. Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c14e2cfc18
commit
0db9ae4a79
@@ -1,6 +1,8 @@
|
|||||||
#ifndef _ALPHA_ATOMIC_H
|
#ifndef _ALPHA_ATOMIC_H
|
||||||
#define _ALPHA_ATOMIC_H
|
#define _ALPHA_ATOMIC_H
|
||||||
|
|
||||||
|
#include <asm/barrier.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Atomic operations that C can't guarantee us. Useful for
|
* Atomic operations that C can't guarantee us. Useful for
|
||||||
* resource counting etc...
|
* resource counting etc...
|
||||||
|
34
include/asm-alpha/barrier.h
Normal file
34
include/asm-alpha/barrier.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#ifndef __BARRIER_H
|
||||||
|
#define __BARRIER_H
|
||||||
|
|
||||||
|
#define mb() \
|
||||||
|
__asm__ __volatile__("mb": : :"memory")
|
||||||
|
|
||||||
|
#define rmb() \
|
||||||
|
__asm__ __volatile__("mb": : :"memory")
|
||||||
|
|
||||||
|
#define wmb() \
|
||||||
|
__asm__ __volatile__("wmb": : :"memory")
|
||||||
|
|
||||||
|
#define read_barrier_depends() \
|
||||||
|
__asm__ __volatile__("mb": : :"memory")
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
#define smp_mb() mb()
|
||||||
|
#define smp_rmb() rmb()
|
||||||
|
#define smp_wmb() wmb()
|
||||||
|
#define smp_read_barrier_depends() read_barrier_depends()
|
||||||
|
#else
|
||||||
|
#define smp_mb() barrier()
|
||||||
|
#define smp_rmb() barrier()
|
||||||
|
#define smp_wmb() barrier()
|
||||||
|
#define smp_read_barrier_depends() barrier()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define set_mb(var, value) \
|
||||||
|
do { var = value; mb(); } while (0)
|
||||||
|
|
||||||
|
#define set_wmb(var, value) \
|
||||||
|
do { var = value; wmb(); } while (0)
|
||||||
|
|
||||||
|
#endif /* __BARRIER_H */
|
@@ -4,6 +4,7 @@
|
|||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
#include <asm/pal.h>
|
#include <asm/pal.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
#include <asm/barrier.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System defines.. Note that this is included both from .c and .S
|
* System defines.. Note that this is included both from .c and .S
|
||||||
@@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn));
|
|||||||
struct task_struct;
|
struct task_struct;
|
||||||
extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*);
|
extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*);
|
||||||
|
|
||||||
#define mb() \
|
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
|
||||||
|
|
||||||
#define rmb() \
|
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
|
||||||
|
|
||||||
#define wmb() \
|
|
||||||
__asm__ __volatile__("wmb": : :"memory")
|
|
||||||
|
|
||||||
#define read_barrier_depends() \
|
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
#define smp_mb() mb()
|
|
||||||
#define smp_rmb() rmb()
|
|
||||||
#define smp_wmb() wmb()
|
|
||||||
#define smp_read_barrier_depends() read_barrier_depends()
|
|
||||||
#else
|
|
||||||
#define smp_mb() barrier()
|
|
||||||
#define smp_rmb() barrier()
|
|
||||||
#define smp_wmb() barrier()
|
|
||||||
#define smp_read_barrier_depends() barrier()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define set_mb(var, value) \
|
|
||||||
do { var = value; mb(); } while (0)
|
|
||||||
|
|
||||||
#define set_wmb(var, value) \
|
|
||||||
do { var = value; wmb(); } while (0)
|
|
||||||
|
|
||||||
#define imb() \
|
#define imb() \
|
||||||
__asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
|
__asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user