Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.0/0101-4.0.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2564 - (hide annotations) (download)
Tue Nov 25 22:54:20 2014 UTC (9 years, 6 months ago) by niro
File size: 287284 byte(s)
-linux-4.0.2
1 niro 2564 diff --git a/Documentation/networking/scaling.txt b/Documentation/networking/scaling.txt
2     index 99ca40e8e810..5c204df6b689 100644
3     --- a/Documentation/networking/scaling.txt
4     +++ b/Documentation/networking/scaling.txt
5     @@ -282,7 +282,7 @@ following is true:
6    
7     - The current CPU's queue head counter >= the recorded tail counter
8     value in rps_dev_flow[i]
9     -- The current CPU is unset (equal to RPS_NO_CPU)
10     +- The current CPU is unset (>= nr_cpu_ids)
11     - The current CPU is offline
12    
13     After this check, the packet is sent to the (possibly updated) current
14     diff --git a/Documentation/virtual/kvm/devices/s390_flic.txt b/Documentation/virtual/kvm/devices/s390_flic.txt
15     index 4ceef53164b0..d1ad9d5cae46 100644
16     --- a/Documentation/virtual/kvm/devices/s390_flic.txt
17     +++ b/Documentation/virtual/kvm/devices/s390_flic.txt
18     @@ -27,6 +27,9 @@ Groups:
19     Copies all floating interrupts into a buffer provided by userspace.
20     When the buffer is too small it returns -ENOMEM, which is the indication
21     for userspace to try again with a bigger buffer.
22     + -ENOBUFS is returned when the allocation of a kernelspace buffer has
23     + failed.
24     + -EFAULT is returned when copying data to userspace failed.
25     All interrupts remain pending, i.e. are not deleted from the list of
26     currently pending interrupts.
27     attr->addr contains the userspace address of the buffer into which all
28     diff --git a/Makefile b/Makefile
29     index f499cd2f5738..0649a6011a76 100644
30     --- a/Makefile
31     +++ b/Makefile
32     @@ -1,6 +1,6 @@
33     VERSION = 4
34     PATCHLEVEL = 0
35     -SUBLEVEL = 1
36     +SUBLEVEL = 2
37     EXTRAVERSION =
38     NAME = Hurr durr I'ma sheep
39    
40     diff --git a/arch/arm/boot/dts/at91-sama5d3_xplained.dts b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
41     index fec1fca2ad66..6c4bc53cbf4e 100644
42     --- a/arch/arm/boot/dts/at91-sama5d3_xplained.dts
43     +++ b/arch/arm/boot/dts/at91-sama5d3_xplained.dts
44     @@ -167,7 +167,13 @@
45    
46     macb1: ethernet@f802c000 {
47     phy-mode = "rmii";
48     + #address-cells = <1>;
49     + #size-cells = <0>;
50     status = "okay";
51     +
52     + ethernet-phy@1 {
53     + reg = <0x1>;
54     + };
55     };
56    
57     dbgu: serial@ffffee00 {
58     diff --git a/arch/arm/boot/dts/dove.dtsi b/arch/arm/boot/dts/dove.dtsi
59     index a5441d5482a6..3cc8b8320345 100644
60     --- a/arch/arm/boot/dts/dove.dtsi
61     +++ b/arch/arm/boot/dts/dove.dtsi
62     @@ -154,7 +154,7 @@
63    
64     uart2: serial@12200 {
65     compatible = "ns16550a";
66     - reg = <0x12000 0x100>;
67     + reg = <0x12200 0x100>;
68     reg-shift = <2>;
69     interrupts = <9>;
70     clocks = <&core_clk 0>;
71     @@ -163,7 +163,7 @@
72    
73     uart3: serial@12300 {
74     compatible = "ns16550a";
75     - reg = <0x12100 0x100>;
76     + reg = <0x12300 0x100>;
77     reg-shift = <2>;
78     interrupts = <10>;
79     clocks = <&core_clk 0>;
80     diff --git a/arch/arm/boot/dts/exynos5250-spring.dts b/arch/arm/boot/dts/exynos5250-spring.dts
81     index f02775487cd4..c41600e587e0 100644
82     --- a/arch/arm/boot/dts/exynos5250-spring.dts
83     +++ b/arch/arm/boot/dts/exynos5250-spring.dts
84     @@ -429,7 +429,6 @@
85     &mmc_0 {
86     status = "okay";
87     num-slots = <1>;
88     - supports-highspeed;
89     broken-cd;
90     card-detect-delay = <200>;
91     samsung,dw-mshc-ciu-div = <3>;
92     @@ -437,11 +436,8 @@
93     samsung,dw-mshc-ddr-timing = <1 2>;
94     pinctrl-names = "default";
95     pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_cd &sd0_bus4 &sd0_bus8>;
96     -
97     - slot@0 {
98     - reg = <0>;
99     - bus-width = <8>;
100     - };
101     + bus-width = <8>;
102     + cap-mmc-highspeed;
103     };
104    
105     /*
106     @@ -451,7 +447,6 @@
107     &mmc_1 {
108     status = "okay";
109     num-slots = <1>;
110     - supports-highspeed;
111     broken-cd;
112     card-detect-delay = <200>;
113     samsung,dw-mshc-ciu-div = <3>;
114     @@ -459,11 +454,8 @@
115     samsung,dw-mshc-ddr-timing = <1 2>;
116     pinctrl-names = "default";
117     pinctrl-0 = <&sd1_clk &sd1_cmd &sd1_cd &sd1_bus4>;
118     -
119     - slot@0 {
120     - reg = <0>;
121     - bus-width = <4>;
122     - };
123     + bus-width = <4>;
124     + cap-sd-highspeed;
125     };
126    
127     &pinctrl_0 {
128     diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
129     index afb9cafd3786..674d03f4ba15 100644
130     --- a/arch/arm/include/asm/elf.h
131     +++ b/arch/arm/include/asm/elf.h
132     @@ -115,7 +115,7 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
133     the loader. We need to make sure that it is out of the way of the program
134     that it will "exec", and that there is sufficient room for the brk. */
135    
136     -#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
137     +#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
138    
139     /* When the program starts, a1 contains a pointer to a function to be
140     registered with atexit, as per the SVR4 ABI. A value of 0 means we
141     diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h
142     index 0db25bc32864..3a42ac646885 100644
143     --- a/arch/arm/include/uapi/asm/kvm.h
144     +++ b/arch/arm/include/uapi/asm/kvm.h
145     @@ -195,8 +195,14 @@ struct kvm_arch_memory_slot {
146     #define KVM_ARM_IRQ_CPU_IRQ 0
147     #define KVM_ARM_IRQ_CPU_FIQ 1
148    
149     -/* Highest supported SPI, from VGIC_NR_IRQS */
150     +/*
151     + * This used to hold the highest supported SPI, but it is now obsolete
152     + * and only here to provide source code level compatibility with older
153     + * userland. The highest SPI number can be set via KVM_DEV_ARM_VGIC_GRP_NR_IRQS.
154     + */
155     +#ifndef __KERNEL__
156     #define KVM_ARM_IRQ_GIC_MAX 127
157     +#endif
158    
159     /* PSCI interface */
160     #define KVM_PSCI_FN_BASE 0x95c1ba5e
161     diff --git a/arch/arm/kernel/hibernate.c b/arch/arm/kernel/hibernate.c
162     index c4cc50e58c13..cfb354ff2a60 100644
163     --- a/arch/arm/kernel/hibernate.c
164     +++ b/arch/arm/kernel/hibernate.c
165     @@ -22,6 +22,7 @@
166     #include <asm/suspend.h>
167     #include <asm/memory.h>
168     #include <asm/sections.h>
169     +#include "reboot.h"
170    
171     int pfn_is_nosave(unsigned long pfn)
172     {
173     @@ -61,7 +62,7 @@ static int notrace arch_save_image(unsigned long unused)
174    
175     ret = swsusp_save();
176     if (ret == 0)
177     - soft_restart(virt_to_phys(cpu_resume));
178     + _soft_restart(virt_to_phys(cpu_resume), false);
179     return ret;
180     }
181    
182     @@ -86,7 +87,7 @@ static void notrace arch_restore_image(void *unused)
183     for (pbe = restore_pblist; pbe; pbe = pbe->next)
184     copy_page(pbe->orig_address, pbe->address);
185    
186     - soft_restart(virt_to_phys(cpu_resume));
187     + _soft_restart(virt_to_phys(cpu_resume), false);
188     }
189    
190     static u64 resume_stack[PAGE_SIZE/2/sizeof(u64)] __nosavedata;
191     diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
192     index fdfa3a78ec8c..2bf1a162defb 100644
193     --- a/arch/arm/kernel/process.c
194     +++ b/arch/arm/kernel/process.c
195     @@ -41,6 +41,7 @@
196     #include <asm/system_misc.h>
197     #include <asm/mach/time.h>
198     #include <asm/tls.h>
199     +#include "reboot.h"
200    
201     #ifdef CONFIG_CC_STACKPROTECTOR
202     #include <linux/stackprotector.h>
203     @@ -95,7 +96,7 @@ static void __soft_restart(void *addr)
204     BUG();
205     }
206    
207     -void soft_restart(unsigned long addr)
208     +void _soft_restart(unsigned long addr, bool disable_l2)
209     {
210     u64 *stack = soft_restart_stack + ARRAY_SIZE(soft_restart_stack);
211    
212     @@ -104,7 +105,7 @@ void soft_restart(unsigned long addr)
213     local_fiq_disable();
214    
215     /* Disable the L2 if we're the last man standing. */
216     - if (num_online_cpus() == 1)
217     + if (disable_l2)
218     outer_disable();
219    
220     /* Change to the new stack and continue with the reset. */
221     @@ -114,6 +115,11 @@ void soft_restart(unsigned long addr)
222     BUG();
223     }
224    
225     +void soft_restart(unsigned long addr)
226     +{
227     + _soft_restart(addr, num_online_cpus() == 1);
228     +}
229     +
230     /*
231     * Function pointers to optional machine specific functions
232     */
233     diff --git a/arch/arm/kernel/reboot.h b/arch/arm/kernel/reboot.h
234     new file mode 100644
235     index 000000000000..c87f05816d6b
236     --- /dev/null
237     +++ b/arch/arm/kernel/reboot.h
238     @@ -0,0 +1,6 @@
239     +#ifndef REBOOT_H
240     +#define REBOOT_H
241     +
242     +extern void _soft_restart(unsigned long addr, bool disable_l2);
243     +
244     +#endif
245     diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
246     index 5560f74f9eee..b652af50fda7 100644
247     --- a/arch/arm/kvm/arm.c
248     +++ b/arch/arm/kvm/arm.c
249     @@ -651,8 +651,7 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level,
250     if (!irqchip_in_kernel(kvm))
251     return -ENXIO;
252    
253     - if (irq_num < VGIC_NR_PRIVATE_IRQS ||
254     - irq_num > KVM_ARM_IRQ_GIC_MAX)
255     + if (irq_num < VGIC_NR_PRIVATE_IRQS)
256     return -EINVAL;
257    
258     return kvm_vgic_inject_irq(kvm, 0, irq_num, level);
259     diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c
260     index 8b9f5e202ccf..4f4e22206ae5 100644
261     --- a/arch/arm/mach-mvebu/pmsu.c
262     +++ b/arch/arm/mach-mvebu/pmsu.c
263     @@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_init(void)
264     void __iomem *mpsoc_base;
265     u32 reg;
266    
267     + pr_warn("CPU idle is currently broken on Armada 38x: disabling");
268     + return 0;
269     +
270     np = of_find_compatible_node(NULL, NULL,
271     "marvell,armada-380-coherency-fabric");
272     if (!np)
273     @@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(void)
274     return 0;
275     of_node_put(np);
276    
277     + /*
278     + * Currently the CPU idle support for Armada 38x is broken, as
279     + * the CPU hotplug uses some of the CPU idle functions it is
280     + * broken too, so let's disable it
281     + */
282     + if (of_machine_is_compatible("marvell,armada380")) {
283     + cpu_hotplug_disable();
284     + pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling");
285     + }
286     +
287     if (of_machine_is_compatible("marvell,armadaxp"))
288     ret = armada_xp_cpuidle_init();
289     else if (of_machine_is_compatible("marvell,armada370"))
290     @@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(void)
291     return ret;
292    
293     mvebu_v7_pmsu_enable_l2_powerdown_onidle();
294     - platform_device_register(&mvebu_v7_cpuidle_device);
295     + if (mvebu_v7_cpuidle_device.name)
296     + platform_device_register(&mvebu_v7_cpuidle_device);
297     cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier);
298    
299     return 0;
300     diff --git a/arch/arm/mach-s3c64xx/crag6410.h b/arch/arm/mach-s3c64xx/crag6410.h
301     index 7bc66682687e..dcbe17f5e5f8 100644
302     --- a/arch/arm/mach-s3c64xx/crag6410.h
303     +++ b/arch/arm/mach-s3c64xx/crag6410.h
304     @@ -14,6 +14,7 @@
305     #include <mach/gpio-samsung.h>
306    
307     #define GLENFARCLAS_PMIC_IRQ_BASE IRQ_BOARD_START
308     +#define BANFF_PMIC_IRQ_BASE (IRQ_BOARD_START + 64)
309    
310     #define PCA935X_GPIO_BASE GPIO_BOARD_START
311     #define CODEC_GPIO_BASE (GPIO_BOARD_START + 8)
312     diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c
313     index 10b913baab28..65c426bc45f7 100644
314     --- a/arch/arm/mach-s3c64xx/mach-crag6410.c
315     +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c
316     @@ -554,6 +554,7 @@ static struct wm831x_touch_pdata touch_pdata = {
317    
318     static struct wm831x_pdata crag_pmic_pdata = {
319     .wm831x_num = 1,
320     + .irq_base = BANFF_PMIC_IRQ_BASE,
321     .gpio_base = BANFF_PMIC_GPIO_BASE,
322     .soft_shutdown = true,
323    
324     diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
325     index 1b8e97331ffb..a6186c24ca47 100644
326     --- a/arch/arm64/Kconfig
327     +++ b/arch/arm64/Kconfig
328     @@ -361,6 +361,27 @@ config ARM64_ERRATUM_832075
329    
330     If unsure, say Y.
331    
332     +config ARM64_ERRATUM_845719
333     + bool "Cortex-A53: 845719: a load might read incorrect data"
334     + depends on COMPAT
335     + default y
336     + help
337     + This option adds an alternative code sequence to work around ARM
338     + erratum 845719 on Cortex-A53 parts up to r0p4.
339     +
340     + When running a compat (AArch32) userspace on an affected Cortex-A53
341     + part, a load at EL0 from a virtual address that matches the bottom 32
342     + bits of the virtual address used by a recent load at (AArch64) EL1
343     + might return incorrect data.
344     +
345     + The workaround is to write the contextidr_el1 register on exception
346     + return to a 32-bit task.
347     + Please note that this does not necessarily enable the workaround,
348     + as it depends on the alternative framework, which will only patch
349     + the kernel if an affected CPU is detected.
350     +
351     + If unsure, say Y.
352     +
353     endmenu
354    
355    
356     @@ -470,6 +491,10 @@ config HOTPLUG_CPU
357    
358     source kernel/Kconfig.preempt
359    
360     +config UP_LATE_INIT
361     + def_bool y
362     + depends on !SMP
363     +
364     config HZ
365     int
366     default 100
367     diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
368     index 69ceedc982a5..4d2a925998f9 100644
369     --- a/arch/arm64/Makefile
370     +++ b/arch/arm64/Makefile
371     @@ -48,7 +48,7 @@ core-$(CONFIG_KVM) += arch/arm64/kvm/
372     core-$(CONFIG_XEN) += arch/arm64/xen/
373     core-$(CONFIG_CRYPTO) += arch/arm64/crypto/
374     libs-y := arch/arm64/lib/ $(libs-y)
375     -libs-$(CONFIG_EFI_STUB) += drivers/firmware/efi/libstub/
376     +core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
377    
378     # Default target when executing plain make
379     KBUILD_IMAGE := Image.gz
380     diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
381     index b6c16d5f622f..3f0c53c45771 100644
382     --- a/arch/arm64/include/asm/cpufeature.h
383     +++ b/arch/arm64/include/asm/cpufeature.h
384     @@ -23,8 +23,9 @@
385    
386     #define ARM64_WORKAROUND_CLEAN_CACHE 0
387     #define ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE 1
388     +#define ARM64_WORKAROUND_845719 2
389    
390     -#define ARM64_NCAPS 2
391     +#define ARM64_NCAPS 3
392    
393     #ifndef __ASSEMBLY__
394    
395     diff --git a/arch/arm64/include/asm/smp_plat.h b/arch/arm64/include/asm/smp_plat.h
396     index 59e282311b58..8dcd61e32176 100644
397     --- a/arch/arm64/include/asm/smp_plat.h
398     +++ b/arch/arm64/include/asm/smp_plat.h
399     @@ -40,4 +40,6 @@ static inline u32 mpidr_hash_size(void)
400     extern u64 __cpu_logical_map[NR_CPUS];
401     #define cpu_logical_map(cpu) __cpu_logical_map[cpu]
402    
403     +void __init do_post_cpus_up_work(void);
404     +
405     #endif /* __ASM_SMP_PLAT_H */
406     diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
407     index 3ef77a466018..bc49a1886b61 100644
408     --- a/arch/arm64/include/uapi/asm/kvm.h
409     +++ b/arch/arm64/include/uapi/asm/kvm.h
410     @@ -188,8 +188,14 @@ struct kvm_arch_memory_slot {
411     #define KVM_ARM_IRQ_CPU_IRQ 0
412     #define KVM_ARM_IRQ_CPU_FIQ 1
413    
414     -/* Highest supported SPI, from VGIC_NR_IRQS */
415     +/*
416     + * This used to hold the highest supported SPI, but it is now obsolete
417     + * and only here to provide source code level compatibility with older
418     + * userland. The highest SPI number can be set via KVM_DEV_ARM_VGIC_GRP_NR_IRQS.
419     + */
420     +#ifndef __KERNEL__
421     #define KVM_ARM_IRQ_GIC_MAX 127
422     +#endif
423    
424     /* PSCI interface */
425     #define KVM_PSCI_FN_BASE 0x95c1ba5e
426     diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
427     index fa62637e63a8..ad6d52392bb1 100644
428     --- a/arch/arm64/kernel/cpu_errata.c
429     +++ b/arch/arm64/kernel/cpu_errata.c
430     @@ -88,7 +88,16 @@ struct arm64_cpu_capabilities arm64_errata[] = {
431     /* Cortex-A57 r0p0 - r1p2 */
432     .desc = "ARM erratum 832075",
433     .capability = ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE,
434     - MIDR_RANGE(MIDR_CORTEX_A57, 0x00, 0x12),
435     + MIDR_RANGE(MIDR_CORTEX_A57, 0x00,
436     + (1 << MIDR_VARIANT_SHIFT) | 2),
437     + },
438     +#endif
439     +#ifdef CONFIG_ARM64_ERRATUM_845719
440     + {
441     + /* Cortex-A53 r0p[01234] */
442     + .desc = "ARM erratum 845719",
443     + .capability = ARM64_WORKAROUND_845719,
444     + MIDR_RANGE(MIDR_CORTEX_A53, 0x00, 0x04),
445     },
446     #endif
447     {
448     diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
449     index cf21bb3bf752..959fe8733560 100644
450     --- a/arch/arm64/kernel/entry.S
451     +++ b/arch/arm64/kernel/entry.S
452     @@ -21,8 +21,10 @@
453     #include <linux/init.h>
454     #include <linux/linkage.h>
455    
456     +#include <asm/alternative-asm.h>
457     #include <asm/assembler.h>
458     #include <asm/asm-offsets.h>
459     +#include <asm/cpufeature.h>
460     #include <asm/errno.h>
461     #include <asm/esr.h>
462     #include <asm/thread_info.h>
463     @@ -120,6 +122,24 @@
464     ct_user_enter
465     ldr x23, [sp, #S_SP] // load return stack pointer
466     msr sp_el0, x23
467     +
468     +#ifdef CONFIG_ARM64_ERRATUM_845719
469     + alternative_insn \
470     + "nop", \
471     + "tbz x22, #4, 1f", \
472     + ARM64_WORKAROUND_845719
473     +#ifdef CONFIG_PID_IN_CONTEXTIDR
474     + alternative_insn \
475     + "nop; nop", \
476     + "mrs x29, contextidr_el1; msr contextidr_el1, x29; 1:", \
477     + ARM64_WORKAROUND_845719
478     +#else
479     + alternative_insn \
480     + "nop", \
481     + "msr contextidr_el1, xzr; 1:", \
482     + ARM64_WORKAROUND_845719
483     +#endif
484     +#endif
485     .endif
486     msr elr_el1, x21 // set up the return data
487     msr spsr_el1, x22
488     diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
489     index 07f930540f4a..c237ffb0effe 100644
490     --- a/arch/arm64/kernel/head.S
491     +++ b/arch/arm64/kernel/head.S
492     @@ -426,6 +426,7 @@ __create_page_tables:
493     */
494     mov x0, x25
495     add x1, x26, #SWAPPER_DIR_SIZE
496     + dmb sy
497     bl __inval_cache_range
498    
499     mov lr, x27
500     diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
501     index e8420f635bd4..781f4697dc26 100644
502     --- a/arch/arm64/kernel/setup.c
503     +++ b/arch/arm64/kernel/setup.c
504     @@ -207,6 +207,18 @@ static void __init smp_build_mpidr_hash(void)
505     }
506     #endif
507    
508     +void __init do_post_cpus_up_work(void)
509     +{
510     + apply_alternatives_all();
511     +}
512     +
513     +#ifdef CONFIG_UP_LATE_INIT
514     +void __init up_late_init(void)
515     +{
516     + do_post_cpus_up_work();
517     +}
518     +#endif /* CONFIG_UP_LATE_INIT */
519     +
520     static void __init setup_processor(void)
521     {
522     struct cpu_info *cpu_info;
523     diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
524     index 328b8ce4b007..4257369341e4 100644
525     --- a/arch/arm64/kernel/smp.c
526     +++ b/arch/arm64/kernel/smp.c
527     @@ -309,7 +309,7 @@ void cpu_die(void)
528     void __init smp_cpus_done(unsigned int max_cpus)
529     {
530     pr_info("SMP: Total of %d processors activated.\n", num_online_cpus());
531     - apply_alternatives_all();
532     + do_post_cpus_up_work();
533     }
534    
535     void __init smp_prepare_boot_cpu(void)
536     diff --git a/arch/c6x/kernel/time.c b/arch/c6x/kernel/time.c
537     index 356ee84cad95..04845aaf5985 100644
538     --- a/arch/c6x/kernel/time.c
539     +++ b/arch/c6x/kernel/time.c
540     @@ -49,7 +49,7 @@ u64 sched_clock(void)
541     return (tsc * sched_clock_multiplier) >> SCHED_CLOCK_SHIFT;
542     }
543    
544     -void time_init(void)
545     +void __init time_init(void)
546     {
547     u64 tmp = (u64)NSEC_PER_SEC << SCHED_CLOCK_SHIFT;
548    
549     diff --git a/arch/mips/include/asm/asm-eva.h b/arch/mips/include/asm/asm-eva.h
550     index e41c56e375b1..1e38f0e1ea3e 100644
551     --- a/arch/mips/include/asm/asm-eva.h
552     +++ b/arch/mips/include/asm/asm-eva.h
553     @@ -11,6 +11,36 @@
554     #define __ASM_ASM_EVA_H
555    
556     #ifndef __ASSEMBLY__
557     +
558     +/* Kernel variants */
559     +
560     +#define kernel_cache(op, base) "cache " op ", " base "\n"
561     +#define kernel_ll(reg, addr) "ll " reg ", " addr "\n"
562     +#define kernel_sc(reg, addr) "sc " reg ", " addr "\n"
563     +#define kernel_lw(reg, addr) "lw " reg ", " addr "\n"
564     +#define kernel_lwl(reg, addr) "lwl " reg ", " addr "\n"
565     +#define kernel_lwr(reg, addr) "lwr " reg ", " addr "\n"
566     +#define kernel_lh(reg, addr) "lh " reg ", " addr "\n"
567     +#define kernel_lb(reg, addr) "lb " reg ", " addr "\n"
568     +#define kernel_lbu(reg, addr) "lbu " reg ", " addr "\n"
569     +#define kernel_sw(reg, addr) "sw " reg ", " addr "\n"
570     +#define kernel_swl(reg, addr) "swl " reg ", " addr "\n"
571     +#define kernel_swr(reg, addr) "swr " reg ", " addr "\n"
572     +#define kernel_sh(reg, addr) "sh " reg ", " addr "\n"
573     +#define kernel_sb(reg, addr) "sb " reg ", " addr "\n"
574     +
575     +#ifdef CONFIG_32BIT
576     +/*
577     + * No 'sd' or 'ld' instructions in 32-bit but the code will
578     + * do the correct thing
579     + */
580     +#define kernel_sd(reg, addr) user_sw(reg, addr)
581     +#define kernel_ld(reg, addr) user_lw(reg, addr)
582     +#else
583     +#define kernel_sd(reg, addr) "sd " reg", " addr "\n"
584     +#define kernel_ld(reg, addr) "ld " reg", " addr "\n"
585     +#endif /* CONFIG_32BIT */
586     +
587     #ifdef CONFIG_EVA
588    
589     #define __BUILD_EVA_INSN(insn, reg, addr) \
590     @@ -41,37 +71,60 @@
591    
592     #else
593    
594     -#define user_cache(op, base) "cache " op ", " base "\n"
595     -#define user_ll(reg, addr) "ll " reg ", " addr "\n"
596     -#define user_sc(reg, addr) "sc " reg ", " addr "\n"
597     -#define user_lw(reg, addr) "lw " reg ", " addr "\n"
598     -#define user_lwl(reg, addr) "lwl " reg ", " addr "\n"
599     -#define user_lwr(reg, addr) "lwr " reg ", " addr "\n"
600     -#define user_lh(reg, addr) "lh " reg ", " addr "\n"
601     -#define user_lb(reg, addr) "lb " reg ", " addr "\n"
602     -#define user_lbu(reg, addr) "lbu " reg ", " addr "\n"
603     -#define user_sw(reg, addr) "sw " reg ", " addr "\n"
604     -#define user_swl(reg, addr) "swl " reg ", " addr "\n"
605     -#define user_swr(reg, addr) "swr " reg ", " addr "\n"
606     -#define user_sh(reg, addr) "sh " reg ", " addr "\n"
607     -#define user_sb(reg, addr) "sb " reg ", " addr "\n"
608     +#define user_cache(op, base) kernel_cache(op, base)
609     +#define user_ll(reg, addr) kernel_ll(reg, addr)
610     +#define user_sc(reg, addr) kernel_sc(reg, addr)
611     +#define user_lw(reg, addr) kernel_lw(reg, addr)
612     +#define user_lwl(reg, addr) kernel_lwl(reg, addr)
613     +#define user_lwr(reg, addr) kernel_lwr(reg, addr)
614     +#define user_lh(reg, addr) kernel_lh(reg, addr)
615     +#define user_lb(reg, addr) kernel_lb(reg, addr)
616     +#define user_lbu(reg, addr) kernel_lbu(reg, addr)
617     +#define user_sw(reg, addr) kernel_sw(reg, addr)
618     +#define user_swl(reg, addr) kernel_swl(reg, addr)
619     +#define user_swr(reg, addr) kernel_swr(reg, addr)
620     +#define user_sh(reg, addr) kernel_sh(reg, addr)
621     +#define user_sb(reg, addr) kernel_sb(reg, addr)
622    
623     #ifdef CONFIG_32BIT
624     -/*
625     - * No 'sd' or 'ld' instructions in 32-bit but the code will
626     - * do the correct thing
627     - */
628     -#define user_sd(reg, addr) user_sw(reg, addr)
629     -#define user_ld(reg, addr) user_lw(reg, addr)
630     +#define user_sd(reg, addr) kernel_sw(reg, addr)
631     +#define user_ld(reg, addr) kernel_lw(reg, addr)
632     #else
633     -#define user_sd(reg, addr) "sd " reg", " addr "\n"
634     -#define user_ld(reg, addr) "ld " reg", " addr "\n"
635     +#define user_sd(reg, addr) kernel_sd(reg, addr)
636     +#define user_ld(reg, addr) kernel_ld(reg, addr)
637     #endif /* CONFIG_32BIT */
638    
639     #endif /* CONFIG_EVA */
640    
641     #else /* __ASSEMBLY__ */
642    
643     +#define kernel_cache(op, base) cache op, base
644     +#define kernel_ll(reg, addr) ll reg, addr
645     +#define kernel_sc(reg, addr) sc reg, addr
646     +#define kernel_lw(reg, addr) lw reg, addr
647     +#define kernel_lwl(reg, addr) lwl reg, addr
648     +#define kernel_lwr(reg, addr) lwr reg, addr
649     +#define kernel_lh(reg, addr) lh reg, addr
650     +#define kernel_lb(reg, addr) lb reg, addr
651     +#define kernel_lbu(reg, addr) lbu reg, addr
652     +#define kernel_sw(reg, addr) sw reg, addr
653     +#define kernel_swl(reg, addr) swl reg, addr
654     +#define kernel_swr(reg, addr) swr reg, addr
655     +#define kernel_sh(reg, addr) sh reg, addr
656     +#define kernel_sb(reg, addr) sb reg, addr
657     +
658     +#ifdef CONFIG_32BIT
659     +/*
660     + * No 'sd' or 'ld' instructions in 32-bit but the code will
661     + * do the correct thing
662     + */
663     +#define kernel_sd(reg, addr) user_sw(reg, addr)
664     +#define kernel_ld(reg, addr) user_lw(reg, addr)
665     +#else
666     +#define kernel_sd(reg, addr) sd reg, addr
667     +#define kernel_ld(reg, addr) ld reg, addr
668     +#endif /* CONFIG_32BIT */
669     +
670     #ifdef CONFIG_EVA
671    
672     #define __BUILD_EVA_INSN(insn, reg, addr) \
673     @@ -101,31 +154,27 @@
674     #define user_sd(reg, addr) user_sw(reg, addr)
675     #else
676    
677     -#define user_cache(op, base) cache op, base
678     -#define user_ll(reg, addr) ll reg, addr
679     -#define user_sc(reg, addr) sc reg, addr
680     -#define user_lw(reg, addr) lw reg, addr
681     -#define user_lwl(reg, addr) lwl reg, addr
682     -#define user_lwr(reg, addr) lwr reg, addr
683     -#define user_lh(reg, addr) lh reg, addr
684     -#define user_lb(reg, addr) lb reg, addr
685     -#define user_lbu(reg, addr) lbu reg, addr
686     -#define user_sw(reg, addr) sw reg, addr
687     -#define user_swl(reg, addr) swl reg, addr
688     -#define user_swr(reg, addr) swr reg, addr
689     -#define user_sh(reg, addr) sh reg, addr
690     -#define user_sb(reg, addr) sb reg, addr
691     +#define user_cache(op, base) kernel_cache(op, base)
692     +#define user_ll(reg, addr) kernel_ll(reg, addr)
693     +#define user_sc(reg, addr) kernel_sc(reg, addr)
694     +#define user_lw(reg, addr) kernel_lw(reg, addr)
695     +#define user_lwl(reg, addr) kernel_lwl(reg, addr)
696     +#define user_lwr(reg, addr) kernel_lwr(reg, addr)
697     +#define user_lh(reg, addr) kernel_lh(reg, addr)
698     +#define user_lb(reg, addr) kernel_lb(reg, addr)
699     +#define user_lbu(reg, addr) kernel_lbu(reg, addr)
700     +#define user_sw(reg, addr) kernel_sw(reg, addr)
701     +#define user_swl(reg, addr) kernel_swl(reg, addr)
702     +#define user_swr(reg, addr) kernel_swr(reg, addr)
703     +#define user_sh(reg, addr) kernel_sh(reg, addr)
704     +#define user_sb(reg, addr) kernel_sb(reg, addr)
705    
706     #ifdef CONFIG_32BIT
707     -/*
708     - * No 'sd' or 'ld' instructions in 32-bit but the code will
709     - * do the correct thing
710     - */
711     -#define user_sd(reg, addr) user_sw(reg, addr)
712     -#define user_ld(reg, addr) user_lw(reg, addr)
713     +#define user_sd(reg, addr) kernel_sw(reg, addr)
714     +#define user_ld(reg, addr) kernel_lw(reg, addr)
715     #else
716     -#define user_sd(reg, addr) sd reg, addr
717     -#define user_ld(reg, addr) ld reg, addr
718     +#define user_sd(reg, addr) kernel_sd(reg, addr)
719     +#define user_ld(reg, addr) kernel_sd(reg, addr)
720     #endif /* CONFIG_32BIT */
721    
722     #endif /* CONFIG_EVA */
723     diff --git a/arch/mips/include/asm/fpu.h b/arch/mips/include/asm/fpu.h
724     index dd083e999b08..9f26b079cc6a 100644
725     --- a/arch/mips/include/asm/fpu.h
726     +++ b/arch/mips/include/asm/fpu.h
727     @@ -170,6 +170,7 @@ static inline void lose_fpu(int save)
728     }
729     disable_msa();
730     clear_thread_flag(TIF_USEDMSA);
731     + __disable_fpu();
732     } else if (is_fpu_owner()) {
733     if (save)
734     _save_fp(current);
735     diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
736     index ac4fc716062b..f722b0528c25 100644
737     --- a/arch/mips/include/asm/kvm_host.h
738     +++ b/arch/mips/include/asm/kvm_host.h
739     @@ -322,6 +322,7 @@ enum mips_mmu_types {
740     #define T_TRAP 13 /* Trap instruction */
741     #define T_VCEI 14 /* Virtual coherency exception */
742     #define T_FPE 15 /* Floating point exception */
743     +#define T_MSADIS 21 /* MSA disabled exception */
744     #define T_WATCH 23 /* Watch address reference */
745     #define T_VCED 31 /* Virtual coherency data */
746    
747     @@ -578,6 +579,7 @@ struct kvm_mips_callbacks {
748     int (*handle_syscall)(struct kvm_vcpu *vcpu);
749     int (*handle_res_inst)(struct kvm_vcpu *vcpu);
750     int (*handle_break)(struct kvm_vcpu *vcpu);
751     + int (*handle_msa_disabled)(struct kvm_vcpu *vcpu);
752     int (*vm_init)(struct kvm *kvm);
753     int (*vcpu_init)(struct kvm_vcpu *vcpu);
754     int (*vcpu_setup)(struct kvm_vcpu *vcpu);
755     diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
756     index bbb69695a0a1..7659da224fcd 100644
757     --- a/arch/mips/kernel/unaligned.c
758     +++ b/arch/mips/kernel/unaligned.c
759     @@ -109,10 +109,11 @@ static u32 unaligned_action;
760     extern void show_registers(struct pt_regs *regs);
761    
762     #ifdef __BIG_ENDIAN
763     -#define LoadHW(addr, value, res) \
764     +#define _LoadHW(addr, value, res, type) \
765     +do { \
766     __asm__ __volatile__ (".set\tnoat\n" \
767     - "1:\t"user_lb("%0", "0(%2)")"\n" \
768     - "2:\t"user_lbu("$1", "1(%2)")"\n\t" \
769     + "1:\t"type##_lb("%0", "0(%2)")"\n" \
770     + "2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
771     "sll\t%0, 0x8\n\t" \
772     "or\t%0, $1\n\t" \
773     "li\t%1, 0\n" \
774     @@ -127,13 +128,15 @@ extern void show_registers(struct pt_regs *regs);
775     STR(PTR)"\t2b, 4b\n\t" \
776     ".previous" \
777     : "=&r" (value), "=r" (res) \
778     - : "r" (addr), "i" (-EFAULT));
779     + : "r" (addr), "i" (-EFAULT)); \
780     +} while(0)
781    
782     #ifndef CONFIG_CPU_MIPSR6
783     -#define LoadW(addr, value, res) \
784     +#define _LoadW(addr, value, res, type) \
785     +do { \
786     __asm__ __volatile__ ( \
787     - "1:\t"user_lwl("%0", "(%2)")"\n" \
788     - "2:\t"user_lwr("%0", "3(%2)")"\n\t" \
789     + "1:\t"type##_lwl("%0", "(%2)")"\n" \
790     + "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
791     "li\t%1, 0\n" \
792     "3:\n\t" \
793     ".insn\n\t" \
794     @@ -146,21 +149,24 @@ extern void show_registers(struct pt_regs *regs);
795     STR(PTR)"\t2b, 4b\n\t" \
796     ".previous" \
797     : "=&r" (value), "=r" (res) \
798     - : "r" (addr), "i" (-EFAULT));
799     + : "r" (addr), "i" (-EFAULT)); \
800     +} while(0)
801     +
802     #else
803     /* MIPSR6 has no lwl instruction */
804     -#define LoadW(addr, value, res) \
805     +#define _LoadW(addr, value, res, type) \
806     +do { \
807     __asm__ __volatile__ ( \
808     ".set\tpush\n" \
809     ".set\tnoat\n\t" \
810     - "1:"user_lb("%0", "0(%2)")"\n\t" \
811     - "2:"user_lbu("$1", "1(%2)")"\n\t" \
812     + "1:"type##_lb("%0", "0(%2)")"\n\t" \
813     + "2:"type##_lbu("$1", "1(%2)")"\n\t" \
814     "sll\t%0, 0x8\n\t" \
815     "or\t%0, $1\n\t" \
816     - "3:"user_lbu("$1", "2(%2)")"\n\t" \
817     + "3:"type##_lbu("$1", "2(%2)")"\n\t" \
818     "sll\t%0, 0x8\n\t" \
819     "or\t%0, $1\n\t" \
820     - "4:"user_lbu("$1", "3(%2)")"\n\t" \
821     + "4:"type##_lbu("$1", "3(%2)")"\n\t" \
822     "sll\t%0, 0x8\n\t" \
823     "or\t%0, $1\n\t" \
824     "li\t%1, 0\n" \
825     @@ -178,14 +184,17 @@ extern void show_registers(struct pt_regs *regs);
826     STR(PTR)"\t4b, 11b\n\t" \
827     ".previous" \
828     : "=&r" (value), "=r" (res) \
829     - : "r" (addr), "i" (-EFAULT));
830     + : "r" (addr), "i" (-EFAULT)); \
831     +} while(0)
832     +
833     #endif /* CONFIG_CPU_MIPSR6 */
834    
835     -#define LoadHWU(addr, value, res) \
836     +#define _LoadHWU(addr, value, res, type) \
837     +do { \
838     __asm__ __volatile__ ( \
839     ".set\tnoat\n" \
840     - "1:\t"user_lbu("%0", "0(%2)")"\n" \
841     - "2:\t"user_lbu("$1", "1(%2)")"\n\t" \
842     + "1:\t"type##_lbu("%0", "0(%2)")"\n" \
843     + "2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
844     "sll\t%0, 0x8\n\t" \
845     "or\t%0, $1\n\t" \
846     "li\t%1, 0\n" \
847     @@ -201,13 +210,15 @@ extern void show_registers(struct pt_regs *regs);
848     STR(PTR)"\t2b, 4b\n\t" \
849     ".previous" \
850     : "=&r" (value), "=r" (res) \
851     - : "r" (addr), "i" (-EFAULT));
852     + : "r" (addr), "i" (-EFAULT)); \
853     +} while(0)
854    
855     #ifndef CONFIG_CPU_MIPSR6
856     -#define LoadWU(addr, value, res) \
857     +#define _LoadWU(addr, value, res, type) \
858     +do { \
859     __asm__ __volatile__ ( \
860     - "1:\t"user_lwl("%0", "(%2)")"\n" \
861     - "2:\t"user_lwr("%0", "3(%2)")"\n\t" \
862     + "1:\t"type##_lwl("%0", "(%2)")"\n" \
863     + "2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
864     "dsll\t%0, %0, 32\n\t" \
865     "dsrl\t%0, %0, 32\n\t" \
866     "li\t%1, 0\n" \
867     @@ -222,9 +233,11 @@ extern void show_registers(struct pt_regs *regs);
868     STR(PTR)"\t2b, 4b\n\t" \
869     ".previous" \
870     : "=&r" (value), "=r" (res) \
871     - : "r" (addr), "i" (-EFAULT));
872     + : "r" (addr), "i" (-EFAULT)); \
873     +} while(0)
874    
875     -#define LoadDW(addr, value, res) \
876     +#define _LoadDW(addr, value, res) \
877     +do { \
878     __asm__ __volatile__ ( \
879     "1:\tldl\t%0, (%2)\n" \
880     "2:\tldr\t%0, 7(%2)\n\t" \
881     @@ -240,21 +253,24 @@ extern void show_registers(struct pt_regs *regs);
882     STR(PTR)"\t2b, 4b\n\t" \
883     ".previous" \
884     : "=&r" (value), "=r" (res) \
885     - : "r" (addr), "i" (-EFAULT));
886     + : "r" (addr), "i" (-EFAULT)); \
887     +} while(0)
888     +
889     #else
890     /* MIPSR6 has not lwl and ldl instructions */
891     -#define LoadWU(addr, value, res) \
892     +#define _LoadWU(addr, value, res, type) \
893     +do { \
894     __asm__ __volatile__ ( \
895     ".set\tpush\n\t" \
896     ".set\tnoat\n\t" \
897     - "1:"user_lbu("%0", "0(%2)")"\n\t" \
898     - "2:"user_lbu("$1", "1(%2)")"\n\t" \
899     + "1:"type##_lbu("%0", "0(%2)")"\n\t" \
900     + "2:"type##_lbu("$1", "1(%2)")"\n\t" \
901     "sll\t%0, 0x8\n\t" \
902     "or\t%0, $1\n\t" \
903     - "3:"user_lbu("$1", "2(%2)")"\n\t" \
904     + "3:"type##_lbu("$1", "2(%2)")"\n\t" \
905     "sll\t%0, 0x8\n\t" \
906     "or\t%0, $1\n\t" \
907     - "4:"user_lbu("$1", "3(%2)")"\n\t" \
908     + "4:"type##_lbu("$1", "3(%2)")"\n\t" \
909     "sll\t%0, 0x8\n\t" \
910     "or\t%0, $1\n\t" \
911     "li\t%1, 0\n" \
912     @@ -272,9 +288,11 @@ extern void show_registers(struct pt_regs *regs);
913     STR(PTR)"\t4b, 11b\n\t" \
914     ".previous" \
915     : "=&r" (value), "=r" (res) \
916     - : "r" (addr), "i" (-EFAULT));
917     + : "r" (addr), "i" (-EFAULT)); \
918     +} while(0)
919    
920     -#define LoadDW(addr, value, res) \
921     +#define _LoadDW(addr, value, res) \
922     +do { \
923     __asm__ __volatile__ ( \
924     ".set\tpush\n\t" \
925     ".set\tnoat\n\t" \
926     @@ -319,16 +337,19 @@ extern void show_registers(struct pt_regs *regs);
927     STR(PTR)"\t8b, 11b\n\t" \
928     ".previous" \
929     : "=&r" (value), "=r" (res) \
930     - : "r" (addr), "i" (-EFAULT));
931     + : "r" (addr), "i" (-EFAULT)); \
932     +} while(0)
933     +
934     #endif /* CONFIG_CPU_MIPSR6 */
935    
936    
937     -#define StoreHW(addr, value, res) \
938     +#define _StoreHW(addr, value, res, type) \
939     +do { \
940     __asm__ __volatile__ ( \
941     ".set\tnoat\n" \
942     - "1:\t"user_sb("%1", "1(%2)")"\n" \
943     + "1:\t"type##_sb("%1", "1(%2)")"\n" \
944     "srl\t$1, %1, 0x8\n" \
945     - "2:\t"user_sb("$1", "0(%2)")"\n" \
946     + "2:\t"type##_sb("$1", "0(%2)")"\n" \
947     ".set\tat\n\t" \
948     "li\t%0, 0\n" \
949     "3:\n\t" \
950     @@ -342,13 +363,15 @@ extern void show_registers(struct pt_regs *regs);
951     STR(PTR)"\t2b, 4b\n\t" \
952     ".previous" \
953     : "=r" (res) \
954     - : "r" (value), "r" (addr), "i" (-EFAULT));
955     + : "r" (value), "r" (addr), "i" (-EFAULT));\
956     +} while(0)
957    
958     #ifndef CONFIG_CPU_MIPSR6
959     -#define StoreW(addr, value, res) \
960     +#define _StoreW(addr, value, res, type) \
961     +do { \
962     __asm__ __volatile__ ( \
963     - "1:\t"user_swl("%1", "(%2)")"\n" \
964     - "2:\t"user_swr("%1", "3(%2)")"\n\t" \
965     + "1:\t"type##_swl("%1", "(%2)")"\n" \
966     + "2:\t"type##_swr("%1", "3(%2)")"\n\t"\
967     "li\t%0, 0\n" \
968     "3:\n\t" \
969     ".insn\n\t" \
970     @@ -361,9 +384,11 @@ extern void show_registers(struct pt_regs *regs);
971     STR(PTR)"\t2b, 4b\n\t" \
972     ".previous" \
973     : "=r" (res) \
974     - : "r" (value), "r" (addr), "i" (-EFAULT));
975     + : "r" (value), "r" (addr), "i" (-EFAULT)); \
976     +} while(0)
977    
978     -#define StoreDW(addr, value, res) \
979     +#define _StoreDW(addr, value, res) \
980     +do { \
981     __asm__ __volatile__ ( \
982     "1:\tsdl\t%1,(%2)\n" \
983     "2:\tsdr\t%1, 7(%2)\n\t" \
984     @@ -379,20 +404,23 @@ extern void show_registers(struct pt_regs *regs);
985     STR(PTR)"\t2b, 4b\n\t" \
986     ".previous" \
987     : "=r" (res) \
988     - : "r" (value), "r" (addr), "i" (-EFAULT));
989     + : "r" (value), "r" (addr), "i" (-EFAULT)); \
990     +} while(0)
991     +
992     #else
993     /* MIPSR6 has no swl and sdl instructions */
994     -#define StoreW(addr, value, res) \
995     +#define _StoreW(addr, value, res, type) \
996     +do { \
997     __asm__ __volatile__ ( \
998     ".set\tpush\n\t" \
999     ".set\tnoat\n\t" \
1000     - "1:"user_sb("%1", "3(%2)")"\n\t" \
1001     + "1:"type##_sb("%1", "3(%2)")"\n\t" \
1002     "srl\t$1, %1, 0x8\n\t" \
1003     - "2:"user_sb("$1", "2(%2)")"\n\t" \
1004     + "2:"type##_sb("$1", "2(%2)")"\n\t" \
1005     "srl\t$1, $1, 0x8\n\t" \
1006     - "3:"user_sb("$1", "1(%2)")"\n\t" \
1007     + "3:"type##_sb("$1", "1(%2)")"\n\t" \
1008     "srl\t$1, $1, 0x8\n\t" \
1009     - "4:"user_sb("$1", "0(%2)")"\n\t" \
1010     + "4:"type##_sb("$1", "0(%2)")"\n\t" \
1011     ".set\tpop\n\t" \
1012     "li\t%0, 0\n" \
1013     "10:\n\t" \
1014     @@ -409,9 +437,11 @@ extern void show_registers(struct pt_regs *regs);
1015     ".previous" \
1016     : "=&r" (res) \
1017     : "r" (value), "r" (addr), "i" (-EFAULT) \
1018     - : "memory");
1019     + : "memory"); \
1020     +} while(0)
1021    
1022     #define StoreDW(addr, value, res) \
1023     +do { \
1024     __asm__ __volatile__ ( \
1025     ".set\tpush\n\t" \
1026     ".set\tnoat\n\t" \
1027     @@ -451,15 +481,18 @@ extern void show_registers(struct pt_regs *regs);
1028     ".previous" \
1029     : "=&r" (res) \
1030     : "r" (value), "r" (addr), "i" (-EFAULT) \
1031     - : "memory");
1032     + : "memory"); \
1033     +} while(0)
1034     +
1035     #endif /* CONFIG_CPU_MIPSR6 */
1036    
1037     #else /* __BIG_ENDIAN */
1038    
1039     -#define LoadHW(addr, value, res) \
1040     +#define _LoadHW(addr, value, res, type) \
1041     +do { \
1042     __asm__ __volatile__ (".set\tnoat\n" \
1043     - "1:\t"user_lb("%0", "1(%2)")"\n" \
1044     - "2:\t"user_lbu("$1", "0(%2)")"\n\t" \
1045     + "1:\t"type##_lb("%0", "1(%2)")"\n" \
1046     + "2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
1047     "sll\t%0, 0x8\n\t" \
1048     "or\t%0, $1\n\t" \
1049     "li\t%1, 0\n" \
1050     @@ -474,13 +507,15 @@ extern void show_registers(struct pt_regs *regs);
1051     STR(PTR)"\t2b, 4b\n\t" \
1052     ".previous" \
1053     : "=&r" (value), "=r" (res) \
1054     - : "r" (addr), "i" (-EFAULT));
1055     + : "r" (addr), "i" (-EFAULT)); \
1056     +} while(0)
1057    
1058     #ifndef CONFIG_CPU_MIPSR6
1059     -#define LoadW(addr, value, res) \
1060     +#define _LoadW(addr, value, res, type) \
1061     +do { \
1062     __asm__ __volatile__ ( \
1063     - "1:\t"user_lwl("%0", "3(%2)")"\n" \
1064     - "2:\t"user_lwr("%0", "(%2)")"\n\t" \
1065     + "1:\t"type##_lwl("%0", "3(%2)")"\n" \
1066     + "2:\t"type##_lwr("%0", "(%2)")"\n\t"\
1067     "li\t%1, 0\n" \
1068     "3:\n\t" \
1069     ".insn\n\t" \
1070     @@ -493,21 +528,24 @@ extern void show_registers(struct pt_regs *regs);
1071     STR(PTR)"\t2b, 4b\n\t" \
1072     ".previous" \
1073     : "=&r" (value), "=r" (res) \
1074     - : "r" (addr), "i" (-EFAULT));
1075     + : "r" (addr), "i" (-EFAULT)); \
1076     +} while(0)
1077     +
1078     #else
1079     /* MIPSR6 has no lwl instruction */
1080     -#define LoadW(addr, value, res) \
1081     +#define _LoadW(addr, value, res, type) \
1082     +do { \
1083     __asm__ __volatile__ ( \
1084     ".set\tpush\n" \
1085     ".set\tnoat\n\t" \
1086     - "1:"user_lb("%0", "3(%2)")"\n\t" \
1087     - "2:"user_lbu("$1", "2(%2)")"\n\t" \
1088     + "1:"type##_lb("%0", "3(%2)")"\n\t" \
1089     + "2:"type##_lbu("$1", "2(%2)")"\n\t" \
1090     "sll\t%0, 0x8\n\t" \
1091     "or\t%0, $1\n\t" \
1092     - "3:"user_lbu("$1", "1(%2)")"\n\t" \
1093     + "3:"type##_lbu("$1", "1(%2)")"\n\t" \
1094     "sll\t%0, 0x8\n\t" \
1095     "or\t%0, $1\n\t" \
1096     - "4:"user_lbu("$1", "0(%2)")"\n\t" \
1097     + "4:"type##_lbu("$1", "0(%2)")"\n\t" \
1098     "sll\t%0, 0x8\n\t" \
1099     "or\t%0, $1\n\t" \
1100     "li\t%1, 0\n" \
1101     @@ -525,15 +563,18 @@ extern void show_registers(struct pt_regs *regs);
1102     STR(PTR)"\t4b, 11b\n\t" \
1103     ".previous" \
1104     : "=&r" (value), "=r" (res) \
1105     - : "r" (addr), "i" (-EFAULT));
1106     + : "r" (addr), "i" (-EFAULT)); \
1107     +} while(0)
1108     +
1109     #endif /* CONFIG_CPU_MIPSR6 */
1110    
1111    
1112     -#define LoadHWU(addr, value, res) \
1113     +#define _LoadHWU(addr, value, res, type) \
1114     +do { \
1115     __asm__ __volatile__ ( \
1116     ".set\tnoat\n" \
1117     - "1:\t"user_lbu("%0", "1(%2)")"\n" \
1118     - "2:\t"user_lbu("$1", "0(%2)")"\n\t" \
1119     + "1:\t"type##_lbu("%0", "1(%2)")"\n" \
1120     + "2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
1121     "sll\t%0, 0x8\n\t" \
1122     "or\t%0, $1\n\t" \
1123     "li\t%1, 0\n" \
1124     @@ -549,13 +590,15 @@ extern void show_registers(struct pt_regs *regs);
1125     STR(PTR)"\t2b, 4b\n\t" \
1126     ".previous" \
1127     : "=&r" (value), "=r" (res) \
1128     - : "r" (addr), "i" (-EFAULT));
1129     + : "r" (addr), "i" (-EFAULT)); \
1130     +} while(0)
1131    
1132     #ifndef CONFIG_CPU_MIPSR6
1133     -#define LoadWU(addr, value, res) \
1134     +#define _LoadWU(addr, value, res, type) \
1135     +do { \
1136     __asm__ __volatile__ ( \
1137     - "1:\t"user_lwl("%0", "3(%2)")"\n" \
1138     - "2:\t"user_lwr("%0", "(%2)")"\n\t" \
1139     + "1:\t"type##_lwl("%0", "3(%2)")"\n" \
1140     + "2:\t"type##_lwr("%0", "(%2)")"\n\t"\
1141     "dsll\t%0, %0, 32\n\t" \
1142     "dsrl\t%0, %0, 32\n\t" \
1143     "li\t%1, 0\n" \
1144     @@ -570,9 +613,11 @@ extern void show_registers(struct pt_regs *regs);
1145     STR(PTR)"\t2b, 4b\n\t" \
1146     ".previous" \
1147     : "=&r" (value), "=r" (res) \
1148     - : "r" (addr), "i" (-EFAULT));
1149     + : "r" (addr), "i" (-EFAULT)); \
1150     +} while(0)
1151    
1152     -#define LoadDW(addr, value, res) \
1153     +#define _LoadDW(addr, value, res) \
1154     +do { \
1155     __asm__ __volatile__ ( \
1156     "1:\tldl\t%0, 7(%2)\n" \
1157     "2:\tldr\t%0, (%2)\n\t" \
1158     @@ -588,21 +633,24 @@ extern void show_registers(struct pt_regs *regs);
1159     STR(PTR)"\t2b, 4b\n\t" \
1160     ".previous" \
1161     : "=&r" (value), "=r" (res) \
1162     - : "r" (addr), "i" (-EFAULT));
1163     + : "r" (addr), "i" (-EFAULT)); \
1164     +} while(0)
1165     +
1166     #else
1167     /* MIPSR6 has not lwl and ldl instructions */
1168     -#define LoadWU(addr, value, res) \
1169     +#define _LoadWU(addr, value, res, type) \
1170     +do { \
1171     __asm__ __volatile__ ( \
1172     ".set\tpush\n\t" \
1173     ".set\tnoat\n\t" \
1174     - "1:"user_lbu("%0", "3(%2)")"\n\t" \
1175     - "2:"user_lbu("$1", "2(%2)")"\n\t" \
1176     + "1:"type##_lbu("%0", "3(%2)")"\n\t" \
1177     + "2:"type##_lbu("$1", "2(%2)")"\n\t" \
1178     "sll\t%0, 0x8\n\t" \
1179     "or\t%0, $1\n\t" \
1180     - "3:"user_lbu("$1", "1(%2)")"\n\t" \
1181     + "3:"type##_lbu("$1", "1(%2)")"\n\t" \
1182     "sll\t%0, 0x8\n\t" \
1183     "or\t%0, $1\n\t" \
1184     - "4:"user_lbu("$1", "0(%2)")"\n\t" \
1185     + "4:"type##_lbu("$1", "0(%2)")"\n\t" \
1186     "sll\t%0, 0x8\n\t" \
1187     "or\t%0, $1\n\t" \
1188     "li\t%1, 0\n" \
1189     @@ -620,9 +668,11 @@ extern void show_registers(struct pt_regs *regs);
1190     STR(PTR)"\t4b, 11b\n\t" \
1191     ".previous" \
1192     : "=&r" (value), "=r" (res) \
1193     - : "r" (addr), "i" (-EFAULT));
1194     + : "r" (addr), "i" (-EFAULT)); \
1195     +} while(0)
1196    
1197     -#define LoadDW(addr, value, res) \
1198     +#define _LoadDW(addr, value, res) \
1199     +do { \
1200     __asm__ __volatile__ ( \
1201     ".set\tpush\n\t" \
1202     ".set\tnoat\n\t" \
1203     @@ -667,15 +717,17 @@ extern void show_registers(struct pt_regs *regs);
1204     STR(PTR)"\t8b, 11b\n\t" \
1205     ".previous" \
1206     : "=&r" (value), "=r" (res) \
1207     - : "r" (addr), "i" (-EFAULT));
1208     + : "r" (addr), "i" (-EFAULT)); \
1209     +} while(0)
1210     #endif /* CONFIG_CPU_MIPSR6 */
1211    
1212     -#define StoreHW(addr, value, res) \
1213     +#define _StoreHW(addr, value, res, type) \
1214     +do { \
1215     __asm__ __volatile__ ( \
1216     ".set\tnoat\n" \
1217     - "1:\t"user_sb("%1", "0(%2)")"\n" \
1218     + "1:\t"type##_sb("%1", "0(%2)")"\n" \
1219     "srl\t$1,%1, 0x8\n" \
1220     - "2:\t"user_sb("$1", "1(%2)")"\n" \
1221     + "2:\t"type##_sb("$1", "1(%2)")"\n" \
1222     ".set\tat\n\t" \
1223     "li\t%0, 0\n" \
1224     "3:\n\t" \
1225     @@ -689,12 +741,15 @@ extern void show_registers(struct pt_regs *regs);
1226     STR(PTR)"\t2b, 4b\n\t" \
1227     ".previous" \
1228     : "=r" (res) \
1229     - : "r" (value), "r" (addr), "i" (-EFAULT));
1230     + : "r" (value), "r" (addr), "i" (-EFAULT));\
1231     +} while(0)
1232     +
1233     #ifndef CONFIG_CPU_MIPSR6
1234     -#define StoreW(addr, value, res) \
1235     +#define _StoreW(addr, value, res, type) \
1236     +do { \
1237     __asm__ __volatile__ ( \
1238     - "1:\t"user_swl("%1", "3(%2)")"\n" \
1239     - "2:\t"user_swr("%1", "(%2)")"\n\t" \
1240     + "1:\t"type##_swl("%1", "3(%2)")"\n" \
1241     + "2:\t"type##_swr("%1", "(%2)")"\n\t"\
1242     "li\t%0, 0\n" \
1243     "3:\n\t" \
1244     ".insn\n\t" \
1245     @@ -707,9 +762,11 @@ extern void show_registers(struct pt_regs *regs);
1246     STR(PTR)"\t2b, 4b\n\t" \
1247     ".previous" \
1248     : "=r" (res) \
1249     - : "r" (value), "r" (addr), "i" (-EFAULT));
1250     + : "r" (value), "r" (addr), "i" (-EFAULT)); \
1251     +} while(0)
1252    
1253     -#define StoreDW(addr, value, res) \
1254     +#define _StoreDW(addr, value, res) \
1255     +do { \
1256     __asm__ __volatile__ ( \
1257     "1:\tsdl\t%1, 7(%2)\n" \
1258     "2:\tsdr\t%1, (%2)\n\t" \
1259     @@ -725,20 +782,23 @@ extern void show_registers(struct pt_regs *regs);
1260     STR(PTR)"\t2b, 4b\n\t" \
1261     ".previous" \
1262     : "=r" (res) \
1263     - : "r" (value), "r" (addr), "i" (-EFAULT));
1264     + : "r" (value), "r" (addr), "i" (-EFAULT)); \
1265     +} while(0)
1266     +
1267     #else
1268     /* MIPSR6 has no swl and sdl instructions */
1269     -#define StoreW(addr, value, res) \
1270     +#define _StoreW(addr, value, res, type) \
1271     +do { \
1272     __asm__ __volatile__ ( \
1273     ".set\tpush\n\t" \
1274     ".set\tnoat\n\t" \
1275     - "1:"user_sb("%1", "0(%2)")"\n\t" \
1276     + "1:"type##_sb("%1", "0(%2)")"\n\t" \
1277     "srl\t$1, %1, 0x8\n\t" \
1278     - "2:"user_sb("$1", "1(%2)")"\n\t" \
1279     + "2:"type##_sb("$1", "1(%2)")"\n\t" \
1280     "srl\t$1, $1, 0x8\n\t" \
1281     - "3:"user_sb("$1", "2(%2)")"\n\t" \
1282     + "3:"type##_sb("$1", "2(%2)")"\n\t" \
1283     "srl\t$1, $1, 0x8\n\t" \
1284     - "4:"user_sb("$1", "3(%2)")"\n\t" \
1285     + "4:"type##_sb("$1", "3(%2)")"\n\t" \
1286     ".set\tpop\n\t" \
1287     "li\t%0, 0\n" \
1288     "10:\n\t" \
1289     @@ -755,9 +815,11 @@ extern void show_registers(struct pt_regs *regs);
1290     ".previous" \
1291     : "=&r" (res) \
1292     : "r" (value), "r" (addr), "i" (-EFAULT) \
1293     - : "memory");
1294     + : "memory"); \
1295     +} while(0)
1296    
1297     -#define StoreDW(addr, value, res) \
1298     +#define _StoreDW(addr, value, res) \
1299     +do { \
1300     __asm__ __volatile__ ( \
1301     ".set\tpush\n\t" \
1302     ".set\tnoat\n\t" \
1303     @@ -797,10 +859,28 @@ extern void show_registers(struct pt_regs *regs);
1304     ".previous" \
1305     : "=&r" (res) \
1306     : "r" (value), "r" (addr), "i" (-EFAULT) \
1307     - : "memory");
1308     + : "memory"); \
1309     +} while(0)
1310     +
1311     #endif /* CONFIG_CPU_MIPSR6 */
1312     #endif
1313    
1314     +#define LoadHWU(addr, value, res) _LoadHWU(addr, value, res, kernel)
1315     +#define LoadHWUE(addr, value, res) _LoadHWU(addr, value, res, user)
1316     +#define LoadWU(addr, value, res) _LoadWU(addr, value, res, kernel)
1317     +#define LoadWUE(addr, value, res) _LoadWU(addr, value, res, user)
1318     +#define LoadHW(addr, value, res) _LoadHW(addr, value, res, kernel)
1319     +#define LoadHWE(addr, value, res) _LoadHW(addr, value, res, user)
1320     +#define LoadW(addr, value, res) _LoadW(addr, value, res, kernel)
1321     +#define LoadWE(addr, value, res) _LoadW(addr, value, res, user)
1322     +#define LoadDW(addr, value, res) _LoadDW(addr, value, res)
1323     +
1324     +#define StoreHW(addr, value, res) _StoreHW(addr, value, res, kernel)
1325     +#define StoreHWE(addr, value, res) _StoreHW(addr, value, res, user)
1326     +#define StoreW(addr, value, res) _StoreW(addr, value, res, kernel)
1327     +#define StoreWE(addr, value, res) _StoreW(addr, value, res, user)
1328     +#define StoreDW(addr, value, res) _StoreDW(addr, value, res)
1329     +
1330     static void emulate_load_store_insn(struct pt_regs *regs,
1331     void __user *addr, unsigned int __user *pc)
1332     {
1333     @@ -872,7 +952,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1334     set_fs(seg);
1335     goto sigbus;
1336     }
1337     - LoadHW(addr, value, res);
1338     + LoadHWE(addr, value, res);
1339     if (res) {
1340     set_fs(seg);
1341     goto fault;
1342     @@ -885,7 +965,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1343     set_fs(seg);
1344     goto sigbus;
1345     }
1346     - LoadW(addr, value, res);
1347     + LoadWE(addr, value, res);
1348     if (res) {
1349     set_fs(seg);
1350     goto fault;
1351     @@ -898,7 +978,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1352     set_fs(seg);
1353     goto sigbus;
1354     }
1355     - LoadHWU(addr, value, res);
1356     + LoadHWUE(addr, value, res);
1357     if (res) {
1358     set_fs(seg);
1359     goto fault;
1360     @@ -913,7 +993,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1361     }
1362     compute_return_epc(regs);
1363     value = regs->regs[insn.spec3_format.rt];
1364     - StoreHW(addr, value, res);
1365     + StoreHWE(addr, value, res);
1366     if (res) {
1367     set_fs(seg);
1368     goto fault;
1369     @@ -926,7 +1006,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1370     }
1371     compute_return_epc(regs);
1372     value = regs->regs[insn.spec3_format.rt];
1373     - StoreW(addr, value, res);
1374     + StoreWE(addr, value, res);
1375     if (res) {
1376     set_fs(seg);
1377     goto fault;
1378     @@ -943,7 +1023,15 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1379     if (!access_ok(VERIFY_READ, addr, 2))
1380     goto sigbus;
1381    
1382     - LoadHW(addr, value, res);
1383     + if (config_enabled(CONFIG_EVA)) {
1384     + if (segment_eq(get_fs(), get_ds()))
1385     + LoadHW(addr, value, res);
1386     + else
1387     + LoadHWE(addr, value, res);
1388     + } else {
1389     + LoadHW(addr, value, res);
1390     + }
1391     +
1392     if (res)
1393     goto fault;
1394     compute_return_epc(regs);
1395     @@ -954,7 +1042,15 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1396     if (!access_ok(VERIFY_READ, addr, 4))
1397     goto sigbus;
1398    
1399     - LoadW(addr, value, res);
1400     + if (config_enabled(CONFIG_EVA)) {
1401     + if (segment_eq(get_fs(), get_ds()))
1402     + LoadW(addr, value, res);
1403     + else
1404     + LoadWE(addr, value, res);
1405     + } else {
1406     + LoadW(addr, value, res);
1407     + }
1408     +
1409     if (res)
1410     goto fault;
1411     compute_return_epc(regs);
1412     @@ -965,7 +1061,15 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1413     if (!access_ok(VERIFY_READ, addr, 2))
1414     goto sigbus;
1415    
1416     - LoadHWU(addr, value, res);
1417     + if (config_enabled(CONFIG_EVA)) {
1418     + if (segment_eq(get_fs(), get_ds()))
1419     + LoadHWU(addr, value, res);
1420     + else
1421     + LoadHWUE(addr, value, res);
1422     + } else {
1423     + LoadHWU(addr, value, res);
1424     + }
1425     +
1426     if (res)
1427     goto fault;
1428     compute_return_epc(regs);
1429     @@ -1024,7 +1128,16 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1430    
1431     compute_return_epc(regs);
1432     value = regs->regs[insn.i_format.rt];
1433     - StoreHW(addr, value, res);
1434     +
1435     + if (config_enabled(CONFIG_EVA)) {
1436     + if (segment_eq(get_fs(), get_ds()))
1437     + StoreHW(addr, value, res);
1438     + else
1439     + StoreHWE(addr, value, res);
1440     + } else {
1441     + StoreHW(addr, value, res);
1442     + }
1443     +
1444     if (res)
1445     goto fault;
1446     break;
1447     @@ -1035,7 +1148,16 @@ static void emulate_load_store_insn(struct pt_regs *regs,
1448    
1449     compute_return_epc(regs);
1450     value = regs->regs[insn.i_format.rt];
1451     - StoreW(addr, value, res);
1452     +
1453     + if (config_enabled(CONFIG_EVA)) {
1454     + if (segment_eq(get_fs(), get_ds()))
1455     + StoreW(addr, value, res);
1456     + else
1457     + StoreWE(addr, value, res);
1458     + } else {
1459     + StoreW(addr, value, res);
1460     + }
1461     +
1462     if (res)
1463     goto fault;
1464     break;
1465     diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c
1466     index fb3e8dfd1ff6..838d3a6a5b7d 100644
1467     --- a/arch/mips/kvm/emulate.c
1468     +++ b/arch/mips/kvm/emulate.c
1469     @@ -2176,6 +2176,7 @@ enum emulation_result kvm_mips_check_privilege(unsigned long cause,
1470     case T_SYSCALL:
1471     case T_BREAK:
1472     case T_RES_INST:
1473     + case T_MSADIS:
1474     break;
1475    
1476     case T_COP_UNUSABLE:
1477     diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
1478     index c9eccf5df912..f5e7ddab02f7 100644
1479     --- a/arch/mips/kvm/mips.c
1480     +++ b/arch/mips/kvm/mips.c
1481     @@ -1119,6 +1119,10 @@ int kvm_mips_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu)
1482     ret = kvm_mips_callbacks->handle_break(vcpu);
1483     break;
1484    
1485     + case T_MSADIS:
1486     + ret = kvm_mips_callbacks->handle_msa_disabled(vcpu);
1487     + break;
1488     +
1489     default:
1490     kvm_err("Exception Code: %d, not yet handled, @ PC: %p, inst: 0x%08x BadVaddr: %#lx Status: %#lx\n",
1491     exccode, opc, kvm_get_inst(opc, vcpu), badvaddr,
1492     diff --git a/arch/mips/kvm/trap_emul.c b/arch/mips/kvm/trap_emul.c
1493     index fd7257b70e65..4372cc86650c 100644
1494     --- a/arch/mips/kvm/trap_emul.c
1495     +++ b/arch/mips/kvm/trap_emul.c
1496     @@ -330,6 +330,33 @@ static int kvm_trap_emul_handle_break(struct kvm_vcpu *vcpu)
1497     return ret;
1498     }
1499    
1500     +static int kvm_trap_emul_handle_msa_disabled(struct kvm_vcpu *vcpu)
1501     +{
1502     + struct kvm_run *run = vcpu->run;
1503     + uint32_t __user *opc = (uint32_t __user *) vcpu->arch.pc;
1504     + unsigned long cause = vcpu->arch.host_cp0_cause;
1505     + enum emulation_result er = EMULATE_DONE;
1506     + int ret = RESUME_GUEST;
1507     +
1508     + /* No MSA supported in guest, guest reserved instruction exception */
1509     + er = kvm_mips_emulate_ri_exc(cause, opc, run, vcpu);
1510     +
1511     + switch (er) {
1512     + case EMULATE_DONE:
1513     + ret = RESUME_GUEST;
1514     + break;
1515     +
1516     + case EMULATE_FAIL:
1517     + run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
1518     + ret = RESUME_HOST;
1519     + break;
1520     +
1521     + default:
1522     + BUG();
1523     + }
1524     + return ret;
1525     +}
1526     +
1527     static int kvm_trap_emul_vm_init(struct kvm *kvm)
1528     {
1529     return 0;
1530     @@ -470,6 +497,7 @@ static struct kvm_mips_callbacks kvm_trap_emul_callbacks = {
1531     .handle_syscall = kvm_trap_emul_handle_syscall,
1532     .handle_res_inst = kvm_trap_emul_handle_res_inst,
1533     .handle_break = kvm_trap_emul_handle_break,
1534     + .handle_msa_disabled = kvm_trap_emul_handle_msa_disabled,
1535    
1536     .vm_init = kvm_trap_emul_vm_init,
1537     .vcpu_init = kvm_trap_emul_vcpu_init,
1538     diff --git a/arch/mips/loongson/loongson-3/irq.c b/arch/mips/loongson/loongson-3/irq.c
1539     index 21221edda7a9..0f75b6b3d218 100644
1540     --- a/arch/mips/loongson/loongson-3/irq.c
1541     +++ b/arch/mips/loongson/loongson-3/irq.c
1542     @@ -44,6 +44,7 @@ void mach_irq_dispatch(unsigned int pending)
1543    
1544     static struct irqaction cascade_irqaction = {
1545     .handler = no_action,
1546     + .flags = IRQF_NO_SUSPEND,
1547     .name = "cascade",
1548     };
1549    
1550     diff --git a/arch/mips/mti-malta/malta-memory.c b/arch/mips/mti-malta/malta-memory.c
1551     index 8fddd2cdbff7..efe366d618b1 100644
1552     --- a/arch/mips/mti-malta/malta-memory.c
1553     +++ b/arch/mips/mti-malta/malta-memory.c
1554     @@ -53,6 +53,12 @@ fw_memblock_t * __init fw_getmdesc(int eva)
1555     pr_warn("memsize not set in YAMON, set to default (32Mb)\n");
1556     physical_memsize = 0x02000000;
1557     } else {
1558     + if (memsize > (256 << 20)) { /* memsize should be capped to 256M */
1559     + pr_warn("Unsupported memsize value (0x%lx) detected! "
1560     + "Using 0x10000000 (256M) instead\n",
1561     + memsize);
1562     + memsize = 256 << 20;
1563     + }
1564     /* If ememsize is set, then set physical_memsize to that */
1565     physical_memsize = ememsize ? : memsize;
1566     }
1567     diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S
1568     index 32a7c828f073..e7567c8a9e79 100644
1569     --- a/arch/mips/power/hibernate.S
1570     +++ b/arch/mips/power/hibernate.S
1571     @@ -30,6 +30,8 @@ LEAF(swsusp_arch_suspend)
1572     END(swsusp_arch_suspend)
1573    
1574     LEAF(swsusp_arch_resume)
1575     + /* Avoid TLB mismatch during and after kernel resume */
1576     + jal local_flush_tlb_all
1577     PTR_L t0, restore_pblist
1578     0:
1579     PTR_L t1, PBE_ADDRESS(t0) /* source */
1580     @@ -43,7 +45,6 @@ LEAF(swsusp_arch_resume)
1581     bne t1, t3, 1b
1582     PTR_L t0, PBE_NEXT(t0)
1583     bnez t0, 0b
1584     - jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */
1585     PTR_LA t0, saved_regs
1586     PTR_L ra, PT_R31(t0)
1587     PTR_L sp, PT_R29(t0)
1588     diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c
1589     index ae77b7e59889..c641983bbdd6 100644
1590     --- a/arch/powerpc/kernel/cacheinfo.c
1591     +++ b/arch/powerpc/kernel/cacheinfo.c
1592     @@ -61,12 +61,22 @@ struct cache_type_info {
1593     };
1594    
1595     /* These are used to index the cache_type_info array. */
1596     -#define CACHE_TYPE_UNIFIED 0
1597     -#define CACHE_TYPE_INSTRUCTION 1
1598     -#define CACHE_TYPE_DATA 2
1599     +#define CACHE_TYPE_UNIFIED 0 /* cache-size, cache-block-size, etc. */
1600     +#define CACHE_TYPE_UNIFIED_D 1 /* d-cache-size, d-cache-block-size, etc */
1601     +#define CACHE_TYPE_INSTRUCTION 2
1602     +#define CACHE_TYPE_DATA 3
1603    
1604     static const struct cache_type_info cache_type_info[] = {
1605     {
1606     + /* Embedded systems that use cache-size, cache-block-size,
1607     + * etc. for the Unified (typically L2) cache. */
1608     + .name = "Unified",
1609     + .size_prop = "cache-size",
1610     + .line_size_props = { "cache-line-size",
1611     + "cache-block-size", },
1612     + .nr_sets_prop = "cache-sets",
1613     + },
1614     + {
1615     /* PowerPC Processor binding says the [di]-cache-*
1616     * must be equal on unified caches, so just use
1617     * d-cache properties. */
1618     @@ -293,7 +303,8 @@ static struct cache *cache_find_first_sibling(struct cache *cache)
1619     {
1620     struct cache *iter;
1621    
1622     - if (cache->type == CACHE_TYPE_UNIFIED)
1623     + if (cache->type == CACHE_TYPE_UNIFIED ||
1624     + cache->type == CACHE_TYPE_UNIFIED_D)
1625     return cache;
1626    
1627     list_for_each_entry(iter, &cache_list, list)
1628     @@ -324,16 +335,29 @@ static bool cache_node_is_unified(const struct device_node *np)
1629     return of_get_property(np, "cache-unified", NULL);
1630     }
1631    
1632     -static struct cache *cache_do_one_devnode_unified(struct device_node *node,
1633     - int level)
1634     +/*
1635     + * Unified caches can have two different sets of tags. Most embedded
1636     + * use cache-size, etc. for the unified cache size, but open firmware systems
1637     + * use d-cache-size, etc. Check on initialization for which type we have, and
1638     + * return the appropriate structure type. Assume it's embedded if it isn't
1639     + * open firmware. If it's yet a 3rd type, then there will be missing entries
1640     + * in /sys/devices/system/cpu/cpu0/cache/index2/, and this code will need
1641     + * to be extended further.
1642     + */
1643     +static int cache_is_unified_d(const struct device_node *np)
1644     {
1645     - struct cache *cache;
1646     + return of_get_property(np,
1647     + cache_type_info[CACHE_TYPE_UNIFIED_D].size_prop, NULL) ?
1648     + CACHE_TYPE_UNIFIED_D : CACHE_TYPE_UNIFIED;
1649     +}
1650    
1651     +/*
1652     + */
1653     +static struct cache *cache_do_one_devnode_unified(struct device_node *node, int level)
1654     +{
1655     pr_debug("creating L%d ucache for %s\n", level, node->full_name);
1656    
1657     - cache = new_cache(CACHE_TYPE_UNIFIED, level, node);
1658     -
1659     - return cache;
1660     + return new_cache(cache_is_unified_d(node), level, node);
1661     }
1662    
1663     static struct cache *cache_do_one_devnode_split(struct device_node *node,
1664     diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
1665     index 7e408bfc7948..cecbe00cee24 100644
1666     --- a/arch/powerpc/mm/hugetlbpage.c
1667     +++ b/arch/powerpc/mm/hugetlbpage.c
1668     @@ -581,6 +581,7 @@ static void hugetlb_free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
1669     pmd = pmd_offset(pud, start);
1670     pud_clear(pud);
1671     pmd_free_tlb(tlb, pmd, start);
1672     + mm_dec_nr_pmds(tlb->mm);
1673     }
1674    
1675     static void hugetlb_free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
1676     diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
1677     index 2396dda282cd..ead55351b254 100644
1678     --- a/arch/powerpc/perf/callchain.c
1679     +++ b/arch/powerpc/perf/callchain.c
1680     @@ -243,7 +243,7 @@ static void perf_callchain_user_64(struct perf_callchain_entry *entry,
1681     sp = regs->gpr[1];
1682     perf_callchain_store(entry, next_ip);
1683    
1684     - for (;;) {
1685     + while (entry->nr < PERF_MAX_STACK_DEPTH) {
1686     fp = (unsigned long __user *) sp;
1687     if (!valid_user_sp(sp, 1) || read_user_stack_64(fp, &next_sp))
1688     return;
1689     diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
1690     index 4c11421847be..3af8324c122e 100644
1691     --- a/arch/powerpc/platforms/cell/interrupt.c
1692     +++ b/arch/powerpc/platforms/cell/interrupt.c
1693     @@ -163,7 +163,7 @@ static unsigned int iic_get_irq(void)
1694    
1695     void iic_setup_cpu(void)
1696     {
1697     - out_be64(this_cpu_ptr(&cpu_iic.regs->prio), 0xff);
1698     + out_be64(&this_cpu_ptr(&cpu_iic)->regs->prio, 0xff);
1699     }
1700    
1701     u8 iic_get_target_id(int cpu)
1702     diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
1703     index c7c8720aa39f..63db1b03e756 100644
1704     --- a/arch/powerpc/platforms/cell/iommu.c
1705     +++ b/arch/powerpc/platforms/cell/iommu.c
1706     @@ -197,7 +197,7 @@ static int tce_build_cell(struct iommu_table *tbl, long index, long npages,
1707    
1708     io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
1709    
1710     - for (i = 0; i < npages; i++, uaddr += tbl->it_page_shift)
1711     + for (i = 0; i < npages; i++, uaddr += (1 << tbl->it_page_shift))
1712     io_pte[i] = base_pte | (__pa(uaddr) & CBE_IOPTE_RPN_Mask);
1713    
1714     mb();
1715     diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
1716     index 6c9ff2b95119..1d9369e1e0f4 100644
1717     --- a/arch/powerpc/platforms/powernv/pci-ioda.c
1718     +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
1719     @@ -1777,7 +1777,8 @@ static void pnv_ioda_setup_pe_seg(struct pci_controller *hose,
1720     region.start += phb->ioda.io_segsize;
1721     index++;
1722     }
1723     - } else if (res->flags & IORESOURCE_MEM) {
1724     + } else if ((res->flags & IORESOURCE_MEM) &&
1725     + !pnv_pci_is_mem_pref_64(res->flags)) {
1726     region.start = res->start -
1727     hose->mem_offset[0] -
1728     phb->ioda.m32_pci_base;
1729     diff --git a/arch/s390/kernel/suspend.c b/arch/s390/kernel/suspend.c
1730     index 1c4c5accd220..d3236c9e226b 100644
1731     --- a/arch/s390/kernel/suspend.c
1732     +++ b/arch/s390/kernel/suspend.c
1733     @@ -138,6 +138,8 @@ int pfn_is_nosave(unsigned long pfn)
1734     {
1735     unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
1736     unsigned long nosave_end_pfn = PFN_DOWN(__pa(&__nosave_end));
1737     + unsigned long eshared_pfn = PFN_DOWN(__pa(&_eshared)) - 1;
1738     + unsigned long stext_pfn = PFN_DOWN(__pa(&_stext));
1739    
1740     /* Always save lowcore pages (LC protection might be enabled). */
1741     if (pfn <= LC_PAGES)
1742     @@ -145,6 +147,8 @@ int pfn_is_nosave(unsigned long pfn)
1743     if (pfn >= nosave_begin_pfn && pfn < nosave_end_pfn)
1744     return 1;
1745     /* Skip memory holes and read-only pages (NSS, DCSS, ...). */
1746     + if (pfn >= stext_pfn && pfn <= eshared_pfn)
1747     + return ipl_info.type == IPL_TYPE_NSS ? 1 : 0;
1748     if (tprot(PFN_PHYS(pfn)))
1749     return 1;
1750     return 0;
1751     diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
1752     index 073b5f387d1d..e7bc2fdb6f67 100644
1753     --- a/arch/s390/kvm/interrupt.c
1754     +++ b/arch/s390/kvm/interrupt.c
1755     @@ -17,6 +17,7 @@
1756     #include <linux/signal.h>
1757     #include <linux/slab.h>
1758     #include <linux/bitmap.h>
1759     +#include <linux/vmalloc.h>
1760     #include <asm/asm-offsets.h>
1761     #include <asm/uaccess.h>
1762     #include <asm/sclp.h>
1763     @@ -1332,10 +1333,10 @@ int kvm_s390_inject_vm(struct kvm *kvm,
1764     return rc;
1765     }
1766    
1767     -void kvm_s390_reinject_io_int(struct kvm *kvm,
1768     +int kvm_s390_reinject_io_int(struct kvm *kvm,
1769     struct kvm_s390_interrupt_info *inti)
1770     {
1771     - __inject_vm(kvm, inti);
1772     + return __inject_vm(kvm, inti);
1773     }
1774    
1775     int s390int_to_s390irq(struct kvm_s390_interrupt *s390int,
1776     @@ -1455,61 +1456,66 @@ void kvm_s390_clear_float_irqs(struct kvm *kvm)
1777     spin_unlock(&fi->lock);
1778     }
1779    
1780     -static inline int copy_irq_to_user(struct kvm_s390_interrupt_info *inti,
1781     - u8 *addr)
1782     +static void inti_to_irq(struct kvm_s390_interrupt_info *inti,
1783     + struct kvm_s390_irq *irq)
1784     {
1785     - struct kvm_s390_irq __user *uptr = (struct kvm_s390_irq __user *) addr;
1786     - struct kvm_s390_irq irq = {0};
1787     -
1788     - irq.type = inti->type;
1789     + irq->type = inti->type;
1790     switch (inti->type) {
1791     case KVM_S390_INT_PFAULT_INIT:
1792     case KVM_S390_INT_PFAULT_DONE:
1793     case KVM_S390_INT_VIRTIO:
1794     case KVM_S390_INT_SERVICE:
1795     - irq.u.ext = inti->ext;
1796     + irq->u.ext = inti->ext;
1797     break;
1798     case KVM_S390_INT_IO_MIN...KVM_S390_INT_IO_MAX:
1799     - irq.u.io = inti->io;
1800     + irq->u.io = inti->io;
1801     break;
1802     case KVM_S390_MCHK:
1803     - irq.u.mchk = inti->mchk;
1804     + irq->u.mchk = inti->mchk;
1805     break;
1806     - default:
1807     - return -EINVAL;
1808     }
1809     -
1810     - if (copy_to_user(uptr, &irq, sizeof(irq)))
1811     - return -EFAULT;
1812     -
1813     - return 0;
1814     }
1815    
1816     -static int get_all_floating_irqs(struct kvm *kvm, __u8 *buf, __u64 len)
1817     +static int get_all_floating_irqs(struct kvm *kvm, u8 __user *usrbuf, u64 len)
1818     {
1819     struct kvm_s390_interrupt_info *inti;
1820     struct kvm_s390_float_interrupt *fi;
1821     + struct kvm_s390_irq *buf;
1822     + int max_irqs;
1823     int ret = 0;
1824     int n = 0;
1825    
1826     + if (len > KVM_S390_FLIC_MAX_BUFFER || len == 0)
1827     + return -EINVAL;
1828     +
1829     + /*
1830     + * We are already using -ENOMEM to signal
1831     + * userspace it may retry with a bigger buffer,
1832     + * so we need to use something else for this case
1833     + */
1834     + buf = vzalloc(len);
1835     + if (!buf)
1836     + return -ENOBUFS;
1837     +
1838     + max_irqs = len / sizeof(struct kvm_s390_irq);
1839     +
1840     fi = &kvm->arch.float_int;
1841     spin_lock(&fi->lock);
1842     -
1843     list_for_each_entry(inti, &fi->list, list) {
1844     - if (len < sizeof(struct kvm_s390_irq)) {
1845     + if (n == max_irqs) {
1846     /* signal userspace to try again */
1847     ret = -ENOMEM;
1848     break;
1849     }
1850     - ret = copy_irq_to_user(inti, buf);
1851     - if (ret)
1852     - break;
1853     - buf += sizeof(struct kvm_s390_irq);
1854     - len -= sizeof(struct kvm_s390_irq);
1855     + inti_to_irq(inti, &buf[n]);
1856     n++;
1857     }
1858     -
1859     spin_unlock(&fi->lock);
1860     + if (!ret && n > 0) {
1861     + if (copy_to_user(usrbuf, buf, sizeof(struct kvm_s390_irq) * n))
1862     + ret = -EFAULT;
1863     + }
1864     + vfree(buf);
1865    
1866     return ret < 0 ? ret : n;
1867     }
1868     @@ -1520,7 +1526,7 @@ static int flic_get_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
1869    
1870     switch (attr->group) {
1871     case KVM_DEV_FLIC_GET_ALL_IRQS:
1872     - r = get_all_floating_irqs(dev->kvm, (u8 *) attr->addr,
1873     + r = get_all_floating_irqs(dev->kvm, (u8 __user *) attr->addr,
1874     attr->attr);
1875     break;
1876     default:
1877     diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
1878     index c34109aa552d..6995a3080a0e 100644
1879     --- a/arch/s390/kvm/kvm-s390.h
1880     +++ b/arch/s390/kvm/kvm-s390.h
1881     @@ -151,8 +151,8 @@ int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
1882     int __must_check kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code);
1883     struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
1884     u64 cr6, u64 schid);
1885     -void kvm_s390_reinject_io_int(struct kvm *kvm,
1886     - struct kvm_s390_interrupt_info *inti);
1887     +int kvm_s390_reinject_io_int(struct kvm *kvm,
1888     + struct kvm_s390_interrupt_info *inti);
1889     int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked);
1890    
1891     /* implemented in intercept.c */
1892     diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
1893     index 351116939ea2..b982fbca34df 100644
1894     --- a/arch/s390/kvm/priv.c
1895     +++ b/arch/s390/kvm/priv.c
1896     @@ -229,18 +229,19 @@ static int handle_tpi(struct kvm_vcpu *vcpu)
1897     struct kvm_s390_interrupt_info *inti;
1898     unsigned long len;
1899     u32 tpi_data[3];
1900     - int cc, rc;
1901     + int rc;
1902     u64 addr;
1903    
1904     - rc = 0;
1905     addr = kvm_s390_get_base_disp_s(vcpu);
1906     if (addr & 3)
1907     return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
1908     - cc = 0;
1909     +
1910     inti = kvm_s390_get_io_int(vcpu->kvm, vcpu->arch.sie_block->gcr[6], 0);
1911     - if (!inti)
1912     - goto no_interrupt;
1913     - cc = 1;
1914     + if (!inti) {
1915     + kvm_s390_set_psw_cc(vcpu, 0);
1916     + return 0;
1917     + }
1918     +
1919     tpi_data[0] = inti->io.subchannel_id << 16 | inti->io.subchannel_nr;
1920     tpi_data[1] = inti->io.io_int_parm;
1921     tpi_data[2] = inti->io.io_int_word;
1922     @@ -251,30 +252,38 @@ static int handle_tpi(struct kvm_vcpu *vcpu)
1923     */
1924     len = sizeof(tpi_data) - 4;
1925     rc = write_guest(vcpu, addr, &tpi_data, len);
1926     - if (rc)
1927     - return kvm_s390_inject_prog_cond(vcpu, rc);
1928     + if (rc) {
1929     + rc = kvm_s390_inject_prog_cond(vcpu, rc);
1930     + goto reinject_interrupt;
1931     + }
1932     } else {
1933     /*
1934     * Store the three-word I/O interruption code into
1935     * the appropriate lowcore area.
1936     */
1937     len = sizeof(tpi_data);
1938     - if (write_guest_lc(vcpu, __LC_SUBCHANNEL_ID, &tpi_data, len))
1939     + if (write_guest_lc(vcpu, __LC_SUBCHANNEL_ID, &tpi_data, len)) {
1940     + /* failed writes to the low core are not recoverable */
1941     rc = -EFAULT;
1942     + goto reinject_interrupt;
1943     + }
1944     }
1945     +
1946     + /* irq was successfully handed to the guest */
1947     + kfree(inti);
1948     + kvm_s390_set_psw_cc(vcpu, 1);
1949     + return 0;
1950     +reinject_interrupt:
1951     /*
1952     * If we encounter a problem storing the interruption code, the
1953     * instruction is suppressed from the guest's view: reinject the
1954     * interrupt.
1955     */
1956     - if (!rc)
1957     + if (kvm_s390_reinject_io_int(vcpu->kvm, inti)) {
1958     kfree(inti);
1959     - else
1960     - kvm_s390_reinject_io_int(vcpu->kvm, inti);
1961     -no_interrupt:
1962     - /* Set condition code and we're done. */
1963     - if (!rc)
1964     - kvm_s390_set_psw_cc(vcpu, cc);
1965     + rc = -EFAULT;
1966     + }
1967     + /* don't set the cc, a pgm irq was injected or we drop to user space */
1968     return rc ? -EFAULT : 0;
1969     }
1970    
1971     @@ -467,6 +476,7 @@ static void handle_stsi_3_2_2(struct kvm_vcpu *vcpu, struct sysinfo_3_2_2 *mem)
1972     for (n = mem->count - 1; n > 0 ; n--)
1973     memcpy(&mem->vm[n], &mem->vm[n - 1], sizeof(mem->vm[0]));
1974    
1975     + memset(&mem->vm[0], 0, sizeof(mem->vm[0]));
1976     mem->vm[0].cpus_total = cpus;
1977     mem->vm[0].cpus_configured = cpus;
1978     mem->vm[0].cpus_standby = 0;
1979     diff --git a/arch/x86/include/asm/insn.h b/arch/x86/include/asm/insn.h
1980     index 47f29b1d1846..e7814b74caf8 100644
1981     --- a/arch/x86/include/asm/insn.h
1982     +++ b/arch/x86/include/asm/insn.h
1983     @@ -69,7 +69,7 @@ struct insn {
1984     const insn_byte_t *next_byte;
1985     };
1986    
1987     -#define MAX_INSN_SIZE 16
1988     +#define MAX_INSN_SIZE 15
1989    
1990     #define X86_MODRM_MOD(modrm) (((modrm) & 0xc0) >> 6)
1991     #define X86_MODRM_REG(modrm) (((modrm) & 0x38) >> 3)
1992     diff --git a/arch/x86/include/asm/mwait.h b/arch/x86/include/asm/mwait.h
1993     index a1410db38a1a..653dfa7662e1 100644
1994     --- a/arch/x86/include/asm/mwait.h
1995     +++ b/arch/x86/include/asm/mwait.h
1996     @@ -30,6 +30,14 @@ static inline void __mwait(unsigned long eax, unsigned long ecx)
1997     :: "a" (eax), "c" (ecx));
1998     }
1999    
2000     +static inline void __sti_mwait(unsigned long eax, unsigned long ecx)
2001     +{
2002     + trace_hardirqs_on();
2003     + /* "mwait %eax, %ecx;" */
2004     + asm volatile("sti; .byte 0x0f, 0x01, 0xc9;"
2005     + :: "a" (eax), "c" (ecx));
2006     +}
2007     +
2008     /*
2009     * This uses new MONITOR/MWAIT instructions on P4 processors with PNI,
2010     * which can obviate IPI to trigger checking of need_resched.
2011     diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
2012     index d6b078e9fa28..25b1cc07d496 100644
2013     --- a/arch/x86/include/asm/pvclock.h
2014     +++ b/arch/x86/include/asm/pvclock.h
2015     @@ -95,6 +95,7 @@ unsigned __pvclock_read_cycles(const struct pvclock_vcpu_time_info *src,
2016    
2017     struct pvclock_vsyscall_time_info {
2018     struct pvclock_vcpu_time_info pvti;
2019     + u32 migrate_count;
2020     } __attribute__((__aligned__(SMP_CACHE_BYTES)));
2021    
2022     #define PVTI_SIZE sizeof(struct pvclock_vsyscall_time_info)
2023     diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
2024     index 073983398364..666bcf14ce10 100644
2025     --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
2026     +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
2027     @@ -557,6 +557,8 @@ struct event_constraint intel_core2_pebs_event_constraints[] = {
2028     INTEL_FLAGS_UEVENT_CONSTRAINT(0x00c5, 0x1), /* BR_INST_RETIRED.MISPRED */
2029     INTEL_FLAGS_UEVENT_CONSTRAINT(0x1fc7, 0x1), /* SIMD_INST_RETURED.ANY */
2030     INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */
2031     + /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */
2032     + INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x01),
2033     EVENT_CONSTRAINT_END
2034     };
2035    
2036     @@ -564,6 +566,8 @@ struct event_constraint intel_atom_pebs_event_constraints[] = {
2037     INTEL_FLAGS_UEVENT_CONSTRAINT(0x00c0, 0x1), /* INST_RETIRED.ANY */
2038     INTEL_FLAGS_UEVENT_CONSTRAINT(0x00c5, 0x1), /* MISPREDICTED_BRANCH_RETIRED */
2039     INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0x1), /* MEM_LOAD_RETIRED.* */
2040     + /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */
2041     + INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x01),
2042     EVENT_CONSTRAINT_END
2043     };
2044    
2045     @@ -587,6 +591,8 @@ struct event_constraint intel_nehalem_pebs_event_constraints[] = {
2046     INTEL_FLAGS_UEVENT_CONSTRAINT(0x20c8, 0xf), /* ITLB_MISS_RETIRED */
2047     INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */
2048     INTEL_FLAGS_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */
2049     + /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */
2050     + INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x0f),
2051     EVENT_CONSTRAINT_END
2052     };
2053    
2054     @@ -602,6 +608,8 @@ struct event_constraint intel_westmere_pebs_event_constraints[] = {
2055     INTEL_FLAGS_UEVENT_CONSTRAINT(0x20c8, 0xf), /* ITLB_MISS_RETIRED */
2056     INTEL_FLAGS_EVENT_CONSTRAINT(0xcb, 0xf), /* MEM_LOAD_RETIRED.* */
2057     INTEL_FLAGS_EVENT_CONSTRAINT(0xf7, 0xf), /* FP_ASSIST.* */
2058     + /* INST_RETIRED.ANY_P, inv=1, cmask=16 (cycles:p). */
2059     + INTEL_FLAGS_EVENT_CONSTRAINT(0x108000c0, 0x0f),
2060     EVENT_CONSTRAINT_END
2061     };
2062    
2063     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
2064     index 046e2d620bbe..a388bb883128 100644
2065     --- a/arch/x86/kernel/process.c
2066     +++ b/arch/x86/kernel/process.c
2067     @@ -24,6 +24,7 @@
2068     #include <asm/syscalls.h>
2069     #include <asm/idle.h>
2070     #include <asm/uaccess.h>
2071     +#include <asm/mwait.h>
2072     #include <asm/i387.h>
2073     #include <asm/fpu-internal.h>
2074     #include <asm/debugreg.h>
2075     @@ -399,6 +400,53 @@ static void amd_e400_idle(void)
2076     default_idle();
2077     }
2078    
2079     +/*
2080     + * Intel Core2 and older machines prefer MWAIT over HALT for C1.
2081     + * We can't rely on cpuidle installing MWAIT, because it will not load
2082     + * on systems that support only C1 -- so the boot default must be MWAIT.
2083     + *
2084     + * Some AMD machines are the opposite, they depend on using HALT.
2085     + *
2086     + * So for default C1, which is used during boot until cpuidle loads,
2087     + * use MWAIT-C1 on Intel HW that has it, else use HALT.
2088     + */
2089     +static int prefer_mwait_c1_over_halt(const struct cpuinfo_x86 *c)
2090     +{
2091     + if (c->x86_vendor != X86_VENDOR_INTEL)
2092     + return 0;
2093     +
2094     + if (!cpu_has(c, X86_FEATURE_MWAIT))
2095     + return 0;
2096     +
2097     + return 1;
2098     +}
2099     +
2100     +/*
2101     + * MONITOR/MWAIT with no hints, used for default default C1 state.
2102     + * This invokes MWAIT with interrutps enabled and no flags,
2103     + * which is backwards compatible with the original MWAIT implementation.
2104     + */
2105     +
2106     +static void mwait_idle(void)
2107     +{
2108     + if (!current_set_polling_and_test()) {
2109     + if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) {
2110     + smp_mb(); /* quirk */
2111     + clflush((void *)&current_thread_info()->flags);
2112     + smp_mb(); /* quirk */
2113     + }
2114     +
2115     + __monitor((void *)&current_thread_info()->flags, 0, 0);
2116     + if (!need_resched())
2117     + __sti_mwait(0, 0);
2118     + else
2119     + local_irq_enable();
2120     + } else {
2121     + local_irq_enable();
2122     + }
2123     + __current_clr_polling();
2124     +}
2125     +
2126     void select_idle_routine(const struct cpuinfo_x86 *c)
2127     {
2128     #ifdef CONFIG_SMP
2129     @@ -412,6 +460,9 @@ void select_idle_routine(const struct cpuinfo_x86 *c)
2130     /* E400: APIC timer interrupt does not wake up CPU from C1e */
2131     pr_info("using AMD E400 aware idle routine\n");
2132     x86_idle = amd_e400_idle;
2133     + } else if (prefer_mwait_c1_over_halt(c)) {
2134     + pr_info("using mwait in idle threads\n");
2135     + x86_idle = mwait_idle;
2136     } else
2137     x86_idle = default_idle;
2138     }
2139     diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
2140     index 2f355d229a58..e5ecd20e72dd 100644
2141     --- a/arch/x86/kernel/pvclock.c
2142     +++ b/arch/x86/kernel/pvclock.c
2143     @@ -141,7 +141,46 @@ void pvclock_read_wallclock(struct pvclock_wall_clock *wall_clock,
2144     set_normalized_timespec(ts, now.tv_sec, now.tv_nsec);
2145     }
2146    
2147     +static struct pvclock_vsyscall_time_info *pvclock_vdso_info;
2148     +
2149     +static struct pvclock_vsyscall_time_info *
2150     +pvclock_get_vsyscall_user_time_info(int cpu)
2151     +{
2152     + if (!pvclock_vdso_info) {
2153     + BUG();
2154     + return NULL;
2155     + }
2156     +
2157     + return &pvclock_vdso_info[cpu];
2158     +}
2159     +
2160     +struct pvclock_vcpu_time_info *pvclock_get_vsyscall_time_info(int cpu)
2161     +{
2162     + return &pvclock_get_vsyscall_user_time_info(cpu)->pvti;
2163     +}
2164     +
2165     #ifdef CONFIG_X86_64
2166     +static int pvclock_task_migrate(struct notifier_block *nb, unsigned long l,
2167     + void *v)
2168     +{
2169     + struct task_migration_notifier *mn = v;
2170     + struct pvclock_vsyscall_time_info *pvti;
2171     +
2172     + pvti = pvclock_get_vsyscall_user_time_info(mn->from_cpu);
2173     +
2174     + /* this is NULL when pvclock vsyscall is not initialized */
2175     + if (unlikely(pvti == NULL))
2176     + return NOTIFY_DONE;
2177     +
2178     + pvti->migrate_count++;
2179     +
2180     + return NOTIFY_DONE;
2181     +}
2182     +
2183     +static struct notifier_block pvclock_migrate = {
2184     + .notifier_call = pvclock_task_migrate,
2185     +};
2186     +
2187     /*
2188     * Initialize the generic pvclock vsyscall state. This will allocate
2189     * a/some page(s) for the per-vcpu pvclock information, set up a
2190     @@ -155,12 +194,17 @@ int __init pvclock_init_vsyscall(struct pvclock_vsyscall_time_info *i,
2191    
2192     WARN_ON (size != PVCLOCK_VSYSCALL_NR_PAGES*PAGE_SIZE);
2193    
2194     + pvclock_vdso_info = i;
2195     +
2196     for (idx = 0; idx <= (PVCLOCK_FIXMAP_END-PVCLOCK_FIXMAP_BEGIN); idx++) {
2197     __set_fixmap(PVCLOCK_FIXMAP_BEGIN + idx,
2198     __pa(i) + (idx*PAGE_SIZE),
2199     PAGE_KERNEL_VVAR);
2200     }
2201    
2202     +
2203     + register_task_migration_notifier(&pvclock_migrate);
2204     +
2205     return 0;
2206     }
2207     #endif
2208     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
2209     index ae4f6d35d19c..a60bd3aa0965 100644
2210     --- a/arch/x86/kvm/vmx.c
2211     +++ b/arch/x86/kvm/vmx.c
2212     @@ -3621,8 +3621,16 @@ static void vmx_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
2213    
2214     static int vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
2215     {
2216     - unsigned long hw_cr4 = cr4 | (to_vmx(vcpu)->rmode.vm86_active ?
2217     - KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
2218     + /*
2219     + * Pass through host's Machine Check Enable value to hw_cr4, which
2220     + * is in force while we are in guest mode. Do not let guests control
2221     + * this bit, even if host CR4.MCE == 0.
2222     + */
2223     + unsigned long hw_cr4 =
2224     + (cr4_read_shadow() & X86_CR4_MCE) |
2225     + (cr4 & ~X86_CR4_MCE) |
2226     + (to_vmx(vcpu)->rmode.vm86_active ?
2227     + KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
2228    
2229     if (cr4 & X86_CR4_VMXE) {
2230     /*
2231     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
2232     index 32bf19ef3115..e222ba5d2beb 100644
2233     --- a/arch/x86/kvm/x86.c
2234     +++ b/arch/x86/kvm/x86.c
2235     @@ -5775,7 +5775,6 @@ int kvm_arch_init(void *opaque)
2236     kvm_set_mmio_spte_mask();
2237    
2238     kvm_x86_ops = ops;
2239     - kvm_init_msr_list();
2240    
2241     kvm_mmu_set_mask_ptes(PT_USER_MASK, PT_ACCESSED_MASK,
2242     PT_DIRTY_MASK, PT64_NX_MASK, 0);
2243     @@ -7209,7 +7208,14 @@ void kvm_arch_hardware_disable(void)
2244    
2245     int kvm_arch_hardware_setup(void)
2246     {
2247     - return kvm_x86_ops->hardware_setup();
2248     + int r;
2249     +
2250     + r = kvm_x86_ops->hardware_setup();
2251     + if (r != 0)
2252     + return r;
2253     +
2254     + kvm_init_msr_list();
2255     + return 0;
2256     }
2257    
2258     void kvm_arch_hardware_unsetup(void)
2259     diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
2260     index 1313ae6b478b..85994f5d48e4 100644
2261     --- a/arch/x86/lib/insn.c
2262     +++ b/arch/x86/lib/insn.c
2263     @@ -52,6 +52,13 @@
2264     */
2265     void insn_init(struct insn *insn, const void *kaddr, int buf_len, int x86_64)
2266     {
2267     + /*
2268     + * Instructions longer than MAX_INSN_SIZE (15 bytes) are invalid
2269     + * even if the input buffer is long enough to hold them.
2270     + */
2271     + if (buf_len > MAX_INSN_SIZE)
2272     + buf_len = MAX_INSN_SIZE;
2273     +
2274     memset(insn, 0, sizeof(*insn));
2275     insn->kaddr = kaddr;
2276     insn->end_kaddr = kaddr + buf_len;
2277     diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
2278     index 1f33b3d1fd68..0a42327a59d7 100644
2279     --- a/arch/x86/lib/usercopy_64.c
2280     +++ b/arch/x86/lib/usercopy_64.c
2281     @@ -82,7 +82,7 @@ copy_user_handle_tail(char *to, char *from, unsigned len)
2282     clac();
2283    
2284     /* If the destination is a kernel buffer, we always clear the end */
2285     - if ((unsigned long)to >= TASK_SIZE_MAX)
2286     + if (!__addr_ok(to))
2287     memset(to, 0, len);
2288     return len;
2289     }
2290     diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c
2291     index 9793322751e0..40d2473836c9 100644
2292     --- a/arch/x86/vdso/vclock_gettime.c
2293     +++ b/arch/x86/vdso/vclock_gettime.c
2294     @@ -82,18 +82,15 @@ static notrace cycle_t vread_pvclock(int *mode)
2295     cycle_t ret;
2296     u64 last;
2297     u32 version;
2298     + u32 migrate_count;
2299     u8 flags;
2300     unsigned cpu, cpu1;
2301    
2302    
2303     /*
2304     - * Note: hypervisor must guarantee that:
2305     - * 1. cpu ID number maps 1:1 to per-CPU pvclock time info.
2306     - * 2. that per-CPU pvclock time info is updated if the
2307     - * underlying CPU changes.
2308     - * 3. that version is increased whenever underlying CPU
2309     - * changes.
2310     - *
2311     + * When looping to get a consistent (time-info, tsc) pair, we
2312     + * also need to deal with the possibility we can switch vcpus,
2313     + * so make sure we always re-fetch time-info for the current vcpu.
2314     */
2315     do {
2316     cpu = __getcpu() & VGETCPU_CPU_MASK;
2317     @@ -102,20 +99,27 @@ static notrace cycle_t vread_pvclock(int *mode)
2318     * __getcpu() calls (Gleb).
2319     */
2320    
2321     - pvti = get_pvti(cpu);
2322     + /* Make sure migrate_count will change if we leave the VCPU. */
2323     + do {
2324     + pvti = get_pvti(cpu);
2325     + migrate_count = pvti->migrate_count;
2326     +
2327     + cpu1 = cpu;
2328     + cpu = __getcpu() & VGETCPU_CPU_MASK;
2329     + } while (unlikely(cpu != cpu1));
2330    
2331     version = __pvclock_read_cycles(&pvti->pvti, &ret, &flags);
2332    
2333     /*
2334     * Test we're still on the cpu as well as the version.
2335     - * We could have been migrated just after the first
2336     - * vgetcpu but before fetching the version, so we
2337     - * wouldn't notice a version change.
2338     + * - We must read TSC of pvti's VCPU.
2339     + * - KVM doesn't follow the versioning protocol, so data could
2340     + * change before version if we left the VCPU.
2341     */
2342     - cpu1 = __getcpu() & VGETCPU_CPU_MASK;
2343     - } while (unlikely(cpu != cpu1 ||
2344     - (pvti->pvti.version & 1) ||
2345     - pvti->pvti.version != version));
2346     + smp_rmb();
2347     + } while (unlikely((pvti->pvti.version & 1) ||
2348     + pvti->pvti.version != version ||
2349     + pvti->migrate_count != migrate_count));
2350    
2351     if (unlikely(!(flags & PVCLOCK_TSC_STABLE_BIT)))
2352     *mode = VCLOCK_NONE;
2353     diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
2354     index e31d4949124a..87be10e8b57a 100644
2355     --- a/arch/xtensa/Kconfig
2356     +++ b/arch/xtensa/Kconfig
2357     @@ -428,6 +428,36 @@ config DEFAULT_MEM_SIZE
2358    
2359     If unsure, leave the default value here.
2360    
2361     +config XTFPGA_LCD
2362     + bool "Enable XTFPGA LCD driver"
2363     + depends on XTENSA_PLATFORM_XTFPGA
2364     + default n
2365     + help
2366     + There's a 2x16 LCD on most of XTFPGA boards, kernel may output
2367     + progress messages there during bootup/shutdown. It may be useful
2368     + during board bringup.
2369     +
2370     + If unsure, say N.
2371     +
2372     +config XTFPGA_LCD_BASE_ADDR
2373     + hex "XTFPGA LCD base address"
2374     + depends on XTFPGA_LCD
2375     + default "0x0d0c0000"
2376     + help
2377     + Base address of the LCD controller inside KIO region.
2378     + Different boards from XTFPGA family have LCD controller at different
2379     + addresses. Please consult prototyping user guide for your board for
2380     + the correct address. Wrong address here may lead to hardware lockup.
2381     +
2382     +config XTFPGA_LCD_8BIT_ACCESS
2383     + bool "Use 8-bit access to XTFPGA LCD"
2384     + depends on XTFPGA_LCD
2385     + default n
2386     + help
2387     + LCD may be connected with 4- or 8-bit interface, 8-bit access may
2388     + only be used with 8-bit interface. Please consult prototyping user
2389     + guide for your board for the correct interface width.
2390     +
2391     endmenu
2392    
2393     menu "Executable file formats"
2394     diff --git a/arch/xtensa/include/uapi/asm/unistd.h b/arch/xtensa/include/uapi/asm/unistd.h
2395     index db5bb72e2f4e..62d84657c60b 100644
2396     --- a/arch/xtensa/include/uapi/asm/unistd.h
2397     +++ b/arch/xtensa/include/uapi/asm/unistd.h
2398     @@ -715,7 +715,7 @@ __SYSCALL(323, sys_process_vm_writev, 6)
2399     __SYSCALL(324, sys_name_to_handle_at, 5)
2400     #define __NR_open_by_handle_at 325
2401     __SYSCALL(325, sys_open_by_handle_at, 3)
2402     -#define __NR_sync_file_range 326
2403     +#define __NR_sync_file_range2 326
2404     __SYSCALL(326, sys_sync_file_range2, 6)
2405     #define __NR_perf_event_open 327
2406     __SYSCALL(327, sys_perf_event_open, 5)
2407     diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/iss/network.c
2408     index d05f8feeb8d7..17b1ef3232e4 100644
2409     --- a/arch/xtensa/platforms/iss/network.c
2410     +++ b/arch/xtensa/platforms/iss/network.c
2411     @@ -349,8 +349,8 @@ static void iss_net_timer(unsigned long priv)
2412     {
2413     struct iss_net_private *lp = (struct iss_net_private *)priv;
2414    
2415     - spin_lock(&lp->lock);
2416     iss_net_poll();
2417     + spin_lock(&lp->lock);
2418     mod_timer(&lp->timer, jiffies + lp->timer_val);
2419     spin_unlock(&lp->lock);
2420     }
2421     @@ -361,7 +361,7 @@ static int iss_net_open(struct net_device *dev)
2422     struct iss_net_private *lp = netdev_priv(dev);
2423     int err;
2424    
2425     - spin_lock(&lp->lock);
2426     + spin_lock_bh(&lp->lock);
2427    
2428     err = lp->tp.open(lp);
2429     if (err < 0)
2430     @@ -376,9 +376,11 @@ static int iss_net_open(struct net_device *dev)
2431     while ((err = iss_net_rx(dev)) > 0)
2432     ;
2433    
2434     - spin_lock(&opened_lock);
2435     + spin_unlock_bh(&lp->lock);
2436     + spin_lock_bh(&opened_lock);
2437     list_add(&lp->opened_list, &opened);
2438     - spin_unlock(&opened_lock);
2439     + spin_unlock_bh(&opened_lock);
2440     + spin_lock_bh(&lp->lock);
2441    
2442     init_timer(&lp->timer);
2443     lp->timer_val = ISS_NET_TIMER_VALUE;
2444     @@ -387,7 +389,7 @@ static int iss_net_open(struct net_device *dev)
2445     mod_timer(&lp->timer, jiffies + lp->timer_val);
2446    
2447     out:
2448     - spin_unlock(&lp->lock);
2449     + spin_unlock_bh(&lp->lock);
2450     return err;
2451     }
2452    
2453     @@ -395,7 +397,7 @@ static int iss_net_close(struct net_device *dev)
2454     {
2455     struct iss_net_private *lp = netdev_priv(dev);
2456     netif_stop_queue(dev);
2457     - spin_lock(&lp->lock);
2458     + spin_lock_bh(&lp->lock);
2459    
2460     spin_lock(&opened_lock);
2461     list_del(&opened);
2462     @@ -405,18 +407,17 @@ static int iss_net_close(struct net_device *dev)
2463    
2464     lp->tp.close(lp);
2465    
2466     - spin_unlock(&lp->lock);
2467     + spin_unlock_bh(&lp->lock);
2468     return 0;
2469     }
2470    
2471     static int iss_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
2472     {
2473     struct iss_net_private *lp = netdev_priv(dev);
2474     - unsigned long flags;
2475     int len;
2476    
2477     netif_stop_queue(dev);
2478     - spin_lock_irqsave(&lp->lock, flags);
2479     + spin_lock_bh(&lp->lock);
2480    
2481     len = lp->tp.write(lp, &skb);
2482    
2483     @@ -438,7 +439,7 @@ static int iss_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
2484     pr_err("%s: %s failed(%d)\n", dev->name, __func__, len);
2485     }
2486    
2487     - spin_unlock_irqrestore(&lp->lock, flags);
2488     + spin_unlock_bh(&lp->lock);
2489    
2490     dev_kfree_skb(skb);
2491     return NETDEV_TX_OK;
2492     @@ -466,9 +467,9 @@ static int iss_net_set_mac(struct net_device *dev, void *addr)
2493    
2494     if (!is_valid_ether_addr(hwaddr->sa_data))
2495     return -EADDRNOTAVAIL;
2496     - spin_lock(&lp->lock);
2497     + spin_lock_bh(&lp->lock);
2498     memcpy(dev->dev_addr, hwaddr->sa_data, ETH_ALEN);
2499     - spin_unlock(&lp->lock);
2500     + spin_unlock_bh(&lp->lock);
2501     return 0;
2502     }
2503    
2504     @@ -520,11 +521,11 @@ static int iss_net_configure(int index, char *init)
2505     *lp = (struct iss_net_private) {
2506     .device_list = LIST_HEAD_INIT(lp->device_list),
2507     .opened_list = LIST_HEAD_INIT(lp->opened_list),
2508     - .lock = __SPIN_LOCK_UNLOCKED(lp.lock),
2509     .dev = dev,
2510     .index = index,
2511     - };
2512     + };
2513    
2514     + spin_lock_init(&lp->lock);
2515     /*
2516     * If this name ends up conflicting with an existing registered
2517     * netdevice, that is OK, register_netdev{,ice}() will notice this
2518     diff --git a/arch/xtensa/platforms/xtfpga/Makefile b/arch/xtensa/platforms/xtfpga/Makefile
2519     index b9ae206340cd..7839d38b2337 100644
2520     --- a/arch/xtensa/platforms/xtfpga/Makefile
2521     +++ b/arch/xtensa/platforms/xtfpga/Makefile
2522     @@ -6,4 +6,5 @@
2523     #
2524     # Note 2! The CFLAGS definitions are in the main makefile...
2525    
2526     -obj-y = setup.o lcd.o
2527     +obj-y += setup.o
2528     +obj-$(CONFIG_XTFPGA_LCD) += lcd.o
2529     diff --git a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
2530     index 6edd20bb4565..4e0af2662a21 100644
2531     --- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
2532     +++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
2533     @@ -40,9 +40,6 @@
2534    
2535     /* UART */
2536     #define DUART16552_PADDR (XCHAL_KIO_PADDR + 0x0D050020)
2537     -/* LCD instruction and data addresses. */
2538     -#define LCD_INSTR_ADDR ((char *)IOADDR(0x0D040000))
2539     -#define LCD_DATA_ADDR ((char *)IOADDR(0x0D040004))
2540    
2541     /* Misc. */
2542     #define XTFPGA_FPGAREGS_VADDR IOADDR(0x0D020000)
2543     diff --git a/arch/xtensa/platforms/xtfpga/include/platform/lcd.h b/arch/xtensa/platforms/xtfpga/include/platform/lcd.h
2544     index 0e435645af5a..4c8541ed1139 100644
2545     --- a/arch/xtensa/platforms/xtfpga/include/platform/lcd.h
2546     +++ b/arch/xtensa/platforms/xtfpga/include/platform/lcd.h
2547     @@ -11,10 +11,25 @@
2548     #ifndef __XTENSA_XTAVNET_LCD_H
2549     #define __XTENSA_XTAVNET_LCD_H
2550    
2551     +#ifdef CONFIG_XTFPGA_LCD
2552     /* Display string STR at position POS on the LCD. */
2553     void lcd_disp_at_pos(char *str, unsigned char pos);
2554    
2555     /* Shift the contents of the LCD display left or right. */
2556     void lcd_shiftleft(void);
2557     void lcd_shiftright(void);
2558     +#else
2559     +static inline void lcd_disp_at_pos(char *str, unsigned char pos)
2560     +{
2561     +}
2562     +
2563     +static inline void lcd_shiftleft(void)
2564     +{
2565     +}
2566     +
2567     +static inline void lcd_shiftright(void)
2568     +{
2569     +}
2570     +#endif
2571     +
2572     #endif
2573     diff --git a/arch/xtensa/platforms/xtfpga/lcd.c b/arch/xtensa/platforms/xtfpga/lcd.c
2574     index 2872301598df..4dc0c1b43f4b 100644
2575     --- a/arch/xtensa/platforms/xtfpga/lcd.c
2576     +++ b/arch/xtensa/platforms/xtfpga/lcd.c
2577     @@ -1,50 +1,63 @@
2578     /*
2579     - * Driver for the LCD display on the Tensilica LX60 Board.
2580     + * Driver for the LCD display on the Tensilica XTFPGA board family.
2581     + * http://www.mytechcorp.com/cfdata/productFile/File1/MOC-16216B-B-A0A04.pdf
2582     *
2583     * This file is subject to the terms and conditions of the GNU General Public
2584     * License. See the file "COPYING" in the main directory of this archive
2585     * for more details.
2586     *
2587     * Copyright (C) 2001, 2006 Tensilica Inc.
2588     + * Copyright (C) 2015 Cadence Design Systems Inc.
2589     */
2590    
2591     -/*
2592     - *
2593     - * FIXME: this code is from the examples from the LX60 user guide.
2594     - *
2595     - * The lcd_pause function does busy waiting, which is probably not
2596     - * great. Maybe the code could be changed to use kernel timers, or
2597     - * change the hardware to not need to wait.
2598     - */
2599     -
2600     +#include <linux/delay.h>
2601     #include <linux/init.h>
2602     #include <linux/io.h>
2603    
2604     #include <platform/hardware.h>
2605     #include <platform/lcd.h>
2606     -#include <linux/delay.h>
2607    
2608     -#define LCD_PAUSE_ITERATIONS 4000
2609     +/* LCD instruction and data addresses. */
2610     +#define LCD_INSTR_ADDR ((char *)IOADDR(CONFIG_XTFPGA_LCD_BASE_ADDR))
2611     +#define LCD_DATA_ADDR (LCD_INSTR_ADDR + 4)
2612     +
2613     #define LCD_CLEAR 0x1
2614     #define LCD_DISPLAY_ON 0xc
2615    
2616     /* 8bit and 2 lines display */
2617     #define LCD_DISPLAY_MODE8BIT 0x38
2618     +#define LCD_DISPLAY_MODE4BIT 0x28
2619     #define LCD_DISPLAY_POS 0x80
2620     #define LCD_SHIFT_LEFT 0x18
2621     #define LCD_SHIFT_RIGHT 0x1c
2622    
2623     +static void lcd_put_byte(u8 *addr, u8 data)
2624     +{
2625     +#ifdef CONFIG_XTFPGA_LCD_8BIT_ACCESS
2626     + ACCESS_ONCE(*addr) = data;
2627     +#else
2628     + ACCESS_ONCE(*addr) = data & 0xf0;
2629     + ACCESS_ONCE(*addr) = (data << 4) & 0xf0;
2630     +#endif
2631     +}
2632     +
2633     static int __init lcd_init(void)
2634     {
2635     - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
2636     + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
2637     mdelay(5);
2638     - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
2639     + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
2640     udelay(200);
2641     - *LCD_INSTR_ADDR = LCD_DISPLAY_MODE8BIT;
2642     + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE8BIT;
2643     + udelay(50);
2644     +#ifndef CONFIG_XTFPGA_LCD_8BIT_ACCESS
2645     + ACCESS_ONCE(*LCD_INSTR_ADDR) = LCD_DISPLAY_MODE4BIT;
2646     + udelay(50);
2647     + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_MODE4BIT);
2648     udelay(50);
2649     - *LCD_INSTR_ADDR = LCD_DISPLAY_ON;
2650     +#endif
2651     + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_ON);
2652     udelay(50);
2653     - *LCD_INSTR_ADDR = LCD_CLEAR;
2654     + lcd_put_byte(LCD_INSTR_ADDR, LCD_CLEAR);
2655     mdelay(10);
2656     lcd_disp_at_pos("XTENSA LINUX", 0);
2657     return 0;
2658     @@ -52,10 +65,10 @@ static int __init lcd_init(void)
2659    
2660     void lcd_disp_at_pos(char *str, unsigned char pos)
2661     {
2662     - *LCD_INSTR_ADDR = LCD_DISPLAY_POS | pos;
2663     + lcd_put_byte(LCD_INSTR_ADDR, LCD_DISPLAY_POS | pos);
2664     udelay(100);
2665     while (*str != 0) {
2666     - *LCD_DATA_ADDR = *str;
2667     + lcd_put_byte(LCD_DATA_ADDR, *str);
2668     udelay(200);
2669     str++;
2670     }
2671     @@ -63,13 +76,13 @@ void lcd_disp_at_pos(char *str, unsigned char pos)
2672    
2673     void lcd_shiftleft(void)
2674     {
2675     - *LCD_INSTR_ADDR = LCD_SHIFT_LEFT;
2676     + lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_LEFT);
2677     udelay(50);
2678     }
2679    
2680     void lcd_shiftright(void)
2681     {
2682     - *LCD_INSTR_ADDR = LCD_SHIFT_RIGHT;
2683     + lcd_put_byte(LCD_INSTR_ADDR, LCD_SHIFT_RIGHT);
2684     udelay(50);
2685     }
2686    
2687     diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
2688     index 5ed064e8673c..ccf793247447 100644
2689     --- a/drivers/acpi/acpica/evgpe.c
2690     +++ b/drivers/acpi/acpica/evgpe.c
2691     @@ -92,6 +92,7 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
2692     ACPI_SET_BIT(gpe_register_info->enable_for_run,
2693     (u8)register_bit);
2694     }
2695     + gpe_register_info->enable_mask = gpe_register_info->enable_for_run;
2696    
2697     return_ACPI_STATUS(AE_OK);
2698     }
2699     @@ -123,7 +124,7 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
2700    
2701     /* Enable the requested GPE */
2702    
2703     - status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE_SAVE);
2704     + status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);
2705     return_ACPI_STATUS(status);
2706     }
2707    
2708     @@ -202,7 +203,7 @@ acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info)
2709     if (ACPI_SUCCESS(status)) {
2710     status =
2711     acpi_hw_low_set_gpe(gpe_event_info,
2712     - ACPI_GPE_DISABLE_SAVE);
2713     + ACPI_GPE_DISABLE);
2714     }
2715    
2716     if (ACPI_FAILURE(status)) {
2717     diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c
2718     index 84bc550f4f1d..af6514ed64c5 100644
2719     --- a/drivers/acpi/acpica/hwgpe.c
2720     +++ b/drivers/acpi/acpica/hwgpe.c
2721     @@ -89,6 +89,8 @@ u32 acpi_hw_get_gpe_register_bit(struct acpi_gpe_event_info *gpe_event_info)
2722     * RETURN: Status
2723     *
2724     * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
2725     + * The enable_mask field of the involved GPE register must be
2726     + * updated by the caller if necessary.
2727     *
2728     ******************************************************************************/
2729    
2730     @@ -119,7 +121,7 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
2731     /* Set or clear just the bit that corresponds to this GPE */
2732    
2733     register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info);
2734     - switch (action & ~ACPI_GPE_SAVE_MASK) {
2735     + switch (action) {
2736     case ACPI_GPE_CONDITIONAL_ENABLE:
2737    
2738     /* Only enable if the corresponding enable_mask bit is set */
2739     @@ -149,9 +151,6 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
2740     /* Write the updated enable mask */
2741    
2742     status = acpi_hw_write(enable_mask, &gpe_register_info->enable_address);
2743     - if (ACPI_SUCCESS(status) && (action & ACPI_GPE_SAVE_MASK)) {
2744     - gpe_register_info->enable_mask = (u8)enable_mask;
2745     - }
2746     return (status);
2747     }
2748    
2749     @@ -286,10 +285,8 @@ acpi_hw_gpe_enable_write(u8 enable_mask,
2750     {
2751     acpi_status status;
2752    
2753     + gpe_register_info->enable_mask = enable_mask;
2754     status = acpi_hw_write(enable_mask, &gpe_register_info->enable_address);
2755     - if (ACPI_SUCCESS(status)) {
2756     - gpe_register_info->enable_mask = enable_mask;
2757     - }
2758     return (status);
2759     }
2760    
2761     diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c
2762     index 9bad45e63a45..7fbc2b9dcbbb 100644
2763     --- a/drivers/acpi/acpica/tbinstal.c
2764     +++ b/drivers/acpi/acpica/tbinstal.c
2765     @@ -346,7 +346,6 @@ acpi_tb_install_standard_table(acpi_physical_address address,
2766     */
2767     acpi_tb_uninstall_table(&new_table_desc);
2768     *table_index = i;
2769     - (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
2770     return_ACPI_STATUS(AE_OK);
2771     }
2772     }
2773     diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
2774     index bbca7830e18a..349f4fdd0b25 100644
2775     --- a/drivers/acpi/scan.c
2776     +++ b/drivers/acpi/scan.c
2777     @@ -298,7 +298,11 @@ bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent)
2778     struct acpi_device_physical_node *pn;
2779     bool offline = true;
2780    
2781     - mutex_lock(&adev->physical_node_lock);
2782     + /*
2783     + * acpi_container_offline() calls this for all of the container's
2784     + * children under the container's physical_node_lock lock.
2785     + */
2786     + mutex_lock_nested(&adev->physical_node_lock, SINGLE_DEPTH_NESTING);
2787    
2788     list_for_each_entry(pn, &adev->physical_node_list, node)
2789     if (device_supports_offline(pn->dev) && !pn->dev->offline) {
2790     diff --git a/drivers/base/bus.c b/drivers/base/bus.c
2791     index 876bae5ade33..79bc203f51ef 100644
2792     --- a/drivers/base/bus.c
2793     +++ b/drivers/base/bus.c
2794     @@ -515,11 +515,11 @@ int bus_add_device(struct device *dev)
2795     goto out_put;
2796     error = device_add_groups(dev, bus->dev_groups);
2797     if (error)
2798     - goto out_groups;
2799     + goto out_id;
2800     error = sysfs_create_link(&bus->p->devices_kset->kobj,
2801     &dev->kobj, dev_name(dev));
2802     if (error)
2803     - goto out_id;
2804     + goto out_groups;
2805     error = sysfs_create_link(&dev->kobj,
2806     &dev->bus->p->subsys.kobj, "subsystem");
2807     if (error)
2808     diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c
2809     index 6e64563361f0..9c2ba1c97c42 100644
2810     --- a/drivers/base/cacheinfo.c
2811     +++ b/drivers/base/cacheinfo.c
2812     @@ -62,15 +62,21 @@ static int cache_setup_of_node(unsigned int cpu)
2813     return -ENOENT;
2814     }
2815    
2816     - while (np && index < cache_leaves(cpu)) {
2817     + while (index < cache_leaves(cpu)) {
2818     this_leaf = this_cpu_ci->info_list + index;
2819     if (this_leaf->level != 1)
2820     np = of_find_next_cache_node(np);
2821     else
2822     np = of_node_get(np);/* cpu node itself */
2823     + if (!np)
2824     + break;
2825     this_leaf->of_node = np;
2826     index++;
2827     }
2828     +
2829     + if (index != cache_leaves(cpu)) /* not all OF nodes populated */
2830     + return -ENOENT;
2831     +
2832     return 0;
2833     }
2834    
2835     @@ -189,8 +195,11 @@ static int detect_cache_attributes(unsigned int cpu)
2836     * will be set up here only if they are not populated already
2837     */
2838     ret = cache_shared_cpu_map_setup(cpu);
2839     - if (ret)
2840     + if (ret) {
2841     + pr_warn("Unable to detect cache hierarcy from DT for CPU %d\n",
2842     + cpu);
2843     goto free_ci;
2844     + }
2845     return 0;
2846    
2847     free_ci:
2848     diff --git a/drivers/base/platform.c b/drivers/base/platform.c
2849     index 9421fed40905..e68ab79df28b 100644
2850     --- a/drivers/base/platform.c
2851     +++ b/drivers/base/platform.c
2852     @@ -101,6 +101,15 @@ int platform_get_irq(struct platform_device *dev, unsigned int num)
2853     }
2854    
2855     r = platform_get_resource(dev, IORESOURCE_IRQ, num);
2856     + /*
2857     + * The resources may pass trigger flags to the irqs that need
2858     + * to be set up. It so happens that the trigger flags for
2859     + * IORESOURCE_BITS correspond 1-to-1 to the IRQF_TRIGGER*
2860     + * settings.
2861     + */
2862     + if (r && r->flags & IORESOURCE_BITS)
2863     + irqd_set_trigger_type(irq_get_irq_data(r->start),
2864     + r->flags & IORESOURCE_BITS);
2865    
2866     return r ? r->start : -ENXIO;
2867     #endif
2868     diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
2869     index de4c8499cbac..288547a3c566 100644
2870     --- a/drivers/bluetooth/ath3k.c
2871     +++ b/drivers/bluetooth/ath3k.c
2872     @@ -65,6 +65,7 @@ static const struct usb_device_id ath3k_table[] = {
2873     /* Atheros AR3011 with sflash firmware*/
2874     { USB_DEVICE(0x0489, 0xE027) },
2875     { USB_DEVICE(0x0489, 0xE03D) },
2876     + { USB_DEVICE(0x04F2, 0xAFF1) },
2877     { USB_DEVICE(0x0930, 0x0215) },
2878     { USB_DEVICE(0x0CF3, 0x3002) },
2879     { USB_DEVICE(0x0CF3, 0xE019) },
2880     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
2881     index 8bfc4c2bba87..2c527da668ae 100644
2882     --- a/drivers/bluetooth/btusb.c
2883     +++ b/drivers/bluetooth/btusb.c
2884     @@ -159,6 +159,7 @@ static const struct usb_device_id blacklist_table[] = {
2885     /* Atheros 3011 with sflash firmware */
2886     { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
2887     { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
2888     + { USB_DEVICE(0x04f2, 0xaff1), .driver_info = BTUSB_IGNORE },
2889     { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
2890     { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
2891     { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
2892     diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
2893     index e096e9cddb40..283f00a7f036 100644
2894     --- a/drivers/char/tpm/tpm-chip.c
2895     +++ b/drivers/char/tpm/tpm-chip.c
2896     @@ -170,6 +170,41 @@ static void tpm_dev_del_device(struct tpm_chip *chip)
2897     device_unregister(&chip->dev);
2898     }
2899    
2900     +static int tpm1_chip_register(struct tpm_chip *chip)
2901     +{
2902     + int rc;
2903     +
2904     + if (chip->flags & TPM_CHIP_FLAG_TPM2)
2905     + return 0;
2906     +
2907     + rc = tpm_sysfs_add_device(chip);
2908     + if (rc)
2909     + return rc;
2910     +
2911     + rc = tpm_add_ppi(chip);
2912     + if (rc) {
2913     + tpm_sysfs_del_device(chip);
2914     + return rc;
2915     + }
2916     +
2917     + chip->bios_dir = tpm_bios_log_setup(chip->devname);
2918     +
2919     + return 0;
2920     +}
2921     +
2922     +static void tpm1_chip_unregister(struct tpm_chip *chip)
2923     +{
2924     + if (chip->flags & TPM_CHIP_FLAG_TPM2)
2925     + return;
2926     +
2927     + if (chip->bios_dir)
2928     + tpm_bios_log_teardown(chip->bios_dir);
2929     +
2930     + tpm_remove_ppi(chip);
2931     +
2932     + tpm_sysfs_del_device(chip);
2933     +}
2934     +
2935     /*
2936     * tpm_chip_register() - create a character device for the TPM chip
2937     * @chip: TPM chip to use.
2938     @@ -185,22 +220,13 @@ int tpm_chip_register(struct tpm_chip *chip)
2939     {
2940     int rc;
2941    
2942     - /* Populate sysfs for TPM1 devices. */
2943     - if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
2944     - rc = tpm_sysfs_add_device(chip);
2945     - if (rc)
2946     - goto del_misc;
2947     -
2948     - rc = tpm_add_ppi(chip);
2949     - if (rc)
2950     - goto del_sysfs;
2951     -
2952     - chip->bios_dir = tpm_bios_log_setup(chip->devname);
2953     - }
2954     + rc = tpm1_chip_register(chip);
2955     + if (rc)
2956     + return rc;
2957    
2958     rc = tpm_dev_add_device(chip);
2959     if (rc)
2960     - return rc;
2961     + goto out_err;
2962    
2963     /* Make the chip available. */
2964     spin_lock(&driver_lock);
2965     @@ -210,10 +236,8 @@ int tpm_chip_register(struct tpm_chip *chip)
2966     chip->flags |= TPM_CHIP_FLAG_REGISTERED;
2967    
2968     return 0;
2969     -del_sysfs:
2970     - tpm_sysfs_del_device(chip);
2971     -del_misc:
2972     - tpm_dev_del_device(chip);
2973     +out_err:
2974     + tpm1_chip_unregister(chip);
2975     return rc;
2976     }
2977     EXPORT_SYMBOL_GPL(tpm_chip_register);
2978     @@ -238,13 +262,7 @@ void tpm_chip_unregister(struct tpm_chip *chip)
2979     spin_unlock(&driver_lock);
2980     synchronize_rcu();
2981    
2982     - if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
2983     - if (chip->bios_dir)
2984     - tpm_bios_log_teardown(chip->bios_dir);
2985     - tpm_remove_ppi(chip);
2986     - tpm_sysfs_del_device(chip);
2987     - }
2988     -
2989     + tpm1_chip_unregister(chip);
2990     tpm_dev_del_device(chip);
2991     }
2992     EXPORT_SYMBOL_GPL(tpm_chip_unregister);
2993     diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c
2994     index a23ac0c724f0..0b7c3e8840ba 100644
2995     --- a/drivers/clk/at91/clk-usb.c
2996     +++ b/drivers/clk/at91/clk-usb.c
2997     @@ -56,22 +56,55 @@ static unsigned long at91sam9x5_clk_usb_recalc_rate(struct clk_hw *hw,
2998     return DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1));
2999     }
3000    
3001     -static long at91sam9x5_clk_usb_round_rate(struct clk_hw *hw, unsigned long rate,
3002     - unsigned long *parent_rate)
3003     +static long at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw,
3004     + unsigned long rate,
3005     + unsigned long min_rate,
3006     + unsigned long max_rate,
3007     + unsigned long *best_parent_rate,
3008     + struct clk_hw **best_parent_hw)
3009     {
3010     - unsigned long div;
3011     + struct clk *parent = NULL;
3012     + long best_rate = -EINVAL;
3013     + unsigned long tmp_rate;
3014     + int best_diff = -1;
3015     + int tmp_diff;
3016     + int i;
3017    
3018     - if (!rate)
3019     - return -EINVAL;
3020     + for (i = 0; i < __clk_get_num_parents(hw->clk); i++) {
3021     + int div;
3022    
3023     - if (rate >= *parent_rate)
3024     - return *parent_rate;
3025     + parent = clk_get_parent_by_index(hw->clk, i);
3026     + if (!parent)
3027     + continue;
3028     +
3029     + for (div = 1; div < SAM9X5_USB_MAX_DIV + 2; div++) {
3030     + unsigned long tmp_parent_rate;
3031     +
3032     + tmp_parent_rate = rate * div;
3033     + tmp_parent_rate = __clk_round_rate(parent,
3034     + tmp_parent_rate);
3035     + tmp_rate = DIV_ROUND_CLOSEST(tmp_parent_rate, div);
3036     + if (tmp_rate < rate)
3037     + tmp_diff = rate - tmp_rate;
3038     + else
3039     + tmp_diff = tmp_rate - rate;
3040     +
3041     + if (best_diff < 0 || best_diff > tmp_diff) {
3042     + best_rate = tmp_rate;
3043     + best_diff = tmp_diff;
3044     + *best_parent_rate = tmp_parent_rate;
3045     + *best_parent_hw = __clk_get_hw(parent);
3046     + }
3047     +
3048     + if (!best_diff || tmp_rate < rate)
3049     + break;
3050     + }
3051    
3052     - div = DIV_ROUND_CLOSEST(*parent_rate, rate);
3053     - if (div > SAM9X5_USB_MAX_DIV + 1)
3054     - div = SAM9X5_USB_MAX_DIV + 1;
3055     + if (!best_diff)
3056     + break;
3057     + }
3058    
3059     - return DIV_ROUND_CLOSEST(*parent_rate, div);
3060     + return best_rate;
3061     }
3062    
3063     static int at91sam9x5_clk_usb_set_parent(struct clk_hw *hw, u8 index)
3064     @@ -121,7 +154,7 @@ static int at91sam9x5_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate,
3065    
3066     static const struct clk_ops at91sam9x5_usb_ops = {
3067     .recalc_rate = at91sam9x5_clk_usb_recalc_rate,
3068     - .round_rate = at91sam9x5_clk_usb_round_rate,
3069     + .determine_rate = at91sam9x5_clk_usb_determine_rate,
3070     .get_parent = at91sam9x5_clk_usb_get_parent,
3071     .set_parent = at91sam9x5_clk_usb_set_parent,
3072     .set_rate = at91sam9x5_clk_usb_set_rate,
3073     @@ -159,7 +192,7 @@ static const struct clk_ops at91sam9n12_usb_ops = {
3074     .disable = at91sam9n12_clk_usb_disable,
3075     .is_enabled = at91sam9n12_clk_usb_is_enabled,
3076     .recalc_rate = at91sam9x5_clk_usb_recalc_rate,
3077     - .round_rate = at91sam9x5_clk_usb_round_rate,
3078     + .determine_rate = at91sam9x5_clk_usb_determine_rate,
3079     .set_rate = at91sam9x5_clk_usb_set_rate,
3080     };
3081    
3082     @@ -179,7 +212,8 @@ at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name,
3083     init.ops = &at91sam9x5_usb_ops;
3084     init.parent_names = parent_names;
3085     init.num_parents = num_parents;
3086     - init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE;
3087     + init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE |
3088     + CLK_SET_RATE_PARENT;
3089    
3090     usb->hw.init = &init;
3091     usb->pmc = pmc;
3092     @@ -207,7 +241,7 @@ at91sam9n12_clk_register_usb(struct at91_pmc *pmc, const char *name,
3093     init.ops = &at91sam9n12_usb_ops;
3094     init.parent_names = &parent_name;
3095     init.num_parents = 1;
3096     - init.flags = CLK_SET_RATE_GATE;
3097     + init.flags = CLK_SET_RATE_GATE | CLK_SET_RATE_PARENT;
3098    
3099     usb->hw.init = &init;
3100     usb->pmc = pmc;
3101     diff --git a/drivers/clk/qcom/clk-rcg.c b/drivers/clk/qcom/clk-rcg.c
3102     index 0039bd7d3965..466f30ca65c2 100644
3103     --- a/drivers/clk/qcom/clk-rcg.c
3104     +++ b/drivers/clk/qcom/clk-rcg.c
3105     @@ -495,6 +495,57 @@ static int clk_rcg_bypass_set_rate(struct clk_hw *hw, unsigned long rate,
3106     return __clk_rcg_set_rate(rcg, rcg->freq_tbl);
3107     }
3108    
3109     +/*
3110     + * This type of clock has a glitch-free mux that switches between the output of
3111     + * the M/N counter and an always on clock source (XO). When clk_set_rate() is
3112     + * called we need to make sure that we don't switch to the M/N counter if it
3113     + * isn't clocking because the mux will get stuck and the clock will stop
3114     + * outputting a clock. This can happen if the framework isn't aware that this
3115     + * clock is on and so clk_set_rate() doesn't turn on the new parent. To fix
3116     + * this we switch the mux in the enable/disable ops and reprogram the M/N
3117     + * counter in the set_rate op. We also make sure to switch away from the M/N
3118     + * counter in set_rate if software thinks the clock is off.
3119     + */
3120     +static int clk_rcg_lcc_set_rate(struct clk_hw *hw, unsigned long rate,
3121     + unsigned long parent_rate)
3122     +{
3123     + struct clk_rcg *rcg = to_clk_rcg(hw);
3124     + const struct freq_tbl *f;
3125     + int ret;
3126     + u32 gfm = BIT(10);
3127     +
3128     + f = qcom_find_freq(rcg->freq_tbl, rate);
3129     + if (!f)
3130     + return -EINVAL;
3131     +
3132     + /* Switch to XO to avoid glitches */
3133     + regmap_update_bits(rcg->clkr.regmap, rcg->ns_reg, gfm, 0);
3134     + ret = __clk_rcg_set_rate(rcg, f);
3135     + /* Switch back to M/N if it's clocking */
3136     + if (__clk_is_enabled(hw->clk))
3137     + regmap_update_bits(rcg->clkr.regmap, rcg->ns_reg, gfm, gfm);
3138     +
3139     + return ret;
3140     +}
3141     +
3142     +static int clk_rcg_lcc_enable(struct clk_hw *hw)
3143     +{
3144     + struct clk_rcg *rcg = to_clk_rcg(hw);
3145     + u32 gfm = BIT(10);
3146     +
3147     + /* Use M/N */
3148     + return regmap_update_bits(rcg->clkr.regmap, rcg->ns_reg, gfm, gfm);
3149     +}
3150     +
3151     +static void clk_rcg_lcc_disable(struct clk_hw *hw)
3152     +{
3153     + struct clk_rcg *rcg = to_clk_rcg(hw);
3154     + u32 gfm = BIT(10);
3155     +
3156     + /* Use XO */
3157     + regmap_update_bits(rcg->clkr.regmap, rcg->ns_reg, gfm, 0);
3158     +}
3159     +
3160     static int __clk_dyn_rcg_set_rate(struct clk_hw *hw, unsigned long rate)
3161     {
3162     struct clk_dyn_rcg *rcg = to_clk_dyn_rcg(hw);
3163     @@ -543,6 +594,17 @@ const struct clk_ops clk_rcg_bypass_ops = {
3164     };
3165     EXPORT_SYMBOL_GPL(clk_rcg_bypass_ops);
3166    
3167     +const struct clk_ops clk_rcg_lcc_ops = {
3168     + .enable = clk_rcg_lcc_enable,
3169     + .disable = clk_rcg_lcc_disable,
3170     + .get_parent = clk_rcg_get_parent,
3171     + .set_parent = clk_rcg_set_parent,
3172     + .recalc_rate = clk_rcg_recalc_rate,
3173     + .determine_rate = clk_rcg_determine_rate,
3174     + .set_rate = clk_rcg_lcc_set_rate,
3175     +};
3176     +EXPORT_SYMBOL_GPL(clk_rcg_lcc_ops);
3177     +
3178     const struct clk_ops clk_dyn_rcg_ops = {
3179     .enable = clk_enable_regmap,
3180     .is_enabled = clk_is_enabled_regmap,
3181     diff --git a/drivers/clk/qcom/clk-rcg.h b/drivers/clk/qcom/clk-rcg.h
3182     index 687e41f91d7c..d09d06ba278e 100644
3183     --- a/drivers/clk/qcom/clk-rcg.h
3184     +++ b/drivers/clk/qcom/clk-rcg.h
3185     @@ -96,6 +96,7 @@ struct clk_rcg {
3186    
3187     extern const struct clk_ops clk_rcg_ops;
3188     extern const struct clk_ops clk_rcg_bypass_ops;
3189     +extern const struct clk_ops clk_rcg_lcc_ops;
3190    
3191     #define to_clk_rcg(_hw) container_of(to_clk_regmap(_hw), struct clk_rcg, clkr)
3192    
3193     diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c
3194     index 742acfa18d63..381f27469a9c 100644
3195     --- a/drivers/clk/qcom/clk-rcg2.c
3196     +++ b/drivers/clk/qcom/clk-rcg2.c
3197     @@ -243,7 +243,7 @@ static int clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
3198     mask |= CFG_SRC_SEL_MASK | CFG_MODE_MASK;
3199     cfg = f->pre_div << CFG_SRC_DIV_SHIFT;
3200     cfg |= rcg->parent_map[f->src] << CFG_SRC_SEL_SHIFT;
3201     - if (rcg->mnd_width && f->n)
3202     + if (rcg->mnd_width && f->n && (f->m != f->n))
3203     cfg |= CFG_MODE_DUAL_EDGE;
3204     ret = regmap_update_bits(rcg->clkr.regmap,
3205     rcg->cmd_rcgr + CFG_REG, mask, cfg);
3206     diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c
3207     index cbdc31dea7f4..a015bb06c09b 100644
3208     --- a/drivers/clk/qcom/gcc-ipq806x.c
3209     +++ b/drivers/clk/qcom/gcc-ipq806x.c
3210     @@ -525,8 +525,8 @@ static struct freq_tbl clk_tbl_gsbi_qup[] = {
3211     { 10800000, P_PXO, 1, 2, 5 },
3212     { 15060000, P_PLL8, 1, 2, 51 },
3213     { 24000000, P_PLL8, 4, 1, 4 },
3214     + { 25000000, P_PXO, 1, 0, 0 },
3215     { 25600000, P_PLL8, 1, 1, 15 },
3216     - { 27000000, P_PXO, 1, 0, 0 },
3217     { 48000000, P_PLL8, 4, 1, 2 },
3218     { 51200000, P_PLL8, 1, 2, 15 },
3219     { }
3220     diff --git a/drivers/clk/qcom/lcc-ipq806x.c b/drivers/clk/qcom/lcc-ipq806x.c
3221     index c9ff27b4648b..a6d3a6745c4d 100644
3222     --- a/drivers/clk/qcom/lcc-ipq806x.c
3223     +++ b/drivers/clk/qcom/lcc-ipq806x.c
3224     @@ -294,14 +294,14 @@ static struct clk_regmap_mux pcm_clk = {
3225     };
3226    
3227     static struct freq_tbl clk_tbl_aif_osr[] = {
3228     - { 22050, P_PLL4, 1, 147, 20480 },
3229     - { 32000, P_PLL4, 1, 1, 96 },
3230     - { 44100, P_PLL4, 1, 147, 10240 },
3231     - { 48000, P_PLL4, 1, 1, 64 },
3232     - { 88200, P_PLL4, 1, 147, 5120 },
3233     - { 96000, P_PLL4, 1, 1, 32 },
3234     - { 176400, P_PLL4, 1, 147, 2560 },
3235     - { 192000, P_PLL4, 1, 1, 16 },
3236     + { 2822400, P_PLL4, 1, 147, 20480 },
3237     + { 4096000, P_PLL4, 1, 1, 96 },
3238     + { 5644800, P_PLL4, 1, 147, 10240 },
3239     + { 6144000, P_PLL4, 1, 1, 64 },
3240     + { 11289600, P_PLL4, 1, 147, 5120 },
3241     + { 12288000, P_PLL4, 1, 1, 32 },
3242     + { 22579200, P_PLL4, 1, 147, 2560 },
3243     + { 24576000, P_PLL4, 1, 1, 16 },
3244     { },
3245     };
3246    
3247     @@ -360,7 +360,7 @@ static struct clk_branch spdif_clk = {
3248     };
3249    
3250     static struct freq_tbl clk_tbl_ahbix[] = {
3251     - { 131072, P_PLL4, 1, 1, 3 },
3252     + { 131072000, P_PLL4, 1, 1, 3 },
3253     { },
3254     };
3255    
3256     @@ -386,13 +386,12 @@ static struct clk_rcg ahbix_clk = {
3257     .freq_tbl = clk_tbl_ahbix,
3258     .clkr = {
3259     .enable_reg = 0x38,
3260     - .enable_mask = BIT(10), /* toggle the gfmux to select mn/pxo */
3261     + .enable_mask = BIT(11),
3262     .hw.init = &(struct clk_init_data){
3263     .name = "ahbix",
3264     .parent_names = lcc_pxo_pll4,
3265     .num_parents = 2,
3266     - .ops = &clk_rcg_ops,
3267     - .flags = CLK_SET_RATE_GATE,
3268     + .ops = &clk_rcg_lcc_ops,
3269     },
3270     },
3271     };
3272     diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
3273     index 51462e85675f..714d6ba782c8 100644
3274     --- a/drivers/clk/samsung/clk-exynos4.c
3275     +++ b/drivers/clk/samsung/clk-exynos4.c
3276     @@ -1354,7 +1354,7 @@ static struct samsung_pll_clock exynos4x12_plls[nr_plls] __initdata = {
3277     VPLL_LOCK, VPLL_CON0, NULL),
3278     };
3279    
3280     -static void __init exynos4_core_down_clock(enum exynos4_soc soc)
3281     +static void __init exynos4x12_core_down_clock(void)
3282     {
3283     unsigned int tmp;
3284    
3285     @@ -1373,11 +1373,9 @@ static void __init exynos4_core_down_clock(enum exynos4_soc soc)
3286     __raw_writel(tmp, reg_base + PWR_CTRL1);
3287    
3288     /*
3289     - * Disable the clock up feature on Exynos4x12, in case it was
3290     - * enabled by bootloader.
3291     + * Disable the clock up feature in case it was enabled by bootloader.
3292     */
3293     - if (exynos4_soc == EXYNOS4X12)
3294     - __raw_writel(0x0, reg_base + E4X12_PWR_CTRL2);
3295     + __raw_writel(0x0, reg_base + E4X12_PWR_CTRL2);
3296     }
3297    
3298     /* register exynos4 clocks */
3299     @@ -1474,7 +1472,8 @@ static void __init exynos4_clk_init(struct device_node *np,
3300     samsung_clk_register_alias(ctx, exynos4_aliases,
3301     ARRAY_SIZE(exynos4_aliases));
3302    
3303     - exynos4_core_down_clock(soc);
3304     + if (soc == EXYNOS4X12)
3305     + exynos4x12_core_down_clock();
3306     exynos4_clk_sleep_init();
3307    
3308     samsung_clk_of_add_provider(np, ctx);
3309     diff --git a/drivers/clk/tegra/clk-tegra124.c b/drivers/clk/tegra/clk-tegra124.c
3310     index 9a893f2fe8e9..23ce0afefca5 100644
3311     --- a/drivers/clk/tegra/clk-tegra124.c
3312     +++ b/drivers/clk/tegra/clk-tegra124.c
3313     @@ -1110,16 +1110,18 @@ static __init void tegra124_periph_clk_init(void __iomem *clk_base,
3314     1, 2);
3315     clks[TEGRA124_CLK_XUSB_SS_DIV2] = clk;
3316    
3317     - clk = clk_register_gate(NULL, "plld_dsi", "plld_out0", 0,
3318     + clk = clk_register_gate(NULL, "pll_d_dsi_out", "pll_d_out0", 0,
3319     clk_base + PLLD_MISC, 30, 0, &pll_d_lock);
3320     - clks[TEGRA124_CLK_PLLD_DSI] = clk;
3321     + clks[TEGRA124_CLK_PLL_D_DSI_OUT] = clk;
3322    
3323     - clk = tegra_clk_register_periph_gate("dsia", "plld_dsi", 0, clk_base,
3324     - 0, 48, periph_clk_enb_refcnt);
3325     + clk = tegra_clk_register_periph_gate("dsia", "pll_d_dsi_out", 0,
3326     + clk_base, 0, 48,
3327     + periph_clk_enb_refcnt);
3328     clks[TEGRA124_CLK_DSIA] = clk;
3329    
3330     - clk = tegra_clk_register_periph_gate("dsib", "plld_dsi", 0, clk_base,
3331     - 0, 82, periph_clk_enb_refcnt);
3332     + clk = tegra_clk_register_periph_gate("dsib", "pll_d_dsi_out", 0,
3333     + clk_base, 0, 82,
3334     + periph_clk_enb_refcnt);
3335     clks[TEGRA124_CLK_DSIB] = clk;
3336    
3337     /* emc mux */
3338     diff --git a/drivers/clk/tegra/clk.c b/drivers/clk/tegra/clk.c
3339     index 9ddb7547cb43..7a1df61847fc 100644
3340     --- a/drivers/clk/tegra/clk.c
3341     +++ b/drivers/clk/tegra/clk.c
3342     @@ -272,7 +272,7 @@ void __init tegra_add_of_provider(struct device_node *np)
3343     of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
3344    
3345     rst_ctlr.of_node = np;
3346     - rst_ctlr.nr_resets = clk_num * 32;
3347     + rst_ctlr.nr_resets = periph_banks * 32;
3348     reset_controller_register(&rst_ctlr);
3349     }
3350    
3351     diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
3352     index 42f95a4326b0..9a28b7e07c71 100644
3353     --- a/drivers/crypto/omap-aes.c
3354     +++ b/drivers/crypto/omap-aes.c
3355     @@ -554,15 +554,23 @@ static int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd)
3356     return err;
3357     }
3358    
3359     -static int omap_aes_check_aligned(struct scatterlist *sg)
3360     +static int omap_aes_check_aligned(struct scatterlist *sg, int total)
3361     {
3362     + int len = 0;
3363     +
3364     while (sg) {
3365     if (!IS_ALIGNED(sg->offset, 4))
3366     return -1;
3367     if (!IS_ALIGNED(sg->length, AES_BLOCK_SIZE))
3368     return -1;
3369     +
3370     + len += sg->length;
3371     sg = sg_next(sg);
3372     }
3373     +
3374     + if (len != total)
3375     + return -1;
3376     +
3377     return 0;
3378     }
3379    
3380     @@ -633,8 +641,8 @@ static int omap_aes_handle_queue(struct omap_aes_dev *dd,
3381     dd->in_sg = req->src;
3382     dd->out_sg = req->dst;
3383    
3384     - if (omap_aes_check_aligned(dd->in_sg) ||
3385     - omap_aes_check_aligned(dd->out_sg)) {
3386     + if (omap_aes_check_aligned(dd->in_sg, dd->total) ||
3387     + omap_aes_check_aligned(dd->out_sg, dd->total)) {
3388     if (omap_aes_copy_sgs(dd))
3389     pr_err("Failed to copy SGs for unaligned cases\n");
3390     dd->sgs_copied = 1;
3391     diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
3392     index d0bc123c7975..1a54205860f5 100644
3393     --- a/drivers/gpio/gpio-mvebu.c
3394     +++ b/drivers/gpio/gpio-mvebu.c
3395     @@ -320,11 +320,13 @@ static void mvebu_gpio_edge_irq_mask(struct irq_data *d)
3396     {
3397     struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
3398     struct mvebu_gpio_chip *mvchip = gc->private;
3399     + struct irq_chip_type *ct = irq_data_get_chip_type(d);
3400     u32 mask = 1 << (d->irq - gc->irq_base);
3401    
3402     irq_gc_lock(gc);
3403     - gc->mask_cache &= ~mask;
3404     - writel_relaxed(gc->mask_cache, mvebu_gpioreg_edge_mask(mvchip));
3405     + ct->mask_cache_priv &= ~mask;
3406     +
3407     + writel_relaxed(ct->mask_cache_priv, mvebu_gpioreg_edge_mask(mvchip));
3408     irq_gc_unlock(gc);
3409     }
3410    
3411     @@ -332,11 +334,13 @@ static void mvebu_gpio_edge_irq_unmask(struct irq_data *d)
3412     {
3413     struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
3414     struct mvebu_gpio_chip *mvchip = gc->private;
3415     + struct irq_chip_type *ct = irq_data_get_chip_type(d);
3416     +
3417     u32 mask = 1 << (d->irq - gc->irq_base);
3418    
3419     irq_gc_lock(gc);
3420     - gc->mask_cache |= mask;
3421     - writel_relaxed(gc->mask_cache, mvebu_gpioreg_edge_mask(mvchip));
3422     + ct->mask_cache_priv |= mask;
3423     + writel_relaxed(ct->mask_cache_priv, mvebu_gpioreg_edge_mask(mvchip));
3424     irq_gc_unlock(gc);
3425     }
3426    
3427     @@ -344,11 +348,13 @@ static void mvebu_gpio_level_irq_mask(struct irq_data *d)
3428     {
3429     struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
3430     struct mvebu_gpio_chip *mvchip = gc->private;
3431     + struct irq_chip_type *ct = irq_data_get_chip_type(d);
3432     +
3433     u32 mask = 1 << (d->irq - gc->irq_base);
3434    
3435     irq_gc_lock(gc);
3436     - gc->mask_cache &= ~mask;
3437     - writel_relaxed(gc->mask_cache, mvebu_gpioreg_level_mask(mvchip));
3438     + ct->mask_cache_priv &= ~mask;
3439     + writel_relaxed(ct->mask_cache_priv, mvebu_gpioreg_level_mask(mvchip));
3440     irq_gc_unlock(gc);
3441     }
3442    
3443     @@ -356,11 +362,13 @@ static void mvebu_gpio_level_irq_unmask(struct irq_data *d)
3444     {
3445     struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
3446     struct mvebu_gpio_chip *mvchip = gc->private;
3447     + struct irq_chip_type *ct = irq_data_get_chip_type(d);
3448     +
3449     u32 mask = 1 << (d->irq - gc->irq_base);
3450    
3451     irq_gc_lock(gc);
3452     - gc->mask_cache |= mask;
3453     - writel_relaxed(gc->mask_cache, mvebu_gpioreg_level_mask(mvchip));
3454     + ct->mask_cache_priv |= mask;
3455     + writel_relaxed(ct->mask_cache_priv, mvebu_gpioreg_level_mask(mvchip));
3456     irq_gc_unlock(gc);
3457     }
3458    
3459     diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c
3460     index bf17a60b40ed..1dbfba58f909 100644
3461     --- a/drivers/gpu/drm/exynos/exynos_dp_core.c
3462     +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c
3463     @@ -32,10 +32,16 @@
3464     #include <drm/bridge/ptn3460.h>
3465    
3466     #include "exynos_dp_core.h"
3467     +#include "exynos_drm_fimd.h"
3468    
3469     #define ctx_from_connector(c) container_of(c, struct exynos_dp_device, \
3470     connector)
3471    
3472     +static inline struct exynos_drm_crtc *dp_to_crtc(struct exynos_dp_device *dp)
3473     +{
3474     + return to_exynos_crtc(dp->encoder->crtc);
3475     +}
3476     +
3477     static inline struct exynos_dp_device *
3478     display_to_dp(struct exynos_drm_display *d)
3479     {
3480     @@ -1070,6 +1076,8 @@ static void exynos_dp_poweron(struct exynos_dp_device *dp)
3481     }
3482     }
3483    
3484     + fimd_dp_clock_enable(dp_to_crtc(dp), true);
3485     +
3486     clk_prepare_enable(dp->clock);
3487     exynos_dp_phy_init(dp);
3488     exynos_dp_init_dp(dp);
3489     @@ -1094,6 +1102,8 @@ static void exynos_dp_poweroff(struct exynos_dp_device *dp)
3490     exynos_dp_phy_exit(dp);
3491     clk_disable_unprepare(dp->clock);
3492    
3493     + fimd_dp_clock_enable(dp_to_crtc(dp), false);
3494     +
3495     if (dp->panel) {
3496     if (drm_panel_unprepare(dp->panel))
3497     DRM_ERROR("failed to turnoff the panel\n");
3498     diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
3499     index 33a10ce967ea..5d58f6cc0397 100644
3500     --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
3501     +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
3502     @@ -32,6 +32,7 @@
3503     #include "exynos_drm_fbdev.h"
3504     #include "exynos_drm_crtc.h"
3505     #include "exynos_drm_iommu.h"
3506     +#include "exynos_drm_fimd.h"
3507    
3508     /*
3509     * FIMD stands for Fully Interactive Mobile Display and
3510     @@ -1233,6 +1234,24 @@ static int fimd_remove(struct platform_device *pdev)
3511     return 0;
3512     }
3513    
3514     +void fimd_dp_clock_enable(struct exynos_drm_crtc *crtc, bool enable)
3515     +{
3516     + struct fimd_context *ctx = crtc->ctx;
3517     + u32 val;
3518     +
3519     + /*
3520     + * Only Exynos 5250, 5260, 5410 and 542x requires enabling DP/MIE
3521     + * clock. On these SoCs the bootloader may enable it but any
3522     + * power domain off/on will reset it to disable state.
3523     + */
3524     + if (ctx->driver_data != &exynos5_fimd_driver_data)
3525     + return;
3526     +
3527     + val = enable ? DP_MIE_CLK_DP_ENABLE : DP_MIE_CLK_DISABLE;
3528     + writel(DP_MIE_CLK_DP_ENABLE, ctx->regs + DP_MIE_CLKCON);
3529     +}
3530     +EXPORT_SYMBOL_GPL(fimd_dp_clock_enable);
3531     +
3532     struct platform_driver fimd_driver = {
3533     .probe = fimd_probe,
3534     .remove = fimd_remove,
3535     diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.h b/drivers/gpu/drm/exynos/exynos_drm_fimd.h
3536     new file mode 100644
3537     index 000000000000..b4fcaa568456
3538     --- /dev/null
3539     +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.h
3540     @@ -0,0 +1,15 @@
3541     +/*
3542     + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3543     + *
3544     + * This program is free software; you can redistribute it and/or modify it
3545     + * under the terms of the GNU General Public License as published by the
3546     + * Free Software Foundation; either version 2 of the License, or (at your
3547     + * option) any later version.
3548     + */
3549     +
3550     +#ifndef _EXYNOS_DRM_FIMD_H_
3551     +#define _EXYNOS_DRM_FIMD_H_
3552     +
3553     +extern void fimd_dp_clock_enable(struct exynos_drm_crtc *crtc, bool enable);
3554     +
3555     +#endif /* _EXYNOS_DRM_FIMD_H_ */
3556     diff --git a/drivers/gpu/drm/i2c/adv7511.c b/drivers/gpu/drm/i2c/adv7511.c
3557     index fa140e04d5fa..60ab1f75d58e 100644
3558     --- a/drivers/gpu/drm/i2c/adv7511.c
3559     +++ b/drivers/gpu/drm/i2c/adv7511.c
3560     @@ -33,6 +33,7 @@ struct adv7511 {
3561    
3562     unsigned int current_edid_segment;
3563     uint8_t edid_buf[256];
3564     + bool edid_read;
3565    
3566     wait_queue_head_t wq;
3567     struct drm_encoder *encoder;
3568     @@ -379,69 +380,71 @@ static bool adv7511_hpd(struct adv7511 *adv7511)
3569     return false;
3570     }
3571    
3572     -static irqreturn_t adv7511_irq_handler(int irq, void *devid)
3573     -{
3574     - struct adv7511 *adv7511 = devid;
3575     -
3576     - if (adv7511_hpd(adv7511))
3577     - drm_helper_hpd_irq_event(adv7511->encoder->dev);
3578     -
3579     - wake_up_all(&adv7511->wq);
3580     -
3581     - return IRQ_HANDLED;
3582     -}
3583     -
3584     -static unsigned int adv7511_is_interrupt_pending(struct adv7511 *adv7511,
3585     - unsigned int irq)
3586     +static int adv7511_irq_process(struct adv7511 *adv7511)
3587     {
3588     unsigned int irq0, irq1;
3589     - unsigned int pending;
3590     int ret;
3591    
3592     ret = regmap_read(adv7511->regmap, ADV7511_REG_INT(0), &irq0);
3593     if (ret < 0)
3594     - return 0;
3595     + return ret;
3596     +
3597     ret = regmap_read(adv7511->regmap, ADV7511_REG_INT(1), &irq1);
3598     if (ret < 0)
3599     - return 0;
3600     + return ret;
3601     +
3602     + regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0);
3603     + regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1);
3604     +
3605     + if (irq0 & ADV7511_INT0_HDP)
3606     + drm_helper_hpd_irq_event(adv7511->encoder->dev);
3607     +
3608     + if (irq0 & ADV7511_INT0_EDID_READY || irq1 & ADV7511_INT1_DDC_ERROR) {
3609     + adv7511->edid_read = true;
3610     +
3611     + if (adv7511->i2c_main->irq)
3612     + wake_up_all(&adv7511->wq);
3613     + }
3614     +
3615     + return 0;
3616     +}
3617    
3618     - pending = (irq1 << 8) | irq0;
3619     +static irqreturn_t adv7511_irq_handler(int irq, void *devid)
3620     +{
3621     + struct adv7511 *adv7511 = devid;
3622     + int ret;
3623    
3624     - return pending & irq;
3625     + ret = adv7511_irq_process(adv7511);
3626     + return ret < 0 ? IRQ_NONE : IRQ_HANDLED;
3627     }
3628    
3629     -static int adv7511_wait_for_interrupt(struct adv7511 *adv7511, int irq,
3630     - int timeout)
3631     +/* -----------------------------------------------------------------------------
3632     + * EDID retrieval
3633     + */
3634     +
3635     +static int adv7511_wait_for_edid(struct adv7511 *adv7511, int timeout)
3636     {
3637     - unsigned int pending;
3638     int ret;
3639    
3640     if (adv7511->i2c_main->irq) {
3641     ret = wait_event_interruptible_timeout(adv7511->wq,
3642     - adv7511_is_interrupt_pending(adv7511, irq),
3643     - msecs_to_jiffies(timeout));
3644     - if (ret <= 0)
3645     - return 0;
3646     - pending = adv7511_is_interrupt_pending(adv7511, irq);
3647     + adv7511->edid_read, msecs_to_jiffies(timeout));
3648     } else {
3649     - if (timeout < 25)
3650     - timeout = 25;
3651     - do {
3652     - pending = adv7511_is_interrupt_pending(adv7511, irq);
3653     - if (pending)
3654     + for (; timeout > 0; timeout -= 25) {
3655     + ret = adv7511_irq_process(adv7511);
3656     + if (ret < 0)
3657     break;
3658     +
3659     + if (adv7511->edid_read)
3660     + break;
3661     +
3662     msleep(25);
3663     - timeout -= 25;
3664     - } while (timeout >= 25);
3665     + }
3666     }
3667    
3668     - return pending;
3669     + return adv7511->edid_read ? 0 : -EIO;
3670     }
3671    
3672     -/* -----------------------------------------------------------------------------
3673     - * EDID retrieval
3674     - */
3675     -
3676     static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block,
3677     size_t len)
3678     {
3679     @@ -463,19 +466,14 @@ static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block,
3680     return ret;
3681    
3682     if (status != 2) {
3683     + adv7511->edid_read = false;
3684     regmap_write(adv7511->regmap, ADV7511_REG_EDID_SEGMENT,
3685     block);
3686     - ret = adv7511_wait_for_interrupt(adv7511,
3687     - ADV7511_INT0_EDID_READY |
3688     - ADV7511_INT1_DDC_ERROR, 200);
3689     -
3690     - if (!(ret & ADV7511_INT0_EDID_READY))
3691     - return -EIO;
3692     + ret = adv7511_wait_for_edid(adv7511, 200);
3693     + if (ret < 0)
3694     + return ret;
3695     }
3696    
3697     - regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
3698     - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR);
3699     -
3700     /* Break this apart, hopefully more I2C controllers will
3701     * support 64 byte transfers than 256 byte transfers
3702     */
3703     @@ -528,7 +526,9 @@ static int adv7511_get_modes(struct drm_encoder *encoder,
3704     /* Reading the EDID only works if the device is powered */
3705     if (adv7511->dpms_mode != DRM_MODE_DPMS_ON) {
3706     regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
3707     - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR);
3708     + ADV7511_INT0_EDID_READY);
3709     + regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
3710     + ADV7511_INT1_DDC_ERROR);
3711     regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
3712     ADV7511_POWER_POWER_DOWN, 0);
3713     adv7511->current_edid_segment = -1;
3714     @@ -563,7 +563,9 @@ static void adv7511_encoder_dpms(struct drm_encoder *encoder, int mode)
3715     adv7511->current_edid_segment = -1;
3716    
3717     regmap_write(adv7511->regmap, ADV7511_REG_INT(0),
3718     - ADV7511_INT0_EDID_READY | ADV7511_INT1_DDC_ERROR);
3719     + ADV7511_INT0_EDID_READY);
3720     + regmap_write(adv7511->regmap, ADV7511_REG_INT(1),
3721     + ADV7511_INT1_DDC_ERROR);
3722     regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
3723     ADV7511_POWER_POWER_DOWN, 0);
3724     /*
3725     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
3726     index 5c66b568bb81..ec4d932f8be4 100644
3727     --- a/drivers/gpu/drm/i915/i915_drv.c
3728     +++ b/drivers/gpu/drm/i915/i915_drv.c
3729     @@ -1042,7 +1042,7 @@ static void vlv_save_gunit_s0ix_state(struct drm_i915_private *dev_priv)
3730     s->lra_limits[i] = I915_READ(GEN7_LRA_LIMITS_BASE + i * 4);
3731    
3732     s->media_max_req_count = I915_READ(GEN7_MEDIA_MAX_REQ_COUNT);
3733     - s->gfx_max_req_count = I915_READ(GEN7_MEDIA_MAX_REQ_COUNT);
3734     + s->gfx_max_req_count = I915_READ(GEN7_GFX_MAX_REQ_COUNT);
3735    
3736     s->render_hwsp = I915_READ(RENDER_HWS_PGA_GEN7);
3737     s->ecochk = I915_READ(GAM_ECOCHK);
3738     @@ -1124,7 +1124,7 @@ static void vlv_restore_gunit_s0ix_state(struct drm_i915_private *dev_priv)
3739     I915_WRITE(GEN7_LRA_LIMITS_BASE + i * 4, s->lra_limits[i]);
3740    
3741     I915_WRITE(GEN7_MEDIA_MAX_REQ_COUNT, s->media_max_req_count);
3742     - I915_WRITE(GEN7_MEDIA_MAX_REQ_COUNT, s->gfx_max_req_count);
3743     + I915_WRITE(GEN7_GFX_MAX_REQ_COUNT, s->gfx_max_req_count);
3744    
3745     I915_WRITE(RENDER_HWS_PGA_GEN7, s->render_hwsp);
3746     I915_WRITE(GAM_ECOCHK, s->ecochk);
3747     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
3748     index ede5bbbd8a08..07320cb32611 100644
3749     --- a/drivers/gpu/drm/i915/i915_irq.c
3750     +++ b/drivers/gpu/drm/i915/i915_irq.c
3751     @@ -3718,14 +3718,12 @@ static int i8xx_irq_postinstall(struct drm_device *dev)
3752     ~(I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3753     I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3754     I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3755     - I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT |
3756     - I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
3757     + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT);
3758     I915_WRITE16(IMR, dev_priv->irq_mask);
3759    
3760     I915_WRITE16(IER,
3761     I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3762     I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3763     - I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
3764     I915_USER_INTERRUPT);
3765     POSTING_READ16(IER);
3766    
3767     @@ -3887,14 +3885,12 @@ static int i915_irq_postinstall(struct drm_device *dev)
3768     I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3769     I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3770     I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
3771     - I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT |
3772     - I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
3773     + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT);
3774    
3775     enable_mask =
3776     I915_ASLE_INTERRUPT |
3777     I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
3778     I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
3779     - I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
3780     I915_USER_INTERRUPT;
3781    
3782     if (I915_HAS_HOTPLUG(dev)) {
3783     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
3784     index 33b3d0a24071..f536ff2628fd 100644
3785     --- a/drivers/gpu/drm/i915/i915_reg.h
3786     +++ b/drivers/gpu/drm/i915/i915_reg.h
3787     @@ -1740,6 +1740,7 @@ enum punit_power_well {
3788     #define GMBUS_CYCLE_INDEX (2<<25)
3789     #define GMBUS_CYCLE_STOP (4<<25)
3790     #define GMBUS_BYTE_COUNT_SHIFT 16
3791     +#define GMBUS_BYTE_COUNT_MAX 256U
3792     #define GMBUS_SLAVE_INDEX_SHIFT 8
3793     #define GMBUS_SLAVE_ADDR_SHIFT 1
3794     #define GMBUS_SLAVE_READ (1<<0)
3795     diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
3796     index b31088a551f2..56e437e31580 100644
3797     --- a/drivers/gpu/drm/i915/intel_i2c.c
3798     +++ b/drivers/gpu/drm/i915/intel_i2c.c
3799     @@ -270,18 +270,17 @@ gmbus_wait_idle(struct drm_i915_private *dev_priv)
3800     }
3801    
3802     static int
3803     -gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
3804     - u32 gmbus1_index)
3805     +gmbus_xfer_read_chunk(struct drm_i915_private *dev_priv,
3806     + unsigned short addr, u8 *buf, unsigned int len,
3807     + u32 gmbus1_index)
3808     {
3809     int reg_offset = dev_priv->gpio_mmio_base;
3810     - u16 len = msg->len;
3811     - u8 *buf = msg->buf;
3812    
3813     I915_WRITE(GMBUS1 + reg_offset,
3814     gmbus1_index |
3815     GMBUS_CYCLE_WAIT |
3816     (len << GMBUS_BYTE_COUNT_SHIFT) |
3817     - (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
3818     + (addr << GMBUS_SLAVE_ADDR_SHIFT) |
3819     GMBUS_SLAVE_READ | GMBUS_SW_RDY);
3820     while (len) {
3821     int ret;
3822     @@ -303,11 +302,35 @@ gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
3823     }
3824    
3825     static int
3826     -gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
3827     +gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
3828     + u32 gmbus1_index)
3829     {
3830     - int reg_offset = dev_priv->gpio_mmio_base;
3831     - u16 len = msg->len;
3832     u8 *buf = msg->buf;
3833     + unsigned int rx_size = msg->len;
3834     + unsigned int len;
3835     + int ret;
3836     +
3837     + do {
3838     + len = min(rx_size, GMBUS_BYTE_COUNT_MAX);
3839     +
3840     + ret = gmbus_xfer_read_chunk(dev_priv, msg->addr,
3841     + buf, len, gmbus1_index);
3842     + if (ret)
3843     + return ret;
3844     +
3845     + rx_size -= len;
3846     + buf += len;
3847     + } while (rx_size != 0);
3848     +
3849     + return 0;
3850     +}
3851     +
3852     +static int
3853     +gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv,
3854     + unsigned short addr, u8 *buf, unsigned int len)
3855     +{
3856     + int reg_offset = dev_priv->gpio_mmio_base;
3857     + unsigned int chunk_size = len;
3858     u32 val, loop;
3859    
3860     val = loop = 0;
3861     @@ -319,8 +342,8 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
3862     I915_WRITE(GMBUS3 + reg_offset, val);
3863     I915_WRITE(GMBUS1 + reg_offset,
3864     GMBUS_CYCLE_WAIT |
3865     - (msg->len << GMBUS_BYTE_COUNT_SHIFT) |
3866     - (msg->addr << GMBUS_SLAVE_ADDR_SHIFT) |
3867     + (chunk_size << GMBUS_BYTE_COUNT_SHIFT) |
3868     + (addr << GMBUS_SLAVE_ADDR_SHIFT) |
3869     GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
3870     while (len) {
3871     int ret;
3872     @@ -337,6 +360,29 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
3873     if (ret)
3874     return ret;
3875     }
3876     +
3877     + return 0;
3878     +}
3879     +
3880     +static int
3881     +gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
3882     +{
3883     + u8 *buf = msg->buf;
3884     + unsigned int tx_size = msg->len;
3885     + unsigned int len;
3886     + int ret;
3887     +
3888     + do {
3889     + len = min(tx_size, GMBUS_BYTE_COUNT_MAX);
3890     +
3891     + ret = gmbus_xfer_write_chunk(dev_priv, msg->addr, buf, len);
3892     + if (ret)
3893     + return ret;
3894     +
3895     + buf += len;
3896     + tx_size -= len;
3897     + } while (tx_size != 0);
3898     +
3899     return 0;
3900     }
3901    
3902     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
3903     index 86807ee91bd1..9bd56116fd5a 100644
3904     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
3905     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
3906     @@ -330,8 +330,10 @@ atombios_set_crtc_dtd_timing(struct drm_crtc *crtc,
3907     misc |= ATOM_COMPOSITESYNC;
3908     if (mode->flags & DRM_MODE_FLAG_INTERLACE)
3909     misc |= ATOM_INTERLACE;
3910     - if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
3911     + if (mode->flags & DRM_MODE_FLAG_DBLCLK)
3912     misc |= ATOM_DOUBLE_CLOCK_MODE;
3913     + if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
3914     + misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2;
3915    
3916     args.susModeMiscInfo.usAccess = cpu_to_le16(misc);
3917     args.ucCRTC = radeon_crtc->crtc_id;
3918     @@ -374,8 +376,10 @@ static void atombios_crtc_set_timing(struct drm_crtc *crtc,
3919     misc |= ATOM_COMPOSITESYNC;
3920     if (mode->flags & DRM_MODE_FLAG_INTERLACE)
3921     misc |= ATOM_INTERLACE;
3922     - if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
3923     + if (mode->flags & DRM_MODE_FLAG_DBLCLK)
3924     misc |= ATOM_DOUBLE_CLOCK_MODE;
3925     + if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
3926     + misc |= ATOM_H_REPLICATIONBY2 | ATOM_V_REPLICATIONBY2;
3927    
3928     args.susModeMiscInfo.usAccess = cpu_to_le16(misc);
3929     args.ucCRTC = radeon_crtc->crtc_id;
3930     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
3931     index 9c4786759f16..7fe5590b328b 100644
3932     --- a/drivers/hid/hid-ids.h
3933     +++ b/drivers/hid/hid-ids.h
3934     @@ -459,6 +459,10 @@
3935     #define USB_DEVICE_ID_UGCI_FLYING 0x0020
3936     #define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
3937    
3938     +#define USB_VENDOR_ID_HP 0x03f0
3939     +#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE 0x0a4a
3940     +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a
3941     +
3942     #define USB_VENDOR_ID_HUION 0x256c
3943     #define USB_DEVICE_ID_HUION_TABLET 0x006e
3944    
3945     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
3946     index a82127753461..4e3ae9fbb9b5 100644
3947     --- a/drivers/hid/usbhid/hid-quirks.c
3948     +++ b/drivers/hid/usbhid/hid-quirks.c
3949     @@ -78,6 +78,8 @@ static const struct hid_blacklist {
3950     { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
3951     { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
3952     { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
3953     + { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
3954     + { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
3955     { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077, HID_QUIRK_ALWAYS_POLL },
3956     { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
3957     { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3, HID_QUIRK_NO_INIT_REPORTS },
3958     diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
3959     index 2978f5ee8d2a..00bc30e0db7f 100644
3960     --- a/drivers/hv/channel.c
3961     +++ b/drivers/hv/channel.c
3962     @@ -135,7 +135,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
3963     GFP_KERNEL);
3964     if (!open_info) {
3965     err = -ENOMEM;
3966     - goto error0;
3967     + goto error_gpadl;
3968     }
3969    
3970     init_completion(&open_info->waitevent);
3971     @@ -151,7 +151,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
3972    
3973     if (userdatalen > MAX_USER_DEFINED_BYTES) {
3974     err = -EINVAL;
3975     - goto error0;
3976     + goto error_gpadl;
3977     }
3978    
3979     if (userdatalen)
3980     @@ -195,6 +195,9 @@ error1:
3981     list_del(&open_info->msglistentry);
3982     spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
3983    
3984     +error_gpadl:
3985     + vmbus_teardown_gpadl(newchannel, newchannel->ringbuffer_gpadlhandle);
3986     +
3987     error0:
3988     free_pages((unsigned long)out,
3989     get_order(send_ringbuffer_size + recv_ringbuffer_size));
3990     diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
3991     index 5f96b1b3e3a5..019d5426fe52 100644
3992     --- a/drivers/i2c/busses/i2c-rk3x.c
3993     +++ b/drivers/i2c/busses/i2c-rk3x.c
3994     @@ -833,7 +833,7 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap,
3995     clk_disable(i2c->clk);
3996     spin_unlock_irqrestore(&i2c->lock, flags);
3997    
3998     - return ret;
3999     + return ret < 0 ? ret : num;
4000     }
4001    
4002     static u32 rk3x_i2c_func(struct i2c_adapter *adap)
4003     diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
4004     index edf274cabe81..8143162b374d 100644
4005     --- a/drivers/i2c/i2c-core.c
4006     +++ b/drivers/i2c/i2c-core.c
4007     @@ -596,6 +596,7 @@ int i2c_generic_scl_recovery(struct i2c_adapter *adap)
4008     adap->bus_recovery_info->set_scl(adap, 1);
4009     return i2c_generic_recovery(adap);
4010     }
4011     +EXPORT_SYMBOL_GPL(i2c_generic_scl_recovery);
4012    
4013     int i2c_generic_gpio_recovery(struct i2c_adapter *adap)
4014     {
4015     @@ -610,6 +611,7 @@ int i2c_generic_gpio_recovery(struct i2c_adapter *adap)
4016    
4017     return ret;
4018     }
4019     +EXPORT_SYMBOL_GPL(i2c_generic_gpio_recovery);
4020    
4021     int i2c_recover_bus(struct i2c_adapter *adap)
4022     {
4023     @@ -619,6 +621,7 @@ int i2c_recover_bus(struct i2c_adapter *adap)
4024     dev_dbg(&adap->dev, "Trying i2c bus recovery\n");
4025     return adap->bus_recovery_info->recover_bus(adap);
4026     }
4027     +EXPORT_SYMBOL_GPL(i2c_recover_bus);
4028    
4029     static int i2c_device_probe(struct device *dev)
4030     {
4031     @@ -1410,6 +1413,8 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
4032    
4033     dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
4034    
4035     + pm_runtime_no_callbacks(&adap->dev);
4036     +
4037     #ifdef CONFIG_I2C_COMPAT
4038     res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
4039     adap->dev.parent);
4040     diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c
4041     index 593f7ca9adc7..06cc1ff088f1 100644
4042     --- a/drivers/i2c/i2c-mux.c
4043     +++ b/drivers/i2c/i2c-mux.c
4044     @@ -32,8 +32,9 @@ struct i2c_mux_priv {
4045     struct i2c_algorithm algo;
4046    
4047     struct i2c_adapter *parent;
4048     - void *mux_priv; /* the mux chip/device */
4049     - u32 chan_id; /* the channel id */
4050     + struct device *mux_dev;
4051     + void *mux_priv;
4052     + u32 chan_id;
4053    
4054     int (*select)(struct i2c_adapter *, void *mux_priv, u32 chan_id);
4055     int (*deselect)(struct i2c_adapter *, void *mux_priv, u32 chan_id);
4056     @@ -119,6 +120,7 @@ struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent,
4057    
4058     /* Set up private adapter data */
4059     priv->parent = parent;
4060     + priv->mux_dev = mux_dev;
4061     priv->mux_priv = mux_priv;
4062     priv->chan_id = chan_id;
4063     priv->select = select;
4064     @@ -203,7 +205,7 @@ void i2c_del_mux_adapter(struct i2c_adapter *adap)
4065     char symlink_name[20];
4066    
4067     snprintf(symlink_name, sizeof(symlink_name), "channel-%u", priv->chan_id);
4068     - sysfs_remove_link(&adap->dev.parent->kobj, symlink_name);
4069     + sysfs_remove_link(&priv->mux_dev->kobj, symlink_name);
4070    
4071     sysfs_remove_link(&priv->adap.dev.kobj, "mux_device");
4072     i2c_del_adapter(adap);
4073     diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
4074     index b0e58522780d..44d1d7920202 100644
4075     --- a/drivers/idle/intel_idle.c
4076     +++ b/drivers/idle/intel_idle.c
4077     @@ -218,18 +218,10 @@ static struct cpuidle_state byt_cstates[] = {
4078     .enter = &intel_idle,
4079     .enter_freeze = intel_idle_freeze, },
4080     {
4081     - .name = "C1E-BYT",
4082     - .desc = "MWAIT 0x01",
4083     - .flags = MWAIT2flg(0x01),
4084     - .exit_latency = 15,
4085     - .target_residency = 30,
4086     - .enter = &intel_idle,
4087     - .enter_freeze = intel_idle_freeze, },
4088     - {
4089     .name = "C6N-BYT",
4090     .desc = "MWAIT 0x58",
4091     .flags = MWAIT2flg(0x58) | CPUIDLE_FLAG_TLB_FLUSHED,
4092     - .exit_latency = 40,
4093     + .exit_latency = 300,
4094     .target_residency = 275,
4095     .enter = &intel_idle,
4096     .enter_freeze = intel_idle_freeze, },
4097     @@ -237,7 +229,7 @@ static struct cpuidle_state byt_cstates[] = {
4098     .name = "C6S-BYT",
4099     .desc = "MWAIT 0x52",
4100     .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TLB_FLUSHED,
4101     - .exit_latency = 140,
4102     + .exit_latency = 500,
4103     .target_residency = 560,
4104     .enter = &intel_idle,
4105     .enter_freeze = intel_idle_freeze, },
4106     @@ -246,7 +238,7 @@ static struct cpuidle_state byt_cstates[] = {
4107     .desc = "MWAIT 0x60",
4108     .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
4109     .exit_latency = 1200,
4110     - .target_residency = 1500,
4111     + .target_residency = 4000,
4112     .enter = &intel_idle,
4113     .enter_freeze = intel_idle_freeze, },
4114     {
4115     diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
4116     index 8c014b5dab4c..38acb3cfc545 100644
4117     --- a/drivers/infiniband/core/umem.c
4118     +++ b/drivers/infiniband/core/umem.c
4119     @@ -99,12 +99,15 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
4120     if (dmasync)
4121     dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
4122    
4123     + if (!size)
4124     + return ERR_PTR(-EINVAL);
4125     +
4126     /*
4127     * If the combination of the addr and size requested for this memory
4128     * region causes an integer overflow, return error.
4129     */
4130     - if ((PAGE_ALIGN(addr + size) <= size) ||
4131     - (PAGE_ALIGN(addr + size) <= addr))
4132     + if (((addr + size) < addr) ||
4133     + PAGE_ALIGN(addr + size) < (addr + size))
4134     return ERR_PTR(-EINVAL);
4135    
4136     if (!can_do_mlock())
4137     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
4138     index ed2bd6701f9b..fbde33a5228c 100644
4139     --- a/drivers/infiniband/hw/mlx4/qp.c
4140     +++ b/drivers/infiniband/hw/mlx4/qp.c
4141     @@ -2605,8 +2605,7 @@ static int build_lso_seg(struct mlx4_wqe_lso_seg *wqe, struct ib_send_wr *wr,
4142    
4143     memcpy(wqe->header, wr->wr.ud.header, wr->wr.ud.hlen);
4144    
4145     - *lso_hdr_sz = cpu_to_be32((wr->wr.ud.mss - wr->wr.ud.hlen) << 16 |
4146     - wr->wr.ud.hlen);
4147     + *lso_hdr_sz = cpu_to_be32(wr->wr.ud.mss << 16 | wr->wr.ud.hlen);
4148     *lso_seg_len = halign;
4149     return 0;
4150     }
4151     diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
4152     index 20e859a6f1a6..76eb57b31a59 100644
4153     --- a/drivers/infiniband/ulp/iser/iser_initiator.c
4154     +++ b/drivers/infiniband/ulp/iser/iser_initiator.c
4155     @@ -409,8 +409,8 @@ int iser_send_command(struct iscsi_conn *conn,
4156     if (scsi_prot_sg_count(sc)) {
4157     prot_buf->buf = scsi_prot_sglist(sc);
4158     prot_buf->size = scsi_prot_sg_count(sc);
4159     - prot_buf->data_len = data_buf->data_len >>
4160     - ilog2(sc->device->sector_size) * 8;
4161     + prot_buf->data_len = (data_buf->data_len >>
4162     + ilog2(sc->device->sector_size)) * 8;
4163     }
4164    
4165     if (hdr->flags & ISCSI_FLAG_CMD_READ) {
4166     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
4167     index 075b19cc78e8..147029adb885 100644
4168     --- a/drivers/infiniband/ulp/isert/ib_isert.c
4169     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
4170     @@ -222,7 +222,7 @@ fail:
4171     static void
4172     isert_free_rx_descriptors(struct isert_conn *isert_conn)
4173     {
4174     - struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
4175     + struct ib_device *ib_dev = isert_conn->conn_device->ib_device;
4176     struct iser_rx_desc *rx_desc;
4177     int i;
4178    
4179     @@ -719,8 +719,8 @@ out:
4180     static void
4181     isert_connect_release(struct isert_conn *isert_conn)
4182     {
4183     - struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
4184     struct isert_device *device = isert_conn->conn_device;
4185     + struct ib_device *ib_dev = device->ib_device;
4186    
4187     isert_dbg("conn %p\n", isert_conn);
4188    
4189     @@ -728,7 +728,8 @@ isert_connect_release(struct isert_conn *isert_conn)
4190     isert_conn_free_fastreg_pool(isert_conn);
4191    
4192     isert_free_rx_descriptors(isert_conn);
4193     - rdma_destroy_id(isert_conn->conn_cm_id);
4194     + if (isert_conn->conn_cm_id)
4195     + rdma_destroy_id(isert_conn->conn_cm_id);
4196    
4197     if (isert_conn->conn_qp) {
4198     struct isert_comp *comp = isert_conn->conn_qp->recv_cq->cq_context;
4199     @@ -878,12 +879,15 @@ isert_disconnected_handler(struct rdma_cm_id *cma_id,
4200     return 0;
4201     }
4202    
4203     -static void
4204     +static int
4205     isert_connect_error(struct rdma_cm_id *cma_id)
4206     {
4207     struct isert_conn *isert_conn = cma_id->qp->qp_context;
4208    
4209     + isert_conn->conn_cm_id = NULL;
4210     isert_put_conn(isert_conn);
4211     +
4212     + return -1;
4213     }
4214    
4215     static int
4216     @@ -912,7 +916,7 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
4217     case RDMA_CM_EVENT_REJECTED: /* FALLTHRU */
4218     case RDMA_CM_EVENT_UNREACHABLE: /* FALLTHRU */
4219     case RDMA_CM_EVENT_CONNECT_ERROR:
4220     - isert_connect_error(cma_id);
4221     + ret = isert_connect_error(cma_id);
4222     break;
4223     default:
4224     isert_err("Unhandled RDMA CMA event: %d\n", event->event);
4225     @@ -1861,11 +1865,13 @@ isert_completion_rdma_read(struct iser_tx_desc *tx_desc,
4226     cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT;
4227     spin_unlock_bh(&cmd->istate_lock);
4228    
4229     - if (ret)
4230     + if (ret) {
4231     + target_put_sess_cmd(se_cmd->se_sess, se_cmd);
4232     transport_send_check_condition_and_sense(se_cmd,
4233     se_cmd->pi_err, 0);
4234     - else
4235     + } else {
4236     target_execute_cmd(se_cmd);
4237     + }
4238     }
4239    
4240     static void
4241     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
4242     index 27bcdbc950c9..ea6cb64dfb28 100644
4243     --- a/drivers/input/mouse/alps.c
4244     +++ b/drivers/input/mouse/alps.c
4245     @@ -1159,13 +1159,14 @@ static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
4246     bool report_buttons)
4247     {
4248     struct alps_data *priv = psmouse->private;
4249     - struct input_dev *dev;
4250     + struct input_dev *dev, *dev2 = NULL;
4251    
4252     /* Figure out which device to use to report the bare packet */
4253     if (priv->proto_version == ALPS_PROTO_V2 &&
4254     (priv->flags & ALPS_DUALPOINT)) {
4255     /* On V2 devices the DualPoint Stick reports bare packets */
4256     dev = priv->dev2;
4257     + dev2 = psmouse->dev;
4258     } else if (unlikely(IS_ERR_OR_NULL(priv->dev3))) {
4259     /* Register dev3 mouse if we received PS/2 packet first time */
4260     if (!IS_ERR(priv->dev3))
4261     @@ -1177,7 +1178,7 @@ static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
4262     }
4263    
4264     if (report_buttons)
4265     - alps_report_buttons(dev, NULL,
4266     + alps_report_buttons(dev, dev2,
4267     packet[0] & 1, packet[0] & 2, packet[0] & 4);
4268    
4269     input_report_rel(dev, REL_X,
4270     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
4271     index 6e22682c8255..991dc6b20a58 100644
4272     --- a/drivers/input/mouse/elantech.c
4273     +++ b/drivers/input/mouse/elantech.c
4274     @@ -893,6 +893,21 @@ static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse)
4275     }
4276    
4277     /*
4278     + * This writes the reg_07 value again to the hardware at the end of every
4279     + * set_rate call because the register loses its value. reg_07 allows setting
4280     + * absolute mode on v4 hardware
4281     + */
4282     +static void elantech_set_rate_restore_reg_07(struct psmouse *psmouse,
4283     + unsigned int rate)
4284     +{
4285     + struct elantech_data *etd = psmouse->private;
4286     +
4287     + etd->original_set_rate(psmouse, rate);
4288     + if (elantech_write_reg(psmouse, 0x07, etd->reg_07))
4289     + psmouse_err(psmouse, "restoring reg_07 failed\n");
4290     +}
4291     +
4292     +/*
4293     * Put the touchpad into absolute mode
4294     */
4295     static int elantech_set_absolute_mode(struct psmouse *psmouse)
4296     @@ -1094,6 +1109,8 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
4297     * Asus K53SV 0x450f01 78, 15, 0c 2 hw buttons
4298     * Asus G46VW 0x460f02 00, 18, 0c 2 hw buttons
4299     * Asus G750JX 0x360f00 00, 16, 0c 2 hw buttons
4300     + * Asus TP500LN 0x381f17 10, 14, 0e clickpad
4301     + * Asus X750JN 0x381f17 10, 14, 0e clickpad
4302     * Asus UX31 0x361f00 20, 15, 0e clickpad
4303     * Asus UX32VD 0x361f02 00, 15, 0e clickpad
4304     * Avatar AVIU-145A2 0x361f00 ? clickpad
4305     @@ -1635,6 +1652,11 @@ int elantech_init(struct psmouse *psmouse)
4306     goto init_fail;
4307     }
4308    
4309     + if (etd->fw_version == 0x381f17) {
4310     + etd->original_set_rate = psmouse->set_rate;
4311     + psmouse->set_rate = elantech_set_rate_restore_reg_07;
4312     + }
4313     +
4314     if (elantech_set_input_params(psmouse)) {
4315     psmouse_err(psmouse, "failed to query touchpad range.\n");
4316     goto init_fail;
4317     diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
4318     index 6f3afec02f03..f965d1569cc3 100644
4319     --- a/drivers/input/mouse/elantech.h
4320     +++ b/drivers/input/mouse/elantech.h
4321     @@ -142,6 +142,7 @@ struct elantech_data {
4322     struct finger_pos mt[ETP_MAX_FINGERS];
4323     unsigned char parity[256];
4324     int (*send_cmd)(struct psmouse *psmouse, unsigned char c, unsigned char *param);
4325     + void (*original_set_rate)(struct psmouse *psmouse, unsigned int rate);
4326     };
4327    
4328     #ifdef CONFIG_MOUSE_PS2_ELANTECH
4329     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
4330     index 713a96237a80..414739295d04 100644
4331     --- a/drivers/md/dm-crypt.c
4332     +++ b/drivers/md/dm-crypt.c
4333     @@ -925,11 +925,10 @@ static int crypt_convert(struct crypt_config *cc,
4334    
4335     switch (r) {
4336     /* async */
4337     + case -EINPROGRESS:
4338     case -EBUSY:
4339     wait_for_completion(&ctx->restart);
4340     reinit_completion(&ctx->restart);
4341     - /* fall through*/
4342     - case -EINPROGRESS:
4343     ctx->req = NULL;
4344     ctx->cc_sector++;
4345     continue;
4346     @@ -1346,10 +1345,8 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
4347     struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx);
4348     struct crypt_config *cc = io->cc;
4349    
4350     - if (error == -EINPROGRESS) {
4351     - complete(&ctx->restart);
4352     + if (error == -EINPROGRESS)
4353     return;
4354     - }
4355    
4356     if (!error && cc->iv_gen_ops && cc->iv_gen_ops->post)
4357     error = cc->iv_gen_ops->post(cc, iv_of_dmreq(cc, dmreq), dmreq);
4358     @@ -1360,12 +1357,15 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
4359     crypt_free_req(cc, req_of_dmreq(cc, dmreq), io->base_bio);
4360    
4361     if (!atomic_dec_and_test(&ctx->cc_pending))
4362     - return;
4363     + goto done;
4364    
4365     if (bio_data_dir(io->base_bio) == READ)
4366     kcryptd_crypt_read_done(io);
4367     else
4368     kcryptd_crypt_write_io_submit(io, 1);
4369     +done:
4370     + if (!completion_done(&ctx->restart))
4371     + complete(&ctx->restart);
4372     }
4373    
4374     static void kcryptd_crypt(struct work_struct *work)
4375     diff --git a/drivers/md/md.c b/drivers/md/md.c
4376     index 717daad71fb1..e6178787ce3d 100644
4377     --- a/drivers/md/md.c
4378     +++ b/drivers/md/md.c
4379     @@ -249,6 +249,7 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
4380     const int rw = bio_data_dir(bio);
4381     struct mddev *mddev = q->queuedata;
4382     unsigned int sectors;
4383     + int cpu;
4384    
4385     if (mddev == NULL || mddev->pers == NULL
4386     || !mddev->ready) {
4387     @@ -284,7 +285,10 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
4388     sectors = bio_sectors(bio);
4389     mddev->pers->make_request(mddev, bio);
4390    
4391     - generic_start_io_acct(rw, sectors, &mddev->gendisk->part0);
4392     + cpu = part_stat_lock();
4393     + part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
4394     + part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], sectors);
4395     + part_stat_unlock();
4396    
4397     if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
4398     wake_up(&mddev->sb_wait);
4399     diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
4400     index 3ed9f42ddca6..3b5d7f704aa3 100644
4401     --- a/drivers/md/raid0.c
4402     +++ b/drivers/md/raid0.c
4403     @@ -313,7 +313,7 @@ static struct strip_zone *find_zone(struct r0conf *conf,
4404    
4405     /*
4406     * remaps the bio to the target device. we separate two flows.
4407     - * power 2 flow and a general flow for the sake of perfromance
4408     + * power 2 flow and a general flow for the sake of performance
4409     */
4410     static struct md_rdev *map_sector(struct mddev *mddev, struct strip_zone *zone,
4411     sector_t sector, sector_t *sector_offset)
4412     @@ -524,6 +524,7 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
4413     split = bio;
4414     }
4415    
4416     + sector = bio->bi_iter.bi_sector;
4417     zone = find_zone(mddev->private, &sector);
4418     tmp_dev = map_sector(mddev, zone, sector, &sector);
4419     split->bi_bdev = tmp_dev->bdev;
4420     diff --git a/drivers/media/rc/img-ir/img-ir-core.c b/drivers/media/rc/img-ir/img-ir-core.c
4421     index 77c78de4f5bf..7020659f23c2 100644
4422     --- a/drivers/media/rc/img-ir/img-ir-core.c
4423     +++ b/drivers/media/rc/img-ir/img-ir-core.c
4424     @@ -146,7 +146,7 @@ static int img_ir_remove(struct platform_device *pdev)
4425     {
4426     struct img_ir_priv *priv = platform_get_drvdata(pdev);
4427    
4428     - free_irq(priv->irq, img_ir_isr);
4429     + free_irq(priv->irq, priv);
4430     img_ir_remove_hw(priv);
4431     img_ir_remove_raw(priv);
4432    
4433     diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c
4434     index 65a326c5128f..749ad5603c9e 100644
4435     --- a/drivers/media/usb/stk1160/stk1160-v4l.c
4436     +++ b/drivers/media/usb/stk1160/stk1160-v4l.c
4437     @@ -240,6 +240,11 @@ static int stk1160_stop_streaming(struct stk1160 *dev)
4438     if (mutex_lock_interruptible(&dev->v4l_lock))
4439     return -ERESTARTSYS;
4440    
4441     + /*
4442     + * Once URBs are cancelled, the URB complete handler
4443     + * won't be running. This is required to safely release the
4444     + * current buffer (dev->isoc_ctl.buf).
4445     + */
4446     stk1160_cancel_isoc(dev);
4447    
4448     /*
4449     @@ -620,8 +625,16 @@ void stk1160_clear_queue(struct stk1160 *dev)
4450     stk1160_info("buffer [%p/%d] aborted\n",
4451     buf, buf->vb.v4l2_buf.index);
4452     }
4453     - /* It's important to clear current buffer */
4454     - dev->isoc_ctl.buf = NULL;
4455     +
4456     + /* It's important to release the current buffer */
4457     + if (dev->isoc_ctl.buf) {
4458     + buf = dev->isoc_ctl.buf;
4459     + dev->isoc_ctl.buf = NULL;
4460     +
4461     + vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
4462     + stk1160_info("buffer [%p/%d] aborted\n",
4463     + buf, buf->vb.v4l2_buf.index);
4464     + }
4465     spin_unlock_irqrestore(&dev->buf_lock, flags);
4466     }
4467    
4468     diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c
4469     index fc145d202c46..922a750640e8 100644
4470     --- a/drivers/memstick/core/mspro_block.c
4471     +++ b/drivers/memstick/core/mspro_block.c
4472     @@ -758,7 +758,7 @@ static int mspro_block_complete_req(struct memstick_dev *card, int error)
4473    
4474     if (error || (card->current_mrq.tpc == MSPRO_CMD_STOP)) {
4475     if (msb->data_dir == READ) {
4476     - for (cnt = 0; cnt < msb->current_seg; cnt++)
4477     + for (cnt = 0; cnt < msb->current_seg; cnt++) {
4478     t_len += msb->req_sg[cnt].length
4479     / msb->page_size;
4480    
4481     @@ -766,6 +766,7 @@ static int mspro_block_complete_req(struct memstick_dev *card, int error)
4482     t_len += msb->current_page - 1;
4483    
4484     t_len *= msb->page_size;
4485     + }
4486     }
4487     } else
4488     t_len = blk_rq_bytes(msb->block_req);
4489     diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
4490     index 2a87f69be53d..1aed3b7b8d9b 100644
4491     --- a/drivers/mfd/mfd-core.c
4492     +++ b/drivers/mfd/mfd-core.c
4493     @@ -128,7 +128,7 @@ static int mfd_add_device(struct device *parent, int id,
4494     int platform_id;
4495     int r;
4496    
4497     - if (id < 0)
4498     + if (id == PLATFORM_DEVID_AUTO)
4499     platform_id = id;
4500     else
4501     platform_id = id + cell->id;
4502     diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
4503     index e8a4218b5726..459ed1b601db 100644
4504     --- a/drivers/mmc/host/sunxi-mmc.c
4505     +++ b/drivers/mmc/host/sunxi-mmc.c
4506     @@ -930,7 +930,9 @@ static int sunxi_mmc_resource_request(struct sunxi_mmc_host *host,
4507     return PTR_ERR(host->clk_sample);
4508     }
4509    
4510     - host->reset = devm_reset_control_get(&pdev->dev, "ahb");
4511     + host->reset = devm_reset_control_get_optional(&pdev->dev, "ahb");
4512     + if (PTR_ERR(host->reset) == -EPROBE_DEFER)
4513     + return PTR_ERR(host->reset);
4514    
4515     ret = clk_prepare_enable(host->clk_ahb);
4516     if (ret) {
4517     diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
4518     index a31c3573d386..dba7e1c19dd7 100644
4519     --- a/drivers/mmc/host/tmio_mmc_pio.c
4520     +++ b/drivers/mmc/host/tmio_mmc_pio.c
4521     @@ -1073,8 +1073,6 @@ EXPORT_SYMBOL(tmio_mmc_host_alloc);
4522     void tmio_mmc_host_free(struct tmio_mmc_host *host)
4523     {
4524     mmc_free_host(host->mmc);
4525     -
4526     - host->mmc = NULL;
4527     }
4528     EXPORT_SYMBOL(tmio_mmc_host_free);
4529    
4530     diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
4531     index 9d2e16f3150a..b5e154856994 100644
4532     --- a/drivers/mtd/ubi/attach.c
4533     +++ b/drivers/mtd/ubi/attach.c
4534     @@ -410,7 +410,7 @@ int ubi_compare_lebs(struct ubi_device *ubi, const struct ubi_ainf_peb *aeb,
4535     second_is_newer = !second_is_newer;
4536     } else {
4537     dbg_bld("PEB %d CRC is OK", pnum);
4538     - bitflips = !!err;
4539     + bitflips |= !!err;
4540     }
4541     mutex_unlock(&ubi->buf_mutex);
4542    
4543     diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
4544     index d647e504f9b1..d16fccf79179 100644
4545     --- a/drivers/mtd/ubi/cdev.c
4546     +++ b/drivers/mtd/ubi/cdev.c
4547     @@ -455,7 +455,7 @@ static long vol_cdev_ioctl(struct file *file, unsigned int cmd,
4548     /* Validate the request */
4549     err = -EINVAL;
4550     if (req.lnum < 0 || req.lnum >= vol->reserved_pebs ||
4551     - req.bytes < 0 || req.lnum >= vol->usable_leb_size)
4552     + req.bytes < 0 || req.bytes > vol->usable_leb_size)
4553     break;
4554    
4555     err = get_exclusive(desc);
4556     diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c
4557     index 16e34b37d134..8c9a710def99 100644
4558     --- a/drivers/mtd/ubi/eba.c
4559     +++ b/drivers/mtd/ubi/eba.c
4560     @@ -1419,7 +1419,8 @@ int ubi_eba_init(struct ubi_device *ubi, struct ubi_attach_info *ai)
4561     * during re-size.
4562     */
4563     ubi_move_aeb_to_list(av, aeb, &ai->erase);
4564     - vol->eba_tbl[aeb->lnum] = aeb->pnum;
4565     + else
4566     + vol->eba_tbl[aeb->lnum] = aeb->pnum;
4567     }
4568     }
4569    
4570     diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
4571     index 8f7bde6a85d6..0bd92d816391 100644
4572     --- a/drivers/mtd/ubi/wl.c
4573     +++ b/drivers/mtd/ubi/wl.c
4574     @@ -1002,7 +1002,7 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,
4575     int shutdown)
4576     {
4577     int err, scrubbing = 0, torture = 0, protect = 0, erroneous = 0;
4578     - int vol_id = -1, uninitialized_var(lnum);
4579     + int vol_id = -1, lnum = -1;
4580     #ifdef CONFIG_MTD_UBI_FASTMAP
4581     int anchor = wrk->anchor;
4582     #endif
4583     diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
4584     index 81d41539fcba..77bf1337d179 100644
4585     --- a/drivers/net/ethernet/cadence/macb.c
4586     +++ b/drivers/net/ethernet/cadence/macb.c
4587     @@ -2165,7 +2165,7 @@ static void macb_configure_caps(struct macb *bp)
4588     }
4589     }
4590    
4591     - if (MACB_BFEXT(IDNUM, macb_readl(bp, MID)) == 0x2)
4592     + if (MACB_BFEXT(IDNUM, macb_readl(bp, MID)) >= 0x2)
4593     bp->caps |= MACB_CAPS_MACB_IS_GEM;
4594    
4595     if (macb_is_gem(bp)) {
4596     diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
4597     index 7f997d36948f..a71c446631d1 100644
4598     --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
4599     +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
4600     @@ -144,6 +144,11 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
4601     static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
4602     struct e1000_rx_ring *rx_ring,
4603     int *work_done, int work_to_do);
4604     +static void e1000_alloc_dummy_rx_buffers(struct e1000_adapter *adapter,
4605     + struct e1000_rx_ring *rx_ring,
4606     + int cleaned_count)
4607     +{
4608     +}
4609     static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
4610     struct e1000_rx_ring *rx_ring,
4611     int cleaned_count);
4612     @@ -3552,8 +3557,11 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
4613     msleep(1);
4614     /* e1000_down has a dependency on max_frame_size */
4615     hw->max_frame_size = max_frame;
4616     - if (netif_running(netdev))
4617     + if (netif_running(netdev)) {
4618     + /* prevent buffers from being reallocated */
4619     + adapter->alloc_rx_buf = e1000_alloc_dummy_rx_buffers;
4620     e1000_down(adapter);
4621     + }
4622    
4623     /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN
4624     * means we reserve 2 more, this pushes us to allocate from the next
4625     diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
4626     index af829c578400..7ace07dad6a3 100644
4627     --- a/drivers/net/ethernet/marvell/pxa168_eth.c
4628     +++ b/drivers/net/ethernet/marvell/pxa168_eth.c
4629     @@ -1508,7 +1508,8 @@ static int pxa168_eth_probe(struct platform_device *pdev)
4630     np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
4631     if (!np) {
4632     dev_err(&pdev->dev, "missing phy-handle\n");
4633     - return -EINVAL;
4634     + err = -EINVAL;
4635     + goto err_netdev;
4636     }
4637     of_property_read_u32(np, "reg", &pep->phy_addr);
4638     pep->phy_intf = of_get_phy_mode(pdev->dev.of_node);
4639     @@ -1526,7 +1527,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
4640     pep->smi_bus = mdiobus_alloc();
4641     if (pep->smi_bus == NULL) {
4642     err = -ENOMEM;
4643     - goto err_base;
4644     + goto err_netdev;
4645     }
4646     pep->smi_bus->priv = pep;
4647     pep->smi_bus->name = "pxa168_eth smi";
4648     @@ -1551,13 +1552,10 @@ err_mdiobus:
4649     mdiobus_unregister(pep->smi_bus);
4650     err_free_mdio:
4651     mdiobus_free(pep->smi_bus);
4652     -err_base:
4653     - iounmap(pep->base);
4654     err_netdev:
4655     free_netdev(dev);
4656     err_clk:
4657     - clk_disable(clk);
4658     - clk_put(clk);
4659     + clk_disable_unprepare(clk);
4660     return err;
4661     }
4662    
4663     @@ -1574,13 +1572,9 @@ static int pxa168_eth_remove(struct platform_device *pdev)
4664     if (pep->phy)
4665     phy_disconnect(pep->phy);
4666     if (pep->clk) {
4667     - clk_disable(pep->clk);
4668     - clk_put(pep->clk);
4669     - pep->clk = NULL;
4670     + clk_disable_unprepare(pep->clk);
4671     }
4672    
4673     - iounmap(pep->base);
4674     - pep->base = NULL;
4675     mdiobus_unregister(pep->smi_bus);
4676     mdiobus_free(pep->smi_bus);
4677     unregister_netdev(dev);
4678     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4679     index a7b58ba8492b..3dccf01837db 100644
4680     --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4681     +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
4682     @@ -981,20 +981,21 @@ static int mlx4_en_check_rxfh_func(struct net_device *dev, u8 hfunc)
4683     struct mlx4_en_priv *priv = netdev_priv(dev);
4684    
4685     /* check if requested function is supported by the device */
4686     - if ((hfunc == ETH_RSS_HASH_TOP &&
4687     - !(priv->mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_RSS_TOP)) ||
4688     - (hfunc == ETH_RSS_HASH_XOR &&
4689     - !(priv->mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_RSS_XOR)))
4690     - return -EINVAL;
4691     + if (hfunc == ETH_RSS_HASH_TOP) {
4692     + if (!(priv->mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_RSS_TOP))
4693     + return -EINVAL;
4694     + if (!(dev->features & NETIF_F_RXHASH))
4695     + en_warn(priv, "Toeplitz hash function should be used in conjunction with RX hashing for optimal performance\n");
4696     + return 0;
4697     + } else if (hfunc == ETH_RSS_HASH_XOR) {
4698     + if (!(priv->mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_RSS_XOR))
4699     + return -EINVAL;
4700     + if (dev->features & NETIF_F_RXHASH)
4701     + en_warn(priv, "Enabling both XOR Hash function and RX Hashing can limit RPS functionality\n");
4702     + return 0;
4703     + }
4704    
4705     - priv->rss_hash_fn = hfunc;
4706     - if (hfunc == ETH_RSS_HASH_TOP && !(dev->features & NETIF_F_RXHASH))
4707     - en_warn(priv,
4708     - "Toeplitz hash function should be used in conjunction with RX hashing for optimal performance\n");
4709     - if (hfunc == ETH_RSS_HASH_XOR && (dev->features & NETIF_F_RXHASH))
4710     - en_warn(priv,
4711     - "Enabling both XOR Hash function and RX Hashing can limit RPS functionality\n");
4712     - return 0;
4713     + return -EINVAL;
4714     }
4715    
4716     static int mlx4_en_get_rxfh(struct net_device *dev, u32 *ring_index, u8 *key,
4717     @@ -1068,6 +1069,8 @@ static int mlx4_en_set_rxfh(struct net_device *dev, const u32 *ring_index,
4718     priv->prof->rss_rings = rss_rings;
4719     if (key)
4720     memcpy(priv->rss_key, key, MLX4_EN_RSS_KEY_SIZE);
4721     + if (hfunc != ETH_RSS_HASH_NO_CHANGE)
4722     + priv->rss_hash_fn = hfunc;
4723    
4724     if (port_up) {
4725     err = mlx4_en_start_port(dev);
4726     diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
4727     index af034dba9bd6..9d15566521a7 100644
4728     --- a/drivers/net/ppp/ppp_generic.c
4729     +++ b/drivers/net/ppp/ppp_generic.c
4730     @@ -1716,6 +1716,7 @@ ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
4731     {
4732     /* note: a 0-length skb is used as an error indication */
4733     if (skb->len > 0) {
4734     + skb_checksum_complete_unset(skb);
4735     #ifdef CONFIG_PPP_MULTILINK
4736     /* XXX do channel-level decompression here */
4737     if (PPP_PROTO(skb) == PPP_MP)
4738     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
4739     index 90a714c189a8..23806c243a53 100644
4740     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
4741     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
4742     @@ -321,6 +321,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
4743     {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
4744     {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
4745     {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/
4746     + {RTL_USB_DEVICE(0x0b05, 0x17ba, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/
4747     {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
4748     {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
4749     {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
4750     @@ -377,6 +378,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
4751     {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/
4752     {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/
4753     {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/
4754     + {RTL_USB_DEVICE(0x2001, 0x330d, rtl92cu_hal_cfg)}, /*D-Link DWA-131 */
4755     {RTL_USB_DEVICE(0x2019, 0xab2b, rtl92cu_hal_cfg)}, /*Planex -Abocom*/
4756     {RTL_USB_DEVICE(0x20f4, 0x624d, rtl92cu_hal_cfg)}, /*TRENDNet*/
4757     {RTL_USB_DEVICE(0x2357, 0x0100, rtl92cu_hal_cfg)}, /*TP-Link WN8200ND*/
4758     diff --git a/drivers/net/wireless/ti/wl18xx/debugfs.c b/drivers/net/wireless/ti/wl18xx/debugfs.c
4759     index c93fae95baac..5fbd2230f372 100644
4760     --- a/drivers/net/wireless/ti/wl18xx/debugfs.c
4761     +++ b/drivers/net/wireless/ti/wl18xx/debugfs.c
4762     @@ -139,7 +139,7 @@ WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, protection_filter, "%u");
4763     WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, accum_arp_pend_requests, "%u");
4764     WL18XX_DEBUGFS_FWSTATS_FILE(rx_filter, max_arp_queue_dep, "%u");
4765    
4766     -WL18XX_DEBUGFS_FWSTATS_FILE(rx_rate, rx_frames_per_rates, "%u");
4767     +WL18XX_DEBUGFS_FWSTATS_FILE_ARRAY(rx_rate, rx_frames_per_rates, 50);
4768    
4769     WL18XX_DEBUGFS_FWSTATS_FILE_ARRAY(aggr_size, tx_agg_vs_rate,
4770     AGGR_STATS_TX_AGG*AGGR_STATS_TX_RATE);
4771     diff --git a/drivers/net/wireless/ti/wlcore/debugfs.h b/drivers/net/wireless/ti/wlcore/debugfs.h
4772     index 0f2cfb0d2a9e..bf14676e6515 100644
4773     --- a/drivers/net/wireless/ti/wlcore/debugfs.h
4774     +++ b/drivers/net/wireless/ti/wlcore/debugfs.h
4775     @@ -26,8 +26,8 @@
4776    
4777     #include "wlcore.h"
4778    
4779     -int wl1271_format_buffer(char __user *userbuf, size_t count,
4780     - loff_t *ppos, char *fmt, ...);
4781     +__printf(4, 5) int wl1271_format_buffer(char __user *userbuf, size_t count,
4782     + loff_t *ppos, char *fmt, ...);
4783    
4784     int wl1271_debugfs_init(struct wl1271 *wl);
4785     void wl1271_debugfs_exit(struct wl1271 *wl);
4786     diff --git a/drivers/nfc/st21nfcb/i2c.c b/drivers/nfc/st21nfcb/i2c.c
4787     index eb886932d972..7b53a5c84041 100644
4788     --- a/drivers/nfc/st21nfcb/i2c.c
4789     +++ b/drivers/nfc/st21nfcb/i2c.c
4790     @@ -109,7 +109,7 @@ static int st21nfcb_nci_i2c_write(void *phy_id, struct sk_buff *skb)
4791     return phy->ndlc->hard_fault;
4792    
4793     r = i2c_master_send(client, skb->data, skb->len);
4794     - if (r == -EREMOTEIO) { /* Retry, chip was in standby */
4795     + if (r < 0) { /* Retry, chip was in standby */
4796     usleep_range(1000, 4000);
4797     r = i2c_master_send(client, skb->data, skb->len);
4798     }
4799     @@ -148,7 +148,7 @@ static int st21nfcb_nci_i2c_read(struct st21nfcb_i2c_phy *phy,
4800     struct i2c_client *client = phy->i2c_dev;
4801    
4802     r = i2c_master_recv(client, buf, ST21NFCB_NCI_I2C_MIN_SIZE);
4803     - if (r == -EREMOTEIO) { /* Retry, chip was in standby */
4804     + if (r < 0) { /* Retry, chip was in standby */
4805     usleep_range(1000, 4000);
4806     r = i2c_master_recv(client, buf, ST21NFCB_NCI_I2C_MIN_SIZE);
4807     }
4808     diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
4809     index 15c0fab2bfa1..bceb30b539f3 100644
4810     --- a/drivers/platform/x86/compal-laptop.c
4811     +++ b/drivers/platform/x86/compal-laptop.c
4812     @@ -1026,9 +1026,9 @@ static int compal_probe(struct platform_device *pdev)
4813     if (err)
4814     return err;
4815    
4816     - hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
4817     - "compal", data,
4818     - compal_hwmon_groups);
4819     + hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev,
4820     + "compal", data,
4821     + compal_hwmon_groups);
4822     if (IS_ERR(hwmon_dev)) {
4823     err = PTR_ERR(hwmon_dev);
4824     goto remove;
4825     @@ -1036,7 +1036,9 @@ static int compal_probe(struct platform_device *pdev)
4826    
4827     /* Power supply */
4828     initialize_power_supply_data(data);
4829     - power_supply_register(&compal_device->dev, &data->psy);
4830     + err = power_supply_register(&compal_device->dev, &data->psy);
4831     + if (err < 0)
4832     + goto remove;
4833    
4834     platform_set_drvdata(pdev, data);
4835    
4836     diff --git a/drivers/power/ipaq_micro_battery.c b/drivers/power/ipaq_micro_battery.c
4837     index 9d694605cdb7..96b15e003f3f 100644
4838     --- a/drivers/power/ipaq_micro_battery.c
4839     +++ b/drivers/power/ipaq_micro_battery.c
4840     @@ -226,6 +226,7 @@ static struct power_supply micro_ac_power = {
4841     static int micro_batt_probe(struct platform_device *pdev)
4842     {
4843     struct micro_battery *mb;
4844     + int ret;
4845    
4846     mb = devm_kzalloc(&pdev->dev, sizeof(*mb), GFP_KERNEL);
4847     if (!mb)
4848     @@ -233,14 +234,30 @@ static int micro_batt_probe(struct platform_device *pdev)
4849    
4850     mb->micro = dev_get_drvdata(pdev->dev.parent);
4851     mb->wq = create_singlethread_workqueue("ipaq-battery-wq");
4852     + if (!mb->wq)
4853     + return -ENOMEM;
4854     +
4855     INIT_DELAYED_WORK(&mb->update, micro_battery_work);
4856     platform_set_drvdata(pdev, mb);
4857     queue_delayed_work(mb->wq, &mb->update, 1);
4858     - power_supply_register(&pdev->dev, &micro_batt_power);
4859     - power_supply_register(&pdev->dev, &micro_ac_power);
4860     +
4861     + ret = power_supply_register(&pdev->dev, &micro_batt_power);
4862     + if (ret < 0)
4863     + goto batt_err;
4864     +
4865     + ret = power_supply_register(&pdev->dev, &micro_ac_power);
4866     + if (ret < 0)
4867     + goto ac_err;
4868    
4869     dev_info(&pdev->dev, "iPAQ micro battery driver\n");
4870     return 0;
4871     +
4872     +ac_err:
4873     + power_supply_unregister(&micro_ac_power);
4874     +batt_err:
4875     + cancel_delayed_work_sync(&mb->update);
4876     + destroy_workqueue(mb->wq);
4877     + return ret;
4878     }
4879    
4880     static int micro_batt_remove(struct platform_device *pdev)
4881     @@ -251,6 +268,7 @@ static int micro_batt_remove(struct platform_device *pdev)
4882     power_supply_unregister(&micro_ac_power);
4883     power_supply_unregister(&micro_batt_power);
4884     cancel_delayed_work_sync(&mb->update);
4885     + destroy_workqueue(mb->wq);
4886    
4887     return 0;
4888     }
4889     diff --git a/drivers/power/lp8788-charger.c b/drivers/power/lp8788-charger.c
4890     index 21fc233c7d61..176dab2e4c16 100644
4891     --- a/drivers/power/lp8788-charger.c
4892     +++ b/drivers/power/lp8788-charger.c
4893     @@ -417,8 +417,10 @@ static int lp8788_psy_register(struct platform_device *pdev,
4894     pchg->battery.num_properties = ARRAY_SIZE(lp8788_battery_prop);
4895     pchg->battery.get_property = lp8788_battery_get_property;
4896    
4897     - if (power_supply_register(&pdev->dev, &pchg->battery))
4898     + if (power_supply_register(&pdev->dev, &pchg->battery)) {
4899     + power_supply_unregister(&pchg->charger);
4900     return -EPERM;
4901     + }
4902    
4903     return 0;
4904     }
4905     diff --git a/drivers/power/twl4030_madc_battery.c b/drivers/power/twl4030_madc_battery.c
4906     index 7ef445a6cfa6..cf907609ec49 100644
4907     --- a/drivers/power/twl4030_madc_battery.c
4908     +++ b/drivers/power/twl4030_madc_battery.c
4909     @@ -192,6 +192,7 @@ static int twl4030_madc_battery_probe(struct platform_device *pdev)
4910     {
4911     struct twl4030_madc_battery *twl4030_madc_bat;
4912     struct twl4030_madc_bat_platform_data *pdata = pdev->dev.platform_data;
4913     + int ret = 0;
4914    
4915     twl4030_madc_bat = kzalloc(sizeof(*twl4030_madc_bat), GFP_KERNEL);
4916     if (!twl4030_madc_bat)
4917     @@ -216,9 +217,11 @@ static int twl4030_madc_battery_probe(struct platform_device *pdev)
4918    
4919     twl4030_madc_bat->pdata = pdata;
4920     platform_set_drvdata(pdev, twl4030_madc_bat);
4921     - power_supply_register(&pdev->dev, &twl4030_madc_bat->psy);
4922     + ret = power_supply_register(&pdev->dev, &twl4030_madc_bat->psy);
4923     + if (ret < 0)
4924     + kfree(twl4030_madc_bat);
4925    
4926     - return 0;
4927     + return ret;
4928     }
4929    
4930     static int twl4030_madc_battery_remove(struct platform_device *pdev)
4931     diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
4932     index 675b5e7aba94..5a0800d19970 100644
4933     --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
4934     +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
4935     @@ -1584,11 +1584,11 @@ megasas_build_ldio_fusion(struct megasas_instance *instance,
4936     fp_possible = io_info.fpOkForIo;
4937     }
4938    
4939     - /* Use smp_processor_id() for now until cmd->request->cpu is CPU
4940     + /* Use raw_smp_processor_id() for now until cmd->request->cpu is CPU
4941     id by default, not CPU group id, otherwise all MSI-X queues won't
4942     be utilized */
4943     cmd->request_desc->SCSIIO.MSIxIndex = instance->msix_vectors ?
4944     - smp_processor_id() % instance->msix_vectors : 0;
4945     + raw_smp_processor_id() % instance->msix_vectors : 0;
4946    
4947     if (fp_possible) {
4948     megasas_set_pd_lba(io_request, scp->cmd_len, &io_info, scp,
4949     @@ -1693,7 +1693,10 @@ megasas_build_dcdb_fusion(struct megasas_instance *instance,
4950     << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT;
4951     cmd->request_desc->SCSIIO.DevHandle = io_request->DevHandle;
4952     cmd->request_desc->SCSIIO.MSIxIndex =
4953     - instance->msix_vectors ? smp_processor_id() % instance->msix_vectors : 0;
4954     + instance->msix_vectors ?
4955     + raw_smp_processor_id() %
4956     + instance->msix_vectors :
4957     + 0;
4958     os_timeout_value = scmd->request->timeout / HZ;
4959    
4960     if (instance->secure_jbod_support &&
4961     diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
4962     index 2d5ab6d969ec..454536c49315 100644
4963     --- a/drivers/scsi/mvsas/mv_sas.c
4964     +++ b/drivers/scsi/mvsas/mv_sas.c
4965     @@ -441,14 +441,11 @@ static u32 mvs_get_ncq_tag(struct sas_task *task, u32 *tag)
4966     static int mvs_task_prep_ata(struct mvs_info *mvi,
4967     struct mvs_task_exec_info *tei)
4968     {
4969     - struct sas_ha_struct *sha = mvi->sas;
4970     struct sas_task *task = tei->task;
4971     struct domain_device *dev = task->dev;
4972     struct mvs_device *mvi_dev = dev->lldd_dev;
4973     struct mvs_cmd_hdr *hdr = tei->hdr;
4974     struct asd_sas_port *sas_port = dev->port;
4975     - struct sas_phy *sphy = dev->phy;
4976     - struct asd_sas_phy *sas_phy = sha->sas_phy[sphy->number];
4977     struct mvs_slot_info *slot;
4978     void *buf_prd;
4979     u32 tag = tei->tag, hdr_tag;
4980     @@ -468,7 +465,7 @@ static int mvs_task_prep_ata(struct mvs_info *mvi,
4981     slot->tx = mvi->tx_prod;
4982     del_q = TXQ_MODE_I | tag |
4983     (TXQ_CMD_STP << TXQ_CMD_SHIFT) |
4984     - (MVS_PHY_ID << TXQ_PHY_SHIFT) |
4985     + ((sas_port->phy_mask & TXQ_PHY_MASK) << TXQ_PHY_SHIFT) |
4986     (mvi_dev->taskfileset << TXQ_SRS_SHIFT);
4987     mvi->tx[mvi->tx_prod] = cpu_to_le32(del_q);
4988    
4989     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
4990     index 6b78476d04bb..3290a3ed5b31 100644
4991     --- a/drivers/scsi/sd.c
4992     +++ b/drivers/scsi/sd.c
4993     @@ -3100,6 +3100,7 @@ static void scsi_disk_release(struct device *dev)
4994     ida_remove(&sd_index_ida, sdkp->index);
4995     spin_unlock(&sd_index_lock);
4996    
4997     + blk_integrity_unregister(disk);
4998     disk->private_data = NULL;
4999     put_disk(disk);
5000     put_device(&sdkp->device->sdev_gendev);
5001     diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c
5002     index 14c7d42a11c2..5c06d292b94c 100644
5003     --- a/drivers/scsi/sd_dif.c
5004     +++ b/drivers/scsi/sd_dif.c
5005     @@ -77,7 +77,7 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
5006    
5007     disk->integrity->flags |= BLK_INTEGRITY_DEVICE_CAPABLE;
5008    
5009     - if (!sdkp)
5010     + if (!sdkp->ATO)
5011     return;
5012    
5013     if (type == SD_DIF_TYPE3_PROTECTION)
5014     diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
5015     index efc6e446b6c8..bf8c5c1e254e 100644
5016     --- a/drivers/scsi/storvsc_drv.c
5017     +++ b/drivers/scsi/storvsc_drv.c
5018     @@ -746,21 +746,22 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
5019     if (bounce_sgl[j].length == PAGE_SIZE) {
5020     /* full..move to next entry */
5021     sg_kunmap_atomic(bounce_addr);
5022     + bounce_addr = 0;
5023     j++;
5024     + }
5025    
5026     - /* if we need to use another bounce buffer */
5027     - if (srclen || i != orig_sgl_count - 1)
5028     - bounce_addr = sg_kmap_atomic(bounce_sgl,j);
5029     + /* if we need to use another bounce buffer */
5030     + if (srclen && bounce_addr == 0)
5031     + bounce_addr = sg_kmap_atomic(bounce_sgl, j);
5032    
5033     - } else if (srclen == 0 && i == orig_sgl_count - 1) {
5034     - /* unmap the last bounce that is < PAGE_SIZE */
5035     - sg_kunmap_atomic(bounce_addr);
5036     - }
5037     }
5038    
5039     sg_kunmap_atomic(src_addr - orig_sgl[i].offset);
5040     }
5041    
5042     + if (bounce_addr)
5043     + sg_kunmap_atomic(bounce_addr);
5044     +
5045     local_irq_restore(flags);
5046    
5047     return total_copied;
5048     diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
5049     index 6fea4af51c41..aea3a67e5ce1 100644
5050     --- a/drivers/spi/spi-imx.c
5051     +++ b/drivers/spi/spi-imx.c
5052     @@ -370,8 +370,6 @@ static int __maybe_unused mx51_ecspi_config(struct spi_imx_data *spi_imx,
5053     if (spi_imx->dma_is_inited) {
5054     dma = readl(spi_imx->base + MX51_ECSPI_DMA);
5055    
5056     - spi_imx->tx_wml = spi_imx_get_fifosize(spi_imx) / 2;
5057     - spi_imx->rx_wml = spi_imx_get_fifosize(spi_imx) / 2;
5058     spi_imx->rxt_wml = spi_imx_get_fifosize(spi_imx) / 2;
5059     rx_wml_cfg = spi_imx->rx_wml << MX51_ECSPI_DMA_RX_WML_OFFSET;
5060     tx_wml_cfg = spi_imx->tx_wml << MX51_ECSPI_DMA_TX_WML_OFFSET;
5061     @@ -868,6 +866,8 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
5062     master->max_dma_len = MAX_SDMA_BD_BYTES;
5063     spi_imx->bitbang.master->flags = SPI_MASTER_MUST_RX |
5064     SPI_MASTER_MUST_TX;
5065     + spi_imx->tx_wml = spi_imx_get_fifosize(spi_imx) / 2;
5066     + spi_imx->rx_wml = spi_imx_get_fifosize(spi_imx) / 2;
5067     spi_imx->dma_is_inited = 1;
5068    
5069     return 0;
5070     diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
5071     index 4eb7a980e670..7bf51860fd08 100644
5072     --- a/drivers/spi/spidev.c
5073     +++ b/drivers/spi/spidev.c
5074     @@ -245,7 +245,10 @@ static int spidev_message(struct spidev_data *spidev,
5075     k_tmp->len = u_tmp->len;
5076    
5077     total += k_tmp->len;
5078     - if (total > bufsiz) {
5079     + /* Check total length of transfers. Also check each
5080     + * transfer length to avoid arithmetic overflow.
5081     + */
5082     + if (total > bufsiz || k_tmp->len > bufsiz) {
5083     status = -EMSGSIZE;
5084     goto done;
5085     }
5086     diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c
5087     index 7bdb62bf6b40..f83e00c78051 100644
5088     --- a/drivers/staging/android/sync.c
5089     +++ b/drivers/staging/android/sync.c
5090     @@ -114,7 +114,7 @@ void sync_timeline_signal(struct sync_timeline *obj)
5091     list_for_each_entry_safe(pt, next, &obj->active_list_head,
5092     active_list) {
5093     if (fence_is_signaled_locked(&pt->base))
5094     - list_del(&pt->active_list);
5095     + list_del_init(&pt->active_list);
5096     }
5097    
5098     spin_unlock_irqrestore(&obj->child_list_lock, flags);
5099     diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
5100     index 6ed35b6ecf0d..04fc217481c7 100644
5101     --- a/drivers/staging/panel/panel.c
5102     +++ b/drivers/staging/panel/panel.c
5103     @@ -335,11 +335,11 @@ static unsigned char lcd_bits[LCD_PORTS][LCD_BITS][BIT_STATES];
5104     * LCD types
5105     */
5106     #define LCD_TYPE_NONE 0
5107     -#define LCD_TYPE_OLD 1
5108     -#define LCD_TYPE_KS0074 2
5109     -#define LCD_TYPE_HANTRONIX 3
5110     -#define LCD_TYPE_NEXCOM 4
5111     -#define LCD_TYPE_CUSTOM 5
5112     +#define LCD_TYPE_CUSTOM 1
5113     +#define LCD_TYPE_OLD 2
5114     +#define LCD_TYPE_KS0074 3
5115     +#define LCD_TYPE_HANTRONIX 4
5116     +#define LCD_TYPE_NEXCOM 5
5117    
5118     /*
5119     * keypad types
5120     @@ -502,7 +502,7 @@ MODULE_PARM_DESC(keypad_type,
5121     static int lcd_type = NOT_SET;
5122     module_param(lcd_type, int, 0000);
5123     MODULE_PARM_DESC(lcd_type,
5124     - "LCD type: 0=none, 1=old //, 2=serial ks0074, 3=hantronix //, 4=nexcom //, 5=compiled-in");
5125     + "LCD type: 0=none, 1=compiled-in, 2=old, 3=serial ks0074, 4=hantronix, 5=nexcom");
5126    
5127     static int lcd_height = NOT_SET;
5128     module_param(lcd_height, int, 0000);
5129     diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c
5130     index 07ce3fd88e70..fdf5c56251e5 100644
5131     --- a/drivers/staging/vt6655/rxtx.c
5132     +++ b/drivers/staging/vt6655/rxtx.c
5133     @@ -1308,10 +1308,18 @@ int vnt_generate_fifo_header(struct vnt_private *priv, u32 dma_idx,
5134     priv->hw->conf.chandef.chan->hw_value);
5135     }
5136    
5137     - if (current_rate > RATE_11M)
5138     - pkt_type = (u8)priv->byPacketType;
5139     - else
5140     + if (current_rate > RATE_11M) {
5141     + if (info->band == IEEE80211_BAND_5GHZ) {
5142     + pkt_type = PK_TYPE_11A;
5143     + } else {
5144     + if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
5145     + pkt_type = PK_TYPE_11GB;
5146     + else
5147     + pkt_type = PK_TYPE_11GA;
5148     + }
5149     + } else {
5150     pkt_type = PK_TYPE_11B;
5151     + }
5152    
5153     /*Set fifo controls */
5154     if (pkt_type == PK_TYPE_11A)
5155     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
5156     index 77d64251af40..5e3561243eda 100644
5157     --- a/drivers/target/iscsi/iscsi_target.c
5158     +++ b/drivers/target/iscsi/iscsi_target.c
5159     @@ -537,7 +537,7 @@ static struct iscsit_transport iscsi_target_transport = {
5160    
5161     static int __init iscsi_target_init_module(void)
5162     {
5163     - int ret = 0;
5164     + int ret = 0, size;
5165    
5166     pr_debug("iSCSI-Target "ISCSIT_VERSION"\n");
5167    
5168     @@ -546,6 +546,7 @@ static int __init iscsi_target_init_module(void)
5169     pr_err("Unable to allocate memory for iscsit_global\n");
5170     return -1;
5171     }
5172     + spin_lock_init(&iscsit_global->ts_bitmap_lock);
5173     mutex_init(&auth_id_lock);
5174     spin_lock_init(&sess_idr_lock);
5175     idr_init(&tiqn_idr);
5176     @@ -555,15 +556,11 @@ static int __init iscsi_target_init_module(void)
5177     if (ret < 0)
5178     goto out;
5179    
5180     - ret = iscsi_thread_set_init();
5181     - if (ret < 0)
5182     + size = BITS_TO_LONGS(ISCSIT_BITMAP_BITS) * sizeof(long);
5183     + iscsit_global->ts_bitmap = vzalloc(size);
5184     + if (!iscsit_global->ts_bitmap) {
5185     + pr_err("Unable to allocate iscsit_global->ts_bitmap\n");
5186     goto configfs_out;
5187     -
5188     - if (iscsi_allocate_thread_sets(TARGET_THREAD_SET_COUNT) !=
5189     - TARGET_THREAD_SET_COUNT) {
5190     - pr_err("iscsi_allocate_thread_sets() returned"
5191     - " unexpected value!\n");
5192     - goto ts_out1;
5193     }
5194    
5195     lio_qr_cache = kmem_cache_create("lio_qr_cache",
5196     @@ -572,7 +569,7 @@ static int __init iscsi_target_init_module(void)
5197     if (!lio_qr_cache) {
5198     pr_err("nable to kmem_cache_create() for"
5199     " lio_qr_cache\n");
5200     - goto ts_out2;
5201     + goto bitmap_out;
5202     }
5203    
5204     lio_dr_cache = kmem_cache_create("lio_dr_cache",
5205     @@ -617,10 +614,8 @@ dr_out:
5206     kmem_cache_destroy(lio_dr_cache);
5207     qr_out:
5208     kmem_cache_destroy(lio_qr_cache);
5209     -ts_out2:
5210     - iscsi_deallocate_thread_sets();
5211     -ts_out1:
5212     - iscsi_thread_set_free();
5213     +bitmap_out:
5214     + vfree(iscsit_global->ts_bitmap);
5215     configfs_out:
5216     iscsi_target_deregister_configfs();
5217     out:
5218     @@ -630,8 +625,6 @@ out:
5219    
5220     static void __exit iscsi_target_cleanup_module(void)
5221     {
5222     - iscsi_deallocate_thread_sets();
5223     - iscsi_thread_set_free();
5224     iscsit_release_discovery_tpg();
5225     iscsit_unregister_transport(&iscsi_target_transport);
5226     kmem_cache_destroy(lio_qr_cache);
5227     @@ -641,6 +634,7 @@ static void __exit iscsi_target_cleanup_module(void)
5228    
5229     iscsi_target_deregister_configfs();
5230    
5231     + vfree(iscsit_global->ts_bitmap);
5232     kfree(iscsit_global);
5233     }
5234    
5235     @@ -3715,17 +3709,16 @@ static int iscsit_send_reject(
5236    
5237     void iscsit_thread_get_cpumask(struct iscsi_conn *conn)
5238     {
5239     - struct iscsi_thread_set *ts = conn->thread_set;
5240     int ord, cpu;
5241     /*
5242     - * thread_id is assigned from iscsit_global->ts_bitmap from
5243     - * within iscsi_thread_set.c:iscsi_allocate_thread_sets()
5244     + * bitmap_id is assigned from iscsit_global->ts_bitmap from
5245     + * within iscsit_start_kthreads()
5246     *
5247     - * Here we use thread_id to determine which CPU that this
5248     - * iSCSI connection's iscsi_thread_set will be scheduled to
5249     + * Here we use bitmap_id to determine which CPU that this
5250     + * iSCSI connection's RX/TX threads will be scheduled to
5251     * execute upon.
5252     */
5253     - ord = ts->thread_id % cpumask_weight(cpu_online_mask);
5254     + ord = conn->bitmap_id % cpumask_weight(cpu_online_mask);
5255     for_each_online_cpu(cpu) {
5256     if (ord-- == 0) {
5257     cpumask_set_cpu(cpu, conn->conn_cpumask);
5258     @@ -3914,7 +3907,7 @@ check_rsp_state:
5259     switch (state) {
5260     case ISTATE_SEND_LOGOUTRSP:
5261     if (!iscsit_logout_post_handler(cmd, conn))
5262     - goto restart;
5263     + return -ECONNRESET;
5264     /* fall through */
5265     case ISTATE_SEND_STATUS:
5266     case ISTATE_SEND_ASYNCMSG:
5267     @@ -3942,8 +3935,6 @@ check_rsp_state:
5268    
5269     err:
5270     return -1;
5271     -restart:
5272     - return -EAGAIN;
5273     }
5274    
5275     static int iscsit_handle_response_queue(struct iscsi_conn *conn)
5276     @@ -3970,21 +3961,13 @@ static int iscsit_handle_response_queue(struct iscsi_conn *conn)
5277     int iscsi_target_tx_thread(void *arg)
5278     {
5279     int ret = 0;
5280     - struct iscsi_conn *conn;
5281     - struct iscsi_thread_set *ts = arg;
5282     + struct iscsi_conn *conn = arg;
5283     /*
5284     * Allow ourselves to be interrupted by SIGINT so that a
5285     * connection recovery / failure event can be triggered externally.
5286     */
5287     allow_signal(SIGINT);
5288    
5289     -restart:
5290     - conn = iscsi_tx_thread_pre_handler(ts);
5291     - if (!conn)
5292     - goto out;
5293     -
5294     - ret = 0;
5295     -
5296     while (!kthread_should_stop()) {
5297     /*
5298     * Ensure that both TX and RX per connection kthreads
5299     @@ -3993,11 +3976,9 @@ restart:
5300     iscsit_thread_check_cpumask(conn, current, 1);
5301    
5302     wait_event_interruptible(conn->queues_wq,
5303     - !iscsit_conn_all_queues_empty(conn) ||
5304     - ts->status == ISCSI_THREAD_SET_RESET);
5305     + !iscsit_conn_all_queues_empty(conn));
5306    
5307     - if ((ts->status == ISCSI_THREAD_SET_RESET) ||
5308     - signal_pending(current))
5309     + if (signal_pending(current))
5310     goto transport_err;
5311    
5312     get_immediate:
5313     @@ -4008,15 +3989,14 @@ get_immediate:
5314     ret = iscsit_handle_response_queue(conn);
5315     if (ret == 1)
5316     goto get_immediate;
5317     - else if (ret == -EAGAIN)
5318     - goto restart;
5319     + else if (ret == -ECONNRESET)
5320     + goto out;
5321     else if (ret < 0)
5322     goto transport_err;
5323     }
5324    
5325     transport_err:
5326     iscsit_take_action_for_connection_exit(conn);
5327     - goto restart;
5328     out:
5329     return 0;
5330     }
5331     @@ -4111,8 +4091,7 @@ int iscsi_target_rx_thread(void *arg)
5332     int ret;
5333     u8 buffer[ISCSI_HDR_LEN], opcode;
5334     u32 checksum = 0, digest = 0;
5335     - struct iscsi_conn *conn = NULL;
5336     - struct iscsi_thread_set *ts = arg;
5337     + struct iscsi_conn *conn = arg;
5338     struct kvec iov;
5339     /*
5340     * Allow ourselves to be interrupted by SIGINT so that a
5341     @@ -4120,11 +4099,6 @@ int iscsi_target_rx_thread(void *arg)
5342     */
5343     allow_signal(SIGINT);
5344    
5345     -restart:
5346     - conn = iscsi_rx_thread_pre_handler(ts);
5347     - if (!conn)
5348     - goto out;
5349     -
5350     if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) {
5351     struct completion comp;
5352     int rc;
5353     @@ -4134,7 +4108,7 @@ restart:
5354     if (rc < 0)
5355     goto transport_err;
5356    
5357     - goto out;
5358     + goto transport_err;
5359     }
5360    
5361     while (!kthread_should_stop()) {
5362     @@ -4210,8 +4184,6 @@ transport_err:
5363     if (!signal_pending(current))
5364     atomic_set(&conn->transport_failed, 1);
5365     iscsit_take_action_for_connection_exit(conn);
5366     - goto restart;
5367     -out:
5368     return 0;
5369     }
5370    
5371     @@ -4273,7 +4245,24 @@ int iscsit_close_connection(
5372     if (conn->conn_transport->transport_type == ISCSI_TCP)
5373     complete(&conn->conn_logout_comp);
5374    
5375     - iscsi_release_thread_set(conn);
5376     + if (!strcmp(current->comm, ISCSI_RX_THREAD_NAME)) {
5377     + if (conn->tx_thread &&
5378     + cmpxchg(&conn->tx_thread_active, true, false)) {
5379     + send_sig(SIGINT, conn->tx_thread, 1);
5380     + kthread_stop(conn->tx_thread);
5381     + }
5382     + } else if (!strcmp(current->comm, ISCSI_TX_THREAD_NAME)) {
5383     + if (conn->rx_thread &&
5384     + cmpxchg(&conn->rx_thread_active, true, false)) {
5385     + send_sig(SIGINT, conn->rx_thread, 1);
5386     + kthread_stop(conn->rx_thread);
5387     + }
5388     + }
5389     +
5390     + spin_lock(&iscsit_global->ts_bitmap_lock);
5391     + bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
5392     + get_order(1));
5393     + spin_unlock(&iscsit_global->ts_bitmap_lock);
5394    
5395     iscsit_stop_timers_for_cmds(conn);
5396     iscsit_stop_nopin_response_timer(conn);
5397     @@ -4551,15 +4540,13 @@ static void iscsit_logout_post_handler_closesession(
5398     struct iscsi_conn *conn)
5399     {
5400     struct iscsi_session *sess = conn->sess;
5401     -
5402     - iscsi_set_thread_clear(conn, ISCSI_CLEAR_TX_THREAD);
5403     - iscsi_set_thread_set_signal(conn, ISCSI_SIGNAL_TX_THREAD);
5404     + int sleep = cmpxchg(&conn->tx_thread_active, true, false);
5405    
5406     atomic_set(&conn->conn_logout_remove, 0);
5407     complete(&conn->conn_logout_comp);
5408    
5409     iscsit_dec_conn_usage_count(conn);
5410     - iscsit_stop_session(sess, 1, 1);
5411     + iscsit_stop_session(sess, sleep, sleep);
5412     iscsit_dec_session_usage_count(sess);
5413     target_put_session(sess->se_sess);
5414     }
5415     @@ -4567,13 +4554,12 @@ static void iscsit_logout_post_handler_closesession(
5416     static void iscsit_logout_post_handler_samecid(
5417     struct iscsi_conn *conn)
5418     {
5419     - iscsi_set_thread_clear(conn, ISCSI_CLEAR_TX_THREAD);
5420     - iscsi_set_thread_set_signal(conn, ISCSI_SIGNAL_TX_THREAD);
5421     + int sleep = cmpxchg(&conn->tx_thread_active, true, false);
5422    
5423     atomic_set(&conn->conn_logout_remove, 0);
5424     complete(&conn->conn_logout_comp);
5425    
5426     - iscsit_cause_connection_reinstatement(conn, 1);
5427     + iscsit_cause_connection_reinstatement(conn, sleep);
5428     iscsit_dec_conn_usage_count(conn);
5429     }
5430    
5431     diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c
5432     index bdd8731a4daa..e008ed261364 100644
5433     --- a/drivers/target/iscsi/iscsi_target_erl0.c
5434     +++ b/drivers/target/iscsi/iscsi_target_erl0.c
5435     @@ -860,7 +860,10 @@ void iscsit_connection_reinstatement_rcfr(struct iscsi_conn *conn)
5436     }
5437     spin_unlock_bh(&conn->state_lock);
5438    
5439     - iscsi_thread_set_force_reinstatement(conn);
5440     + if (conn->tx_thread && conn->tx_thread_active)
5441     + send_sig(SIGINT, conn->tx_thread, 1);
5442     + if (conn->rx_thread && conn->rx_thread_active)
5443     + send_sig(SIGINT, conn->rx_thread, 1);
5444    
5445     sleep:
5446     wait_for_completion(&conn->conn_wait_rcfr_comp);
5447     @@ -885,10 +888,10 @@ void iscsit_cause_connection_reinstatement(struct iscsi_conn *conn, int sleep)
5448     return;
5449     }
5450    
5451     - if (iscsi_thread_set_force_reinstatement(conn) < 0) {
5452     - spin_unlock_bh(&conn->state_lock);
5453     - return;
5454     - }
5455     + if (conn->tx_thread && conn->tx_thread_active)
5456     + send_sig(SIGINT, conn->tx_thread, 1);
5457     + if (conn->rx_thread && conn->rx_thread_active)
5458     + send_sig(SIGINT, conn->rx_thread, 1);
5459    
5460     atomic_set(&conn->connection_reinstatement, 1);
5461     if (!sleep) {
5462     diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
5463     index 153fb66ac1b8..345f073ff6dc 100644
5464     --- a/drivers/target/iscsi/iscsi_target_login.c
5465     +++ b/drivers/target/iscsi/iscsi_target_login.c
5466     @@ -699,6 +699,51 @@ static void iscsi_post_login_start_timers(struct iscsi_conn *conn)
5467     iscsit_start_nopin_timer(conn);
5468     }
5469    
5470     +int iscsit_start_kthreads(struct iscsi_conn *conn)
5471     +{
5472     + int ret = 0;
5473     +
5474     + spin_lock(&iscsit_global->ts_bitmap_lock);
5475     + conn->bitmap_id = bitmap_find_free_region(iscsit_global->ts_bitmap,
5476     + ISCSIT_BITMAP_BITS, get_order(1));
5477     + spin_unlock(&iscsit_global->ts_bitmap_lock);
5478     +
5479     + if (conn->bitmap_id < 0) {
5480     + pr_err("bitmap_find_free_region() failed for"
5481     + " iscsit_start_kthreads()\n");
5482     + return -ENOMEM;
5483     + }
5484     +
5485     + conn->tx_thread = kthread_run(iscsi_target_tx_thread, conn,
5486     + "%s", ISCSI_TX_THREAD_NAME);
5487     + if (IS_ERR(conn->tx_thread)) {
5488     + pr_err("Unable to start iscsi_target_tx_thread\n");
5489     + ret = PTR_ERR(conn->tx_thread);
5490     + goto out_bitmap;
5491     + }
5492     + conn->tx_thread_active = true;
5493     +
5494     + conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn,
5495     + "%s", ISCSI_RX_THREAD_NAME);
5496     + if (IS_ERR(conn->rx_thread)) {
5497     + pr_err("Unable to start iscsi_target_rx_thread\n");
5498     + ret = PTR_ERR(conn->rx_thread);
5499     + goto out_tx;
5500     + }
5501     + conn->rx_thread_active = true;
5502     +
5503     + return 0;
5504     +out_tx:
5505     + kthread_stop(conn->tx_thread);
5506     + conn->tx_thread_active = false;
5507     +out_bitmap:
5508     + spin_lock(&iscsit_global->ts_bitmap_lock);
5509     + bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
5510     + get_order(1));
5511     + spin_unlock(&iscsit_global->ts_bitmap_lock);
5512     + return ret;
5513     +}
5514     +
5515     int iscsi_post_login_handler(
5516     struct iscsi_np *np,
5517     struct iscsi_conn *conn,
5518     @@ -709,7 +754,7 @@ int iscsi_post_login_handler(
5519     struct se_session *se_sess = sess->se_sess;
5520     struct iscsi_portal_group *tpg = sess->tpg;
5521     struct se_portal_group *se_tpg = &tpg->tpg_se_tpg;
5522     - struct iscsi_thread_set *ts;
5523     + int rc;
5524    
5525     iscsit_inc_conn_usage_count(conn);
5526    
5527     @@ -724,7 +769,6 @@ int iscsi_post_login_handler(
5528     /*
5529     * SCSI Initiator -> SCSI Target Port Mapping
5530     */
5531     - ts = iscsi_get_thread_set();
5532     if (!zero_tsih) {
5533     iscsi_set_session_parameters(sess->sess_ops,
5534     conn->param_list, 0);
5535     @@ -751,9 +795,11 @@ int iscsi_post_login_handler(
5536     sess->sess_ops->InitiatorName);
5537     spin_unlock_bh(&sess->conn_lock);
5538    
5539     - iscsi_post_login_start_timers(conn);
5540     + rc = iscsit_start_kthreads(conn);
5541     + if (rc)
5542     + return rc;
5543    
5544     - iscsi_activate_thread_set(conn, ts);
5545     + iscsi_post_login_start_timers(conn);
5546     /*
5547     * Determine CPU mask to ensure connection's RX and TX kthreads
5548     * are scheduled on the same CPU.
5549     @@ -810,8 +856,11 @@ int iscsi_post_login_handler(
5550     " iSCSI Target Portal Group: %hu\n", tpg->nsessions, tpg->tpgt);
5551     spin_unlock_bh(&se_tpg->session_lock);
5552    
5553     + rc = iscsit_start_kthreads(conn);
5554     + if (rc)
5555     + return rc;
5556     +
5557     iscsi_post_login_start_timers(conn);
5558     - iscsi_activate_thread_set(conn, ts);
5559     /*
5560     * Determine CPU mask to ensure connection's RX and TX kthreads
5561     * are scheduled on the same CPU.
5562     diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
5563     index 44620fb6bd45..cbb0cc277f4e 100644
5564     --- a/drivers/target/target_core_file.c
5565     +++ b/drivers/target/target_core_file.c
5566     @@ -264,40 +264,32 @@ static int fd_do_prot_rw(struct se_cmd *cmd, struct fd_prot *fd_prot,
5567     struct se_device *se_dev = cmd->se_dev;
5568     struct fd_dev *dev = FD_DEV(se_dev);
5569     struct file *prot_fd = dev->fd_prot_file;
5570     - struct scatterlist *sg;
5571     loff_t pos = (cmd->t_task_lba * se_dev->prot_length);
5572     unsigned char *buf;
5573     - u32 prot_size, len, size;
5574     - int rc, ret = 1, i;
5575     + u32 prot_size;
5576     + int rc, ret = 1;
5577    
5578     prot_size = (cmd->data_length / se_dev->dev_attrib.block_size) *
5579     se_dev->prot_length;
5580    
5581     if (!is_write) {
5582     - fd_prot->prot_buf = vzalloc(prot_size);
5583     + fd_prot->prot_buf = kzalloc(prot_size, GFP_KERNEL);
5584     if (!fd_prot->prot_buf) {
5585     pr_err("Unable to allocate fd_prot->prot_buf\n");
5586     return -ENOMEM;
5587     }
5588     buf = fd_prot->prot_buf;
5589    
5590     - fd_prot->prot_sg_nents = cmd->t_prot_nents;
5591     - fd_prot->prot_sg = kzalloc(sizeof(struct scatterlist) *
5592     - fd_prot->prot_sg_nents, GFP_KERNEL);
5593     + fd_prot->prot_sg_nents = 1;
5594     + fd_prot->prot_sg = kzalloc(sizeof(struct scatterlist),
5595     + GFP_KERNEL);
5596     if (!fd_prot->prot_sg) {
5597     pr_err("Unable to allocate fd_prot->prot_sg\n");
5598     - vfree(fd_prot->prot_buf);
5599     + kfree(fd_prot->prot_buf);
5600     return -ENOMEM;
5601     }
5602     - size = prot_size;
5603     -
5604     - for_each_sg(fd_prot->prot_sg, sg, fd_prot->prot_sg_nents, i) {
5605     -
5606     - len = min_t(u32, PAGE_SIZE, size);
5607     - sg_set_buf(sg, buf, len);
5608     - size -= len;
5609     - buf += len;
5610     - }
5611     + sg_init_table(fd_prot->prot_sg, fd_prot->prot_sg_nents);
5612     + sg_set_buf(fd_prot->prot_sg, buf, prot_size);
5613     }
5614    
5615     if (is_write) {
5616     @@ -318,7 +310,7 @@ static int fd_do_prot_rw(struct se_cmd *cmd, struct fd_prot *fd_prot,
5617    
5618     if (is_write || ret < 0) {
5619     kfree(fd_prot->prot_sg);
5620     - vfree(fd_prot->prot_buf);
5621     + kfree(fd_prot->prot_buf);
5622     }
5623    
5624     return ret;
5625     @@ -549,6 +541,56 @@ fd_execute_write_same(struct se_cmd *cmd)
5626     return 0;
5627     }
5628    
5629     +static int
5630     +fd_do_prot_fill(struct se_device *se_dev, sector_t lba, sector_t nolb,
5631     + void *buf, size_t bufsize)
5632     +{
5633     + struct fd_dev *fd_dev = FD_DEV(se_dev);
5634     + struct file *prot_fd = fd_dev->fd_prot_file;
5635     + sector_t prot_length, prot;
5636     + loff_t pos = lba * se_dev->prot_length;
5637     +
5638     + if (!prot_fd) {
5639     + pr_err("Unable to locate fd_dev->fd_prot_file\n");
5640     + return -ENODEV;
5641     + }
5642     +
5643     + prot_length = nolb * se_dev->prot_length;
5644     +
5645     + for (prot = 0; prot < prot_length;) {
5646     + sector_t len = min_t(sector_t, bufsize, prot_length - prot);
5647     + ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
5648     +
5649     + if (ret != len) {
5650     + pr_err("vfs_write to prot file failed: %zd\n", ret);
5651     + return ret < 0 ? ret : -ENODEV;
5652     + }
5653     + prot += ret;
5654     + }
5655     +
5656     + return 0;
5657     +}
5658     +
5659     +static int
5660     +fd_do_prot_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
5661     +{
5662     + void *buf;
5663     + int rc;
5664     +
5665     + buf = (void *)__get_free_page(GFP_KERNEL);
5666     + if (!buf) {
5667     + pr_err("Unable to allocate FILEIO prot buf\n");
5668     + return -ENOMEM;
5669     + }
5670     + memset(buf, 0xff, PAGE_SIZE);
5671     +
5672     + rc = fd_do_prot_fill(cmd->se_dev, lba, nolb, buf, PAGE_SIZE);
5673     +
5674     + free_page((unsigned long)buf);
5675     +
5676     + return rc;
5677     +}
5678     +
5679     static sense_reason_t
5680     fd_do_unmap(struct se_cmd *cmd, void *priv, sector_t lba, sector_t nolb)
5681     {
5682     @@ -556,6 +598,12 @@ fd_do_unmap(struct se_cmd *cmd, void *priv, sector_t lba, sector_t nolb)
5683     struct inode *inode = file->f_mapping->host;
5684     int ret;
5685    
5686     + if (cmd->se_dev->dev_attrib.pi_prot_type) {
5687     + ret = fd_do_prot_unmap(cmd, lba, nolb);
5688     + if (ret)
5689     + return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
5690     + }
5691     +
5692     if (S_ISBLK(inode->i_mode)) {
5693     /* The backend is block device, use discard */
5694     struct block_device *bdev = inode->i_bdev;
5695     @@ -658,11 +706,11 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
5696     0, fd_prot.prot_sg, 0);
5697     if (rc) {
5698     kfree(fd_prot.prot_sg);
5699     - vfree(fd_prot.prot_buf);
5700     + kfree(fd_prot.prot_buf);
5701     return rc;
5702     }
5703     kfree(fd_prot.prot_sg);
5704     - vfree(fd_prot.prot_buf);
5705     + kfree(fd_prot.prot_buf);
5706     }
5707     } else {
5708     memset(&fd_prot, 0, sizeof(struct fd_prot));
5709     @@ -678,7 +726,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
5710     0, fd_prot.prot_sg, 0);
5711     if (rc) {
5712     kfree(fd_prot.prot_sg);
5713     - vfree(fd_prot.prot_buf);
5714     + kfree(fd_prot.prot_buf);
5715     return rc;
5716     }
5717     }
5718     @@ -714,7 +762,7 @@ fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
5719    
5720     if (ret < 0) {
5721     kfree(fd_prot.prot_sg);
5722     - vfree(fd_prot.prot_buf);
5723     + kfree(fd_prot.prot_buf);
5724     return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
5725     }
5726    
5727     @@ -878,48 +926,28 @@ static int fd_init_prot(struct se_device *dev)
5728    
5729     static int fd_format_prot(struct se_device *dev)
5730     {
5731     - struct fd_dev *fd_dev = FD_DEV(dev);
5732     - struct file *prot_fd = fd_dev->fd_prot_file;
5733     - sector_t prot_length, prot;
5734     unsigned char *buf;
5735     - loff_t pos = 0;
5736     int unit_size = FDBD_FORMAT_UNIT_SIZE * dev->dev_attrib.block_size;
5737     - int rc, ret = 0, size, len;
5738     + int ret;
5739    
5740     if (!dev->dev_attrib.pi_prot_type) {
5741     pr_err("Unable to format_prot while pi_prot_type == 0\n");
5742     return -ENODEV;
5743     }
5744     - if (!prot_fd) {
5745     - pr_err("Unable to locate fd_dev->fd_prot_file\n");
5746     - return -ENODEV;
5747     - }
5748    
5749     buf = vzalloc(unit_size);
5750     if (!buf) {
5751     pr_err("Unable to allocate FILEIO prot buf\n");
5752     return -ENOMEM;
5753     }
5754     - prot_length = (dev->transport->get_blocks(dev) + 1) * dev->prot_length;
5755     - size = prot_length;
5756    
5757     pr_debug("Using FILEIO prot_length: %llu\n",
5758     - (unsigned long long)prot_length);
5759     + (unsigned long long)(dev->transport->get_blocks(dev) + 1) *
5760     + dev->prot_length);
5761    
5762     memset(buf, 0xff, unit_size);
5763     - for (prot = 0; prot < prot_length; prot += unit_size) {
5764     - len = min(unit_size, size);
5765     - rc = kernel_write(prot_fd, buf, len, pos);
5766     - if (rc != len) {
5767     - pr_err("vfs_write to prot file failed: %d\n", rc);
5768     - ret = -ENODEV;
5769     - goto out;
5770     - }
5771     - pos += len;
5772     - size -= len;
5773     - }
5774     -
5775     -out:
5776     + ret = fd_do_prot_fill(dev, 0, dev->transport->get_blocks(dev) + 1,
5777     + buf, unit_size);
5778     vfree(buf);
5779     return ret;
5780     }
5781     diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
5782     index 3e7297411110..755bd9b34612 100644
5783     --- a/drivers/target/target_core_sbc.c
5784     +++ b/drivers/target/target_core_sbc.c
5785     @@ -312,7 +312,7 @@ sbc_setup_write_same(struct se_cmd *cmd, unsigned char *flags, struct sbc_ops *o
5786     return 0;
5787     }
5788    
5789     -static sense_reason_t xdreadwrite_callback(struct se_cmd *cmd)
5790     +static sense_reason_t xdreadwrite_callback(struct se_cmd *cmd, bool success)
5791     {
5792     unsigned char *buf, *addr;
5793     struct scatterlist *sg;
5794     @@ -376,7 +376,7 @@ sbc_execute_rw(struct se_cmd *cmd)
5795     cmd->data_direction);
5796     }
5797    
5798     -static sense_reason_t compare_and_write_post(struct se_cmd *cmd)
5799     +static sense_reason_t compare_and_write_post(struct se_cmd *cmd, bool success)
5800     {
5801     struct se_device *dev = cmd->se_dev;
5802    
5803     @@ -399,7 +399,7 @@ static sense_reason_t compare_and_write_post(struct se_cmd *cmd)
5804     return TCM_NO_SENSE;
5805     }
5806    
5807     -static sense_reason_t compare_and_write_callback(struct se_cmd *cmd)
5808     +static sense_reason_t compare_and_write_callback(struct se_cmd *cmd, bool success)
5809     {
5810     struct se_device *dev = cmd->se_dev;
5811     struct scatterlist *write_sg = NULL, *sg;
5812     @@ -414,11 +414,16 @@ static sense_reason_t compare_and_write_callback(struct se_cmd *cmd)
5813    
5814     /*
5815     * Handle early failure in transport_generic_request_failure(),
5816     - * which will not have taken ->caw_mutex yet..
5817     + * which will not have taken ->caw_sem yet..
5818     */
5819     - if (!cmd->t_data_sg || !cmd->t_bidi_data_sg)
5820     + if (!success && (!cmd->t_data_sg || !cmd->t_bidi_data_sg))
5821     return TCM_NO_SENSE;
5822     /*
5823     + * Handle special case for zero-length COMPARE_AND_WRITE
5824     + */
5825     + if (!cmd->data_length)
5826     + goto out;
5827     + /*
5828     * Immediately exit + release dev->caw_sem if command has already
5829     * been failed with a non-zero SCSI status.
5830     */
5831     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
5832     index ac3cbabdbdf0..f786de0290db 100644
5833     --- a/drivers/target/target_core_transport.c
5834     +++ b/drivers/target/target_core_transport.c
5835     @@ -1615,11 +1615,11 @@ void transport_generic_request_failure(struct se_cmd *cmd,
5836     transport_complete_task_attr(cmd);
5837     /*
5838     * Handle special case for COMPARE_AND_WRITE failure, where the
5839     - * callback is expected to drop the per device ->caw_mutex.
5840     + * callback is expected to drop the per device ->caw_sem.
5841     */
5842     if ((cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) &&
5843     cmd->transport_complete_callback)
5844     - cmd->transport_complete_callback(cmd);
5845     + cmd->transport_complete_callback(cmd, false);
5846    
5847     switch (sense_reason) {
5848     case TCM_NON_EXISTENT_LUN:
5849     @@ -1975,8 +1975,12 @@ static void target_complete_ok_work(struct work_struct *work)
5850     if (cmd->transport_complete_callback) {
5851     sense_reason_t rc;
5852    
5853     - rc = cmd->transport_complete_callback(cmd);
5854     + rc = cmd->transport_complete_callback(cmd, true);
5855     if (!rc && !(cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE_POST)) {
5856     + if ((cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) &&
5857     + !cmd->data_length)
5858     + goto queue_rsp;
5859     +
5860     return;
5861     } else if (rc) {
5862     ret = transport_send_check_condition_and_sense(cmd,
5863     @@ -1990,6 +1994,7 @@ static void target_complete_ok_work(struct work_struct *work)
5864     }
5865     }
5866    
5867     +queue_rsp:
5868     switch (cmd->data_direction) {
5869     case DMA_FROM_DEVICE:
5870     spin_lock(&cmd->se_lun->lun_sep_lock);
5871     @@ -2094,6 +2099,16 @@ static inline void transport_reset_sgl_orig(struct se_cmd *cmd)
5872     static inline void transport_free_pages(struct se_cmd *cmd)
5873     {
5874     if (cmd->se_cmd_flags & SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC) {
5875     + /*
5876     + * Release special case READ buffer payload required for
5877     + * SG_TO_MEM_NOALLOC to function with COMPARE_AND_WRITE
5878     + */
5879     + if (cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) {
5880     + transport_free_sgl(cmd->t_bidi_data_sg,
5881     + cmd->t_bidi_data_nents);
5882     + cmd->t_bidi_data_sg = NULL;
5883     + cmd->t_bidi_data_nents = 0;
5884     + }
5885     transport_reset_sgl_orig(cmd);
5886     return;
5887     }
5888     @@ -2246,6 +2261,7 @@ sense_reason_t
5889     transport_generic_new_cmd(struct se_cmd *cmd)
5890     {
5891     int ret = 0;
5892     + bool zero_flag = !(cmd->se_cmd_flags & SCF_SCSI_DATA_CDB);
5893    
5894     /*
5895     * Determine is the TCM fabric module has already allocated physical
5896     @@ -2254,7 +2270,6 @@ transport_generic_new_cmd(struct se_cmd *cmd)
5897     */
5898     if (!(cmd->se_cmd_flags & SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC) &&
5899     cmd->data_length) {
5900     - bool zero_flag = !(cmd->se_cmd_flags & SCF_SCSI_DATA_CDB);
5901    
5902     if ((cmd->se_cmd_flags & SCF_BIDI) ||
5903     (cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE)) {
5904     @@ -2285,6 +2300,20 @@ transport_generic_new_cmd(struct se_cmd *cmd)
5905     cmd->data_length, zero_flag);
5906     if (ret < 0)
5907     return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
5908     + } else if ((cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) &&
5909     + cmd->data_length) {
5910     + /*
5911     + * Special case for COMPARE_AND_WRITE with fabrics
5912     + * using SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC.
5913     + */
5914     + u32 caw_length = cmd->t_task_nolb *
5915     + cmd->se_dev->dev_attrib.block_size;
5916     +
5917     + ret = target_alloc_sgl(&cmd->t_bidi_data_sg,
5918     + &cmd->t_bidi_data_nents,
5919     + caw_length, zero_flag);
5920     + if (ret < 0)
5921     + return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
5922     }
5923     /*
5924     * If this command is not a write we can execute it right here,
5925     diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
5926     index deae122c9c4b..d465ace95186 100644
5927     --- a/drivers/tty/serial/8250/8250_core.c
5928     +++ b/drivers/tty/serial/8250/8250_core.c
5929     @@ -3444,7 +3444,8 @@ void serial8250_suspend_port(int line)
5930     port->type != PORT_8250) {
5931     unsigned char canary = 0xa5;
5932     serial_out(up, UART_SCR, canary);
5933     - up->canary = canary;
5934     + if (serial_in(up, UART_SCR) == canary)
5935     + up->canary = canary;
5936     }
5937    
5938     uart_suspend_port(&serial8250_reg, port);
5939     diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
5940     index 6ae5b8560e4d..7a80250475eb 100644
5941     --- a/drivers/tty/serial/8250/8250_dw.c
5942     +++ b/drivers/tty/serial/8250/8250_dw.c
5943     @@ -629,6 +629,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
5944     { "80860F0A", 0 },
5945     { "8086228A", 0 },
5946     { "APMC0D08", 0},
5947     + { "AMD0020", 0 },
5948     { },
5949     };
5950     MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
5951     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
5952     index 0eb29b1c47ac..23061918b0e4 100644
5953     --- a/drivers/tty/serial/imx.c
5954     +++ b/drivers/tty/serial/imx.c
5955     @@ -818,7 +818,7 @@ static irqreturn_t imx_int(int irq, void *dev_id)
5956     if (sts2 & USR2_ORE) {
5957     dev_err(sport->port.dev, "Rx FIFO overrun\n");
5958     sport->port.icount.overrun++;
5959     - writel(sts2 | USR2_ORE, sport->port.membase + USR2);
5960     + writel(USR2_ORE, sport->port.membase + USR2);
5961     }
5962    
5963     return IRQ_HANDLED;
5964     @@ -1181,10 +1181,12 @@ static int imx_startup(struct uart_port *port)
5965     imx_uart_dma_init(sport);
5966    
5967     spin_lock_irqsave(&sport->port.lock, flags);
5968     +
5969     /*
5970     * Finally, clear and enable interrupts
5971     */
5972     writel(USR1_RTSD, sport->port.membase + USR1);
5973     + writel(USR2_ORE, sport->port.membase + USR2);
5974    
5975     if (sport->dma_is_inited && !sport->dma_is_enabled)
5976     imx_enable_dma(sport);
5977     @@ -1199,10 +1201,6 @@ static int imx_startup(struct uart_port *port)
5978    
5979     writel(temp, sport->port.membase + UCR1);
5980    
5981     - /* Clear any pending ORE flag before enabling interrupt */
5982     - temp = readl(sport->port.membase + USR2);
5983     - writel(temp | USR2_ORE, sport->port.membase + USR2);
5984     -
5985     temp = readl(sport->port.membase + UCR4);
5986     temp |= UCR4_OREN;
5987     writel(temp, sport->port.membase + UCR4);
5988     diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
5989     index a051a7a2b1bd..a81f9dd7ee97 100644
5990     --- a/drivers/usb/class/cdc-wdm.c
5991     +++ b/drivers/usb/class/cdc-wdm.c
5992     @@ -245,7 +245,7 @@ static void wdm_int_callback(struct urb *urb)
5993     case USB_CDC_NOTIFY_RESPONSE_AVAILABLE:
5994     dev_dbg(&desc->intf->dev,
5995     "NOTIFY_RESPONSE_AVAILABLE received: index %d len %d",
5996     - dr->wIndex, dr->wLength);
5997     + le16_to_cpu(dr->wIndex), le16_to_cpu(dr->wLength));
5998     break;
5999    
6000     case USB_CDC_NOTIFY_NETWORK_CONNECTION:
6001     @@ -262,7 +262,9 @@ static void wdm_int_callback(struct urb *urb)
6002     clear_bit(WDM_POLL_RUNNING, &desc->flags);
6003     dev_err(&desc->intf->dev,
6004     "unknown notification %d received: index %d len %d\n",
6005     - dr->bNotificationType, dr->wIndex, dr->wLength);
6006     + dr->bNotificationType,
6007     + le16_to_cpu(dr->wIndex),
6008     + le16_to_cpu(dr->wLength));
6009     goto exit;
6010     }
6011    
6012     @@ -408,7 +410,7 @@ static ssize_t wdm_write
6013     USB_RECIP_INTERFACE);
6014     req->bRequest = USB_CDC_SEND_ENCAPSULATED_COMMAND;
6015     req->wValue = 0;
6016     - req->wIndex = desc->inum;
6017     + req->wIndex = desc->inum; /* already converted */
6018     req->wLength = cpu_to_le16(count);
6019     set_bit(WDM_IN_USE, &desc->flags);
6020     desc->outbuf = buf;
6021     @@ -422,7 +424,7 @@ static ssize_t wdm_write
6022     rv = usb_translate_errors(rv);
6023     } else {
6024     dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d",
6025     - req->wIndex);
6026     + le16_to_cpu(req->wIndex));
6027     }
6028     out:
6029     usb_autopm_put_interface(desc->intf);
6030     @@ -820,7 +822,7 @@ static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor
6031     desc->irq->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);
6032     desc->irq->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE;
6033     desc->irq->wValue = 0;
6034     - desc->irq->wIndex = desc->inum;
6035     + desc->irq->wIndex = desc->inum; /* already converted */
6036     desc->irq->wLength = cpu_to_le16(desc->wMaxCommand);
6037    
6038     usb_fill_control_urb(
6039     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
6040     index d7c3d5a35946..3b7151687776 100644
6041     --- a/drivers/usb/core/hub.c
6042     +++ b/drivers/usb/core/hub.c
6043     @@ -3406,10 +3406,10 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg)
6044     if (status) {
6045     dev_dbg(&port_dev->dev, "can't resume, status %d\n", status);
6046     } else {
6047     - /* drive resume for at least 20 msec */
6048     + /* drive resume for USB_RESUME_TIMEOUT msec */
6049     dev_dbg(&udev->dev, "usb %sresume\n",
6050     (PMSG_IS_AUTO(msg) ? "auto-" : ""));
6051     - msleep(25);
6052     + msleep(USB_RESUME_TIMEOUT);
6053    
6054     /* Virtual root hubs can trigger on GET_PORT_STATUS to
6055     * stop resume signaling. Then finish the resume
6056     diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
6057     index c78c8740db1d..758b7e0380f6 100644
6058     --- a/drivers/usb/dwc2/hcd.c
6059     +++ b/drivers/usb/dwc2/hcd.c
6060     @@ -1521,7 +1521,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
6061     dev_dbg(hsotg->dev,
6062     "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
6063     writel(0, hsotg->regs + PCGCTL);
6064     - usleep_range(20000, 40000);
6065     + msleep(USB_RESUME_TIMEOUT);
6066    
6067     hprt0 = dwc2_read_hprt0(hsotg);
6068     hprt0 |= HPRT0_RES;
6069     diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
6070     index 90545980542f..6385c198c134 100644
6071     --- a/drivers/usb/gadget/legacy/printer.c
6072     +++ b/drivers/usb/gadget/legacy/printer.c
6073     @@ -1031,6 +1031,15 @@ unknown:
6074     break;
6075     }
6076     /* host either stalls (value < 0) or reports success */
6077     + if (value >= 0) {
6078     + req->length = value;
6079     + req->zero = value < wLength;
6080     + value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
6081     + if (value < 0) {
6082     + ERROR(dev, "%s:%d Error!\n", __func__, __LINE__);
6083     + req->status = 0;
6084     + }
6085     + }
6086     return value;
6087     }
6088    
6089     diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
6090     index 85e56d1abd23..f4d88dfb26a7 100644
6091     --- a/drivers/usb/host/ehci-hcd.c
6092     +++ b/drivers/usb/host/ehci-hcd.c
6093     @@ -792,12 +792,12 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
6094     ehci->reset_done[i] == 0))
6095     continue;
6096    
6097     - /* start 20 msec resume signaling from this port,
6098     - * and make hub_wq collect PORT_STAT_C_SUSPEND to
6099     - * stop that signaling. Use 5 ms extra for safety,
6100     - * like usb_port_resume() does.
6101     + /* start USB_RESUME_TIMEOUT msec resume signaling from
6102     + * this port, and make hub_wq collect
6103     + * PORT_STAT_C_SUSPEND to stop that signaling.
6104     */
6105     - ehci->reset_done[i] = jiffies + msecs_to_jiffies(25);
6106     + ehci->reset_done[i] = jiffies +
6107     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6108     set_bit(i, &ehci->resuming_ports);
6109     ehci_dbg (ehci, "port %d remote wakeup\n", i + 1);
6110     usb_hcd_start_port_resume(&hcd->self, i);
6111     diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
6112     index 87cf86f38b36..7354d0129a72 100644
6113     --- a/drivers/usb/host/ehci-hub.c
6114     +++ b/drivers/usb/host/ehci-hub.c
6115     @@ -471,10 +471,13 @@ static int ehci_bus_resume (struct usb_hcd *hcd)
6116     ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
6117     }
6118    
6119     - /* msleep for 20ms only if code is trying to resume port */
6120     + /*
6121     + * msleep for USB_RESUME_TIMEOUT ms only if code is trying to resume
6122     + * port
6123     + */
6124     if (resume_needed) {
6125     spin_unlock_irq(&ehci->lock);
6126     - msleep(20);
6127     + msleep(USB_RESUME_TIMEOUT);
6128     spin_lock_irq(&ehci->lock);
6129     if (ehci->shutdown)
6130     goto shutdown;
6131     @@ -942,7 +945,7 @@ int ehci_hub_control(
6132     temp &= ~PORT_WAKE_BITS;
6133     ehci_writel(ehci, temp | PORT_RESUME, status_reg);
6134     ehci->reset_done[wIndex] = jiffies
6135     - + msecs_to_jiffies(20);
6136     + + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6137     set_bit(wIndex, &ehci->resuming_ports);
6138     usb_hcd_start_port_resume(&hcd->self, wIndex);
6139     break;
6140     diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
6141     index 475b21fd373b..7a6681fb7675 100644
6142     --- a/drivers/usb/host/fotg210-hcd.c
6143     +++ b/drivers/usb/host/fotg210-hcd.c
6144     @@ -1595,7 +1595,7 @@ static int fotg210_hub_control(
6145     /* resume signaling for 20 msec */
6146     fotg210_writel(fotg210, temp | PORT_RESUME, status_reg);
6147     fotg210->reset_done[wIndex] = jiffies
6148     - + msecs_to_jiffies(20);
6149     + + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6150     break;
6151     case USB_PORT_FEAT_C_SUSPEND:
6152     clear_bit(wIndex, &fotg210->port_c_suspend);
6153     diff --git a/drivers/usb/host/fusbh200-hcd.c b/drivers/usb/host/fusbh200-hcd.c
6154     index a83eefefffda..ba77e2e43f62 100644
6155     --- a/drivers/usb/host/fusbh200-hcd.c
6156     +++ b/drivers/usb/host/fusbh200-hcd.c
6157     @@ -1550,10 +1550,9 @@ static int fusbh200_hub_control (
6158     if ((temp & PORT_PE) == 0)
6159     goto error;
6160    
6161     - /* resume signaling for 20 msec */
6162     fusbh200_writel(fusbh200, temp | PORT_RESUME, status_reg);
6163     fusbh200->reset_done[wIndex] = jiffies
6164     - + msecs_to_jiffies(20);
6165     + + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6166     break;
6167     case USB_PORT_FEAT_C_SUSPEND:
6168     clear_bit(wIndex, &fusbh200->port_c_suspend);
6169     diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
6170     index 113d0cc6cc43..9ef56443446d 100644
6171     --- a/drivers/usb/host/isp116x-hcd.c
6172     +++ b/drivers/usb/host/isp116x-hcd.c
6173     @@ -1490,7 +1490,7 @@ static int isp116x_bus_resume(struct usb_hcd *hcd)
6174     spin_unlock_irq(&isp116x->lock);
6175    
6176     hcd->state = HC_STATE_RESUMING;
6177     - msleep(20);
6178     + msleep(USB_RESUME_TIMEOUT);
6179    
6180     /* Go operational */
6181     spin_lock_irq(&isp116x->lock);
6182     diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c
6183     index ef7efb278b15..28a2866b6b16 100644
6184     --- a/drivers/usb/host/oxu210hp-hcd.c
6185     +++ b/drivers/usb/host/oxu210hp-hcd.c
6186     @@ -2500,11 +2500,12 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd)
6187     || oxu->reset_done[i] != 0)
6188     continue;
6189    
6190     - /* start 20 msec resume signaling from this port,
6191     - * and make hub_wq collect PORT_STAT_C_SUSPEND to
6192     + /* start USB_RESUME_TIMEOUT resume signaling from this
6193     + * port, and make hub_wq collect PORT_STAT_C_SUSPEND to
6194     * stop that signaling.
6195     */
6196     - oxu->reset_done[i] = jiffies + msecs_to_jiffies(20);
6197     + oxu->reset_done[i] = jiffies +
6198     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6199     oxu_dbg(oxu, "port %d remote wakeup\n", i + 1);
6200     mod_timer(&hcd->rh_timer, oxu->reset_done[i]);
6201     }
6202     diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
6203     index bdc82fea0a1f..54a417043e44 100644
6204     --- a/drivers/usb/host/r8a66597-hcd.c
6205     +++ b/drivers/usb/host/r8a66597-hcd.c
6206     @@ -2301,7 +2301,7 @@ static int r8a66597_bus_resume(struct usb_hcd *hcd)
6207     rh->port &= ~USB_PORT_STAT_SUSPEND;
6208     rh->port |= USB_PORT_STAT_C_SUSPEND << 16;
6209     r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg);
6210     - msleep(50);
6211     + msleep(USB_RESUME_TIMEOUT);
6212     r8a66597_mdfy(r8a66597, UACT, RESUME | UACT, dvstctr_reg);
6213     }
6214    
6215     diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
6216     index 4f4ba1ea9e9b..9118cd8de1a7 100644
6217     --- a/drivers/usb/host/sl811-hcd.c
6218     +++ b/drivers/usb/host/sl811-hcd.c
6219     @@ -1259,7 +1259,7 @@ sl811h_hub_control(
6220     sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
6221    
6222     mod_timer(&sl811->timer, jiffies
6223     - + msecs_to_jiffies(20));
6224     + + msecs_to_jiffies(USB_RESUME_TIMEOUT));
6225     break;
6226     case USB_PORT_FEAT_POWER:
6227     port_power(sl811, 0);
6228     diff --git a/drivers/usb/host/uhci-hub.c b/drivers/usb/host/uhci-hub.c
6229     index 19ba5eafb31e..7b3d1afcc14a 100644
6230     --- a/drivers/usb/host/uhci-hub.c
6231     +++ b/drivers/usb/host/uhci-hub.c
6232     @@ -166,7 +166,7 @@ static void uhci_check_ports(struct uhci_hcd *uhci)
6233     /* Port received a wakeup request */
6234     set_bit(port, &uhci->resuming_ports);
6235     uhci->ports_timeout = jiffies +
6236     - msecs_to_jiffies(25);
6237     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6238     usb_hcd_start_port_resume(
6239     &uhci_to_hcd(uhci)->self, port);
6240    
6241     @@ -338,7 +338,8 @@ static int uhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
6242     uhci_finish_suspend(uhci, port, port_addr);
6243    
6244     /* USB v2.0 7.1.7.5 */
6245     - uhci->ports_timeout = jiffies + msecs_to_jiffies(50);
6246     + uhci->ports_timeout = jiffies +
6247     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6248     break;
6249     case USB_PORT_FEAT_POWER:
6250     /* UHCI has no power switching */
6251     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
6252     index 73485fa4372f..eeedde8c435a 100644
6253     --- a/drivers/usb/host/xhci-ring.c
6254     +++ b/drivers/usb/host/xhci-ring.c
6255     @@ -1574,7 +1574,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
6256     } else {
6257     xhci_dbg(xhci, "resume HS port %d\n", port_id);
6258     bus_state->resume_done[faked_port_index] = jiffies +
6259     - msecs_to_jiffies(20);
6260     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6261     set_bit(faked_port_index, &bus_state->resuming_ports);
6262     mod_timer(&hcd->rh_timer,
6263     bus_state->resume_done[faked_port_index]);
6264     diff --git a/drivers/usb/isp1760/isp1760-hcd.c b/drivers/usb/isp1760/isp1760-hcd.c
6265     index 3cb98b1d5d29..7911b6b6fe40 100644
6266     --- a/drivers/usb/isp1760/isp1760-hcd.c
6267     +++ b/drivers/usb/isp1760/isp1760-hcd.c
6268     @@ -1869,7 +1869,7 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
6269     reg_write32(hcd->regs, HC_PORTSC1,
6270     temp | PORT_RESUME);
6271     priv->reset_done = jiffies +
6272     - msecs_to_jiffies(20);
6273     + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6274     }
6275     break;
6276     case USB_PORT_FEAT_C_SUSPEND:
6277     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
6278     index 067920f2d570..ec0ee3b486f5 100644
6279     --- a/drivers/usb/musb/musb_core.c
6280     +++ b/drivers/usb/musb/musb_core.c
6281     @@ -99,6 +99,7 @@
6282     #include <linux/platform_device.h>
6283     #include <linux/io.h>
6284     #include <linux/dma-mapping.h>
6285     +#include <linux/usb.h>
6286    
6287     #include "musb_core.h"
6288    
6289     @@ -562,7 +563,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
6290     (USB_PORT_STAT_C_SUSPEND << 16)
6291     | MUSB_PORT_STAT_RESUME;
6292     musb->rh_timer = jiffies
6293     - + msecs_to_jiffies(20);
6294     + + msecs_to_jiffies(USB_RESUME_TIMEOUT);
6295     musb->need_finish_resume = 1;
6296    
6297     musb->xceiv->otg->state = OTG_STATE_A_HOST;
6298     @@ -1597,16 +1598,30 @@ irqreturn_t musb_interrupt(struct musb *musb)
6299     is_host_active(musb) ? "host" : "peripheral",
6300     musb->int_usb, musb->int_tx, musb->int_rx);
6301    
6302     - /* the core can interrupt us for multiple reasons; docs have
6303     - * a generic interrupt flowchart to follow
6304     + /**
6305     + * According to Mentor Graphics' documentation, flowchart on page 98,
6306     + * IRQ should be handled as follows:
6307     + *
6308     + * . Resume IRQ
6309     + * . Session Request IRQ
6310     + * . VBUS Error IRQ
6311     + * . Suspend IRQ
6312     + * . Connect IRQ
6313     + * . Disconnect IRQ
6314     + * . Reset/Babble IRQ
6315     + * . SOF IRQ (we're not using this one)
6316     + * . Endpoint 0 IRQ
6317     + * . TX Endpoints
6318     + * . RX Endpoints
6319     + *
6320     + * We will be following that flowchart in order to avoid any problems
6321     + * that might arise with internal Finite State Machine.
6322     */
6323     +
6324     if (musb->int_usb)
6325     retval |= musb_stage0_irq(musb, musb->int_usb,
6326     devctl);
6327    
6328     - /* "stage 1" is handling endpoint irqs */
6329     -
6330     - /* handle endpoint 0 first */
6331     if (musb->int_tx & 1) {
6332     if (is_host_active(musb))
6333     retval |= musb_h_ep0_irq(musb);
6334     @@ -1614,37 +1629,31 @@ irqreturn_t musb_interrupt(struct musb *musb)
6335     retval |= musb_g_ep0_irq(musb);
6336     }
6337    
6338     - /* RX on endpoints 1-15 */
6339     - reg = musb->int_rx >> 1;
6340     + reg = musb->int_tx >> 1;
6341     ep_num = 1;
6342     while (reg) {
6343     if (reg & 1) {
6344     - /* musb_ep_select(musb->mregs, ep_num); */
6345     - /* REVISIT just retval = ep->rx_irq(...) */
6346     retval = IRQ_HANDLED;
6347     if (is_host_active(musb))
6348     - musb_host_rx(musb, ep_num);
6349     + musb_host_tx(musb, ep_num);
6350     else
6351     - musb_g_rx(musb, ep_num);
6352     + musb_g_tx(musb, ep_num);
6353     }
6354     -
6355     reg >>= 1;
6356     ep_num++;
6357     }
6358    
6359     - /* TX on endpoints 1-15 */
6360     - reg = musb->int_tx >> 1;
6361     + reg = musb->int_rx >> 1;
6362     ep_num = 1;
6363     while (reg) {
6364     if (reg & 1) {
6365     - /* musb_ep_select(musb->mregs, ep_num); */
6366     - /* REVISIT just retval |= ep->tx_irq(...) */
6367     retval = IRQ_HANDLED;
6368     if (is_host_active(musb))
6369     - musb_host_tx(musb, ep_num);
6370     + musb_host_rx(musb, ep_num);
6371     else
6372     - musb_g_tx(musb, ep_num);
6373     + musb_g_rx(musb, ep_num);
6374     }
6375     +
6376     reg >>= 1;
6377     ep_num++;
6378     }
6379     @@ -2463,7 +2472,7 @@ static int musb_resume(struct device *dev)
6380     if (musb->need_finish_resume) {
6381     musb->need_finish_resume = 0;
6382     schedule_delayed_work(&musb->finish_resume_work,
6383     - msecs_to_jiffies(20));
6384     + msecs_to_jiffies(USB_RESUME_TIMEOUT));
6385     }
6386    
6387     /*
6388     @@ -2506,7 +2515,7 @@ static int musb_runtime_resume(struct device *dev)
6389     if (musb->need_finish_resume) {
6390     musb->need_finish_resume = 0;
6391     schedule_delayed_work(&musb->finish_resume_work,
6392     - msecs_to_jiffies(20));
6393     + msecs_to_jiffies(USB_RESUME_TIMEOUT));
6394     }
6395    
6396     return 0;
6397     diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c
6398     index 294e159f4afe..5428ed11440d 100644
6399     --- a/drivers/usb/musb/musb_virthub.c
6400     +++ b/drivers/usb/musb/musb_virthub.c
6401     @@ -136,7 +136,7 @@ void musb_port_suspend(struct musb *musb, bool do_suspend)
6402     /* later, GetPortStatus will stop RESUME signaling */
6403     musb->port1_status |= MUSB_PORT_STAT_RESUME;
6404     schedule_delayed_work(&musb->finish_resume_work,
6405     - msecs_to_jiffies(20));
6406     + msecs_to_jiffies(USB_RESUME_TIMEOUT));
6407     }
6408     }
6409    
6410     diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c
6411     index 2f9735b35338..d1cd6b50f520 100644
6412     --- a/drivers/usb/phy/phy.c
6413     +++ b/drivers/usb/phy/phy.c
6414     @@ -81,7 +81,9 @@ static void devm_usb_phy_release(struct device *dev, void *res)
6415    
6416     static int devm_usb_phy_match(struct device *dev, void *res, void *match_data)
6417     {
6418     - return res == match_data;
6419     + struct usb_phy **phy = res;
6420     +
6421     + return *phy == match_data;
6422     }
6423    
6424     /**
6425     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
6426     index 995986b8e36b..d925f55e4857 100644
6427     --- a/fs/binfmt_elf.c
6428     +++ b/fs/binfmt_elf.c
6429     @@ -862,6 +862,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
6430     i < loc->elf_ex.e_phnum; i++, elf_ppnt++) {
6431     int elf_prot = 0, elf_flags;
6432     unsigned long k, vaddr;
6433     + unsigned long total_size = 0;
6434    
6435     if (elf_ppnt->p_type != PT_LOAD)
6436     continue;
6437     @@ -924,10 +925,16 @@ static int load_elf_binary(struct linux_binprm *bprm)
6438     #else
6439     load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
6440     #endif
6441     + total_size = total_mapping_size(elf_phdata,
6442     + loc->elf_ex.e_phnum);
6443     + if (!total_size) {
6444     + error = -EINVAL;
6445     + goto out_free_dentry;
6446     + }
6447     }
6448    
6449     error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
6450     - elf_prot, elf_flags, 0);
6451     + elf_prot, elf_flags, total_size);
6452     if (BAD_ADDR(error)) {
6453     retval = IS_ERR((void *)error) ?
6454     PTR_ERR((void*)error) : -EINVAL;
6455     diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
6456     index 8b353ad02f03..0a795c969c78 100644
6457     --- a/fs/btrfs/extent-tree.c
6458     +++ b/fs/btrfs/extent-tree.c
6459     @@ -6956,12 +6956,11 @@ static int __btrfs_free_reserved_extent(struct btrfs_root *root,
6460     return -ENOSPC;
6461     }
6462    
6463     - if (btrfs_test_opt(root, DISCARD))
6464     - ret = btrfs_discard_extent(root, start, len, NULL);
6465     -
6466     if (pin)
6467     pin_down_extent(root, cache, start, len, 1);
6468     else {
6469     + if (btrfs_test_opt(root, DISCARD))
6470     + ret = btrfs_discard_extent(root, start, len, NULL);
6471     btrfs_add_free_space(cache, start, len);
6472     btrfs_update_reserved_bytes(cache, len, RESERVE_FREE, delalloc);
6473     }
6474     diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
6475     index 74609b931ba5..f23d4be3280e 100644
6476     --- a/fs/btrfs/ioctl.c
6477     +++ b/fs/btrfs/ioctl.c
6478     @@ -2897,6 +2897,9 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 len,
6479     if (src == dst)
6480     return -EINVAL;
6481    
6482     + if (len == 0)
6483     + return 0;
6484     +
6485     btrfs_double_lock(src, loff, dst, dst_loff, len);
6486    
6487     ret = extent_same_check_offsets(src, loff, len);
6488     @@ -3626,6 +3629,11 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
6489     if (off + len == src->i_size)
6490     len = ALIGN(src->i_size, bs) - off;
6491    
6492     + if (len == 0) {
6493     + ret = 0;
6494     + goto out_unlock;
6495     + }
6496     +
6497     /* verify the end result is block aligned */
6498     if (!IS_ALIGNED(off, bs) || !IS_ALIGNED(off + len, bs) ||
6499     !IS_ALIGNED(destoff, bs))
6500     diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
6501     index 883b93623bc5..45ea704be030 100644
6502     --- a/fs/btrfs/xattr.c
6503     +++ b/fs/btrfs/xattr.c
6504     @@ -364,22 +364,42 @@ const struct xattr_handler *btrfs_xattr_handlers[] = {
6505     /*
6506     * Check if the attribute is in a supported namespace.
6507     *
6508     - * This applied after the check for the synthetic attributes in the system
6509     + * This is applied after the check for the synthetic attributes in the system
6510     * namespace.
6511     */
6512     -static bool btrfs_is_valid_xattr(const char *name)
6513     +static int btrfs_is_valid_xattr(const char *name)
6514     {
6515     - return !strncmp(name, XATTR_SECURITY_PREFIX,
6516     - XATTR_SECURITY_PREFIX_LEN) ||
6517     - !strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) ||
6518     - !strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) ||
6519     - !strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) ||
6520     - !strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN);
6521     + int len = strlen(name);
6522     + int prefixlen = 0;
6523     +
6524     + if (!strncmp(name, XATTR_SECURITY_PREFIX,
6525     + XATTR_SECURITY_PREFIX_LEN))
6526     + prefixlen = XATTR_SECURITY_PREFIX_LEN;
6527     + else if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
6528     + prefixlen = XATTR_SYSTEM_PREFIX_LEN;
6529     + else if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN))
6530     + prefixlen = XATTR_TRUSTED_PREFIX_LEN;
6531     + else if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN))
6532     + prefixlen = XATTR_USER_PREFIX_LEN;
6533     + else if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
6534     + prefixlen = XATTR_BTRFS_PREFIX_LEN;
6535     + else
6536     + return -EOPNOTSUPP;
6537     +
6538     + /*
6539     + * The name cannot consist of just prefix
6540     + */
6541     + if (len <= prefixlen)
6542     + return -EINVAL;
6543     +
6544     + return 0;
6545     }
6546    
6547     ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,
6548     void *buffer, size_t size)
6549     {
6550     + int ret;
6551     +
6552     /*
6553     * If this is a request for a synthetic attribute in the system.*
6554     * namespace use the generic infrastructure to resolve a handler
6555     @@ -388,8 +408,9 @@ ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,
6556     if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
6557     return generic_getxattr(dentry, name, buffer, size);
6558    
6559     - if (!btrfs_is_valid_xattr(name))
6560     - return -EOPNOTSUPP;
6561     + ret = btrfs_is_valid_xattr(name);
6562     + if (ret)
6563     + return ret;
6564     return __btrfs_getxattr(dentry->d_inode, name, buffer, size);
6565     }
6566    
6567     @@ -397,6 +418,7 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
6568     size_t size, int flags)
6569     {
6570     struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
6571     + int ret;
6572    
6573     /*
6574     * The permission on security.* and system.* is not checked
6575     @@ -413,8 +435,9 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
6576     if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
6577     return generic_setxattr(dentry, name, value, size, flags);
6578    
6579     - if (!btrfs_is_valid_xattr(name))
6580     - return -EOPNOTSUPP;
6581     + ret = btrfs_is_valid_xattr(name);
6582     + if (ret)
6583     + return ret;
6584    
6585     if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
6586     return btrfs_set_prop(dentry->d_inode, name,
6587     @@ -430,6 +453,7 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
6588     int btrfs_removexattr(struct dentry *dentry, const char *name)
6589     {
6590     struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
6591     + int ret;
6592    
6593     /*
6594     * The permission on security.* and system.* is not checked
6595     @@ -446,8 +470,9 @@ int btrfs_removexattr(struct dentry *dentry, const char *name)
6596     if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
6597     return generic_removexattr(dentry, name);
6598    
6599     - if (!btrfs_is_valid_xattr(name))
6600     - return -EOPNOTSUPP;
6601     + ret = btrfs_is_valid_xattr(name);
6602     + if (ret)
6603     + return ret;
6604    
6605     if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
6606     return btrfs_set_prop(dentry->d_inode, name,
6607     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
6608     index 28fe71a2904c..aae7011d99e8 100644
6609     --- a/fs/ext4/namei.c
6610     +++ b/fs/ext4/namei.c
6611     @@ -1865,7 +1865,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
6612     struct inode *inode)
6613     {
6614     struct inode *dir = dentry->d_parent->d_inode;
6615     - struct buffer_head *bh;
6616     + struct buffer_head *bh = NULL;
6617     struct ext4_dir_entry_2 *de;
6618     struct ext4_dir_entry_tail *t;
6619     struct super_block *sb;
6620     @@ -1889,14 +1889,14 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
6621     return retval;
6622     if (retval == 1) {
6623     retval = 0;
6624     - return retval;
6625     + goto out;
6626     }
6627     }
6628    
6629     if (is_dx(dir)) {
6630     retval = ext4_dx_add_entry(handle, dentry, inode);
6631     if (!retval || (retval != ERR_BAD_DX_DIR))
6632     - return retval;
6633     + goto out;
6634     ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
6635     dx_fallback++;
6636     ext4_mark_inode_dirty(handle, dir);
6637     @@ -1908,14 +1908,15 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
6638     return PTR_ERR(bh);
6639    
6640     retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
6641     - if (retval != -ENOSPC) {
6642     - brelse(bh);
6643     - return retval;
6644     - }
6645     + if (retval != -ENOSPC)
6646     + goto out;
6647    
6648     if (blocks == 1 && !dx_fallback &&
6649     - EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX))
6650     - return make_indexed_dir(handle, dentry, inode, bh);
6651     + EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) {
6652     + retval = make_indexed_dir(handle, dentry, inode, bh);
6653     + bh = NULL; /* make_indexed_dir releases bh */
6654     + goto out;
6655     + }
6656     brelse(bh);
6657     }
6658     bh = ext4_append(handle, dir, &block);
6659     @@ -1931,6 +1932,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
6660     }
6661    
6662     retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
6663     +out:
6664     brelse(bh);
6665     if (retval == 0)
6666     ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
6667     diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c
6668     index 665ef5a05183..a563ddbc19e6 100644
6669     --- a/fs/lockd/svcsubs.c
6670     +++ b/fs/lockd/svcsubs.c
6671     @@ -31,7 +31,7 @@
6672     static struct hlist_head nlm_files[FILE_NRHASH];
6673     static DEFINE_MUTEX(nlm_file_mutex);
6674    
6675     -#ifdef NFSD_DEBUG
6676     +#ifdef CONFIG_SUNRPC_DEBUG
6677     static inline void nlm_debug_print_fh(char *msg, struct nfs_fh *f)
6678     {
6679     u32 *fhp = (u32*)f->data;
6680     diff --git a/fs/namei.c b/fs/namei.c
6681     index c83145af4bfc..caa38a24e1f7 100644
6682     --- a/fs/namei.c
6683     +++ b/fs/namei.c
6684     @@ -1591,7 +1591,8 @@ static inline int walk_component(struct nameidata *nd, struct path *path,
6685    
6686     if (should_follow_link(path->dentry, follow)) {
6687     if (nd->flags & LOOKUP_RCU) {
6688     - if (unlikely(unlazy_walk(nd, path->dentry))) {
6689     + if (unlikely(nd->path.mnt != path->mnt ||
6690     + unlazy_walk(nd, path->dentry))) {
6691     err = -ECHILD;
6692     goto out_err;
6693     }
6694     @@ -3047,7 +3048,8 @@ finish_lookup:
6695    
6696     if (should_follow_link(path->dentry, !symlink_ok)) {
6697     if (nd->flags & LOOKUP_RCU) {
6698     - if (unlikely(unlazy_walk(nd, path->dentry))) {
6699     + if (unlikely(nd->path.mnt != path->mnt ||
6700     + unlazy_walk(nd, path->dentry))) {
6701     error = -ECHILD;
6702     goto out;
6703     }
6704     diff --git a/fs/namespace.c b/fs/namespace.c
6705     index 82ef1405260e..4622ee32a5e2 100644
6706     --- a/fs/namespace.c
6707     +++ b/fs/namespace.c
6708     @@ -632,14 +632,17 @@ struct mount *__lookup_mnt(struct vfsmount *mnt, struct dentry *dentry)
6709     */
6710     struct mount *__lookup_mnt_last(struct vfsmount *mnt, struct dentry *dentry)
6711     {
6712     - struct mount *p, *res;
6713     - res = p = __lookup_mnt(mnt, dentry);
6714     + struct mount *p, *res = NULL;
6715     + p = __lookup_mnt(mnt, dentry);
6716     if (!p)
6717     goto out;
6718     + if (!(p->mnt.mnt_flags & MNT_UMOUNT))
6719     + res = p;
6720     hlist_for_each_entry_continue(p, mnt_hash) {
6721     if (&p->mnt_parent->mnt != mnt || p->mnt_mountpoint != dentry)
6722     break;
6723     - res = p;
6724     + if (!(p->mnt.mnt_flags & MNT_UMOUNT))
6725     + res = p;
6726     }
6727     out:
6728     return res;
6729     @@ -795,10 +798,8 @@ static void __touch_mnt_namespace(struct mnt_namespace *ns)
6730     /*
6731     * vfsmount lock must be held for write
6732     */
6733     -static void detach_mnt(struct mount *mnt, struct path *old_path)
6734     +static void unhash_mnt(struct mount *mnt)
6735     {
6736     - old_path->dentry = mnt->mnt_mountpoint;
6737     - old_path->mnt = &mnt->mnt_parent->mnt;
6738     mnt->mnt_parent = mnt;
6739     mnt->mnt_mountpoint = mnt->mnt.mnt_root;
6740     list_del_init(&mnt->mnt_child);
6741     @@ -811,6 +812,26 @@ static void detach_mnt(struct mount *mnt, struct path *old_path)
6742     /*
6743     * vfsmount lock must be held for write
6744     */
6745     +static void detach_mnt(struct mount *mnt, struct path *old_path)
6746     +{
6747     + old_path->dentry = mnt->mnt_mountpoint;
6748     + old_path->mnt = &mnt->mnt_parent->mnt;
6749     + unhash_mnt(mnt);
6750     +}
6751     +
6752     +/*
6753     + * vfsmount lock must be held for write
6754     + */
6755     +static void umount_mnt(struct mount *mnt)
6756     +{
6757     + /* old mountpoint will be dropped when we can do that */
6758     + mnt->mnt_ex_mountpoint = mnt->mnt_mountpoint;
6759     + unhash_mnt(mnt);
6760     +}
6761     +
6762     +/*
6763     + * vfsmount lock must be held for write
6764     + */
6765     void mnt_set_mountpoint(struct mount *mnt,
6766     struct mountpoint *mp,
6767     struct mount *child_mnt)
6768     @@ -1078,6 +1099,13 @@ static void mntput_no_expire(struct mount *mnt)
6769     rcu_read_unlock();
6770    
6771     list_del(&mnt->mnt_instance);
6772     +
6773     + if (unlikely(!list_empty(&mnt->mnt_mounts))) {
6774     + struct mount *p, *tmp;
6775     + list_for_each_entry_safe(p, tmp, &mnt->mnt_mounts, mnt_child) {
6776     + umount_mnt(p);
6777     + }
6778     + }
6779     unlock_mount_hash();
6780    
6781     if (likely(!(mnt->mnt.mnt_flags & MNT_INTERNAL))) {
6782     @@ -1319,49 +1347,63 @@ static inline void namespace_lock(void)
6783     down_write(&namespace_sem);
6784     }
6785    
6786     +enum umount_tree_flags {
6787     + UMOUNT_SYNC = 1,
6788     + UMOUNT_PROPAGATE = 2,
6789     + UMOUNT_CONNECTED = 4,
6790     +};
6791     /*
6792     * mount_lock must be held
6793     * namespace_sem must be held for write
6794     - * how = 0 => just this tree, don't propagate
6795     - * how = 1 => propagate; we know that nobody else has reference to any victims
6796     - * how = 2 => lazy umount
6797     */
6798     -void umount_tree(struct mount *mnt, int how)
6799     +static void umount_tree(struct mount *mnt, enum umount_tree_flags how)
6800     {
6801     - HLIST_HEAD(tmp_list);
6802     + LIST_HEAD(tmp_list);
6803     struct mount *p;
6804    
6805     + if (how & UMOUNT_PROPAGATE)
6806     + propagate_mount_unlock(mnt);
6807     +
6808     + /* Gather the mounts to umount */
6809     for (p = mnt; p; p = next_mnt(p, mnt)) {
6810     - hlist_del_init_rcu(&p->mnt_hash);
6811     - hlist_add_head(&p->mnt_hash, &tmp_list);
6812     + p->mnt.mnt_flags |= MNT_UMOUNT;
6813     + list_move(&p->mnt_list, &tmp_list);
6814     }
6815    
6816     - hlist_for_each_entry(p, &tmp_list, mnt_hash)
6817     + /* Hide the mounts from mnt_mounts */
6818     + list_for_each_entry(p, &tmp_list, mnt_list) {
6819     list_del_init(&p->mnt_child);
6820     + }
6821    
6822     - if (how)
6823     + /* Add propogated mounts to the tmp_list */
6824     + if (how & UMOUNT_PROPAGATE)
6825     propagate_umount(&tmp_list);
6826    
6827     - while (!hlist_empty(&tmp_list)) {
6828     - p = hlist_entry(tmp_list.first, struct mount, mnt_hash);
6829     - hlist_del_init_rcu(&p->mnt_hash);
6830     + while (!list_empty(&tmp_list)) {
6831     + bool disconnect;
6832     + p = list_first_entry(&tmp_list, struct mount, mnt_list);
6833     list_del_init(&p->mnt_expire);
6834     list_del_init(&p->mnt_list);
6835     __touch_mnt_namespace(p->mnt_ns);
6836     p->mnt_ns = NULL;
6837     - if (how < 2)
6838     + if (how & UMOUNT_SYNC)
6839     p->mnt.mnt_flags |= MNT_SYNC_UMOUNT;
6840    
6841     - pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt, &unmounted);
6842     + disconnect = !(((how & UMOUNT_CONNECTED) &&
6843     + mnt_has_parent(p) &&
6844     + (p->mnt_parent->mnt.mnt_flags & MNT_UMOUNT)) ||
6845     + IS_MNT_LOCKED_AND_LAZY(p));
6846     +
6847     + pin_insert_group(&p->mnt_umount, &p->mnt_parent->mnt,
6848     + disconnect ? &unmounted : NULL);
6849     if (mnt_has_parent(p)) {
6850     - hlist_del_init(&p->mnt_mp_list);
6851     - put_mountpoint(p->mnt_mp);
6852     mnt_add_count(p->mnt_parent, -1);
6853     - /* old mountpoint will be dropped when we can do that */
6854     - p->mnt_ex_mountpoint = p->mnt_mountpoint;
6855     - p->mnt_mountpoint = p->mnt.mnt_root;
6856     - p->mnt_parent = p;
6857     - p->mnt_mp = NULL;
6858     + if (!disconnect) {
6859     + /* Don't forget about p */
6860     + list_add_tail(&p->mnt_child, &p->mnt_parent->mnt_mounts);
6861     + } else {
6862     + umount_mnt(p);
6863     + }
6864     }
6865     change_mnt_propagation(p, MS_PRIVATE);
6866     }
6867     @@ -1447,14 +1489,14 @@ static int do_umount(struct mount *mnt, int flags)
6868    
6869     if (flags & MNT_DETACH) {
6870     if (!list_empty(&mnt->mnt_list))
6871     - umount_tree(mnt, 2);
6872     + umount_tree(mnt, UMOUNT_PROPAGATE);
6873     retval = 0;
6874     } else {
6875     shrink_submounts(mnt);
6876     retval = -EBUSY;
6877     if (!propagate_mount_busy(mnt, 2)) {
6878     if (!list_empty(&mnt->mnt_list))
6879     - umount_tree(mnt, 1);
6880     + umount_tree(mnt, UMOUNT_PROPAGATE|UMOUNT_SYNC);
6881     retval = 0;
6882     }
6883     }
6884     @@ -1480,13 +1522,20 @@ void __detach_mounts(struct dentry *dentry)
6885    
6886     namespace_lock();
6887     mp = lookup_mountpoint(dentry);
6888     - if (!mp)
6889     + if (IS_ERR_OR_NULL(mp))
6890     goto out_unlock;
6891    
6892     lock_mount_hash();
6893     while (!hlist_empty(&mp->m_list)) {
6894     mnt = hlist_entry(mp->m_list.first, struct mount, mnt_mp_list);
6895     - umount_tree(mnt, 2);
6896     + if (mnt->mnt.mnt_flags & MNT_UMOUNT) {
6897     + struct mount *p, *tmp;
6898     + list_for_each_entry_safe(p, tmp, &mnt->mnt_mounts, mnt_child) {
6899     + hlist_add_head(&p->mnt_umount.s_list, &unmounted);
6900     + umount_mnt(p);
6901     + }
6902     + }
6903     + else umount_tree(mnt, UMOUNT_CONNECTED);
6904     }
6905     unlock_mount_hash();
6906     put_mountpoint(mp);
6907     @@ -1648,7 +1697,7 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
6908     out:
6909     if (res) {
6910     lock_mount_hash();
6911     - umount_tree(res, 0);
6912     + umount_tree(res, UMOUNT_SYNC);
6913     unlock_mount_hash();
6914     }
6915     return q;
6916     @@ -1672,7 +1721,7 @@ void drop_collected_mounts(struct vfsmount *mnt)
6917     {
6918     namespace_lock();
6919     lock_mount_hash();
6920     - umount_tree(real_mount(mnt), 0);
6921     + umount_tree(real_mount(mnt), UMOUNT_SYNC);
6922     unlock_mount_hash();
6923     namespace_unlock();
6924     }
6925     @@ -1855,7 +1904,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
6926     out_cleanup_ids:
6927     while (!hlist_empty(&tree_list)) {
6928     child = hlist_entry(tree_list.first, struct mount, mnt_hash);
6929     - umount_tree(child, 0);
6930     + umount_tree(child, UMOUNT_SYNC);
6931     }
6932     unlock_mount_hash();
6933     cleanup_group_ids(source_mnt, NULL);
6934     @@ -2035,7 +2084,7 @@ static int do_loopback(struct path *path, const char *old_name,
6935     err = graft_tree(mnt, parent, mp);
6936     if (err) {
6937     lock_mount_hash();
6938     - umount_tree(mnt, 0);
6939     + umount_tree(mnt, UMOUNT_SYNC);
6940     unlock_mount_hash();
6941     }
6942     out2:
6943     @@ -2406,7 +2455,7 @@ void mark_mounts_for_expiry(struct list_head *mounts)
6944     while (!list_empty(&graveyard)) {
6945     mnt = list_first_entry(&graveyard, struct mount, mnt_expire);
6946     touch_mnt_namespace(mnt->mnt_ns);
6947     - umount_tree(mnt, 1);
6948     + umount_tree(mnt, UMOUNT_PROPAGATE|UMOUNT_SYNC);
6949     }
6950     unlock_mount_hash();
6951     namespace_unlock();
6952     @@ -2477,7 +2526,7 @@ static void shrink_submounts(struct mount *mnt)
6953     m = list_first_entry(&graveyard, struct mount,
6954     mnt_expire);
6955     touch_mnt_namespace(m->mnt_ns);
6956     - umount_tree(m, 1);
6957     + umount_tree(m, UMOUNT_PROPAGATE|UMOUNT_SYNC);
6958     }
6959     }
6960     }
6961     diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
6962     index 351be9205bf8..8d129bb7355a 100644
6963     --- a/fs/nfs/callback.c
6964     +++ b/fs/nfs/callback.c
6965     @@ -128,7 +128,7 @@ nfs41_callback_svc(void *vrqstp)
6966     if (try_to_freeze())
6967     continue;
6968    
6969     - prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_UNINTERRUPTIBLE);
6970     + prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_INTERRUPTIBLE);
6971     spin_lock_bh(&serv->sv_cb_lock);
6972     if (!list_empty(&serv->sv_cb_list)) {
6973     req = list_first_entry(&serv->sv_cb_list,
6974     @@ -142,10 +142,10 @@ nfs41_callback_svc(void *vrqstp)
6975     error);
6976     } else {
6977     spin_unlock_bh(&serv->sv_cb_lock);
6978     - /* schedule_timeout to game the hung task watchdog */
6979     - schedule_timeout(60 * HZ);
6980     + schedule();
6981     finish_wait(&serv->sv_cb_waitq, &wq);
6982     }
6983     + flush_signals(current);
6984     }
6985     return 0;
6986     }
6987     diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
6988     index e907c8cf732e..ab21ef16a11a 100644
6989     --- a/fs/nfs/direct.c
6990     +++ b/fs/nfs/direct.c
6991     @@ -129,22 +129,25 @@ nfs_direct_good_bytes(struct nfs_direct_req *dreq, struct nfs_pgio_header *hdr)
6992     int i;
6993     ssize_t count;
6994    
6995     - WARN_ON_ONCE(hdr->pgio_mirror_idx >= dreq->mirror_count);
6996     -
6997     - count = dreq->mirrors[hdr->pgio_mirror_idx].count;
6998     - if (count + dreq->io_start < hdr->io_start + hdr->good_bytes) {
6999     - count = hdr->io_start + hdr->good_bytes - dreq->io_start;
7000     - dreq->mirrors[hdr->pgio_mirror_idx].count = count;
7001     - }
7002     -
7003     - /* update the dreq->count by finding the minimum agreed count from all
7004     - * mirrors */
7005     - count = dreq->mirrors[0].count;
7006     + if (dreq->mirror_count == 1) {
7007     + dreq->mirrors[hdr->pgio_mirror_idx].count += hdr->good_bytes;
7008     + dreq->count += hdr->good_bytes;
7009     + } else {
7010     + /* mirrored writes */
7011     + count = dreq->mirrors[hdr->pgio_mirror_idx].count;
7012     + if (count + dreq->io_start < hdr->io_start + hdr->good_bytes) {
7013     + count = hdr->io_start + hdr->good_bytes - dreq->io_start;
7014     + dreq->mirrors[hdr->pgio_mirror_idx].count = count;
7015     + }
7016     + /* update the dreq->count by finding the minimum agreed count from all
7017     + * mirrors */
7018     + count = dreq->mirrors[0].count;
7019    
7020     - for (i = 1; i < dreq->mirror_count; i++)
7021     - count = min(count, dreq->mirrors[i].count);
7022     + for (i = 1; i < dreq->mirror_count; i++)
7023     + count = min(count, dreq->mirrors[i].count);
7024    
7025     - dreq->count = count;
7026     + dreq->count = count;
7027     + }
7028     }
7029    
7030     /*
7031     diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
7032     index 5c399ec41079..d494ea2d66a9 100644
7033     --- a/fs/nfs/nfs4xdr.c
7034     +++ b/fs/nfs/nfs4xdr.c
7035     @@ -7365,6 +7365,11 @@ nfs4_stat_to_errno(int stat)
7036     .p_name = #proc, \
7037     }
7038    
7039     +#define STUB(proc) \
7040     +[NFSPROC4_CLNT_##proc] = { \
7041     + .p_name = #proc, \
7042     +}
7043     +
7044     struct rpc_procinfo nfs4_procedures[] = {
7045     PROC(READ, enc_read, dec_read),
7046     PROC(WRITE, enc_write, dec_write),
7047     @@ -7417,6 +7422,7 @@ struct rpc_procinfo nfs4_procedures[] = {
7048     PROC(SECINFO_NO_NAME, enc_secinfo_no_name, dec_secinfo_no_name),
7049     PROC(TEST_STATEID, enc_test_stateid, dec_test_stateid),
7050     PROC(FREE_STATEID, enc_free_stateid, dec_free_stateid),
7051     + STUB(GETDEVICELIST),
7052     PROC(BIND_CONN_TO_SESSION,
7053     enc_bind_conn_to_session, dec_bind_conn_to_session),
7054     PROC(DESTROY_CLIENTID, enc_destroy_clientid, dec_destroy_clientid),
7055     diff --git a/fs/nfs/read.c b/fs/nfs/read.c
7056     index 568ecf0a880f..848d8b1db4ce 100644
7057     --- a/fs/nfs/read.c
7058     +++ b/fs/nfs/read.c
7059     @@ -284,7 +284,7 @@ int nfs_readpage(struct file *file, struct page *page)
7060     dprintk("NFS: nfs_readpage (%p %ld@%lu)\n",
7061     page, PAGE_CACHE_SIZE, page_file_index(page));
7062     nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
7063     - nfs_inc_stats(inode, NFSIOS_READPAGES);
7064     + nfs_add_stats(inode, NFSIOS_READPAGES, 1);
7065    
7066     /*
7067     * Try to flush any pending writes to the file..
7068     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
7069     index 849ed784d6ac..41b3f1096d69 100644
7070     --- a/fs/nfs/write.c
7071     +++ b/fs/nfs/write.c
7072     @@ -580,7 +580,7 @@ static int nfs_do_writepage(struct page *page, struct writeback_control *wbc, st
7073     int ret;
7074    
7075     nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGE);
7076     - nfs_inc_stats(inode, NFSIOS_WRITEPAGES);
7077     + nfs_add_stats(inode, NFSIOS_WRITEPAGES, 1);
7078    
7079     nfs_pageio_cond_complete(pgio, page_file_index(page));
7080     ret = nfs_page_async_flush(pgio, page, wbc->sync_mode == WB_SYNC_NONE);
7081     diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
7082     index 92b9d97aff4f..5416968b3fb3 100644
7083     --- a/fs/nfsd/nfs4proc.c
7084     +++ b/fs/nfsd/nfs4proc.c
7085     @@ -1030,6 +1030,8 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7086     dprintk("NFSD: nfsd4_fallocate: couldn't process stateid!\n");
7087     return status;
7088     }
7089     + if (!file)
7090     + return nfserr_bad_stateid;
7091    
7092     status = nfsd4_vfs_fallocate(rqstp, &cstate->current_fh, file,
7093     fallocate->falloc_offset,
7094     @@ -1069,6 +1071,8 @@ nfsd4_seek(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
7095     dprintk("NFSD: nfsd4_seek: couldn't process stateid!\n");
7096     return status;
7097     }
7098     + if (!file)
7099     + return nfserr_bad_stateid;
7100    
7101     switch (seek->seek_whence) {
7102     case NFS4_CONTENT_DATA:
7103     diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
7104     index 8ba1d888f1e6..ee1cccdb083a 100644
7105     --- a/fs/nfsd/nfs4state.c
7106     +++ b/fs/nfsd/nfs4state.c
7107     @@ -1139,7 +1139,7 @@ hash_sessionid(struct nfs4_sessionid *sessionid)
7108     return sid->sequence % SESSION_HASH_SIZE;
7109     }
7110    
7111     -#ifdef NFSD_DEBUG
7112     +#ifdef CONFIG_SUNRPC_DEBUG
7113     static inline void
7114     dump_sessionid(const char *fn, struct nfs4_sessionid *sessionid)
7115     {
7116     diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
7117     index 5fb7e78169a6..5b33ce1db616 100644
7118     --- a/fs/nfsd/nfs4xdr.c
7119     +++ b/fs/nfsd/nfs4xdr.c
7120     @@ -3422,6 +3422,7 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
7121     unsigned long maxcount;
7122     struct xdr_stream *xdr = &resp->xdr;
7123     struct file *file = read->rd_filp;
7124     + struct svc_fh *fhp = read->rd_fhp;
7125     int starting_len = xdr->buf->len;
7126     struct raparms *ra;
7127     __be32 *p;
7128     @@ -3445,12 +3446,15 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
7129     maxcount = min_t(unsigned long, maxcount, (xdr->buf->buflen - xdr->buf->len));
7130     maxcount = min_t(unsigned long, maxcount, read->rd_length);
7131    
7132     - if (!read->rd_filp) {
7133     + if (read->rd_filp)
7134     + err = nfsd_permission(resp->rqstp, fhp->fh_export,
7135     + fhp->fh_dentry,
7136     + NFSD_MAY_READ|NFSD_MAY_OWNER_OVERRIDE);
7137     + else
7138     err = nfsd_get_tmp_read_open(resp->rqstp, read->rd_fhp,
7139     &file, &ra);
7140     - if (err)
7141     - goto err_truncate;
7142     - }
7143     + if (err)
7144     + goto err_truncate;
7145    
7146     if (file->f_op->splice_read && test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags))
7147     err = nfsd4_encode_splice_read(resp, read, file, maxcount);
7148     diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
7149     index aa47d75ddb26..9690cb4dd588 100644
7150     --- a/fs/nfsd/nfsctl.c
7151     +++ b/fs/nfsd/nfsctl.c
7152     @@ -1250,15 +1250,15 @@ static int __init init_nfsd(void)
7153     int retval;
7154     printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
7155    
7156     - retval = register_cld_notifier();
7157     - if (retval)
7158     - return retval;
7159     retval = register_pernet_subsys(&nfsd_net_ops);
7160     if (retval < 0)
7161     - goto out_unregister_notifier;
7162     - retval = nfsd4_init_slabs();
7163     + return retval;
7164     + retval = register_cld_notifier();
7165     if (retval)
7166     goto out_unregister_pernet;
7167     + retval = nfsd4_init_slabs();
7168     + if (retval)
7169     + goto out_unregister_notifier;
7170     retval = nfsd4_init_pnfs();
7171     if (retval)
7172     goto out_free_slabs;
7173     @@ -1290,10 +1290,10 @@ out_exit_pnfs:
7174     nfsd4_exit_pnfs();
7175     out_free_slabs:
7176     nfsd4_free_slabs();
7177     -out_unregister_pernet:
7178     - unregister_pernet_subsys(&nfsd_net_ops);
7179     out_unregister_notifier:
7180     unregister_cld_notifier();
7181     +out_unregister_pernet:
7182     + unregister_pernet_subsys(&nfsd_net_ops);
7183     return retval;
7184     }
7185    
7186     @@ -1308,8 +1308,8 @@ static void __exit exit_nfsd(void)
7187     nfsd4_exit_pnfs();
7188     nfsd_fault_inject_cleanup();
7189     unregister_filesystem(&nfsd_fs_type);
7190     - unregister_pernet_subsys(&nfsd_net_ops);
7191     unregister_cld_notifier();
7192     + unregister_pernet_subsys(&nfsd_net_ops);
7193     }
7194    
7195     MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
7196     diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
7197     index 565c4da1a9eb..cf980523898b 100644
7198     --- a/fs/nfsd/nfsd.h
7199     +++ b/fs/nfsd/nfsd.h
7200     @@ -24,7 +24,7 @@
7201     #include "export.h"
7202    
7203     #undef ifdebug
7204     -#ifdef NFSD_DEBUG
7205     +#ifdef CONFIG_SUNRPC_DEBUG
7206     # define ifdebug(flag) if (nfsd_debug & NFSDDBG_##flag)
7207     #else
7208     # define ifdebug(flag) if (0)
7209     diff --git a/fs/open.c b/fs/open.c
7210     index 33f9cbf2610b..44a3be145bfe 100644
7211     --- a/fs/open.c
7212     +++ b/fs/open.c
7213     @@ -570,6 +570,7 @@ static int chown_common(struct path *path, uid_t user, gid_t group)
7214     uid = make_kuid(current_user_ns(), user);
7215     gid = make_kgid(current_user_ns(), group);
7216    
7217     +retry_deleg:
7218     newattrs.ia_valid = ATTR_CTIME;
7219     if (user != (uid_t) -1) {
7220     if (!uid_valid(uid))
7221     @@ -586,7 +587,6 @@ static int chown_common(struct path *path, uid_t user, gid_t group)
7222     if (!S_ISDIR(inode->i_mode))
7223     newattrs.ia_valid |=
7224     ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV;
7225     -retry_deleg:
7226     mutex_lock(&inode->i_mutex);
7227     error = security_path_chown(path, uid, gid);
7228     if (!error)
7229     diff --git a/fs/pnode.c b/fs/pnode.c
7230     index 260ac8f898a4..6367e1e435c6 100644
7231     --- a/fs/pnode.c
7232     +++ b/fs/pnode.c
7233     @@ -362,6 +362,46 @@ int propagate_mount_busy(struct mount *mnt, int refcnt)
7234     }
7235    
7236     /*
7237     + * Clear MNT_LOCKED when it can be shown to be safe.
7238     + *
7239     + * mount_lock lock must be held for write
7240     + */
7241     +void propagate_mount_unlock(struct mount *mnt)
7242     +{
7243     + struct mount *parent = mnt->mnt_parent;
7244     + struct mount *m, *child;
7245     +
7246     + BUG_ON(parent == mnt);
7247     +
7248     + for (m = propagation_next(parent, parent); m;
7249     + m = propagation_next(m, parent)) {
7250     + child = __lookup_mnt_last(&m->mnt, mnt->mnt_mountpoint);
7251     + if (child)
7252     + child->mnt.mnt_flags &= ~MNT_LOCKED;
7253     + }
7254     +}
7255     +
7256     +/*
7257     + * Mark all mounts that the MNT_LOCKED logic will allow to be unmounted.
7258     + */
7259     +static void mark_umount_candidates(struct mount *mnt)
7260     +{
7261     + struct mount *parent = mnt->mnt_parent;
7262     + struct mount *m;
7263     +
7264     + BUG_ON(parent == mnt);
7265     +
7266     + for (m = propagation_next(parent, parent); m;
7267     + m = propagation_next(m, parent)) {
7268     + struct mount *child = __lookup_mnt_last(&m->mnt,
7269     + mnt->mnt_mountpoint);
7270     + if (child && (!IS_MNT_LOCKED(child) || IS_MNT_MARKED(m))) {
7271     + SET_MNT_MARK(child);
7272     + }
7273     + }
7274     +}
7275     +
7276     +/*
7277     * NOTE: unmounting 'mnt' naturally propagates to all other mounts its
7278     * parent propagates to.
7279     */
7280     @@ -378,13 +418,16 @@ static void __propagate_umount(struct mount *mnt)
7281     struct mount *child = __lookup_mnt_last(&m->mnt,
7282     mnt->mnt_mountpoint);
7283     /*
7284     - * umount the child only if the child has no
7285     - * other children
7286     + * umount the child only if the child has no children
7287     + * and the child is marked safe to unmount.
7288     */
7289     - if (child && list_empty(&child->mnt_mounts)) {
7290     + if (!child || !IS_MNT_MARKED(child))
7291     + continue;
7292     + CLEAR_MNT_MARK(child);
7293     + if (list_empty(&child->mnt_mounts)) {
7294     list_del_init(&child->mnt_child);
7295     - hlist_del_init_rcu(&child->mnt_hash);
7296     - hlist_add_before_rcu(&child->mnt_hash, &mnt->mnt_hash);
7297     + child->mnt.mnt_flags |= MNT_UMOUNT;
7298     + list_move_tail(&child->mnt_list, &mnt->mnt_list);
7299     }
7300     }
7301     }
7302     @@ -396,11 +439,14 @@ static void __propagate_umount(struct mount *mnt)
7303     *
7304     * vfsmount lock must be held for write
7305     */
7306     -int propagate_umount(struct hlist_head *list)
7307     +int propagate_umount(struct list_head *list)
7308     {
7309     struct mount *mnt;
7310    
7311     - hlist_for_each_entry(mnt, list, mnt_hash)
7312     + list_for_each_entry_reverse(mnt, list, mnt_list)
7313     + mark_umount_candidates(mnt);
7314     +
7315     + list_for_each_entry(mnt, list, mnt_list)
7316     __propagate_umount(mnt);
7317     return 0;
7318     }
7319     diff --git a/fs/pnode.h b/fs/pnode.h
7320     index 4a246358b031..7114ce6e6b9e 100644
7321     --- a/fs/pnode.h
7322     +++ b/fs/pnode.h
7323     @@ -19,6 +19,9 @@
7324     #define IS_MNT_MARKED(m) ((m)->mnt.mnt_flags & MNT_MARKED)
7325     #define SET_MNT_MARK(m) ((m)->mnt.mnt_flags |= MNT_MARKED)
7326     #define CLEAR_MNT_MARK(m) ((m)->mnt.mnt_flags &= ~MNT_MARKED)
7327     +#define IS_MNT_LOCKED(m) ((m)->mnt.mnt_flags & MNT_LOCKED)
7328     +#define IS_MNT_LOCKED_AND_LAZY(m) \
7329     + (((m)->mnt.mnt_flags & (MNT_LOCKED|MNT_SYNC_UMOUNT)) == MNT_LOCKED)
7330    
7331     #define CL_EXPIRE 0x01
7332     #define CL_SLAVE 0x02
7333     @@ -40,14 +43,14 @@ static inline void set_mnt_shared(struct mount *mnt)
7334     void change_mnt_propagation(struct mount *, int);
7335     int propagate_mnt(struct mount *, struct mountpoint *, struct mount *,
7336     struct hlist_head *);
7337     -int propagate_umount(struct hlist_head *);
7338     +int propagate_umount(struct list_head *);
7339     int propagate_mount_busy(struct mount *, int);
7340     +void propagate_mount_unlock(struct mount *);
7341     void mnt_release_group_id(struct mount *);
7342     int get_dominating_id(struct mount *mnt, const struct path *root);
7343     unsigned int mnt_get_count(struct mount *mnt);
7344     void mnt_set_mountpoint(struct mount *, struct mountpoint *,
7345     struct mount *);
7346     -void umount_tree(struct mount *, int);
7347     struct mount *copy_tree(struct mount *, struct dentry *, int);
7348     bool is_path_reachable(struct mount *, struct dentry *,
7349     const struct path *root);
7350     diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
7351     index b034f1068dfe..0d5852557f1c 100644
7352     --- a/include/acpi/actypes.h
7353     +++ b/include/acpi/actypes.h
7354     @@ -199,9 +199,29 @@ typedef int s32;
7355     typedef s32 acpi_native_int;
7356    
7357     typedef u32 acpi_size;
7358     +
7359     +#ifdef ACPI_32BIT_PHYSICAL_ADDRESS
7360     +
7361     +/*
7362     + * OSPMs can define this to shrink the size of the structures for 32-bit
7363     + * none PAE environment. ASL compiler may always define this to generate
7364     + * 32-bit OSPM compliant tables.
7365     + */
7366     typedef u32 acpi_io_address;
7367     typedef u32 acpi_physical_address;
7368    
7369     +#else /* ACPI_32BIT_PHYSICAL_ADDRESS */
7370     +
7371     +/*
7372     + * It is reported that, after some calculations, the physical addresses can
7373     + * wrap over the 32-bit boundary on 32-bit PAE environment.
7374     + * https://bugzilla.kernel.org/show_bug.cgi?id=87971
7375     + */
7376     +typedef u64 acpi_io_address;
7377     +typedef u64 acpi_physical_address;
7378     +
7379     +#endif /* ACPI_32BIT_PHYSICAL_ADDRESS */
7380     +
7381     #define ACPI_MAX_PTR ACPI_UINT32_MAX
7382     #define ACPI_SIZE_MAX ACPI_UINT32_MAX
7383    
7384     @@ -736,10 +756,6 @@ typedef u32 acpi_event_status;
7385     #define ACPI_GPE_ENABLE 0
7386     #define ACPI_GPE_DISABLE 1
7387     #define ACPI_GPE_CONDITIONAL_ENABLE 2
7388     -#define ACPI_GPE_SAVE_MASK 4
7389     -
7390     -#define ACPI_GPE_ENABLE_SAVE (ACPI_GPE_ENABLE | ACPI_GPE_SAVE_MASK)
7391     -#define ACPI_GPE_DISABLE_SAVE (ACPI_GPE_DISABLE | ACPI_GPE_SAVE_MASK)
7392    
7393     /*
7394     * GPE info flags - Per GPE
7395     diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h
7396     index ad74dc51d5b7..ecdf9405dd3a 100644
7397     --- a/include/acpi/platform/acenv.h
7398     +++ b/include/acpi/platform/acenv.h
7399     @@ -76,6 +76,7 @@
7400     #define ACPI_LARGE_NAMESPACE_NODE
7401     #define ACPI_DATA_TABLE_DISASSEMBLY
7402     #define ACPI_SINGLE_THREADED
7403     +#define ACPI_32BIT_PHYSICAL_ADDRESS
7404     #endif
7405    
7406     /* acpi_exec configuration. Multithreaded with full AML debugger */
7407     diff --git a/include/dt-bindings/clock/tegra124-car-common.h b/include/dt-bindings/clock/tegra124-car-common.h
7408     index ae2eb17a1658..a2156090563f 100644
7409     --- a/include/dt-bindings/clock/tegra124-car-common.h
7410     +++ b/include/dt-bindings/clock/tegra124-car-common.h
7411     @@ -297,7 +297,7 @@
7412     #define TEGRA124_CLK_PLL_C4 270
7413     #define TEGRA124_CLK_PLL_DP 271
7414     #define TEGRA124_CLK_PLL_E_MUX 272
7415     -#define TEGRA124_CLK_PLLD_DSI 273
7416     +#define TEGRA124_CLK_PLL_D_DSI_OUT 273
7417     /* 274 */
7418     /* 275 */
7419     /* 276 */
7420     diff --git a/include/linux/bpf.h b/include/linux/bpf.h
7421     index bbfceb756452..33b52fb0e20f 100644
7422     --- a/include/linux/bpf.h
7423     +++ b/include/linux/bpf.h
7424     @@ -48,7 +48,7 @@ struct bpf_map *bpf_map_get(struct fd f);
7425    
7426     /* function argument constraints */
7427     enum bpf_arg_type {
7428     - ARG_ANYTHING = 0, /* any argument is ok */
7429     + ARG_DONTCARE = 0, /* unused argument in helper function */
7430    
7431     /* the following constraints used to prototype
7432     * bpf_map_lookup/update/delete_elem() functions
7433     @@ -62,6 +62,8 @@ enum bpf_arg_type {
7434     */
7435     ARG_PTR_TO_STACK, /* any pointer to eBPF program stack */
7436     ARG_CONST_STACK_SIZE, /* number of bytes accessed from stack */
7437     +
7438     + ARG_ANYTHING, /* any (initialized) argument is ok */
7439     };
7440    
7441     /* type of values returned from helper functions */
7442     diff --git a/include/linux/mount.h b/include/linux/mount.h
7443     index c2c561dc0114..564beeec5d83 100644
7444     --- a/include/linux/mount.h
7445     +++ b/include/linux/mount.h
7446     @@ -61,6 +61,7 @@ struct mnt_namespace;
7447     #define MNT_DOOMED 0x1000000
7448     #define MNT_SYNC_UMOUNT 0x2000000
7449     #define MNT_MARKED 0x4000000
7450     +#define MNT_UMOUNT 0x8000000
7451    
7452     struct vfsmount {
7453     struct dentry *mnt_root; /* root of the mounted tree */
7454     diff --git a/include/linux/sched.h b/include/linux/sched.h
7455     index a419b65770d6..51348f77e431 100644
7456     --- a/include/linux/sched.h
7457     +++ b/include/linux/sched.h
7458     @@ -176,6 +176,14 @@ extern void get_iowait_load(unsigned long *nr_waiters, unsigned long *load);
7459     extern void calc_global_load(unsigned long ticks);
7460     extern void update_cpu_load_nohz(void);
7461    
7462     +/* Notifier for when a task gets migrated to a new CPU */
7463     +struct task_migration_notifier {
7464     + struct task_struct *task;
7465     + int from_cpu;
7466     + int to_cpu;
7467     +};
7468     +extern void register_task_migration_notifier(struct notifier_block *n);
7469     +
7470     extern unsigned long get_parent_ip(unsigned long addr);
7471    
7472     extern void dump_cpu_task(int cpu);
7473     diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
7474     index f54d6659713a..bdccc4b46f57 100644
7475     --- a/include/linux/skbuff.h
7476     +++ b/include/linux/skbuff.h
7477     @@ -769,6 +769,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
7478    
7479     struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
7480     int node);
7481     +struct sk_buff *__build_skb(void *data, unsigned int frag_size);
7482     struct sk_buff *build_skb(void *data, unsigned int frag_size);
7483     static inline struct sk_buff *alloc_skb(unsigned int size,
7484     gfp_t priority)
7485     @@ -3013,6 +3014,18 @@ static inline bool __skb_checksum_validate_needed(struct sk_buff *skb,
7486     */
7487     #define CHECKSUM_BREAK 76
7488    
7489     +/* Unset checksum-complete
7490     + *
7491     + * Unset checksum complete can be done when packet is being modified
7492     + * (uncompressed for instance) and checksum-complete value is
7493     + * invalidated.
7494     + */
7495     +static inline void skb_checksum_complete_unset(struct sk_buff *skb)
7496     +{
7497     + if (skb->ip_summed == CHECKSUM_COMPLETE)
7498     + skb->ip_summed = CHECKSUM_NONE;
7499     +}
7500     +
7501     /* Validate (init) checksum based on checksum complete.
7502     *
7503     * Return values:
7504     diff --git a/include/linux/usb.h b/include/linux/usb.h
7505     index 7ee1b5c3b4cb..447fe29b55b4 100644
7506     --- a/include/linux/usb.h
7507     +++ b/include/linux/usb.h
7508     @@ -205,6 +205,32 @@ void usb_put_intf(struct usb_interface *intf);
7509     #define USB_MAXINTERFACES 32
7510     #define USB_MAXIADS (USB_MAXINTERFACES/2)
7511    
7512     +/*
7513     + * USB Resume Timer: Every Host controller driver should drive the resume
7514     + * signalling on the bus for the amount of time defined by this macro.
7515     + *
7516     + * That way we will have a 'stable' behavior among all HCDs supported by Linux.
7517     + *
7518     + * Note that the USB Specification states we should drive resume for *at least*
7519     + * 20 ms, but it doesn't give an upper bound. This creates two possible
7520     + * situations which we want to avoid:
7521     + *
7522     + * (a) sometimes an msleep(20) might expire slightly before 20 ms, which causes
7523     + * us to fail USB Electrical Tests, thus failing Certification
7524     + *
7525     + * (b) Some (many) devices actually need more than 20 ms of resume signalling,
7526     + * and while we can argue that's against the USB Specification, we don't have
7527     + * control over which devices a certification laboratory will be using for
7528     + * certification. If CertLab uses a device which was tested against Windows and
7529     + * that happens to have relaxed resume signalling rules, we might fall into
7530     + * situations where we fail interoperability and electrical tests.
7531     + *
7532     + * In order to avoid both conditions, we're using a 40 ms resume timeout, which
7533     + * should cope with both LPJ calibration errors and devices not following every
7534     + * detail of the USB Specification.
7535     + */
7536     +#define USB_RESUME_TIMEOUT 40 /* ms */
7537     +
7538     /**
7539     * struct usb_interface_cache - long-term representation of a device interface
7540     * @num_altsetting: number of altsettings defined.
7541     diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h
7542     index d3583d3ee193..dd0f3abde75d 100644
7543     --- a/include/target/iscsi/iscsi_target_core.h
7544     +++ b/include/target/iscsi/iscsi_target_core.h
7545     @@ -602,6 +602,11 @@ struct iscsi_conn {
7546     struct iscsi_session *sess;
7547     /* Pointer to thread_set in use for this conn's threads */
7548     struct iscsi_thread_set *thread_set;
7549     + int bitmap_id;
7550     + int rx_thread_active;
7551     + struct task_struct *rx_thread;
7552     + int tx_thread_active;
7553     + struct task_struct *tx_thread;
7554     /* list_head for session connection list */
7555     struct list_head conn_list;
7556     } ____cacheline_aligned;
7557     @@ -871,10 +876,12 @@ struct iscsit_global {
7558     /* Unique identifier used for the authentication daemon */
7559     u32 auth_id;
7560     u32 inactive_ts;
7561     +#define ISCSIT_BITMAP_BITS 262144
7562     /* Thread Set bitmap count */
7563     int ts_bitmap_count;
7564     /* Thread Set bitmap pointer */
7565     unsigned long *ts_bitmap;
7566     + spinlock_t ts_bitmap_lock;
7567     /* Used for iSCSI discovery session authentication */
7568     struct iscsi_node_acl discovery_acl;
7569     struct iscsi_portal_group *discovery_tpg;
7570     diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
7571     index 672150b6aaf5..985ca4c907fe 100644
7572     --- a/include/target/target_core_base.h
7573     +++ b/include/target/target_core_base.h
7574     @@ -524,7 +524,7 @@ struct se_cmd {
7575     sense_reason_t (*execute_cmd)(struct se_cmd *);
7576     sense_reason_t (*execute_rw)(struct se_cmd *, struct scatterlist *,
7577     u32, enum dma_data_direction);
7578     - sense_reason_t (*transport_complete_callback)(struct se_cmd *);
7579     + sense_reason_t (*transport_complete_callback)(struct se_cmd *, bool);
7580    
7581     unsigned char *t_task_cdb;
7582     unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE];
7583     diff --git a/include/uapi/linux/nfsd/debug.h b/include/uapi/linux/nfsd/debug.h
7584     index 0bf130a1c58d..28ec6c9c421a 100644
7585     --- a/include/uapi/linux/nfsd/debug.h
7586     +++ b/include/uapi/linux/nfsd/debug.h
7587     @@ -12,14 +12,6 @@
7588     #include <linux/sunrpc/debug.h>
7589    
7590     /*
7591     - * Enable debugging for nfsd.
7592     - * Requires RPC_DEBUG.
7593     - */
7594     -#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
7595     -# define NFSD_DEBUG 1
7596     -#endif
7597     -
7598     -/*
7599     * knfsd debug flags
7600     */
7601     #define NFSDDBG_SOCK 0x0001
7602     diff --git a/include/video/samsung_fimd.h b/include/video/samsung_fimd.h
7603     index a20e4a3a8b15..847a0a2b399c 100644
7604     --- a/include/video/samsung_fimd.h
7605     +++ b/include/video/samsung_fimd.h
7606     @@ -436,6 +436,12 @@
7607     #define BLENDCON_NEW_8BIT_ALPHA_VALUE (1 << 0)
7608     #define BLENDCON_NEW_4BIT_ALPHA_VALUE (0 << 0)
7609    
7610     +/* Display port clock control */
7611     +#define DP_MIE_CLKCON 0x27c
7612     +#define DP_MIE_CLK_DISABLE 0x0
7613     +#define DP_MIE_CLK_DP_ENABLE 0x2
7614     +#define DP_MIE_CLK_MIE_ENABLE 0x3
7615     +
7616     /* Notes on per-window bpp settings
7617     *
7618     * Value Win0 Win1 Win2 Win3 Win 4
7619     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
7620     index 36508e69e92a..5d8ea3d8a897 100644
7621     --- a/kernel/bpf/verifier.c
7622     +++ b/kernel/bpf/verifier.c
7623     @@ -755,7 +755,7 @@ static int check_func_arg(struct verifier_env *env, u32 regno,
7624     enum bpf_reg_type expected_type;
7625     int err = 0;
7626    
7627     - if (arg_type == ARG_ANYTHING)
7628     + if (arg_type == ARG_DONTCARE)
7629     return 0;
7630    
7631     if (reg->type == NOT_INIT) {
7632     @@ -763,6 +763,9 @@ static int check_func_arg(struct verifier_env *env, u32 regno,
7633     return -EACCES;
7634     }
7635    
7636     + if (arg_type == ARG_ANYTHING)
7637     + return 0;
7638     +
7639     if (arg_type == ARG_PTR_TO_STACK || arg_type == ARG_PTR_TO_MAP_KEY ||
7640     arg_type == ARG_PTR_TO_MAP_VALUE) {
7641     expected_type = PTR_TO_STACK;
7642     diff --git a/kernel/ptrace.c b/kernel/ptrace.c
7643     index 227fec36b12a..9a34bd80a745 100644
7644     --- a/kernel/ptrace.c
7645     +++ b/kernel/ptrace.c
7646     @@ -697,6 +697,8 @@ static int ptrace_peek_siginfo(struct task_struct *child,
7647     static int ptrace_resume(struct task_struct *child, long request,
7648     unsigned long data)
7649     {
7650     + bool need_siglock;
7651     +
7652     if (!valid_signal(data))
7653     return -EIO;
7654    
7655     @@ -724,8 +726,26 @@ static int ptrace_resume(struct task_struct *child, long request,
7656     user_disable_single_step(child);
7657     }
7658    
7659     + /*
7660     + * Change ->exit_code and ->state under siglock to avoid the race
7661     + * with wait_task_stopped() in between; a non-zero ->exit_code will
7662     + * wrongly look like another report from tracee.
7663     + *
7664     + * Note that we need siglock even if ->exit_code == data and/or this
7665     + * status was not reported yet, the new status must not be cleared by
7666     + * wait_task_stopped() after resume.
7667     + *
7668     + * If data == 0 we do not care if wait_task_stopped() reports the old
7669     + * status and clears the code too; this can't race with the tracee, it
7670     + * takes siglock after resume.
7671     + */
7672     + need_siglock = data && !thread_group_empty(current);
7673     + if (need_siglock)
7674     + spin_lock_irq(&child->sighand->siglock);
7675     child->exit_code = data;
7676     wake_up_state(child, __TASK_TRACED);
7677     + if (need_siglock)
7678     + spin_unlock_irq(&child->sighand->siglock);
7679    
7680     return 0;
7681     }
7682     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
7683     index 62671f53202a..3d5f6f6d14c2 100644
7684     --- a/kernel/sched/core.c
7685     +++ b/kernel/sched/core.c
7686     @@ -996,6 +996,13 @@ void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags)
7687     rq_clock_skip_update(rq, true);
7688     }
7689    
7690     +static ATOMIC_NOTIFIER_HEAD(task_migration_notifier);
7691     +
7692     +void register_task_migration_notifier(struct notifier_block *n)
7693     +{
7694     + atomic_notifier_chain_register(&task_migration_notifier, n);
7695     +}
7696     +
7697     #ifdef CONFIG_SMP
7698     void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
7699     {
7700     @@ -1026,10 +1033,18 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
7701     trace_sched_migrate_task(p, new_cpu);
7702    
7703     if (task_cpu(p) != new_cpu) {
7704     + struct task_migration_notifier tmn;
7705     +
7706     if (p->sched_class->migrate_task_rq)
7707     p->sched_class->migrate_task_rq(p, new_cpu);
7708     p->se.nr_migrations++;
7709     perf_sw_event_sched(PERF_COUNT_SW_CPU_MIGRATIONS, 1, 0);
7710     +
7711     + tmn.task = p;
7712     + tmn.from_cpu = task_cpu(p);
7713     + tmn.to_cpu = new_cpu;
7714     +
7715     + atomic_notifier_call_chain(&task_migration_notifier, 0, &tmn);
7716     }
7717    
7718     __set_task_cpu(p, new_cpu);
7719     diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
7720     index 3fa8fa6d9403..f670cbb17f5d 100644
7721     --- a/kernel/sched/deadline.c
7722     +++ b/kernel/sched/deadline.c
7723     @@ -514,7 +514,7 @@ static enum hrtimer_restart dl_task_timer(struct hrtimer *timer)
7724     unsigned long flags;
7725     struct rq *rq;
7726    
7727     - rq = task_rq_lock(current, &flags);
7728     + rq = task_rq_lock(p, &flags);
7729    
7730     /*
7731     * We need to take care of several possible races here:
7732     @@ -569,7 +569,7 @@ static enum hrtimer_restart dl_task_timer(struct hrtimer *timer)
7733     push_dl_task(rq);
7734     #endif
7735     unlock:
7736     - task_rq_unlock(rq, current, &flags);
7737     + task_rq_unlock(rq, p, &flags);
7738    
7739     return HRTIMER_NORESTART;
7740     }
7741     diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
7742     index 5040d44fe5a3..922048a0f7ea 100644
7743     --- a/kernel/trace/ring_buffer.c
7744     +++ b/kernel/trace/ring_buffer.c
7745     @@ -2679,7 +2679,7 @@ static DEFINE_PER_CPU(unsigned int, current_context);
7746    
7747     static __always_inline int trace_recursive_lock(void)
7748     {
7749     - unsigned int val = this_cpu_read(current_context);
7750     + unsigned int val = __this_cpu_read(current_context);
7751     int bit;
7752    
7753     if (in_interrupt()) {
7754     @@ -2696,18 +2696,17 @@ static __always_inline int trace_recursive_lock(void)
7755     return 1;
7756    
7757     val |= (1 << bit);
7758     - this_cpu_write(current_context, val);
7759     + __this_cpu_write(current_context, val);
7760    
7761     return 0;
7762     }
7763    
7764     static __always_inline void trace_recursive_unlock(void)
7765     {
7766     - unsigned int val = this_cpu_read(current_context);
7767     + unsigned int val = __this_cpu_read(current_context);
7768    
7769     - val--;
7770     - val &= this_cpu_read(current_context);
7771     - this_cpu_write(current_context, val);
7772     + val &= val & (val - 1);
7773     + __this_cpu_write(current_context, val);
7774     }
7775    
7776     #else
7777     diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
7778     index db54dda10ccc..a9c10a3cf122 100644
7779     --- a/kernel/trace/trace_events.c
7780     +++ b/kernel/trace/trace_events.c
7781     @@ -565,6 +565,7 @@ static int __ftrace_set_clr_event(struct trace_array *tr, const char *match,
7782     static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
7783     {
7784     char *event = NULL, *sub = NULL, *match;
7785     + int ret;
7786    
7787     /*
7788     * The buf format can be <subsystem>:<event-name>
7789     @@ -590,7 +591,13 @@ static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
7790     event = NULL;
7791     }
7792    
7793     - return __ftrace_set_clr_event(tr, match, sub, event, set);
7794     + ret = __ftrace_set_clr_event(tr, match, sub, event, set);
7795     +
7796     + /* Put back the colon to allow this to be called again */
7797     + if (buf)
7798     + *(buf - 1) = ':';
7799     +
7800     + return ret;
7801     }
7802    
7803     /**
7804     diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
7805     index 2d25ad1526bb..b6fce365ef27 100644
7806     --- a/kernel/trace/trace_functions_graph.c
7807     +++ b/kernel/trace/trace_functions_graph.c
7808     @@ -1309,15 +1309,19 @@ void graph_trace_open(struct trace_iterator *iter)
7809     {
7810     /* pid and depth on the last trace processed */
7811     struct fgraph_data *data;
7812     + gfp_t gfpflags;
7813     int cpu;
7814    
7815     iter->private = NULL;
7816    
7817     - data = kzalloc(sizeof(*data), GFP_KERNEL);
7818     + /* We can be called in atomic context via ftrace_dump() */
7819     + gfpflags = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL;
7820     +
7821     + data = kzalloc(sizeof(*data), gfpflags);
7822     if (!data)
7823     goto out_err;
7824    
7825     - data->cpu_data = alloc_percpu(struct fgraph_cpu_data);
7826     + data->cpu_data = alloc_percpu_gfp(struct fgraph_cpu_data, gfpflags);
7827     if (!data->cpu_data)
7828     goto out_err_free;
7829    
7830     diff --git a/lib/string.c b/lib/string.c
7831     index ce81aaec3839..a5792019193c 100644
7832     --- a/lib/string.c
7833     +++ b/lib/string.c
7834     @@ -607,7 +607,7 @@ EXPORT_SYMBOL(memset);
7835     void memzero_explicit(void *s, size_t count)
7836     {
7837     memset(s, 0, count);
7838     - OPTIMIZER_HIDE_VAR(s);
7839     + barrier();
7840     }
7841     EXPORT_SYMBOL(memzero_explicit);
7842    
7843     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
7844     index 6817b0350c71..956d4dbe001d 100644
7845     --- a/mm/huge_memory.c
7846     +++ b/mm/huge_memory.c
7847     @@ -2316,8 +2316,14 @@ static struct page
7848     struct vm_area_struct *vma, unsigned long address,
7849     int node)
7850     {
7851     + gfp_t flags;
7852     +
7853     VM_BUG_ON_PAGE(*hpage, *hpage);
7854    
7855     + /* Only allocate from the target node */
7856     + flags = alloc_hugepage_gfpmask(khugepaged_defrag(), __GFP_OTHER_NODE) |
7857     + __GFP_THISNODE;
7858     +
7859     /*
7860     * Before allocating the hugepage, release the mmap_sem read lock.
7861     * The allocation can take potentially a long time if it involves
7862     @@ -2326,8 +2332,7 @@ static struct page
7863     */
7864     up_read(&mm->mmap_sem);
7865    
7866     - *hpage = alloc_pages_exact_node(node, alloc_hugepage_gfpmask(
7867     - khugepaged_defrag(), __GFP_OTHER_NODE), HPAGE_PMD_ORDER);
7868     + *hpage = alloc_pages_exact_node(node, flags, HPAGE_PMD_ORDER);
7869     if (unlikely(!*hpage)) {
7870     count_vm_event(THP_COLLAPSE_ALLOC_FAILED);
7871     *hpage = ERR_PTR(-ENOMEM);
7872     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
7873     index c41b2a0ee273..caad3c5a926f 100644
7874     --- a/mm/hugetlb.c
7875     +++ b/mm/hugetlb.c
7876     @@ -3735,8 +3735,7 @@ retry:
7877     if (!pmd_huge(*pmd))
7878     goto out;
7879     if (pmd_present(*pmd)) {
7880     - page = pte_page(*(pte_t *)pmd) +
7881     - ((address & ~PMD_MASK) >> PAGE_SHIFT);
7882     + page = pmd_page(*pmd) + ((address & ~PMD_MASK) >> PAGE_SHIFT);
7883     if (flags & FOLL_GET)
7884     get_page(page);
7885     } else {
7886     diff --git a/mm/mempolicy.c b/mm/mempolicy.c
7887     index 4721046a134a..de5dc5e12691 100644
7888     --- a/mm/mempolicy.c
7889     +++ b/mm/mempolicy.c
7890     @@ -1985,7 +1985,8 @@ retry_cpuset:
7891     nmask = policy_nodemask(gfp, pol);
7892     if (!nmask || node_isset(node, *nmask)) {
7893     mpol_cond_put(pol);
7894     - page = alloc_pages_exact_node(node, gfp, order);
7895     + page = alloc_pages_exact_node(node,
7896     + gfp | __GFP_THISNODE, order);
7897     goto out;
7898     }
7899     }
7900     diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
7901     index 0ee453fad3de..f371cbff6d45 100644
7902     --- a/net/bridge/br_netfilter.c
7903     +++ b/net/bridge/br_netfilter.c
7904     @@ -651,6 +651,13 @@ static int br_nf_forward_finish(struct sk_buff *skb)
7905     struct net_device *in;
7906    
7907     if (!IS_ARP(skb) && !IS_VLAN_ARP(skb)) {
7908     + int frag_max_size;
7909     +
7910     + if (skb->protocol == htons(ETH_P_IP)) {
7911     + frag_max_size = IPCB(skb)->frag_max_size;
7912     + BR_INPUT_SKB_CB(skb)->frag_max_size = frag_max_size;
7913     + }
7914     +
7915     in = nf_bridge->physindev;
7916     if (nf_bridge->mask & BRNF_PKT_TYPE) {
7917     skb->pkt_type = PACKET_OTHERHOST;
7918     @@ -710,8 +717,14 @@ static unsigned int br_nf_forward_ip(const struct nf_hook_ops *ops,
7919     nf_bridge->mask |= BRNF_PKT_TYPE;
7920     }
7921    
7922     - if (pf == NFPROTO_IPV4 && br_parse_ip_options(skb))
7923     - return NF_DROP;
7924     + if (pf == NFPROTO_IPV4) {
7925     + int frag_max = BR_INPUT_SKB_CB(skb)->frag_max_size;
7926     +
7927     + if (br_parse_ip_options(skb))
7928     + return NF_DROP;
7929     +
7930     + IPCB(skb)->frag_max_size = frag_max;
7931     + }
7932    
7933     /* The physdev module checks on this */
7934     nf_bridge->mask |= BRNF_BRIDGED;
7935     diff --git a/net/core/dev.c b/net/core/dev.c
7936     index 45109b70664e..22a53acdb5bb 100644
7937     --- a/net/core/dev.c
7938     +++ b/net/core/dev.c
7939     @@ -3041,7 +3041,7 @@ static struct rps_dev_flow *
7940     set_rps_cpu(struct net_device *dev, struct sk_buff *skb,
7941     struct rps_dev_flow *rflow, u16 next_cpu)
7942     {
7943     - if (next_cpu != RPS_NO_CPU) {
7944     + if (next_cpu < nr_cpu_ids) {
7945     #ifdef CONFIG_RFS_ACCEL
7946     struct netdev_rx_queue *rxqueue;
7947     struct rps_dev_flow_table *flow_table;
7948     @@ -3146,7 +3146,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
7949     * If the desired CPU (where last recvmsg was done) is
7950     * different from current CPU (one in the rx-queue flow
7951     * table entry), switch if one of the following holds:
7952     - * - Current CPU is unset (equal to RPS_NO_CPU).
7953     + * - Current CPU is unset (>= nr_cpu_ids).
7954     * - Current CPU is offline.
7955     * - The current CPU's queue tail has advanced beyond the
7956     * last packet that was enqueued using this table entry.
7957     @@ -3154,14 +3154,14 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
7958     * have been dequeued, thus preserving in order delivery.
7959     */
7960     if (unlikely(tcpu != next_cpu) &&
7961     - (tcpu == RPS_NO_CPU || !cpu_online(tcpu) ||
7962     + (tcpu >= nr_cpu_ids || !cpu_online(tcpu) ||
7963     ((int)(per_cpu(softnet_data, tcpu).input_queue_head -
7964     rflow->last_qtail)) >= 0)) {
7965     tcpu = next_cpu;
7966     rflow = set_rps_cpu(dev, skb, rflow, next_cpu);
7967     }
7968    
7969     - if (tcpu != RPS_NO_CPU && cpu_online(tcpu)) {
7970     + if (tcpu < nr_cpu_ids && cpu_online(tcpu)) {
7971     *rflowp = rflow;
7972     cpu = tcpu;
7973     goto done;
7974     @@ -3202,14 +3202,14 @@ bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index,
7975     struct rps_dev_flow_table *flow_table;
7976     struct rps_dev_flow *rflow;
7977     bool expire = true;
7978     - int cpu;
7979     + unsigned int cpu;
7980    
7981     rcu_read_lock();
7982     flow_table = rcu_dereference(rxqueue->rps_flow_table);
7983     if (flow_table && flow_id <= flow_table->mask) {
7984     rflow = &flow_table->flows[flow_id];
7985     cpu = ACCESS_ONCE(rflow->cpu);
7986     - if (rflow->filter == filter_id && cpu != RPS_NO_CPU &&
7987     + if (rflow->filter == filter_id && cpu < nr_cpu_ids &&
7988     ((int)(per_cpu(softnet_data, cpu).input_queue_head -
7989     rflow->last_qtail) <
7990     (int)(10 * flow_table->mask)))
7991     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
7992     index 98d45fe72f51..e9f9a15fce4e 100644
7993     --- a/net/core/skbuff.c
7994     +++ b/net/core/skbuff.c
7995     @@ -280,13 +280,14 @@ nodata:
7996     EXPORT_SYMBOL(__alloc_skb);
7997    
7998     /**
7999     - * build_skb - build a network buffer
8000     + * __build_skb - build a network buffer
8001     * @data: data buffer provided by caller
8002     - * @frag_size: size of fragment, or 0 if head was kmalloced
8003     + * @frag_size: size of data, or 0 if head was kmalloced
8004     *
8005     * Allocate a new &sk_buff. Caller provides space holding head and
8006     * skb_shared_info. @data must have been allocated by kmalloc() only if
8007     - * @frag_size is 0, otherwise data should come from the page allocator.
8008     + * @frag_size is 0, otherwise data should come from the page allocator
8009     + * or vmalloc()
8010     * The return is the new skb buffer.
8011     * On a failure the return is %NULL, and @data is not freed.
8012     * Notes :
8013     @@ -297,7 +298,7 @@ EXPORT_SYMBOL(__alloc_skb);
8014     * before giving packet to stack.
8015     * RX rings only contains data buffers, not full skbs.
8016     */
8017     -struct sk_buff *build_skb(void *data, unsigned int frag_size)
8018     +struct sk_buff *__build_skb(void *data, unsigned int frag_size)
8019     {
8020     struct skb_shared_info *shinfo;
8021     struct sk_buff *skb;
8022     @@ -311,7 +312,6 @@ struct sk_buff *build_skb(void *data, unsigned int frag_size)
8023    
8024     memset(skb, 0, offsetof(struct sk_buff, tail));
8025     skb->truesize = SKB_TRUESIZE(size);
8026     - skb->head_frag = frag_size != 0;
8027     atomic_set(&skb->users, 1);
8028     skb->head = data;
8029     skb->data = data;
8030     @@ -328,6 +328,23 @@ struct sk_buff *build_skb(void *data, unsigned int frag_size)
8031    
8032     return skb;
8033     }
8034     +
8035     +/* build_skb() is wrapper over __build_skb(), that specifically
8036     + * takes care of skb->head and skb->pfmemalloc
8037     + * This means that if @frag_size is not zero, then @data must be backed
8038     + * by a page fragment, not kmalloc() or vmalloc()
8039     + */
8040     +struct sk_buff *build_skb(void *data, unsigned int frag_size)
8041     +{
8042     + struct sk_buff *skb = __build_skb(data, frag_size);
8043     +
8044     + if (skb && frag_size) {
8045     + skb->head_frag = 1;
8046     + if (virt_to_head_page(data)->pfmemalloc)
8047     + skb->pfmemalloc = 1;
8048     + }
8049     + return skb;
8050     +}
8051     EXPORT_SYMBOL(build_skb);
8052    
8053     struct netdev_alloc_cache {
8054     @@ -348,7 +365,8 @@ static struct page *__page_frag_refill(struct netdev_alloc_cache *nc,
8055     gfp_t gfp = gfp_mask;
8056    
8057     if (order) {
8058     - gfp_mask |= __GFP_COMP | __GFP_NOWARN | __GFP_NORETRY;
8059     + gfp_mask |= __GFP_COMP | __GFP_NOWARN | __GFP_NORETRY |
8060     + __GFP_NOMEMALLOC;
8061     page = alloc_pages_node(NUMA_NO_NODE, gfp_mask, order);
8062     nc->frag.size = PAGE_SIZE << (page ? order : 0);
8063     }
8064     diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c
8065     index d9bc28ac5d1b..53bd53fbbee0 100644
8066     --- a/net/ipv4/ip_forward.c
8067     +++ b/net/ipv4/ip_forward.c
8068     @@ -82,6 +82,9 @@ int ip_forward(struct sk_buff *skb)
8069     if (skb->pkt_type != PACKET_HOST)
8070     goto drop;
8071    
8072     + if (unlikely(skb->sk))
8073     + goto drop;
8074     +
8075     if (skb_warn_if_lro(skb))
8076     goto drop;
8077    
8078     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
8079     index d520492ba698..9d48dc427a5a 100644
8080     --- a/net/ipv4/tcp_output.c
8081     +++ b/net/ipv4/tcp_output.c
8082     @@ -2751,39 +2751,65 @@ begin_fwd:
8083     }
8084     }
8085    
8086     -/* Send a fin. The caller locks the socket for us. This cannot be
8087     - * allowed to fail queueing a FIN frame under any circumstances.
8088     +/* We allow to exceed memory limits for FIN packets to expedite
8089     + * connection tear down and (memory) recovery.
8090     + * Otherwise tcp_send_fin() could be tempted to either delay FIN
8091     + * or even be forced to close flow without any FIN.
8092     + */
8093     +static void sk_forced_wmem_schedule(struct sock *sk, int size)
8094     +{
8095     + int amt, status;
8096     +
8097     + if (size <= sk->sk_forward_alloc)
8098     + return;
8099     + amt = sk_mem_pages(size);
8100     + sk->sk_forward_alloc += amt * SK_MEM_QUANTUM;
8101     + sk_memory_allocated_add(sk, amt, &status);
8102     +}
8103     +
8104     +/* Send a FIN. The caller locks the socket for us.
8105     + * We should try to send a FIN packet really hard, but eventually give up.
8106     */
8107     void tcp_send_fin(struct sock *sk)
8108     {
8109     + struct sk_buff *skb, *tskb = tcp_write_queue_tail(sk);
8110     struct tcp_sock *tp = tcp_sk(sk);
8111     - struct sk_buff *skb = tcp_write_queue_tail(sk);
8112     - int mss_now;
8113    
8114     - /* Optimization, tack on the FIN if we have a queue of
8115     - * unsent frames. But be careful about outgoing SACKS
8116     - * and IP options.
8117     + /* Optimization, tack on the FIN if we have one skb in write queue and
8118     + * this skb was not yet sent, or we are under memory pressure.
8119     + * Note: in the latter case, FIN packet will be sent after a timeout,
8120     + * as TCP stack thinks it has already been transmitted.
8121     */
8122     - mss_now = tcp_current_mss(sk);
8123     -
8124     - if (tcp_send_head(sk) != NULL) {
8125     - TCP_SKB_CB(skb)->tcp_flags |= TCPHDR_FIN;
8126     - TCP_SKB_CB(skb)->end_seq++;
8127     + if (tskb && (tcp_send_head(sk) || sk_under_memory_pressure(sk))) {
8128     +coalesce:
8129     + TCP_SKB_CB(tskb)->tcp_flags |= TCPHDR_FIN;
8130     + TCP_SKB_CB(tskb)->end_seq++;
8131     tp->write_seq++;
8132     + if (!tcp_send_head(sk)) {
8133     + /* This means tskb was already sent.
8134     + * Pretend we included the FIN on previous transmit.
8135     + * We need to set tp->snd_nxt to the value it would have
8136     + * if FIN had been sent. This is because retransmit path
8137     + * does not change tp->snd_nxt.
8138     + */
8139     + tp->snd_nxt++;
8140     + return;
8141     + }
8142     } else {
8143     - /* Socket is locked, keep trying until memory is available. */
8144     - for (;;) {
8145     - skb = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
8146     - if (skb)
8147     - break;
8148     - yield();
8149     + skb = alloc_skb_fclone(MAX_TCP_HEADER, sk->sk_allocation);
8150     + if (unlikely(!skb)) {
8151     + if (tskb)
8152     + goto coalesce;
8153     + return;
8154     }
8155     + skb_reserve(skb, MAX_TCP_HEADER);
8156     + sk_forced_wmem_schedule(sk, skb->truesize);
8157     /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */
8158     tcp_init_nondata_skb(skb, tp->write_seq,
8159     TCPHDR_ACK | TCPHDR_FIN);
8160     tcp_queue_skb(sk, skb);
8161     }
8162     - __tcp_push_pending_frames(sk, mss_now, TCP_NAGLE_OFF);
8163     + __tcp_push_pending_frames(sk, tcp_current_mss(sk), TCP_NAGLE_OFF);
8164     }
8165    
8166     /* We get here when a process closes a file descriptor (either due to
8167     diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
8168     index 142f66aece18..0ca013d66492 100644
8169     --- a/net/mac80211/mlme.c
8170     +++ b/net/mac80211/mlme.c
8171     @@ -2260,7 +2260,7 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
8172     else
8173     ssid_len = ssid[1];
8174    
8175     - ieee80211_send_probe_req(sdata, sdata->vif.addr, NULL,
8176     + ieee80211_send_probe_req(sdata, sdata->vif.addr, dst,
8177     ssid + 2, ssid_len, NULL,
8178     0, (u32) -1, true, 0,
8179     ifmgd->associated->channel, false);
8180     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
8181     index 05919bf3f670..d1d7a8166f46 100644
8182     --- a/net/netlink/af_netlink.c
8183     +++ b/net/netlink/af_netlink.c
8184     @@ -1616,13 +1616,11 @@ static struct sk_buff *netlink_alloc_large_skb(unsigned int size,
8185     if (data == NULL)
8186     return NULL;
8187    
8188     - skb = build_skb(data, size);
8189     + skb = __build_skb(data, size);
8190     if (skb == NULL)
8191     vfree(data);
8192     - else {
8193     - skb->head_frag = 0;
8194     + else
8195     skb->destructor = netlink_skb_destructor;
8196     - }
8197    
8198     return skb;
8199     }
8200     diff --git a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c
8201     index 2ca9f2e93139..53745f4c2bf5 100644
8202     --- a/sound/pci/emu10k1/emuproc.c
8203     +++ b/sound/pci/emu10k1/emuproc.c
8204     @@ -241,31 +241,22 @@ static void snd_emu10k1_proc_spdif_read(struct snd_info_entry *entry,
8205     struct snd_emu10k1 *emu = entry->private_data;
8206     u32 value;
8207     u32 value2;
8208     - unsigned long flags;
8209     u32 rate;
8210    
8211     if (emu->card_capabilities->emu_model) {
8212     - spin_lock_irqsave(&emu->emu_lock, flags);
8213     snd_emu1010_fpga_read(emu, 0x38, &value);
8214     - spin_unlock_irqrestore(&emu->emu_lock, flags);
8215     if ((value & 0x1) == 0) {
8216     - spin_lock_irqsave(&emu->emu_lock, flags);
8217     snd_emu1010_fpga_read(emu, 0x2a, &value);
8218     snd_emu1010_fpga_read(emu, 0x2b, &value2);
8219     - spin_unlock_irqrestore(&emu->emu_lock, flags);
8220     rate = 0x1770000 / (((value << 5) | value2)+1);
8221     snd_iprintf(buffer, "ADAT Locked : %u\n", rate);
8222     } else {
8223     snd_iprintf(buffer, "ADAT Unlocked\n");
8224     }
8225     - spin_lock_irqsave(&emu->emu_lock, flags);
8226     snd_emu1010_fpga_read(emu, 0x20, &value);
8227     - spin_unlock_irqrestore(&emu->emu_lock, flags);
8228     if ((value & 0x4) == 0) {
8229     - spin_lock_irqsave(&emu->emu_lock, flags);
8230     snd_emu1010_fpga_read(emu, 0x28, &value);
8231     snd_emu1010_fpga_read(emu, 0x29, &value2);
8232     - spin_unlock_irqrestore(&emu->emu_lock, flags);
8233     rate = 0x1770000 / (((value << 5) | value2)+1);
8234     snd_iprintf(buffer, "SPDIF Locked : %d\n", rate);
8235     } else {
8236     @@ -410,14 +401,11 @@ static void snd_emu_proc_emu1010_reg_read(struct snd_info_entry *entry,
8237     {
8238     struct snd_emu10k1 *emu = entry->private_data;
8239     u32 value;
8240     - unsigned long flags;
8241     int i;
8242     snd_iprintf(buffer, "EMU1010 Registers:\n\n");
8243    
8244     for(i = 0; i < 0x40; i+=1) {
8245     - spin_lock_irqsave(&emu->emu_lock, flags);
8246     snd_emu1010_fpga_read(emu, i, &value);
8247     - spin_unlock_irqrestore(&emu->emu_lock, flags);
8248     snd_iprintf(buffer, "%02X: %08X, %02X\n", i, value, (value >> 8) & 0x7f);
8249     }
8250     }
8251     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
8252     index f9d12c0a7e5a..2fd490b1764b 100644
8253     --- a/sound/pci/hda/patch_realtek.c
8254     +++ b/sound/pci/hda/patch_realtek.c
8255     @@ -5047,12 +5047,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
8256     SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
8257     SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
8258     SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
8259     + SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
8260     SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
8261     SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
8262     SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
8263     SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
8264     SND_PCI_QUIRK(0x17aa, 0x501e, "Thinkpad L440", ALC292_FIXUP_TPT440_DOCK),
8265     SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
8266     + SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
8267     SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
8268     SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
8269     SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
8270     @@ -5142,6 +5144,16 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
8271     {0x1b, 0x411111f0}, \
8272     {0x1e, 0x411111f0}
8273    
8274     +#define ALC256_STANDARD_PINS \
8275     + {0x12, 0x90a60140}, \
8276     + {0x14, 0x90170110}, \
8277     + {0x19, 0x411111f0}, \
8278     + {0x1a, 0x411111f0}, \
8279     + {0x1b, 0x411111f0}, \
8280     + {0x1d, 0x40700001}, \
8281     + {0x1e, 0x411111f0}, \
8282     + {0x21, 0x02211020}
8283     +
8284     #define ALC282_STANDARD_PINS \
8285     {0x14, 0x90170110}, \
8286     {0x18, 0x411111f0}, \
8287     @@ -5235,15 +5247,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
8288     {0x1d, 0x40700001},
8289     {0x21, 0x02211050}),
8290     SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8291     - {0x12, 0x90a60140},
8292     - {0x13, 0x40000000},
8293     - {0x14, 0x90170110},
8294     - {0x19, 0x411111f0},
8295     - {0x1a, 0x411111f0},
8296     - {0x1b, 0x411111f0},
8297     - {0x1d, 0x40700001},
8298     - {0x1e, 0x411111f0},
8299     - {0x21, 0x02211020}),
8300     + ALC256_STANDARD_PINS,
8301     + {0x13, 0x40000000}),
8302     + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
8303     + ALC256_STANDARD_PINS,
8304     + {0x13, 0x411111f0}),
8305     SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
8306     {0x12, 0x90a60130},
8307     {0x13, 0x40000000},
8308     @@ -5563,6 +5571,8 @@ static int patch_alc269(struct hda_codec *codec)
8309     break;
8310     case 0x10ec0256:
8311     spec->codec_variant = ALC269_TYPE_ALC256;
8312     + spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
8313     + alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/
8314     break;
8315     }
8316    
8317     @@ -5576,8 +5586,8 @@ static int patch_alc269(struct hda_codec *codec)
8318     if (err < 0)
8319     goto error;
8320    
8321     - if (!spec->gen.no_analog && spec->gen.beep_nid)
8322     - set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
8323     + if (!spec->gen.no_analog && spec->gen.beep_nid && spec->gen.mixer_nid)
8324     + set_beep_amp(spec, spec->gen.mixer_nid, 0x04, HDA_INPUT);
8325    
8326     codec->patch_ops = alc_patch_ops;
8327     #ifdef CONFIG_PM
8328     diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
8329     index 7d3a6accaf9a..e770ee6f36da 100644
8330     --- a/sound/soc/codecs/cs4271.c
8331     +++ b/sound/soc/codecs/cs4271.c
8332     @@ -561,10 +561,10 @@ static int cs4271_codec_probe(struct snd_soc_codec *codec)
8333     if (gpio_is_valid(cs4271->gpio_nreset)) {
8334     /* Reset codec */
8335     gpio_direction_output(cs4271->gpio_nreset, 0);
8336     - udelay(1);
8337     + mdelay(1);
8338     gpio_set_value(cs4271->gpio_nreset, 1);
8339     /* Give the codec time to wake up */
8340     - udelay(1);
8341     + mdelay(1);
8342     }
8343    
8344     ret = regmap_update_bits(cs4271->regmap, CS4271_MODE2,
8345     diff --git a/sound/soc/codecs/pcm512x.c b/sound/soc/codecs/pcm512x.c
8346     index 474cae82a874..8c09e3ffdcaa 100644
8347     --- a/sound/soc/codecs/pcm512x.c
8348     +++ b/sound/soc/codecs/pcm512x.c
8349     @@ -304,9 +304,9 @@ static const struct soc_enum pcm512x_veds =
8350     static const struct snd_kcontrol_new pcm512x_controls[] = {
8351     SOC_DOUBLE_R_TLV("Digital Playback Volume", PCM512x_DIGITAL_VOLUME_2,
8352     PCM512x_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv),
8353     -SOC_DOUBLE_TLV("Playback Volume", PCM512x_ANALOG_GAIN_CTRL,
8354     +SOC_DOUBLE_TLV("Analogue Playback Volume", PCM512x_ANALOG_GAIN_CTRL,
8355     PCM512x_LAGN_SHIFT, PCM512x_RAGN_SHIFT, 1, 1, analog_tlv),
8356     -SOC_DOUBLE_TLV("Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST,
8357     +SOC_DOUBLE_TLV("Analogue Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST,
8358     PCM512x_AGBL_SHIFT, PCM512x_AGBR_SHIFT, 1, 0, boost_tlv),
8359     SOC_DOUBLE("Digital Playback Switch", PCM512x_MUTE, PCM512x_RQML_SHIFT,
8360     PCM512x_RQMR_SHIFT, 1, 1),
8361     @@ -576,8 +576,8 @@ static int pcm512x_find_pll_coeff(struct snd_soc_dai *dai,
8362    
8363     /* pllin_rate / P (or here, den) cannot be greater than 20 MHz */
8364     if (pllin_rate / den > 20000000 && num < 8) {
8365     - num *= 20000000 / (pllin_rate / den);
8366     - den *= 20000000 / (pllin_rate / den);
8367     + num *= DIV_ROUND_UP(pllin_rate / den, 20000000);
8368     + den *= DIV_ROUND_UP(pllin_rate / den, 20000000);
8369     }
8370     dev_dbg(dev, "num / den = %lu / %lu\n", num, den);
8371    
8372     diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
8373     index 31bb4801a005..9e71c768966f 100644
8374     --- a/sound/soc/codecs/wm8741.c
8375     +++ b/sound/soc/codecs/wm8741.c
8376     @@ -123,7 +123,7 @@ static struct {
8377     };
8378    
8379     static const unsigned int rates_11289[] = {
8380     - 44100, 88235,
8381     + 44100, 88200,
8382     };
8383    
8384     static const struct snd_pcm_hw_constraint_list constraints_11289 = {
8385     @@ -150,7 +150,7 @@ static const struct snd_pcm_hw_constraint_list constraints_16384 = {
8386     };
8387    
8388     static const unsigned int rates_16934[] = {
8389     - 44100, 88235,
8390     + 44100, 88200,
8391     };
8392    
8393     static const struct snd_pcm_hw_constraint_list constraints_16934 = {
8394     @@ -168,7 +168,7 @@ static const struct snd_pcm_hw_constraint_list constraints_18432 = {
8395     };
8396    
8397     static const unsigned int rates_22579[] = {
8398     - 44100, 88235, 1764000
8399     + 44100, 88200, 176400
8400     };
8401    
8402     static const struct snd_pcm_hw_constraint_list constraints_22579 = {
8403     @@ -186,7 +186,7 @@ static const struct snd_pcm_hw_constraint_list constraints_24576 = {
8404     };
8405    
8406     static const unsigned int rates_36864[] = {
8407     - 48000, 96000, 19200
8408     + 48000, 96000, 192000
8409     };
8410    
8411     static const struct snd_pcm_hw_constraint_list constraints_36864 = {
8412     diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
8413     index b6bb5947a8a8..8c2b9be80a9a 100644
8414     --- a/sound/soc/davinci/davinci-evm.c
8415     +++ b/sound/soc/davinci/davinci-evm.c
8416     @@ -425,18 +425,8 @@ static int davinci_evm_probe(struct platform_device *pdev)
8417     return ret;
8418     }
8419    
8420     -static int davinci_evm_remove(struct platform_device *pdev)
8421     -{
8422     - struct snd_soc_card *card = platform_get_drvdata(pdev);
8423     -
8424     - snd_soc_unregister_card(card);
8425     -
8426     - return 0;
8427     -}
8428     -
8429     static struct platform_driver davinci_evm_driver = {
8430     .probe = davinci_evm_probe,
8431     - .remove = davinci_evm_remove,
8432     .driver = {
8433     .name = "davinci_evm",
8434     .pm = &snd_soc_pm_ops,
8435     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
8436     index 9a28365126f9..32631a86078b 100644
8437     --- a/sound/usb/quirks.c
8438     +++ b/sound/usb/quirks.c
8439     @@ -1115,6 +1115,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
8440     {
8441     /* devices which do not support reading the sample rate. */
8442     switch (chip->usb_id) {
8443     + case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema */
8444     case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
8445     case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
8446     return true;
8447     diff --git a/tools/lib/traceevent/kbuffer-parse.c b/tools/lib/traceevent/kbuffer-parse.c
8448     index dcc665228c71..deb3569ab004 100644
8449     --- a/tools/lib/traceevent/kbuffer-parse.c
8450     +++ b/tools/lib/traceevent/kbuffer-parse.c
8451     @@ -372,7 +372,6 @@ translate_data(struct kbuffer *kbuf, void *data, void **rptr,
8452     switch (type_len) {
8453     case KBUFFER_TYPE_PADDING:
8454     *length = read_4(kbuf, data);
8455     - data += *length;
8456     break;
8457    
8458     case KBUFFER_TYPE_TIME_EXTEND:
8459     diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
8460     index cc224080b525..0884d31ae12e 100644
8461     --- a/tools/perf/config/Makefile
8462     +++ b/tools/perf/config/Makefile
8463     @@ -651,7 +651,7 @@ ifeq (${IS_64_BIT}, 1)
8464     NO_PERF_READ_VDSO32 := 1
8465     endif
8466     endif
8467     - ifneq (${IS_X86_64}, 1)
8468     + ifneq ($(ARCH), x86)
8469     NO_PERF_READ_VDSOX32 := 1
8470     endif
8471     ifndef NO_PERF_READ_VDSOX32
8472     @@ -699,7 +699,7 @@ sysconfdir = $(prefix)/etc
8473     ETC_PERFCONFIG = etc/perfconfig
8474     endif
8475     ifndef lib
8476     -ifeq ($(IS_X86_64),1)
8477     +ifeq ($(ARCH)$(IS_64_BIT), x861)
8478     lib = lib64
8479     else
8480     lib = lib
8481     diff --git a/tools/perf/tests/make b/tools/perf/tests/make
8482     index 75709d2b17b4..bff85324f799 100644
8483     --- a/tools/perf/tests/make
8484     +++ b/tools/perf/tests/make
8485     @@ -5,7 +5,7 @@ include config/Makefile.arch
8486    
8487     # FIXME looks like x86 is the only arch running tests ;-)
8488     # we need some IS_(32/64) flag to make this generic
8489     -ifeq ($(IS_X86_64),1)
8490     +ifeq ($(ARCH)$(IS_64_BIT), x861)
8491     lib = lib64
8492     else
8493     lib = lib
8494     diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c
8495     index 6da965bdbc2c..85b523885f9d 100644
8496     --- a/tools/perf/util/cloexec.c
8497     +++ b/tools/perf/util/cloexec.c
8498     @@ -7,6 +7,12 @@
8499    
8500     static unsigned long flag = PERF_FLAG_FD_CLOEXEC;
8501    
8502     +int __weak sched_getcpu(void)
8503     +{
8504     + errno = ENOSYS;
8505     + return -1;
8506     +}
8507     +
8508     static int perf_flag_probe(void)
8509     {
8510     /* use 'safest' configuration as used in perf_evsel__fallback() */
8511     diff --git a/tools/perf/util/cloexec.h b/tools/perf/util/cloexec.h
8512     index 94a5a7d829d5..68888c29b04a 100644
8513     --- a/tools/perf/util/cloexec.h
8514     +++ b/tools/perf/util/cloexec.h
8515     @@ -3,4 +3,10 @@
8516    
8517     unsigned long perf_event_open_cloexec_flag(void);
8518    
8519     +#ifdef __GLIBC_PREREQ
8520     +#if !__GLIBC_PREREQ(2, 6)
8521     +extern int sched_getcpu(void) __THROW;
8522     +#endif
8523     +#endif
8524     +
8525     #endif /* __PERF_CLOEXEC_H */
8526     diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
8527     index 33b7a2aef713..9bdf007d243a 100644
8528     --- a/tools/perf/util/symbol-elf.c
8529     +++ b/tools/perf/util/symbol-elf.c
8530     @@ -74,6 +74,10 @@ static inline uint8_t elf_sym__type(const GElf_Sym *sym)
8531     return GELF_ST_TYPE(sym->st_info);
8532     }
8533    
8534     +#ifndef STT_GNU_IFUNC
8535     +#define STT_GNU_IFUNC 10
8536     +#endif
8537     +
8538     static inline int elf_sym__is_function(const GElf_Sym *sym)
8539     {
8540     return (elf_sym__type(sym) == STT_FUNC ||
8541     diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile
8542     index d1b3a361e526..4039854560d0 100644
8543     --- a/tools/power/x86/turbostat/Makefile
8544     +++ b/tools/power/x86/turbostat/Makefile
8545     @@ -1,8 +1,12 @@
8546     CC = $(CROSS_COMPILE)gcc
8547     -BUILD_OUTPUT := $(PWD)
8548     +BUILD_OUTPUT := $(CURDIR)
8549     PREFIX := /usr
8550     DESTDIR :=
8551    
8552     +ifeq ("$(origin O)", "command line")
8553     + BUILD_OUTPUT := $(O)
8554     +endif
8555     +
8556     turbostat : turbostat.c
8557     CFLAGS += -Wall
8558     CFLAGS += -DMSRHEADER='"../../../../arch/x86/include/uapi/asm/msr-index.h"'
8559     diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
8560     index c9f60f524588..e5abe7cb2990 100644
8561     --- a/virt/kvm/arm/vgic.c
8562     +++ b/virt/kvm/arm/vgic.c
8563     @@ -1371,6 +1371,9 @@ int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
8564     goto out;
8565     }
8566    
8567     + if (irq_num >= kvm->arch.vgic.nr_irqs)
8568     + return -EINVAL;
8569     +
8570     vcpu_id = vgic_update_irq_pending(kvm, cpuid, irq_num, level);
8571     if (vcpu_id >= 0) {
8572     /* kick the specified vcpu */
8573     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
8574     index cc6a25d95fbf..f8f3f5fe53d3 100644
8575     --- a/virt/kvm/kvm_main.c
8576     +++ b/virt/kvm/kvm_main.c
8577     @@ -1653,8 +1653,8 @@ int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
8578     ghc->generation = slots->generation;
8579     ghc->len = len;
8580     ghc->memslot = gfn_to_memslot(kvm, start_gfn);
8581     - ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, &nr_pages_avail);
8582     - if (!kvm_is_error_hva(ghc->hva) && nr_pages_avail >= nr_pages_needed) {
8583     + ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, NULL);
8584     + if (!kvm_is_error_hva(ghc->hva) && nr_pages_needed <= 1) {
8585     ghc->hva += offset;
8586     } else {
8587     /*