Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.1/0106-4.1.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2748 - (hide annotations) (download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 4 months ago) by niro
File size: 104870 byte(s)
-linux-4.1 patches up to 4.1.15
1 niro 2748 diff --git a/Makefile b/Makefile
2     index 838dabcb7f48..b8591e5f79b8 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 1
8     -SUBLEVEL = 6
9     +SUBLEVEL = 7
10     EXTRAVERSION =
11     NAME = Series 4800
12    
13     diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
14     index f03a091cd076..dfcc0dd637e5 100644
15     --- a/arch/arm/boot/dts/dra7.dtsi
16     +++ b/arch/arm/boot/dts/dra7.dtsi
17     @@ -116,7 +116,7 @@
18     ranges = <0 0x2000 0x2000>;
19    
20     scm_conf: scm_conf@0 {
21     - compatible = "syscon";
22     + compatible = "syscon", "simple-bus";
23     reg = <0x0 0x1400>;
24     #address-cells = <1>;
25     #size-cells = <1>;
26     diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
27     index f74a8ded515f..38c786018a09 100644
28     --- a/arch/arm/boot/dts/imx6qdl.dtsi
29     +++ b/arch/arm/boot/dts/imx6qdl.dtsi
30     @@ -153,10 +153,10 @@
31     interrupt-names = "msi";
32     #interrupt-cells = <1>;
33     interrupt-map-mask = <0 0 0 0x7>;
34     - interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
35     - <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
36     - <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
37     - <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
38     + interrupt-map = <0 0 0 1 &gpc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
39     + <0 0 0 2 &gpc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
40     + <0 0 0 3 &gpc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
41     + <0 0 0 4 &gpc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
42     clocks = <&clks IMX6QDL_CLK_PCIE_AXI>,
43     <&clks IMX6QDL_CLK_LVDS1_GATE>,
44     <&clks IMX6QDL_CLK_PCIE_REF_125M>;
45     diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi
46     index 11a7963be003..2390f387c271 100644
47     --- a/arch/arm/boot/dts/omap2430.dtsi
48     +++ b/arch/arm/boot/dts/omap2430.dtsi
49     @@ -51,7 +51,8 @@
50     };
51    
52     scm_conf: scm_conf@270 {
53     - compatible = "syscon";
54     + compatible = "syscon",
55     + "simple-bus";
56     reg = <0x270 0x240>;
57     #address-cells = <1>;
58     #size-cells = <1>;
59     diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
60     index f884d6adb71e..84be9da74c7e 100644
61     --- a/arch/arm/boot/dts/omap4.dtsi
62     +++ b/arch/arm/boot/dts/omap4.dtsi
63     @@ -191,7 +191,8 @@
64     };
65    
66     omap4_padconf_global: omap4_padconf_global@5a0 {
67     - compatible = "syscon";
68     + compatible = "syscon",
69     + "simple-bus";
70     reg = <0x5a0 0x170>;
71     #address-cells = <1>;
72     #size-cells = <1>;
73     diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi
74     index 7d24ae0306b5..874a26f9dc0f 100644
75     --- a/arch/arm/boot/dts/omap5.dtsi
76     +++ b/arch/arm/boot/dts/omap5.dtsi
77     @@ -180,7 +180,8 @@
78     };
79    
80     omap5_padconf_global: omap5_padconf_global@5a0 {
81     - compatible = "syscon";
82     + compatible = "syscon",
83     + "simple-bus";
84     reg = <0x5a0 0xec>;
85     #address-cells = <1>;
86     #size-cells = <1>;
87     diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
88     index 4c38674c73ec..54d274da7ccb 100644
89     --- a/arch/arm/mach-bcm/Makefile
90     +++ b/arch/arm/mach-bcm/Makefile
91     @@ -43,5 +43,5 @@ obj-$(CONFIG_ARCH_BCM_63XX) := bcm63xx.o
92     ifeq ($(CONFIG_ARCH_BRCMSTB),y)
93     CFLAGS_platsmp-brcmstb.o += -march=armv7-a
94     obj-y += brcmstb.o
95     -obj-$(CONFIG_SMP) += headsmp-brcmstb.o platsmp-brcmstb.o
96     +obj-$(CONFIG_SMP) += platsmp-brcmstb.o
97     endif
98     diff --git a/arch/arm/mach-bcm/brcmstb.h b/arch/arm/mach-bcm/brcmstb.h
99     deleted file mode 100644
100     index ec0c3d112b36..000000000000
101     --- a/arch/arm/mach-bcm/brcmstb.h
102     +++ /dev/null
103     @@ -1,19 +0,0 @@
104     -/*
105     - * Copyright (C) 2013-2014 Broadcom Corporation
106     - *
107     - * This program is free software; you can redistribute it and/or
108     - * modify it under the terms of the GNU General Public License as
109     - * published by the Free Software Foundation version 2.
110     - *
111     - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
112     - * kind, whether express or implied; without even the implied warranty
113     - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
114     - * GNU General Public License for more details.
115     - */
116     -
117     -#ifndef __BRCMSTB_H__
118     -#define __BRCMSTB_H__
119     -
120     -void brcmstb_secondary_startup(void);
121     -
122     -#endif /* __BRCMSTB_H__ */
123     diff --git a/arch/arm/mach-bcm/headsmp-brcmstb.S b/arch/arm/mach-bcm/headsmp-brcmstb.S
124     deleted file mode 100644
125     index 199c1ea58248..000000000000
126     --- a/arch/arm/mach-bcm/headsmp-brcmstb.S
127     +++ /dev/null
128     @@ -1,33 +0,0 @@
129     -/*
130     - * SMP boot code for secondary CPUs
131     - * Based on arch/arm/mach-tegra/headsmp.S
132     - *
133     - * Copyright (C) 2010 NVIDIA, Inc.
134     - * Copyright (C) 2013-2014 Broadcom Corporation
135     - *
136     - * This program is free software; you can redistribute it and/or
137     - * modify it under the terms of the GNU General Public License as
138     - * published by the Free Software Foundation version 2.
139     - *
140     - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
141     - * kind, whether express or implied; without even the implied warranty
142     - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
143     - * GNU General Public License for more details.
144     - */
145     -
146     -#include <asm/assembler.h>
147     -#include <linux/linkage.h>
148     -#include <linux/init.h>
149     -
150     - .section ".text.head", "ax"
151     -
152     -ENTRY(brcmstb_secondary_startup)
153     - /*
154     - * Ensure CPU is in a sane state by disabling all IRQs and switching
155     - * into SVC mode.
156     - */
157     - setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r0
158     -
159     - bl v7_invalidate_l1
160     - b secondary_startup
161     -ENDPROC(brcmstb_secondary_startup)
162     diff --git a/arch/arm/mach-bcm/platsmp-brcmstb.c b/arch/arm/mach-bcm/platsmp-brcmstb.c
163     index e209e6fc7caf..44d6bddf7a4e 100644
164     --- a/arch/arm/mach-bcm/platsmp-brcmstb.c
165     +++ b/arch/arm/mach-bcm/platsmp-brcmstb.c
166     @@ -30,8 +30,6 @@
167     #include <asm/mach-types.h>
168     #include <asm/smp_plat.h>
169    
170     -#include "brcmstb.h"
171     -
172     enum {
173     ZONE_MAN_CLKEN_MASK = BIT(0),
174     ZONE_MAN_RESET_CNTL_MASK = BIT(1),
175     @@ -153,7 +151,7 @@ static void brcmstb_cpu_boot(u32 cpu)
176     * Set the reset vector to point to the secondary_startup
177     * routine
178     */
179     - cpu_set_boot_addr(cpu, virt_to_phys(brcmstb_secondary_startup));
180     + cpu_set_boot_addr(cpu, virt_to_phys(secondary_startup));
181    
182     /* Unhalt the cpu */
183     cpu_rst_cfg_set(cpu, 0);
184     diff --git a/arch/arm/mach-berlin/headsmp.S b/arch/arm/mach-berlin/headsmp.S
185     index 4a4c56a58ad3..dc82a3486b05 100644
186     --- a/arch/arm/mach-berlin/headsmp.S
187     +++ b/arch/arm/mach-berlin/headsmp.S
188     @@ -12,12 +12,6 @@
189     #include <linux/init.h>
190     #include <asm/assembler.h>
191    
192     -ENTRY(berlin_secondary_startup)
193     - ARM_BE8(setend be)
194     - bl v7_invalidate_l1
195     - b secondary_startup
196     -ENDPROC(berlin_secondary_startup)
197     -
198     /*
199     * If the following instruction is set in the reset exception vector, CPUs
200     * will fetch the value of the software reset address vector when being
201     diff --git a/arch/arm/mach-berlin/platsmp.c b/arch/arm/mach-berlin/platsmp.c
202     index 702e7982015a..34a3753e7356 100644
203     --- a/arch/arm/mach-berlin/platsmp.c
204     +++ b/arch/arm/mach-berlin/platsmp.c
205     @@ -22,7 +22,6 @@
206     #define RESET_VECT 0x00
207     #define SW_RESET_ADDR 0x94
208    
209     -extern void berlin_secondary_startup(void);
210     extern u32 boot_inst;
211    
212     static void __iomem *cpu_ctrl;
213     @@ -85,7 +84,7 @@ static void __init berlin_smp_prepare_cpus(unsigned int max_cpus)
214     * Write the secondary startup address into the SW reset address
215     * vector. This is used by boot_inst.
216     */
217     - writel(virt_to_phys(berlin_secondary_startup), vectors_base + SW_RESET_ADDR);
218     + writel(virt_to_phys(secondary_startup), vectors_base + SW_RESET_ADDR);
219    
220     iounmap(vectors_base);
221     unmap_scu:
222     diff --git a/arch/arm/mach-hisi/Makefile b/arch/arm/mach-hisi/Makefile
223     index 6b7b3033de0b..659db1933ed3 100644
224     --- a/arch/arm/mach-hisi/Makefile
225     +++ b/arch/arm/mach-hisi/Makefile
226     @@ -6,4 +6,4 @@ CFLAGS_platmcpm.o := -march=armv7-a
227    
228     obj-y += hisilicon.o
229     obj-$(CONFIG_MCPM) += platmcpm.o
230     -obj-$(CONFIG_SMP) += platsmp.o hotplug.o headsmp.o
231     +obj-$(CONFIG_SMP) += platsmp.o hotplug.o
232     diff --git a/arch/arm/mach-hisi/core.h b/arch/arm/mach-hisi/core.h
233     index 92a682d8e939..c7648ef1825c 100644
234     --- a/arch/arm/mach-hisi/core.h
235     +++ b/arch/arm/mach-hisi/core.h
236     @@ -12,7 +12,6 @@ extern void hi3xxx_cpu_die(unsigned int cpu);
237     extern int hi3xxx_cpu_kill(unsigned int cpu);
238     extern void hi3xxx_set_cpu(int cpu, bool enable);
239    
240     -extern void hisi_secondary_startup(void);
241     extern struct smp_operations hix5hd2_smp_ops;
242     extern void hix5hd2_set_cpu(int cpu, bool enable);
243     extern void hix5hd2_cpu_die(unsigned int cpu);
244     diff --git a/arch/arm/mach-hisi/headsmp.S b/arch/arm/mach-hisi/headsmp.S
245     deleted file mode 100644
246     index 81e35b159e75..000000000000
247     --- a/arch/arm/mach-hisi/headsmp.S
248     +++ /dev/null
249     @@ -1,16 +0,0 @@
250     -/*
251     - * Copyright (c) 2014 Hisilicon Limited.
252     - * Copyright (c) 2014 Linaro Ltd.
253     - *
254     - * This program is free software; you can redistribute it and/or modify
255     - * it under the terms of the GNU General Public License version 2 as
256     - * published by the Free Software Foundation.
257     - */
258     -#include <linux/linkage.h>
259     -#include <linux/init.h>
260     -
261     - __CPUINIT
262     -
263     -ENTRY(hisi_secondary_startup)
264     - bl v7_invalidate_l1
265     - b secondary_startup
266     diff --git a/arch/arm/mach-hisi/platsmp.c b/arch/arm/mach-hisi/platsmp.c
267     index 8880c8e8b296..51744127db66 100644
268     --- a/arch/arm/mach-hisi/platsmp.c
269     +++ b/arch/arm/mach-hisi/platsmp.c
270     @@ -118,7 +118,7 @@ static int hix5hd2_boot_secondary(unsigned int cpu, struct task_struct *idle)
271     {
272     phys_addr_t jumpaddr;
273    
274     - jumpaddr = virt_to_phys(hisi_secondary_startup);
275     + jumpaddr = virt_to_phys(secondary_startup);
276     hix5hd2_set_scu_boot_addr(HIX5HD2_BOOT_ADDRESS, jumpaddr);
277     hix5hd2_set_cpu(cpu, true);
278     arch_send_wakeup_ipi_mask(cpumask_of(cpu));
279     @@ -156,7 +156,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle)
280     struct device_node *node;
281    
282    
283     - jumpaddr = virt_to_phys(hisi_secondary_startup);
284     + jumpaddr = virt_to_phys(secondary_startup);
285     hip01_set_boot_addr(HIP01_BOOT_ADDRESS, jumpaddr);
286    
287     node = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
288     diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
289     index de5047c8a6c8..b5e976816b63 100644
290     --- a/arch/arm/mach-imx/headsmp.S
291     +++ b/arch/arm/mach-imx/headsmp.S
292     @@ -25,7 +25,6 @@ diag_reg_offset:
293     .endm
294    
295     ENTRY(v7_secondary_startup)
296     - bl v7_invalidate_l1
297     set_diag_reg
298     b secondary_startup
299     ENDPROC(v7_secondary_startup)
300     diff --git a/arch/arm/mach-mvebu/headsmp-a9.S b/arch/arm/mach-mvebu/headsmp-a9.S
301     index 08d5ed46b996..48e4c4b3cd1c 100644
302     --- a/arch/arm/mach-mvebu/headsmp-a9.S
303     +++ b/arch/arm/mach-mvebu/headsmp-a9.S
304     @@ -21,7 +21,6 @@
305    
306     ENTRY(mvebu_cortex_a9_secondary_startup)
307     ARM_BE8(setend be)
308     - bl v7_invalidate_l1
309     bl armada_38x_scu_power_up
310     b secondary_startup
311     ENDPROC(mvebu_cortex_a9_secondary_startup)
312     diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
313     index 3b56722dfd8a..6833df45d7b1 100644
314     --- a/arch/arm/mach-omap2/omap-wakeupgen.c
315     +++ b/arch/arm/mach-omap2/omap-wakeupgen.c
316     @@ -392,6 +392,7 @@ static struct irq_chip wakeupgen_chip = {
317     .irq_mask = wakeupgen_mask,
318     .irq_unmask = wakeupgen_unmask,
319     .irq_retrigger = irq_chip_retrigger_hierarchy,
320     + .irq_set_type = irq_chip_set_type_parent,
321     .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND,
322     #ifdef CONFIG_SMP
323     .irq_set_affinity = irq_chip_set_affinity_parent,
324     diff --git a/arch/arm/mach-prima2/headsmp.S b/arch/arm/mach-prima2/headsmp.S
325     index d86fe33c5f53..209d9fc5c16c 100644
326     --- a/arch/arm/mach-prima2/headsmp.S
327     +++ b/arch/arm/mach-prima2/headsmp.S
328     @@ -15,7 +15,6 @@
329     * ready for them to initialise.
330     */
331     ENTRY(sirfsoc_secondary_startup)
332     - bl v7_invalidate_l1
333     mrc p15, 0, r0, c0, c0, 5
334     and r0, r0, #15
335     adr r4, 1f
336     diff --git a/arch/arm/mach-rockchip/core.h b/arch/arm/mach-rockchip/core.h
337     index 39bca96b555a..492c048813da 100644
338     --- a/arch/arm/mach-rockchip/core.h
339     +++ b/arch/arm/mach-rockchip/core.h
340     @@ -17,4 +17,3 @@ extern char rockchip_secondary_trampoline;
341     extern char rockchip_secondary_trampoline_end;
342    
343     extern unsigned long rockchip_boot_fn;
344     -extern void rockchip_secondary_startup(void);
345     diff --git a/arch/arm/mach-rockchip/headsmp.S b/arch/arm/mach-rockchip/headsmp.S
346     index 46c22dedf632..d69708b07282 100644
347     --- a/arch/arm/mach-rockchip/headsmp.S
348     +++ b/arch/arm/mach-rockchip/headsmp.S
349     @@ -15,14 +15,6 @@
350     #include <linux/linkage.h>
351     #include <linux/init.h>
352    
353     -ENTRY(rockchip_secondary_startup)
354     - mrc p15, 0, r0, c0, c0, 0 @ read main ID register
355     - ldr r1, =0x00000c09 @ Cortex-A9 primary part number
356     - teq r0, r1
357     - beq v7_invalidate_l1
358     - b secondary_startup
359     -ENDPROC(rockchip_secondary_startup)
360     -
361     ENTRY(rockchip_secondary_trampoline)
362     ldr pc, 1f
363     ENDPROC(rockchip_secondary_trampoline)
364     diff --git a/arch/arm/mach-rockchip/platsmp.c b/arch/arm/mach-rockchip/platsmp.c
365     index 5b4ca3c3c879..2e6ab67e2284 100644
366     --- a/arch/arm/mach-rockchip/platsmp.c
367     +++ b/arch/arm/mach-rockchip/platsmp.c
368     @@ -149,8 +149,7 @@ static int __cpuinit rockchip_boot_secondary(unsigned int cpu,
369     * sram_base_addr + 8: start address for pc
370     * */
371     udelay(10);
372     - writel(virt_to_phys(rockchip_secondary_startup),
373     - sram_base_addr + 8);
374     + writel(virt_to_phys(secondary_startup), sram_base_addr + 8);
375     writel(0xDEADBEAF, sram_base_addr + 4);
376     dsb_sev();
377     }
378     @@ -189,7 +188,7 @@ static int __init rockchip_smp_prepare_sram(struct device_node *node)
379     }
380    
381     /* set the boot function for the sram code */
382     - rockchip_boot_fn = virt_to_phys(rockchip_secondary_startup);
383     + rockchip_boot_fn = virt_to_phys(secondary_startup);
384    
385     /* copy the trampoline to sram, that runs during startup of the core */
386     memcpy(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz);
387     diff --git a/arch/arm/mach-shmobile/common.h b/arch/arm/mach-shmobile/common.h
388     index afc60bad6fd6..476092b86c6e 100644
389     --- a/arch/arm/mach-shmobile/common.h
390     +++ b/arch/arm/mach-shmobile/common.h
391     @@ -14,7 +14,6 @@ extern void shmobile_smp_sleep(void);
392     extern void shmobile_smp_hook(unsigned int cpu, unsigned long fn,
393     unsigned long arg);
394     extern int shmobile_smp_cpu_disable(unsigned int cpu);
395     -extern void shmobile_invalidate_start(void);
396     extern void shmobile_boot_scu(void);
397     extern void shmobile_smp_scu_prepare_cpus(unsigned int max_cpus);
398     extern void shmobile_smp_scu_cpu_die(unsigned int cpu);
399     diff --git a/arch/arm/mach-shmobile/headsmp-scu.S b/arch/arm/mach-shmobile/headsmp-scu.S
400     index 69df8bfac167..fa5248c52399 100644
401     --- a/arch/arm/mach-shmobile/headsmp-scu.S
402     +++ b/arch/arm/mach-shmobile/headsmp-scu.S
403     @@ -22,7 +22,7 @@
404     * Boot code for secondary CPUs.
405     *
406     * First we turn on L1 cache coherency for our CPU. Then we jump to
407     - * shmobile_invalidate_start that invalidates the cache and hands over control
408     + * secondary_startup that invalidates the cache and hands over control
409     * to the common ARM startup code.
410     */
411     ENTRY(shmobile_boot_scu)
412     @@ -36,7 +36,7 @@ ENTRY(shmobile_boot_scu)
413     bic r2, r2, r3 @ Clear bits of our CPU (Run Mode)
414     str r2, [r0, #8] @ write back
415    
416     - b shmobile_invalidate_start
417     + b secondary_startup
418     ENDPROC(shmobile_boot_scu)
419    
420     .text
421     diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S
422     index 50c491567e11..330c1fc63197 100644
423     --- a/arch/arm/mach-shmobile/headsmp.S
424     +++ b/arch/arm/mach-shmobile/headsmp.S
425     @@ -16,13 +16,6 @@
426     #include <asm/assembler.h>
427     #include <asm/memory.h>
428    
429     -#ifdef CONFIG_SMP
430     -ENTRY(shmobile_invalidate_start)
431     - bl v7_invalidate_l1
432     - b secondary_startup
433     -ENDPROC(shmobile_invalidate_start)
434     -#endif
435     -
436     /*
437     * Reset vector for secondary CPUs.
438     * This will be mapped at address 0 by SBAR register.
439     diff --git a/arch/arm/mach-shmobile/platsmp-apmu.c b/arch/arm/mach-shmobile/platsmp-apmu.c
440     index f483b560b066..b0790fc32282 100644
441     --- a/arch/arm/mach-shmobile/platsmp-apmu.c
442     +++ b/arch/arm/mach-shmobile/platsmp-apmu.c
443     @@ -133,7 +133,7 @@ void __init shmobile_smp_apmu_prepare_cpus(unsigned int max_cpus,
444     int shmobile_smp_apmu_boot_secondary(unsigned int cpu, struct task_struct *idle)
445     {
446     /* For this particular CPU register boot vector */
447     - shmobile_smp_hook(cpu, virt_to_phys(shmobile_invalidate_start), 0);
448     + shmobile_smp_hook(cpu, virt_to_phys(secondary_startup), 0);
449    
450     return apmu_wrap(cpu, apmu_power_on);
451     }
452     diff --git a/arch/arm/mach-socfpga/core.h b/arch/arm/mach-socfpga/core.h
453     index a0f3b1cd497c..767c09e954a0 100644
454     --- a/arch/arm/mach-socfpga/core.h
455     +++ b/arch/arm/mach-socfpga/core.h
456     @@ -31,7 +31,6 @@
457    
458     #define RSTMGR_MPUMODRST_CPU1 0x2 /* CPU1 Reset */
459    
460     -extern void socfpga_secondary_startup(void);
461     extern void __iomem *socfpga_scu_base_addr;
462    
463     extern void socfpga_init_clocks(void);
464     diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S
465     index f65ea0af4af3..5bb016427107 100644
466     --- a/arch/arm/mach-socfpga/headsmp.S
467     +++ b/arch/arm/mach-socfpga/headsmp.S
468     @@ -30,8 +30,3 @@ ENTRY(secondary_trampoline)
469     1: .long .
470     .long socfpga_cpu1start_addr
471     ENTRY(secondary_trampoline_end)
472     -
473     -ENTRY(socfpga_secondary_startup)
474     - bl v7_invalidate_l1
475     - b secondary_startup
476     -ENDPROC(socfpga_secondary_startup)
477     diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c
478     index c64d89b7c0ca..79c5336c569f 100644
479     --- a/arch/arm/mach-socfpga/platsmp.c
480     +++ b/arch/arm/mach-socfpga/platsmp.c
481     @@ -40,7 +40,7 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)
482    
483     memcpy(phys_to_virt(0), &secondary_trampoline, trampoline_size);
484    
485     - writel(virt_to_phys(socfpga_secondary_startup),
486     + writel(virt_to_phys(secondary_startup),
487     sys_manager_base_addr + (socfpga_cpu1start_addr & 0x000000ff));
488    
489     flush_cache_all();
490     diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile
491     index e48a74458c25..fffad2426ee4 100644
492     --- a/arch/arm/mach-tegra/Makefile
493     +++ b/arch/arm/mach-tegra/Makefile
494     @@ -19,7 +19,7 @@ obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += pm-tegra30.o
495     ifeq ($(CONFIG_CPU_IDLE),y)
496     obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += cpuidle-tegra30.o
497     endif
498     -obj-$(CONFIG_SMP) += platsmp.o headsmp.o
499     +obj-$(CONFIG_SMP) += platsmp.o
500     obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
501    
502     obj-$(CONFIG_ARCH_TEGRA_114_SOC) += sleep-tegra30.o
503     diff --git a/arch/arm/mach-tegra/headsmp.S b/arch/arm/mach-tegra/headsmp.S
504     deleted file mode 100644
505     index 2072e7322c39..000000000000
506     --- a/arch/arm/mach-tegra/headsmp.S
507     +++ /dev/null
508     @@ -1,12 +0,0 @@
509     -#include <linux/linkage.h>
510     -#include <linux/init.h>
511     -
512     -#include "sleep.h"
513     -
514     - .section ".text.head", "ax"
515     -
516     -ENTRY(tegra_secondary_startup)
517     - check_cpu_part_num 0xc09, r8, r9
518     - bleq v7_invalidate_l1
519     - b secondary_startup
520     -ENDPROC(tegra_secondary_startup)
521     diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
522     index 894c5c472184..6fd9db54887e 100644
523     --- a/arch/arm/mach-tegra/reset.c
524     +++ b/arch/arm/mach-tegra/reset.c
525     @@ -94,7 +94,7 @@ void __init tegra_cpu_reset_handler_init(void)
526     __tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_PRESENT] =
527     *((u32 *)cpu_possible_mask);
528     __tegra_cpu_reset_handler_data[TEGRA_RESET_STARTUP_SECONDARY] =
529     - virt_to_phys((void *)tegra_secondary_startup);
530     + virt_to_phys((void *)secondary_startup);
531     #endif
532    
533     #ifdef CONFIG_PM_SLEEP
534     diff --git a/arch/arm/mach-tegra/reset.h b/arch/arm/mach-tegra/reset.h
535     index 29c3dec0126a..9c479c7925b8 100644
536     --- a/arch/arm/mach-tegra/reset.h
537     +++ b/arch/arm/mach-tegra/reset.h
538     @@ -37,7 +37,6 @@ void __tegra_cpu_reset_handler_start(void);
539     void __tegra_cpu_reset_handler(void);
540     void __tegra20_cpu1_resettable_status_offset(void);
541     void __tegra_cpu_reset_handler_end(void);
542     -void tegra_secondary_startup(void);
543    
544     #ifdef CONFIG_PM_SLEEP
545     #define tegra_cpu_lp1_mask \
546     diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h
547     index 382c60e9aa16..7038cae95ddc 100644
548     --- a/arch/arm/mach-zynq/common.h
549     +++ b/arch/arm/mach-zynq/common.h
550     @@ -17,8 +17,6 @@
551     #ifndef __MACH_ZYNQ_COMMON_H__
552     #define __MACH_ZYNQ_COMMON_H__
553    
554     -void zynq_secondary_startup(void);
555     -
556     extern int zynq_slcr_init(void);
557     extern int zynq_early_slcr_init(void);
558     extern void zynq_slcr_system_reset(void);
559     diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S
560     index dd8c071941e7..045c72720a4d 100644
561     --- a/arch/arm/mach-zynq/headsmp.S
562     +++ b/arch/arm/mach-zynq/headsmp.S
563     @@ -22,8 +22,3 @@ zynq_secondary_trampoline_jump:
564     .globl zynq_secondary_trampoline_end
565     zynq_secondary_trampoline_end:
566     ENDPROC(zynq_secondary_trampoline)
567     -
568     -ENTRY(zynq_secondary_startup)
569     - bl v7_invalidate_l1
570     - b secondary_startup
571     -ENDPROC(zynq_secondary_startup)
572     diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
573     index 52d768ff7857..f66816c49186 100644
574     --- a/arch/arm/mach-zynq/platsmp.c
575     +++ b/arch/arm/mach-zynq/platsmp.c
576     @@ -87,10 +87,9 @@ int zynq_cpun_start(u32 address, int cpu)
577     }
578     EXPORT_SYMBOL(zynq_cpun_start);
579    
580     -static int zynq_boot_secondary(unsigned int cpu,
581     - struct task_struct *idle)
582     +static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle)
583     {
584     - return zynq_cpun_start(virt_to_phys(zynq_secondary_startup), cpu);
585     + return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);
586     }
587    
588     /*
589     diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
590     index 3d1054f11a8a..7911f14c2157 100644
591     --- a/arch/arm/mm/proc-v7.S
592     +++ b/arch/arm/mm/proc-v7.S
593     @@ -268,7 +268,10 @@ __v7_ca15mp_setup:
594     __v7_b15mp_setup:
595     __v7_ca17mp_setup:
596     mov r10, #0
597     -1:
598     +1: adr r12, __v7_setup_stack @ the local stack
599     + stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6
600     + bl v7_invalidate_l1
601     + ldmia r12, {r0-r5, lr}
602     #ifdef CONFIG_SMP
603     ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
604     ALT_UP(mov r0, #(1 << 6)) @ fake it for UP
605     @@ -277,7 +280,7 @@ __v7_ca17mp_setup:
606     orreq r0, r0, r10 @ Enable CPU-specific SMP bits
607     mcreq p15, 0, r0, c1, c0, 1
608     #endif
609     - b __v7_setup
610     + b __v7_setup_cont
611    
612     __v7_pj4b_setup:
613     #ifdef CONFIG_CPU_PJ4B
614     @@ -335,10 +338,11 @@ __v7_pj4b_setup:
615    
616     __v7_setup:
617     adr r12, __v7_setup_stack @ the local stack
618     - stmia r12, {r0-r5, r7, r9, r11, lr}
619     - bl v7_flush_dcache_louis
620     - ldmia r12, {r0-r5, r7, r9, r11, lr}
621     + stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6
622     + bl v7_invalidate_l1
623     + ldmia r12, {r0-r5, lr}
624    
625     +__v7_setup_cont:
626     mrc p15, 0, r0, c0, c0, 0 @ read main ID register
627     and r10, r0, #0xff000000 @ ARM?
628     teq r10, #0x41000000
629     @@ -460,7 +464,7 @@ ENDPROC(__v7_setup)
630    
631     .align 2
632     __v7_setup_stack:
633     - .space 4 * 11 @ 11 registers
634     + .space 4 * 7 @ 12 registers
635    
636     __INITDATA
637    
638     diff --git a/arch/arm/vdso/Makefile b/arch/arm/vdso/Makefile
639     index 8aa791051029..1160434eece0 100644
640     --- a/arch/arm/vdso/Makefile
641     +++ b/arch/arm/vdso/Makefile
642     @@ -6,9 +6,15 @@ obj-vdso := vgettimeofday.o datapage.o
643     targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds
644     obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
645    
646     -ccflags-y := -shared -fPIC -fno-common -fno-builtin -fno-stack-protector
647     -ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 -DDISABLE_BRANCH_PROFILING
648     -ccflags-y += -Wl,--no-undefined $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
649     +ccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector
650     +ccflags-y += -DDISABLE_BRANCH_PROFILING
651     +
652     +VDSO_LDFLAGS := -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
653     +VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
654     +VDSO_LDFLAGS += -nostdlib -shared
655     +VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
656     +VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id)
657     +VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd)
658    
659     obj-$(CONFIG_VDSO) += vdso.o
660     extra-$(CONFIG_VDSO) += vdso.lds
661     @@ -40,10 +46,8 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
662    
663     # Actual build commands
664     quiet_cmd_vdsold = VDSO $@
665     - cmd_vdsold = $(CC) $(c_flags) -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) \
666     - $(call cc-ldoption, -Wl$(comma)--build-id) \
667     - -Wl,-Bsymbolic -Wl,-z,max-page-size=4096 \
668     - -Wl,-z,common-page-size=4096 -o $@
669     + cmd_vdsold = $(CC) $(c_flags) $(VDSO_LDFLAGS) \
670     + -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
671    
672     quiet_cmd_vdsomunge = MUNGE $@
673     cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@
674     diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
675     index cce18c85d2e8..7778453762d8 100644
676     --- a/arch/arm64/kernel/perf_event.c
677     +++ b/arch/arm64/kernel/perf_event.c
678     @@ -1318,7 +1318,7 @@ static int armpmu_device_probe(struct platform_device *pdev)
679     /* Don't bother with PPIs; they're already affine */
680     irq = platform_get_irq(pdev, 0);
681     if (irq >= 0 && irq_is_percpu(irq))
682     - return 0;
683     + goto out;
684    
685     irqs = kcalloc(pdev->num_resources, sizeof(*irqs), GFP_KERNEL);
686     if (!irqs)
687     @@ -1355,6 +1355,7 @@ static int armpmu_device_probe(struct platform_device *pdev)
688     else
689     kfree(irqs);
690    
691     +out:
692     cpu_pmu->plat_device = pdev;
693     return 0;
694     }
695     diff --git a/arch/arm64/kvm/inject_fault.c b/arch/arm64/kvm/inject_fault.c
696     index f02530e726f6..85c57158dcd9 100644
697     --- a/arch/arm64/kvm/inject_fault.c
698     +++ b/arch/arm64/kvm/inject_fault.c
699     @@ -168,8 +168,8 @@ void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr)
700     {
701     if (!(vcpu->arch.hcr_el2 & HCR_RW))
702     inject_abt32(vcpu, false, addr);
703     -
704     - inject_abt64(vcpu, false, addr);
705     + else
706     + inject_abt64(vcpu, false, addr);
707     }
708    
709     /**
710     @@ -184,8 +184,8 @@ void kvm_inject_pabt(struct kvm_vcpu *vcpu, unsigned long addr)
711     {
712     if (!(vcpu->arch.hcr_el2 & HCR_RW))
713     inject_abt32(vcpu, true, addr);
714     -
715     - inject_abt64(vcpu, true, addr);
716     + else
717     + inject_abt64(vcpu, true, addr);
718     }
719    
720     /**
721     @@ -198,6 +198,6 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu)
722     {
723     if (!(vcpu->arch.hcr_el2 & HCR_RW))
724     inject_undef32(vcpu);
725     -
726     - inject_undef64(vcpu);
727     + else
728     + inject_undef64(vcpu);
729     }
730     diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
731     index ad4d44635c76..a6f6b762c47a 100644
732     --- a/arch/mips/kernel/scall64-64.S
733     +++ b/arch/mips/kernel/scall64-64.S
734     @@ -80,7 +80,7 @@ syscall_trace_entry:
735     SAVE_STATIC
736     move s0, t2
737     move a0, sp
738     - daddiu a1, v0, __NR_64_Linux
739     + move a1, v0
740     jal syscall_trace_enter
741    
742     bltz v0, 2f # seccomp failed? Skip syscall
743     diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
744     index 446cc654da56..4b2010654c46 100644
745     --- a/arch/mips/kernel/scall64-n32.S
746     +++ b/arch/mips/kernel/scall64-n32.S
747     @@ -72,7 +72,7 @@ n32_syscall_trace_entry:
748     SAVE_STATIC
749     move s0, t2
750     move a0, sp
751     - daddiu a1, v0, __NR_N32_Linux
752     + move a1, v0
753     jal syscall_trace_enter
754    
755     bltz v0, 2f # seccomp failed? Skip syscall
756     diff --git a/arch/x86/include/asm/sigcontext.h b/arch/x86/include/asm/sigcontext.h
757     index 6fe6b182c998..9dfce4e0417d 100644
758     --- a/arch/x86/include/asm/sigcontext.h
759     +++ b/arch/x86/include/asm/sigcontext.h
760     @@ -57,9 +57,9 @@ struct sigcontext {
761     unsigned long ip;
762     unsigned long flags;
763     unsigned short cs;
764     - unsigned short __pad2; /* Was called gs, but was always zero. */
765     - unsigned short __pad1; /* Was called fs, but was always zero. */
766     - unsigned short ss;
767     + unsigned short gs;
768     + unsigned short fs;
769     + unsigned short __pad0;
770     unsigned long err;
771     unsigned long trapno;
772     unsigned long oldmask;
773     diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/uapi/asm/sigcontext.h
774     index 16dc4e8a2cd3..d8b9f9081e86 100644
775     --- a/arch/x86/include/uapi/asm/sigcontext.h
776     +++ b/arch/x86/include/uapi/asm/sigcontext.h
777     @@ -177,24 +177,9 @@ struct sigcontext {
778     __u64 rip;
779     __u64 eflags; /* RFLAGS */
780     __u16 cs;
781     -
782     - /*
783     - * Prior to 2.5.64 ("[PATCH] x86-64 updates for 2.5.64-bk3"),
784     - * Linux saved and restored fs and gs in these slots. This
785     - * was counterproductive, as fsbase and gsbase were never
786     - * saved, so arch_prctl was presumably unreliable.
787     - *
788     - * If these slots are ever needed for any other purpose, there
789     - * is some risk that very old 64-bit binaries could get
790     - * confused. I doubt that many such binaries still work,
791     - * though, since the same patch in 2.5.64 also removed the
792     - * 64-bit set_thread_area syscall, so it appears that there is
793     - * no TLS API that works in both pre- and post-2.5.64 kernels.
794     - */
795     - __u16 __pad2; /* Was gs. */
796     - __u16 __pad1; /* Was fs. */
797     -
798     - __u16 ss;
799     + __u16 gs;
800     + __u16 fs;
801     + __u16 __pad0;
802     __u64 err;
803     __u64 trapno;
804     __u64 oldmask;
805     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
806     index dcb52850a28f..cde732c1b495 100644
807     --- a/arch/x86/kernel/apic/apic.c
808     +++ b/arch/x86/kernel/apic/apic.c
809     @@ -1424,7 +1424,7 @@ static inline void __x2apic_disable(void)
810     {
811     u64 msr;
812    
813     - if (cpu_has_apic)
814     + if (!cpu_has_apic)
815     return;
816    
817     rdmsrl(MSR_IA32_APICBASE, msr);
818     @@ -1483,10 +1483,13 @@ void x2apic_setup(void)
819    
820     static __init void x2apic_disable(void)
821     {
822     - u32 x2apic_id;
823     + u32 x2apic_id, state = x2apic_state;
824    
825     - if (x2apic_state != X2APIC_ON)
826     - goto out;
827     + x2apic_mode = 0;
828     + x2apic_state = X2APIC_DISABLED;
829     +
830     + if (state != X2APIC_ON)
831     + return;
832    
833     x2apic_id = read_apic_id();
834     if (x2apic_id >= 255)
835     @@ -1494,9 +1497,6 @@ static __init void x2apic_disable(void)
836    
837     __x2apic_disable();
838     register_lapic_address(mp_lapic_addr);
839     -out:
840     - x2apic_state = X2APIC_DISABLED;
841     - x2apic_mode = 0;
842     }
843    
844     static __init void x2apic_enable(void)
845     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
846     index 6e338e3b1dc0..971743774248 100644
847     --- a/arch/x86/kernel/process.c
848     +++ b/arch/x86/kernel/process.c
849     @@ -453,6 +453,7 @@ static int prefer_mwait_c1_over_halt(const struct cpuinfo_x86 *c)
850     static void mwait_idle(void)
851     {
852     if (!current_set_polling_and_test()) {
853     + trace_cpu_idle_rcuidle(1, smp_processor_id());
854     if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) {
855     smp_mb(); /* quirk */
856     clflush((void *)&current_thread_info()->flags);
857     @@ -464,6 +465,7 @@ static void mwait_idle(void)
858     __sti_mwait(0, 0);
859     else
860     local_irq_enable();
861     + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
862     } else {
863     local_irq_enable();
864     }
865     diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
866     index 1ea14fd53933..e0fd5f47fbb9 100644
867     --- a/arch/x86/kernel/signal.c
868     +++ b/arch/x86/kernel/signal.c
869     @@ -93,8 +93,15 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
870     COPY(r15);
871     #endif /* CONFIG_X86_64 */
872    
873     +#ifdef CONFIG_X86_32
874     COPY_SEG_CPL3(cs);
875     COPY_SEG_CPL3(ss);
876     +#else /* !CONFIG_X86_32 */
877     + /* Kernel saves and restores only the CS segment register on signals,
878     + * which is the bare minimum needed to allow mixed 32/64-bit code.
879     + * App's signal handler can save/restore other segments if needed. */
880     + COPY_SEG_CPL3(cs);
881     +#endif /* CONFIG_X86_32 */
882    
883     get_user_ex(tmpflags, &sc->flags);
884     regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
885     @@ -154,9 +161,8 @@ int setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
886     #else /* !CONFIG_X86_32 */
887     put_user_ex(regs->flags, &sc->flags);
888     put_user_ex(regs->cs, &sc->cs);
889     - put_user_ex(0, &sc->__pad2);
890     - put_user_ex(0, &sc->__pad1);
891     - put_user_ex(regs->ss, &sc->ss);
892     + put_user_ex(0, &sc->gs);
893     + put_user_ex(0, &sc->fs);
894     #endif /* CONFIG_X86_32 */
895    
896     put_user_ex(fpstate, &sc->fpstate);
897     @@ -450,19 +456,9 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
898    
899     regs->sp = (unsigned long)frame;
900    
901     - /*
902     - * Set up the CS and SS registers to run signal handlers in
903     - * 64-bit mode, even if the handler happens to be interrupting
904     - * 32-bit or 16-bit code.
905     - *
906     - * SS is subtle. In 64-bit mode, we don't need any particular
907     - * SS descriptor, but we do need SS to be valid. It's possible
908     - * that the old SS is entirely bogus -- this can happen if the
909     - * signal we're trying to deliver is #GP or #SS caused by a bad
910     - * SS value.
911     - */
912     + /* Set up the CS register to run signal handlers in 64-bit mode,
913     + even if the handler happens to be interrupting 32-bit code. */
914     regs->cs = __USER_CS;
915     - regs->ss = __USER_DS;
916    
917     return 0;
918     }
919     diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig
920     index e88fda867a33..484145368a24 100644
921     --- a/arch/x86/xen/Kconfig
922     +++ b/arch/x86/xen/Kconfig
923     @@ -8,7 +8,7 @@ config XEN
924     select PARAVIRT_CLOCK
925     select XEN_HAVE_PVMMU
926     depends on X86_64 || (X86_32 && X86_PAE)
927     - depends on X86_TSC
928     + depends on X86_LOCAL_APIC && X86_TSC
929     help
930     This is the Linux Xen port. Enabling this will allow the
931     kernel to boot in a paravirtualized environment under the
932     @@ -17,7 +17,7 @@ config XEN
933     config XEN_DOM0
934     def_bool y
935     depends on XEN && PCI_XEN && SWIOTLB_XEN
936     - depends on X86_LOCAL_APIC && X86_IO_APIC && ACPI && PCI
937     + depends on X86_IO_APIC && ACPI && PCI
938    
939     config XEN_PVHVM
940     def_bool y
941     diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
942     index 7322755f337a..4b6e29ac0968 100644
943     --- a/arch/x86/xen/Makefile
944     +++ b/arch/x86/xen/Makefile
945     @@ -13,13 +13,13 @@ CFLAGS_mmu.o := $(nostackp)
946     obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \
947     time.o xen-asm.o xen-asm_$(BITS).o \
948     grant-table.o suspend.o platform-pci-unplug.o \
949     - p2m.o
950     + p2m.o apic.o
951    
952     obj-$(CONFIG_EVENT_TRACING) += trace.o
953    
954     obj-$(CONFIG_SMP) += smp.o
955     obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
956     obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
957     -obj-$(CONFIG_XEN_DOM0) += apic.o vga.o
958     +obj-$(CONFIG_XEN_DOM0) += vga.o
959     obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o
960     obj-$(CONFIG_XEN_EFI) += efi.o
961     diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
962     index 9e195c683549..bef30cbb56c4 100644
963     --- a/arch/x86/xen/xen-ops.h
964     +++ b/arch/x86/xen/xen-ops.h
965     @@ -101,17 +101,15 @@ struct dom0_vga_console_info;
966    
967     #ifdef CONFIG_XEN_DOM0
968     void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
969     -void __init xen_init_apic(void);
970     #else
971     static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
972     size_t size)
973     {
974     }
975     -static inline void __init xen_init_apic(void)
976     -{
977     -}
978     #endif
979    
980     +void __init xen_init_apic(void);
981     +
982     #ifdef CONFIG_XEN_EFI
983     extern void xen_efi_init(void);
984     #else
985     diff --git a/block/blk-settings.c b/block/blk-settings.c
986     index 12600bfffca9..e0057d035200 100644
987     --- a/block/blk-settings.c
988     +++ b/block/blk-settings.c
989     @@ -241,8 +241,8 @@ EXPORT_SYMBOL(blk_queue_bounce_limit);
990     * Description:
991     * Enables a low level driver to set a hard upper limit,
992     * max_hw_sectors, on the size of requests. max_hw_sectors is set by
993     - * the device driver based upon the combined capabilities of I/O
994     - * controller and storage device.
995     + * the device driver based upon the capabilities of the I/O
996     + * controller.
997     *
998     * max_sectors is a soft limit imposed by the block layer for
999     * filesystem type requests. This value can be overridden on a
1000     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
1001     index 41c99be9bd41..e0064d180f04 100644
1002     --- a/drivers/ata/libata-core.c
1003     +++ b/drivers/ata/libata-core.c
1004     @@ -694,11 +694,11 @@ static int ata_rwcmd_protocol(struct ata_taskfile *tf, struct ata_device *dev)
1005     * RETURNS:
1006     * Block address read from @tf.
1007     */
1008     -u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)
1009     +u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev)
1010     {
1011     u64 block = 0;
1012    
1013     - if (!dev || tf->flags & ATA_TFLAG_LBA) {
1014     + if (tf->flags & ATA_TFLAG_LBA) {
1015     if (tf->flags & ATA_TFLAG_LBA48) {
1016     block |= (u64)tf->hob_lbah << 40;
1017     block |= (u64)tf->hob_lbam << 32;
1018     @@ -2147,24 +2147,6 @@ static int ata_dev_config_ncq(struct ata_device *dev,
1019     return 0;
1020     }
1021    
1022     -static void ata_dev_config_sense_reporting(struct ata_device *dev)
1023     -{
1024     - unsigned int err_mask;
1025     -
1026     - if (!ata_id_has_sense_reporting(dev->id))
1027     - return;
1028     -
1029     - if (ata_id_sense_reporting_enabled(dev->id))
1030     - return;
1031     -
1032     - err_mask = ata_dev_set_feature(dev, SETFEATURE_SENSE_DATA, 0x1);
1033     - if (err_mask) {
1034     - ata_dev_dbg(dev,
1035     - "failed to enable Sense Data Reporting, Emask 0x%x\n",
1036     - err_mask);
1037     - }
1038     -}
1039     -
1040     /**
1041     * ata_dev_configure - Configure the specified ATA/ATAPI device
1042     * @dev: Target device to configure
1043     @@ -2387,7 +2369,7 @@ int ata_dev_configure(struct ata_device *dev)
1044     dev->devslp_timing[i] = sata_setting[j];
1045     }
1046     }
1047     - ata_dev_config_sense_reporting(dev);
1048     +
1049     dev->cdb_len = 16;
1050     }
1051    
1052     @@ -4248,6 +4230,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
1053     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1054     { "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1055     ATA_HORKAGE_ZERO_AFTER_TRIM, },
1056     + { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
1057     + ATA_HORKAGE_ZERO_AFTER_TRIM, },
1058    
1059     /* devices that don't properly handle TRIM commands */
1060     { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
1061     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
1062     index 7465031a893c..cb0508af1459 100644
1063     --- a/drivers/ata/libata-eh.c
1064     +++ b/drivers/ata/libata-eh.c
1065     @@ -1592,8 +1592,6 @@ static int ata_eh_read_log_10h(struct ata_device *dev,
1066     tf->hob_lbah = buf[10];
1067     tf->nsect = buf[12];
1068     tf->hob_nsect = buf[13];
1069     - if (ata_id_has_ncq_autosense(dev->id))
1070     - tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16];
1071    
1072     return 0;
1073     }
1074     @@ -1630,70 +1628,6 @@ unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)
1075     }
1076    
1077     /**
1078     - * ata_eh_request_sense - perform REQUEST_SENSE_DATA_EXT
1079     - * @dev: device to perform REQUEST_SENSE_SENSE_DATA_EXT to
1080     - * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
1081     - * @dfl_sense_key: default sense key to use
1082     - *
1083     - * Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK
1084     - * SENSE. This function is EH helper.
1085     - *
1086     - * LOCKING:
1087     - * Kernel thread context (may sleep).
1088     - *
1089     - * RETURNS:
1090     - * encoded sense data on success, 0 on failure or if sense data
1091     - * is not available.
1092     - */
1093     -static u32 ata_eh_request_sense(struct ata_queued_cmd *qc,
1094     - struct scsi_cmnd *cmd)
1095     -{
1096     - struct ata_device *dev = qc->dev;
1097     - struct ata_taskfile tf;
1098     - unsigned int err_mask;
1099     -
1100     - if (!cmd)
1101     - return 0;
1102     -
1103     - DPRINTK("ATA request sense\n");
1104     - ata_dev_warn(dev, "request sense\n");
1105     - if (!ata_id_sense_reporting_enabled(dev->id)) {
1106     - ata_dev_warn(qc->dev, "sense data reporting disabled\n");
1107     - return 0;
1108     - }
1109     - ata_tf_init(dev, &tf);
1110     -
1111     - tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1112     - tf.flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1113     - tf.command = ATA_CMD_REQ_SENSE_DATA;
1114     - tf.protocol = ATA_PROT_NODATA;
1115     -
1116     - err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1117     - /*
1118     - * ACS-4 states:
1119     - * The device may set the SENSE DATA AVAILABLE bit to one in the
1120     - * STATUS field and clear the ERROR bit to zero in the STATUS field
1121     - * to indicate that the command returned completion without an error
1122     - * and the sense data described in table 306 is available.
1123     - *
1124     - * IOW the 'ATA_SENSE' bit might not be set even though valid
1125     - * sense data is available.
1126     - * So check for both.
1127     - */
1128     - if ((tf.command & ATA_SENSE) ||
1129     - tf.lbah != 0 || tf.lbam != 0 || tf.lbal != 0) {
1130     - ata_scsi_set_sense(cmd, tf.lbah, tf.lbam, tf.lbal);
1131     - qc->flags |= ATA_QCFLAG_SENSE_VALID;
1132     - ata_dev_warn(dev, "sense data %02x/%02x/%02x\n",
1133     - tf.lbah, tf.lbam, tf.lbal);
1134     - } else {
1135     - ata_dev_warn(dev, "request sense failed stat %02x emask %x\n",
1136     - tf.command, err_mask);
1137     - }
1138     - return err_mask;
1139     -}
1140     -
1141     -/**
1142     * atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
1143     * @dev: device to perform REQUEST_SENSE to
1144     * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
1145     @@ -1855,19 +1789,6 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)
1146     memcpy(&qc->result_tf, &tf, sizeof(tf));
1147     qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1148     qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
1149     - if (qc->result_tf.auxiliary) {
1150     - char sense_key, asc, ascq;
1151     -
1152     - sense_key = (qc->result_tf.auxiliary >> 16) & 0xff;
1153     - asc = (qc->result_tf.auxiliary >> 8) & 0xff;
1154     - ascq = qc->result_tf.auxiliary & 0xff;
1155     - ata_dev_dbg(dev, "NCQ Autosense %02x/%02x/%02x\n",
1156     - sense_key, asc, ascq);
1157     - ata_scsi_set_sense(qc->scsicmd, sense_key, asc, ascq);
1158     - ata_scsi_set_sense_information(qc->scsicmd, &qc->result_tf);
1159     - qc->flags |= ATA_QCFLAG_SENSE_VALID;
1160     - }
1161     -
1162     ehc->i.err_mask &= ~AC_ERR_DEV;
1163     }
1164    
1165     @@ -1897,27 +1818,6 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1166     return ATA_EH_RESET;
1167     }
1168    
1169     - /*
1170     - * Sense data reporting does not work if the
1171     - * device fault bit is set.
1172     - */
1173     - if ((stat & ATA_SENSE) && !(stat & ATA_DF) &&
1174     - !(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
1175     - if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
1176     - tmp = ata_eh_request_sense(qc, qc->scsicmd);
1177     - if (tmp)
1178     - qc->err_mask |= tmp;
1179     - else
1180     - ata_scsi_set_sense_information(qc->scsicmd, tf);
1181     - } else {
1182     - ata_dev_warn(qc->dev, "sense data available but port frozen\n");
1183     - }
1184     - }
1185     -
1186     - /* Set by NCQ autosense or request sense above */
1187     - if (qc->flags & ATA_QCFLAG_SENSE_VALID)
1188     - return 0;
1189     -
1190     if (stat & (ATA_ERR | ATA_DF))
1191     qc->err_mask |= AC_ERR_DEV;
1192     else
1193     @@ -2661,15 +2561,14 @@ static void ata_eh_link_report(struct ata_link *link)
1194    
1195     #ifdef CONFIG_ATA_VERBOSE_ERROR
1196     if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
1197     - ATA_SENSE | ATA_ERR)) {
1198     + ATA_ERR)) {
1199     if (res->command & ATA_BUSY)
1200     ata_dev_err(qc->dev, "status: { Busy }\n");
1201     else
1202     - ata_dev_err(qc->dev, "status: { %s%s%s%s%s}\n",
1203     + ata_dev_err(qc->dev, "status: { %s%s%s%s}\n",
1204     res->command & ATA_DRDY ? "DRDY " : "",
1205     res->command & ATA_DF ? "DF " : "",
1206     res->command & ATA_DRQ ? "DRQ " : "",
1207     - res->command & ATA_SENSE ? "SENSE " : "",
1208     res->command & ATA_ERR ? "ERR " : "");
1209     }
1210    
1211     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
1212     index 641a61a59e89..0d7f0da3a269 100644
1213     --- a/drivers/ata/libata-scsi.c
1214     +++ b/drivers/ata/libata-scsi.c
1215     @@ -270,28 +270,13 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
1216     ata_scsi_park_show, ata_scsi_park_store);
1217     EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
1218    
1219     -void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
1220     +static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
1221     {
1222     - if (!cmd)
1223     - return;
1224     -
1225     cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
1226    
1227     scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
1228     }
1229    
1230     -void ata_scsi_set_sense_information(struct scsi_cmnd *cmd,
1231     - const struct ata_taskfile *tf)
1232     -{
1233     - u64 information;
1234     -
1235     - if (!cmd)
1236     - return;
1237     -
1238     - information = ata_tf_read_block(tf, NULL);
1239     - scsi_set_sense_information(cmd->sense_buffer, information);
1240     -}
1241     -
1242     static ssize_t
1243     ata_scsi_em_message_store(struct device *dev, struct device_attribute *attr,
1244     const char *buf, size_t count)
1245     @@ -1792,9 +1777,7 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1246     ((cdb[2] & 0x20) || need_sense)) {
1247     ata_gen_passthru_sense(qc);
1248     } else {
1249     - if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
1250     - cmd->result = SAM_STAT_CHECK_CONDITION;
1251     - } else if (!need_sense) {
1252     + if (!need_sense) {
1253     cmd->result = SAM_STAT_GOOD;
1254     } else {
1255     /* TODO: decide which descriptor format to use
1256     diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
1257     index a998a175f9f1..f840ca18a7c0 100644
1258     --- a/drivers/ata/libata.h
1259     +++ b/drivers/ata/libata.h
1260     @@ -67,8 +67,7 @@ extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag);
1261     extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
1262     u64 block, u32 n_block, unsigned int tf_flags,
1263     unsigned int tag);
1264     -extern u64 ata_tf_read_block(const struct ata_taskfile *tf,
1265     - struct ata_device *dev);
1266     +extern u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev);
1267     extern unsigned ata_exec_internal(struct ata_device *dev,
1268     struct ata_taskfile *tf, const u8 *cdb,
1269     int dma_dir, void *buf, unsigned int buflen,
1270     @@ -138,9 +137,6 @@ extern int ata_scsi_add_hosts(struct ata_host *host,
1271     struct scsi_host_template *sht);
1272     extern void ata_scsi_scan_host(struct ata_port *ap, int sync);
1273     extern int ata_scsi_offline_dev(struct ata_device *dev);
1274     -extern void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq);
1275     -extern void ata_scsi_set_sense_information(struct scsi_cmnd *cmd,
1276     - const struct ata_taskfile *tf);
1277     extern void ata_scsi_media_change_notify(struct ata_device *dev);
1278     extern void ata_scsi_hotplug(struct work_struct *work);
1279     extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
1280     diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
1281     index 81751a49d8bf..56486d92c4e7 100644
1282     --- a/drivers/base/regmap/regcache-rbtree.c
1283     +++ b/drivers/base/regmap/regcache-rbtree.c
1284     @@ -296,11 +296,20 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
1285     if (!blk)
1286     return -ENOMEM;
1287    
1288     - present = krealloc(rbnode->cache_present,
1289     - BITS_TO_LONGS(blklen) * sizeof(*present), GFP_KERNEL);
1290     - if (!present) {
1291     - kfree(blk);
1292     - return -ENOMEM;
1293     + if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
1294     + present = krealloc(rbnode->cache_present,
1295     + BITS_TO_LONGS(blklen) * sizeof(*present),
1296     + GFP_KERNEL);
1297     + if (!present) {
1298     + kfree(blk);
1299     + return -ENOMEM;
1300     + }
1301     +
1302     + memset(present + BITS_TO_LONGS(rbnode->blklen), 0,
1303     + (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
1304     + * sizeof(*present));
1305     + } else {
1306     + present = rbnode->cache_present;
1307     }
1308    
1309     /* insert the register value in the correct place in the rbnode block */
1310     diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
1311     index 713fc9ff1149..3e9ec9523f73 100644
1312     --- a/drivers/block/xen-blkback/blkback.c
1313     +++ b/drivers/block/xen-blkback/blkback.c
1314     @@ -362,8 +362,8 @@ static void purge_persistent_gnt(struct xen_blkif *blkif)
1315     return;
1316     }
1317    
1318     - if (work_pending(&blkif->persistent_purge_work)) {
1319     - pr_alert_ratelimited("Scheduled work from previous purge is still pending, cannot purge list\n");
1320     + if (work_busy(&blkif->persistent_purge_work)) {
1321     + pr_alert_ratelimited("Scheduled work from previous purge is still busy, cannot purge list\n");
1322     return;
1323     }
1324    
1325     diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
1326     index 2c61cf8c6f61..89c7371ab2dc 100644
1327     --- a/drivers/block/xen-blkfront.c
1328     +++ b/drivers/block/xen-blkfront.c
1329     @@ -1118,8 +1118,10 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
1330     * Add the used indirect page back to the list of
1331     * available pages for indirect grefs.
1332     */
1333     - indirect_page = pfn_to_page(s->indirect_grants[i]->pfn);
1334     - list_add(&indirect_page->lru, &info->indirect_pages);
1335     + if (!info->feature_persistent) {
1336     + indirect_page = pfn_to_page(s->indirect_grants[i]->pfn);
1337     + list_add(&indirect_page->lru, &info->indirect_pages);
1338     + }
1339     s->indirect_grants[i]->gref = GRANT_INVALID_REF;
1340     list_add_tail(&s->indirect_grants[i]->node, &info->grants);
1341     }
1342     diff --git a/drivers/clk/pxa/clk-pxa3xx.c b/drivers/clk/pxa/clk-pxa3xx.c
1343     index 4b93a1efb36d..ac03ba49e9d1 100644
1344     --- a/drivers/clk/pxa/clk-pxa3xx.c
1345     +++ b/drivers/clk/pxa/clk-pxa3xx.c
1346     @@ -126,7 +126,7 @@ PARENTS(pxa3xx_ac97_bus) = { "ring_osc_60mhz", "ac97" };
1347     PARENTS(pxa3xx_sbus) = { "ring_osc_60mhz", "system_bus" };
1348     PARENTS(pxa3xx_smemcbus) = { "ring_osc_60mhz", "smemc" };
1349    
1350     -#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENA : &CKENB)
1351     +#define CKEN_AB(bit) ((CKEN_ ## bit > 31) ? &CKENB : &CKENA)
1352     #define PXA3XX_CKEN(dev_id, con_id, parents, mult_lp, div_lp, mult_hp, \
1353     div_hp, bit, is_lp, flags) \
1354     PXA_CKEN(dev_id, con_id, bit, parents, mult_lp, div_lp, \
1355     diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
1356     index 332c8ef8dae2..0436997e054b 100644
1357     --- a/drivers/crypto/caam/caamhash.c
1358     +++ b/drivers/crypto/caam/caamhash.c
1359     @@ -909,13 +909,14 @@ static int ahash_final_ctx(struct ahash_request *req)
1360     state->buflen_1;
1361     u32 *sh_desc = ctx->sh_desc_fin, *desc;
1362     dma_addr_t ptr = ctx->sh_desc_fin_dma;
1363     - int sec4_sg_bytes;
1364     + int sec4_sg_bytes, sec4_sg_src_index;
1365     int digestsize = crypto_ahash_digestsize(ahash);
1366     struct ahash_edesc *edesc;
1367     int ret = 0;
1368     int sh_len;
1369    
1370     - sec4_sg_bytes = (1 + (buflen ? 1 : 0)) * sizeof(struct sec4_sg_entry);
1371     + sec4_sg_src_index = 1 + (buflen ? 1 : 0);
1372     + sec4_sg_bytes = sec4_sg_src_index * sizeof(struct sec4_sg_entry);
1373    
1374     /* allocate space for base edesc and hw desc commands, link tables */
1375     edesc = kmalloc(sizeof(struct ahash_edesc) + DESC_JOB_IO_LEN +
1376     @@ -942,7 +943,7 @@ static int ahash_final_ctx(struct ahash_request *req)
1377     state->buf_dma = try_buf_map_to_sec4_sg(jrdev, edesc->sec4_sg + 1,
1378     buf, state->buf_dma, buflen,
1379     last_buflen);
1380     - (edesc->sec4_sg + sec4_sg_bytes - 1)->len |= SEC4_SG_LEN_FIN;
1381     + (edesc->sec4_sg + sec4_sg_src_index - 1)->len |= SEC4_SG_LEN_FIN;
1382    
1383     edesc->sec4_sg_dma = dma_map_single(jrdev, edesc->sec4_sg,
1384     sec4_sg_bytes, DMA_TO_DEVICE);
1385     diff --git a/drivers/crypto/nx/nx-sha256.c b/drivers/crypto/nx/nx-sha256.c
1386     index 08f8d5cd6334..becb738c897b 100644
1387     --- a/drivers/crypto/nx/nx-sha256.c
1388     +++ b/drivers/crypto/nx/nx-sha256.c
1389     @@ -71,7 +71,6 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data,
1390     struct sha256_state *sctx = shash_desc_ctx(desc);
1391     struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(&desc->tfm->base);
1392     struct nx_csbcpb *csbcpb = (struct nx_csbcpb *)nx_ctx->csbcpb;
1393     - struct nx_sg *in_sg;
1394     struct nx_sg *out_sg;
1395     u64 to_process = 0, leftover, total;
1396     unsigned long irq_flags;
1397     @@ -97,7 +96,6 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data,
1398     NX_CPB_FDM(csbcpb) |= NX_FDM_INTERMEDIATE;
1399     NX_CPB_FDM(csbcpb) |= NX_FDM_CONTINUATION;
1400    
1401     - in_sg = nx_ctx->in_sg;
1402     max_sg_len = min_t(u64, nx_ctx->ap->sglen,
1403     nx_driver.of.max_sg_len/sizeof(struct nx_sg));
1404     max_sg_len = min_t(u64, max_sg_len,
1405     @@ -114,17 +112,12 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data,
1406     }
1407    
1408     do {
1409     - /*
1410     - * to_process: the SHA256_BLOCK_SIZE data chunk to process in
1411     - * this update. This value is also restricted by the sg list
1412     - * limits.
1413     - */
1414     - to_process = total - to_process;
1415     - to_process = to_process & ~(SHA256_BLOCK_SIZE - 1);
1416     + int used_sgs = 0;
1417     + struct nx_sg *in_sg = nx_ctx->in_sg;
1418    
1419     if (buf_len) {
1420     data_len = buf_len;
1421     - in_sg = nx_build_sg_list(nx_ctx->in_sg,
1422     + in_sg = nx_build_sg_list(in_sg,
1423     (u8 *) sctx->buf,
1424     &data_len,
1425     max_sg_len);
1426     @@ -133,15 +126,27 @@ static int nx_sha256_update(struct shash_desc *desc, const u8 *data,
1427     rc = -EINVAL;
1428     goto out;
1429     }
1430     + used_sgs = in_sg - nx_ctx->in_sg;
1431     }
1432    
1433     + /* to_process: SHA256_BLOCK_SIZE aligned chunk to be
1434     + * processed in this iteration. This value is restricted
1435     + * by sg list limits and number of sgs we already used
1436     + * for leftover data. (see above)
1437     + * In ideal case, we could allow NX_PAGE_SIZE * max_sg_len,
1438     + * but because data may not be aligned, we need to account
1439     + * for that too. */
1440     + to_process = min_t(u64, total,
1441     + (max_sg_len - 1 - used_sgs) * NX_PAGE_SIZE);
1442     + to_process = to_process & ~(SHA256_BLOCK_SIZE - 1);
1443     +
1444     data_len = to_process - buf_len;
1445     in_sg = nx_build_sg_list(in_sg, (u8 *) data,
1446     &data_len, max_sg_len);
1447    
1448     nx_ctx->op.inlen = (nx_ctx->in_sg - in_sg) * sizeof(struct nx_sg);
1449    
1450     - to_process = (data_len + buf_len);
1451     + to_process = data_len + buf_len;
1452     leftover = total - to_process;
1453    
1454     /*
1455     diff --git a/drivers/crypto/nx/nx-sha512.c b/drivers/crypto/nx/nx-sha512.c
1456     index aff0fe58eac0..b6e183d58d73 100644
1457     --- a/drivers/crypto/nx/nx-sha512.c
1458     +++ b/drivers/crypto/nx/nx-sha512.c
1459     @@ -71,7 +71,6 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data,
1460     struct sha512_state *sctx = shash_desc_ctx(desc);
1461     struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(&desc->tfm->base);
1462     struct nx_csbcpb *csbcpb = (struct nx_csbcpb *)nx_ctx->csbcpb;
1463     - struct nx_sg *in_sg;
1464     struct nx_sg *out_sg;
1465     u64 to_process, leftover = 0, total;
1466     unsigned long irq_flags;
1467     @@ -97,7 +96,6 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data,
1468     NX_CPB_FDM(csbcpb) |= NX_FDM_INTERMEDIATE;
1469     NX_CPB_FDM(csbcpb) |= NX_FDM_CONTINUATION;
1470    
1471     - in_sg = nx_ctx->in_sg;
1472     max_sg_len = min_t(u64, nx_ctx->ap->sglen,
1473     nx_driver.of.max_sg_len/sizeof(struct nx_sg));
1474     max_sg_len = min_t(u64, max_sg_len,
1475     @@ -114,18 +112,12 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data,
1476     }
1477    
1478     do {
1479     - /*
1480     - * to_process: the SHA512_BLOCK_SIZE data chunk to process in
1481     - * this update. This value is also restricted by the sg list
1482     - * limits.
1483     - */
1484     - to_process = total - leftover;
1485     - to_process = to_process & ~(SHA512_BLOCK_SIZE - 1);
1486     - leftover = total - to_process;
1487     + int used_sgs = 0;
1488     + struct nx_sg *in_sg = nx_ctx->in_sg;
1489    
1490     if (buf_len) {
1491     data_len = buf_len;
1492     - in_sg = nx_build_sg_list(nx_ctx->in_sg,
1493     + in_sg = nx_build_sg_list(in_sg,
1494     (u8 *) sctx->buf,
1495     &data_len, max_sg_len);
1496    
1497     @@ -133,8 +125,20 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data,
1498     rc = -EINVAL;
1499     goto out;
1500     }
1501     + used_sgs = in_sg - nx_ctx->in_sg;
1502     }
1503    
1504     + /* to_process: SHA512_BLOCK_SIZE aligned chunk to be
1505     + * processed in this iteration. This value is restricted
1506     + * by sg list limits and number of sgs we already used
1507     + * for leftover data. (see above)
1508     + * In ideal case, we could allow NX_PAGE_SIZE * max_sg_len,
1509     + * but because data may not be aligned, we need to account
1510     + * for that too. */
1511     + to_process = min_t(u64, total,
1512     + (max_sg_len - 1 - used_sgs) * NX_PAGE_SIZE);
1513     + to_process = to_process & ~(SHA512_BLOCK_SIZE - 1);
1514     +
1515     data_len = to_process - buf_len;
1516     in_sg = nx_build_sg_list(in_sg, (u8 *) data,
1517     &data_len, max_sg_len);
1518     @@ -146,7 +150,7 @@ static int nx_sha512_update(struct shash_desc *desc, const u8 *data,
1519     goto out;
1520     }
1521    
1522     - to_process = (data_len + buf_len);
1523     + to_process = data_len + buf_len;
1524     leftover = total - to_process;
1525    
1526     /*
1527     diff --git a/drivers/edac/ppc4xx_edac.c b/drivers/edac/ppc4xx_edac.c
1528     index 3515b381c131..711d8ad74f11 100644
1529     --- a/drivers/edac/ppc4xx_edac.c
1530     +++ b/drivers/edac/ppc4xx_edac.c
1531     @@ -920,7 +920,7 @@ static int ppc4xx_edac_init_csrows(struct mem_ctl_info *mci, u32 mcopt1)
1532     */
1533    
1534     for (row = 0; row < mci->nr_csrows; row++) {
1535     - struct csrow_info *csi = &mci->csrows[row];
1536     + struct csrow_info *csi = mci->csrows[row];
1537    
1538     /*
1539     * Get the configuration settings for this
1540     diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
1541     index 60b0c13d7ff5..aebc4595afa0 100644
1542     --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
1543     +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
1544     @@ -559,7 +559,7 @@ static int atmel_hlcdc_dc_drm_remove(struct platform_device *pdev)
1545     return 0;
1546     }
1547    
1548     -#ifdef CONFIG_PM
1549     +#ifdef CONFIG_PM_SLEEP
1550     static int atmel_hlcdc_dc_drm_suspend(struct device *dev)
1551     {
1552     struct drm_device *drm_dev = dev_get_drvdata(dev);
1553     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
1554     index d714a4b5711e..b1fe32b119ef 100644
1555     --- a/drivers/gpu/drm/i915/intel_dp.c
1556     +++ b/drivers/gpu/drm/i915/intel_dp.c
1557     @@ -1150,6 +1150,19 @@ intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1558     return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
1559     }
1560    
1561     +static bool intel_dp_source_supports_hbr2(struct drm_device *dev)
1562     +{
1563     + /* WaDisableHBR2:skl */
1564     + if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
1565     + return false;
1566     +
1567     + if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
1568     + (INTEL_INFO(dev)->gen >= 9))
1569     + return true;
1570     + else
1571     + return false;
1572     +}
1573     +
1574     static int
1575     intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
1576     {
1577     @@ -1163,11 +1176,8 @@ intel_dp_source_rates(struct drm_device *dev, const int **source_rates)
1578    
1579     *source_rates = default_rates;
1580    
1581     - if (IS_SKYLAKE(dev) && INTEL_REVID(dev) <= SKL_REVID_B0)
1582     - /* WaDisableHBR2:skl */
1583     - return (DP_LINK_BW_2_7 >> 3) + 1;
1584     - else if (INTEL_INFO(dev)->gen >= 8 ||
1585     - (IS_HASWELL(dev) && !IS_HSW_ULX(dev)))
1586     + /* This depends on the fact that 5.4 is last value in the array */
1587     + if (intel_dp_source_supports_hbr2(dev))
1588     return (DP_LINK_BW_5_4 >> 3) + 1;
1589     else
1590     return (DP_LINK_BW_2_7 >> 3) + 1;
1591     @@ -3783,10 +3793,15 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
1592     }
1593     }
1594    
1595     - /* Training Pattern 3 support, both source and sink */
1596     + /* Training Pattern 3 support, Intel platforms that support HBR2 alone
1597     + * have support for TP3 hence that check is used along with dpcd check
1598     + * to ensure TP3 can be enabled.
1599     + * SKL < B0: due it's WaDisableHBR2 is the only exception where TP3 is
1600     + * supported but still not enabled.
1601     + */
1602     if (intel_dp->dpcd[DP_DPCD_REV] >= 0x12 &&
1603     intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED &&
1604     - (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)) {
1605     + intel_dp_source_supports_hbr2(dev)) {
1606     intel_dp->use_tps3 = true;
1607     DRM_DEBUG_KMS("Displayport TPS3 supported\n");
1608     } else
1609     diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
1610     index 424e62197787..9ab7c1c758ae 100644
1611     --- a/drivers/gpu/drm/i915/intel_lrc.c
1612     +++ b/drivers/gpu/drm/i915/intel_lrc.c
1613     @@ -848,6 +848,8 @@ static int intel_lr_context_pin(struct intel_engine_cs *ring,
1614     ret = intel_pin_and_map_ringbuffer_obj(ring->dev, ringbuf);
1615     if (ret)
1616     goto unpin_ctx_obj;
1617     +
1618     + ctx_obj->dirty = true;
1619     }
1620    
1621     return ret;
1622     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1623     index 654c8daeb5ab..97ad3bcb99a7 100644
1624     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1625     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
1626     @@ -2492,7 +2492,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,
1627     ret = ttm_eu_reserve_buffers(&ticket, &sw_context->validate_nodes,
1628     true, NULL);
1629     if (unlikely(ret != 0))
1630     - goto out_err;
1631     + goto out_err_nores;
1632    
1633     ret = vmw_validate_buffers(dev_priv, sw_context);
1634     if (unlikely(ret != 0))
1635     @@ -2536,6 +2536,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,
1636     vmw_resource_relocations_free(&sw_context->res_relocations);
1637    
1638     vmw_fifo_commit(dev_priv, command_size);
1639     + mutex_unlock(&dev_priv->binding_mutex);
1640    
1641     vmw_query_bo_switch_commit(dev_priv, sw_context);
1642     ret = vmw_execbuf_fence_commands(file_priv, dev_priv,
1643     @@ -2551,7 +2552,6 @@ int vmw_execbuf_process(struct drm_file *file_priv,
1644     DRM_ERROR("Fence submission error. Syncing.\n");
1645    
1646     vmw_resource_list_unreserve(&sw_context->resource_list, false);
1647     - mutex_unlock(&dev_priv->binding_mutex);
1648    
1649     ttm_eu_fence_buffer_objects(&ticket, &sw_context->validate_nodes,
1650     (void *) fence);
1651     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
1652     index 008e89bf6f3c..32d52d29cc68 100644
1653     --- a/drivers/hid/hid-input.c
1654     +++ b/drivers/hid/hid-input.c
1655     @@ -462,12 +462,15 @@ out:
1656    
1657     static void hidinput_cleanup_battery(struct hid_device *dev)
1658     {
1659     + const struct power_supply_desc *psy_desc;
1660     +
1661     if (!dev->battery)
1662     return;
1663    
1664     + psy_desc = dev->battery->desc;
1665     power_supply_unregister(dev->battery);
1666     - kfree(dev->battery->desc->name);
1667     - kfree(dev->battery->desc);
1668     + kfree(psy_desc->name);
1669     + kfree(psy_desc);
1670     dev->battery = NULL;
1671     }
1672     #else /* !CONFIG_HID_BATTERY_STRENGTH */
1673     diff --git a/drivers/hid/hid-uclogic.c b/drivers/hid/hid-uclogic.c
1674     index 94167310e15a..b905d501e752 100644
1675     --- a/drivers/hid/hid-uclogic.c
1676     +++ b/drivers/hid/hid-uclogic.c
1677     @@ -858,7 +858,7 @@ static int uclogic_tablet_enable(struct hid_device *hdev)
1678     for (p = drvdata->rdesc;
1679     p <= drvdata->rdesc + drvdata->rsize - 4;) {
1680     if (p[0] == 0xFE && p[1] == 0xED && p[2] == 0x1D &&
1681     - p[3] < sizeof(params)) {
1682     + p[3] < ARRAY_SIZE(params)) {
1683     v = params[p[3]];
1684     put_unaligned(cpu_to_le32(v), (s32 *)p);
1685     p += 4;
1686     diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
1687     index 097d7216d98e..c6dc644aa580 100644
1688     --- a/drivers/input/keyboard/gpio_keys_polled.c
1689     +++ b/drivers/input/keyboard/gpio_keys_polled.c
1690     @@ -246,7 +246,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
1691     * convert it to descriptor.
1692     */
1693     if (!button->gpiod && gpio_is_valid(button->gpio)) {
1694     - unsigned flags = 0;
1695     + unsigned flags = GPIOF_IN;
1696    
1697     if (button->active_low)
1698     flags |= GPIOF_ACTIVE_LOW;
1699     diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c
1700     index 692fe2bc8197..c12bb93334ff 100644
1701     --- a/drivers/irqchip/irq-crossbar.c
1702     +++ b/drivers/irqchip/irq-crossbar.c
1703     @@ -68,7 +68,9 @@ static struct irq_chip crossbar_chip = {
1704     .irq_mask = irq_chip_mask_parent,
1705     .irq_unmask = irq_chip_unmask_parent,
1706     .irq_retrigger = irq_chip_retrigger_hierarchy,
1707     - .irq_set_wake = irq_chip_set_wake_parent,
1708     + .irq_set_type = irq_chip_set_type_parent,
1709     + .flags = IRQCHIP_MASK_ON_SUSPEND |
1710     + IRQCHIP_SKIP_SET_WAKE,
1711     #ifdef CONFIG_SMP
1712     .irq_set_affinity = irq_chip_set_affinity_parent,
1713     #endif
1714     diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
1715     index 79f694120ddf..cde1d6749017 100644
1716     --- a/drivers/md/dm-thin-metadata.c
1717     +++ b/drivers/md/dm-thin-metadata.c
1718     @@ -1295,8 +1295,8 @@ static int __release_metadata_snap(struct dm_pool_metadata *pmd)
1719     return r;
1720    
1721     disk_super = dm_block_data(copy);
1722     - dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->data_mapping_root));
1723     - dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->device_details_root));
1724     + dm_btree_del(&pmd->info, le64_to_cpu(disk_super->data_mapping_root));
1725     + dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root));
1726     dm_sm_dec_block(pmd->metadata_sm, held_root);
1727    
1728     return dm_tm_unlock(pmd->tm, copy);
1729     diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
1730     index 6ca6dfab50eb..6523903e15fe 100644
1731     --- a/drivers/mfd/arizona-core.c
1732     +++ b/drivers/mfd/arizona-core.c
1733     @@ -912,10 +912,6 @@ int arizona_dev_init(struct arizona *arizona)
1734     arizona->pdata.gpio_defaults[i]);
1735     }
1736    
1737     - pm_runtime_set_autosuspend_delay(arizona->dev, 100);
1738     - pm_runtime_use_autosuspend(arizona->dev);
1739     - pm_runtime_enable(arizona->dev);
1740     -
1741     /* Chip default */
1742     if (!arizona->pdata.clk32k_src)
1743     arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2;
1744     @@ -1012,11 +1008,17 @@ int arizona_dev_init(struct arizona *arizona)
1745     arizona->pdata.spk_fmt[i]);
1746     }
1747    
1748     + pm_runtime_set_active(arizona->dev);
1749     + pm_runtime_enable(arizona->dev);
1750     +
1751     /* Set up for interrupts */
1752     ret = arizona_irq_init(arizona);
1753     if (ret != 0)
1754     goto err_reset;
1755    
1756     + pm_runtime_set_autosuspend_delay(arizona->dev, 100);
1757     + pm_runtime_use_autosuspend(arizona->dev);
1758     +
1759     arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error",
1760     arizona_clkgen_err, arizona);
1761     arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked",
1762     @@ -1045,10 +1047,6 @@ int arizona_dev_init(struct arizona *arizona)
1763     goto err_irq;
1764     }
1765    
1766     -#ifdef CONFIG_PM
1767     - regulator_disable(arizona->dcvdd);
1768     -#endif
1769     -
1770     return 0;
1771    
1772     err_irq:
1773     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
1774     index 72427f21edff..edfec540c893 100644
1775     --- a/drivers/net/can/usb/peak_usb/pcan_usb.c
1776     +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
1777     @@ -855,6 +855,18 @@ static int pcan_usb_probe(struct usb_interface *intf)
1778     /*
1779     * describe the PCAN-USB adapter
1780     */
1781     +static const struct can_bittiming_const pcan_usb_const = {
1782     + .name = "pcan_usb",
1783     + .tseg1_min = 1,
1784     + .tseg1_max = 16,
1785     + .tseg2_min = 1,
1786     + .tseg2_max = 8,
1787     + .sjw_max = 4,
1788     + .brp_min = 1,
1789     + .brp_max = 64,
1790     + .brp_inc = 1,
1791     +};
1792     +
1793     const struct peak_usb_adapter pcan_usb = {
1794     .name = "PCAN-USB",
1795     .device_id = PCAN_USB_PRODUCT_ID,
1796     @@ -863,17 +875,7 @@ const struct peak_usb_adapter pcan_usb = {
1797     .clock = {
1798     .freq = PCAN_USB_CRYSTAL_HZ / 2 ,
1799     },
1800     - .bittiming_const = {
1801     - .name = "pcan_usb",
1802     - .tseg1_min = 1,
1803     - .tseg1_max = 16,
1804     - .tseg2_min = 1,
1805     - .tseg2_max = 8,
1806     - .sjw_max = 4,
1807     - .brp_min = 1,
1808     - .brp_max = 64,
1809     - .brp_inc = 1,
1810     - },
1811     + .bittiming_const = &pcan_usb_const,
1812    
1813     /* size of device private data */
1814     .sizeof_dev_private = sizeof(struct pcan_usb),
1815     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
1816     index 7921cff93a63..5a2e341a6d1e 100644
1817     --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
1818     +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
1819     @@ -792,9 +792,9 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
1820     dev->ep_msg_out = peak_usb_adapter->ep_msg_out[ctrl_idx];
1821    
1822     dev->can.clock = peak_usb_adapter->clock;
1823     - dev->can.bittiming_const = &peak_usb_adapter->bittiming_const;
1824     + dev->can.bittiming_const = peak_usb_adapter->bittiming_const;
1825     dev->can.do_set_bittiming = peak_usb_set_bittiming;
1826     - dev->can.data_bittiming_const = &peak_usb_adapter->data_bittiming_const;
1827     + dev->can.data_bittiming_const = peak_usb_adapter->data_bittiming_const;
1828     dev->can.do_set_data_bittiming = peak_usb_set_data_bittiming;
1829     dev->can.do_set_mode = peak_usb_set_mode;
1830     dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter;
1831     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.h b/drivers/net/can/usb/peak_usb/pcan_usb_core.h
1832     index 9e624f05ad4d..506fe506c9d3 100644
1833     --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.h
1834     +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.h
1835     @@ -48,8 +48,8 @@ struct peak_usb_adapter {
1836     u32 device_id;
1837     u32 ctrlmode_supported;
1838     struct can_clock clock;
1839     - const struct can_bittiming_const bittiming_const;
1840     - const struct can_bittiming_const data_bittiming_const;
1841     + const struct can_bittiming_const * const bittiming_const;
1842     + const struct can_bittiming_const * const data_bittiming_const;
1843     unsigned int ctrl_count;
1844    
1845     int (*intf_probe)(struct usb_interface *intf);
1846     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
1847     index 09d14e70abd7..ce44a033f63b 100644
1848     --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
1849     +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
1850     @@ -990,6 +990,30 @@ static void pcan_usb_fd_free(struct peak_usb_device *dev)
1851     }
1852    
1853     /* describes the PCAN-USB FD adapter */
1854     +static const struct can_bittiming_const pcan_usb_fd_const = {
1855     + .name = "pcan_usb_fd",
1856     + .tseg1_min = 1,
1857     + .tseg1_max = 64,
1858     + .tseg2_min = 1,
1859     + .tseg2_max = 16,
1860     + .sjw_max = 16,
1861     + .brp_min = 1,
1862     + .brp_max = 1024,
1863     + .brp_inc = 1,
1864     +};
1865     +
1866     +static const struct can_bittiming_const pcan_usb_fd_data_const = {
1867     + .name = "pcan_usb_fd",
1868     + .tseg1_min = 1,
1869     + .tseg1_max = 16,
1870     + .tseg2_min = 1,
1871     + .tseg2_max = 8,
1872     + .sjw_max = 4,
1873     + .brp_min = 1,
1874     + .brp_max = 1024,
1875     + .brp_inc = 1,
1876     +};
1877     +
1878     const struct peak_usb_adapter pcan_usb_fd = {
1879     .name = "PCAN-USB FD",
1880     .device_id = PCAN_USBFD_PRODUCT_ID,
1881     @@ -999,28 +1023,8 @@ const struct peak_usb_adapter pcan_usb_fd = {
1882     .clock = {
1883     .freq = PCAN_UFD_CRYSTAL_HZ,
1884     },
1885     - .bittiming_const = {
1886     - .name = "pcan_usb_fd",
1887     - .tseg1_min = 1,
1888     - .tseg1_max = 64,
1889     - .tseg2_min = 1,
1890     - .tseg2_max = 16,
1891     - .sjw_max = 16,
1892     - .brp_min = 1,
1893     - .brp_max = 1024,
1894     - .brp_inc = 1,
1895     - },
1896     - .data_bittiming_const = {
1897     - .name = "pcan_usb_fd",
1898     - .tseg1_min = 1,
1899     - .tseg1_max = 16,
1900     - .tseg2_min = 1,
1901     - .tseg2_max = 8,
1902     - .sjw_max = 4,
1903     - .brp_min = 1,
1904     - .brp_max = 1024,
1905     - .brp_inc = 1,
1906     - },
1907     + .bittiming_const = &pcan_usb_fd_const,
1908     + .data_bittiming_const = &pcan_usb_fd_data_const,
1909    
1910     /* size of device private data */
1911     .sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1912     @@ -1058,6 +1062,30 @@ const struct peak_usb_adapter pcan_usb_fd = {
1913     };
1914    
1915     /* describes the PCAN-USB Pro FD adapter */
1916     +static const struct can_bittiming_const pcan_usb_pro_fd_const = {
1917     + .name = "pcan_usb_pro_fd",
1918     + .tseg1_min = 1,
1919     + .tseg1_max = 64,
1920     + .tseg2_min = 1,
1921     + .tseg2_max = 16,
1922     + .sjw_max = 16,
1923     + .brp_min = 1,
1924     + .brp_max = 1024,
1925     + .brp_inc = 1,
1926     +};
1927     +
1928     +static const struct can_bittiming_const pcan_usb_pro_fd_data_const = {
1929     + .name = "pcan_usb_pro_fd",
1930     + .tseg1_min = 1,
1931     + .tseg1_max = 16,
1932     + .tseg2_min = 1,
1933     + .tseg2_max = 8,
1934     + .sjw_max = 4,
1935     + .brp_min = 1,
1936     + .brp_max = 1024,
1937     + .brp_inc = 1,
1938     +};
1939     +
1940     const struct peak_usb_adapter pcan_usb_pro_fd = {
1941     .name = "PCAN-USB Pro FD",
1942     .device_id = PCAN_USBPROFD_PRODUCT_ID,
1943     @@ -1067,28 +1095,8 @@ const struct peak_usb_adapter pcan_usb_pro_fd = {
1944     .clock = {
1945     .freq = PCAN_UFD_CRYSTAL_HZ,
1946     },
1947     - .bittiming_const = {
1948     - .name = "pcan_usb_pro_fd",
1949     - .tseg1_min = 1,
1950     - .tseg1_max = 64,
1951     - .tseg2_min = 1,
1952     - .tseg2_max = 16,
1953     - .sjw_max = 16,
1954     - .brp_min = 1,
1955     - .brp_max = 1024,
1956     - .brp_inc = 1,
1957     - },
1958     - .data_bittiming_const = {
1959     - .name = "pcan_usb_pro_fd",
1960     - .tseg1_min = 1,
1961     - .tseg1_max = 16,
1962     - .tseg2_min = 1,
1963     - .tseg2_max = 8,
1964     - .sjw_max = 4,
1965     - .brp_min = 1,
1966     - .brp_max = 1024,
1967     - .brp_inc = 1,
1968     - },
1969     + .bittiming_const = &pcan_usb_pro_fd_const,
1970     + .data_bittiming_const = &pcan_usb_pro_fd_data_const,
1971    
1972     /* size of device private data */
1973     .sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
1974     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
1975     index dec51717635e..a5ad2e6aa73a 100644
1976     --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
1977     +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
1978     @@ -1004,6 +1004,18 @@ int pcan_usb_pro_probe(struct usb_interface *intf)
1979     /*
1980     * describe the PCAN-USB Pro adapter
1981     */
1982     +static const struct can_bittiming_const pcan_usb_pro_const = {
1983     + .name = "pcan_usb_pro",
1984     + .tseg1_min = 1,
1985     + .tseg1_max = 16,
1986     + .tseg2_min = 1,
1987     + .tseg2_max = 8,
1988     + .sjw_max = 4,
1989     + .brp_min = 1,
1990     + .brp_max = 1024,
1991     + .brp_inc = 1,
1992     +};
1993     +
1994     const struct peak_usb_adapter pcan_usb_pro = {
1995     .name = "PCAN-USB Pro",
1996     .device_id = PCAN_USBPRO_PRODUCT_ID,
1997     @@ -1012,17 +1024,7 @@ const struct peak_usb_adapter pcan_usb_pro = {
1998     .clock = {
1999     .freq = PCAN_USBPRO_CRYSTAL_HZ,
2000     },
2001     - .bittiming_const = {
2002     - .name = "pcan_usb_pro",
2003     - .tseg1_min = 1,
2004     - .tseg1_max = 16,
2005     - .tseg2_min = 1,
2006     - .tseg2_max = 8,
2007     - .sjw_max = 4,
2008     - .brp_min = 1,
2009     - .brp_max = 1024,
2010     - .brp_inc = 1,
2011     - },
2012     + .bittiming_const = &pcan_usb_pro_const,
2013    
2014     /* size of device private data */
2015     .sizeof_dev_private = sizeof(struct pcan_usb_pro_device),
2016     diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
2017     index 37e6a6f91487..699a4802835f 100644
2018     --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
2019     +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
2020     @@ -457,10 +457,16 @@ static void iwl_pcie_apm_stop(struct iwl_trans *trans, bool op_mode_leave)
2021     if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000)
2022     iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG,
2023     APMG_PCIDEV_STT_VAL_WAKE_ME);
2024     - else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000)
2025     + else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
2026     + iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
2027     + CSR_RESET_LINK_PWR_MGMT_DISABLED);
2028     iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
2029     CSR_HW_IF_CONFIG_REG_PREPARE |
2030     CSR_HW_IF_CONFIG_REG_ENABLE_PME);
2031     + mdelay(1);
2032     + iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
2033     + CSR_RESET_LINK_PWR_MGMT_DISABLED);
2034     + }
2035     mdelay(5);
2036     }
2037    
2038     @@ -555,6 +561,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
2039     if (ret >= 0)
2040     return 0;
2041    
2042     + iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
2043     + CSR_RESET_LINK_PWR_MGMT_DISABLED);
2044     + msleep(1);
2045     +
2046     for (iter = 0; iter < 10; iter++) {
2047     /* If HW is not ready, prepare the conditions to check again */
2048     iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
2049     @@ -562,8 +572,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
2050    
2051     do {
2052     ret = iwl_pcie_set_hw_ready(trans);
2053     - if (ret >= 0)
2054     - return 0;
2055     + if (ret >= 0) {
2056     + ret = 0;
2057     + goto out;
2058     + }
2059    
2060     usleep_range(200, 1000);
2061     t += 200;
2062     @@ -573,6 +585,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
2063    
2064     IWL_ERR(trans, "Couldn't prepare the card\n");
2065    
2066     +out:
2067     + iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
2068     + CSR_RESET_LINK_PWR_MGMT_DISABLED);
2069     +
2070     return ret;
2071     }
2072    
2073     diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
2074     index b6cc9ff47fc2..1c6788aecc62 100644
2075     --- a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
2076     +++ b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
2077     @@ -172,6 +172,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
2078     (struct rsi_91x_sdiodev *)adapter->rsi_dev;
2079     u32 len;
2080     u32 num_blocks;
2081     + const u8 *fw;
2082     const struct firmware *fw_entry = NULL;
2083     u32 block_size = dev->tx_blk_size;
2084     int status = 0;
2085     @@ -200,6 +201,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
2086     return status;
2087     }
2088    
2089     + /* Copy firmware into DMA-accessible memory */
2090     + fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
2091     + if (!fw)
2092     + return -ENOMEM;
2093     len = fw_entry->size;
2094    
2095     if (len % 4)
2096     @@ -210,7 +215,8 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
2097     rsi_dbg(INIT_ZONE, "%s: Instruction size:%d\n", __func__, len);
2098     rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
2099    
2100     - status = rsi_copy_to_card(common, fw_entry->data, len, num_blocks);
2101     + status = rsi_copy_to_card(common, fw, len, num_blocks);
2102     + kfree(fw);
2103     release_firmware(fw_entry);
2104     return status;
2105     }
2106     diff --git a/drivers/net/wireless/rsi/rsi_91x_usb_ops.c b/drivers/net/wireless/rsi/rsi_91x_usb_ops.c
2107     index 1106ce76707e..30c2cf7fa93b 100644
2108     --- a/drivers/net/wireless/rsi/rsi_91x_usb_ops.c
2109     +++ b/drivers/net/wireless/rsi/rsi_91x_usb_ops.c
2110     @@ -146,7 +146,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
2111     return status;
2112     }
2113    
2114     + /* Copy firmware into DMA-accessible memory */
2115     fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
2116     + if (!fw)
2117     + return -ENOMEM;
2118     len = fw_entry->size;
2119    
2120     if (len % 4)
2121     @@ -158,6 +161,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
2122     rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
2123    
2124     status = rsi_copy_to_card(common, fw, len, num_blocks);
2125     + kfree(fw);
2126     release_firmware(fw_entry);
2127     return status;
2128     }
2129     diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c
2130     index 3b3a88b53b11..585d0883c7e5 100644
2131     --- a/drivers/net/wireless/rtlwifi/core.c
2132     +++ b/drivers/net/wireless/rtlwifi/core.c
2133     @@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct ieee80211_hw *hw,
2134     {
2135     struct rtl_priv *rtlpriv = rtl_priv(hw);
2136     struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
2137     + struct rtl_tcb_desc tcb_desc;
2138    
2139     - if (skb)
2140     - rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL);
2141     + if (skb) {
2142     + memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
2143     + rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, &tcb_desc);
2144     + }
2145     }
2146    
2147     static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
2148     diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/rtlwifi/rtl8723be/sw.c
2149     index 1017f02d7bf7..7bf88d9dcdc3 100644
2150     --- a/drivers/net/wireless/rtlwifi/rtl8723be/sw.c
2151     +++ b/drivers/net/wireless/rtlwifi/rtl8723be/sw.c
2152     @@ -385,6 +385,7 @@ module_param_named(debug, rtl8723be_mod_params.debug, int, 0444);
2153     module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
2154     module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444);
2155     module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444);
2156     +module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444);
2157     module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog,
2158     bool, 0444);
2159     MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
2160     diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
2161     index 73de4efcbe6e..944f50015ed0 100644
2162     --- a/drivers/pci/Kconfig
2163     +++ b/drivers/pci/Kconfig
2164     @@ -2,7 +2,7 @@
2165     # PCI configuration
2166     #
2167     config PCI_BUS_ADDR_T_64BIT
2168     - def_bool y if (ARCH_DMA_ADDR_T_64BIT || 64BIT)
2169     + def_bool y if (ARCH_DMA_ADDR_T_64BIT || (64BIT && !PARISC))
2170     depends on PCI
2171    
2172     config PCI_MSI
2173     diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h
2174     index 26270c351624..ce129e595b55 100644
2175     --- a/drivers/scsi/fnic/fnic.h
2176     +++ b/drivers/scsi/fnic/fnic.h
2177     @@ -39,7 +39,7 @@
2178    
2179     #define DRV_NAME "fnic"
2180     #define DRV_DESCRIPTION "Cisco FCoE HBA Driver"
2181     -#define DRV_VERSION "1.6.0.17"
2182     +#define DRV_VERSION "1.6.0.17a"
2183     #define PFX DRV_NAME ": "
2184     #define DFX DRV_NAME "%d: "
2185    
2186     diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
2187     index 155b286f1a9d..25436cd2860c 100644
2188     --- a/drivers/scsi/fnic/fnic_scsi.c
2189     +++ b/drivers/scsi/fnic/fnic_scsi.c
2190     @@ -425,6 +425,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_
2191     unsigned long ptr;
2192     struct fc_rport_priv *rdata;
2193     spinlock_t *io_lock = NULL;
2194     + int io_lock_acquired = 0;
2195    
2196     if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_IO_BLOCKED)))
2197     return SCSI_MLQUEUE_HOST_BUSY;
2198     @@ -518,6 +519,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_
2199     spin_lock_irqsave(io_lock, flags);
2200    
2201     /* initialize rest of io_req */
2202     + io_lock_acquired = 1;
2203     io_req->port_id = rport->port_id;
2204     io_req->start_time = jiffies;
2205     CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING;
2206     @@ -571,7 +573,7 @@ out:
2207     (((u64)CMD_FLAGS(sc) >> 32) | CMD_STATE(sc)));
2208    
2209     /* if only we issued IO, will we have the io lock */
2210     - if (CMD_FLAGS(sc) & FNIC_IO_INITIALIZED)
2211     + if (io_lock_acquired)
2212     spin_unlock_irqrestore(io_lock, flags);
2213    
2214     atomic_dec(&fnic->in_flight);
2215     diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c
2216     index 1b3a09473452..30f9ef0c0d4f 100644
2217     --- a/drivers/scsi/libfc/fc_exch.c
2218     +++ b/drivers/scsi/libfc/fc_exch.c
2219     @@ -733,8 +733,6 @@ static bool fc_invoke_resp(struct fc_exch *ep, struct fc_seq *sp,
2220     if (resp) {
2221     resp(sp, fp, arg);
2222     res = true;
2223     - } else if (!IS_ERR(fp)) {
2224     - fc_frame_free(fp);
2225     }
2226    
2227     spin_lock_bh(&ep->ex_lock);
2228     @@ -1596,7 +1594,8 @@ static void fc_exch_recv_seq_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
2229     * If new exch resp handler is valid then call that
2230     * first.
2231     */
2232     - fc_invoke_resp(ep, sp, fp);
2233     + if (!fc_invoke_resp(ep, sp, fp))
2234     + fc_frame_free(fp);
2235    
2236     fc_exch_release(ep);
2237     return;
2238     @@ -1695,7 +1694,8 @@ static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp)
2239     fc_exch_hold(ep);
2240     if (!rc)
2241     fc_exch_delete(ep);
2242     - fc_invoke_resp(ep, sp, fp);
2243     + if (!fc_invoke_resp(ep, sp, fp))
2244     + fc_frame_free(fp);
2245     if (has_rec)
2246     fc_exch_timer_set(ep, ep->r_a_tov);
2247     fc_exch_release(ep);
2248     diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
2249     index c6795941b45d..2d5909c4685c 100644
2250     --- a/drivers/scsi/libfc/fc_fcp.c
2251     +++ b/drivers/scsi/libfc/fc_fcp.c
2252     @@ -1039,11 +1039,26 @@ restart:
2253     fc_fcp_pkt_hold(fsp);
2254     spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
2255    
2256     - if (!fc_fcp_lock_pkt(fsp)) {
2257     + spin_lock_bh(&fsp->scsi_pkt_lock);
2258     + if (!(fsp->state & FC_SRB_COMPL)) {
2259     + fsp->state |= FC_SRB_COMPL;
2260     + /*
2261     + * TODO: dropping scsi_pkt_lock and then reacquiring
2262     + * again around fc_fcp_cleanup_cmd() is required,
2263     + * since fc_fcp_cleanup_cmd() calls into
2264     + * fc_seq_set_resp() and that func preempts cpu using
2265     + * schedule. May be schedule and related code should be
2266     + * removed instead of unlocking here to avoid scheduling
2267     + * while atomic bug.
2268     + */
2269     + spin_unlock_bh(&fsp->scsi_pkt_lock);
2270     +
2271     fc_fcp_cleanup_cmd(fsp, error);
2272     +
2273     + spin_lock_bh(&fsp->scsi_pkt_lock);
2274     fc_io_compl(fsp);
2275     - fc_fcp_unlock_pkt(fsp);
2276     }
2277     + spin_unlock_bh(&fsp->scsi_pkt_lock);
2278    
2279     fc_fcp_pkt_release(fsp);
2280     spin_lock_irqsave(&si->scsi_queue_lock, flags);
2281     diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
2282     index 8053f24f0349..98d9bb6ff725 100644
2283     --- a/drivers/scsi/libiscsi.c
2284     +++ b/drivers/scsi/libiscsi.c
2285     @@ -2941,10 +2941,10 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
2286     {
2287     struct iscsi_conn *conn = cls_conn->dd_data;
2288     struct iscsi_session *session = conn->session;
2289     - unsigned long flags;
2290    
2291     del_timer_sync(&conn->transport_timer);
2292    
2293     + mutex_lock(&session->eh_mutex);
2294     spin_lock_bh(&session->frwd_lock);
2295     conn->c_stage = ISCSI_CONN_CLEANUP_WAIT;
2296     if (session->leadconn == conn) {
2297     @@ -2956,28 +2956,6 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
2298     }
2299     spin_unlock_bh(&session->frwd_lock);
2300    
2301     - /*
2302     - * Block until all in-progress commands for this connection
2303     - * time out or fail.
2304     - */
2305     - for (;;) {
2306     - spin_lock_irqsave(session->host->host_lock, flags);
2307     - if (!atomic_read(&session->host->host_busy)) { /* OK for ERL == 0 */
2308     - spin_unlock_irqrestore(session->host->host_lock, flags);
2309     - break;
2310     - }
2311     - spin_unlock_irqrestore(session->host->host_lock, flags);
2312     - msleep_interruptible(500);
2313     - iscsi_conn_printk(KERN_INFO, conn, "iscsi conn_destroy(): "
2314     - "host_busy %d host_failed %d\n",
2315     - atomic_read(&session->host->host_busy),
2316     - session->host->host_failed);
2317     - /*
2318     - * force eh_abort() to unblock
2319     - */
2320     - wake_up(&conn->ehwait);
2321     - }
2322     -
2323     /* flush queued up work because we free the connection below */
2324     iscsi_suspend_tx(conn);
2325    
2326     @@ -2994,6 +2972,7 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
2327     if (session->leadconn == conn)
2328     session->leadconn = NULL;
2329     spin_unlock_bh(&session->frwd_lock);
2330     + mutex_unlock(&session->eh_mutex);
2331    
2332     iscsi_destroy_conn(cls_conn);
2333     }
2334     diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
2335     index 59c31bf88d92..ce6c770d74d5 100644
2336     --- a/drivers/scsi/scsi_error.c
2337     +++ b/drivers/scsi/scsi_error.c
2338     @@ -26,7 +26,6 @@
2339     #include <linux/blkdev.h>
2340     #include <linux/delay.h>
2341     #include <linux/jiffies.h>
2342     -#include <asm/unaligned.h>
2343    
2344     #include <scsi/scsi.h>
2345     #include <scsi/scsi_cmnd.h>
2346     @@ -2587,33 +2586,3 @@ void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq)
2347     }
2348     }
2349     EXPORT_SYMBOL(scsi_build_sense_buffer);
2350     -
2351     -/**
2352     - * scsi_set_sense_information - set the information field in a
2353     - * formatted sense data buffer
2354     - * @buf: Where to build sense data
2355     - * @info: 64-bit information value to be set
2356     - *
2357     - **/
2358     -void scsi_set_sense_information(u8 *buf, u64 info)
2359     -{
2360     - if ((buf[0] & 0x7f) == 0x72) {
2361     - u8 *ucp, len;
2362     -
2363     - len = buf[7];
2364     - ucp = (char *)scsi_sense_desc_find(buf, len + 8, 0);
2365     - if (!ucp) {
2366     - buf[7] = len + 0xa;
2367     - ucp = buf + 8 + len;
2368     - }
2369     - ucp[0] = 0;
2370     - ucp[1] = 0xa;
2371     - ucp[2] = 0x80; /* Valid bit */
2372     - ucp[3] = 0;
2373     - put_unaligned_be64(info, &ucp[4]);
2374     - } else if ((buf[0] & 0x7f) == 0x70) {
2375     - buf[0] |= 0x80;
2376     - put_unaligned_be64(info, &buf[3]);
2377     - }
2378     -}
2379     -EXPORT_SYMBOL(scsi_set_sense_information);
2380     diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c
2381     index 9e43ae1d2163..e4b799837948 100644
2382     --- a/drivers/scsi/scsi_pm.c
2383     +++ b/drivers/scsi/scsi_pm.c
2384     @@ -217,15 +217,15 @@ static int sdev_runtime_suspend(struct device *dev)
2385     {
2386     const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
2387     struct scsi_device *sdev = to_scsi_device(dev);
2388     - int err;
2389     + int err = 0;
2390    
2391     - err = blk_pre_runtime_suspend(sdev->request_queue);
2392     - if (err)
2393     - return err;
2394     - if (pm && pm->runtime_suspend)
2395     + if (pm && pm->runtime_suspend) {
2396     + err = blk_pre_runtime_suspend(sdev->request_queue);
2397     + if (err)
2398     + return err;
2399     err = pm->runtime_suspend(dev);
2400     - blk_post_runtime_suspend(sdev->request_queue, err);
2401     -
2402     + blk_post_runtime_suspend(sdev->request_queue, err);
2403     + }
2404     return err;
2405     }
2406    
2407     @@ -248,11 +248,11 @@ static int sdev_runtime_resume(struct device *dev)
2408     const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
2409     int err = 0;
2410    
2411     - blk_pre_runtime_resume(sdev->request_queue);
2412     - if (pm && pm->runtime_resume)
2413     + if (pm && pm->runtime_resume) {
2414     + blk_pre_runtime_resume(sdev->request_queue);
2415     err = pm->runtime_resume(dev);
2416     - blk_post_runtime_resume(sdev->request_queue, err);
2417     -
2418     + blk_post_runtime_resume(sdev->request_queue, err);
2419     + }
2420     return err;
2421     }
2422    
2423     diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2424     index 7f9d65fe4fd9..11ea52b2c36b 100644
2425     --- a/drivers/scsi/sd.c
2426     +++ b/drivers/scsi/sd.c
2427     @@ -2770,9 +2770,9 @@ static int sd_revalidate_disk(struct gendisk *disk)
2428     max_xfer = sdkp->max_xfer_blocks;
2429     max_xfer <<= ilog2(sdp->sector_size) - 9;
2430    
2431     - max_xfer = min_not_zero(queue_max_hw_sectors(sdkp->disk->queue),
2432     - max_xfer);
2433     - blk_queue_max_hw_sectors(sdkp->disk->queue, max_xfer);
2434     + sdkp->disk->queue->limits.max_sectors =
2435     + min_not_zero(queue_max_hw_sectors(sdkp->disk->queue), max_xfer);
2436     +
2437     set_capacity(disk, sdkp->capacity);
2438     sd_config_write_same(sdkp);
2439     kfree(buffer);
2440     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2441     index 305a5cbc099a..0ab6e2efd28c 100644
2442     --- a/drivers/target/iscsi/iscsi_target.c
2443     +++ b/drivers/target/iscsi/iscsi_target.c
2444     @@ -968,9 +968,9 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
2445     cmd->cmd_flags |= ICF_NON_IMMEDIATE_UNSOLICITED_DATA;
2446    
2447     conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt;
2448     - if (hdr->flags & ISCSI_FLAG_CMD_READ) {
2449     + if (hdr->flags & ISCSI_FLAG_CMD_READ)
2450     cmd->targ_xfer_tag = session_get_next_ttt(conn->sess);
2451     - } else if (hdr->flags & ISCSI_FLAG_CMD_WRITE)
2452     + else
2453     cmd->targ_xfer_tag = 0xFFFFFFFF;
2454     cmd->cmd_sn = be32_to_cpu(hdr->cmdsn);
2455     cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn);
2456     diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
2457     index 96b2011d25f3..658be6cc3db6 100644
2458     --- a/drivers/xen/xenbus/xenbus_client.c
2459     +++ b/drivers/xen/xenbus/xenbus_client.c
2460     @@ -814,8 +814,10 @@ static int xenbus_unmap_ring_vfree_hvm(struct xenbus_device *dev, void *vaddr)
2461    
2462     rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
2463     addrs);
2464     - if (!rv)
2465     + if (!rv) {
2466     vunmap(vaddr);
2467     + free_xenballooned_pages(node->nr_handles, node->hvm.pages);
2468     + }
2469     else
2470     WARN(1, "Leaking %p, size %u page(s)\n", vaddr,
2471     node->nr_handles);
2472     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
2473     index 45c39a37f924..8bc073d297db 100644
2474     --- a/include/drm/drm_pciids.h
2475     +++ b/include/drm/drm_pciids.h
2476     @@ -172,6 +172,7 @@
2477     {0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
2478     {0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
2479     {0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
2480     + {0x1002, 0x6617, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
2481     {0x1002, 0x6620, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
2482     {0x1002, 0x6621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
2483     {0x1002, 0x6623, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
2484     diff --git a/include/linux/ata.h b/include/linux/ata.h
2485     index 533dbb6428f5..5dfbcd8887bb 100644
2486     --- a/include/linux/ata.h
2487     +++ b/include/linux/ata.h
2488     @@ -385,8 +385,6 @@ enum {
2489     SATA_SSP = 0x06, /* Software Settings Preservation */
2490     SATA_DEVSLP = 0x09, /* Device Sleep */
2491    
2492     - SETFEATURE_SENSE_DATA = 0xC3, /* Sense Data Reporting feature */
2493     -
2494     /* feature values for SET_MAX */
2495     ATA_SET_MAX_ADDR = 0x00,
2496     ATA_SET_MAX_PASSWD = 0x01,
2497     @@ -530,8 +528,6 @@ struct ata_bmdma_prd {
2498     #define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
2499     #define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))
2500     #define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8))
2501     -#define ata_id_has_ncq_autosense(id) \
2502     - ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7))
2503    
2504     static inline bool ata_id_has_hipm(const u16 *id)
2505     {
2506     @@ -710,20 +706,6 @@ static inline bool ata_id_has_read_log_dma_ext(const u16 *id)
2507     return id[ATA_ID_COMMAND_SET_3] & (1 << 3);
2508     }
2509    
2510     -static inline bool ata_id_has_sense_reporting(const u16 *id)
2511     -{
2512     - if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
2513     - return false;
2514     - return id[ATA_ID_COMMAND_SET_3] & (1 << 6);
2515     -}
2516     -
2517     -static inline bool ata_id_sense_reporting_enabled(const u16 *id)
2518     -{
2519     - if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
2520     - return false;
2521     - return id[ATA_ID_COMMAND_SET_4] & (1 << 6);
2522     -}
2523     -
2524     /**
2525     * ata_id_major_version - get ATA level of drive
2526     * @id: Identify data
2527     diff --git a/include/linux/irq.h b/include/linux/irq.h
2528     index 62c6901cab55..3532dca843f4 100644
2529     --- a/include/linux/irq.h
2530     +++ b/include/linux/irq.h
2531     @@ -467,6 +467,7 @@ extern int irq_chip_set_affinity_parent(struct irq_data *data,
2532     const struct cpumask *dest,
2533     bool force);
2534     extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on);
2535     +extern int irq_chip_set_type_parent(struct irq_data *data, unsigned int type);
2536     #endif
2537    
2538     /* Handling of unhandled and spurious interrupts: */
2539     diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h
2540     index 5a4bb5bb66b3..1e1421b06565 100644
2541     --- a/include/scsi/scsi_eh.h
2542     +++ b/include/scsi/scsi_eh.h
2543     @@ -59,7 +59,6 @@ extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
2544     u64 * info_out);
2545    
2546     extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq);
2547     -extern void scsi_set_sense_information(u8 *buf, u64 info);
2548    
2549     extern int scsi_ioctl_reset(struct scsi_device *, int __user *);
2550    
2551     diff --git a/ipc/sem.c b/ipc/sem.c
2552     index d1a6edd17eba..c50aa5755c62 100644
2553     --- a/ipc/sem.c
2554     +++ b/ipc/sem.c
2555     @@ -253,6 +253,16 @@ static void sem_rcu_free(struct rcu_head *head)
2556     }
2557    
2558     /*
2559     + * spin_unlock_wait() and !spin_is_locked() are not memory barriers, they
2560     + * are only control barriers.
2561     + * The code must pair with spin_unlock(&sem->lock) or
2562     + * spin_unlock(&sem_perm.lock), thus just the control barrier is insufficient.
2563     + *
2564     + * smp_rmb() is sufficient, as writes cannot pass the control barrier.
2565     + */
2566     +#define ipc_smp_acquire__after_spin_is_unlocked() smp_rmb()
2567     +
2568     +/*
2569     * Wait until all currently ongoing simple ops have completed.
2570     * Caller must own sem_perm.lock.
2571     * New simple ops cannot start, because simple ops first check
2572     @@ -275,6 +285,7 @@ static void sem_wait_array(struct sem_array *sma)
2573     sem = sma->sem_base + i;
2574     spin_unlock_wait(&sem->lock);
2575     }
2576     + ipc_smp_acquire__after_spin_is_unlocked();
2577     }
2578    
2579     /*
2580     @@ -327,13 +338,12 @@ static inline int sem_lock(struct sem_array *sma, struct sembuf *sops,
2581     /* Then check that the global lock is free */
2582     if (!spin_is_locked(&sma->sem_perm.lock)) {
2583     /*
2584     - * The ipc object lock check must be visible on all
2585     - * cores before rechecking the complex count. Otherwise
2586     - * we can race with another thread that does:
2587     + * We need a memory barrier with acquire semantics,
2588     + * otherwise we can race with another thread that does:
2589     * complex_count++;
2590     * spin_unlock(sem_perm.lock);
2591     */
2592     - smp_rmb();
2593     + ipc_smp_acquire__after_spin_is_unlocked();
2594    
2595     /*
2596     * Now repeat the test of complex_count:
2597     @@ -2074,17 +2084,28 @@ void exit_sem(struct task_struct *tsk)
2598     rcu_read_lock();
2599     un = list_entry_rcu(ulp->list_proc.next,
2600     struct sem_undo, list_proc);
2601     - if (&un->list_proc == &ulp->list_proc)
2602     - semid = -1;
2603     - else
2604     - semid = un->semid;
2605     + if (&un->list_proc == &ulp->list_proc) {
2606     + /*
2607     + * We must wait for freeary() before freeing this ulp,
2608     + * in case we raced with last sem_undo. There is a small
2609     + * possibility where we exit while freeary() didn't
2610     + * finish unlocking sem_undo_list.
2611     + */
2612     + spin_unlock_wait(&ulp->lock);
2613     + rcu_read_unlock();
2614     + break;
2615     + }
2616     + spin_lock(&ulp->lock);
2617     + semid = un->semid;
2618     + spin_unlock(&ulp->lock);
2619    
2620     + /* exit_sem raced with IPC_RMID, nothing to do */
2621     if (semid == -1) {
2622     rcu_read_unlock();
2623     - break;
2624     + continue;
2625     }
2626    
2627     - sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, un->semid);
2628     + sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, semid);
2629     /* exit_sem raced with IPC_RMID, nothing to do */
2630     if (IS_ERR(sma)) {
2631     rcu_read_unlock();
2632     diff --git a/kernel/cpuset.c b/kernel/cpuset.c
2633     index ee14e3a35a29..f0acff0f66c9 100644
2634     --- a/kernel/cpuset.c
2635     +++ b/kernel/cpuset.c
2636     @@ -1223,7 +1223,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs,
2637     spin_unlock_irq(&callback_lock);
2638    
2639     /* use trialcs->mems_allowed as a temp variable */
2640     - update_nodemasks_hier(cs, &cs->mems_allowed);
2641     + update_nodemasks_hier(cs, &trialcs->mems_allowed);
2642     done:
2643     return retval;
2644     }
2645     diff --git a/kernel/events/core.c b/kernel/events/core.c
2646     index 0ceb386777ae..94817491407b 100644
2647     --- a/kernel/events/core.c
2648     +++ b/kernel/events/core.c
2649     @@ -1886,8 +1886,6 @@ event_sched_in(struct perf_event *event,
2650    
2651     perf_pmu_disable(event->pmu);
2652    
2653     - event->tstamp_running += tstamp - event->tstamp_stopped;
2654     -
2655     perf_set_shadow_time(event, ctx, tstamp);
2656    
2657     perf_log_itrace_start(event);
2658     @@ -1899,6 +1897,8 @@ event_sched_in(struct perf_event *event,
2659     goto out;
2660     }
2661    
2662     + event->tstamp_running += tstamp - event->tstamp_stopped;
2663     +
2664     if (!is_software_event(event))
2665     cpuctx->active_oncpu++;
2666     if (!ctx->nr_active++)
2667     @@ -3976,28 +3976,21 @@ static void perf_event_for_each(struct perf_event *event,
2668     perf_event_for_each_child(sibling, func);
2669     }
2670    
2671     -static int perf_event_period(struct perf_event *event, u64 __user *arg)
2672     -{
2673     - struct perf_event_context *ctx = event->ctx;
2674     - int ret = 0, active;
2675     +struct period_event {
2676     + struct perf_event *event;
2677     u64 value;
2678     +};
2679    
2680     - if (!is_sampling_event(event))
2681     - return -EINVAL;
2682     -
2683     - if (copy_from_user(&value, arg, sizeof(value)))
2684     - return -EFAULT;
2685     -
2686     - if (!value)
2687     - return -EINVAL;
2688     +static int __perf_event_period(void *info)
2689     +{
2690     + struct period_event *pe = info;
2691     + struct perf_event *event = pe->event;
2692     + struct perf_event_context *ctx = event->ctx;
2693     + u64 value = pe->value;
2694     + bool active;
2695    
2696     - raw_spin_lock_irq(&ctx->lock);
2697     + raw_spin_lock(&ctx->lock);
2698     if (event->attr.freq) {
2699     - if (value > sysctl_perf_event_sample_rate) {
2700     - ret = -EINVAL;
2701     - goto unlock;
2702     - }
2703     -
2704     event->attr.sample_freq = value;
2705     } else {
2706     event->attr.sample_period = value;
2707     @@ -4016,11 +4009,53 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg)
2708     event->pmu->start(event, PERF_EF_RELOAD);
2709     perf_pmu_enable(ctx->pmu);
2710     }
2711     + raw_spin_unlock(&ctx->lock);
2712    
2713     -unlock:
2714     + return 0;
2715     +}
2716     +
2717     +static int perf_event_period(struct perf_event *event, u64 __user *arg)
2718     +{
2719     + struct period_event pe = { .event = event, };
2720     + struct perf_event_context *ctx = event->ctx;
2721     + struct task_struct *task;
2722     + u64 value;
2723     +
2724     + if (!is_sampling_event(event))
2725     + return -EINVAL;
2726     +
2727     + if (copy_from_user(&value, arg, sizeof(value)))
2728     + return -EFAULT;
2729     +
2730     + if (!value)
2731     + return -EINVAL;
2732     +
2733     + if (event->attr.freq && value > sysctl_perf_event_sample_rate)
2734     + return -EINVAL;
2735     +
2736     + task = ctx->task;
2737     + pe.value = value;
2738     +
2739     + if (!task) {
2740     + cpu_function_call(event->cpu, __perf_event_period, &pe);
2741     + return 0;
2742     + }
2743     +
2744     +retry:
2745     + if (!task_function_call(task, __perf_event_period, &pe))
2746     + return 0;
2747     +
2748     + raw_spin_lock_irq(&ctx->lock);
2749     + if (ctx->is_active) {
2750     + raw_spin_unlock_irq(&ctx->lock);
2751     + task = ctx->task;
2752     + goto retry;
2753     + }
2754     +
2755     + __perf_event_period(&pe);
2756     raw_spin_unlock_irq(&ctx->lock);
2757    
2758     - return ret;
2759     + return 0;
2760     }
2761    
2762     static const struct file_operations perf_fops;
2763     @@ -4766,12 +4801,20 @@ static const struct file_operations perf_fops = {
2764     * to user-space before waking everybody up.
2765     */
2766    
2767     +static inline struct fasync_struct **perf_event_fasync(struct perf_event *event)
2768     +{
2769     + /* only the parent has fasync state */
2770     + if (event->parent)
2771     + event = event->parent;
2772     + return &event->fasync;
2773     +}
2774     +
2775     void perf_event_wakeup(struct perf_event *event)
2776     {
2777     ring_buffer_wakeup(event);
2778    
2779     if (event->pending_kill) {
2780     - kill_fasync(&event->fasync, SIGIO, event->pending_kill);
2781     + kill_fasync(perf_event_fasync(event), SIGIO, event->pending_kill);
2782     event->pending_kill = 0;
2783     }
2784     }
2785     @@ -6117,7 +6160,7 @@ static int __perf_event_overflow(struct perf_event *event,
2786     else
2787     perf_event_output(event, data, regs);
2788    
2789     - if (event->fasync && event->pending_kill) {
2790     + if (*perf_event_fasync(event) && event->pending_kill) {
2791     event->pending_wakeup = 1;
2792     irq_work_queue(&event->pending);
2793     }
2794     diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
2795     index 725c416085e3..a7604c81168e 100644
2796     --- a/kernel/events/ring_buffer.c
2797     +++ b/kernel/events/ring_buffer.c
2798     @@ -547,11 +547,13 @@ static void __rb_free_aux(struct ring_buffer *rb)
2799     rb->aux_priv = NULL;
2800     }
2801    
2802     - for (pg = 0; pg < rb->aux_nr_pages; pg++)
2803     - rb_free_aux_page(rb, pg);
2804     + if (rb->aux_nr_pages) {
2805     + for (pg = 0; pg < rb->aux_nr_pages; pg++)
2806     + rb_free_aux_page(rb, pg);
2807    
2808     - kfree(rb->aux_pages);
2809     - rb->aux_nr_pages = 0;
2810     + kfree(rb->aux_pages);
2811     + rb->aux_nr_pages = 0;
2812     + }
2813     }
2814    
2815     void rb_free_aux(struct ring_buffer *rb)
2816     diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
2817     index eb9a4ea394ab..94bbd8fee90d 100644
2818     --- a/kernel/irq/chip.c
2819     +++ b/kernel/irq/chip.c
2820     @@ -934,6 +934,23 @@ int irq_chip_set_affinity_parent(struct irq_data *data,
2821     }
2822    
2823     /**
2824     + * irq_chip_set_type_parent - Set IRQ type on the parent interrupt
2825     + * @data: Pointer to interrupt specific data
2826     + * @type: IRQ_TYPE_{LEVEL,EDGE}_* value - see include/linux/irq.h
2827     + *
2828     + * Conditional, as the underlying parent chip might not implement it.
2829     + */
2830     +int irq_chip_set_type_parent(struct irq_data *data, unsigned int type)
2831     +{
2832     + data = data->parent_data;
2833     +
2834     + if (data->chip->irq_set_type)
2835     + return data->chip->irq_set_type(data, type);
2836     +
2837     + return -ENOSYS;
2838     +}
2839     +
2840     +/**
2841     * irq_chip_retrigger_hierarchy - Retrigger an interrupt in hardware
2842     * @data: Pointer to interrupt specific data
2843     *
2844     @@ -946,7 +963,7 @@ int irq_chip_retrigger_hierarchy(struct irq_data *data)
2845     if (data->chip && data->chip->irq_retrigger)
2846     return data->chip->irq_retrigger(data);
2847    
2848     - return -ENOSYS;
2849     + return 0;
2850     }
2851    
2852     /**
2853     diff --git a/mm/memory-failure.c b/mm/memory-failure.c
2854     index 501820c815b3..9f48145c884f 100644
2855     --- a/mm/memory-failure.c
2856     +++ b/mm/memory-failure.c
2857     @@ -1558,6 +1558,8 @@ static int get_any_page(struct page *page, unsigned long pfn, int flags)
2858     */
2859     ret = __get_any_page(page, pfn, 0);
2860     if (!PageLRU(page)) {
2861     + /* Drop page reference which is from __get_any_page() */
2862     + put_page(page);
2863     pr_info("soft_offline: %#lx: unknown non LRU page type %lx\n",
2864     pfn, page->flags);
2865     return -EIO;
2866     @@ -1587,13 +1589,12 @@ static int soft_offline_huge_page(struct page *page, int flags)
2867     unlock_page(hpage);
2868    
2869     ret = isolate_huge_page(hpage, &pagelist);
2870     - if (ret) {
2871     - /*
2872     - * get_any_page() and isolate_huge_page() takes a refcount each,
2873     - * so need to drop one here.
2874     - */
2875     - put_page(hpage);
2876     - } else {
2877     + /*
2878     + * get_any_page() and isolate_huge_page() takes a refcount each,
2879     + * so need to drop one here.
2880     + */
2881     + put_page(hpage);
2882     + if (!ret) {
2883     pr_info("soft offline: %#lx hugepage failed to isolate\n", pfn);
2884     return -EBUSY;
2885     }
2886     diff --git a/net/9p/client.c b/net/9p/client.c
2887     index 81925b923318..fcf6fe063d82 100644
2888     --- a/net/9p/client.c
2889     +++ b/net/9p/client.c
2890     @@ -1541,6 +1541,7 @@ p9_client_read(struct p9_fid *fid, u64 offset, struct iov_iter *to, int *err)
2891     struct p9_client *clnt = fid->clnt;
2892     struct p9_req_t *req;
2893     int total = 0;
2894     + *err = 0;
2895    
2896     p9_debug(P9_DEBUG_9P, ">>> TREAD fid %d offset %llu %d\n",
2897     fid->fid, (unsigned long long) offset, (int)iov_iter_count(to));
2898     @@ -1616,6 +1617,7 @@ p9_client_write(struct p9_fid *fid, u64 offset, struct iov_iter *from, int *err)
2899     struct p9_client *clnt = fid->clnt;
2900     struct p9_req_t *req;
2901     int total = 0;
2902     + *err = 0;
2903    
2904     p9_debug(P9_DEBUG_9P, ">>> TWRITE fid %d offset %llu count %zd\n",
2905     fid->fid, (unsigned long long) offset,
2906     diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
2907     index 247552a7f6c2..3ece7d1034c8 100644
2908     --- a/net/mac80211/rc80211_minstrel.c
2909     +++ b/net/mac80211/rc80211_minstrel.c
2910     @@ -92,14 +92,15 @@ int minstrel_get_tp_avg(struct minstrel_rate *mr, int prob_ewma)
2911     static inline void
2912     minstrel_sort_best_tp_rates(struct minstrel_sta_info *mi, int i, u8 *tp_list)
2913     {
2914     - int j = MAX_THR_RATES;
2915     - struct minstrel_rate_stats *tmp_mrs = &mi->r[j - 1].stats;
2916     + int j;
2917     + struct minstrel_rate_stats *tmp_mrs;
2918     struct minstrel_rate_stats *cur_mrs = &mi->r[i].stats;
2919    
2920     - while (j > 0 && (minstrel_get_tp_avg(&mi->r[i], cur_mrs->prob_ewma) >
2921     - minstrel_get_tp_avg(&mi->r[tp_list[j - 1]], tmp_mrs->prob_ewma))) {
2922     - j--;
2923     + for (j = MAX_THR_RATES; j > 0; --j) {
2924     tmp_mrs = &mi->r[tp_list[j - 1]].stats;
2925     + if (minstrel_get_tp_avg(&mi->r[i], cur_mrs->prob_ewma) <=
2926     + minstrel_get_tp_avg(&mi->r[tp_list[j - 1]], tmp_mrs->prob_ewma))
2927     + break;
2928     }
2929    
2930     if (j < MAX_THR_RATES - 1)
2931     diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
2932     index 9cb8522d8d22..f3d3fb42b873 100755
2933     --- a/scripts/kconfig/streamline_config.pl
2934     +++ b/scripts/kconfig/streamline_config.pl
2935     @@ -137,7 +137,7 @@ my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
2936     my $kconfig = $ARGV[1];
2937     my $lsmod_file = $ENV{'LSMOD'};
2938    
2939     -my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
2940     +my @makefiles = `find $ksource -name Makefile -or -name Kbuild 2>/dev/null`;
2941     chomp @makefiles;
2942    
2943     my %depends;
2944     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
2945     index 5645481af3d9..36e8f1236637 100644
2946     --- a/sound/pci/hda/hda_codec.c
2947     +++ b/sound/pci/hda/hda_codec.c
2948     @@ -3259,7 +3259,7 @@ static int add_std_chmaps(struct hda_codec *codec)
2949     struct snd_pcm_chmap *chmap;
2950     const struct snd_pcm_chmap_elem *elem;
2951    
2952     - if (!pcm || pcm->own_chmap ||
2953     + if (!pcm || !pcm->pcm || pcm->own_chmap ||
2954     !hinfo->substreams)
2955     continue;
2956     elem = hinfo->chmap ? hinfo->chmap : snd_pcm_std_chmaps;
2957     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2958     index ac0db1679f09..5bc7f2e2715c 100644
2959     --- a/sound/pci/hda/hda_generic.c
2960     +++ b/sound/pci/hda/hda_generic.c
2961     @@ -671,7 +671,8 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
2962     }
2963     for (i = 0; i < path->depth; i++) {
2964     if (path->path[i] == nid) {
2965     - if (dir == HDA_OUTPUT || path->idx[i] == idx)
2966     + if (dir == HDA_OUTPUT || idx == -1 ||
2967     + path->idx[i] == idx)
2968     return true;
2969     break;
2970     }
2971     @@ -682,7 +683,7 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
2972    
2973     /* check whether the NID is referred by any active paths */
2974     #define is_active_nid_for_any(codec, nid) \
2975     - is_active_nid(codec, nid, HDA_OUTPUT, 0)
2976     + is_active_nid(codec, nid, HDA_OUTPUT, -1)
2977    
2978     /* get the default amp value for the target state */
2979     static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
2980     @@ -883,8 +884,7 @@ void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
2981     struct hda_gen_spec *spec = codec->spec;
2982     int i;
2983    
2984     - if (!enable)
2985     - path->active = false;
2986     + path->active = enable;
2987    
2988     /* make sure the widget is powered up */
2989     if (enable && (spec->power_down_unused || codec->power_save_node))
2990     @@ -902,9 +902,6 @@ void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
2991     if (has_amp_out(codec, path, i))
2992     activate_amp_out(codec, path, i, enable);
2993     }
2994     -
2995     - if (enable)
2996     - path->active = true;
2997     }
2998     EXPORT_SYMBOL_GPL(snd_hda_activate_path);
2999    
3000     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3001     index 78b719b5b34d..06cc9d57ba3d 100644
3002     --- a/sound/pci/hda/patch_conexant.c
3003     +++ b/sound/pci/hda/patch_conexant.c
3004     @@ -200,12 +200,33 @@ static int cx_auto_init(struct hda_codec *codec)
3005     return 0;
3006     }
3007    
3008     -#define cx_auto_free snd_hda_gen_free
3009     +static void cx_auto_reboot_notify(struct hda_codec *codec)
3010     +{
3011     + struct conexant_spec *spec = codec->spec;
3012     +
3013     + if (codec->core.vendor_id != 0x14f150f2)
3014     + return;
3015     +
3016     + /* Turn the CX20722 codec into D3 to avoid spurious noises
3017     + from the internal speaker during (and after) reboot */
3018     + cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, false);
3019     +
3020     + snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3);
3021     + snd_hda_codec_write(codec, codec->core.afg, 0,
3022     + AC_VERB_SET_POWER_STATE, AC_PWRST_D3);
3023     +}
3024     +
3025     +static void cx_auto_free(struct hda_codec *codec)
3026     +{
3027     + cx_auto_reboot_notify(codec);
3028     + snd_hda_gen_free(codec);
3029     +}
3030    
3031     static const struct hda_codec_ops cx_auto_patch_ops = {
3032     .build_controls = cx_auto_build_controls,
3033     .build_pcms = snd_hda_gen_build_pcms,
3034     .init = cx_auto_init,
3035     + .reboot_notify = cx_auto_reboot_notify,
3036     .free = cx_auto_free,
3037     .unsol_event = snd_hda_jack_unsol_event,
3038     #ifdef CONFIG_PM
3039     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3040     index 1e99f075a5ab..91f6928560e1 100644
3041     --- a/sound/pci/hda/patch_realtek.c
3042     +++ b/sound/pci/hda/patch_realtek.c
3043     @@ -5119,6 +5119,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
3044     SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
3045     SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
3046     SND_PCI_QUIRK(0x1028, 0x06de, "Dell", ALC292_FIXUP_DISABLE_AAMIX),
3047     + SND_PCI_QUIRK(0x1028, 0x06db, "Dell", ALC292_FIXUP_DISABLE_AAMIX),
3048     SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
3049     SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
3050     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
3051     diff --git a/sound/usb/card.c b/sound/usb/card.c
3052     index 1fab9778807a..0450593980fd 100644
3053     --- a/sound/usb/card.c
3054     +++ b/sound/usb/card.c
3055     @@ -638,7 +638,7 @@ int snd_usb_autoresume(struct snd_usb_audio *chip)
3056     int err = -ENODEV;
3057    
3058     down_read(&chip->shutdown_rwsem);
3059     - if (chip->probing && chip->in_pm)
3060     + if (chip->probing || chip->in_pm)
3061     err = 0;
3062     else if (!chip->shutdown)
3063     err = usb_autopm_get_interface(chip->pm_intf);
3064     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
3065     index 754e689596a2..00ebc0ca008e 100644
3066     --- a/sound/usb/quirks.c
3067     +++ b/sound/usb/quirks.c
3068     @@ -1268,6 +1268,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
3069     return SNDRV_PCM_FMTBIT_DSD_U32_BE;
3070     break;
3071    
3072     + case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
3073     case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
3074     case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
3075     if (fp->altsetting == 3)