Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <dhowells@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>

+51 -33
+50
include/asm-generic/barrier.h
··· 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 (dhowells@redhat.com) 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 */
+1 -33
include/asm-generic/system.h
··· 19 19 #include <linux/types.h> 20 20 #include <linux/irqflags.h> 21 21 22 + #include <asm/barrier.h> 22 23 #include <asm/cmpxchg.h> 23 24 24 25 struct task_struct; ··· 34 33 35 34 #define arch_align_stack(x) (x) 36 35 37 - #define nop() asm volatile ("nop") 38 - 39 - #endif /* !__ASSEMBLY__ */ 40 - 41 - /* 42 - * Force strict CPU ordering. 43 - * And yes, this is required on UP too when we're talking 44 - * to devices. 45 - * 46 - * This implementation only contains a compiler barrier. 47 - */ 48 - 49 - #define mb() asm volatile ("": : :"memory") 50 - #define rmb() mb() 51 - #define wmb() asm volatile ("": : :"memory") 52 - 53 - #ifdef CONFIG_SMP 54 - #define smp_mb() mb() 55 - #define smp_rmb() rmb() 56 - #define smp_wmb() wmb() 57 - #else 58 - #define smp_mb() barrier() 59 - #define smp_rmb() barrier() 60 - #define smp_wmb() barrier() 61 - #endif 62 - 63 - #define set_mb(var, value) do { var = value; mb(); } while (0) 64 - #define set_wmb(var, value) do { var = value; wmb(); } while (0) 65 - 66 - #define read_barrier_depends() do {} while (0) 67 - #define smp_read_barrier_depends() do {} while (0) 68 - 69 36 /* 70 37 * we make sure local_irq_enable() doesn't cause priority inversion 71 38 */ 72 - #ifndef __ASSEMBLY__ 73 39 74 40 /* This function doesn't exist, so you'll get a linker error 75 41 * if something tries to do an invalid xchg(). */