Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.18/0106-3.18.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2547 - (hide annotations) (download)
Fri Feb 20 13:17:12 2015 UTC (9 years, 2 months ago) by niro
File size: 44258 byte(s)
-linux-3.18.7
1 niro 2547 diff --git a/Makefile b/Makefile
2     index d2bff2d5ae25..0efae2279fbe 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 18
8     -SUBLEVEL = 6
9     +SUBLEVEL = 7
10     EXTRAVERSION =
11     NAME = Diseased Newt
12    
13     diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
14     index e0278ecbc816..98960b7bc518 100644
15     --- a/arch/arm/boot/dts/exynos4.dtsi
16     +++ b/arch/arm/boot/dts/exynos4.dtsi
17     @@ -368,7 +368,7 @@
18     };
19    
20     i2s1: i2s@13960000 {
21     - compatible = "samsung,s5pv210-i2s";
22     + compatible = "samsung,s3c6410-i2s";
23     reg = <0x13960000 0x100>;
24     clocks = <&clock CLK_I2S1>;
25     clock-names = "iis";
26     @@ -378,7 +378,7 @@
27     };
28    
29     i2s2: i2s@13970000 {
30     - compatible = "samsung,s5pv210-i2s";
31     + compatible = "samsung,s3c6410-i2s";
32     reg = <0x13970000 0x100>;
33     clocks = <&clock CLK_I2S2>;
34     clock-names = "iis";
35     diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
36     index 6eb97b3a7481..4370933f16cd 100644
37     --- a/arch/arm/mm/context.c
38     +++ b/arch/arm/mm/context.c
39     @@ -144,21 +144,17 @@ static void flush_context(unsigned int cpu)
40     /* Update the list of reserved ASIDs and the ASID bitmap. */
41     bitmap_clear(asid_map, 0, NUM_USER_ASIDS);
42     for_each_possible_cpu(i) {
43     - if (i == cpu) {
44     - asid = 0;
45     - } else {
46     - asid = atomic64_xchg(&per_cpu(active_asids, i), 0);
47     - /*
48     - * If this CPU has already been through a
49     - * rollover, but hasn't run another task in
50     - * the meantime, we must preserve its reserved
51     - * ASID, as this is the only trace we have of
52     - * the process it is still running.
53     - */
54     - if (asid == 0)
55     - asid = per_cpu(reserved_asids, i);
56     - __set_bit(asid & ~ASID_MASK, asid_map);
57     - }
58     + asid = atomic64_xchg(&per_cpu(active_asids, i), 0);
59     + /*
60     + * If this CPU has already been through a
61     + * rollover, but hasn't run another task in
62     + * the meantime, we must preserve its reserved
63     + * ASID, as this is the only trace we have of
64     + * the process it is still running.
65     + */
66     + if (asid == 0)
67     + asid = per_cpu(reserved_asids, i);
68     + __set_bit(asid & ~ASID_MASK, asid_map);
69     per_cpu(reserved_asids, i) = asid;
70     }
71    
72     diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
73     index 64c4f0800ee3..38eead12f35b 100644
74     --- a/arch/arm64/kernel/setup.c
75     +++ b/arch/arm64/kernel/setup.c
76     @@ -43,6 +43,7 @@
77     #include <linux/of_fdt.h>
78     #include <linux/of_platform.h>
79     #include <linux/efi.h>
80     +#include <linux/personality.h>
81    
82     #include <asm/fixmap.h>
83     #include <asm/cpu.h>
84     @@ -79,7 +80,6 @@ unsigned int compat_elf_hwcap2 __read_mostly;
85     #endif
86    
87     static const char *cpu_name;
88     -static const char *machine_name;
89     phys_addr_t __fdt_pointer __initdata;
90    
91     /*
92     @@ -311,8 +311,6 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
93     while (true)
94     cpu_relax();
95     }
96     -
97     - machine_name = of_flat_dt_get_machine_name();
98     }
99    
100     /*
101     @@ -449,14 +447,50 @@ static const char *hwcap_str[] = {
102     NULL
103     };
104    
105     +#ifdef CONFIG_COMPAT
106     +static const char *compat_hwcap_str[] = {
107     + "swp",
108     + "half",
109     + "thumb",
110     + "26bit",
111     + "fastmult",
112     + "fpa",
113     + "vfp",
114     + "edsp",
115     + "java",
116     + "iwmmxt",
117     + "crunch",
118     + "thumbee",
119     + "neon",
120     + "vfpv3",
121     + "vfpv3d16",
122     + "tls",
123     + "vfpv4",
124     + "idiva",
125     + "idivt",
126     + "vfpd32",
127     + "lpae",
128     + "evtstrm"
129     +};
130     +
131     +static const char *compat_hwcap2_str[] = {
132     + "aes",
133     + "pmull",
134     + "sha1",
135     + "sha2",
136     + "crc32",
137     + NULL
138     +};
139     +#endif /* CONFIG_COMPAT */
140     +
141     static int c_show(struct seq_file *m, void *v)
142     {
143     - int i;
144     -
145     - seq_printf(m, "Processor\t: %s rev %d (%s)\n",
146     - cpu_name, read_cpuid_id() & 15, ELF_PLATFORM);
147     + int i, j;
148    
149     for_each_online_cpu(i) {
150     + struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i);
151     + u32 midr = cpuinfo->reg_midr;
152     +
153     /*
154     * glibc reads /proc/cpuinfo to determine the number of
155     * online processors, looking for lines beginning with
156     @@ -465,24 +499,38 @@ static int c_show(struct seq_file *m, void *v)
157     #ifdef CONFIG_SMP
158     seq_printf(m, "processor\t: %d\n", i);
159     #endif
160     - }
161     -
162     - /* dump out the processor features */
163     - seq_puts(m, "Features\t: ");
164     -
165     - for (i = 0; hwcap_str[i]; i++)
166     - if (elf_hwcap & (1 << i))
167     - seq_printf(m, "%s ", hwcap_str[i]);
168     -
169     - seq_printf(m, "\nCPU implementer\t: 0x%02x\n", read_cpuid_id() >> 24);
170     - seq_printf(m, "CPU architecture: AArch64\n");
171     - seq_printf(m, "CPU variant\t: 0x%x\n", (read_cpuid_id() >> 20) & 15);
172     - seq_printf(m, "CPU part\t: 0x%03x\n", (read_cpuid_id() >> 4) & 0xfff);
173     - seq_printf(m, "CPU revision\t: %d\n", read_cpuid_id() & 15);
174    
175     - seq_puts(m, "\n");
176     -
177     - seq_printf(m, "Hardware\t: %s\n", machine_name);
178     + /*
179     + * Dump out the common processor features in a single line.
180     + * Userspace should read the hwcaps with getauxval(AT_HWCAP)
181     + * rather than attempting to parse this, but there's a body of
182     + * software which does already (at least for 32-bit).
183     + */
184     + seq_puts(m, "Features\t:");
185     + if (personality(current->personality) == PER_LINUX32) {
186     +#ifdef CONFIG_COMPAT
187     + for (j = 0; compat_hwcap_str[j]; j++)
188     + if (compat_elf_hwcap & (1 << j))
189     + seq_printf(m, " %s", compat_hwcap_str[j]);
190     +
191     + for (j = 0; compat_hwcap2_str[j]; j++)
192     + if (compat_elf_hwcap2 & (1 << j))
193     + seq_printf(m, " %s", compat_hwcap2_str[j]);
194     +#endif /* CONFIG_COMPAT */
195     + } else {
196     + for (j = 0; hwcap_str[j]; j++)
197     + if (elf_hwcap & (1 << j))
198     + seq_printf(m, " %s", hwcap_str[j]);
199     + }
200     + seq_puts(m, "\n");
201     +
202     + seq_printf(m, "CPU implementer\t: 0x%02x\n",
203     + MIDR_IMPLEMENTOR(midr));
204     + seq_printf(m, "CPU architecture: 8\n");
205     + seq_printf(m, "CPU variant\t: 0x%x\n", MIDR_VARIANT(midr));
206     + seq_printf(m, "CPU part\t: 0x%03x\n", MIDR_PARTNUM(midr));
207     + seq_printf(m, "CPU revision\t: %d\n\n", MIDR_REVISION(midr));
208     + }
209    
210     return 0;
211     }
212     diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
213     index ecd903dd1c45..8b1eeffa12ed 100644
214     --- a/arch/mips/cavium-octeon/smp.c
215     +++ b/arch/mips/cavium-octeon/smp.c
216     @@ -240,9 +240,7 @@ static int octeon_cpu_disable(void)
217    
218     set_cpu_online(cpu, false);
219     cpu_clear(cpu, cpu_callin_map);
220     - local_irq_disable();
221     octeon_fixup_irqs();
222     - local_irq_enable();
223    
224     flush_cache_all();
225     local_flush_tlb_all();
226     diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
227     index 22a135ac91de..f38ca68285ea 100644
228     --- a/arch/mips/include/asm/mipsregs.h
229     +++ b/arch/mips/include/asm/mipsregs.h
230     @@ -1343,12 +1343,27 @@ do { \
231     __res; \
232     })
233    
234     +#define _write_32bit_cp1_register(dest, val, gas_hardfloat) \
235     +do { \
236     + __asm__ __volatile__( \
237     + " .set push \n" \
238     + " .set reorder \n" \
239     + " "STR(gas_hardfloat)" \n" \
240     + " ctc1 %0,"STR(dest)" \n" \
241     + " .set pop \n" \
242     + : : "r" (val)); \
243     +} while (0)
244     +
245     #ifdef GAS_HAS_SET_HARDFLOAT
246     #define read_32bit_cp1_register(source) \
247     _read_32bit_cp1_register(source, .set hardfloat)
248     +#define write_32bit_cp1_register(dest, val) \
249     + _write_32bit_cp1_register(dest, val, .set hardfloat)
250     #else
251     #define read_32bit_cp1_register(source) \
252     _read_32bit_cp1_register(source, )
253     +#define write_32bit_cp1_register(dest, val) \
254     + _write_32bit_cp1_register(dest, val, )
255     #endif
256    
257     #ifdef HAVE_AS_DSP
258     diff --git a/arch/mips/kernel/irq_cpu.c b/arch/mips/kernel/irq_cpu.c
259     index e498f2b3646a..f5598e25e906 100644
260     --- a/arch/mips/kernel/irq_cpu.c
261     +++ b/arch/mips/kernel/irq_cpu.c
262     @@ -56,6 +56,8 @@ static struct irq_chip mips_cpu_irq_controller = {
263     .irq_mask_ack = mask_mips_irq,
264     .irq_unmask = unmask_mips_irq,
265     .irq_eoi = unmask_mips_irq,
266     + .irq_disable = mask_mips_irq,
267     + .irq_enable = unmask_mips_irq,
268     };
269    
270     /*
271     @@ -92,6 +94,8 @@ static struct irq_chip mips_mt_cpu_irq_controller = {
272     .irq_mask_ack = mips_mt_cpu_irq_ack,
273     .irq_unmask = unmask_mips_irq,
274     .irq_eoi = unmask_mips_irq,
275     + .irq_disable = mask_mips_irq,
276     + .irq_enable = unmask_mips_irq,
277     };
278    
279     void __init mips_cpu_irq_init(void)
280     diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
281     index c94c4e92e17d..1c0d8c50b7e1 100644
282     --- a/arch/mips/kernel/smp.c
283     +++ b/arch/mips/kernel/smp.c
284     @@ -123,10 +123,10 @@ asmlinkage void start_secondary(void)
285     unsigned int cpu;
286    
287     cpu_probe();
288     - cpu_report();
289     per_cpu_trap_init(false);
290     mips_clockevent_init();
291     mp_ops->init_secondary();
292     + cpu_report();
293    
294     /*
295     * XXX parity protection should be folded in here when it's converted
296     diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
297     index 22b19c275044..d255a2a1837a 100644
298     --- a/arch/mips/kernel/traps.c
299     +++ b/arch/mips/kernel/traps.c
300     @@ -1184,7 +1184,8 @@ static int enable_restore_fp_context(int msa)
301    
302     /* Restore the scalar FP control & status register */
303     if (!was_fpu_owner)
304     - asm volatile("ctc1 %0, $31" : : "r"(current->thread.fpu.fcr31));
305     + write_32bit_cp1_register(CP1_STATUS,
306     + current->thread.fpu.fcr31);
307     }
308    
309     out:
310     diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
311     index c3917e251f59..11688e50e3ee 100644
312     --- a/arch/mips/mm/tlb-r4k.c
313     +++ b/arch/mips/mm/tlb-r4k.c
314     @@ -489,6 +489,8 @@ static void r4k_tlb_configure(void)
315     #ifdef CONFIG_64BIT
316     pg |= PG_ELPA;
317     #endif
318     + if (cpu_has_rixiex)
319     + pg |= PG_IEC;
320     write_c0_pagegrain(pg);
321     }
322    
323     diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
324     index 15c29096136b..36a83617eb21 100644
325     --- a/arch/x86/kernel/cpu/microcode/core.c
326     +++ b/arch/x86/kernel/cpu/microcode/core.c
327     @@ -552,7 +552,7 @@ static int __init microcode_init(void)
328     int error;
329    
330     if (paravirt_enabled() || dis_ucode_ldr)
331     - return 0;
332     + return -EINVAL;
333    
334     if (c->x86_vendor == X86_VENDOR_INTEL)
335     microcode_ops = init_intel_microcode();
336     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
337     index a8612aafeca1..4d8ee827cb14 100644
338     --- a/arch/x86/mm/fault.c
339     +++ b/arch/x86/mm/fault.c
340     @@ -844,11 +844,8 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
341     unsigned int fault)
342     {
343     struct task_struct *tsk = current;
344     - struct mm_struct *mm = tsk->mm;
345     int code = BUS_ADRERR;
346    
347     - up_read(&mm->mmap_sem);
348     -
349     /* Kernel mode? Handle exceptions or die: */
350     if (!(error_code & PF_USER)) {
351     no_context(regs, error_code, address, SIGBUS, BUS_ADRERR);
352     @@ -879,7 +876,6 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
353     unsigned long address, unsigned int fault)
354     {
355     if (fatal_signal_pending(current) && !(error_code & PF_USER)) {
356     - up_read(&current->mm->mmap_sem);
357     no_context(regs, error_code, address, 0, 0);
358     return;
359     }
360     @@ -887,14 +883,11 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
361     if (fault & VM_FAULT_OOM) {
362     /* Kernel mode? Handle exceptions or die: */
363     if (!(error_code & PF_USER)) {
364     - up_read(&current->mm->mmap_sem);
365     no_context(regs, error_code, address,
366     SIGSEGV, SEGV_MAPERR);
367     return;
368     }
369    
370     - up_read(&current->mm->mmap_sem);
371     -
372     /*
373     * We ran out of memory, call the OOM killer, and return the
374     * userspace (which will retry the fault, or kill us if we got
375     @@ -1249,6 +1242,7 @@ good_area:
376     return;
377    
378     if (unlikely(fault & VM_FAULT_ERROR)) {
379     + up_read(&mm->mmap_sem);
380     mm_fault_error(regs, error_code, address, fault);
381     return;
382     }
383     diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
384     index 7b20bccf3648..2fb384724ebb 100644
385     --- a/arch/x86/pci/common.c
386     +++ b/arch/x86/pci/common.c
387     @@ -448,6 +448,22 @@ static const struct dmi_system_id pciprobe_dmi_table[] __initconst = {
388     DMI_MATCH(DMI_PRODUCT_NAME, "ftServer"),
389     },
390     },
391     + {
392     + .callback = set_scan_all,
393     + .ident = "Stratus/NEC ftServer",
394     + .matches = {
395     + DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
396     + DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R32"),
397     + },
398     + },
399     + {
400     + .callback = set_scan_all,
401     + .ident = "Stratus/NEC ftServer",
402     + .matches = {
403     + DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
404     + DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R31"),
405     + },
406     + },
407     {}
408     };
409    
410     diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c
411     index 8488e2fd307c..36bc42942e89 100644
412     --- a/drivers/gpio/gpio-mcp23s08.c
413     +++ b/drivers/gpio/gpio-mcp23s08.c
414     @@ -785,9 +785,11 @@ static int mcp230xx_probe(struct i2c_client *client,
415     client->irq = irq_of_parse_and_map(client->dev.of_node, 0);
416     } else {
417     pdata = dev_get_platdata(&client->dev);
418     - if (!pdata || !gpio_is_valid(pdata->base)) {
419     - dev_dbg(&client->dev, "invalid platform data\n");
420     - return -EINVAL;
421     + if (!pdata) {
422     + pdata = devm_kzalloc(&client->dev,
423     + sizeof(struct mcp23s08_platform_data),
424     + GFP_KERNEL);
425     + pdata->base = -1;
426     }
427     }
428    
429     @@ -908,10 +910,11 @@ static int mcp23s08_probe(struct spi_device *spi)
430     } else {
431     type = spi_get_device_id(spi)->driver_data;
432     pdata = dev_get_platdata(&spi->dev);
433     - if (!pdata || !gpio_is_valid(pdata->base)) {
434     - dev_dbg(&spi->dev,
435     - "invalid or missing platform data\n");
436     - return -EINVAL;
437     + if (!pdata) {
438     + pdata = devm_kzalloc(&spi->dev,
439     + sizeof(struct mcp23s08_platform_data),
440     + GFP_KERNEL);
441     + pdata->base = -1;
442     }
443    
444     for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) {
445     diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c
446     index 0d21396f961d..aed7dd6e9dca 100644
447     --- a/drivers/gpio/gpiolib-sysfs.c
448     +++ b/drivers/gpio/gpiolib-sysfs.c
449     @@ -630,6 +630,7 @@ int gpiod_export_link(struct device *dev, const char *name,
450     if (tdev != NULL) {
451     status = sysfs_create_link(&dev->kobj, &tdev->kobj,
452     name);
453     + put_device(tdev);
454     } else {
455     status = -ENODEV;
456     }
457     @@ -677,7 +678,7 @@ int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
458     }
459    
460     status = sysfs_set_active_low(desc, dev, value);
461     -
462     + put_device(dev);
463     unlock:
464     mutex_unlock(&sysfs_lock);
465    
466     diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c
467     index 9e7f23dd14bd..87d5fb21cb61 100644
468     --- a/drivers/gpu/drm/radeon/radeon_benchmark.c
469     +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c
470     @@ -34,7 +34,8 @@
471    
472     static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size,
473     uint64_t saddr, uint64_t daddr,
474     - int flag, int n)
475     + int flag, int n,
476     + struct reservation_object *resv)
477     {
478     unsigned long start_jiffies;
479     unsigned long end_jiffies;
480     @@ -47,12 +48,12 @@ static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size,
481     case RADEON_BENCHMARK_COPY_DMA:
482     fence = radeon_copy_dma(rdev, saddr, daddr,
483     size / RADEON_GPU_PAGE_SIZE,
484     - NULL);
485     + resv);
486     break;
487     case RADEON_BENCHMARK_COPY_BLIT:
488     fence = radeon_copy_blit(rdev, saddr, daddr,
489     size / RADEON_GPU_PAGE_SIZE,
490     - NULL);
491     + resv);
492     break;
493     default:
494     DRM_ERROR("Unknown copy method\n");
495     @@ -120,7 +121,8 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size,
496    
497     if (rdev->asic->copy.dma) {
498     time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
499     - RADEON_BENCHMARK_COPY_DMA, n);
500     + RADEON_BENCHMARK_COPY_DMA, n,
501     + dobj->tbo.resv);
502     if (time < 0)
503     goto out_cleanup;
504     if (time > 0)
505     @@ -130,7 +132,8 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size,
506    
507     if (rdev->asic->copy.blit) {
508     time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
509     - RADEON_BENCHMARK_COPY_BLIT, n);
510     + RADEON_BENCHMARK_COPY_BLIT, n,
511     + dobj->tbo.resv);
512     if (time < 0)
513     goto out_cleanup;
514     if (time > 0)
515     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
516     index 00ead8c2758a..2e1e9aa79cea 100644
517     --- a/drivers/gpu/drm/radeon/radeon_display.c
518     +++ b/drivers/gpu/drm/radeon/radeon_display.c
519     @@ -959,6 +959,9 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
520     if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV &&
521     pll->flags & RADEON_PLL_USE_REF_DIV)
522     ref_div_max = pll->reference_div;
523     + else if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP)
524     + /* fix for problems on RS880 */
525     + ref_div_max = min(pll->max_ref_div, 7u);
526     else
527     ref_div_max = pll->max_ref_div;
528    
529     diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
530     index c194497aa586..b4abff67c63f 100644
531     --- a/drivers/gpu/drm/radeon/radeon_gem.c
532     +++ b/drivers/gpu/drm/radeon/radeon_gem.c
533     @@ -146,7 +146,8 @@ int radeon_gem_object_open(struct drm_gem_object *obj, struct drm_file *file_pri
534     struct radeon_bo_va *bo_va;
535     int r;
536    
537     - if (rdev->family < CHIP_CAYMAN) {
538     + if ((rdev->family < CHIP_CAYMAN) ||
539     + (!rdev->accel_working)) {
540     return 0;
541     }
542    
543     @@ -176,7 +177,8 @@ void radeon_gem_object_close(struct drm_gem_object *obj,
544     struct radeon_bo_va *bo_va;
545     int r;
546    
547     - if (rdev->family < CHIP_CAYMAN) {
548     + if ((rdev->family < CHIP_CAYMAN) ||
549     + (!rdev->accel_working)) {
550     return;
551     }
552    
553     diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
554     index 03586763ee86..8ec652722e4f 100644
555     --- a/drivers/gpu/drm/radeon/radeon_kms.c
556     +++ b/drivers/gpu/drm/radeon/radeon_kms.c
557     @@ -598,14 +598,14 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
558     return -ENOMEM;
559     }
560    
561     - vm = &fpriv->vm;
562     - r = radeon_vm_init(rdev, vm);
563     - if (r) {
564     - kfree(fpriv);
565     - return r;
566     - }
567     -
568     if (rdev->accel_working) {
569     + vm = &fpriv->vm;
570     + r = radeon_vm_init(rdev, vm);
571     + if (r) {
572     + kfree(fpriv);
573     + return r;
574     + }
575     +
576     r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
577     if (r) {
578     radeon_vm_fini(rdev, vm);
579     @@ -663,9 +663,9 @@ void radeon_driver_postclose_kms(struct drm_device *dev,
580     radeon_vm_bo_rmv(rdev, vm->ib_bo_va);
581     radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
582     }
583     + radeon_vm_fini(rdev, vm);
584     }
585    
586     - radeon_vm_fini(rdev, vm);
587     kfree(fpriv);
588     file_priv->driver_priv = NULL;
589     }
590     diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c
591     index 07b506b41008..791818165c76 100644
592     --- a/drivers/gpu/drm/radeon/radeon_test.c
593     +++ b/drivers/gpu/drm/radeon/radeon_test.c
594     @@ -119,11 +119,11 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
595     if (ring == R600_RING_TYPE_DMA_INDEX)
596     fence = radeon_copy_dma(rdev, gtt_addr, vram_addr,
597     size / RADEON_GPU_PAGE_SIZE,
598     - NULL);
599     + vram_obj->tbo.resv);
600     else
601     fence = radeon_copy_blit(rdev, gtt_addr, vram_addr,
602     size / RADEON_GPU_PAGE_SIZE,
603     - NULL);
604     + vram_obj->tbo.resv);
605     if (IS_ERR(fence)) {
606     DRM_ERROR("Failed GTT->VRAM copy %d\n", i);
607     r = PTR_ERR(fence);
608     @@ -170,11 +170,11 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
609     if (ring == R600_RING_TYPE_DMA_INDEX)
610     fence = radeon_copy_dma(rdev, vram_addr, gtt_addr,
611     size / RADEON_GPU_PAGE_SIZE,
612     - NULL);
613     + vram_obj->tbo.resv);
614     else
615     fence = radeon_copy_blit(rdev, vram_addr, gtt_addr,
616     size / RADEON_GPU_PAGE_SIZE,
617     - NULL);
618     + vram_obj->tbo.resv);
619     if (IS_ERR(fence)) {
620     DRM_ERROR("Failed VRAM->GTT copy %d\n", i);
621     r = PTR_ERR(fence);
622     diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c
623     index dfde266529e2..afbdf9e685d1 100644
624     --- a/drivers/gpu/drm/radeon/radeon_vm.c
625     +++ b/drivers/gpu/drm/radeon/radeon_vm.c
626     @@ -753,9 +753,11 @@ static void radeon_vm_frag_ptes(struct radeon_device *rdev,
627     */
628    
629     /* NI is optimized for 256KB fragments, SI and newer for 64KB */
630     - uint64_t frag_flags = rdev->family == CHIP_CAYMAN ?
631     + uint64_t frag_flags = ((rdev->family == CHIP_CAYMAN) ||
632     + (rdev->family == CHIP_ARUBA)) ?
633     R600_PTE_FRAG_256KB : R600_PTE_FRAG_64KB;
634     - uint64_t frag_align = rdev->family == CHIP_CAYMAN ? 0x200 : 0x80;
635     + uint64_t frag_align = ((rdev->family == CHIP_CAYMAN) ||
636     + (rdev->family == CHIP_ARUBA)) ? 0x200 : 0x80;
637    
638     uint64_t frag_start = ALIGN(pe_start, frag_align);
639     uint64_t frag_end = pe_end & ~(frag_align - 1);
640     diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
641     index c1b0d52bfcb0..b98765f6f77f 100644
642     --- a/drivers/md/raid5.c
643     +++ b/drivers/md/raid5.c
644     @@ -3195,6 +3195,11 @@ static void handle_stripe_dirtying(struct r5conf *conf,
645     (unsigned long long)sh->sector,
646     rcw, qread, test_bit(STRIPE_DELAYED, &sh->state));
647     }
648     +
649     + if (rcw > disks && rmw > disks &&
650     + !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
651     + set_bit(STRIPE_DELAYED, &sh->state);
652     +
653     /* now if nothing is locked, and if we have enough data,
654     * we can start a write request
655     */
656     diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
657     index dfed00aa3ac0..f0fcbceee209 100644
658     --- a/drivers/pci/host/pcie-designware.c
659     +++ b/drivers/pci/host/pcie-designware.c
660     @@ -283,6 +283,9 @@ static int dw_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev,
661     struct msi_msg msg;
662     struct pcie_port *pp = sys_to_pcie(pdev->bus->sysdata);
663    
664     + if (desc->msi_attrib.is_msix)
665     + return -EINVAL;
666     +
667     irq = assign_irq(1, desc, &pos);
668     if (irq < 0)
669     return irq;
670     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
671     index b72e2cdfd59a..04ea682ab2aa 100644
672     --- a/drivers/pci/quirks.c
673     +++ b/drivers/pci/quirks.c
674     @@ -324,18 +324,52 @@ static void quirk_s3_64M(struct pci_dev *dev)
675     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M);
676     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M);
677    
678     +static void quirk_io(struct pci_dev *dev, int pos, unsigned size,
679     + const char *name)
680     +{
681     + u32 region;
682     + struct pci_bus_region bus_region;
683     + struct resource *res = dev->resource + pos;
684     +
685     + pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + (pos << 2), &region);
686     +
687     + if (!region)
688     + return;
689     +
690     + res->name = pci_name(dev);
691     + res->flags = region & ~PCI_BASE_ADDRESS_IO_MASK;
692     + res->flags |=
693     + (IORESOURCE_IO | IORESOURCE_PCI_FIXED | IORESOURCE_SIZEALIGN);
694     + region &= ~(size - 1);
695     +
696     + /* Convert from PCI bus to resource space */
697     + bus_region.start = region;
698     + bus_region.end = region + size - 1;
699     + pcibios_bus_to_resource(dev->bus, res, &bus_region);
700     +
701     + dev_info(&dev->dev, FW_BUG "%s quirk: reg 0x%x: %pR\n",
702     + name, PCI_BASE_ADDRESS_0 + (pos << 2), res);
703     +}
704     +
705     /*
706     * Some CS5536 BIOSes (for example, the Soekris NET5501 board w/ comBIOS
707     * ver. 1.33 20070103) don't set the correct ISA PCI region header info.
708     * BAR0 should be 8 bytes; instead, it may be set to something like 8k
709     * (which conflicts w/ BAR1's memory range).
710     + *
711     + * CS553x's ISA PCI BARs may also be read-only (ref:
712     + * https://bugzilla.kernel.org/show_bug.cgi?id=85991 - Comment #4 forward).
713     */
714     static void quirk_cs5536_vsa(struct pci_dev *dev)
715     {
716     + static char *name = "CS5536 ISA bridge";
717     +
718     if (pci_resource_len(dev, 0) != 8) {
719     - struct resource *res = &dev->resource[0];
720     - res->end = res->start + 8 - 1;
721     - dev_info(&dev->dev, "CS5536 ISA bridge bug detected (incorrect header); workaround applied\n");
722     + quirk_io(dev, 0, 8, name); /* SMB */
723     + quirk_io(dev, 1, 256, name); /* GPIO */
724     + quirk_io(dev, 2, 64, name); /* MFGPT */
725     + dev_info(&dev->dev, "%s bug detected (incorrect header); workaround applied\n",
726     + name);
727     }
728     }
729     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa);
730     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
731     index cfba74cd8e8b..dd8c8d690763 100644
732     --- a/drivers/scsi/sd.c
733     +++ b/drivers/scsi/sd.c
734     @@ -2818,9 +2818,11 @@ static int sd_revalidate_disk(struct gendisk *disk)
735     */
736     sd_set_flush_flag(sdkp);
737    
738     - max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
739     - sdkp->max_xfer_blocks);
740     + max_xfer = sdkp->max_xfer_blocks;
741     max_xfer <<= ilog2(sdp->sector_size) - 9;
742     +
743     + max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
744     + max_xfer);
745     blk_queue_max_hw_sectors(sdkp->disk->queue, max_xfer);
746     set_capacity(disk, sdkp->capacity);
747     sd_config_write_same(sdkp);
748     diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
749     index 831ceb4a91f6..276a3cf864d7 100644
750     --- a/drivers/spi/spi-fsl-dspi.c
751     +++ b/drivers/spi/spi-fsl-dspi.c
752     @@ -342,8 +342,7 @@ static int dspi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
753     /* Only alloc on first setup */
754     chip = spi_get_ctldata(spi);
755     if (chip == NULL) {
756     - chip = devm_kzalloc(&spi->dev, sizeof(struct chip_data),
757     - GFP_KERNEL);
758     + chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
759     if (!chip)
760     return -ENOMEM;
761     }
762     @@ -382,6 +381,16 @@ static int dspi_setup(struct spi_device *spi)
763     return dspi_setup_transfer(spi, NULL);
764     }
765    
766     +static void dspi_cleanup(struct spi_device *spi)
767     +{
768     + struct chip_data *chip = spi_get_ctldata((struct spi_device *)spi);
769     +
770     + dev_dbg(&spi->dev, "spi_device %u.%u cleanup\n",
771     + spi->master->bus_num, spi->chip_select);
772     +
773     + kfree(chip);
774     +}
775     +
776     static irqreturn_t dspi_interrupt(int irq, void *dev_id)
777     {
778     struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id;
779     @@ -467,6 +476,7 @@ static int dspi_probe(struct platform_device *pdev)
780     dspi->bitbang.master->setup = dspi_setup;
781     dspi->bitbang.master->dev.of_node = pdev->dev.of_node;
782    
783     + master->cleanup = dspi_cleanup;
784     master->mode_bits = SPI_CPOL | SPI_CPHA;
785     master->bits_per_word_mask = SPI_BPW_MASK(4) | SPI_BPW_MASK(8) |
786     SPI_BPW_MASK(16);
787     diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
788     index 3637847b5370..82269a86fd7a 100644
789     --- a/drivers/spi/spi-imx.c
790     +++ b/drivers/spi/spi-imx.c
791     @@ -823,6 +823,10 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
792     struct dma_slave_config slave_config = {};
793     int ret;
794    
795     + /* use pio mode for i.mx6dl chip TKT238285 */
796     + if (of_machine_is_compatible("fsl,imx6dl"))
797     + return 0;
798     +
799     /* Prepare for TX DMA: */
800     master->dma_tx = dma_request_slave_channel(dev, "tx");
801     if (!master->dma_tx) {
802     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
803     index 3e4d00a06c44..9a7b6947874a 100644
804     --- a/fs/cifs/file.c
805     +++ b/fs/cifs/file.c
806     @@ -366,6 +366,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
807     struct cifsLockInfo *li, *tmp;
808     struct cifs_fid fid;
809     struct cifs_pending_open open;
810     + bool oplock_break_cancelled;
811    
812     spin_lock(&cifs_file_list_lock);
813     if (--cifs_file->count > 0) {
814     @@ -397,7 +398,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
815     }
816     spin_unlock(&cifs_file_list_lock);
817    
818     - cancel_work_sync(&cifs_file->oplock_break);
819     + oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);
820    
821     if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
822     struct TCP_Server_Info *server = tcon->ses->server;
823     @@ -409,6 +410,9 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
824     _free_xid(xid);
825     }
826    
827     + if (oplock_break_cancelled)
828     + cifs_done_oplock_break(cifsi);
829     +
830     cifs_del_pending_open(&open);
831    
832     /*
833     diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
834     index 91093cd74f0d..385704027575 100644
835     --- a/fs/nilfs2/nilfs.h
836     +++ b/fs/nilfs2/nilfs.h
837     @@ -141,7 +141,6 @@ enum {
838     * @ti_save: Backup of journal_info field of task_struct
839     * @ti_flags: Flags
840     * @ti_count: Nest level
841     - * @ti_garbage: List of inode to be put when releasing semaphore
842     */
843     struct nilfs_transaction_info {
844     u32 ti_magic;
845     @@ -150,7 +149,6 @@ struct nilfs_transaction_info {
846     one of other filesystems has a bug. */
847     unsigned short ti_flags;
848     unsigned short ti_count;
849     - struct list_head ti_garbage;
850     };
851    
852     /* ti_magic */
853     diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
854     index 7ef18fc656c2..469086b9f99b 100644
855     --- a/fs/nilfs2/segment.c
856     +++ b/fs/nilfs2/segment.c
857     @@ -305,7 +305,6 @@ static void nilfs_transaction_lock(struct super_block *sb,
858     ti->ti_count = 0;
859     ti->ti_save = cur_ti;
860     ti->ti_magic = NILFS_TI_MAGIC;
861     - INIT_LIST_HEAD(&ti->ti_garbage);
862     current->journal_info = ti;
863    
864     for (;;) {
865     @@ -332,8 +331,6 @@ static void nilfs_transaction_unlock(struct super_block *sb)
866    
867     up_write(&nilfs->ns_segctor_sem);
868     current->journal_info = ti->ti_save;
869     - if (!list_empty(&ti->ti_garbage))
870     - nilfs_dispose_list(nilfs, &ti->ti_garbage, 0);
871     }
872    
873     static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci,
874     @@ -746,6 +743,15 @@ static void nilfs_dispose_list(struct the_nilfs *nilfs,
875     }
876     }
877    
878     +static void nilfs_iput_work_func(struct work_struct *work)
879     +{
880     + struct nilfs_sc_info *sci = container_of(work, struct nilfs_sc_info,
881     + sc_iput_work);
882     + struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
883     +
884     + nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 0);
885     +}
886     +
887     static int nilfs_test_metadata_dirty(struct the_nilfs *nilfs,
888     struct nilfs_root *root)
889     {
890     @@ -1900,8 +1906,8 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci,
891     static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
892     struct the_nilfs *nilfs)
893     {
894     - struct nilfs_transaction_info *ti = current->journal_info;
895     struct nilfs_inode_info *ii, *n;
896     + int defer_iput = false;
897    
898     spin_lock(&nilfs->ns_inode_lock);
899     list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) {
900     @@ -1912,9 +1918,24 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
901     clear_bit(NILFS_I_BUSY, &ii->i_state);
902     brelse(ii->i_bh);
903     ii->i_bh = NULL;
904     - list_move_tail(&ii->i_dirty, &ti->ti_garbage);
905     + list_del_init(&ii->i_dirty);
906     + if (!ii->vfs_inode.i_nlink) {
907     + /*
908     + * Defer calling iput() to avoid a deadlock
909     + * over I_SYNC flag for inodes with i_nlink == 0
910     + */
911     + list_add_tail(&ii->i_dirty, &sci->sc_iput_queue);
912     + defer_iput = true;
913     + } else {
914     + spin_unlock(&nilfs->ns_inode_lock);
915     + iput(&ii->vfs_inode);
916     + spin_lock(&nilfs->ns_inode_lock);
917     + }
918     }
919     spin_unlock(&nilfs->ns_inode_lock);
920     +
921     + if (defer_iput)
922     + schedule_work(&sci->sc_iput_work);
923     }
924    
925     /*
926     @@ -2583,6 +2604,8 @@ static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb,
927     INIT_LIST_HEAD(&sci->sc_segbufs);
928     INIT_LIST_HEAD(&sci->sc_write_logs);
929     INIT_LIST_HEAD(&sci->sc_gc_inodes);
930     + INIT_LIST_HEAD(&sci->sc_iput_queue);
931     + INIT_WORK(&sci->sc_iput_work, nilfs_iput_work_func);
932     init_timer(&sci->sc_timer);
933    
934     sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT;
935     @@ -2609,6 +2632,8 @@ static void nilfs_segctor_write_out(struct nilfs_sc_info *sci)
936     ret = nilfs_segctor_construct(sci, SC_LSEG_SR);
937     nilfs_transaction_unlock(sci->sc_super);
938    
939     + flush_work(&sci->sc_iput_work);
940     +
941     } while (ret && retrycount-- > 0);
942     }
943    
944     @@ -2633,6 +2658,9 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
945     || sci->sc_seq_request != sci->sc_seq_done);
946     spin_unlock(&sci->sc_state_lock);
947    
948     + if (flush_work(&sci->sc_iput_work))
949     + flag = true;
950     +
951     if (flag || !nilfs_segctor_confirm(sci))
952     nilfs_segctor_write_out(sci);
953    
954     @@ -2642,6 +2670,12 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
955     nilfs_dispose_list(nilfs, &sci->sc_dirty_files, 1);
956     }
957    
958     + if (!list_empty(&sci->sc_iput_queue)) {
959     + nilfs_warning(sci->sc_super, __func__,
960     + "iput queue is not empty\n");
961     + nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 1);
962     + }
963     +
964     WARN_ON(!list_empty(&sci->sc_segbufs));
965     WARN_ON(!list_empty(&sci->sc_write_logs));
966    
967     diff --git a/fs/nilfs2/segment.h b/fs/nilfs2/segment.h
968     index 38a1d0013314..a48d6de1e02c 100644
969     --- a/fs/nilfs2/segment.h
970     +++ b/fs/nilfs2/segment.h
971     @@ -26,6 +26,7 @@
972     #include <linux/types.h>
973     #include <linux/fs.h>
974     #include <linux/buffer_head.h>
975     +#include <linux/workqueue.h>
976     #include <linux/nilfs2_fs.h>
977     #include "nilfs.h"
978    
979     @@ -92,6 +93,8 @@ struct nilfs_segsum_pointer {
980     * @sc_nblk_inc: Block count of current generation
981     * @sc_dirty_files: List of files to be written
982     * @sc_gc_inodes: List of GC inodes having blocks to be written
983     + * @sc_iput_queue: list of inodes for which iput should be done
984     + * @sc_iput_work: work struct to defer iput call
985     * @sc_freesegs: array of segment numbers to be freed
986     * @sc_nfreesegs: number of segments on @sc_freesegs
987     * @sc_dsync_inode: inode whose data pages are written for a sync operation
988     @@ -135,6 +138,8 @@ struct nilfs_sc_info {
989    
990     struct list_head sc_dirty_files;
991     struct list_head sc_gc_inodes;
992     + struct list_head sc_iput_queue;
993     + struct work_struct sc_iput_work;
994    
995     __u64 *sc_freesegs;
996     size_t sc_nfreesegs;
997     diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
998     index e08e21e5f601..c72851328ca9 100644
999     --- a/include/linux/tracepoint.h
1000     +++ b/include/linux/tracepoint.h
1001     @@ -173,7 +173,7 @@ extern void syscall_unregfunc(void);
1002     TP_PROTO(data_proto), \
1003     TP_ARGS(data_args), \
1004     TP_CONDITION(cond),,); \
1005     - if (IS_ENABLED(CONFIG_LOCKDEP)) { \
1006     + if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) { \
1007     rcu_read_lock_sched_notrace(); \
1008     rcu_dereference_sched(__tracepoint_##name.funcs);\
1009     rcu_read_unlock_sched_notrace(); \
1010     diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h
1011     index 2609048c1d44..3a34f6edc2d1 100644
1012     --- a/include/sound/ak4113.h
1013     +++ b/include/sound/ak4113.h
1014     @@ -286,7 +286,7 @@ struct ak4113 {
1015     ak4113_write_t *write;
1016     ak4113_read_t *read;
1017     void *private_data;
1018     - unsigned int init:1;
1019     + atomic_t wq_processing;
1020     spinlock_t lock;
1021     unsigned char regmap[AK4113_WRITABLE_REGS];
1022     struct snd_kcontrol *kctls[AK4113_CONTROLS];
1023     diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
1024     index 52f02a60dba7..069299a88915 100644
1025     --- a/include/sound/ak4114.h
1026     +++ b/include/sound/ak4114.h
1027     @@ -168,7 +168,7 @@ struct ak4114 {
1028     ak4114_write_t * write;
1029     ak4114_read_t * read;
1030     void * private_data;
1031     - unsigned int init: 1;
1032     + atomic_t wq_processing;
1033     spinlock_t lock;
1034     unsigned char regmap[6];
1035     unsigned char txcsb[5];
1036     diff --git a/include/trace/events/tlb.h b/include/trace/events/tlb.h
1037     index 13391d288107..0e7635765153 100644
1038     --- a/include/trace/events/tlb.h
1039     +++ b/include/trace/events/tlb.h
1040     @@ -13,11 +13,13 @@
1041     { TLB_LOCAL_SHOOTDOWN, "local shootdown" }, \
1042     { TLB_LOCAL_MM_SHOOTDOWN, "local mm shootdown" }
1043    
1044     -TRACE_EVENT(tlb_flush,
1045     +TRACE_EVENT_CONDITION(tlb_flush,
1046    
1047     TP_PROTO(int reason, unsigned long pages),
1048     TP_ARGS(reason, pages),
1049    
1050     + TP_CONDITION(cpu_online(smp_processor_id())),
1051     +
1052     TP_STRUCT__entry(
1053     __field( int, reason)
1054     __field(unsigned long, pages)
1055     diff --git a/kernel/smpboot.c b/kernel/smpboot.c
1056     index eb89e1807408..60d35ac5d3f1 100644
1057     --- a/kernel/smpboot.c
1058     +++ b/kernel/smpboot.c
1059     @@ -279,6 +279,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
1060     unsigned int cpu;
1061     int ret = 0;
1062    
1063     + get_online_cpus();
1064     mutex_lock(&smpboot_threads_lock);
1065     for_each_online_cpu(cpu) {
1066     ret = __smpboot_create_thread(plug_thread, cpu);
1067     @@ -291,6 +292,7 @@ int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
1068     list_add(&plug_thread->list, &hotplug_threads);
1069     out:
1070     mutex_unlock(&smpboot_threads_lock);
1071     + put_online_cpus();
1072     return ret;
1073     }
1074     EXPORT_SYMBOL_GPL(smpboot_register_percpu_thread);
1075     diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
1076     index 37e50aadd471..d8c724cda37b 100644
1077     --- a/kernel/time/hrtimer.c
1078     +++ b/kernel/time/hrtimer.c
1079     @@ -122,7 +122,7 @@ static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base)
1080     mono = ktime_get_update_offsets_tick(&off_real, &off_boot, &off_tai);
1081     boot = ktime_add(mono, off_boot);
1082     xtim = ktime_add(mono, off_real);
1083     - tai = ktime_add(xtim, off_tai);
1084     + tai = ktime_add(mono, off_tai);
1085    
1086     base->clock_base[HRTIMER_BASE_REALTIME].softirq_time = xtim;
1087     base->clock_base[HRTIMER_BASE_MONOTONIC].softirq_time = mono;
1088     diff --git a/lib/checksum.c b/lib/checksum.c
1089     index 129775eb6de6..8b39e86dbab5 100644
1090     --- a/lib/checksum.c
1091     +++ b/lib/checksum.c
1092     @@ -181,6 +181,15 @@ csum_partial_copy(const void *src, void *dst, int len, __wsum sum)
1093     EXPORT_SYMBOL(csum_partial_copy);
1094    
1095     #ifndef csum_tcpudp_nofold
1096     +static inline u32 from64to32(u64 x)
1097     +{
1098     + /* add up 32-bit and 32-bit for 32+c bit */
1099     + x = (x & 0xffffffff) + (x >> 32);
1100     + /* add up carry.. */
1101     + x = (x & 0xffffffff) + (x >> 32);
1102     + return (u32)x;
1103     +}
1104     +
1105     __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
1106     unsigned short len,
1107     unsigned short proto,
1108     @@ -195,8 +204,7 @@ __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
1109     #else
1110     s += (proto + len) << 8;
1111     #endif
1112     - s += (s >> 32);
1113     - return (__force __wsum)s;
1114     + return (__force __wsum)from64to32(s);
1115     }
1116     EXPORT_SYMBOL(csum_tcpudp_nofold);
1117     #endif
1118     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
1119     index 4918b6eefae2..d72bdc3ca09b 100644
1120     --- a/mm/memcontrol.c
1121     +++ b/mm/memcontrol.c
1122     @@ -6589,7 +6589,7 @@ void mem_cgroup_uncharge_list(struct list_head *page_list)
1123     * mem_cgroup_migrate - migrate a charge to another page
1124     * @oldpage: currently charged page
1125     * @newpage: page to transfer the charge to
1126     - * @lrucare: both pages might be on the LRU already
1127     + * @lrucare: either or both pages might be on the LRU already
1128     *
1129     * Migrate the charge from @oldpage to @newpage.
1130     *
1131     diff --git a/mm/pagewalk.c b/mm/pagewalk.c
1132     index ad83195521f2..b264bda46e1b 100644
1133     --- a/mm/pagewalk.c
1134     +++ b/mm/pagewalk.c
1135     @@ -199,7 +199,10 @@ int walk_page_range(unsigned long addr, unsigned long end,
1136     */
1137     if ((vma->vm_start <= addr) &&
1138     (vma->vm_flags & VM_PFNMAP)) {
1139     - next = vma->vm_end;
1140     + if (walk->pte_hole)
1141     + err = walk->pte_hole(addr, next, walk);
1142     + if (err)
1143     + break;
1144     pgd = pgd_offset(walk->mm, next);
1145     continue;
1146     }
1147     diff --git a/mm/shmem.c b/mm/shmem.c
1148     index 185836ba53ef..0b4ba556703a 100644
1149     --- a/mm/shmem.c
1150     +++ b/mm/shmem.c
1151     @@ -1013,7 +1013,7 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
1152     */
1153     oldpage = newpage;
1154     } else {
1155     - mem_cgroup_migrate(oldpage, newpage, false);
1156     + mem_cgroup_migrate(oldpage, newpage, true);
1157     lru_cache_add_anon(newpage);
1158     *pagep = newpage;
1159     }
1160     diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
1161     index a26cc5d2a9b0..72c9dba84c5d 100644
1162     --- a/scripts/kconfig/menu.c
1163     +++ b/scripts/kconfig/menu.c
1164     @@ -548,7 +548,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
1165     {
1166     int i, j;
1167     struct menu *submenu[8], *menu, *location = NULL;
1168     - struct jump_key *jump;
1169     + struct jump_key *jump = NULL;
1170    
1171     str_printf(r, _("Prompt: %s\n"), _(prop->text));
1172     menu = prop->menu->parent;
1173     @@ -586,7 +586,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
1174     str_printf(r, _(" Location:\n"));
1175     for (j = 4; --i >= 0; j += 2) {
1176     menu = submenu[i];
1177     - if (head && location && menu == location)
1178     + if (jump && menu == location)
1179     jump->offset = strlen(r->s);
1180     str_printf(r, "%*c-> %s", j, ' ',
1181     _(menu_get_prompt(menu)));
1182     diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
1183     index 1a3a6fa27158..c6bba99a90b2 100644
1184     --- a/sound/i2c/other/ak4113.c
1185     +++ b/sound/i2c/other/ak4113.c
1186     @@ -56,8 +56,7 @@ static inline unsigned char reg_read(struct ak4113 *ak4113, unsigned char reg)
1187    
1188     static void snd_ak4113_free(struct ak4113 *chip)
1189     {
1190     - chip->init = 1; /* don't schedule new work */
1191     - mb();
1192     + atomic_inc(&chip->wq_processing); /* don't schedule new work */
1193     cancel_delayed_work_sync(&chip->work);
1194     kfree(chip);
1195     }
1196     @@ -89,6 +88,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
1197     chip->write = write;
1198     chip->private_data = private_data;
1199     INIT_DELAYED_WORK(&chip->work, ak4113_stats);
1200     + atomic_set(&chip->wq_processing, 0);
1201    
1202     for (reg = 0; reg < AK4113_WRITABLE_REGS ; reg++)
1203     chip->regmap[reg] = pgm[reg];
1204     @@ -139,13 +139,11 @@ static void ak4113_init_regs(struct ak4113 *chip)
1205    
1206     void snd_ak4113_reinit(struct ak4113 *chip)
1207     {
1208     - chip->init = 1;
1209     - mb();
1210     - flush_delayed_work(&chip->work);
1211     + if (atomic_inc_return(&chip->wq_processing) == 1)
1212     + cancel_delayed_work_sync(&chip->work);
1213     ak4113_init_regs(chip);
1214     /* bring up statistics / event queing */
1215     - chip->init = 0;
1216     - if (chip->kctls[0])
1217     + if (atomic_dec_and_test(&chip->wq_processing))
1218     schedule_delayed_work(&chip->work, HZ / 10);
1219     }
1220     EXPORT_SYMBOL_GPL(snd_ak4113_reinit);
1221     @@ -632,8 +630,9 @@ static void ak4113_stats(struct work_struct *work)
1222     {
1223     struct ak4113 *chip = container_of(work, struct ak4113, work.work);
1224    
1225     - if (!chip->init)
1226     + if (atomic_inc_return(&chip->wq_processing) == 1)
1227     snd_ak4113_check_rate_and_errors(chip, chip->check_flags);
1228    
1229     - schedule_delayed_work(&chip->work, HZ / 10);
1230     + if (atomic_dec_and_test(&chip->wq_processing))
1231     + schedule_delayed_work(&chip->work, HZ / 10);
1232     }
1233     diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
1234     index c7f56339415d..b70e6eccbd03 100644
1235     --- a/sound/i2c/other/ak4114.c
1236     +++ b/sound/i2c/other/ak4114.c
1237     @@ -66,8 +66,7 @@ static void reg_dump(struct ak4114 *ak4114)
1238    
1239     static void snd_ak4114_free(struct ak4114 *chip)
1240     {
1241     - chip->init = 1; /* don't schedule new work */
1242     - mb();
1243     + atomic_inc(&chip->wq_processing); /* don't schedule new work */
1244     cancel_delayed_work_sync(&chip->work);
1245     kfree(chip);
1246     }
1247     @@ -100,6 +99,7 @@ int snd_ak4114_create(struct snd_card *card,
1248     chip->write = write;
1249     chip->private_data = private_data;
1250     INIT_DELAYED_WORK(&chip->work, ak4114_stats);
1251     + atomic_set(&chip->wq_processing, 0);
1252    
1253     for (reg = 0; reg < 6; reg++)
1254     chip->regmap[reg] = pgm[reg];
1255     @@ -152,13 +152,11 @@ static void ak4114_init_regs(struct ak4114 *chip)
1256    
1257     void snd_ak4114_reinit(struct ak4114 *chip)
1258     {
1259     - chip->init = 1;
1260     - mb();
1261     - flush_delayed_work(&chip->work);
1262     + if (atomic_inc_return(&chip->wq_processing) == 1)
1263     + cancel_delayed_work_sync(&chip->work);
1264     ak4114_init_regs(chip);
1265     /* bring up statistics / event queing */
1266     - chip->init = 0;
1267     - if (chip->kctls[0])
1268     + if (atomic_dec_and_test(&chip->wq_processing))
1269     schedule_delayed_work(&chip->work, HZ / 10);
1270     }
1271    
1272     @@ -612,10 +610,10 @@ static void ak4114_stats(struct work_struct *work)
1273     {
1274     struct ak4114 *chip = container_of(work, struct ak4114, work.work);
1275    
1276     - if (!chip->init)
1277     + if (atomic_inc_return(&chip->wq_processing) == 1)
1278     snd_ak4114_check_rate_and_errors(chip, chip->check_flags);
1279     -
1280     - schedule_delayed_work(&chip->work, HZ / 10);
1281     + if (atomic_dec_and_test(&chip->wq_processing))
1282     + schedule_delayed_work(&chip->work, HZ / 10);
1283     }
1284    
1285     EXPORT_SYMBOL(snd_ak4114_create);
1286     diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
1287     index f403f399808a..51413e239cc3 100644
1288     --- a/sound/soc/atmel/atmel_ssc_dai.c
1289     +++ b/sound/soc/atmel/atmel_ssc_dai.c
1290     @@ -345,7 +345,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
1291     struct atmel_pcm_dma_params *dma_params;
1292     int dir, channels, bits;
1293     u32 tfmr, rfmr, tcmr, rcmr;
1294     - int start_event;
1295     int ret;
1296     int fslen, fslen_ext;
1297    
1298     @@ -454,19 +453,10 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
1299     * The SSC transmit clock is obtained from the BCLK signal on
1300     * on the TK line, and the SSC receive clock is
1301     * generated from the transmit clock.
1302     - *
1303     - * For single channel data, one sample is transferred
1304     - * on the falling edge of the LRC clock.
1305     - * For two channel data, one sample is
1306     - * transferred on both edges of the LRC clock.
1307     */
1308     - start_event = ((channels == 1)
1309     - ? SSC_START_FALLING_RF
1310     - : SSC_START_EDGE_RF);
1311     -
1312     rcmr = SSC_BF(RCMR_PERIOD, 0)
1313     | SSC_BF(RCMR_STTDLY, START_DELAY)
1314     - | SSC_BF(RCMR_START, start_event)
1315     + | SSC_BF(RCMR_START, SSC_START_FALLING_RF)
1316     | SSC_BF(RCMR_CKI, SSC_CKI_RISING)
1317     | SSC_BF(RCMR_CKO, SSC_CKO_NONE)
1318     | SSC_BF(RCMR_CKS, ssc->clk_from_rk_pin ?
1319     @@ -475,14 +465,14 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
1320     rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
1321     | SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
1322     | SSC_BF(RFMR_FSLEN, 0)
1323     - | SSC_BF(RFMR_DATNB, 0)
1324     + | SSC_BF(RFMR_DATNB, (channels - 1))
1325     | SSC_BIT(RFMR_MSBF)
1326     | SSC_BF(RFMR_LOOP, 0)
1327     | SSC_BF(RFMR_DATLEN, (bits - 1));
1328    
1329     tcmr = SSC_BF(TCMR_PERIOD, 0)
1330     | SSC_BF(TCMR_STTDLY, START_DELAY)
1331     - | SSC_BF(TCMR_START, start_event)
1332     + | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
1333     | SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
1334     | SSC_BF(TCMR_CKO, SSC_CKO_NONE)
1335     | SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
1336     @@ -492,7 +482,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
1337     | SSC_BF(TFMR_FSDEN, 0)
1338     | SSC_BF(TFMR_FSOS, SSC_FSOS_NONE)
1339     | SSC_BF(TFMR_FSLEN, 0)
1340     - | SSC_BF(TFMR_DATNB, 0)
1341     + | SSC_BF(TFMR_DATNB, (channels - 1))
1342     | SSC_BIT(TFMR_MSBF)
1343     | SSC_BF(TFMR_DATDEF, 0)
1344     | SSC_BF(TFMR_DATLEN, (bits - 1));
1345     diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
1346     index dab9b15304af..f1287ff8dd29 100644
1347     --- a/sound/soc/codecs/sgtl5000.c
1348     +++ b/sound/soc/codecs/sgtl5000.c
1349     @@ -1452,6 +1452,9 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
1350     if (ret)
1351     return ret;
1352    
1353     + /* Need 8 clocks before I2C accesses */
1354     + udelay(1);
1355     +
1356     /* read chip information */
1357     ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ID, &reg);
1358     if (ret)