Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0182-3.10.83-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2670 - (show annotations) (download)
Tue Jul 21 16:20:25 2015 UTC (8 years, 9 months ago) by niro
File size: 57570 byte(s)
-linux-3.10.83
1 diff --git a/Makefile b/Makefile
2 index 5e3e665a10b7..21529dbcc11d 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 10
8 -SUBLEVEL = 82
9 +SUBLEVEL = 83
10 EXTRAVERSION =
11 NAME = TOSSUG Baby Fish
12
13 diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c
14 index e2b5da031f96..8d4f5dc56910 100644
15 --- a/arch/arm/mach-dove/common.c
16 +++ b/arch/arm/mach-dove/common.c
17 @@ -226,7 +226,7 @@ void __init dove_init_early(void)
18 orion_time_set_base(TIMER_VIRT_BASE);
19 mvebu_mbus_init("marvell,dove-mbus",
20 BRIDGE_WINS_BASE, BRIDGE_WINS_SZ,
21 - DOVE_MC_WINS_BASE, DOVE_MC_WINS_SZ);
22 + DOVE_MC_WINS_BASE, DOVE_MC_WINS_SZ, 0);
23 }
24
25 static int __init dove_find_tclk(void)
26 diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
27 index 2acaded8025d..ed00c9e3bfc6 100644
28 --- a/arch/arm/mach-imx/clk-imx6q.c
29 +++ b/arch/arm/mach-imx/clk-imx6q.c
30 @@ -515,7 +515,7 @@ int __init mx6q_clocks_init(void)
31 clk[gpmi_io] = imx_clk_gate2("gpmi_io", "enfc", base + 0x78, 28);
32 clk[gpmi_apb] = imx_clk_gate2("gpmi_apb", "usdhc3", base + 0x78, 30);
33 clk[rom] = imx_clk_gate2("rom", "ahb", base + 0x7c, 0);
34 - clk[sata] = imx_clk_gate2("sata", "ipg", base + 0x7c, 4);
35 + clk[sata] = imx_clk_gate2("sata", "ahb", base + 0x7c, 4);
36 clk[sdma] = imx_clk_gate2("sdma", "ahb", base + 0x7c, 6);
37 clk[spba] = imx_clk_gate2("spba", "ipg", base + 0x7c, 12);
38 clk[ssi1_ipg] = imx_clk_gate2("ssi1_ipg", "ipg", base + 0x7c, 18);
39 diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
40 index f38922897563..4f6831ea88c5 100644
41 --- a/arch/arm/mach-kirkwood/common.c
42 +++ b/arch/arm/mach-kirkwood/common.c
43 @@ -530,7 +530,7 @@ void __init kirkwood_init_early(void)
44
45 mvebu_mbus_init("marvell,kirkwood-mbus",
46 BRIDGE_WINS_BASE, BRIDGE_WINS_SZ,
47 - DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ);
48 + DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ, 0);
49 }
50
51 int kirkwood_tclk;
52 diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c
53 index 749a7f8c4992..4722c98dc1bb 100644
54 --- a/arch/arm/mach-mv78xx0/common.c
55 +++ b/arch/arm/mach-mv78xx0/common.c
56 @@ -337,11 +337,11 @@ void __init mv78xx0_init_early(void)
57 if (mv78xx0_core_index() == 0)
58 mvebu_mbus_init("marvell,mv78xx0-mbus",
59 BRIDGE_WINS_CPU0_BASE, BRIDGE_WINS_SZ,
60 - DDR_WINDOW_CPU0_BASE, DDR_WINDOW_CPU_SZ);
61 + DDR_WINDOW_CPU0_BASE, DDR_WINDOW_CPU_SZ, 0);
62 else
63 mvebu_mbus_init("marvell,mv78xx0-mbus",
64 BRIDGE_WINS_CPU1_BASE, BRIDGE_WINS_SZ,
65 - DDR_WINDOW_CPU1_BASE, DDR_WINDOW_CPU_SZ);
66 + DDR_WINDOW_CPU1_BASE, DDR_WINDOW_CPU_SZ, 0);
67 }
68
69 void __init_refok mv78xx0_timer_init(void)
70 diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
71 index 1c48890bb72b..4377c3484a62 100644
72 --- a/arch/arm/mach-mvebu/armada-370-xp.c
73 +++ b/arch/arm/mach-mvebu/armada-370-xp.c
74 @@ -66,7 +66,8 @@ void __init armada_370_xp_init_early(void)
75 ARMADA_370_XP_MBUS_WINS_BASE,
76 ARMADA_370_XP_MBUS_WINS_SIZE,
77 ARMADA_370_XP_SDRAM_WINS_BASE,
78 - ARMADA_370_XP_SDRAM_WINS_SIZE);
79 + ARMADA_370_XP_SDRAM_WINS_SIZE,
80 + coherency_available());
81
82 #ifdef CONFIG_CACHE_L2X0
83 l2x0_of_init(0, ~0UL);
84 diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
85 index 3ee701f1d38e..ea26ebb5bb5a 100644
86 --- a/arch/arm/mach-mvebu/coherency.c
87 +++ b/arch/arm/mach-mvebu/coherency.c
88 @@ -137,6 +137,20 @@ static struct notifier_block mvebu_hwcc_platform_nb = {
89 .notifier_call = mvebu_hwcc_platform_notifier,
90 };
91
92 +/*
93 + * Keep track of whether we have IO hardware coherency enabled or not.
94 + * On Armada 370's we will not be using it for example. We need to make
95 + * that available [through coherency_available()] so the mbus controller
96 + * doesn't enable the IO coherency bit in the attribute bits of the
97 + * chip selects.
98 + */
99 +static int coherency_enabled;
100 +
101 +int coherency_available(void)
102 +{
103 + return coherency_enabled;
104 +}
105 +
106 int __init coherency_init(void)
107 {
108 struct device_node *np;
109 @@ -170,6 +184,7 @@ int __init coherency_init(void)
110 coherency_base = of_iomap(np, 0);
111 coherency_cpu_base = of_iomap(np, 1);
112 set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
113 + coherency_enabled = 1;
114 bus_register_notifier(&platform_bus_type,
115 &mvebu_hwcc_platform_nb);
116 }
117 diff --git a/arch/arm/mach-mvebu/coherency.h b/arch/arm/mach-mvebu/coherency.h
118 index 2f428137f6fe..1501a4e5eea0 100644
119 --- a/arch/arm/mach-mvebu/coherency.h
120 +++ b/arch/arm/mach-mvebu/coherency.h
121 @@ -19,6 +19,7 @@ int coherency_get_cpu_count(void);
122 #endif
123
124 int set_cpu_coherent(int cpu_id, int smp_group_id);
125 +int coherency_available(void);
126 int coherency_init(void);
127
128 #endif /* __MACH_370_XP_COHERENCY_H */
129 diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c
130 index f8a6db9239bf..048773926ad4 100644
131 --- a/arch/arm/mach-orion5x/common.c
132 +++ b/arch/arm/mach-orion5x/common.c
133 @@ -213,7 +213,7 @@ void __init orion5x_init_early(void)
134 mbus_soc_name = NULL;
135 mvebu_mbus_init(mbus_soc_name, ORION5X_BRIDGE_WINS_BASE,
136 ORION5X_BRIDGE_WINS_SZ,
137 - ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ);
138 + ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ, 0);
139 }
140
141 void orion5x_setup_wins(void)
142 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
143 index 4e5b80d883c8..105ae30a176b 100644
144 --- a/arch/x86/Kconfig
145 +++ b/arch/x86/Kconfig
146 @@ -154,7 +154,7 @@ config SBUS
147
148 config NEED_DMA_MAP_STATE
149 def_bool y
150 - depends on X86_64 || INTEL_IOMMU || DMA_API_DEBUG
151 + depends on X86_64 || INTEL_IOMMU || DMA_API_DEBUG || SWIOTLB
152
153 config NEED_SG_DMA_LENGTH
154 def_bool y
155 diff --git a/arch/x86/kernel/microcode_intel_early.c b/arch/x86/kernel/microcode_intel_early.c
156 index 2e9e12871c2b..a883942aee44 100644
157 --- a/arch/x86/kernel/microcode_intel_early.c
158 +++ b/arch/x86/kernel/microcode_intel_early.c
159 @@ -321,7 +321,7 @@ get_matching_model_microcode(int cpu, unsigned long start,
160 unsigned int mc_saved_count = mc_saved_data->mc_saved_count;
161 int i;
162
163 - while (leftover) {
164 + while (leftover && mc_saved_count < ARRAY_SIZE(mc_saved_tmp)) {
165 mc_header = (struct microcode_header_intel *)ucode_ptr;
166
167 mc_size = get_totalsize(mc_header);
168 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
169 index 8bf40a243d75..224d2ef754cc 100644
170 --- a/arch/x86/kvm/svm.c
171 +++ b/arch/x86/kvm/svm.c
172 @@ -495,8 +495,10 @@ static void skip_emulated_instruction(struct kvm_vcpu *vcpu)
173 {
174 struct vcpu_svm *svm = to_svm(vcpu);
175
176 - if (svm->vmcb->control.next_rip != 0)
177 + if (svm->vmcb->control.next_rip != 0) {
178 + WARN_ON(!static_cpu_has(X86_FEATURE_NRIPS));
179 svm->next_rip = svm->vmcb->control.next_rip;
180 + }
181
182 if (!svm->next_rip) {
183 if (emulate_instruction(vcpu, EMULTYPE_SKIP) !=
184 @@ -4229,7 +4231,9 @@ static int svm_check_intercept(struct kvm_vcpu *vcpu,
185 break;
186 }
187
188 - vmcb->control.next_rip = info->next_rip;
189 + /* TODO: Advertise NRIPS to guest hypervisor unconditionally */
190 + if (static_cpu_has(X86_FEATURE_NRIPS))
191 + vmcb->control.next_rip = info->next_rip;
192 vmcb->control.exit_code = icpt_info.exit_code;
193 vmexit = nested_svm_exit_handled(svm);
194
195 diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h
196 index 53666bd9193d..32b0bf32364a 100644
197 --- a/drivers/acpi/acpica/acmacros.h
198 +++ b/drivers/acpi/acpica/acmacros.h
199 @@ -63,19 +63,15 @@
200 #define ACPI_SET64(ptr, val) (*ACPI_CAST64 (ptr) = (u64) (val))
201
202 /*
203 - * printf() format helpers
204 + * printf() format helper. This macros is a workaround for the difficulties
205 + * with emitting 64-bit integers and 64-bit pointers with the same code
206 + * for both 32-bit and 64-bit hosts.
207 */
208
209 /* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */
210
211 #define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i)
212
213 -#if ACPI_MACHINE_WIDTH == 64
214 -#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i)
215 -#else
216 -#define ACPI_FORMAT_NATIVE_UINT(i) 0, (i)
217 -#endif
218 -
219 /*
220 * Macros for moving data around to/from buffers that are possibly unaligned.
221 * If the hardware supports the transfer of unaligned data, just do the store.
222 diff --git a/drivers/acpi/acpica/dsopcode.c b/drivers/acpi/acpica/dsopcode.c
223 index e9b13b92ba1e..46a37aeaedae 100644
224 --- a/drivers/acpi/acpica/dsopcode.c
225 +++ b/drivers/acpi/acpica/dsopcode.c
226 @@ -446,7 +446,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
227
228 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
229 obj_desc,
230 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
231 + ACPI_FORMAT_UINT64(obj_desc->region.address),
232 obj_desc->region.length));
233
234 /* Now the address and length are valid for this opregion */
235 @@ -544,7 +544,7 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
236
237 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
238 obj_desc,
239 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.address),
240 + ACPI_FORMAT_UINT64(obj_desc->region.address),
241 obj_desc->region.length));
242
243 /* Now the address and length are valid for this opregion */
244 diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c
245 index 8fab9262d98a..ad698893e829 100644
246 --- a/drivers/acpi/acpica/evregion.c
247 +++ b/drivers/acpi/acpica/evregion.c
248 @@ -276,7 +276,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
249 ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
250 "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
251 &region_obj->region.handler->address_space, handler,
252 - ACPI_FORMAT_NATIVE_UINT(address),
253 + ACPI_FORMAT_UINT64(address),
254 acpi_ut_get_region_name(region_obj->region.
255 space_id)));
256
257 diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c
258 index e5a3c249f7fa..7e6a56fe1d6e 100644
259 --- a/drivers/acpi/acpica/exdump.c
260 +++ b/drivers/acpi/acpica/exdump.c
261 @@ -621,8 +621,8 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
262 acpi_os_printf("\n");
263 } else {
264 acpi_os_printf(" base %8.8X%8.8X Length %X\n",
265 - ACPI_FORMAT_NATIVE_UINT(obj_desc->region.
266 - address),
267 + ACPI_FORMAT_UINT64(obj_desc->region.
268 + address),
269 obj_desc->region.length);
270 }
271 break;
272 diff --git a/drivers/acpi/acpica/exfldio.c b/drivers/acpi/acpica/exfldio.c
273 index c84ee956fa4c..dc210c379277 100644
274 --- a/drivers/acpi/acpica/exfldio.c
275 +++ b/drivers/acpi/acpica/exfldio.c
276 @@ -269,17 +269,15 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
277 }
278
279 ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD,
280 - " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n",
281 + " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n",
282 acpi_ut_get_region_name(rgn_desc->region.
283 space_id),
284 rgn_desc->region.space_id,
285 obj_desc->common_field.access_byte_width,
286 obj_desc->common_field.base_byte_offset,
287 - field_datum_byte_offset, ACPI_CAST_PTR(void,
288 - (rgn_desc->
289 - region.
290 - address +
291 - region_offset))));
292 + field_datum_byte_offset,
293 + ACPI_FORMAT_UINT64(rgn_desc->region.address +
294 + region_offset)));
295
296 /* Invoke the appropriate address_space/op_region handler */
297
298 diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c
299 index 182abaf045e1..e90c59d35a16 100644
300 --- a/drivers/acpi/acpica/exregion.c
301 +++ b/drivers/acpi/acpica/exregion.c
302 @@ -176,7 +176,7 @@ acpi_ex_system_memory_space_handler(u32 function,
303 if (!mem_info->mapped_logical_address) {
304 ACPI_ERROR((AE_INFO,
305 "Could not map memory at 0x%8.8X%8.8X, size %u",
306 - ACPI_FORMAT_NATIVE_UINT(address),
307 + ACPI_FORMAT_UINT64(address),
308 (u32) map_length));
309 mem_info->mapped_length = 0;
310 return_ACPI_STATUS(AE_NO_MEMORY);
311 @@ -197,8 +197,7 @@ acpi_ex_system_memory_space_handler(u32 function,
312
313 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
314 "System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n",
315 - bit_width, function,
316 - ACPI_FORMAT_NATIVE_UINT(address)));
317 + bit_width, function, ACPI_FORMAT_UINT64(address)));
318
319 /*
320 * Perform the memory read or write
321 @@ -300,8 +299,7 @@ acpi_ex_system_io_space_handler(u32 function,
322
323 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
324 "System-IO (width %u) R/W %u Address=%8.8X%8.8X\n",
325 - bit_width, function,
326 - ACPI_FORMAT_NATIVE_UINT(address)));
327 + bit_width, function, ACPI_FORMAT_UINT64(address)));
328
329 /* Decode the function parameter */
330
331 diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
332 index eab70d58852a..fae57584a182 100644
333 --- a/drivers/acpi/acpica/hwvalid.c
334 +++ b/drivers/acpi/acpica/hwvalid.c
335 @@ -142,17 +142,17 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
336 byte_width = ACPI_DIV_8(bit_width);
337 last_address = address + byte_width - 1;
338
339 - ACPI_DEBUG_PRINT((ACPI_DB_IO, "Address %p LastAddress %p Length %X",
340 - ACPI_CAST_PTR(void, address), ACPI_CAST_PTR(void,
341 - last_address),
342 - byte_width));
343 + ACPI_DEBUG_PRINT((ACPI_DB_IO,
344 + "Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X",
345 + ACPI_FORMAT_UINT64(address),
346 + ACPI_FORMAT_UINT64(last_address), byte_width));
347
348 /* Maximum 16-bit address in I/O space */
349
350 if (last_address > ACPI_UINT16_MAX) {
351 ACPI_ERROR((AE_INFO,
352 - "Illegal I/O port address/length above 64K: %p/0x%X",
353 - ACPI_CAST_PTR(void, address), byte_width));
354 + "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
355 + ACPI_FORMAT_UINT64(address), byte_width));
356 return_ACPI_STATUS(AE_LIMIT);
357 }
358
359 @@ -181,8 +181,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
360
361 if (acpi_gbl_osi_data >= port_info->osi_dependency) {
362 ACPI_DEBUG_PRINT((ACPI_DB_IO,
363 - "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)",
364 - ACPI_CAST_PTR(void, address),
365 + "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)",
366 + ACPI_FORMAT_UINT64(address),
367 byte_width, port_info->name,
368 port_info->start,
369 port_info->end));
370 diff --git a/drivers/acpi/acpica/nsdump.c b/drivers/acpi/acpica/nsdump.c
371 index ce6e97326205..20ae5b9bb9f2 100644
372 --- a/drivers/acpi/acpica/nsdump.c
373 +++ b/drivers/acpi/acpica/nsdump.c
374 @@ -258,12 +258,11 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
375 switch (type) {
376 case ACPI_TYPE_PROCESSOR:
377
378 - acpi_os_printf("ID %02X Len %02X Addr %p\n",
379 + acpi_os_printf("ID %02X Len %02X Addr %8.8X%8.8X\n",
380 obj_desc->processor.proc_id,
381 obj_desc->processor.length,
382 - ACPI_CAST_PTR(void,
383 - obj_desc->processor.
384 - address));
385 + ACPI_FORMAT_UINT64(obj_desc->processor.
386 + address));
387 break;
388
389 case ACPI_TYPE_DEVICE:
390 @@ -334,8 +333,9 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
391 space_id));
392 if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
393 acpi_os_printf(" Addr %8.8X%8.8X Len %.4X\n",
394 - ACPI_FORMAT_NATIVE_UINT
395 - (obj_desc->region.address),
396 + ACPI_FORMAT_UINT64(obj_desc->
397 + region.
398 + address),
399 obj_desc->region.length);
400 } else {
401 acpi_os_printf
402 diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c
403 index ce3d5db39a9c..5c67b2840c58 100644
404 --- a/drivers/acpi/acpica/tbutils.c
405 +++ b/drivers/acpi/acpica/tbutils.c
406 @@ -246,16 +246,12 @@ acpi_tb_print_table_header(acpi_physical_address address,
407 {
408 struct acpi_table_header local_header;
409
410 - /*
411 - * The reason that the Address is cast to a void pointer is so that we
412 - * can use %p which will work properly on both 32-bit and 64-bit hosts.
413 - */
414 if (ACPI_COMPARE_NAME(header->signature, ACPI_SIG_FACS)) {
415
416 /* FACS only has signature and length fields */
417
418 - ACPI_INFO((AE_INFO, "%4.4s %p %05X",
419 - header->signature, ACPI_CAST_PTR(void, address),
420 + ACPI_INFO((AE_INFO, "%4.4s 0x%8.8X%8.8X %05X",
421 + header->signature, ACPI_FORMAT_UINT64(address),
422 header->length));
423 } else if (ACPI_COMPARE_NAME(header->signature, ACPI_SIG_RSDP)) {
424
425 @@ -266,8 +262,8 @@ acpi_tb_print_table_header(acpi_physical_address address,
426 header)->oem_id, ACPI_OEM_ID_SIZE);
427 acpi_tb_fix_string(local_header.oem_id, ACPI_OEM_ID_SIZE);
428
429 - ACPI_INFO((AE_INFO, "RSDP %p %05X (v%.2d %6.6s)",
430 - ACPI_CAST_PTR (void, address),
431 + ACPI_INFO((AE_INFO, "RSDP 0x%8.8X%8.8X %05X (v%.2d %6.6s)",
432 + ACPI_FORMAT_UINT64(address),
433 (ACPI_CAST_PTR(struct acpi_table_rsdp, header)->
434 revision >
435 0) ? ACPI_CAST_PTR(struct acpi_table_rsdp,
436 @@ -281,8 +277,8 @@ acpi_tb_print_table_header(acpi_physical_address address,
437 acpi_tb_cleanup_table_header(&local_header, header);
438
439 ACPI_INFO((AE_INFO,
440 - "%4.4s %p %05X (v%.2d %6.6s %8.8s %08X %4.4s %08X)",
441 - local_header.signature, ACPI_CAST_PTR(void, address),
442 + "%-4.4s 0x%8.8X%8.8X %05X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
443 + local_header.signature, ACPI_FORMAT_UINT64(address),
444 local_header.length, local_header.revision,
445 local_header.oem_id, local_header.oem_table_id,
446 local_header.oem_revision,
447 @@ -474,8 +470,8 @@ acpi_tb_install_table(acpi_physical_address address,
448 table = acpi_os_map_memory(address, sizeof(struct acpi_table_header));
449 if (!table) {
450 ACPI_ERROR((AE_INFO,
451 - "Could not map memory for table [%s] at %p",
452 - signature, ACPI_CAST_PTR(void, address)));
453 + "Could not map memory for table [%s] at %8.8X%8.8X",
454 + signature, ACPI_FORMAT_UINT64(address)));
455 return;
456 }
457
458 diff --git a/drivers/acpi/acpica/utaddress.c b/drivers/acpi/acpica/utaddress.c
459 index e0a2e2779c2e..3c7770d75773 100644
460 --- a/drivers/acpi/acpica/utaddress.c
461 +++ b/drivers/acpi/acpica/utaddress.c
462 @@ -107,10 +107,10 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
463 acpi_gbl_address_range_list[space_id] = range_info;
464
465 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
466 - "\nAdded [%4.4s] address range: 0x%p-0x%p\n",
467 + "\nAdded [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
468 acpi_ut_get_node_name(range_info->region_node),
469 - ACPI_CAST_PTR(void, address),
470 - ACPI_CAST_PTR(void, range_info->end_address)));
471 + ACPI_FORMAT_UINT64(address),
472 + ACPI_FORMAT_UINT64(range_info->end_address)));
473
474 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
475 return_ACPI_STATUS(AE_OK);
476 @@ -160,15 +160,13 @@ acpi_ut_remove_address_range(acpi_adr_space_type space_id,
477 }
478
479 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
480 - "\nRemoved [%4.4s] address range: 0x%p-0x%p\n",
481 + "\nRemoved [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n",
482 acpi_ut_get_node_name(range_info->
483 region_node),
484 - ACPI_CAST_PTR(void,
485 - range_info->
486 - start_address),
487 - ACPI_CAST_PTR(void,
488 - range_info->
489 - end_address)));
490 + ACPI_FORMAT_UINT64(range_info->
491 + start_address),
492 + ACPI_FORMAT_UINT64(range_info->
493 + end_address)));
494
495 ACPI_FREE(range_info);
496 return_VOID;
497 @@ -244,9 +242,9 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id,
498 region_node);
499
500 ACPI_WARNING((AE_INFO,
501 - "0x%p-0x%p %s conflicts with Region %s %d",
502 - ACPI_CAST_PTR(void, address),
503 - ACPI_CAST_PTR(void, end_address),
504 + "0x%8.8X%8.8X-0x%8.8X%8.8X %s conflicts with Region %s %d",
505 + ACPI_FORMAT_UINT64(address),
506 + ACPI_FORMAT_UINT64(end_address),
507 acpi_ut_get_region_name(space_id),
508 pathname, overlap_count));
509 ACPI_FREE(pathname);
510 diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c
511 index 711dcf4a0313..7c437826c2f9 100644
512 --- a/drivers/bus/mvebu-mbus.c
513 +++ b/drivers/bus/mvebu-mbus.c
514 @@ -838,7 +838,7 @@ fs_initcall(mvebu_mbus_debugfs_init);
515 int __init mvebu_mbus_init(const char *soc, phys_addr_t mbuswins_phys_base,
516 size_t mbuswins_size,
517 phys_addr_t sdramwins_phys_base,
518 - size_t sdramwins_size)
519 + size_t sdramwins_size, int is_coherent)
520 {
521 struct mvebu_mbus_state *mbus = &mbus_state;
522 const struct of_device_id *of_id;
523 @@ -865,8 +865,7 @@ int __init mvebu_mbus_init(const char *soc, phys_addr_t mbuswins_phys_base,
524 return -ENOMEM;
525 }
526
527 - if (of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric"))
528 - mbus->hw_io_coherency = 1;
529 + mbus->hw_io_coherency = is_coherent;
530
531 for (win = 0; win < mbus->soc->num_wins; win++)
532 mvebu_mbus_disable_window(mbus, win);
533 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
534 index f505e4ca6d58..3bdefbfb4377 100644
535 --- a/drivers/edac/sb_edac.c
536 +++ b/drivers/edac/sb_edac.c
537 @@ -623,7 +623,7 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
538 u32 reg;
539 u64 limit, prv = 0;
540 u64 tmp_mb;
541 - u32 mb, kb;
542 + u32 gb, mb;
543 u32 rir_way;
544
545 /*
546 @@ -636,8 +636,9 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
547 pvt->tolm = GET_TOLM(reg);
548 tmp_mb = (1 + pvt->tolm) >> 20;
549
550 - mb = div_u64_rem(tmp_mb, 1000, &kb);
551 - edac_dbg(0, "TOLM: %u.%03u GB (0x%016Lx)\n", mb, kb, (u64)pvt->tolm);
552 + gb = div_u64_rem(tmp_mb, 1024, &mb);
553 + edac_dbg(0, "TOLM: %u.%03u GB (0x%016Lx)\n",
554 + gb, (mb*1000)/1024, (u64)pvt->tolm);
555
556 /* Address range is already 45:25 */
557 pci_read_config_dword(pvt->pci_sad1, TOHM,
558 @@ -645,8 +646,9 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
559 pvt->tohm = GET_TOHM(reg);
560 tmp_mb = (1 + pvt->tohm) >> 20;
561
562 - mb = div_u64_rem(tmp_mb, 1000, &kb);
563 - edac_dbg(0, "TOHM: %u.%03u GB (0x%016Lx)\n", mb, kb, (u64)pvt->tohm);
564 + gb = div_u64_rem(tmp_mb, 1024, &mb);
565 + edac_dbg(0, "TOHM: %u.%03u GB (0x%016Lx)\n",
566 + gb, (mb*1000)/1024, (u64)pvt->tohm);
567
568 /*
569 * Step 2) Get SAD range and SAD Interleave list
570 @@ -668,11 +670,11 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
571 break;
572
573 tmp_mb = (limit + 1) >> 20;
574 - mb = div_u64_rem(tmp_mb, 1000, &kb);
575 + gb = div_u64_rem(tmp_mb, 1024, &mb);
576 edac_dbg(0, "SAD#%d %s up to %u.%03u GB (0x%016Lx) Interleave: %s reg=0x%08x\n",
577 n_sads,
578 get_dram_attr(reg),
579 - mb, kb,
580 + gb, (mb*1000)/1024,
581 ((u64)tmp_mb) << 20L,
582 INTERLEAVE_MODE(reg) ? "8:6" : "[8:6]XOR[18:16]",
583 reg);
584 @@ -702,9 +704,9 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
585 break;
586 tmp_mb = (limit + 1) >> 20;
587
588 - mb = div_u64_rem(tmp_mb, 1000, &kb);
589 + gb = div_u64_rem(tmp_mb, 1024, &mb);
590 edac_dbg(0, "TAD#%d: up to %u.%03u GB (0x%016Lx), socket interleave %d, memory interleave %d, TGT: %d, %d, %d, %d, reg=0x%08x\n",
591 - n_tads, mb, kb,
592 + n_tads, gb, (mb*1000)/1024,
593 ((u64)tmp_mb) << 20L,
594 (u32)TAD_SOCK(reg),
595 (u32)TAD_CH(reg),
596 @@ -727,10 +729,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
597 tad_ch_nilv_offset[j],
598 &reg);
599 tmp_mb = TAD_OFFSET(reg) >> 20;
600 - mb = div_u64_rem(tmp_mb, 1000, &kb);
601 + gb = div_u64_rem(tmp_mb, 1024, &mb);
602 edac_dbg(0, "TAD CH#%d, offset #%d: %u.%03u GB (0x%016Lx), reg=0x%08x\n",
603 i, j,
604 - mb, kb,
605 + gb, (mb*1000)/1024,
606 ((u64)tmp_mb) << 20L,
607 reg);
608 }
609 @@ -752,10 +754,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
610
611 tmp_mb = RIR_LIMIT(reg) >> 20;
612 rir_way = 1 << RIR_WAY(reg);
613 - mb = div_u64_rem(tmp_mb, 1000, &kb);
614 + gb = div_u64_rem(tmp_mb, 1024, &mb);
615 edac_dbg(0, "CH#%d RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d, reg=0x%08x\n",
616 i, j,
617 - mb, kb,
618 + gb, (mb*1000)/1024,
619 ((u64)tmp_mb) << 20L,
620 rir_way,
621 reg);
622 @@ -766,10 +768,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
623 &reg);
624 tmp_mb = RIR_OFFSET(reg) << 6;
625
626 - mb = div_u64_rem(tmp_mb, 1000, &kb);
627 + gb = div_u64_rem(tmp_mb, 1024, &mb);
628 edac_dbg(0, "CH#%d RIR#%d INTL#%d, offset %u.%03u GB (0x%016Lx), tgt: %d, reg=0x%08x\n",
629 i, j, k,
630 - mb, kb,
631 + gb, (mb*1000)/1024,
632 ((u64)tmp_mb) << 20L,
633 (u32)RIR_RNK_TGT(reg),
634 reg);
635 @@ -806,7 +808,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
636 u8 ch_way,sck_way;
637 u32 tad_offset;
638 u32 rir_way;
639 - u32 mb, kb;
640 + u32 mb, gb;
641 u64 ch_addr, offset, limit, prv = 0;
642
643
644 @@ -1022,10 +1024,10 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
645 continue;
646
647 limit = RIR_LIMIT(reg);
648 - mb = div_u64_rem(limit >> 20, 1000, &kb);
649 + gb = div_u64_rem(limit >> 20, 1024, &mb);
650 edac_dbg(0, "RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d\n",
651 n_rir,
652 - mb, kb,
653 + gb, (mb*1000)/1024,
654 limit,
655 1 << RIR_WAY(reg));
656 if (ch_addr <= limit)
657 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
658 index 62ed744bbe06..a6cdf17e27dc 100644
659 --- a/drivers/scsi/hpsa.c
660 +++ b/drivers/scsi/hpsa.c
661 @@ -3898,10 +3898,6 @@ static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev)
662
663 /* Save the PCI command register */
664 pci_read_config_word(pdev, 4, &command_register);
665 - /* Turn the board off. This is so that later pci_restore_state()
666 - * won't turn the board on before the rest of config space is ready.
667 - */
668 - pci_disable_device(pdev);
669 pci_save_state(pdev);
670
671 /* find the first memory BAR, so we can find the cfg table */
672 @@ -3949,11 +3945,6 @@ static int hpsa_kdump_hard_reset_controller(struct pci_dev *pdev)
673 goto unmap_cfgtable;
674
675 pci_restore_state(pdev);
676 - rc = pci_enable_device(pdev);
677 - if (rc) {
678 - dev_warn(&pdev->dev, "failed to enable device.\n");
679 - goto unmap_cfgtable;
680 - }
681 pci_write_config_word(pdev, 4, command_register);
682
683 /* Some devices (notably the HP Smart Array 5i Controller)
684 @@ -4448,6 +4439,23 @@ static int hpsa_init_reset_devices(struct pci_dev *pdev)
685 if (!reset_devices)
686 return 0;
687
688 + /* kdump kernel is loading, we don't know in which state is
689 + * the pci interface. The dev->enable_cnt is equal zero
690 + * so we call enable+disable, wait a while and switch it on.
691 + */
692 + rc = pci_enable_device(pdev);
693 + if (rc) {
694 + dev_warn(&pdev->dev, "Failed to enable PCI device\n");
695 + return -ENODEV;
696 + }
697 + pci_disable_device(pdev);
698 + msleep(260); /* a randomly chosen number */
699 + rc = pci_enable_device(pdev);
700 + if (rc) {
701 + dev_warn(&pdev->dev, "failed to enable device.\n");
702 + return -ENODEV;
703 + }
704 + pci_set_master(pdev);
705 /* Reset the controller with a PCI power-cycle or via doorbell */
706 rc = hpsa_kdump_hard_reset_controller(pdev);
707
708 @@ -4456,10 +4464,11 @@ static int hpsa_init_reset_devices(struct pci_dev *pdev)
709 * "performant mode". Or, it might be 640x, which can't reset
710 * due to concerns about shared bbwc between 6402/6404 pair.
711 */
712 - if (rc == -ENOTSUPP)
713 - return rc; /* just try to do the kdump anyhow. */
714 - if (rc)
715 - return -ENODEV;
716 + if (rc) {
717 + if (rc != -ENOTSUPP) /* just try to do the kdump anyhow. */
718 + rc = -ENODEV;
719 + goto out_disable;
720 + }
721
722 /* Now try to get the controller to respond to a no-op */
723 dev_warn(&pdev->dev, "Waiting for controller to respond to no-op\n");
724 @@ -4470,7 +4479,11 @@ static int hpsa_init_reset_devices(struct pci_dev *pdev)
725 dev_warn(&pdev->dev, "no-op failed%s\n",
726 (i < 11 ? "; re-trying" : ""));
727 }
728 - return 0;
729 +
730 +out_disable:
731 +
732 + pci_disable_device(pdev);
733 + return rc;
734 }
735
736 static int hpsa_allocate_cmd_pool(struct ctlr_info *h)
737 @@ -4613,6 +4626,7 @@ static void hpsa_undo_allocations_after_kdump_soft_reset(struct ctlr_info *h)
738 iounmap(h->transtable);
739 if (h->cfgtable)
740 iounmap(h->cfgtable);
741 + pci_disable_device(h->pdev);
742 pci_release_regions(h->pdev);
743 kfree(h);
744 }
745 diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
746 index 7fb054ba1b60..82f14a1da542 100644
747 --- a/fs/btrfs/ctree.c
748 +++ b/fs/btrfs/ctree.c
749 @@ -2769,7 +2769,7 @@ done:
750 */
751 if (!p->leave_spinning)
752 btrfs_set_path_blocking(p);
753 - if (ret < 0)
754 + if (ret < 0 && !p->skip_release_on_error)
755 btrfs_release_path(p);
756 return ret;
757 }
758 diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
759 index d6dd49b51ba8..c19444e412be 100644
760 --- a/fs/btrfs/ctree.h
761 +++ b/fs/btrfs/ctree.h
762 @@ -586,6 +586,7 @@ struct btrfs_path {
763 unsigned int skip_locking:1;
764 unsigned int leave_spinning:1;
765 unsigned int search_commit_root:1;
766 + unsigned int skip_release_on_error:1;
767 };
768
769 /*
770 @@ -3406,6 +3407,10 @@ struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans,
771 int verify_dir_item(struct btrfs_root *root,
772 struct extent_buffer *leaf,
773 struct btrfs_dir_item *dir_item);
774 +struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
775 + struct btrfs_path *path,
776 + const char *name,
777 + int name_len);
778
779 /* orphan.c */
780 int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
781 diff --git a/fs/btrfs/dir-item.c b/fs/btrfs/dir-item.c
782 index 79e594e341c7..6f61b9b1526f 100644
783 --- a/fs/btrfs/dir-item.c
784 +++ b/fs/btrfs/dir-item.c
785 @@ -21,10 +21,6 @@
786 #include "hash.h"
787 #include "transaction.h"
788
789 -static struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
790 - struct btrfs_path *path,
791 - const char *name, int name_len);
792 -
793 /*
794 * insert a name into a directory, doing overflow properly if there is a hash
795 * collision. data_size indicates how big the item inserted should be. On
796 @@ -383,9 +379,9 @@ struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans,
797 * this walks through all the entries in a dir item and finds one
798 * for a specific name.
799 */
800 -static struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
801 - struct btrfs_path *path,
802 - const char *name, int name_len)
803 +struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_root *root,
804 + struct btrfs_path *path,
805 + const char *name, int name_len)
806 {
807 struct btrfs_dir_item *dir_item;
808 unsigned long name_ptr;
809 diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
810 index 05740b9789e4..9cf20d63cc99 100644
811 --- a/fs/btrfs/xattr.c
812 +++ b/fs/btrfs/xattr.c
813 @@ -27,6 +27,7 @@
814 #include "transaction.h"
815 #include "xattr.h"
816 #include "disk-io.h"
817 +#include "locking.h"
818
819
820 ssize_t __btrfs_getxattr(struct inode *inode, const char *name,
821 @@ -89,7 +90,7 @@ static int do_setxattr(struct btrfs_trans_handle *trans,
822 struct inode *inode, const char *name,
823 const void *value, size_t size, int flags)
824 {
825 - struct btrfs_dir_item *di;
826 + struct btrfs_dir_item *di = NULL;
827 struct btrfs_root *root = BTRFS_I(inode)->root;
828 struct btrfs_path *path;
829 size_t name_len = strlen(name);
830 @@ -101,84 +102,128 @@ static int do_setxattr(struct btrfs_trans_handle *trans,
831 path = btrfs_alloc_path();
832 if (!path)
833 return -ENOMEM;
834 + path->skip_release_on_error = 1;
835 +
836 + if (!value) {
837 + di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(inode),
838 + name, name_len, -1);
839 + if (!di && (flags & XATTR_REPLACE))
840 + ret = -ENODATA;
841 + else if (di)
842 + ret = btrfs_delete_one_dir_name(trans, root, path, di);
843 + goto out;
844 + }
845
846 + /*
847 + * For a replace we can't just do the insert blindly.
848 + * Do a lookup first (read-only btrfs_search_slot), and return if xattr
849 + * doesn't exist. If it exists, fall down below to the insert/replace
850 + * path - we can't race with a concurrent xattr delete, because the VFS
851 + * locks the inode's i_mutex before calling setxattr or removexattr.
852 + */
853 if (flags & XATTR_REPLACE) {
854 - di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(inode), name,
855 - name_len, -1);
856 - if (IS_ERR(di)) {
857 - ret = PTR_ERR(di);
858 - goto out;
859 - } else if (!di) {
860 + if(!mutex_is_locked(&inode->i_mutex)) {
861 + pr_err("BTRFS: assertion failed: %s, file: %s, line: %d",
862 + "mutex_is_locked(&inode->i_mutex)", __FILE__,
863 + __LINE__);
864 + BUG();
865 + }
866 + di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode),
867 + name, name_len, 0);
868 + if (!di) {
869 ret = -ENODATA;
870 goto out;
871 }
872 - ret = btrfs_delete_one_dir_name(trans, root, path, di);
873 - if (ret)
874 - goto out;
875 btrfs_release_path(path);
876 + di = NULL;
877 + }
878
879 + ret = btrfs_insert_xattr_item(trans, root, path, btrfs_ino(inode),
880 + name, name_len, value, size);
881 + if (ret == -EOVERFLOW) {
882 /*
883 - * remove the attribute
884 + * We have an existing item in a leaf, split_leaf couldn't
885 + * expand it. That item might have or not a dir_item that
886 + * matches our target xattr, so lets check.
887 */
888 - if (!value)
889 - goto out;
890 - } else {
891 - di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode),
892 - name, name_len, 0);
893 - if (IS_ERR(di)) {
894 - ret = PTR_ERR(di);
895 + ret = 0;
896 + btrfs_assert_tree_locked(path->nodes[0]);
897 + di = btrfs_match_dir_item_name(root, path, name, name_len);
898 + if (!di && !(flags & XATTR_REPLACE)) {
899 + ret = -ENOSPC;
900 goto out;
901 }
902 - if (!di && !value)
903 - goto out;
904 - btrfs_release_path(path);
905 + } else if (ret == -EEXIST) {
906 + ret = 0;
907 + di = btrfs_match_dir_item_name(root, path, name, name_len);
908 + if(!di) { /* logic error */
909 + pr_err("BTRFS: assertion failed: %s, file: %s, line: %d",
910 + "di", __FILE__, __LINE__);
911 + BUG();
912 + }
913 + } else if (ret) {
914 + goto out;
915 }
916
917 -again:
918 - ret = btrfs_insert_xattr_item(trans, root, path, btrfs_ino(inode),
919 - name, name_len, value, size);
920 - /*
921 - * If we're setting an xattr to a new value but the new value is say
922 - * exactly BTRFS_MAX_XATTR_SIZE, we could end up with EOVERFLOW getting
923 - * back from split_leaf. This is because it thinks we'll be extending
924 - * the existing item size, but we're asking for enough space to add the
925 - * item itself. So if we get EOVERFLOW just set ret to EEXIST and let
926 - * the rest of the function figure it out.
927 - */
928 - if (ret == -EOVERFLOW)
929 + if (di && (flags & XATTR_CREATE)) {
930 ret = -EEXIST;
931 + goto out;
932 + }
933
934 - if (ret == -EEXIST) {
935 - if (flags & XATTR_CREATE)
936 - goto out;
937 + if (di) {
938 /*
939 - * We can't use the path we already have since we won't have the
940 - * proper locking for a delete, so release the path and
941 - * re-lookup to delete the thing.
942 + * We're doing a replace, and it must be atomic, that is, at
943 + * any point in time we have either the old or the new xattr
944 + * value in the tree. We don't want readers (getxattr and
945 + * listxattrs) to miss a value, this is specially important
946 + * for ACLs.
947 */
948 - btrfs_release_path(path);
949 - di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(inode),
950 - name, name_len, -1);
951 - if (IS_ERR(di)) {
952 - ret = PTR_ERR(di);
953 - goto out;
954 - } else if (!di) {
955 - /* Shouldn't happen but just in case... */
956 - btrfs_release_path(path);
957 - goto again;
958 + const int slot = path->slots[0];
959 + struct extent_buffer *leaf = path->nodes[0];
960 + const u16 old_data_len = btrfs_dir_data_len(leaf, di);
961 + const u32 item_size = btrfs_item_size_nr(leaf, slot);
962 + const u32 data_size = sizeof(*di) + name_len + size;
963 + struct btrfs_item *item;
964 + unsigned long data_ptr;
965 + char *ptr;
966 +
967 + if (size > old_data_len) {
968 + if (btrfs_leaf_free_space(root, leaf) <
969 + (size - old_data_len)) {
970 + ret = -ENOSPC;
971 + goto out;
972 + }
973 }
974
975 - ret = btrfs_delete_one_dir_name(trans, root, path, di);
976 - if (ret)
977 - goto out;
978 + if (old_data_len + name_len + sizeof(*di) == item_size) {
979 + /* No other xattrs packed in the same leaf item. */
980 + if (size > old_data_len)
981 + btrfs_extend_item(root, path,
982 + size - old_data_len);
983 + else if (size < old_data_len)
984 + btrfs_truncate_item(root, path, data_size, 1);
985 + } else {
986 + /* There are other xattrs packed in the same item. */
987 + ret = btrfs_delete_one_dir_name(trans, root, path, di);
988 + if (ret)
989 + goto out;
990 + btrfs_extend_item(root, path, data_size);
991 + }
992
993 + item = btrfs_item_nr(NULL, slot);
994 + ptr = btrfs_item_ptr(leaf, slot, char);
995 + ptr += btrfs_item_size(leaf, item) - data_size;
996 + di = (struct btrfs_dir_item *)ptr;
997 + btrfs_set_dir_data_len(leaf, di, size);
998 + data_ptr = ((unsigned long)(di + 1)) + name_len;
999 + write_extent_buffer(leaf, value, data_ptr, size);
1000 + btrfs_mark_buffer_dirty(leaf);
1001 + } else {
1002 /*
1003 - * We have a value to set, so go back and try to insert it now.
1004 + * Insert, and we had space for the xattr, so path->slots[0] is
1005 + * where our xattr dir_item is and btrfs_insert_xattr_item()
1006 + * filled it.
1007 */
1008 - if (value) {
1009 - btrfs_release_path(path);
1010 - goto again;
1011 - }
1012 }
1013 out:
1014 btrfs_free_path(path);
1015 diff --git a/fs/dcache.c b/fs/dcache.c
1016 index e2800926ae05..38c4a302fab4 100644
1017 --- a/fs/dcache.c
1018 +++ b/fs/dcache.c
1019 @@ -1053,13 +1053,13 @@ ascend:
1020 /* might go back up the wrong parent if we have had a rename. */
1021 if (!locked && read_seqretry(&rename_lock, seq))
1022 goto rename_retry;
1023 - next = child->d_child.next;
1024 - while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) {
1025 + /* go into the first sibling still alive */
1026 + do {
1027 + next = child->d_child.next;
1028 if (next == &this_parent->d_subdirs)
1029 goto ascend;
1030 child = list_entry(next, struct dentry, d_child);
1031 - next = next->next;
1032 - }
1033 + } while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED));
1034 rcu_read_unlock();
1035 goto resume;
1036 }
1037 @@ -2977,13 +2977,13 @@ ascend:
1038 /* might go back up the wrong parent if we have had a rename. */
1039 if (!locked && read_seqretry(&rename_lock, seq))
1040 goto rename_retry;
1041 - next = child->d_child.next;
1042 - while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED)) {
1043 + /* go into the first sibling still alive */
1044 + do {
1045 + next = child->d_child.next;
1046 if (next == &this_parent->d_subdirs)
1047 goto ascend;
1048 child = list_entry(next, struct dentry, d_child);
1049 - next = next->next;
1050 - }
1051 + } while (unlikely(child->d_flags & DCACHE_DENTRY_KILLED));
1052 rcu_read_unlock();
1053 goto resume;
1054 }
1055 diff --git a/fs/exec.c b/fs/exec.c
1056 index dd6aa61c8548..acbd7ac2deda 100644
1057 --- a/fs/exec.c
1058 +++ b/fs/exec.c
1059 @@ -1265,6 +1265,53 @@ static int check_unsafe_exec(struct linux_binprm *bprm)
1060 return res;
1061 }
1062
1063 +static void bprm_fill_uid(struct linux_binprm *bprm)
1064 +{
1065 + struct inode *inode;
1066 + unsigned int mode;
1067 + kuid_t uid;
1068 + kgid_t gid;
1069 +
1070 + /* clear any previous set[ug]id data from a previous binary */
1071 + bprm->cred->euid = current_euid();
1072 + bprm->cred->egid = current_egid();
1073 +
1074 + if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)
1075 + return;
1076 +
1077 + if (current->no_new_privs)
1078 + return;
1079 +
1080 + inode = file_inode(bprm->file);
1081 + mode = ACCESS_ONCE(inode->i_mode);
1082 + if (!(mode & (S_ISUID|S_ISGID)))
1083 + return;
1084 +
1085 + /* Be careful if suid/sgid is set */
1086 + mutex_lock(&inode->i_mutex);
1087 +
1088 + /* reload atomically mode/uid/gid now that lock held */
1089 + mode = inode->i_mode;
1090 + uid = inode->i_uid;
1091 + gid = inode->i_gid;
1092 + mutex_unlock(&inode->i_mutex);
1093 +
1094 + /* We ignore suid/sgid if there are no mappings for them in the ns */
1095 + if (!kuid_has_mapping(bprm->cred->user_ns, uid) ||
1096 + !kgid_has_mapping(bprm->cred->user_ns, gid))
1097 + return;
1098 +
1099 + if (mode & S_ISUID) {
1100 + bprm->per_clear |= PER_CLEAR_ON_SETID;
1101 + bprm->cred->euid = uid;
1102 + }
1103 +
1104 + if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
1105 + bprm->per_clear |= PER_CLEAR_ON_SETID;
1106 + bprm->cred->egid = gid;
1107 + }
1108 +}
1109 +
1110 /*
1111 * Fill the binprm structure from the inode.
1112 * Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
1113 @@ -1273,39 +1320,12 @@ static int check_unsafe_exec(struct linux_binprm *bprm)
1114 */
1115 int prepare_binprm(struct linux_binprm *bprm)
1116 {
1117 - umode_t mode;
1118 - struct inode * inode = file_inode(bprm->file);
1119 int retval;
1120
1121 - mode = inode->i_mode;
1122 if (bprm->file->f_op == NULL)
1123 return -EACCES;
1124
1125 - /* clear any previous set[ug]id data from a previous binary */
1126 - bprm->cred->euid = current_euid();
1127 - bprm->cred->egid = current_egid();
1128 -
1129 - if (!(bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID) &&
1130 - !current->no_new_privs &&
1131 - kuid_has_mapping(bprm->cred->user_ns, inode->i_uid) &&
1132 - kgid_has_mapping(bprm->cred->user_ns, inode->i_gid)) {
1133 - /* Set-uid? */
1134 - if (mode & S_ISUID) {
1135 - bprm->per_clear |= PER_CLEAR_ON_SETID;
1136 - bprm->cred->euid = inode->i_uid;
1137 - }
1138 -
1139 - /* Set-gid? */
1140 - /*
1141 - * If setgid is set but no group execute bit then this
1142 - * is a candidate for mandatory locking, not a setgid
1143 - * executable.
1144 - */
1145 - if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
1146 - bprm->per_clear |= PER_CLEAR_ON_SETID;
1147 - bprm->cred->egid = inode->i_gid;
1148 - }
1149 - }
1150 + bprm_fill_uid(bprm);
1151
1152 /* fill in binprm security blob */
1153 retval = security_bprm_set_creds(bprm);
1154 diff --git a/fs/file_table.c b/fs/file_table.c
1155 index 54a34be444f9..28f02a7cbba1 100644
1156 --- a/fs/file_table.c
1157 +++ b/fs/file_table.c
1158 @@ -36,8 +36,6 @@ struct files_stat_struct files_stat = {
1159 .max_files = NR_FILE
1160 };
1161
1162 -DEFINE_STATIC_LGLOCK(files_lglock);
1163 -
1164 /* SLAB cache for file structures */
1165 static struct kmem_cache *filp_cachep __read_mostly;
1166
1167 @@ -134,7 +132,6 @@ struct file *get_empty_filp(void)
1168 return ERR_PTR(error);
1169 }
1170
1171 - INIT_LIST_HEAD(&f->f_u.fu_list);
1172 atomic_long_set(&f->f_count, 1);
1173 rwlock_init(&f->f_owner.lock);
1174 spin_lock_init(&f->f_lock);
1175 @@ -265,18 +262,15 @@ static void __fput(struct file *file)
1176 mntput(mnt);
1177 }
1178
1179 -static DEFINE_SPINLOCK(delayed_fput_lock);
1180 -static LIST_HEAD(delayed_fput_list);
1181 +static LLIST_HEAD(delayed_fput_list);
1182 static void delayed_fput(struct work_struct *unused)
1183 {
1184 - LIST_HEAD(head);
1185 - spin_lock_irq(&delayed_fput_lock);
1186 - list_splice_init(&delayed_fput_list, &head);
1187 - spin_unlock_irq(&delayed_fput_lock);
1188 - while (!list_empty(&head)) {
1189 - struct file *f = list_first_entry(&head, struct file, f_u.fu_list);
1190 - list_del_init(&f->f_u.fu_list);
1191 - __fput(f);
1192 + struct llist_node *node = llist_del_all(&delayed_fput_list);
1193 + struct llist_node *next;
1194 +
1195 + for (; node; node = next) {
1196 + next = llist_next(node);
1197 + __fput(llist_entry(node, struct file, f_u.fu_llist));
1198 }
1199 }
1200
1201 @@ -306,18 +300,15 @@ void fput(struct file *file)
1202 {
1203 if (atomic_long_dec_and_test(&file->f_count)) {
1204 struct task_struct *task = current;
1205 - unsigned long flags;
1206
1207 - file_sb_list_del(file);
1208 if (likely(!in_interrupt() && !(task->flags & PF_KTHREAD))) {
1209 init_task_work(&file->f_u.fu_rcuhead, ____fput);
1210 if (!task_work_add(task, &file->f_u.fu_rcuhead, true))
1211 return;
1212 }
1213 - spin_lock_irqsave(&delayed_fput_lock, flags);
1214 - list_add(&file->f_u.fu_list, &delayed_fput_list);
1215 - schedule_work(&delayed_fput_work);
1216 - spin_unlock_irqrestore(&delayed_fput_lock, flags);
1217 +
1218 + if (llist_add(&file->f_u.fu_llist, &delayed_fput_list))
1219 + schedule_work(&delayed_fput_work);
1220 }
1221 }
1222
1223 @@ -333,7 +324,6 @@ void __fput_sync(struct file *file)
1224 {
1225 if (atomic_long_dec_and_test(&file->f_count)) {
1226 struct task_struct *task = current;
1227 - file_sb_list_del(file);
1228 BUG_ON(!(task->flags & PF_KTHREAD));
1229 __fput(file);
1230 }
1231 @@ -345,127 +335,10 @@ void put_filp(struct file *file)
1232 {
1233 if (atomic_long_dec_and_test(&file->f_count)) {
1234 security_file_free(file);
1235 - file_sb_list_del(file);
1236 file_free(file);
1237 }
1238 }
1239
1240 -static inline int file_list_cpu(struct file *file)
1241 -{
1242 -#ifdef CONFIG_SMP
1243 - return file->f_sb_list_cpu;
1244 -#else
1245 - return smp_processor_id();
1246 -#endif
1247 -}
1248 -
1249 -/* helper for file_sb_list_add to reduce ifdefs */
1250 -static inline void __file_sb_list_add(struct file *file, struct super_block *sb)
1251 -{
1252 - struct list_head *list;
1253 -#ifdef CONFIG_SMP
1254 - int cpu;
1255 - cpu = smp_processor_id();
1256 - file->f_sb_list_cpu = cpu;
1257 - list = per_cpu_ptr(sb->s_files, cpu);
1258 -#else
1259 - list = &sb->s_files;
1260 -#endif
1261 - list_add(&file->f_u.fu_list, list);
1262 -}
1263 -
1264 -/**
1265 - * file_sb_list_add - add a file to the sb's file list
1266 - * @file: file to add
1267 - * @sb: sb to add it to
1268 - *
1269 - * Use this function to associate a file with the superblock of the inode it
1270 - * refers to.
1271 - */
1272 -void file_sb_list_add(struct file *file, struct super_block *sb)
1273 -{
1274 - lg_local_lock(&files_lglock);
1275 - __file_sb_list_add(file, sb);
1276 - lg_local_unlock(&files_lglock);
1277 -}
1278 -
1279 -/**
1280 - * file_sb_list_del - remove a file from the sb's file list
1281 - * @file: file to remove
1282 - * @sb: sb to remove it from
1283 - *
1284 - * Use this function to remove a file from its superblock.
1285 - */
1286 -void file_sb_list_del(struct file *file)
1287 -{
1288 - if (!list_empty(&file->f_u.fu_list)) {
1289 - lg_local_lock_cpu(&files_lglock, file_list_cpu(file));
1290 - list_del_init(&file->f_u.fu_list);
1291 - lg_local_unlock_cpu(&files_lglock, file_list_cpu(file));
1292 - }
1293 -}
1294 -
1295 -#ifdef CONFIG_SMP
1296 -
1297 -/*
1298 - * These macros iterate all files on all CPUs for a given superblock.
1299 - * files_lglock must be held globally.
1300 - */
1301 -#define do_file_list_for_each_entry(__sb, __file) \
1302 -{ \
1303 - int i; \
1304 - for_each_possible_cpu(i) { \
1305 - struct list_head *list; \
1306 - list = per_cpu_ptr((__sb)->s_files, i); \
1307 - list_for_each_entry((__file), list, f_u.fu_list)
1308 -
1309 -#define while_file_list_for_each_entry \
1310 - } \
1311 -}
1312 -
1313 -#else
1314 -
1315 -#define do_file_list_for_each_entry(__sb, __file) \
1316 -{ \
1317 - struct list_head *list; \
1318 - list = &(sb)->s_files; \
1319 - list_for_each_entry((__file), list, f_u.fu_list)
1320 -
1321 -#define while_file_list_for_each_entry \
1322 -}
1323 -
1324 -#endif
1325 -
1326 -/**
1327 - * mark_files_ro - mark all files read-only
1328 - * @sb: superblock in question
1329 - *
1330 - * All files are marked read-only. We don't care about pending
1331 - * delete files so this should be used in 'force' mode only.
1332 - */
1333 -void mark_files_ro(struct super_block *sb)
1334 -{
1335 - struct file *f;
1336 -
1337 - lg_global_lock(&files_lglock);
1338 - do_file_list_for_each_entry(sb, f) {
1339 - if (!S_ISREG(file_inode(f)->i_mode))
1340 - continue;
1341 - if (!file_count(f))
1342 - continue;
1343 - if (!(f->f_mode & FMODE_WRITE))
1344 - continue;
1345 - spin_lock(&f->f_lock);
1346 - f->f_mode &= ~FMODE_WRITE;
1347 - spin_unlock(&f->f_lock);
1348 - if (file_check_writeable(f) != 0)
1349 - continue;
1350 - __mnt_drop_write(f->f_path.mnt);
1351 - file_release_write(f);
1352 - } while_file_list_for_each_entry;
1353 - lg_global_unlock(&files_lglock);
1354 -}
1355 -
1356 void __init files_init(unsigned long mempages)
1357 {
1358 unsigned long n;
1359 @@ -481,6 +354,5 @@ void __init files_init(unsigned long mempages)
1360 n = (mempages * (PAGE_SIZE / 1024)) / 10;
1361 files_stat.max_files = max_t(unsigned long, n, NR_FILE);
1362 files_defer_init();
1363 - lg_lock_init(&files_lglock, "files_lglock");
1364 percpu_counter_init(&nr_files, 0);
1365 }
1366 diff --git a/fs/internal.h b/fs/internal.h
1367 index 68121584ae37..2ffa65a36ca0 100644
1368 --- a/fs/internal.h
1369 +++ b/fs/internal.h
1370 @@ -74,9 +74,6 @@ extern void chroot_fs_refs(const struct path *, const struct path *);
1371 /*
1372 * file_table.c
1373 */
1374 -extern void file_sb_list_add(struct file *f, struct super_block *sb);
1375 -extern void file_sb_list_del(struct file *f);
1376 -extern void mark_files_ro(struct super_block *);
1377 extern struct file *get_empty_filp(void);
1378
1379 /*
1380 diff --git a/fs/open.c b/fs/open.c
1381 index 86092bde31f4..5f129683b7d7 100644
1382 --- a/fs/open.c
1383 +++ b/fs/open.c
1384 @@ -674,7 +674,6 @@ static int do_dentry_open(struct file *f,
1385 }
1386
1387 f->f_mapping = inode->i_mapping;
1388 - file_sb_list_add(f, inode->i_sb);
1389
1390 if (unlikely(f->f_mode & FMODE_PATH)) {
1391 f->f_op = &empty_fops;
1392 @@ -709,7 +708,6 @@ static int do_dentry_open(struct file *f,
1393
1394 cleanup_all:
1395 fops_put(f->f_op);
1396 - file_sb_list_del(f);
1397 if (f->f_mode & FMODE_WRITE) {
1398 if (!special_file(inode->i_mode)) {
1399 /*
1400 diff --git a/fs/super.c b/fs/super.c
1401 index e028b508db25..97280e76179c 100644
1402 --- a/fs/super.c
1403 +++ b/fs/super.c
1404 @@ -163,19 +163,6 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
1405 s = NULL;
1406 goto out;
1407 }
1408 -#ifdef CONFIG_SMP
1409 - s->s_files = alloc_percpu(struct list_head);
1410 - if (!s->s_files)
1411 - goto err_out;
1412 - else {
1413 - int i;
1414 -
1415 - for_each_possible_cpu(i)
1416 - INIT_LIST_HEAD(per_cpu_ptr(s->s_files, i));
1417 - }
1418 -#else
1419 - INIT_LIST_HEAD(&s->s_files);
1420 -#endif
1421 if (init_sb_writers(s, type))
1422 goto err_out;
1423 s->s_flags = flags;
1424 @@ -225,10 +212,6 @@ out:
1425 return s;
1426 err_out:
1427 security_sb_free(s);
1428 -#ifdef CONFIG_SMP
1429 - if (s->s_files)
1430 - free_percpu(s->s_files);
1431 -#endif
1432 destroy_sb_writers(s);
1433 kfree(s);
1434 s = NULL;
1435 @@ -243,9 +226,6 @@ err_out:
1436 */
1437 static inline void destroy_super(struct super_block *s)
1438 {
1439 -#ifdef CONFIG_SMP
1440 - free_percpu(s->s_files);
1441 -#endif
1442 destroy_sb_writers(s);
1443 security_sb_free(s);
1444 WARN_ON(!list_empty(&s->s_mounts));
1445 @@ -727,7 +707,8 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
1446 make sure there are no rw files opened */
1447 if (remount_ro) {
1448 if (force) {
1449 - mark_files_ro(sb);
1450 + sb->s_readonly_remount = 1;
1451 + smp_wmb();
1452 } else {
1453 retval = sb_prepare_remount_readonly(sb);
1454 if (retval)
1455 diff --git a/include/linux/fs.h b/include/linux/fs.h
1456 index d57bc5df7225..5c9dc8471da5 100644
1457 --- a/include/linux/fs.h
1458 +++ b/include/linux/fs.h
1459 @@ -10,6 +10,7 @@
1460 #include <linux/stat.h>
1461 #include <linux/cache.h>
1462 #include <linux/list.h>
1463 +#include <linux/llist.h>
1464 #include <linux/radix-tree.h>
1465 #include <linux/rbtree.h>
1466 #include <linux/init.h>
1467 @@ -761,12 +762,8 @@ static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
1468 #define FILE_MNT_WRITE_RELEASED 2
1469
1470 struct file {
1471 - /*
1472 - * fu_list becomes invalid after file_free is called and queued via
1473 - * fu_rcuhead for RCU freeing
1474 - */
1475 union {
1476 - struct list_head fu_list;
1477 + struct llist_node fu_llist;
1478 struct rcu_head fu_rcuhead;
1479 } f_u;
1480 struct path f_path;
1481 @@ -779,9 +776,6 @@ struct file {
1482 * Must not be taken from IRQ context.
1483 */
1484 spinlock_t f_lock;
1485 -#ifdef CONFIG_SMP
1486 - int f_sb_list_cpu;
1487 -#endif
1488 atomic_long_t f_count;
1489 unsigned int f_flags;
1490 fmode_t f_mode;
1491 @@ -1257,11 +1251,6 @@ struct super_block {
1492
1493 struct list_head s_inodes; /* all inodes */
1494 struct hlist_bl_head s_anon; /* anonymous dentries for (nfs) exporting */
1495 -#ifdef CONFIG_SMP
1496 - struct list_head __percpu *s_files;
1497 -#else
1498 - struct list_head s_files;
1499 -#endif
1500 struct list_head s_mounts; /* list of mounts; _not_ for fs use */
1501 /* s_dentry_lru, s_nr_dentry_unused protected by dcache.c lru locks */
1502 struct list_head s_dentry_lru; /* unused dentry lru */
1503 diff --git a/include/linux/mbus.h b/include/linux/mbus.h
1504 index dba482e31a13..e80b9c7ec8da 100644
1505 --- a/include/linux/mbus.h
1506 +++ b/include/linux/mbus.h
1507 @@ -67,6 +67,6 @@ int mvebu_mbus_add_window(const char *devname, phys_addr_t base,
1508 int mvebu_mbus_del_window(phys_addr_t base, size_t size);
1509 int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base,
1510 size_t mbus_size, phys_addr_t sdram_phys_base,
1511 - size_t sdram_size);
1512 + size_t sdram_size, int is_coherent);
1513
1514 #endif /* __LINUX_MBUS_H */
1515 diff --git a/include/linux/sched.h b/include/linux/sched.h
1516 index 00c1d4f45072..7cf305d036db 100644
1517 --- a/include/linux/sched.h
1518 +++ b/include/linux/sched.h
1519 @@ -2203,15 +2203,15 @@ static inline bool thread_group_leader(struct task_struct *p)
1520 * all we care about is that we have a task with the appropriate
1521 * pid, we don't actually care if we have the right task.
1522 */
1523 -static inline int has_group_leader_pid(struct task_struct *p)
1524 +static inline bool has_group_leader_pid(struct task_struct *p)
1525 {
1526 - return p->pid == p->tgid;
1527 + return task_pid(p) == p->signal->leader_pid;
1528 }
1529
1530 static inline
1531 -int same_thread_group(struct task_struct *p1, struct task_struct *p2)
1532 +bool same_thread_group(struct task_struct *p1, struct task_struct *p2)
1533 {
1534 - return p1->tgid == p2->tgid;
1535 + return p1->signal == p2->signal;
1536 }
1537
1538 static inline struct task_struct *next_thread(const struct task_struct *p)
1539 diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
1540 index 665e0cee59bd..5e661a979694 100644
1541 --- a/include/net/ip6_fib.h
1542 +++ b/include/net/ip6_fib.h
1543 @@ -301,7 +301,7 @@ extern void inet6_rt_notify(int event, struct rt6_info *rt,
1544 struct nl_info *info);
1545
1546 extern void fib6_run_gc(unsigned long expires,
1547 - struct net *net);
1548 + struct net *net, bool force);
1549
1550 extern void fib6_gc_cleanup(void);
1551
1552 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
1553 index 118323bc8529..30ab20623bca 100644
1554 --- a/kernel/ptrace.c
1555 +++ b/kernel/ptrace.c
1556 @@ -236,7 +236,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode)
1557 */
1558 int dumpable = 0;
1559 /* Don't let security modules deny introspection */
1560 - if (task == current)
1561 + if (same_thread_group(task, current))
1562 return 0;
1563 rcu_read_lock();
1564 tcred = __task_cred(task);
1565 diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
1566 index 9a459be24af7..9b5b5ddf8cd4 100644
1567 --- a/net/ipv4/xfrm4_policy.c
1568 +++ b/net/ipv4/xfrm4_policy.c
1569 @@ -235,7 +235,7 @@ static struct dst_ops xfrm4_dst_ops = {
1570 .destroy = xfrm4_dst_destroy,
1571 .ifdown = xfrm4_dst_ifdown,
1572 .local_out = __ip_local_out,
1573 - .gc_thresh = 1024,
1574 + .gc_thresh = 32768,
1575 };
1576
1577 static struct xfrm_policy_afinfo xfrm4_policy_afinfo = {
1578 diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
1579 index ceeb9458bb60..46458ee31939 100644
1580 --- a/net/ipv6/ip6_fib.c
1581 +++ b/net/ipv6/ip6_fib.c
1582 @@ -1648,27 +1648,28 @@ static int fib6_age(struct rt6_info *rt, void *arg)
1583
1584 static DEFINE_SPINLOCK(fib6_gc_lock);
1585
1586 -void fib6_run_gc(unsigned long expires, struct net *net)
1587 +void fib6_run_gc(unsigned long expires, struct net *net, bool force)
1588 {
1589 - if (expires != ~0UL) {
1590 + unsigned long now;
1591 +
1592 + if (force) {
1593 spin_lock_bh(&fib6_gc_lock);
1594 - gc_args.timeout = expires ? (int)expires :
1595 - net->ipv6.sysctl.ip6_rt_gc_interval;
1596 - } else {
1597 - if (!spin_trylock_bh(&fib6_gc_lock)) {
1598 - mod_timer(&net->ipv6.ip6_fib_timer, jiffies + HZ);
1599 - return;
1600 - }
1601 - gc_args.timeout = net->ipv6.sysctl.ip6_rt_gc_interval;
1602 + } else if (!spin_trylock_bh(&fib6_gc_lock)) {
1603 + mod_timer(&net->ipv6.ip6_fib_timer, jiffies + HZ);
1604 + return;
1605 }
1606 + gc_args.timeout = expires ? (int)expires :
1607 + net->ipv6.sysctl.ip6_rt_gc_interval;
1608
1609 gc_args.more = icmp6_dst_gc();
1610
1611 fib6_clean_all(net, fib6_age, 0, NULL);
1612 + now = jiffies;
1613 + net->ipv6.ip6_rt_last_gc = now;
1614
1615 if (gc_args.more)
1616 mod_timer(&net->ipv6.ip6_fib_timer,
1617 - round_jiffies(jiffies
1618 + round_jiffies(now
1619 + net->ipv6.sysctl.ip6_rt_gc_interval));
1620 else
1621 del_timer(&net->ipv6.ip6_fib_timer);
1622 @@ -1677,7 +1678,7 @@ void fib6_run_gc(unsigned long expires, struct net *net)
1623
1624 static void fib6_gc_timer_cb(unsigned long arg)
1625 {
1626 - fib6_run_gc(0, (struct net *)arg);
1627 + fib6_run_gc(0, (struct net *)arg, true);
1628 }
1629
1630 static int __net_init fib6_net_init(struct net *net)
1631 diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
1632 index 05f361338c2e..deedf7ddbc6e 100644
1633 --- a/net/ipv6/ndisc.c
1634 +++ b/net/ipv6/ndisc.c
1635 @@ -1584,7 +1584,7 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event,
1636 switch (event) {
1637 case NETDEV_CHANGEADDR:
1638 neigh_changeaddr(&nd_tbl, dev);
1639 - fib6_run_gc(~0UL, net);
1640 + fib6_run_gc(0, net, false);
1641 idev = in6_dev_get(dev);
1642 if (!idev)
1643 break;
1644 @@ -1594,7 +1594,7 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event,
1645 break;
1646 case NETDEV_DOWN:
1647 neigh_ifdown(&nd_tbl, dev);
1648 - fib6_run_gc(~0UL, net);
1649 + fib6_run_gc(0, net, false);
1650 break;
1651 case NETDEV_NOTIFY_PEERS:
1652 ndisc_send_unsol_na(dev);
1653 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1654 index d94d224f7e68..6ebefd46f718 100644
1655 --- a/net/ipv6/route.c
1656 +++ b/net/ipv6/route.c
1657 @@ -1334,7 +1334,6 @@ static void icmp6_clean_all(int (*func)(struct rt6_info *rt, void *arg),
1658
1659 static int ip6_dst_gc(struct dst_ops *ops)
1660 {
1661 - unsigned long now = jiffies;
1662 struct net *net = container_of(ops, struct net, ipv6.ip6_dst_ops);
1663 int rt_min_interval = net->ipv6.sysctl.ip6_rt_gc_min_interval;
1664 int rt_max_size = net->ipv6.sysctl.ip6_rt_max_size;
1665 @@ -1344,13 +1343,12 @@ static int ip6_dst_gc(struct dst_ops *ops)
1666 int entries;
1667
1668 entries = dst_entries_get_fast(ops);
1669 - if (time_after(rt_last_gc + rt_min_interval, now) &&
1670 + if (time_after(rt_last_gc + rt_min_interval, jiffies) &&
1671 entries <= rt_max_size)
1672 goto out;
1673
1674 net->ipv6.ip6_rt_gc_expire++;
1675 - fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net);
1676 - net->ipv6.ip6_rt_last_gc = now;
1677 + fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net, entries > rt_max_size);
1678 entries = dst_entries_get_slow(ops);
1679 if (entries < ops->gc_thresh)
1680 net->ipv6.ip6_rt_gc_expire = rt_gc_timeout>>1;
1681 @@ -2849,7 +2847,7 @@ int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write,
1682 net = (struct net *)ctl->extra1;
1683 delay = net->ipv6.sysctl.flush_delay;
1684 proc_dointvec(ctl, write, buffer, lenp, ppos);
1685 - fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay, net);
1686 + fib6_run_gc(delay <= 0 ? 0 : (unsigned long)delay, net, delay > 0);
1687 return 0;
1688 }
1689
1690 diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
1691 index 23ed03d786c8..1c2e0c9ba8a1 100644
1692 --- a/net/ipv6/xfrm6_policy.c
1693 +++ b/net/ipv6/xfrm6_policy.c
1694 @@ -284,7 +284,7 @@ static struct dst_ops xfrm6_dst_ops = {
1695 .destroy = xfrm6_dst_destroy,
1696 .ifdown = xfrm6_dst_ifdown,
1697 .local_out = __ip6_local_out,
1698 - .gc_thresh = 1024,
1699 + .gc_thresh = 32768,
1700 };
1701
1702 static struct xfrm_policy_afinfo xfrm6_policy_afinfo = {
1703 diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
1704 index a191b6db657e..3b283edec027 100644
1705 --- a/net/netfilter/nfnetlink_cthelper.c
1706 +++ b/net/netfilter/nfnetlink_cthelper.c
1707 @@ -74,6 +74,9 @@ nfnl_cthelper_parse_tuple(struct nf_conntrack_tuple *tuple,
1708 if (!tb[NFCTH_TUPLE_L3PROTONUM] || !tb[NFCTH_TUPLE_L4PROTONUM])
1709 return -EINVAL;
1710
1711 + /* Not all fields are initialized so first zero the tuple */
1712 + memset(tuple, 0, sizeof(struct nf_conntrack_tuple));
1713 +
1714 tuple->src.l3num = ntohs(nla_get_be16(tb[NFCTH_TUPLE_L3PROTONUM]));
1715 tuple->dst.protonum = nla_get_u8(tb[NFCTH_TUPLE_L4PROTONUM]);
1716
1717 @@ -83,7 +86,7 @@ nfnl_cthelper_parse_tuple(struct nf_conntrack_tuple *tuple,
1718 static int
1719 nfnl_cthelper_from_nlattr(struct nlattr *attr, struct nf_conn *ct)
1720 {
1721 - const struct nf_conn_help *help = nfct_help(ct);
1722 + struct nf_conn_help *help = nfct_help(ct);
1723
1724 if (attr == NULL)
1725 return -EINVAL;
1726 @@ -91,7 +94,7 @@ nfnl_cthelper_from_nlattr(struct nlattr *attr, struct nf_conn *ct)
1727 if (help->helper->data_len == 0)
1728 return -EINVAL;
1729
1730 - memcpy(&help->data, nla_data(attr), help->helper->data_len);
1731 + memcpy(help->data, nla_data(attr), help->helper->data_len);
1732 return 0;
1733 }
1734