Skip to content

Commit 885df91

Browse files
committed
Create asm-generic/barrier.h
Create asm-generic/barrier.h and move the barrier definitions from asm-generic/system.h to it. Signed-off-by: David Howells <[email protected]> Acked-by: Arnd Bergmann <[email protected]>
1 parent 3448427 commit 885df91

File tree

2 files changed

+51
-33
lines changed

2 files changed

+51
-33
lines changed

include/asm-generic/barrier.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/* Generic barrier definitions, based on MN10300 definitions.
2+
*
3+
* It should be possible to use these on really simple architectures,
4+
* but it serves more as a starting point for new ports.
5+
*
6+
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
7+
* Written by David Howells ([email protected])
8+
*
9+
* This program is free software; you can redistribute it and/or
10+
* modify it under the terms of the GNU General Public Licence
11+
* as published by the Free Software Foundation; either version
12+
* 2 of the Licence, or (at your option) any later version.
13+
*/
14+
#ifndef __ASM_GENERIC_BARRIER_H
15+
#define __ASM_GENERIC_BARRIER_H
16+
17+
#ifndef __ASSEMBLY__
18+
19+
#define nop() asm volatile ("nop")
20+
21+
/*
22+
* Force strict CPU ordering.
23+
* And yes, this is required on UP too when we're talking
24+
* to devices.
25+
*
26+
* This implementation only contains a compiler barrier.
27+
*/
28+
29+
#define mb() asm volatile ("": : :"memory")
30+
#define rmb() mb()
31+
#define wmb() asm volatile ("": : :"memory")
32+
33+
#ifdef CONFIG_SMP
34+
#define smp_mb() mb()
35+
#define smp_rmb() rmb()
36+
#define smp_wmb() wmb()
37+
#else
38+
#define smp_mb() barrier()
39+
#define smp_rmb() barrier()
40+
#define smp_wmb() barrier()
41+
#endif
42+
43+
#define set_mb(var, value) do { var = value; mb(); } while (0)
44+
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
45+
46+
#define read_barrier_depends() do {} while (0)
47+
#define smp_read_barrier_depends() do {} while (0)
48+
49+
#endif /* !__ASSEMBLY__ */
50+
#endif /* __ASM_GENERIC_BARRIER_H */

include/asm-generic/system.h

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <linux/types.h>
2020
#include <linux/irqflags.h>
2121

22+
#include <asm/barrier.h>
2223
#include <asm/cmpxchg.h>
2324

2425
struct task_struct;
@@ -33,42 +34,9 @@ extern struct task_struct *__switch_to(struct task_struct *,
3334

3435
#define arch_align_stack(x) (x)
3536

36-
#define nop() asm volatile ("nop")
37-
38-
#endif /* !__ASSEMBLY__ */
39-
40-
/*
41-
* Force strict CPU ordering.
42-
* And yes, this is required on UP too when we're talking
43-
* to devices.
44-
*
45-
* This implementation only contains a compiler barrier.
46-
*/
47-
48-
#define mb() asm volatile ("": : :"memory")
49-
#define rmb() mb()
50-
#define wmb() asm volatile ("": : :"memory")
51-
52-
#ifdef CONFIG_SMP
53-
#define smp_mb() mb()
54-
#define smp_rmb() rmb()
55-
#define smp_wmb() wmb()
56-
#else
57-
#define smp_mb() barrier()
58-
#define smp_rmb() barrier()
59-
#define smp_wmb() barrier()
60-
#endif
61-
62-
#define set_mb(var, value) do { var = value; mb(); } while (0)
63-
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
64-
65-
#define read_barrier_depends() do {} while (0)
66-
#define smp_read_barrier_depends() do {} while (0)
67-
6837
/*
6938
* we make sure local_irq_enable() doesn't cause priority inversion
7039
*/
71-
#ifndef __ASSEMBLY__
7240

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

0 commit comments

Comments
 (0)