Skip to content

Commit

Permalink
Create asm-generic/barrier.h
Browse files Browse the repository at this point in the history
Create asm-generic/barrier.h and move the barrier definitions from
asm-generic/system.h to it.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
  • Loading branch information
David Howells committed Mar 28, 2012
1 parent 3448427 commit 885df91
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 33 deletions.
50 changes: 50 additions & 0 deletions include/asm-generic/barrier.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/* Generic barrier definitions, based on MN10300 definitions.
*
* It should be possible to use these on really simple architectures,
* but it serves more as a starting point for new ports.
*
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
* Written by David Howells (dhowells@redhat.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public Licence
* as published by the Free Software Foundation; either version
* 2 of the Licence, or (at your option) any later version.
*/
#ifndef __ASM_GENERIC_BARRIER_H
#define __ASM_GENERIC_BARRIER_H

#ifndef __ASSEMBLY__

#define nop() asm volatile ("nop")

/*
* Force strict CPU ordering.
* And yes, this is required on UP too when we're talking
* to devices.
*
* This implementation only contains a compiler barrier.
*/

#define mb() asm volatile ("": : :"memory")
#define rmb() mb()
#define wmb() asm volatile ("": : :"memory")

#ifdef CONFIG_SMP
#define smp_mb() mb()
#define smp_rmb() rmb()
#define smp_wmb() wmb()
#else
#define smp_mb() barrier()
#define smp_rmb() barrier()
#define smp_wmb() 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 read_barrier_depends() do {} while (0)
#define smp_read_barrier_depends() do {} while (0)

#endif /* !__ASSEMBLY__ */
#endif /* __ASM_GENERIC_BARRIER_H */
34 changes: 1 addition & 33 deletions include/asm-generic/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <linux/types.h>
#include <linux/irqflags.h>

#include <asm/barrier.h>
#include <asm/cmpxchg.h>

struct task_struct;
Expand All @@ -33,42 +34,9 @@ extern struct task_struct *__switch_to(struct task_struct *,

#define arch_align_stack(x) (x)

#define nop() asm volatile ("nop")

#endif /* !__ASSEMBLY__ */

/*
* Force strict CPU ordering.
* And yes, this is required on UP too when we're talking
* to devices.
*
* This implementation only contains a compiler barrier.
*/

#define mb() asm volatile ("": : :"memory")
#define rmb() mb()
#define wmb() asm volatile ("": : :"memory")

#ifdef CONFIG_SMP
#define smp_mb() mb()
#define smp_rmb() rmb()
#define smp_wmb() wmb()
#else
#define smp_mb() barrier()
#define smp_rmb() barrier()
#define smp_wmb() 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 read_barrier_depends() do {} while (0)
#define smp_read_barrier_depends() do {} while (0)

/*
* we make sure local_irq_enable() doesn't cause priority inversion
*/
#ifndef __ASSEMBLY__

/* This function doesn't exist, so you'll get a linker error
* if something tries to do an invalid xchg(). */
Expand Down

0 comments on commit 885df91

Please sign in to comment.