Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0db9ae4a authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds
Browse files

[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: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c14e2cfc
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
#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 −0
Original line number Original line Diff line number Diff line
#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 */
+1 −30
Original line number Original line Diff line number Diff line
@@ -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")