diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-23 22:05:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-23 22:05:11 -0400 |
commit | d6542d76ec88dde3305b06c03952d87b15bbc292 (patch) | |
tree | 4510f1b1bef283f22e168bbfd5933983c991fe78 | |
parent | 3ec438afed6f166f1774b3e95b9a65e3b6da5f2c (diff) | |
parent | bdf03e59f8c136f709dd44987ad21f6ce19dc98c (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile
Pull arch/tile updates from Chris Metcalf:
"This is an even quieter cycle than usual"
* git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
Fix typo
Fix typo
Fix typo
tile: sort the "select" lines in the TILE/TILEGX configs
tile: clarify barrier semantics of atomic_add_return
tile/defconfigs: Remove CONFIG_IPV6_PRIVACY
-rw-r--r-- | arch/tile/Kconfig | 71 | ||||
-rw-r--r-- | arch/tile/configs/tilegx_defconfig | 1 | ||||
-rw-r--r-- | arch/tile/configs/tilepro_defconfig | 1 | ||||
-rw-r--r-- | arch/tile/gxio/mpipe.c | 2 | ||||
-rw-r--r-- | arch/tile/include/asm/atomic_64.h | 17 | ||||
-rw-r--r-- | arch/tile/kernel/pci_gx.c | 4 | ||||
-rw-r--r-- | arch/tile/kernel/unaligned.c | 4 |
7 files changed, 50 insertions, 50 deletions
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index 76989b878f3c..4820a02838ac 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig | |||
@@ -3,49 +3,38 @@ | |||
3 | 3 | ||
4 | config TILE | 4 | config TILE |
5 | def_bool y | 5 | def_bool y |
6 | select HAVE_EXIT_THREAD | 6 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE |
7 | select HAVE_PERF_EVENTS | ||
8 | select USE_PMC if PERF_EVENTS | ||
9 | select HAVE_DMA_API_DEBUG | ||
10 | select HAVE_KVM if !TILEGX | ||
11 | select GENERIC_FIND_FIRST_BIT | ||
12 | select SYSCTL_EXCEPTION_TRACE | ||
13 | select CC_OPTIMIZE_FOR_SIZE | ||
14 | select HAVE_DEBUG_KMEMLEAK | ||
15 | select GENERIC_IRQ_PROBE | ||
16 | select GENERIC_PENDING_IRQ if SMP | ||
17 | select GENERIC_IRQ_SHOW | ||
18 | select HAVE_DEBUG_BUGVERBOSE | ||
19 | select VIRT_TO_BUS | ||
20 | select SYS_HYPERVISOR | ||
21 | select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS | 7 | select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS |
22 | select ARCH_HAS_DEVMEM_IS_ALLOWED | 8 | select ARCH_HAS_DEVMEM_IS_ALLOWED |
23 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 9 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
24 | select GENERIC_CLOCKEVENTS | ||
25 | select MODULES_USE_ELF_RELA | ||
26 | select HAVE_ARCH_TRACEHOOK | ||
27 | select HAVE_SYSCALL_TRACEPOINTS | ||
28 | select USER_STACKTRACE_SUPPORT | ||
29 | select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE | ||
30 | select HAVE_DEBUG_STACKOVERFLOW | ||
31 | select ARCH_WANT_FRAME_POINTERS | 10 | select ARCH_WANT_FRAME_POINTERS |
32 | select HAVE_CONTEXT_TRACKING | 11 | select CC_OPTIMIZE_FOR_SIZE |
33 | select HAVE_NMI if USE_PMC | ||
34 | select EDAC_SUPPORT | 12 | select EDAC_SUPPORT |
13 | select GENERIC_CLOCKEVENTS | ||
14 | select GENERIC_FIND_FIRST_BIT | ||
15 | select GENERIC_IRQ_PROBE | ||
16 | select GENERIC_IRQ_SHOW | ||
17 | select GENERIC_PENDING_IRQ if SMP | ||
35 | select GENERIC_STRNCPY_FROM_USER | 18 | select GENERIC_STRNCPY_FROM_USER |
36 | select GENERIC_STRNLEN_USER | 19 | select GENERIC_STRNLEN_USER |
37 | select HAVE_ARCH_SECCOMP_FILTER | 20 | select HAVE_ARCH_SECCOMP_FILTER |
38 | 21 | select HAVE_ARCH_TRACEHOOK | |
39 | # FIXME: investigate whether we need/want these options. | 22 | select HAVE_CONTEXT_TRACKING |
40 | # select HAVE_IOREMAP_PROT | 23 | select HAVE_DEBUG_BUGVERBOSE |
41 | # select HAVE_OPTPROBES | 24 | select HAVE_DEBUG_KMEMLEAK |
42 | # select HAVE_REGS_AND_STACK_ACCESS_API | 25 | select HAVE_DEBUG_STACKOVERFLOW |
43 | # select HAVE_HW_BREAKPOINT | 26 | select HAVE_DMA_API_DEBUG |
44 | # select PERF_EVENTS | 27 | select HAVE_EXIT_THREAD |
45 | # select HAVE_USER_RETURN_NOTIFIER | 28 | select HAVE_KVM if !TILEGX |
46 | # config NO_BOOTMEM | 29 | select HAVE_NMI if USE_PMC |
47 | # config ARCH_SUPPORTS_DEBUG_PAGEALLOC | 30 | select HAVE_PERF_EVENTS |
48 | # config HUGETLB_PAGE_SIZE_VARIABLE | 31 | select HAVE_SYSCALL_TRACEPOINTS |
32 | select MODULES_USE_ELF_RELA | ||
33 | select SYSCTL_EXCEPTION_TRACE | ||
34 | select SYS_HYPERVISOR | ||
35 | select USER_STACKTRACE_SUPPORT | ||
36 | select USE_PMC if PERF_EVENTS | ||
37 | select VIRT_TO_BUS | ||
49 | 38 | ||
50 | config MMU | 39 | config MMU |
51 | def_bool y | 40 | def_bool y |
@@ -132,17 +121,17 @@ config HVC_TILE | |||
132 | # 64-bit TILE-Gx toolchain, so force CONFIG_TILEGX on. | 121 | # 64-bit TILE-Gx toolchain, so force CONFIG_TILEGX on. |
133 | config TILEGX | 122 | config TILEGX |
134 | def_bool ARCH != "tilepro" | 123 | def_bool ARCH != "tilepro" |
135 | select SPARSE_IRQ | 124 | select ARCH_SUPPORTS_ATOMIC_RMW |
136 | select GENERIC_IRQ_LEGACY_ALLOC_HWIRQ | 125 | select GENERIC_IRQ_LEGACY_ALLOC_HWIRQ |
137 | select HAVE_FUNCTION_TRACER | 126 | select HAVE_ARCH_JUMP_LABEL |
138 | select HAVE_FUNCTION_GRAPH_TRACER | 127 | select HAVE_ARCH_KGDB |
139 | select HAVE_DYNAMIC_FTRACE | 128 | select HAVE_DYNAMIC_FTRACE |
140 | select HAVE_FTRACE_MCOUNT_RECORD | 129 | select HAVE_FTRACE_MCOUNT_RECORD |
130 | select HAVE_FUNCTION_GRAPH_TRACER | ||
131 | select HAVE_FUNCTION_TRACER | ||
141 | select HAVE_KPROBES | 132 | select HAVE_KPROBES |
142 | select HAVE_KRETPROBES | 133 | select HAVE_KRETPROBES |
143 | select HAVE_ARCH_KGDB | 134 | select SPARSE_IRQ |
144 | select ARCH_SUPPORTS_ATOMIC_RMW | ||
145 | select HAVE_ARCH_JUMP_LABEL | ||
146 | 135 | ||
147 | config TILEPRO | 136 | config TILEPRO |
148 | def_bool !TILEGX | 137 | def_bool !TILEGX |
diff --git a/arch/tile/configs/tilegx_defconfig b/arch/tile/configs/tilegx_defconfig index 718905557f7e..dea47c31ab16 100644 --- a/arch/tile/configs/tilegx_defconfig +++ b/arch/tile/configs/tilegx_defconfig | |||
@@ -89,7 +89,6 @@ CONFIG_TCP_CONG_YEAH=m | |||
89 | CONFIG_TCP_CONG_ILLINOIS=m | 89 | CONFIG_TCP_CONG_ILLINOIS=m |
90 | CONFIG_TCP_MD5SIG=y | 90 | CONFIG_TCP_MD5SIG=y |
91 | CONFIG_IPV6=y | 91 | CONFIG_IPV6=y |
92 | CONFIG_IPV6_PRIVACY=y | ||
93 | CONFIG_IPV6_ROUTER_PREF=y | 92 | CONFIG_IPV6_ROUTER_PREF=y |
94 | CONFIG_IPV6_ROUTE_INFO=y | 93 | CONFIG_IPV6_ROUTE_INFO=y |
95 | CONFIG_IPV6_OPTIMISTIC_DAD=y | 94 | CONFIG_IPV6_OPTIMISTIC_DAD=y |
diff --git a/arch/tile/configs/tilepro_defconfig b/arch/tile/configs/tilepro_defconfig index dc85468afd5e..95743eedf747 100644 --- a/arch/tile/configs/tilepro_defconfig +++ b/arch/tile/configs/tilepro_defconfig | |||
@@ -85,7 +85,6 @@ CONFIG_TCP_CONG_YEAH=m | |||
85 | CONFIG_TCP_CONG_ILLINOIS=m | 85 | CONFIG_TCP_CONG_ILLINOIS=m |
86 | CONFIG_TCP_MD5SIG=y | 86 | CONFIG_TCP_MD5SIG=y |
87 | CONFIG_IPV6=y | 87 | CONFIG_IPV6=y |
88 | CONFIG_IPV6_PRIVACY=y | ||
89 | CONFIG_IPV6_ROUTER_PREF=y | 88 | CONFIG_IPV6_ROUTER_PREF=y |
90 | CONFIG_IPV6_ROUTE_INFO=y | 89 | CONFIG_IPV6_ROUTE_INFO=y |
91 | CONFIG_IPV6_OPTIMISTIC_DAD=y | 90 | CONFIG_IPV6_OPTIMISTIC_DAD=y |
diff --git a/arch/tile/gxio/mpipe.c b/arch/tile/gxio/mpipe.c index f102048d9c0e..34de300ab320 100644 --- a/arch/tile/gxio/mpipe.c +++ b/arch/tile/gxio/mpipe.c | |||
@@ -122,7 +122,7 @@ size_t gxio_mpipe_calc_buffer_stack_bytes(unsigned long buffers) | |||
122 | { | 122 | { |
123 | const int BUFFERS_PER_LINE = 12; | 123 | const int BUFFERS_PER_LINE = 12; |
124 | 124 | ||
125 | /* Count the number of cachlines. */ | 125 | /* Count the number of cachelines. */ |
126 | unsigned long lines = | 126 | unsigned long lines = |
127 | (buffers + BUFFERS_PER_LINE - 1) / BUFFERS_PER_LINE; | 127 | (buffers + BUFFERS_PER_LINE - 1) / BUFFERS_PER_LINE; |
128 | 128 | ||
diff --git a/arch/tile/include/asm/atomic_64.h b/arch/tile/include/asm/atomic_64.h index 51cabc26e387..b0531a623653 100644 --- a/arch/tile/include/asm/atomic_64.h +++ b/arch/tile/include/asm/atomic_64.h | |||
@@ -37,12 +37,25 @@ static inline void atomic_add(int i, atomic_t *v) | |||
37 | __insn_fetchadd4((void *)&v->counter, i); | 37 | __insn_fetchadd4((void *)&v->counter, i); |
38 | } | 38 | } |
39 | 39 | ||
40 | /* | ||
41 | * Note a subtlety of the locking here. We are required to provide a | ||
42 | * full memory barrier before and after the operation. However, we | ||
43 | * only provide an explicit mb before the operation. After the | ||
44 | * operation, we use barrier() to get a full mb for free, because: | ||
45 | * | ||
46 | * (1) The barrier directive to the compiler prohibits any instructions | ||
47 | * being statically hoisted before the barrier; | ||
48 | * (2) the microarchitecture will not issue any further instructions | ||
49 | * until the fetchadd result is available for the "+ i" add instruction; | ||
50 | * (3) the smb_mb before the fetchadd ensures that no other memory | ||
51 | * operations are in flight at this point. | ||
52 | */ | ||
40 | static inline int atomic_add_return(int i, atomic_t *v) | 53 | static inline int atomic_add_return(int i, atomic_t *v) |
41 | { | 54 | { |
42 | int val; | 55 | int val; |
43 | smp_mb(); /* barrier for proper semantics */ | 56 | smp_mb(); /* barrier for proper semantics */ |
44 | val = __insn_fetchadd4((void *)&v->counter, i) + i; | 57 | val = __insn_fetchadd4((void *)&v->counter, i) + i; |
45 | barrier(); /* the "+ i" above will wait on memory */ | 58 | barrier(); /* equivalent to smp_mb(); see block comment above */ |
46 | return val; | 59 | return val; |
47 | } | 60 | } |
48 | 61 | ||
@@ -95,7 +108,7 @@ static inline long atomic64_add_return(long i, atomic64_t *v) | |||
95 | int val; | 108 | int val; |
96 | smp_mb(); /* barrier for proper semantics */ | 109 | smp_mb(); /* barrier for proper semantics */ |
97 | val = __insn_fetchadd((void *)&v->counter, i) + i; | 110 | val = __insn_fetchadd((void *)&v->counter, i) + i; |
98 | barrier(); /* the "+ i" above will wait on memory */ | 111 | barrier(); /* equivalent to smp_mb; see atomic_add_return() */ |
99 | return val; | 112 | return val; |
100 | } | 113 | } |
101 | 114 | ||
diff --git a/arch/tile/kernel/pci_gx.c b/arch/tile/kernel/pci_gx.c index aa2b44cd8fd3..0e7a5d09e023 100644 --- a/arch/tile/kernel/pci_gx.c +++ b/arch/tile/kernel/pci_gx.c | |||
@@ -40,7 +40,7 @@ | |||
40 | #include <arch/sim.h> | 40 | #include <arch/sim.h> |
41 | 41 | ||
42 | /* | 42 | /* |
43 | * This file containes the routines to search for PCI buses, | 43 | * This file contains the routines to search for PCI buses, |
44 | * enumerate the buses, and configure any attached devices. | 44 | * enumerate the buses, and configure any attached devices. |
45 | */ | 45 | */ |
46 | 46 | ||
@@ -434,7 +434,7 @@ int __init tile_pci_init(void) | |||
434 | 434 | ||
435 | /* | 435 | /* |
436 | * Now determine which PCIe ports are configured to operate in RC | 436 | * Now determine which PCIe ports are configured to operate in RC |
437 | * mode. There is a differece in the port configuration capability | 437 | * mode. There is a difference in the port configuration capability |
438 | * between the Gx36 and Gx72 devices. | 438 | * between the Gx36 and Gx72 devices. |
439 | * | 439 | * |
440 | * The Gx36 has configuration capability for each of the 3 PCIe | 440 | * The Gx36 has configuration capability for each of the 3 PCIe |
diff --git a/arch/tile/kernel/unaligned.c b/arch/tile/kernel/unaligned.c index 0db5f7c9d9e5..9772a3554282 100644 --- a/arch/tile/kernel/unaligned.c +++ b/arch/tile/kernel/unaligned.c | |||
@@ -188,7 +188,7 @@ static void find_regs(tilegx_bundle_bits bundle, uint64_t *rd, uint64_t *ra, | |||
188 | * Parse fault bundle, find potential used registers and mark | 188 | * Parse fault bundle, find potential used registers and mark |
189 | * corresponding bits in reg_map and alias_map. These 2 bit maps | 189 | * corresponding bits in reg_map and alias_map. These 2 bit maps |
190 | * are used to find the scratch registers and determine if there | 190 | * are used to find the scratch registers and determine if there |
191 | * is register alais. | 191 | * is register alias. |
192 | */ | 192 | */ |
193 | if (bundle & TILEGX_BUNDLE_MODE_MASK) { /* Y Mode Bundle. */ | 193 | if (bundle & TILEGX_BUNDLE_MODE_MASK) { /* Y Mode Bundle. */ |
194 | 194 | ||
@@ -1529,7 +1529,7 @@ void do_unaligned(struct pt_regs *regs, int vecnum) | |||
1529 | } | 1529 | } |
1530 | 1530 | ||
1531 | 1531 | ||
1532 | /* Read the bundle casued the exception! */ | 1532 | /* Read the bundle caused the exception! */ |
1533 | pc = (tilegx_bundle_bits __user *)(regs->pc); | 1533 | pc = (tilegx_bundle_bits __user *)(regs->pc); |
1534 | if (get_user(bundle, pc) != 0) { | 1534 | if (get_user(bundle, pc) != 0) { |
1535 | /* Probably never be here since pc is valid user address.*/ | 1535 | /* Probably never be here since pc is valid user address.*/ |