Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.17/0103-4.17.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3150 - (hide annotations) (download)
Mon Jul 9 08:30:47 2018 UTC (5 years, 10 months ago) by niro
File size: 236391 byte(s)
-linux-4.17.4
1 niro 3150 diff --git a/Documentation/ABI/testing/sysfs-class-cxl b/Documentation/ABI/testing/sysfs-class-cxl
2     index 8e69345c37cc..bbbabffc682a 100644
3     --- a/Documentation/ABI/testing/sysfs-class-cxl
4     +++ b/Documentation/ABI/testing/sysfs-class-cxl
5     @@ -69,7 +69,9 @@ Date: September 2014
6     Contact: linuxppc-dev@lists.ozlabs.org
7     Description: read/write
8     Set the mode for prefaulting in segments into the segment table
9     - when performing the START_WORK ioctl. Possible values:
10     + when performing the START_WORK ioctl. Only applicable when
11     + running under hashed page table mmu.
12     + Possible values:
13     none: No prefaulting (default)
14     work_element_descriptor: Treat the work element
15     descriptor as an effective address and
16     diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
17     index eb30efdd2e78..25dc591cb110 100644
18     --- a/Documentation/core-api/printk-formats.rst
19     +++ b/Documentation/core-api/printk-formats.rst
20     @@ -419,11 +419,10 @@ struct clk
21    
22     %pC pll1
23     %pCn pll1
24     - %pCr 1560000000
25    
26     For printing struct clk structures. %pC and %pCn print the name
27     (Common Clock Framework) or address (legacy clock framework) of the
28     -structure; %pCr prints the current clock rate.
29     +structure.
30    
31     Passed by reference.
32    
33     diff --git a/Makefile b/Makefile
34     index 31dc3a08295a..1d740dbe676d 100644
35     --- a/Makefile
36     +++ b/Makefile
37     @@ -1,7 +1,7 @@
38     # SPDX-License-Identifier: GPL-2.0
39     VERSION = 4
40     PATCHLEVEL = 17
41     -SUBLEVEL = 3
42     +SUBLEVEL = 4
43     EXTRAVERSION =
44     NAME = Merciless Moray
45    
46     diff --git a/arch/arm/boot/dts/mt7623.dtsi b/arch/arm/boot/dts/mt7623.dtsi
47     index e10c03496524..a115575b38bf 100644
48     --- a/arch/arm/boot/dts/mt7623.dtsi
49     +++ b/arch/arm/boot/dts/mt7623.dtsi
50     @@ -22,11 +22,12 @@
51     #include <dt-bindings/phy/phy.h>
52     #include <dt-bindings/reset/mt2701-resets.h>
53     #include <dt-bindings/thermal/thermal.h>
54     -#include "skeleton64.dtsi"
55    
56     / {
57     compatible = "mediatek,mt7623";
58     interrupt-parent = <&sysirq>;
59     + #address-cells = <2>;
60     + #size-cells = <2>;
61    
62     cpu_opp_table: opp-table {
63     compatible = "operating-points-v2";
64     diff --git a/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts b/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
65     index bbf56f855e46..5938e4c79deb 100644
66     --- a/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
67     +++ b/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
68     @@ -109,6 +109,7 @@
69     };
70    
71     memory@80000000 {
72     + device_type = "memory";
73     reg = <0 0x80000000 0 0x40000000>;
74     };
75     };
76     diff --git a/arch/arm/boot/dts/mt7623n-rfb.dtsi b/arch/arm/boot/dts/mt7623n-rfb.dtsi
77     index 256c5fd947bf..43c9d7ca23a0 100644
78     --- a/arch/arm/boot/dts/mt7623n-rfb.dtsi
79     +++ b/arch/arm/boot/dts/mt7623n-rfb.dtsi
80     @@ -47,6 +47,7 @@
81     };
82    
83     memory@80000000 {
84     + device_type = "memory";
85     reg = <0 0x80000000 0 0x40000000>;
86     };
87    
88     diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
89     index 486d4e7433ed..b38f8c240558 100644
90     --- a/arch/arm/boot/dts/socfpga.dtsi
91     +++ b/arch/arm/boot/dts/socfpga.dtsi
92     @@ -748,13 +748,13 @@
93     nand0: nand@ff900000 {
94     #address-cells = <0x1>;
95     #size-cells = <0x1>;
96     - compatible = "denali,denali-nand-dt";
97     + compatible = "altr,socfpga-denali-nand";
98     reg = <0xff900000 0x100000>,
99     <0xffb80000 0x10000>;
100     reg-names = "nand_data", "denali_reg";
101     interrupts = <0x0 0x90 0x4>;
102     dma-mask = <0xffffffff>;
103     - clocks = <&nand_clk>;
104     + clocks = <&nand_x_clk>;
105     status = "disabled";
106     };
107    
108     diff --git a/arch/arm/boot/dts/socfpga_arria10.dtsi b/arch/arm/boot/dts/socfpga_arria10.dtsi
109     index bead79e4b2aa..791ca15c799e 100644
110     --- a/arch/arm/boot/dts/socfpga_arria10.dtsi
111     +++ b/arch/arm/boot/dts/socfpga_arria10.dtsi
112     @@ -593,8 +593,7 @@
113     #size-cells = <0>;
114     reg = <0xffda5000 0x100>;
115     interrupts = <0 102 4>;
116     - num-chipselect = <4>;
117     - bus-num = <0>;
118     + num-cs = <4>;
119     /*32bit_access;*/
120     tx-dma-channel = <&pdma 16>;
121     rx-dma-channel = <&pdma 17>;
122     @@ -633,7 +632,7 @@
123     nand: nand@ffb90000 {
124     #address-cells = <1>;
125     #size-cells = <1>;
126     - compatible = "denali,denali-nand-dt", "altr,socfpga-denali-nand";
127     + compatible = "altr,socfpga-denali-nand";
128     reg = <0xffb90000 0x72000>,
129     <0xffb80000 0x10000>;
130     reg-names = "nand_data", "denali_reg";
131     diff --git a/arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dts b/arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dts
132     index b20a710da7bc..7a4fca36c673 100644
133     --- a/arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dts
134     +++ b/arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dts
135     @@ -62,8 +62,8 @@
136     reg_vcc1v2: vcc1v2 {
137     compatible = "regulator-fixed";
138     regulator-name = "vcc1v2";
139     - regulator-min-microvolt = <3300000>;
140     - regulator-max-microvolt = <3300000>;
141     + regulator-min-microvolt = <1200000>;
142     + regulator-max-microvolt = <1200000>;
143     regulator-always-on;
144     regulator-boot-on;
145     vin-supply = <&reg_vcc5v0>;
146     @@ -113,8 +113,8 @@
147     reg_vdd_cpux: vdd-cpux {
148     compatible = "regulator-fixed";
149     regulator-name = "vdd-cpux";
150     - regulator-min-microvolt = <3300000>;
151     - regulator-max-microvolt = <3300000>;
152     + regulator-min-microvolt = <1200000>;
153     + regulator-max-microvolt = <1200000>;
154     regulator-always-on;
155     regulator-boot-on;
156     vin-supply = <&reg_vcc5v0>;
157     diff --git a/arch/arm/include/asm/kgdb.h b/arch/arm/include/asm/kgdb.h
158     index 3b73fdcf3627..8de1100d1067 100644
159     --- a/arch/arm/include/asm/kgdb.h
160     +++ b/arch/arm/include/asm/kgdb.h
161     @@ -77,7 +77,7 @@ extern int kgdb_fault_expected;
162    
163     #define KGDB_MAX_NO_CPUS 1
164     #define BUFMAX 400
165     -#define NUMREGBYTES (DBG_MAX_REG_NUM << 2)
166     +#define NUMREGBYTES (GDB_MAX_REGS << 2)
167     #define NUMCRITREGBYTES (32 << 2)
168    
169     #define _R0 0
170     diff --git a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
171     index c89d0c307f8d..2c63e60754c5 100644
172     --- a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
173     +++ b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
174     @@ -252,8 +252,7 @@
175     interrupts = <0 99 4>;
176     resets = <&rst SPIM0_RESET>;
177     reg-io-width = <4>;
178     - num-chipselect = <4>;
179     - bus-num = <0>;
180     + num-cs = <4>;
181     status = "disabled";
182     };
183    
184     @@ -265,8 +264,7 @@
185     interrupts = <0 100 4>;
186     resets = <&rst SPIM1_RESET>;
187     reg-io-width = <4>;
188     - num-chipselect = <4>;
189     - bus-num = <0>;
190     + num-cs = <4>;
191     status = "disabled";
192     };
193    
194     diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
195     index 3c31e21cbed7..69693977fe07 100644
196     --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
197     +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
198     @@ -35,6 +35,12 @@
199     no-map;
200     };
201    
202     + /* Alternate 3 MiB reserved for ARM Trusted Firmware (BL31) */
203     + secmon_reserved_alt: secmon@5000000 {
204     + reg = <0x0 0x05000000 0x0 0x300000>;
205     + no-map;
206     + };
207     +
208     linux,cma {
209     compatible = "shared-dma-pool";
210     reusable;
211     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
212     index 3e3eb31748a3..f63bceb88caa 100644
213     --- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
214     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
215     @@ -234,9 +234,6 @@
216    
217     bus-width = <4>;
218     cap-sd-highspeed;
219     - sd-uhs-sdr12;
220     - sd-uhs-sdr25;
221     - sd-uhs-sdr50;
222     max-frequency = <100000000>;
223     disable-wp;
224    
225     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
226     index dba365ed4bd5..33c15f2a949e 100644
227     --- a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
228     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
229     @@ -13,14 +13,6 @@
230     / {
231     compatible = "amlogic,meson-gxl";
232    
233     - reserved-memory {
234     - /* Alternate 3 MiB reserved for ARM Trusted Firmware (BL31) */
235     - secmon_reserved_alt: secmon@5000000 {
236     - reg = <0x0 0x05000000 0x0 0x300000>;
237     - no-map;
238     - };
239     - };
240     -
241     soc {
242     usb0: usb@c9000000 {
243     status = "disabled";
244     diff --git a/arch/arm64/boot/dts/marvell/armada-cp110.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110.dtsi
245     index ed2f1237ea1e..8259b32f0ced 100644
246     --- a/arch/arm64/boot/dts/marvell/armada-cp110.dtsi
247     +++ b/arch/arm64/boot/dts/marvell/armada-cp110.dtsi
248     @@ -149,7 +149,7 @@
249    
250     CP110_LABEL(icu): interrupt-controller@1e0000 {
251     compatible = "marvell,cp110-icu";
252     - reg = <0x1e0000 0x10>;
253     + reg = <0x1e0000 0x440>;
254     #interrupt-cells = <3>;
255     interrupt-controller;
256     msi-parent = <&gicp>;
257     diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
258     index 253188fb8cb0..e3e50950a863 100644
259     --- a/arch/arm64/crypto/aes-glue.c
260     +++ b/arch/arm64/crypto/aes-glue.c
261     @@ -223,8 +223,8 @@ static int ctr_encrypt(struct skcipher_request *req)
262     kernel_neon_begin();
263     aes_ctr_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
264     (u8 *)ctx->key_enc, rounds, blocks, walk.iv);
265     - err = skcipher_walk_done(&walk, walk.nbytes % AES_BLOCK_SIZE);
266     kernel_neon_end();
267     + err = skcipher_walk_done(&walk, walk.nbytes % AES_BLOCK_SIZE);
268     }
269     if (walk.nbytes) {
270     u8 __aligned(8) tail[AES_BLOCK_SIZE];
271     diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
272     index 9d1b06d67c53..df0bd090f0e4 100644
273     --- a/arch/arm64/kernel/cpufeature.c
274     +++ b/arch/arm64/kernel/cpufeature.c
275     @@ -937,7 +937,7 @@ static int __init parse_kpti(char *str)
276     __kpti_forced = enabled ? 1 : -1;
277     return 0;
278     }
279     -__setup("kpti=", parse_kpti);
280     +early_param("kpti", parse_kpti);
281     #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */
282    
283     #ifdef CONFIG_ARM64_HW_AFDBM
284     diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
285     index 154b7d30145d..f21209064041 100644
286     --- a/arch/arm64/kernel/signal.c
287     +++ b/arch/arm64/kernel/signal.c
288     @@ -830,11 +830,12 @@ static void do_signal(struct pt_regs *regs)
289     unsigned long continue_addr = 0, restart_addr = 0;
290     int retval = 0;
291     struct ksignal ksig;
292     + bool syscall = in_syscall(regs);
293    
294     /*
295     * If we were from a system call, check for system call restarting...
296     */
297     - if (in_syscall(regs)) {
298     + if (syscall) {
299     continue_addr = regs->pc;
300     restart_addr = continue_addr - (compat_thumb_mode(regs) ? 2 : 4);
301     retval = regs->regs[0];
302     @@ -886,7 +887,7 @@ static void do_signal(struct pt_regs *regs)
303     * Handle restarting a different system call. As above, if a debugger
304     * has chosen to restart at a different PC, ignore the restart.
305     */
306     - if (in_syscall(regs) && regs->pc == restart_addr) {
307     + if (syscall && regs->pc == restart_addr) {
308     if (retval == -ERESTART_RESTARTBLOCK)
309     setup_restart_syscall(regs);
310     user_rewind_single_step(current);
311     diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
312     index 5f9a73a4452c..03646e6a2ef4 100644
313     --- a/arch/arm64/mm/proc.S
314     +++ b/arch/arm64/mm/proc.S
315     @@ -217,8 +217,9 @@ ENDPROC(idmap_cpu_replace_ttbr1)
316    
317     .macro __idmap_kpti_put_pgtable_ent_ng, type
318     orr \type, \type, #PTE_NG // Same bit for blocks and pages
319     - str \type, [cur_\()\type\()p] // Update the entry and ensure it
320     - dc civac, cur_\()\type\()p // is visible to all CPUs.
321     + str \type, [cur_\()\type\()p] // Update the entry and ensure
322     + dmb sy // that it is visible to all
323     + dc civac, cur_\()\type\()p // CPUs.
324     .endm
325    
326     /*
327     diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c
328     index 0c3275aa0197..e522307db47c 100644
329     --- a/arch/m68k/mac/config.c
330     +++ b/arch/m68k/mac/config.c
331     @@ -1005,7 +1005,7 @@ int __init mac_platform_init(void)
332     struct resource swim_rsrc = {
333     .flags = IORESOURCE_MEM,
334     .start = (resource_size_t)swim_base,
335     - .end = (resource_size_t)swim_base + 0x2000,
336     + .end = (resource_size_t)swim_base + 0x1FFF,
337     };
338    
339     platform_device_register_simple("swim", -1, &swim_rsrc, 1);
340     diff --git a/arch/m68k/mm/kmap.c b/arch/m68k/mm/kmap.c
341     index c2a38321c96d..3b420f6d8822 100644
342     --- a/arch/m68k/mm/kmap.c
343     +++ b/arch/m68k/mm/kmap.c
344     @@ -89,7 +89,8 @@ static inline void free_io_area(void *addr)
345     for (p = &iolist ; (tmp = *p) ; p = &tmp->next) {
346     if (tmp->addr == addr) {
347     *p = tmp->next;
348     - __iounmap(tmp->addr, tmp->size);
349     + /* remove gap added in get_io_area() */
350     + __iounmap(tmp->addr, tmp->size - IO_SIZE);
351     kfree(tmp);
352     return;
353     }
354     diff --git a/arch/mips/ath79/mach-pb44.c b/arch/mips/ath79/mach-pb44.c
355     index 6b2c6f3baefa..75fb96ca61db 100644
356     --- a/arch/mips/ath79/mach-pb44.c
357     +++ b/arch/mips/ath79/mach-pb44.c
358     @@ -34,7 +34,7 @@
359     #define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL)
360    
361     static struct gpiod_lookup_table pb44_i2c_gpiod_table = {
362     - .dev_id = "i2c-gpio",
363     + .dev_id = "i2c-gpio.0",
364     .table = {
365     GPIO_LOOKUP_IDX("ath79-gpio", PB44_GPIO_I2C_SDA,
366     NULL, 0, GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
367     diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
368     index 6054d49e608e..8c9cbf13d32a 100644
369     --- a/arch/mips/bcm47xx/setup.c
370     +++ b/arch/mips/bcm47xx/setup.c
371     @@ -212,6 +212,12 @@ static int __init bcm47xx_cpu_fixes(void)
372     */
373     if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706)
374     cpu_wait = NULL;
375     +
376     + /*
377     + * BCM47XX Erratum "R10: PCIe Transactions Periodically Fail"
378     + * Enable ExternalSync for sync instruction to take effect
379     + */
380     + set_c0_config7(MIPS_CONF7_ES);
381     break;
382     #endif
383     }
384     diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
385     index a7d0b836f2f7..cea8ad864b3f 100644
386     --- a/arch/mips/include/asm/io.h
387     +++ b/arch/mips/include/asm/io.h
388     @@ -414,6 +414,8 @@ static inline type pfx##in##bwlq##p(unsigned long port) \
389     __val = *__addr; \
390     slow; \
391     \
392     + /* prevent prefetching of coherent DMA data prematurely */ \
393     + rmb(); \
394     return pfx##ioswab##bwlq(__addr, __val); \
395     }
396    
397     diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
398     index f65859784a4c..eeb131e2048e 100644
399     --- a/arch/mips/include/asm/mipsregs.h
400     +++ b/arch/mips/include/asm/mipsregs.h
401     @@ -681,6 +681,8 @@
402     #define MIPS_CONF7_WII (_ULCAST_(1) << 31)
403    
404     #define MIPS_CONF7_RPS (_ULCAST_(1) << 2)
405     +/* ExternalSync */
406     +#define MIPS_CONF7_ES (_ULCAST_(1) << 8)
407    
408     #define MIPS_CONF7_IAR (_ULCAST_(1) << 10)
409     #define MIPS_CONF7_AR (_ULCAST_(1) << 16)
410     @@ -2760,6 +2762,7 @@ __BUILD_SET_C0(status)
411     __BUILD_SET_C0(cause)
412     __BUILD_SET_C0(config)
413     __BUILD_SET_C0(config5)
414     +__BUILD_SET_C0(config7)
415     __BUILD_SET_C0(intcontrol)
416     __BUILD_SET_C0(intctl)
417     __BUILD_SET_C0(srsmap)
418     diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S
419     index f2ee7e1e3342..cff52b283e03 100644
420     --- a/arch/mips/kernel/mcount.S
421     +++ b/arch/mips/kernel/mcount.S
422     @@ -119,10 +119,20 @@ NESTED(_mcount, PT_SIZE, ra)
423     EXPORT_SYMBOL(_mcount)
424     PTR_LA t1, ftrace_stub
425     PTR_L t2, ftrace_trace_function /* Prepare t2 for (1) */
426     - bne t1, t2, static_trace
427     + beq t1, t2, fgraph_trace
428     nop
429    
430     + MCOUNT_SAVE_REGS
431     +
432     + move a0, ra /* arg1: self return address */
433     + jalr t2 /* (1) call *ftrace_trace_function */
434     + move a1, AT /* arg2: parent's return address */
435     +
436     + MCOUNT_RESTORE_REGS
437     +
438     +fgraph_trace:
439     #ifdef CONFIG_FUNCTION_GRAPH_TRACER
440     + PTR_LA t1, ftrace_stub
441     PTR_L t3, ftrace_graph_return
442     bne t1, t3, ftrace_graph_caller
443     nop
444     @@ -131,24 +141,11 @@ EXPORT_SYMBOL(_mcount)
445     bne t1, t3, ftrace_graph_caller
446     nop
447     #endif
448     - b ftrace_stub
449     -#ifdef CONFIG_32BIT
450     - addiu sp, sp, 8
451     -#else
452     - nop
453     -#endif
454    
455     -static_trace:
456     - MCOUNT_SAVE_REGS
457     -
458     - move a0, ra /* arg1: self return address */
459     - jalr t2 /* (1) call *ftrace_trace_function */
460     - move a1, AT /* arg2: parent's return address */
461     -
462     - MCOUNT_RESTORE_REGS
463     #ifdef CONFIG_32BIT
464     addiu sp, sp, 8
465     #endif
466     +
467     .globl ftrace_stub
468     ftrace_stub:
469     RETURN_BACK
470     diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
471     index 95813df90801..bb2523b4bd8f 100644
472     --- a/arch/powerpc/Makefile
473     +++ b/arch/powerpc/Makefile
474     @@ -251,6 +251,7 @@ cpu-as-$(CONFIG_4xx) += -Wa,-m405
475     cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec)
476     cpu-as-$(CONFIG_E200) += -Wa,-me200
477     cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4
478     +cpu-as-$(CONFIG_PPC_E500MC) += $(call as-option,-Wa$(comma)-me500mc)
479    
480     KBUILD_AFLAGS += $(cpu-as-y)
481     KBUILD_CFLAGS += $(cpu-as-y)
482     diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
483     index c904477abaf3..d926100da914 100644
484     --- a/arch/powerpc/kernel/dt_cpu_ftrs.c
485     +++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
486     @@ -711,7 +711,8 @@ static __init void cpufeatures_cpu_quirks(void)
487     cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_HV_ASSIST;
488     cur_cpu_spec->cpu_features |= CPU_FTR_P9_TM_XER_SO_BUG;
489     cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1;
490     - } else /* DD2.1 and up have DD2_1 */
491     + } else if ((version & 0xffff0000) == 0x004e0000)
492     + /* DD2.1 and up have DD2_1 */
493     cur_cpu_spec->cpu_features |= CPU_FTR_POWER9_DD2_1;
494    
495     if ((version & 0xffff0000) == 0x004e0000) {
496     diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
497     index 51695608c68b..3d1af55e09dc 100644
498     --- a/arch/powerpc/kernel/entry_64.S
499     +++ b/arch/powerpc/kernel/entry_64.S
500     @@ -596,6 +596,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
501     * actually hit this code path.
502     */
503    
504     + isync
505     slbie r6
506     slbie r6 /* Workaround POWER5 < DD2.1 issue */
507     slbmte r7,r0
508     diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
509     index 3c2c2688918f..fe631022ea89 100644
510     --- a/arch/powerpc/kernel/fadump.c
511     +++ b/arch/powerpc/kernel/fadump.c
512     @@ -1155,6 +1155,9 @@ void fadump_cleanup(void)
513     init_fadump_mem_struct(&fdm,
514     be64_to_cpu(fdm_active->cpu_state_data.destination_address));
515     fadump_invalidate_dump(&fdm);
516     + } else if (fw_dump.dump_registered) {
517     + /* Un-register Firmware-assisted dump if it was registered. */
518     + fadump_unregister_dump(&fdm);
519     }
520     }
521    
522     diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c
523     index 4c1012b80d3b..80547dad37da 100644
524     --- a/arch/powerpc/kernel/hw_breakpoint.c
525     +++ b/arch/powerpc/kernel/hw_breakpoint.c
526     @@ -178,8 +178,8 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
527     if (cpu_has_feature(CPU_FTR_DAWR)) {
528     length_max = 512 ; /* 64 doublewords */
529     /* DAWR region can't cross 512 boundary */
530     - if ((bp->attr.bp_addr >> 10) !=
531     - ((bp->attr.bp_addr + bp->attr.bp_len - 1) >> 10))
532     + if ((bp->attr.bp_addr >> 9) !=
533     + ((bp->attr.bp_addr + bp->attr.bp_len - 1) >> 9))
534     return -EINVAL;
535     }
536     if (info->len >
537     diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
538     index d23cf632edf0..0f63dd5972e9 100644
539     --- a/arch/powerpc/kernel/ptrace.c
540     +++ b/arch/powerpc/kernel/ptrace.c
541     @@ -2443,6 +2443,7 @@ static int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,
542     /* Create a new breakpoint request if one doesn't exist already */
543     hw_breakpoint_init(&attr);
544     attr.bp_addr = hw_brk.address;
545     + attr.bp_len = 8;
546     arch_bp_generic_fields(hw_brk.type,
547     &attr.bp_type);
548    
549     diff --git a/arch/powerpc/mm/pkeys.c b/arch/powerpc/mm/pkeys.c
550     index 0eafdf01edc7..e6f500fabf5e 100644
551     --- a/arch/powerpc/mm/pkeys.c
552     +++ b/arch/powerpc/mm/pkeys.c
553     @@ -383,9 +383,9 @@ int __arch_override_mprotect_pkey(struct vm_area_struct *vma, int prot,
554     {
555     /*
556     * If the currently associated pkey is execute-only, but the requested
557     - * protection requires read or write, move it back to the default pkey.
558     + * protection is not execute-only, move it back to the default pkey.
559     */
560     - if (vma_is_pkey_exec_only(vma) && (prot & (PROT_READ | PROT_WRITE)))
561     + if (vma_is_pkey_exec_only(vma) && (prot != PROT_EXEC))
562     return 0;
563    
564     /*
565     diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
566     index a5d7309c2d05..465cb604b33a 100644
567     --- a/arch/powerpc/mm/tlb-radix.c
568     +++ b/arch/powerpc/mm/tlb-radix.c
569     @@ -733,6 +733,8 @@ extern void radix_kvm_prefetch_workaround(struct mm_struct *mm)
570     for (; sib <= cpu_last_thread_sibling(cpu) && !flush; sib++) {
571     if (sib == cpu)
572     continue;
573     + if (!cpu_possible(sib))
574     + continue;
575     if (paca_ptrs[sib]->kvm_hstate.kvm_vcpu)
576     flush = true;
577     }
578     diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
579     index d7532e7b9ab5..75fb23c24ee8 100644
580     --- a/arch/powerpc/perf/imc-pmu.c
581     +++ b/arch/powerpc/perf/imc-pmu.c
582     @@ -1146,7 +1146,7 @@ static int init_nest_pmu_ref(void)
583    
584     static void cleanup_all_core_imc_memory(void)
585     {
586     - int i, nr_cores = DIV_ROUND_UP(num_present_cpus(), threads_per_core);
587     + int i, nr_cores = DIV_ROUND_UP(num_possible_cpus(), threads_per_core);
588     struct imc_mem_info *ptr = core_imc_pmu->mem_info;
589     int size = core_imc_pmu->counter_mem_size;
590    
591     @@ -1264,7 +1264,7 @@ static int imc_mem_init(struct imc_pmu *pmu_ptr, struct device_node *parent,
592     if (!pmu_ptr->pmu.name)
593     return -ENOMEM;
594    
595     - nr_cores = DIV_ROUND_UP(num_present_cpus(), threads_per_core);
596     + nr_cores = DIV_ROUND_UP(num_possible_cpus(), threads_per_core);
597     pmu_ptr->mem_info = kcalloc(nr_cores, sizeof(struct imc_mem_info),
598     GFP_KERNEL);
599    
600     diff --git a/arch/powerpc/platforms/powernv/copy-paste.h b/arch/powerpc/platforms/powernv/copy-paste.h
601     index c9a503623431..e9a6c35f8a29 100644
602     --- a/arch/powerpc/platforms/powernv/copy-paste.h
603     +++ b/arch/powerpc/platforms/powernv/copy-paste.h
604     @@ -42,5 +42,6 @@ static inline int vas_paste(void *paste_address, int offset)
605     : "b" (offset), "b" (paste_address)
606     : "memory", "cr0");
607    
608     - return (cr >> CR0_SHIFT) & CR0_MASK;
609     + /* We mask with 0xE to ignore SO */
610     + return (cr >> CR0_SHIFT) & 0xE;
611     }
612     diff --git a/arch/powerpc/platforms/powernv/idle.c b/arch/powerpc/platforms/powernv/idle.c
613     index 1f12ab1e6030..1c5d0675b43c 100644
614     --- a/arch/powerpc/platforms/powernv/idle.c
615     +++ b/arch/powerpc/platforms/powernv/idle.c
616     @@ -79,7 +79,7 @@ static int pnv_save_sprs_for_deep_states(void)
617     uint64_t msr_val = MSR_IDLE;
618     uint64_t psscr_val = pnv_deepest_stop_psscr_val;
619    
620     - for_each_possible_cpu(cpu) {
621     + for_each_present_cpu(cpu) {
622     uint64_t pir = get_hard_smp_processor_id(cpu);
623     uint64_t hsprg0_val = (uint64_t)paca_ptrs[cpu];
624    
625     @@ -814,7 +814,7 @@ static int __init pnv_init_idle_states(void)
626     int cpu;
627    
628     pr_info("powernv: idle: Saving PACA pointers of all CPUs in their thread sibling PACA\n");
629     - for_each_possible_cpu(cpu) {
630     + for_each_present_cpu(cpu) {
631     int base_cpu = cpu_first_thread_sibling(cpu);
632     int idx = cpu_thread_in_core(cpu);
633     int i;
634     diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
635     index 3f9c69d7623a..f7d9b3433a29 100644
636     --- a/arch/powerpc/platforms/powernv/pci-ioda.c
637     +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
638     @@ -3642,7 +3642,6 @@ static void pnv_pci_ioda2_release_pe_dma(struct pnv_ioda_pe *pe)
639     WARN_ON(pe->table_group.group);
640     }
641    
642     - pnv_pci_ioda2_table_free_pages(tbl);
643     iommu_tce_table_put(tbl);
644     }
645    
646     diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
647     index 02168fe25105..cf9bf9b43ec3 100644
648     --- a/arch/um/drivers/vector_kern.c
649     +++ b/arch/um/drivers/vector_kern.c
650     @@ -188,7 +188,7 @@ static int get_transport_options(struct arglist *def)
651     if (strncmp(transport, TRANS_TAP, TRANS_TAP_LEN) == 0)
652     return (vec_rx | VECTOR_BPF);
653     if (strncmp(transport, TRANS_RAW, TRANS_RAW_LEN) == 0)
654     - return (vec_rx | vec_tx);
655     + return (vec_rx | vec_tx | VECTOR_QDISC_BYPASS);
656     return (vec_rx | vec_tx);
657     }
658    
659     @@ -504,15 +504,19 @@ static struct vector_queue *create_queue(
660    
661     result = kmalloc(sizeof(struct vector_queue), GFP_KERNEL);
662     if (result == NULL)
663     - goto out_fail;
664     + return NULL;
665     result->max_depth = max_size;
666     result->dev = vp->dev;
667     result->mmsg_vector = kmalloc(
668     (sizeof(struct mmsghdr) * max_size), GFP_KERNEL);
669     + if (result->mmsg_vector == NULL)
670     + goto out_mmsg_fail;
671     result->skbuff_vector = kmalloc(
672     (sizeof(void *) * max_size), GFP_KERNEL);
673     - if (result->mmsg_vector == NULL || result->skbuff_vector == NULL)
674     - goto out_fail;
675     + if (result->skbuff_vector == NULL)
676     + goto out_skb_fail;
677     +
678     + /* further failures can be handled safely by destroy_queue*/
679    
680     mmsg_vector = result->mmsg_vector;
681     for (i = 0; i < max_size; i++) {
682     @@ -563,6 +567,11 @@ static struct vector_queue *create_queue(
683     result->head = 0;
684     result->tail = 0;
685     return result;
686     +out_skb_fail:
687     + kfree(result->mmsg_vector);
688     +out_mmsg_fail:
689     + kfree(result);
690     + return NULL;
691     out_fail:
692     destroy_queue(result);
693     return NULL;
694     @@ -1232,9 +1241,8 @@ static int vector_net_open(struct net_device *dev)
695    
696     if ((vp->options & VECTOR_QDISC_BYPASS) != 0) {
697     if (!uml_raw_enable_qdisc_bypass(vp->fds->rx_fd))
698     - vp->options = vp->options | VECTOR_BPF;
699     + vp->options |= VECTOR_BPF;
700     }
701     -
702     if ((vp->options & VECTOR_BPF) != 0)
703     vp->bpf = uml_vector_default_bpf(vp->fds->rx_fd, dev->dev_addr);
704    
705     diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
706     index 9de7f1e1dede..7d0df78db727 100644
707     --- a/arch/x86/entry/entry_64_compat.S
708     +++ b/arch/x86/entry/entry_64_compat.S
709     @@ -84,13 +84,13 @@ ENTRY(entry_SYSENTER_compat)
710     pushq %rdx /* pt_regs->dx */
711     pushq %rcx /* pt_regs->cx */
712     pushq $-ENOSYS /* pt_regs->ax */
713     - pushq %r8 /* pt_regs->r8 */
714     + pushq $0 /* pt_regs->r8 = 0 */
715     xorl %r8d, %r8d /* nospec r8 */
716     - pushq %r9 /* pt_regs->r9 */
717     + pushq $0 /* pt_regs->r9 = 0 */
718     xorl %r9d, %r9d /* nospec r9 */
719     - pushq %r10 /* pt_regs->r10 */
720     + pushq $0 /* pt_regs->r10 = 0 */
721     xorl %r10d, %r10d /* nospec r10 */
722     - pushq %r11 /* pt_regs->r11 */
723     + pushq $0 /* pt_regs->r11 = 0 */
724     xorl %r11d, %r11d /* nospec r11 */
725     pushq %rbx /* pt_regs->rbx */
726     xorl %ebx, %ebx /* nospec rbx */
727     @@ -374,13 +374,13 @@ ENTRY(entry_INT80_compat)
728     pushq %rcx /* pt_regs->cx */
729     xorl %ecx, %ecx /* nospec cx */
730     pushq $-ENOSYS /* pt_regs->ax */
731     - pushq $0 /* pt_regs->r8 = 0 */
732     + pushq %r8 /* pt_regs->r8 */
733     xorl %r8d, %r8d /* nospec r8 */
734     - pushq $0 /* pt_regs->r9 = 0 */
735     + pushq %r9 /* pt_regs->r9 */
736     xorl %r9d, %r9d /* nospec r9 */
737     - pushq $0 /* pt_regs->r10 = 0 */
738     + pushq %r10 /* pt_regs->r10*/
739     xorl %r10d, %r10d /* nospec r10 */
740     - pushq $0 /* pt_regs->r11 = 0 */
741     + pushq %r11 /* pt_regs->r11 */
742     xorl %r11d, %r11d /* nospec r11 */
743     pushq %rbx /* pt_regs->rbx */
744     xorl %ebx, %ebx /* nospec rbx */
745     diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
746     index 042b5e892ed1..14de0432d288 100644
747     --- a/arch/x86/include/asm/barrier.h
748     +++ b/arch/x86/include/asm/barrier.h
749     @@ -38,7 +38,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
750     {
751     unsigned long mask;
752    
753     - asm ("cmp %1,%2; sbb %0,%0;"
754     + asm volatile ("cmp %1,%2; sbb %0,%0;"
755     :"=r" (mask)
756     :"g"(size),"r" (index)
757     :"cc");
758     diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
759     index efaf2d4f9c3c..d492752f79e1 100644
760     --- a/arch/x86/kernel/apic/x2apic_uv_x.c
761     +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
762     @@ -26,6 +26,7 @@
763     #include <linux/delay.h>
764     #include <linux/crash_dump.h>
765     #include <linux/reboot.h>
766     +#include <linux/memory.h>
767    
768     #include <asm/uv/uv_mmrs.h>
769     #include <asm/uv/uv_hub.h>
770     @@ -392,6 +393,51 @@ extern int uv_hub_info_version(void)
771     }
772     EXPORT_SYMBOL(uv_hub_info_version);
773    
774     +/* Default UV memory block size is 2GB */
775     +static unsigned long mem_block_size = (2UL << 30);
776     +
777     +/* Kernel parameter to specify UV mem block size */
778     +static int parse_mem_block_size(char *ptr)
779     +{
780     + unsigned long size = memparse(ptr, NULL);
781     +
782     + /* Size will be rounded down by set_block_size() below */
783     + mem_block_size = size;
784     + return 0;
785     +}
786     +early_param("uv_memblksize", parse_mem_block_size);
787     +
788     +static __init int adj_blksize(u32 lgre)
789     +{
790     + unsigned long base = (unsigned long)lgre << UV_GAM_RANGE_SHFT;
791     + unsigned long size;
792     +
793     + for (size = mem_block_size; size > MIN_MEMORY_BLOCK_SIZE; size >>= 1)
794     + if (IS_ALIGNED(base, size))
795     + break;
796     +
797     + if (size >= mem_block_size)
798     + return 0;
799     +
800     + mem_block_size = size;
801     + return 1;
802     +}
803     +
804     +static __init void set_block_size(void)
805     +{
806     + unsigned int order = ffs(mem_block_size);
807     +
808     + if (order) {
809     + /* adjust for ffs return of 1..64 */
810     + set_memory_block_size_order(order - 1);
811     + pr_info("UV: mem_block_size set to 0x%lx\n", mem_block_size);
812     + } else {
813     + /* bad or zero value, default to 1UL << 31 (2GB) */
814     + pr_err("UV: mem_block_size error with 0x%lx\n", mem_block_size);
815     + set_memory_block_size_order(31);
816     + }
817     +}
818     +
819     /* Build GAM range lookup table: */
820     static __init void build_uv_gr_table(void)
821     {
822     @@ -1180,23 +1226,30 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
823     << UV_GAM_RANGE_SHFT);
824     int order = 0;
825     char suffix[] = " KMGTPE";
826     + int flag = ' ';
827    
828     while (size > 9999 && order < sizeof(suffix)) {
829     size /= 1024;
830     order++;
831     }
832    
833     + /* adjust max block size to current range start */
834     + if (gre->type == 1 || gre->type == 2)
835     + if (adj_blksize(lgre))
836     + flag = '*';
837     +
838     if (!index) {
839     pr_info("UV: GAM Range Table...\n");
840     - pr_info("UV: # %20s %14s %5s %4s %5s %3s %2s\n", "Range", "", "Size", "Type", "NASID", "SID", "PN");
841     + pr_info("UV: # %20s %14s %6s %4s %5s %3s %2s\n", "Range", "", "Size", "Type", "NASID", "SID", "PN");
842     }
843     - pr_info("UV: %2d: 0x%014lx-0x%014lx %5lu%c %3d %04x %02x %02x\n",
844     + pr_info("UV: %2d: 0x%014lx-0x%014lx%c %5lu%c %3d %04x %02x %02x\n",
845     index++,
846     (unsigned long)lgre << UV_GAM_RANGE_SHFT,
847     (unsigned long)gre->limit << UV_GAM_RANGE_SHFT,
848     - size, suffix[order],
849     + flag, size, suffix[order],
850     gre->type, gre->nasid, gre->sockid, gre->pnode);
851    
852     + /* update to next range start */
853     lgre = gre->limit;
854     if (sock_min > gre->sockid)
855     sock_min = gre->sockid;
856     @@ -1427,6 +1480,7 @@ static void __init uv_system_init_hub(void)
857    
858     build_socket_tables();
859     build_uv_gr_table();
860     + set_block_size();
861     uv_init_hub_info(&hub_info);
862     uv_possible_blades = num_possible_nodes();
863     if (!_node_to_pnode)
864     diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
865     index 5bbd06f38ff6..f34d89c01edc 100644
866     --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
867     +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
868     @@ -160,6 +160,11 @@ static struct severity {
869     SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_INSTR),
870     USER
871     ),
872     + MCESEV(
873     + PANIC, "Data load in unrecoverable area of kernel",
874     + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_DATA),
875     + KERNEL
876     + ),
877     #endif
878     MCESEV(
879     PANIC, "Action required: unknown MCACOD",
880     diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
881     index 42cf2880d0ed..6f7eda9d5297 100644
882     --- a/arch/x86/kernel/cpu/mcheck/mce.c
883     +++ b/arch/x86/kernel/cpu/mcheck/mce.c
884     @@ -772,23 +772,25 @@ EXPORT_SYMBOL_GPL(machine_check_poll);
885     static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
886     struct pt_regs *regs)
887     {
888     - int i, ret = 0;
889     char *tmp;
890     + int i;
891    
892     for (i = 0; i < mca_cfg.banks; i++) {
893     m->status = mce_rdmsrl(msr_ops.status(i));
894     - if (m->status & MCI_STATUS_VAL) {
895     - __set_bit(i, validp);
896     - if (quirk_no_way_out)
897     - quirk_no_way_out(i, m, regs);
898     - }
899     + if (!(m->status & MCI_STATUS_VAL))
900     + continue;
901     +
902     + __set_bit(i, validp);
903     + if (quirk_no_way_out)
904     + quirk_no_way_out(i, m, regs);
905    
906     if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
907     + mce_read_aux(m, i);
908     *msg = tmp;
909     - ret = 1;
910     + return 1;
911     }
912     }
913     - return ret;
914     + return 0;
915     }
916    
917     /*
918     @@ -1205,13 +1207,18 @@ void do_machine_check(struct pt_regs *regs, long error_code)
919     lmce = m.mcgstatus & MCG_STATUS_LMCES;
920    
921     /*
922     + * Local machine check may already know that we have to panic.
923     + * Broadcast machine check begins rendezvous in mce_start()
924     * Go through all banks in exclusion of the other CPUs. This way we
925     * don't report duplicated events on shared banks because the first one
926     - * to see it will clear it. If this is a Local MCE, then no need to
927     - * perform rendezvous.
928     + * to see it will clear it.
929     */
930     - if (!lmce)
931     + if (lmce) {
932     + if (no_way_out)
933     + mce_panic("Fatal local machine check", &m, msg);
934     + } else {
935     order = mce_start(&no_way_out);
936     + }
937    
938     for (i = 0; i < cfg->banks; i++) {
939     __clear_bit(i, toclear);
940     @@ -1287,12 +1294,17 @@ void do_machine_check(struct pt_regs *regs, long error_code)
941     no_way_out = worst >= MCE_PANIC_SEVERITY;
942     } else {
943     /*
944     - * Local MCE skipped calling mce_reign()
945     - * If we found a fatal error, we need to panic here.
946     + * If there was a fatal machine check we should have
947     + * already called mce_panic earlier in this function.
948     + * Since we re-read the banks, we might have found
949     + * something new. Check again to see if we found a
950     + * fatal error. We call "mce_severity()" again to
951     + * make sure we have the right "msg".
952     */
953     - if (worst >= MCE_PANIC_SEVERITY && mca_cfg.tolerant < 3)
954     - mce_panic("Machine check from unknown source",
955     - NULL, NULL);
956     + if (worst >= MCE_PANIC_SEVERITY && mca_cfg.tolerant < 3) {
957     + mce_severity(&m, cfg->tolerant, &msg, true);
958     + mce_panic("Local fatal machine check!", &m, msg);
959     + }
960     }
961    
962     /*
963     diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
964     index 6a2cb1442e05..aec38a170dbc 100644
965     --- a/arch/x86/kernel/e820.c
966     +++ b/arch/x86/kernel/e820.c
967     @@ -1246,6 +1246,7 @@ void __init e820__memblock_setup(void)
968     {
969     int i;
970     u64 end;
971     + u64 addr = 0;
972    
973     /*
974     * The bootstrap memblock region count maximum is 128 entries
975     @@ -1262,13 +1263,21 @@ void __init e820__memblock_setup(void)
976     struct e820_entry *entry = &e820_table->entries[i];
977    
978     end = entry->addr + entry->size;
979     + if (addr < entry->addr)
980     + memblock_reserve(addr, entry->addr - addr);
981     + addr = end;
982     if (end != (resource_size_t)end)
983     continue;
984    
985     + /*
986     + * all !E820_TYPE_RAM ranges (including gap ranges) are put
987     + * into memblock.reserved to make sure that struct pages in
988     + * such regions are not left uninitialized after bootup.
989     + */
990     if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN)
991     - continue;
992     -
993     - memblock_add(entry->addr, entry->size);
994     + memblock_reserve(entry->addr, entry->size);
995     + else
996     + memblock_add(entry->addr, entry->size);
997     }
998    
999     /* Throw away partial pages: */
1000     diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
1001     index 697a4ce04308..736348ead421 100644
1002     --- a/arch/x86/kernel/quirks.c
1003     +++ b/arch/x86/kernel/quirks.c
1004     @@ -645,12 +645,19 @@ static void quirk_intel_brickland_xeon_ras_cap(struct pci_dev *pdev)
1005     /* Skylake */
1006     static void quirk_intel_purley_xeon_ras_cap(struct pci_dev *pdev)
1007     {
1008     - u32 capid0;
1009     + u32 capid0, capid5;
1010    
1011     pci_read_config_dword(pdev, 0x84, &capid0);
1012     + pci_read_config_dword(pdev, 0x98, &capid5);
1013    
1014     - if ((capid0 & 0xc0) == 0xc0)
1015     + /*
1016     + * CAPID0{7:6} indicate whether this is an advanced RAS SKU
1017     + * CAPID5{8:5} indicate that various NVDIMM usage modes are
1018     + * enabled, so memory machine check recovery is also enabled.
1019     + */
1020     + if ((capid0 & 0xc0) == 0xc0 || (capid5 & 0x1e0))
1021     static_branch_inc(&mcsafe_key);
1022     +
1023     }
1024     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x0ec3, quirk_intel_brickland_xeon_ras_cap);
1025     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, quirk_intel_brickland_xeon_ras_cap);
1026     diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
1027     index 03f3d7695dac..162a31d80ad5 100644
1028     --- a/arch/x86/kernel/traps.c
1029     +++ b/arch/x86/kernel/traps.c
1030     @@ -834,16 +834,18 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
1031     char *str = (trapnr == X86_TRAP_MF) ? "fpu exception" :
1032     "simd exception";
1033    
1034     - if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, SIGFPE) == NOTIFY_STOP)
1035     - return;
1036     cond_local_irq_enable(regs);
1037    
1038     if (!user_mode(regs)) {
1039     - if (!fixup_exception(regs, trapnr)) {
1040     - task->thread.error_code = error_code;
1041     - task->thread.trap_nr = trapnr;
1042     + if (fixup_exception(regs, trapnr))
1043     + return;
1044     +
1045     + task->thread.error_code = error_code;
1046     + task->thread.trap_nr = trapnr;
1047     +
1048     + if (notify_die(DIE_TRAP, str, regs, error_code,
1049     + trapnr, SIGFPE) != NOTIFY_STOP)
1050     die(str, regs, error_code);
1051     - }
1052     return;
1053     }
1054    
1055     diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
1056     index fec82b577c18..cee58a972cb2 100644
1057     --- a/arch/x86/mm/init.c
1058     +++ b/arch/x86/mm/init.c
1059     @@ -706,7 +706,9 @@ void __init init_mem_mapping(void)
1060     */
1061     int devmem_is_allowed(unsigned long pagenr)
1062     {
1063     - if (page_is_ram(pagenr)) {
1064     + if (region_intersects(PFN_PHYS(pagenr), PAGE_SIZE,
1065     + IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE)
1066     + != REGION_DISJOINT) {
1067     /*
1068     * For disallowed memory regions in the low 1MB range,
1069     * request that the page be shown as all zeros.
1070     diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
1071     index 0a400606dea0..20d8bf5fbceb 100644
1072     --- a/arch/x86/mm/init_64.c
1073     +++ b/arch/x86/mm/init_64.c
1074     @@ -1350,16 +1350,28 @@ int kern_addr_valid(unsigned long addr)
1075     /* Amount of ram needed to start using large blocks */
1076     #define MEM_SIZE_FOR_LARGE_BLOCK (64UL << 30)
1077    
1078     +/* Adjustable memory block size */
1079     +static unsigned long set_memory_block_size;
1080     +int __init set_memory_block_size_order(unsigned int order)
1081     +{
1082     + unsigned long size = 1UL << order;
1083     +
1084     + if (size > MEM_SIZE_FOR_LARGE_BLOCK || size < MIN_MEMORY_BLOCK_SIZE)
1085     + return -EINVAL;
1086     +
1087     + set_memory_block_size = size;
1088     + return 0;
1089     +}
1090     +
1091     static unsigned long probe_memory_block_size(void)
1092     {
1093     unsigned long boot_mem_end = max_pfn << PAGE_SHIFT;
1094     unsigned long bz;
1095    
1096     - /* If this is UV system, always set 2G block size */
1097     - if (is_uv_system()) {
1098     - bz = MAX_BLOCK_SIZE;
1099     + /* If memory block size has been set, then use it */
1100     + bz = set_memory_block_size;
1101     + if (bz)
1102     goto done;
1103     - }
1104    
1105     /* Use regular block if RAM is smaller than MEM_SIZE_FOR_LARGE_BLOCK */
1106     if (boot_mem_end < MEM_SIZE_FOR_LARGE_BLOCK) {
1107     diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
1108     index bed7e7f4e44c..84fbfaba8404 100644
1109     --- a/arch/x86/platform/efi/efi_64.c
1110     +++ b/arch/x86/platform/efi/efi_64.c
1111     @@ -166,14 +166,14 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
1112     pgd = pgd_offset_k(pgd_idx * PGDIR_SIZE);
1113     set_pgd(pgd_offset_k(pgd_idx * PGDIR_SIZE), save_pgd[pgd_idx]);
1114    
1115     - if (!(pgd_val(*pgd) & _PAGE_PRESENT))
1116     + if (!pgd_present(*pgd))
1117     continue;
1118    
1119     for (i = 0; i < PTRS_PER_P4D; i++) {
1120     p4d = p4d_offset(pgd,
1121     pgd_idx * PGDIR_SIZE + i * P4D_SIZE);
1122    
1123     - if (!(p4d_val(*p4d) & _PAGE_PRESENT))
1124     + if (!p4d_present(*p4d))
1125     continue;
1126    
1127     pud = (pud_t *)p4d_page_vaddr(*p4d);
1128     diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
1129     index 2e20ae2fa2d6..e3b18ad49889 100644
1130     --- a/arch/x86/xen/smp_pv.c
1131     +++ b/arch/x86/xen/smp_pv.c
1132     @@ -32,6 +32,7 @@
1133     #include <xen/interface/vcpu.h>
1134     #include <xen/interface/xenpmu.h>
1135    
1136     +#include <asm/spec-ctrl.h>
1137     #include <asm/xen/interface.h>
1138     #include <asm/xen/hypercall.h>
1139    
1140     @@ -70,6 +71,8 @@ static void cpu_bringup(void)
1141     cpu_data(cpu).x86_max_cores = 1;
1142     set_cpu_sibling_map(cpu);
1143    
1144     + speculative_store_bypass_ht_init();
1145     +
1146     xen_setup_cpu_clockevents();
1147    
1148     notify_cpu_starting(cpu);
1149     @@ -250,6 +253,8 @@ static void __init xen_pv_smp_prepare_cpus(unsigned int max_cpus)
1150     }
1151     set_cpu_sibling_map(0);
1152    
1153     + speculative_store_bypass_ht_init();
1154     +
1155     xen_pmu_init(0);
1156    
1157     if (xen_smp_intr_init(0) || xen_smp_intr_init_pv(0))
1158     diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c
1159     index 32c5207f1226..84a70b8cbe33 100644
1160     --- a/arch/xtensa/kernel/traps.c
1161     +++ b/arch/xtensa/kernel/traps.c
1162     @@ -338,7 +338,7 @@ do_unaligned_user (struct pt_regs *regs)
1163     info.si_errno = 0;
1164     info.si_code = BUS_ADRALN;
1165     info.si_addr = (void *) regs->excvaddr;
1166     - force_sig_info(SIGSEGV, &info, current);
1167     + force_sig_info(SIGBUS, &info, current);
1168    
1169     }
1170     #endif
1171     diff --git a/block/blk-core.c b/block/blk-core.c
1172     index 85909b431eb0..b559b9d4f1a2 100644
1173     --- a/block/blk-core.c
1174     +++ b/block/blk-core.c
1175     @@ -3487,6 +3487,10 @@ static void __blk_rq_prep_clone(struct request *dst, struct request *src)
1176     dst->cpu = src->cpu;
1177     dst->__sector = blk_rq_pos(src);
1178     dst->__data_len = blk_rq_bytes(src);
1179     + if (src->rq_flags & RQF_SPECIAL_PAYLOAD) {
1180     + dst->rq_flags |= RQF_SPECIAL_PAYLOAD;
1181     + dst->special_vec = src->special_vec;
1182     + }
1183     dst->nr_phys_segments = src->nr_phys_segments;
1184     dst->ioprio = src->ioprio;
1185     dst->extra_len = src->extra_len;
1186     diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
1187     index 7d81e6bb461a..b6cabac4b62b 100644
1188     --- a/crypto/asymmetric_keys/x509_cert_parser.c
1189     +++ b/crypto/asymmetric_keys/x509_cert_parser.c
1190     @@ -249,6 +249,15 @@ int x509_note_signature(void *context, size_t hdrlen,
1191     return -EINVAL;
1192     }
1193    
1194     + if (strcmp(ctx->cert->sig->pkey_algo, "rsa") == 0) {
1195     + /* Discard the BIT STRING metadata */
1196     + if (vlen < 1 || *(const u8 *)value != 0)
1197     + return -EBADMSG;
1198     +
1199     + value++;
1200     + vlen--;
1201     + }
1202     +
1203     ctx->cert->raw_sig = value;
1204     ctx->cert->raw_sig_size = vlen;
1205     return 0;
1206     diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
1207     index 2bcffec8dbf0..eb091375c873 100644
1208     --- a/drivers/acpi/acpi_lpss.c
1209     +++ b/drivers/acpi/acpi_lpss.c
1210     @@ -22,6 +22,7 @@
1211     #include <linux/pm_domain.h>
1212     #include <linux/pm_runtime.h>
1213     #include <linux/pwm.h>
1214     +#include <linux/suspend.h>
1215     #include <linux/delay.h>
1216    
1217     #include "internal.h"
1218     @@ -229,11 +230,13 @@ static const struct lpss_device_desc lpt_sdio_dev_desc = {
1219    
1220     static const struct lpss_device_desc byt_pwm_dev_desc = {
1221     .flags = LPSS_SAVE_CTX,
1222     + .prv_offset = 0x800,
1223     .setup = byt_pwm_setup,
1224     };
1225    
1226     static const struct lpss_device_desc bsw_pwm_dev_desc = {
1227     .flags = LPSS_SAVE_CTX | LPSS_NO_D3_DELAY,
1228     + .prv_offset = 0x800,
1229     .setup = bsw_pwm_setup,
1230     };
1231    
1232     @@ -940,9 +943,10 @@ static void lpss_iosf_exit_d3_state(void)
1233     mutex_unlock(&lpss_iosf_mutex);
1234     }
1235    
1236     -static int acpi_lpss_suspend(struct device *dev, bool wakeup)
1237     +static int acpi_lpss_suspend(struct device *dev, bool runtime)
1238     {
1239     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1240     + bool wakeup = runtime || device_may_wakeup(dev);
1241     int ret;
1242    
1243     if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
1244     @@ -955,13 +959,14 @@ static int acpi_lpss_suspend(struct device *dev, bool wakeup)
1245     * wrong status for devices being about to be powered off. See
1246     * lpss_iosf_enter_d3_state() for further information.
1247     */
1248     - if (lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1249     + if ((runtime || !pm_suspend_via_firmware()) &&
1250     + lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1251     lpss_iosf_enter_d3_state();
1252    
1253     return ret;
1254     }
1255    
1256     -static int acpi_lpss_resume(struct device *dev)
1257     +static int acpi_lpss_resume(struct device *dev, bool runtime)
1258     {
1259     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1260     int ret;
1261     @@ -970,7 +975,8 @@ static int acpi_lpss_resume(struct device *dev)
1262     * This call is kept first to be in symmetry with
1263     * acpi_lpss_runtime_suspend() one.
1264     */
1265     - if (lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1266     + if ((runtime || !pm_resume_via_firmware()) &&
1267     + lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1268     lpss_iosf_exit_d3_state();
1269    
1270     ret = acpi_dev_resume(dev);
1271     @@ -994,12 +1000,12 @@ static int acpi_lpss_suspend_late(struct device *dev)
1272     return 0;
1273    
1274     ret = pm_generic_suspend_late(dev);
1275     - return ret ? ret : acpi_lpss_suspend(dev, device_may_wakeup(dev));
1276     + return ret ? ret : acpi_lpss_suspend(dev, false);
1277     }
1278    
1279     static int acpi_lpss_resume_early(struct device *dev)
1280     {
1281     - int ret = acpi_lpss_resume(dev);
1282     + int ret = acpi_lpss_resume(dev, false);
1283    
1284     return ret ? ret : pm_generic_resume_early(dev);
1285     }
1286     @@ -1014,7 +1020,7 @@ static int acpi_lpss_runtime_suspend(struct device *dev)
1287    
1288     static int acpi_lpss_runtime_resume(struct device *dev)
1289     {
1290     - int ret = acpi_lpss_resume(dev);
1291     + int ret = acpi_lpss_resume(dev, true);
1292    
1293     return ret ? ret : pm_generic_runtime_resume(dev);
1294     }
1295     diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig
1296     index 2c2ed9cf8796..f9413755177b 100644
1297     --- a/drivers/auxdisplay/Kconfig
1298     +++ b/drivers/auxdisplay/Kconfig
1299     @@ -14,9 +14,6 @@ menuconfig AUXDISPLAY
1300    
1301     If you say N, all options in this submenu will be skipped and disabled.
1302    
1303     -config CHARLCD
1304     - tristate "Character LCD core support" if COMPILE_TEST
1305     -
1306     if AUXDISPLAY
1307    
1308     config HD44780
1309     @@ -157,8 +154,6 @@ config HT16K33
1310     Say yes here to add support for Holtek HT16K33, RAM mapping 16*8
1311     LED controller driver with keyscan.
1312    
1313     -endif # AUXDISPLAY
1314     -
1315     config ARM_CHARLCD
1316     bool "ARM Ltd. Character LCD Driver"
1317     depends on PLAT_VERSATILE
1318     @@ -169,6 +164,8 @@ config ARM_CHARLCD
1319     line and the Linux version on the second line, but that's
1320     still useful.
1321    
1322     +endif # AUXDISPLAY
1323     +
1324     config PANEL
1325     tristate "Parallel port LCD/Keypad Panel support"
1326     depends on PARPORT
1327     @@ -448,3 +445,6 @@ config PANEL_BOOT_MESSAGE
1328     printf()-formatted message is valid with newline and escape codes.
1329    
1330     endif # PANEL
1331     +
1332     +config CHARLCD
1333     + tristate "Character LCD core support" if COMPILE_TEST
1334     diff --git a/drivers/base/core.c b/drivers/base/core.c
1335     index d680fd030316..f4ba878dd2dc 100644
1336     --- a/drivers/base/core.c
1337     +++ b/drivers/base/core.c
1338     @@ -216,6 +216,13 @@ struct device_link *device_link_add(struct device *consumer,
1339     link->rpm_active = true;
1340     }
1341     pm_runtime_new_link(consumer);
1342     + /*
1343     + * If the link is being added by the consumer driver at probe
1344     + * time, balance the decrementation of the supplier's runtime PM
1345     + * usage counter after consumer probe in driver_probe_device().
1346     + */
1347     + if (consumer->links.status == DL_DEV_PROBING)
1348     + pm_runtime_get_noresume(supplier);
1349     }
1350     get_device(supplier);
1351     link->supplier = supplier;
1352     @@ -235,12 +242,12 @@ struct device_link *device_link_add(struct device *consumer,
1353     switch (consumer->links.status) {
1354     case DL_DEV_PROBING:
1355     /*
1356     - * Balance the decrementation of the supplier's
1357     - * runtime PM usage counter after consumer probe
1358     - * in driver_probe_device().
1359     + * Some callers expect the link creation during
1360     + * consumer driver probe to resume the supplier
1361     + * even without DL_FLAG_RPM_ACTIVE.
1362     */
1363     if (flags & DL_FLAG_PM_RUNTIME)
1364     - pm_runtime_get_sync(supplier);
1365     + pm_runtime_resume(supplier);
1366    
1367     link->status = DL_STATE_CONSUMER_PROBE;
1368     break;
1369     diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
1370     index 1ea0e2502e8e..ef6cf3d5d2b5 100644
1371     --- a/drivers/base/power/domain.c
1372     +++ b/drivers/base/power/domain.c
1373     @@ -2246,6 +2246,9 @@ int genpd_dev_pm_attach(struct device *dev)
1374     genpd_lock(pd);
1375     ret = genpd_power_on(pd, 0);
1376     genpd_unlock(pd);
1377     +
1378     + if (ret)
1379     + genpd_remove_device(pd, dev);
1380     out:
1381     return ret ? -EPROBE_DEFER : 0;
1382     }
1383     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
1384     index 33b36fea1d73..472afeed1d2f 100644
1385     --- a/drivers/block/rbd.c
1386     +++ b/drivers/block/rbd.c
1387     @@ -3397,7 +3397,6 @@ static void cancel_tasks_sync(struct rbd_device *rbd_dev)
1388     {
1389     dout("%s rbd_dev %p\n", __func__, rbd_dev);
1390    
1391     - cancel_delayed_work_sync(&rbd_dev->watch_dwork);
1392     cancel_work_sync(&rbd_dev->acquired_lock_work);
1393     cancel_work_sync(&rbd_dev->released_lock_work);
1394     cancel_delayed_work_sync(&rbd_dev->lock_dwork);
1395     @@ -3415,6 +3414,7 @@ static void rbd_unregister_watch(struct rbd_device *rbd_dev)
1396     rbd_dev->watch_state = RBD_WATCH_STATE_UNREGISTERED;
1397     mutex_unlock(&rbd_dev->watch_mutex);
1398    
1399     + cancel_delayed_work_sync(&rbd_dev->watch_dwork);
1400     ceph_osdc_flush_notifies(&rbd_dev->rbd_client->client->osdc);
1401     }
1402    
1403     diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
1404     index 05ec530b8a3a..330e9b29e145 100644
1405     --- a/drivers/bluetooth/hci_qca.c
1406     +++ b/drivers/bluetooth/hci_qca.c
1407     @@ -935,6 +935,12 @@ static int qca_setup(struct hci_uart *hu)
1408     } else if (ret == -ENOENT) {
1409     /* No patch/nvm-config found, run with original fw/config */
1410     ret = 0;
1411     + } else if (ret == -EAGAIN) {
1412     + /*
1413     + * Userspace firmware loader will return -EAGAIN in case no
1414     + * patch/nvm-config is found, so run with original fw/config.
1415     + */
1416     + ret = 0;
1417     }
1418    
1419     /* Setup bdaddr */
1420     diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
1421     index 91bb98c42a1c..aaf9e5afaad4 100644
1422     --- a/drivers/char/hw_random/core.c
1423     +++ b/drivers/char/hw_random/core.c
1424     @@ -516,11 +516,18 @@ EXPORT_SYMBOL_GPL(hwrng_register);
1425    
1426     void hwrng_unregister(struct hwrng *rng)
1427     {
1428     + int err;
1429     +
1430     mutex_lock(&rng_mutex);
1431    
1432     list_del(&rng->list);
1433     - if (current_rng == rng)
1434     - enable_best_rng();
1435     + if (current_rng == rng) {
1436     + err = enable_best_rng();
1437     + if (err) {
1438     + drop_current_rng();
1439     + cur_rng_set_by_user = 0;
1440     + }
1441     + }
1442    
1443     if (list_empty(&rng_list)) {
1444     mutex_unlock(&rng_mutex);
1445     diff --git a/drivers/char/ipmi/ipmi_bt_sm.c b/drivers/char/ipmi/ipmi_bt_sm.c
1446     index fd4ea8d87d4b..a3397664f800 100644
1447     --- a/drivers/char/ipmi/ipmi_bt_sm.c
1448     +++ b/drivers/char/ipmi/ipmi_bt_sm.c
1449     @@ -504,11 +504,12 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
1450     if (status & BT_H_BUSY) /* clear a leftover H_BUSY */
1451     BT_CONTROL(BT_H_BUSY);
1452    
1453     + bt->timeout = bt->BT_CAP_req2rsp;
1454     +
1455     /* Read BT capabilities if it hasn't been done yet */
1456     if (!bt->BT_CAP_outreqs)
1457     BT_STATE_CHANGE(BT_STATE_CAPABILITIES_BEGIN,
1458     SI_SM_CALL_WITHOUT_DELAY);
1459     - bt->timeout = bt->BT_CAP_req2rsp;
1460     BT_SI_SM_RETURN(SI_SM_IDLE);
1461    
1462     case BT_STATE_XACTION_START:
1463     diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c
1464     index 230b99288024..e4a04b2d3c32 100644
1465     --- a/drivers/char/tpm/tpm-dev-common.c
1466     +++ b/drivers/char/tpm/tpm-dev-common.c
1467     @@ -37,7 +37,7 @@ static void timeout_work(struct work_struct *work)
1468     struct file_priv *priv = container_of(work, struct file_priv, work);
1469    
1470     mutex_lock(&priv->buffer_mutex);
1471     - atomic_set(&priv->data_pending, 0);
1472     + priv->data_pending = 0;
1473     memset(priv->data_buffer, 0, sizeof(priv->data_buffer));
1474     mutex_unlock(&priv->buffer_mutex);
1475     }
1476     @@ -46,7 +46,6 @@ void tpm_common_open(struct file *file, struct tpm_chip *chip,
1477     struct file_priv *priv)
1478     {
1479     priv->chip = chip;
1480     - atomic_set(&priv->data_pending, 0);
1481     mutex_init(&priv->buffer_mutex);
1482     timer_setup(&priv->user_read_timer, user_reader_timeout, 0);
1483     INIT_WORK(&priv->work, timeout_work);
1484     @@ -58,29 +57,24 @@ ssize_t tpm_common_read(struct file *file, char __user *buf,
1485     size_t size, loff_t *off)
1486     {
1487     struct file_priv *priv = file->private_data;
1488     - ssize_t ret_size;
1489     - ssize_t orig_ret_size;
1490     + ssize_t ret_size = 0;
1491     int rc;
1492    
1493     del_singleshot_timer_sync(&priv->user_read_timer);
1494     flush_work(&priv->work);
1495     - ret_size = atomic_read(&priv->data_pending);
1496     - if (ret_size > 0) { /* relay data */
1497     - orig_ret_size = ret_size;
1498     - if (size < ret_size)
1499     - ret_size = size;
1500     + mutex_lock(&priv->buffer_mutex);
1501    
1502     - mutex_lock(&priv->buffer_mutex);
1503     + if (priv->data_pending) {
1504     + ret_size = min_t(ssize_t, size, priv->data_pending);
1505     rc = copy_to_user(buf, priv->data_buffer, ret_size);
1506     - memset(priv->data_buffer, 0, orig_ret_size);
1507     + memset(priv->data_buffer, 0, priv->data_pending);
1508     if (rc)
1509     ret_size = -EFAULT;
1510    
1511     - mutex_unlock(&priv->buffer_mutex);
1512     + priv->data_pending = 0;
1513     }
1514    
1515     - atomic_set(&priv->data_pending, 0);
1516     -
1517     + mutex_unlock(&priv->buffer_mutex);
1518     return ret_size;
1519     }
1520    
1521     @@ -91,17 +85,19 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
1522     size_t in_size = size;
1523     ssize_t out_size;
1524    
1525     + if (in_size > TPM_BUFSIZE)
1526     + return -E2BIG;
1527     +
1528     + mutex_lock(&priv->buffer_mutex);
1529     +
1530     /* Cannot perform a write until the read has cleared either via
1531     * tpm_read or a user_read_timer timeout. This also prevents split
1532     * buffered writes from blocking here.
1533     */
1534     - if (atomic_read(&priv->data_pending) != 0)
1535     + if (priv->data_pending != 0) {
1536     + mutex_unlock(&priv->buffer_mutex);
1537     return -EBUSY;
1538     -
1539     - if (in_size > TPM_BUFSIZE)
1540     - return -E2BIG;
1541     -
1542     - mutex_lock(&priv->buffer_mutex);
1543     + }
1544    
1545     if (copy_from_user
1546     (priv->data_buffer, (void __user *) buf, in_size)) {
1547     @@ -132,7 +128,7 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
1548     return out_size;
1549     }
1550    
1551     - atomic_set(&priv->data_pending, out_size);
1552     + priv->data_pending = out_size;
1553     mutex_unlock(&priv->buffer_mutex);
1554    
1555     /* Set a timeout by which the reader must come claim the result */
1556     @@ -149,5 +145,5 @@ void tpm_common_release(struct file *file, struct file_priv *priv)
1557     del_singleshot_timer_sync(&priv->user_read_timer);
1558     flush_work(&priv->work);
1559     file->private_data = NULL;
1560     - atomic_set(&priv->data_pending, 0);
1561     + priv->data_pending = 0;
1562     }
1563     diff --git a/drivers/char/tpm/tpm-dev.h b/drivers/char/tpm/tpm-dev.h
1564     index ba3b6f9dacf7..b24cfb4d3ee1 100644
1565     --- a/drivers/char/tpm/tpm-dev.h
1566     +++ b/drivers/char/tpm/tpm-dev.h
1567     @@ -8,7 +8,7 @@ struct file_priv {
1568     struct tpm_chip *chip;
1569    
1570     /* Data passed to and from the tpm via the read/write calls */
1571     - atomic_t data_pending;
1572     + size_t data_pending;
1573     struct mutex buffer_mutex;
1574    
1575     struct timer_list user_read_timer; /* user needs to claim result */
1576     diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
1577     index 4e4014eabdb9..6122d3276f72 100644
1578     --- a/drivers/char/tpm/tpm2-space.c
1579     +++ b/drivers/char/tpm/tpm2-space.c
1580     @@ -102,8 +102,9 @@ static int tpm2_load_context(struct tpm_chip *chip, u8 *buf,
1581     * TPM_RC_REFERENCE_H0 means the session has been
1582     * flushed outside the space
1583     */
1584     - rc = -ENOENT;
1585     + *handle = 0;
1586     tpm_buf_destroy(&tbuf);
1587     + return -ENOENT;
1588     } else if (rc > 0) {
1589     dev_warn(&chip->dev, "%s: failed with a TPM error 0x%04X\n",
1590     __func__, rc);
1591     diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c
1592     index 7d3223fc7161..72b6091eb7b9 100644
1593     --- a/drivers/clk/at91/clk-pll.c
1594     +++ b/drivers/clk/at91/clk-pll.c
1595     @@ -132,19 +132,8 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw,
1596     unsigned long parent_rate)
1597     {
1598     struct clk_pll *pll = to_clk_pll(hw);
1599     - unsigned int pllr;
1600     - u16 mul;
1601     - u8 div;
1602     -
1603     - regmap_read(pll->regmap, PLL_REG(pll->id), &pllr);
1604     -
1605     - div = PLL_DIV(pllr);
1606     - mul = PLL_MUL(pllr, pll->layout);
1607     -
1608     - if (!div || !mul)
1609     - return 0;
1610    
1611     - return (parent_rate / div) * (mul + 1);
1612     + return (parent_rate / pll->div) * (pll->mul + 1);
1613     }
1614    
1615     static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate,
1616     diff --git a/drivers/clk/clk-aspeed.c b/drivers/clk/clk-aspeed.c
1617     index 5eb50c31e455..2c23e7d7ba28 100644
1618     --- a/drivers/clk/clk-aspeed.c
1619     +++ b/drivers/clk/clk-aspeed.c
1620     @@ -88,7 +88,7 @@ static const struct aspeed_gate_data aspeed_gates[] = {
1621     [ASPEED_CLK_GATE_GCLK] = { 1, 7, "gclk-gate", NULL, 0 }, /* 2D engine */
1622     [ASPEED_CLK_GATE_MCLK] = { 2, -1, "mclk-gate", "mpll", CLK_IS_CRITICAL }, /* SDRAM */
1623     [ASPEED_CLK_GATE_VCLK] = { 3, 6, "vclk-gate", NULL, 0 }, /* Video Capture */
1624     - [ASPEED_CLK_GATE_BCLK] = { 4, 10, "bclk-gate", "bclk", 0 }, /* PCIe/PCI */
1625     + [ASPEED_CLK_GATE_BCLK] = { 4, 8, "bclk-gate", "bclk", 0 }, /* PCIe/PCI */
1626     [ASPEED_CLK_GATE_DCLK] = { 5, -1, "dclk-gate", NULL, 0 }, /* DAC */
1627     [ASPEED_CLK_GATE_REFCLK] = { 6, -1, "refclk-gate", "clkin", CLK_IS_CRITICAL },
1628     [ASPEED_CLK_GATE_USBPORT2CLK] = { 7, 3, "usb-port2-gate", NULL, 0 }, /* USB2.0 Host port 2 */
1629     @@ -297,7 +297,7 @@ static const u8 aspeed_resets[] = {
1630     [ASPEED_RESET_JTAG_MASTER] = 22,
1631     [ASPEED_RESET_MIC] = 18,
1632     [ASPEED_RESET_PWM] = 9,
1633     - [ASPEED_RESET_PCIVGA] = 8,
1634     + [ASPEED_RESET_PECI] = 10,
1635     [ASPEED_RESET_I2C] = 2,
1636     [ASPEED_RESET_AHB] = 1,
1637     };
1638     diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
1639     index d0524ec71aad..d0d320180c51 100644
1640     --- a/drivers/clk/meson/meson8b.c
1641     +++ b/drivers/clk/meson/meson8b.c
1642     @@ -246,6 +246,13 @@ static struct clk_regmap meson8b_fclk_div2 = {
1643     .ops = &clk_regmap_gate_ops,
1644     .parent_names = (const char *[]){ "fclk_div2_div" },
1645     .num_parents = 1,
1646     + /*
1647     + * FIXME: Ethernet with a RGMII PHYs is not working if
1648     + * fclk_div2 is disabled. it is currently unclear why this
1649     + * is. keep it enabled until the Ethernet driver knows how
1650     + * to manage this clock.
1651     + */
1652     + .flags = CLK_IS_CRITICAL,
1653     },
1654     };
1655    
1656     diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
1657     index 4e88e980fb76..69a7c756658b 100644
1658     --- a/drivers/clk/renesas/renesas-cpg-mssr.c
1659     +++ b/drivers/clk/renesas/renesas-cpg-mssr.c
1660     @@ -258,8 +258,9 @@ struct clk *cpg_mssr_clk_src_twocell_get(struct of_phandle_args *clkspec,
1661     dev_err(dev, "Cannot get %s clock %u: %ld", type, clkidx,
1662     PTR_ERR(clk));
1663     else
1664     - dev_dbg(dev, "clock (%u, %u) is %pC at %pCr Hz\n",
1665     - clkspec->args[0], clkspec->args[1], clk, clk);
1666     + dev_dbg(dev, "clock (%u, %u) is %pC at %lu Hz\n",
1667     + clkspec->args[0], clkspec->args[1], clk,
1668     + clk_get_rate(clk));
1669     return clk;
1670     }
1671    
1672     @@ -326,7 +327,7 @@ static void __init cpg_mssr_register_core_clk(const struct cpg_core_clk *core,
1673     if (IS_ERR_OR_NULL(clk))
1674     goto fail;
1675    
1676     - dev_dbg(dev, "Core clock %pC at %pCr Hz\n", clk, clk);
1677     + dev_dbg(dev, "Core clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
1678     priv->clks[id] = clk;
1679     return;
1680    
1681     @@ -392,7 +393,7 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
1682     if (IS_ERR(clk))
1683     goto fail;
1684    
1685     - dev_dbg(dev, "Module clock %pC at %pCr Hz\n", clk, clk);
1686     + dev_dbg(dev, "Module clock %pC at %lu Hz\n", clk, clk_get_rate(clk));
1687     priv->clks[id] = clk;
1688     priv->smstpcr_saved[clock->index / 32].mask |= BIT(clock->index % 32);
1689     return;
1690     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
1691     index 17e566afbb41..bd3f0a9d5e60 100644
1692     --- a/drivers/cpufreq/intel_pstate.c
1693     +++ b/drivers/cpufreq/intel_pstate.c
1694     @@ -284,6 +284,7 @@ struct pstate_funcs {
1695     static struct pstate_funcs pstate_funcs __read_mostly;
1696    
1697     static int hwp_active __read_mostly;
1698     +static int hwp_mode_bdw __read_mostly;
1699     static bool per_cpu_limits __read_mostly;
1700    
1701     static struct cpufreq_driver *intel_pstate_driver __read_mostly;
1702     @@ -1370,7 +1371,15 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
1703     cpu->pstate.turbo_pstate = pstate_funcs.get_turbo();
1704     cpu->pstate.scaling = pstate_funcs.get_scaling();
1705     cpu->pstate.max_freq = cpu->pstate.max_pstate * cpu->pstate.scaling;
1706     - cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
1707     +
1708     + if (hwp_active && !hwp_mode_bdw) {
1709     + unsigned int phy_max, current_max;
1710     +
1711     + intel_pstate_get_hwp_max(cpu->cpu, &phy_max, &current_max);
1712     + cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling;
1713     + } else {
1714     + cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
1715     + }
1716    
1717     if (pstate_funcs.get_aperf_mperf_shift)
1718     cpu->aperf_mperf_shift = pstate_funcs.get_aperf_mperf_shift();
1719     @@ -2252,28 +2261,36 @@ static inline bool intel_pstate_has_acpi_ppc(void) { return false; }
1720     static inline void intel_pstate_request_control_from_smm(void) {}
1721     #endif /* CONFIG_ACPI */
1722    
1723     +#define INTEL_PSTATE_HWP_BROADWELL 0x01
1724     +
1725     +#define ICPU_HWP(model, hwp_mode) \
1726     + { X86_VENDOR_INTEL, 6, model, X86_FEATURE_HWP, hwp_mode }
1727     +
1728     static const struct x86_cpu_id hwp_support_ids[] __initconst = {
1729     - { X86_VENDOR_INTEL, 6, X86_MODEL_ANY, X86_FEATURE_HWP },
1730     + ICPU_HWP(INTEL_FAM6_BROADWELL_X, INTEL_PSTATE_HWP_BROADWELL),
1731     + ICPU_HWP(INTEL_FAM6_BROADWELL_XEON_D, INTEL_PSTATE_HWP_BROADWELL),
1732     + ICPU_HWP(X86_MODEL_ANY, 0),
1733     {}
1734     };
1735    
1736     static int __init intel_pstate_init(void)
1737     {
1738     + const struct x86_cpu_id *id;
1739     int rc;
1740    
1741     if (no_load)
1742     return -ENODEV;
1743    
1744     - if (x86_match_cpu(hwp_support_ids)) {
1745     + id = x86_match_cpu(hwp_support_ids);
1746     + if (id) {
1747     copy_cpu_funcs(&core_funcs);
1748     if (!no_hwp) {
1749     hwp_active++;
1750     + hwp_mode_bdw = id->driver_data;
1751     intel_pstate.attr = hwp_cpufreq_attrs;
1752     goto hwp_cpu_matched;
1753     }
1754     } else {
1755     - const struct x86_cpu_id *id;
1756     -
1757     id = x86_match_cpu(intel_pstate_cpu_ids);
1758     if (!id)
1759     return -ENODEV;
1760     diff --git a/drivers/cpuidle/cpuidle-powernv.c b/drivers/cpuidle/cpuidle-powernv.c
1761     index 1a8234e706bc..d29e4f041efe 100644
1762     --- a/drivers/cpuidle/cpuidle-powernv.c
1763     +++ b/drivers/cpuidle/cpuidle-powernv.c
1764     @@ -43,9 +43,31 @@ struct stop_psscr_table {
1765    
1766     static struct stop_psscr_table stop_psscr_table[CPUIDLE_STATE_MAX] __read_mostly;
1767    
1768     -static u64 snooze_timeout __read_mostly;
1769     +static u64 default_snooze_timeout __read_mostly;
1770     static bool snooze_timeout_en __read_mostly;
1771    
1772     +static u64 get_snooze_timeout(struct cpuidle_device *dev,
1773     + struct cpuidle_driver *drv,
1774     + int index)
1775     +{
1776     + int i;
1777     +
1778     + if (unlikely(!snooze_timeout_en))
1779     + return default_snooze_timeout;
1780     +
1781     + for (i = index + 1; i < drv->state_count; i++) {
1782     + struct cpuidle_state *s = &drv->states[i];
1783     + struct cpuidle_state_usage *su = &dev->states_usage[i];
1784     +
1785     + if (s->disabled || su->disable)
1786     + continue;
1787     +
1788     + return s->target_residency * tb_ticks_per_usec;
1789     + }
1790     +
1791     + return default_snooze_timeout;
1792     +}
1793     +
1794     static int snooze_loop(struct cpuidle_device *dev,
1795     struct cpuidle_driver *drv,
1796     int index)
1797     @@ -56,7 +78,7 @@ static int snooze_loop(struct cpuidle_device *dev,
1798    
1799     local_irq_enable();
1800    
1801     - snooze_exit_time = get_tb() + snooze_timeout;
1802     + snooze_exit_time = get_tb() + get_snooze_timeout(dev, drv, index);
1803     ppc64_runlatch_off();
1804     HMT_very_low();
1805     while (!need_resched()) {
1806     @@ -465,11 +487,9 @@ static int powernv_idle_probe(void)
1807     cpuidle_state_table = powernv_states;
1808     /* Device tree can indicate more idle states */
1809     max_idle_state = powernv_add_idle_states();
1810     - if (max_idle_state > 1) {
1811     + default_snooze_timeout = TICK_USEC * tb_ticks_per_usec;
1812     + if (max_idle_state > 1)
1813     snooze_timeout_en = true;
1814     - snooze_timeout = powernv_states[1].target_residency *
1815     - tb_ticks_per_usec;
1816     - }
1817     } else
1818     return -ENODEV;
1819    
1820     diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
1821     index 9d08cea3f1b0..9f5f35362f27 100644
1822     --- a/drivers/firmware/efi/libstub/tpm.c
1823     +++ b/drivers/firmware/efi/libstub/tpm.c
1824     @@ -64,7 +64,7 @@ void efi_retrieve_tpm2_eventlog_1_2(efi_system_table_t *sys_table_arg)
1825     efi_guid_t tcg2_guid = EFI_TCG2_PROTOCOL_GUID;
1826     efi_guid_t linux_eventlog_guid = LINUX_EFI_TPM_EVENT_LOG_GUID;
1827     efi_status_t status;
1828     - efi_physical_addr_t log_location, log_last_entry;
1829     + efi_physical_addr_t log_location = 0, log_last_entry = 0;
1830     struct linux_efi_tpm_eventlog *log_tbl = NULL;
1831     unsigned long first_entry_addr, last_entry_addr;
1832     size_t log_size, last_entry_size;
1833     diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
1834     index 3b73dee6fdc6..e97105ae4158 100644
1835     --- a/drivers/hwmon/k10temp.c
1836     +++ b/drivers/hwmon/k10temp.c
1837     @@ -37,6 +37,10 @@ MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
1838     /* Provide lock for writing to NB_SMU_IND_ADDR */
1839     static DEFINE_MUTEX(nb_smu_ind_mutex);
1840    
1841     +#ifndef PCI_DEVICE_ID_AMD_15H_M70H_NB_F3
1842     +#define PCI_DEVICE_ID_AMD_15H_M70H_NB_F3 0x15b3
1843     +#endif
1844     +
1845     #ifndef PCI_DEVICE_ID_AMD_17H_DF_F3
1846     #define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463
1847     #endif
1848     @@ -320,6 +324,7 @@ static const struct pci_device_id k10temp_id_table[] = {
1849     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) },
1850     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F3) },
1851     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F3) },
1852     + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M70H_NB_F3) },
1853     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
1854     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
1855     { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
1856     diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
1857     index 3df0efd69ae3..1147bddb8b2c 100644
1858     --- a/drivers/i2c/algos/i2c-algo-bit.c
1859     +++ b/drivers/i2c/algos/i2c-algo-bit.c
1860     @@ -649,11 +649,6 @@ static int __i2c_bit_add_bus(struct i2c_adapter *adap,
1861     if (bit_adap->getscl == NULL)
1862     adap->quirks = &i2c_bit_quirk_no_clk_stretch;
1863    
1864     - /* Bring bus to a known state. Looks like STOP if bus is not free yet */
1865     - setscl(bit_adap, 1);
1866     - udelay(bit_adap->udelay);
1867     - setsda(bit_adap, 1);
1868     -
1869     ret = add_adapter(adap);
1870     if (ret < 0)
1871     return ret;
1872     diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c
1873     index 58abb3eced58..20b81bec0b0b 100644
1874     --- a/drivers/i2c/busses/i2c-gpio.c
1875     +++ b/drivers/i2c/busses/i2c-gpio.c
1876     @@ -279,9 +279,9 @@ static int i2c_gpio_probe(struct platform_device *pdev)
1877     * required for an I2C bus.
1878     */
1879     if (pdata->scl_is_open_drain)
1880     - gflags = GPIOD_OUT_LOW;
1881     + gflags = GPIOD_OUT_HIGH;
1882     else
1883     - gflags = GPIOD_OUT_LOW_OPEN_DRAIN;
1884     + gflags = GPIOD_OUT_HIGH_OPEN_DRAIN;
1885     priv->scl = i2c_gpio_get_desc(dev, "scl", 1, gflags);
1886     if (IS_ERR(priv->scl))
1887     return PTR_ERR(priv->scl);
1888     diff --git a/drivers/iio/accel/sca3000.c b/drivers/iio/accel/sca3000.c
1889     index f33dadf7b262..562f125235db 100644
1890     --- a/drivers/iio/accel/sca3000.c
1891     +++ b/drivers/iio/accel/sca3000.c
1892     @@ -1277,7 +1277,7 @@ static int sca3000_configure_ring(struct iio_dev *indio_dev)
1893     {
1894     struct iio_buffer *buffer;
1895    
1896     - buffer = iio_kfifo_allocate();
1897     + buffer = devm_iio_kfifo_allocate(&indio_dev->dev);
1898     if (!buffer)
1899     return -ENOMEM;
1900    
1901     @@ -1287,11 +1287,6 @@ static int sca3000_configure_ring(struct iio_dev *indio_dev)
1902     return 0;
1903     }
1904    
1905     -static void sca3000_unconfigure_ring(struct iio_dev *indio_dev)
1906     -{
1907     - iio_kfifo_free(indio_dev->buffer);
1908     -}
1909     -
1910     static inline
1911     int __sca3000_hw_ring_state_set(struct iio_dev *indio_dev, bool state)
1912     {
1913     @@ -1546,8 +1541,6 @@ static int sca3000_remove(struct spi_device *spi)
1914     if (spi->irq)
1915     free_irq(spi->irq, indio_dev);
1916    
1917     - sca3000_unconfigure_ring(indio_dev);
1918     -
1919     return 0;
1920     }
1921    
1922     diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
1923     index 70fbf92f9827..03a5f7d6cb0c 100644
1924     --- a/drivers/iio/adc/ad7791.c
1925     +++ b/drivers/iio/adc/ad7791.c
1926     @@ -244,58 +244,9 @@ static int ad7791_read_raw(struct iio_dev *indio_dev,
1927     return -EINVAL;
1928     }
1929    
1930     -static const char * const ad7791_sample_freq_avail[] = {
1931     - [AD7791_FILTER_RATE_120] = "120",
1932     - [AD7791_FILTER_RATE_100] = "100",
1933     - [AD7791_FILTER_RATE_33_3] = "33.3",
1934     - [AD7791_FILTER_RATE_20] = "20",
1935     - [AD7791_FILTER_RATE_16_6] = "16.6",
1936     - [AD7791_FILTER_RATE_16_7] = "16.7",
1937     - [AD7791_FILTER_RATE_13_3] = "13.3",
1938     - [AD7791_FILTER_RATE_9_5] = "9.5",
1939     -};
1940     -
1941     -static ssize_t ad7791_read_frequency(struct device *dev,
1942     - struct device_attribute *attr, char *buf)
1943     -{
1944     - struct iio_dev *indio_dev = dev_to_iio_dev(dev);
1945     - struct ad7791_state *st = iio_priv(indio_dev);
1946     - unsigned int rate = st->filter & AD7791_FILTER_RATE_MASK;
1947     -
1948     - return sprintf(buf, "%s\n", ad7791_sample_freq_avail[rate]);
1949     -}
1950     -
1951     -static ssize_t ad7791_write_frequency(struct device *dev,
1952     - struct device_attribute *attr, const char *buf, size_t len)
1953     -{
1954     - struct iio_dev *indio_dev = dev_to_iio_dev(dev);
1955     - struct ad7791_state *st = iio_priv(indio_dev);
1956     - int i, ret;
1957     -
1958     - i = sysfs_match_string(ad7791_sample_freq_avail, buf);
1959     - if (i < 0)
1960     - return i;
1961     -
1962     - ret = iio_device_claim_direct_mode(indio_dev);
1963     - if (ret)
1964     - return ret;
1965     - st->filter &= ~AD7791_FILTER_RATE_MASK;
1966     - st->filter |= i;
1967     - ad_sd_write_reg(&st->sd, AD7791_REG_FILTER, sizeof(st->filter),
1968     - st->filter);
1969     - iio_device_release_direct_mode(indio_dev);
1970     -
1971     - return len;
1972     -}
1973     -
1974     -static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
1975     - ad7791_read_frequency,
1976     - ad7791_write_frequency);
1977     -
1978     static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("120 100 33.3 20 16.7 16.6 13.3 9.5");
1979    
1980     static struct attribute *ad7791_attributes[] = {
1981     - &iio_dev_attr_sampling_frequency.dev_attr.attr,
1982     &iio_const_attr_sampling_frequency_available.dev_attr.attr,
1983     NULL
1984     };
1985     diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
1986     index 2b6c9b516070..d76455edd292 100644
1987     --- a/drivers/infiniband/core/umem.c
1988     +++ b/drivers/infiniband/core/umem.c
1989     @@ -119,16 +119,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
1990     umem->length = size;
1991     umem->address = addr;
1992     umem->page_shift = PAGE_SHIFT;
1993     - /*
1994     - * We ask for writable memory if any of the following
1995     - * access flags are set. "Local write" and "remote write"
1996     - * obviously require write access. "Remote atomic" can do
1997     - * things like fetch and add, which will modify memory, and
1998     - * "MW bind" can change permissions by binding a window.
1999     - */
2000     - umem->writable = !!(access &
2001     - (IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_WRITE |
2002     - IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND));
2003     + umem->writable = ib_access_writable(access);
2004    
2005     if (access & IB_ACCESS_ON_DEMAND) {
2006     ret = ib_umem_odp_get(context, umem, access);
2007     diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
2008     index 4445d8ee9314..2d34a9c827b7 100644
2009     --- a/drivers/infiniband/core/uverbs_main.c
2010     +++ b/drivers/infiniband/core/uverbs_main.c
2011     @@ -734,10 +734,6 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
2012     if (ret)
2013     return ret;
2014    
2015     - if (!file->ucontext &&
2016     - (command != IB_USER_VERBS_CMD_GET_CONTEXT || extended))
2017     - return -EINVAL;
2018     -
2019     if (extended) {
2020     if (count < (sizeof(hdr) + sizeof(ex_hdr)))
2021     return -EINVAL;
2022     @@ -757,6 +753,16 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
2023     goto out;
2024     }
2025    
2026     + /*
2027     + * Must be after the ib_dev check, as once the RCU clears ib_dev ==
2028     + * NULL means ucontext == NULL
2029     + */
2030     + if (!file->ucontext &&
2031     + (command != IB_USER_VERBS_CMD_GET_CONTEXT || extended)) {
2032     + ret = -EINVAL;
2033     + goto out;
2034     + }
2035     +
2036     if (!verify_command_mask(ib_dev, command, extended)) {
2037     ret = -EOPNOTSUPP;
2038     goto out;
2039     diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
2040     index 6ddfb1fade79..def3bc1e6447 100644
2041     --- a/drivers/infiniband/core/verbs.c
2042     +++ b/drivers/infiniband/core/verbs.c
2043     @@ -1562,11 +1562,12 @@ EXPORT_SYMBOL(ib_destroy_qp);
2044    
2045     /* Completion queues */
2046    
2047     -struct ib_cq *ib_create_cq(struct ib_device *device,
2048     - ib_comp_handler comp_handler,
2049     - void (*event_handler)(struct ib_event *, void *),
2050     - void *cq_context,
2051     - const struct ib_cq_init_attr *cq_attr)
2052     +struct ib_cq *__ib_create_cq(struct ib_device *device,
2053     + ib_comp_handler comp_handler,
2054     + void (*event_handler)(struct ib_event *, void *),
2055     + void *cq_context,
2056     + const struct ib_cq_init_attr *cq_attr,
2057     + const char *caller)
2058     {
2059     struct ib_cq *cq;
2060    
2061     @@ -1580,12 +1581,13 @@ struct ib_cq *ib_create_cq(struct ib_device *device,
2062     cq->cq_context = cq_context;
2063     atomic_set(&cq->usecnt, 0);
2064     cq->res.type = RDMA_RESTRACK_CQ;
2065     + cq->res.kern_name = caller;
2066     rdma_restrack_add(&cq->res);
2067     }
2068    
2069     return cq;
2070     }
2071     -EXPORT_SYMBOL(ib_create_cq);
2072     +EXPORT_SYMBOL(__ib_create_cq);
2073    
2074     int rdma_set_cq_moderation(struct ib_cq *cq, u16 cq_count, u16 cq_period)
2075     {
2076     diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
2077     index e6bdd0c1e80a..ebccc4c84827 100644
2078     --- a/drivers/infiniband/hw/hfi1/chip.c
2079     +++ b/drivers/infiniband/hw/hfi1/chip.c
2080     @@ -6829,7 +6829,7 @@ static void rxe_kernel_unfreeze(struct hfi1_devdata *dd)
2081     }
2082     rcvmask = HFI1_RCVCTRL_CTXT_ENB;
2083     /* HFI1_RCVCTRL_TAILUPD_[ENB|DIS] needs to be set explicitly */
2084     - rcvmask |= HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL) ?
2085     + rcvmask |= rcd->rcvhdrtail_kvaddr ?
2086     HFI1_RCVCTRL_TAILUPD_ENB : HFI1_RCVCTRL_TAILUPD_DIS;
2087     hfi1_rcvctrl(dd, rcvmask, rcd);
2088     hfi1_rcd_put(rcd);
2089     @@ -8355,7 +8355,7 @@ static inline int check_packet_present(struct hfi1_ctxtdata *rcd)
2090     u32 tail;
2091     int present;
2092    
2093     - if (!HFI1_CAP_IS_KSET(DMA_RTAIL))
2094     + if (!rcd->rcvhdrtail_kvaddr)
2095     present = (rcd->seq_cnt ==
2096     rhf_rcv_seq(rhf_to_cpu(get_rhf_addr(rcd))));
2097     else /* is RDMA rtail */
2098     @@ -11823,7 +11823,7 @@ void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op,
2099     /* reset the tail and hdr addresses, and sequence count */
2100     write_kctxt_csr(dd, ctxt, RCV_HDR_ADDR,
2101     rcd->rcvhdrq_dma);
2102     - if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL))
2103     + if (rcd->rcvhdrtail_kvaddr)
2104     write_kctxt_csr(dd, ctxt, RCV_HDR_TAIL_ADDR,
2105     rcd->rcvhdrqtailaddr_dma);
2106     rcd->seq_cnt = 1;
2107     @@ -11903,7 +11903,7 @@ void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op,
2108     rcvctrl |= RCV_CTXT_CTRL_INTR_AVAIL_SMASK;
2109     if (op & HFI1_RCVCTRL_INTRAVAIL_DIS)
2110     rcvctrl &= ~RCV_CTXT_CTRL_INTR_AVAIL_SMASK;
2111     - if (op & HFI1_RCVCTRL_TAILUPD_ENB && rcd->rcvhdrqtailaddr_dma)
2112     + if ((op & HFI1_RCVCTRL_TAILUPD_ENB) && rcd->rcvhdrtail_kvaddr)
2113     rcvctrl |= RCV_CTXT_CTRL_TAIL_UPD_SMASK;
2114     if (op & HFI1_RCVCTRL_TAILUPD_DIS) {
2115     /* See comment on RcvCtxtCtrl.TailUpd above */
2116     diff --git a/drivers/infiniband/hw/hfi1/debugfs.c b/drivers/infiniband/hw/hfi1/debugfs.c
2117     index 852173bf05d0..5343960610fe 100644
2118     --- a/drivers/infiniband/hw/hfi1/debugfs.c
2119     +++ b/drivers/infiniband/hw/hfi1/debugfs.c
2120     @@ -1227,7 +1227,8 @@ DEBUGFS_FILE_OPS(fault_stats);
2121    
2122     static void fault_exit_opcode_debugfs(struct hfi1_ibdev *ibd)
2123     {
2124     - debugfs_remove_recursive(ibd->fault_opcode->dir);
2125     + if (ibd->fault_opcode)
2126     + debugfs_remove_recursive(ibd->fault_opcode->dir);
2127     kfree(ibd->fault_opcode);
2128     ibd->fault_opcode = NULL;
2129     }
2130     @@ -1255,6 +1256,7 @@ static int fault_init_opcode_debugfs(struct hfi1_ibdev *ibd)
2131     &ibd->fault_opcode->attr);
2132     if (IS_ERR(ibd->fault_opcode->dir)) {
2133     kfree(ibd->fault_opcode);
2134     + ibd->fault_opcode = NULL;
2135     return -ENOENT;
2136     }
2137    
2138     @@ -1278,7 +1280,8 @@ static int fault_init_opcode_debugfs(struct hfi1_ibdev *ibd)
2139    
2140     static void fault_exit_packet_debugfs(struct hfi1_ibdev *ibd)
2141     {
2142     - debugfs_remove_recursive(ibd->fault_packet->dir);
2143     + if (ibd->fault_packet)
2144     + debugfs_remove_recursive(ibd->fault_packet->dir);
2145     kfree(ibd->fault_packet);
2146     ibd->fault_packet = NULL;
2147     }
2148     @@ -1304,6 +1307,7 @@ static int fault_init_packet_debugfs(struct hfi1_ibdev *ibd)
2149     &ibd->fault_opcode->attr);
2150     if (IS_ERR(ibd->fault_packet->dir)) {
2151     kfree(ibd->fault_packet);
2152     + ibd->fault_packet = NULL;
2153     return -ENOENT;
2154     }
2155    
2156     diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c
2157     index da4aa1a95b11..cf25913bd81c 100644
2158     --- a/drivers/infiniband/hw/hfi1/file_ops.c
2159     +++ b/drivers/infiniband/hw/hfi1/file_ops.c
2160     @@ -505,7 +505,7 @@ static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma)
2161     ret = -EINVAL;
2162     goto done;
2163     }
2164     - if (flags & VM_WRITE) {
2165     + if ((flags & VM_WRITE) || !uctxt->rcvhdrtail_kvaddr) {
2166     ret = -EPERM;
2167     goto done;
2168     }
2169     @@ -689,8 +689,8 @@ static int hfi1_file_close(struct inode *inode, struct file *fp)
2170     * checks to default and disable the send context.
2171     */
2172     if (uctxt->sc) {
2173     - set_pio_integrity(uctxt->sc);
2174     sc_disable(uctxt->sc);
2175     + set_pio_integrity(uctxt->sc);
2176     }
2177    
2178     hfi1_free_ctxt_rcv_groups(uctxt);
2179     diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h
2180     index cac2c62bc42d..9c97c180c35e 100644
2181     --- a/drivers/infiniband/hw/hfi1/hfi.h
2182     +++ b/drivers/infiniband/hw/hfi1/hfi.h
2183     @@ -1856,6 +1856,7 @@ struct cc_state *get_cc_state_protected(struct hfi1_pportdata *ppd)
2184     #define HFI1_HAS_SDMA_TIMEOUT 0x8
2185     #define HFI1_HAS_SEND_DMA 0x10 /* Supports Send DMA */
2186     #define HFI1_FORCED_FREEZE 0x80 /* driver forced freeze mode */
2187     +#define HFI1_SHUTDOWN 0x100 /* device is shutting down */
2188    
2189     /* IB dword length mask in PBC (lower 11 bits); same for all chips */
2190     #define HFI1_PBC_LENGTH_MASK ((1 << 11) - 1)
2191     diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c
2192     index 6309edf811df..92e802a64fc4 100644
2193     --- a/drivers/infiniband/hw/hfi1/init.c
2194     +++ b/drivers/infiniband/hw/hfi1/init.c
2195     @@ -1058,6 +1058,10 @@ static void shutdown_device(struct hfi1_devdata *dd)
2196     unsigned pidx;
2197     int i;
2198    
2199     + if (dd->flags & HFI1_SHUTDOWN)
2200     + return;
2201     + dd->flags |= HFI1_SHUTDOWN;
2202     +
2203     for (pidx = 0; pidx < dd->num_pports; ++pidx) {
2204     ppd = dd->pport + pidx;
2205    
2206     @@ -1391,6 +1395,7 @@ void hfi1_disable_after_error(struct hfi1_devdata *dd)
2207    
2208     static void remove_one(struct pci_dev *);
2209     static int init_one(struct pci_dev *, const struct pci_device_id *);
2210     +static void shutdown_one(struct pci_dev *);
2211    
2212     #define DRIVER_LOAD_MSG "Intel " DRIVER_NAME " loaded: "
2213     #define PFX DRIVER_NAME ": "
2214     @@ -1407,6 +1412,7 @@ static struct pci_driver hfi1_pci_driver = {
2215     .name = DRIVER_NAME,
2216     .probe = init_one,
2217     .remove = remove_one,
2218     + .shutdown = shutdown_one,
2219     .id_table = hfi1_pci_tbl,
2220     .err_handler = &hfi1_pci_err_handler,
2221     };
2222     @@ -1816,6 +1822,13 @@ static void remove_one(struct pci_dev *pdev)
2223     postinit_cleanup(dd);
2224     }
2225    
2226     +static void shutdown_one(struct pci_dev *pdev)
2227     +{
2228     + struct hfi1_devdata *dd = pci_get_drvdata(pdev);
2229     +
2230     + shutdown_device(dd);
2231     +}
2232     +
2233     /**
2234     * hfi1_create_rcvhdrq - create a receive header queue
2235     * @dd: the hfi1_ib device
2236     @@ -1831,7 +1844,6 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
2237     u64 reg;
2238    
2239     if (!rcd->rcvhdrq) {
2240     - dma_addr_t dma_hdrqtail;
2241     gfp_t gfp_flags;
2242    
2243     /*
2244     @@ -1856,13 +1868,13 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
2245     goto bail;
2246     }
2247    
2248     - if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL)) {
2249     + if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL) ||
2250     + HFI1_CAP_UGET_MASK(rcd->flags, DMA_RTAIL)) {
2251     rcd->rcvhdrtail_kvaddr = dma_zalloc_coherent(
2252     - &dd->pcidev->dev, PAGE_SIZE, &dma_hdrqtail,
2253     - gfp_flags);
2254     + &dd->pcidev->dev, PAGE_SIZE,
2255     + &rcd->rcvhdrqtailaddr_dma, gfp_flags);
2256     if (!rcd->rcvhdrtail_kvaddr)
2257     goto bail_free;
2258     - rcd->rcvhdrqtailaddr_dma = dma_hdrqtail;
2259     }
2260    
2261     rcd->rcvhdrq_size = amt;
2262     diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c
2263     index 40dac4d16eb8..9cac15d10c4f 100644
2264     --- a/drivers/infiniband/hw/hfi1/pio.c
2265     +++ b/drivers/infiniband/hw/hfi1/pio.c
2266     @@ -50,8 +50,6 @@
2267     #include "qp.h"
2268     #include "trace.h"
2269    
2270     -#define SC_CTXT_PACKET_EGRESS_TIMEOUT 350 /* in chip cycles */
2271     -
2272     #define SC(name) SEND_CTXT_##name
2273     /*
2274     * Send Context functions
2275     @@ -961,15 +959,40 @@ void sc_disable(struct send_context *sc)
2276     }
2277    
2278     /* return SendEgressCtxtStatus.PacketOccupancy */
2279     -#define packet_occupancy(r) \
2280     - (((r) & SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_PACKET_OCCUPANCY_SMASK)\
2281     - >> SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_PACKET_OCCUPANCY_SHIFT)
2282     +static u64 packet_occupancy(u64 reg)
2283     +{
2284     + return (reg &
2285     + SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_PACKET_OCCUPANCY_SMASK)
2286     + >> SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_PACKET_OCCUPANCY_SHIFT;
2287     +}
2288    
2289     /* is egress halted on the context? */
2290     -#define egress_halted(r) \
2291     - ((r) & SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_HALT_STATUS_SMASK)
2292     +static bool egress_halted(u64 reg)
2293     +{
2294     + return !!(reg & SEND_EGRESS_CTXT_STATUS_CTXT_EGRESS_HALT_STATUS_SMASK);
2295     +}
2296    
2297     -/* wait for packet egress, optionally pause for credit return */
2298     +/* is the send context halted? */
2299     +static bool is_sc_halted(struct hfi1_devdata *dd, u32 hw_context)
2300     +{
2301     + return !!(read_kctxt_csr(dd, hw_context, SC(STATUS)) &
2302     + SC(STATUS_CTXT_HALTED_SMASK));
2303     +}
2304     +
2305     +/**
2306     + * sc_wait_for_packet_egress
2307     + * @sc: valid send context
2308     + * @pause: wait for credit return
2309     + *
2310     + * Wait for packet egress, optionally pause for credit return
2311     + *
2312     + * Egress halt and Context halt are not necessarily the same thing, so
2313     + * check for both.
2314     + *
2315     + * NOTE: The context halt bit may not be set immediately. Because of this,
2316     + * it is necessary to check the SW SFC_HALTED bit (set in the IRQ) and the HW
2317     + * context bit to determine if the context is halted.
2318     + */
2319     static void sc_wait_for_packet_egress(struct send_context *sc, int pause)
2320     {
2321     struct hfi1_devdata *dd = sc->dd;
2322     @@ -981,8 +1004,9 @@ static void sc_wait_for_packet_egress(struct send_context *sc, int pause)
2323     reg_prev = reg;
2324     reg = read_csr(dd, sc->hw_context * 8 +
2325     SEND_EGRESS_CTXT_STATUS);
2326     - /* done if egress is stopped */
2327     - if (egress_halted(reg))
2328     + /* done if any halt bits, SW or HW are set */
2329     + if (sc->flags & SCF_HALTED ||
2330     + is_sc_halted(dd, sc->hw_context) || egress_halted(reg))
2331     break;
2332     reg = packet_occupancy(reg);
2333     if (reg == 0)
2334     diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
2335     index 0793a21d76f4..d604b3d5aa3e 100644
2336     --- a/drivers/infiniband/hw/mlx4/mad.c
2337     +++ b/drivers/infiniband/hw/mlx4/mad.c
2338     @@ -1934,7 +1934,6 @@ static void mlx4_ib_sqp_comp_worker(struct work_struct *work)
2339     "buf:%lld\n", wc.wr_id);
2340     break;
2341     default:
2342     - BUG_ON(1);
2343     break;
2344     }
2345     } else {
2346     diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
2347     index 61d8b06375bb..ed1f253faf97 100644
2348     --- a/drivers/infiniband/hw/mlx4/mr.c
2349     +++ b/drivers/infiniband/hw/mlx4/mr.c
2350     @@ -367,6 +367,40 @@ int mlx4_ib_umem_calc_optimal_mtt_size(struct ib_umem *umem, u64 start_va,
2351     return block_shift;
2352     }
2353    
2354     +static struct ib_umem *mlx4_get_umem_mr(struct ib_ucontext *context, u64 start,
2355     + u64 length, u64 virt_addr,
2356     + int access_flags)
2357     +{
2358     + /*
2359     + * Force registering the memory as writable if the underlying pages
2360     + * are writable. This is so rereg can change the access permissions
2361     + * from readable to writable without having to run through ib_umem_get
2362     + * again
2363     + */
2364     + if (!ib_access_writable(access_flags)) {
2365     + struct vm_area_struct *vma;
2366     +
2367     + down_read(&current->mm->mmap_sem);
2368     + /*
2369     + * FIXME: Ideally this would iterate over all the vmas that
2370     + * cover the memory, but for now it requires a single vma to
2371     + * entirely cover the MR to support RO mappings.
2372     + */
2373     + vma = find_vma(current->mm, start);
2374     + if (vma && vma->vm_end >= start + length &&
2375     + vma->vm_start <= start) {
2376     + if (vma->vm_flags & VM_WRITE)
2377     + access_flags |= IB_ACCESS_LOCAL_WRITE;
2378     + } else {
2379     + access_flags |= IB_ACCESS_LOCAL_WRITE;
2380     + }
2381     +
2382     + up_read(&current->mm->mmap_sem);
2383     + }
2384     +
2385     + return ib_umem_get(context, start, length, access_flags, 0);
2386     +}
2387     +
2388     struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
2389     u64 virt_addr, int access_flags,
2390     struct ib_udata *udata)
2391     @@ -381,10 +415,8 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
2392     if (!mr)
2393     return ERR_PTR(-ENOMEM);
2394    
2395     - /* Force registering the memory as writable. */
2396     - /* Used for memory re-registeration. HCA protects the access */
2397     - mr->umem = ib_umem_get(pd->uobject->context, start, length,
2398     - access_flags | IB_ACCESS_LOCAL_WRITE, 0);
2399     + mr->umem = mlx4_get_umem_mr(pd->uobject->context, start, length,
2400     + virt_addr, access_flags);
2401     if (IS_ERR(mr->umem)) {
2402     err = PTR_ERR(mr->umem);
2403     goto err_free;
2404     @@ -454,6 +486,9 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
2405     }
2406    
2407     if (flags & IB_MR_REREG_ACCESS) {
2408     + if (ib_access_writable(mr_access_flags) && !mmr->umem->writable)
2409     + return -EPERM;
2410     +
2411     err = mlx4_mr_hw_change_access(dev->dev, *pmpt_entry,
2412     convert_access(mr_access_flags));
2413    
2414     @@ -467,10 +502,9 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
2415    
2416     mlx4_mr_rereg_mem_cleanup(dev->dev, &mmr->mmr);
2417     ib_umem_release(mmr->umem);
2418     - mmr->umem = ib_umem_get(mr->uobject->context, start, length,
2419     - mr_access_flags |
2420     - IB_ACCESS_LOCAL_WRITE,
2421     - 0);
2422     + mmr->umem =
2423     + mlx4_get_umem_mr(mr->uobject->context, start, length,
2424     + virt_addr, mr_access_flags);
2425     if (IS_ERR(mmr->umem)) {
2426     err = PTR_ERR(mmr->umem);
2427     /* Prevent mlx4_ib_dereg_mr from free'ing invalid pointer */
2428     diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
2429     index 77d257ec899b..9f6bc34cd4db 100644
2430     --- a/drivers/infiniband/hw/mlx5/cq.c
2431     +++ b/drivers/infiniband/hw/mlx5/cq.c
2432     @@ -637,7 +637,7 @@ static int mlx5_poll_one(struct mlx5_ib_cq *cq,
2433     }
2434    
2435     static int poll_soft_wc(struct mlx5_ib_cq *cq, int num_entries,
2436     - struct ib_wc *wc)
2437     + struct ib_wc *wc, bool is_fatal_err)
2438     {
2439     struct mlx5_ib_dev *dev = to_mdev(cq->ibcq.device);
2440     struct mlx5_ib_wc *soft_wc, *next;
2441     @@ -650,6 +650,10 @@ static int poll_soft_wc(struct mlx5_ib_cq *cq, int num_entries,
2442     mlx5_ib_dbg(dev, "polled software generated completion on CQ 0x%x\n",
2443     cq->mcq.cqn);
2444    
2445     + if (unlikely(is_fatal_err)) {
2446     + soft_wc->wc.status = IB_WC_WR_FLUSH_ERR;
2447     + soft_wc->wc.vendor_err = MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
2448     + }
2449     wc[npolled++] = soft_wc->wc;
2450     list_del(&soft_wc->list);
2451     kfree(soft_wc);
2452     @@ -670,12 +674,17 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
2453    
2454     spin_lock_irqsave(&cq->lock, flags);
2455     if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
2456     - mlx5_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
2457     + /* make sure no soft wqe's are waiting */
2458     + if (unlikely(!list_empty(&cq->wc_list)))
2459     + soft_polled = poll_soft_wc(cq, num_entries, wc, true);
2460     +
2461     + mlx5_ib_poll_sw_comp(cq, num_entries - soft_polled,
2462     + wc + soft_polled, &npolled);
2463     goto out;
2464     }
2465    
2466     if (unlikely(!list_empty(&cq->wc_list)))
2467     - soft_polled = poll_soft_wc(cq, num_entries, wc);
2468     + soft_polled = poll_soft_wc(cq, num_entries, wc, false);
2469    
2470     for (npolled = 0; npolled < num_entries - soft_polled; npolled++) {
2471     if (mlx5_poll_one(cq, &cur_qp, wc + soft_polled + npolled))
2472     diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
2473     index 46072455130c..3461df002f81 100644
2474     --- a/drivers/infiniband/hw/qib/qib.h
2475     +++ b/drivers/infiniband/hw/qib/qib.h
2476     @@ -1228,6 +1228,7 @@ static inline struct qib_ibport *to_iport(struct ib_device *ibdev, u8 port)
2477     #define QIB_BADINTR 0x8000 /* severe interrupt problems */
2478     #define QIB_DCA_ENABLED 0x10000 /* Direct Cache Access enabled */
2479     #define QIB_HAS_QSFP 0x20000 /* device (card instance) has QSFP */
2480     +#define QIB_SHUTDOWN 0x40000 /* device is shutting down */
2481    
2482     /*
2483     * values for ppd->lflags (_ib_port_ related flags)
2484     @@ -1423,8 +1424,7 @@ u64 qib_sps_ints(void);
2485     /*
2486     * dma_addr wrappers - all 0's invalid for hw
2487     */
2488     -dma_addr_t qib_map_page(struct pci_dev *, struct page *, unsigned long,
2489     - size_t, int);
2490     +int qib_map_page(struct pci_dev *d, struct page *p, dma_addr_t *daddr);
2491     struct pci_dev *qib_get_pci_dev(struct rvt_dev_info *rdi);
2492    
2493     /*
2494     diff --git a/drivers/infiniband/hw/qib/qib_file_ops.c b/drivers/infiniband/hw/qib/qib_file_ops.c
2495     index 6a8800b65047..49c8e926cc64 100644
2496     --- a/drivers/infiniband/hw/qib/qib_file_ops.c
2497     +++ b/drivers/infiniband/hw/qib/qib_file_ops.c
2498     @@ -364,6 +364,8 @@ static int qib_tid_update(struct qib_ctxtdata *rcd, struct file *fp,
2499     goto done;
2500     }
2501     for (i = 0; i < cnt; i++, vaddr += PAGE_SIZE) {
2502     + dma_addr_t daddr;
2503     +
2504     for (; ntids--; tid++) {
2505     if (tid == tidcnt)
2506     tid = 0;
2507     @@ -380,12 +382,14 @@ static int qib_tid_update(struct qib_ctxtdata *rcd, struct file *fp,
2508     ret = -ENOMEM;
2509     break;
2510     }
2511     + ret = qib_map_page(dd->pcidev, pagep[i], &daddr);
2512     + if (ret)
2513     + break;
2514     +
2515     tidlist[i] = tid + tidoff;
2516     /* we "know" system pages and TID pages are same size */
2517     dd->pageshadow[ctxttid + tid] = pagep[i];
2518     - dd->physshadow[ctxttid + tid] =
2519     - qib_map_page(dd->pcidev, pagep[i], 0, PAGE_SIZE,
2520     - PCI_DMA_FROMDEVICE);
2521     + dd->physshadow[ctxttid + tid] = daddr;
2522     /*
2523     * don't need atomic or it's overhead
2524     */
2525     diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
2526     index 6c68f8a97018..015520289735 100644
2527     --- a/drivers/infiniband/hw/qib/qib_init.c
2528     +++ b/drivers/infiniband/hw/qib/qib_init.c
2529     @@ -841,6 +841,10 @@ static void qib_shutdown_device(struct qib_devdata *dd)
2530     struct qib_pportdata *ppd;
2531     unsigned pidx;
2532    
2533     + if (dd->flags & QIB_SHUTDOWN)
2534     + return;
2535     + dd->flags |= QIB_SHUTDOWN;
2536     +
2537     for (pidx = 0; pidx < dd->num_pports; ++pidx) {
2538     ppd = dd->pport + pidx;
2539    
2540     @@ -1182,6 +1186,7 @@ void qib_disable_after_error(struct qib_devdata *dd)
2541    
2542     static void qib_remove_one(struct pci_dev *);
2543     static int qib_init_one(struct pci_dev *, const struct pci_device_id *);
2544     +static void qib_shutdown_one(struct pci_dev *);
2545    
2546     #define DRIVER_LOAD_MSG "Intel " QIB_DRV_NAME " loaded: "
2547     #define PFX QIB_DRV_NAME ": "
2548     @@ -1199,6 +1204,7 @@ static struct pci_driver qib_driver = {
2549     .name = QIB_DRV_NAME,
2550     .probe = qib_init_one,
2551     .remove = qib_remove_one,
2552     + .shutdown = qib_shutdown_one,
2553     .id_table = qib_pci_tbl,
2554     .err_handler = &qib_pci_err_handler,
2555     };
2556     @@ -1549,6 +1555,13 @@ static void qib_remove_one(struct pci_dev *pdev)
2557     qib_postinit_cleanup(dd);
2558     }
2559    
2560     +static void qib_shutdown_one(struct pci_dev *pdev)
2561     +{
2562     + struct qib_devdata *dd = pci_get_drvdata(pdev);
2563     +
2564     + qib_shutdown_device(dd);
2565     +}
2566     +
2567     /**
2568     * qib_create_rcvhdrq - create a receive header queue
2569     * @dd: the qlogic_ib device
2570     diff --git a/drivers/infiniband/hw/qib/qib_user_pages.c b/drivers/infiniband/hw/qib/qib_user_pages.c
2571     index ce83ba9a12ef..16543d5e80c3 100644
2572     --- a/drivers/infiniband/hw/qib/qib_user_pages.c
2573     +++ b/drivers/infiniband/hw/qib/qib_user_pages.c
2574     @@ -99,23 +99,27 @@ static int __qib_get_user_pages(unsigned long start_page, size_t num_pages,
2575     *
2576     * I'm sure we won't be so lucky with other iommu's, so FIXME.
2577     */
2578     -dma_addr_t qib_map_page(struct pci_dev *hwdev, struct page *page,
2579     - unsigned long offset, size_t size, int direction)
2580     +int qib_map_page(struct pci_dev *hwdev, struct page *page, dma_addr_t *daddr)
2581     {
2582     dma_addr_t phys;
2583    
2584     - phys = pci_map_page(hwdev, page, offset, size, direction);
2585     + phys = pci_map_page(hwdev, page, 0, PAGE_SIZE, PCI_DMA_FROMDEVICE);
2586     + if (pci_dma_mapping_error(hwdev, phys))
2587     + return -ENOMEM;
2588    
2589     - if (phys == 0) {
2590     - pci_unmap_page(hwdev, phys, size, direction);
2591     - phys = pci_map_page(hwdev, page, offset, size, direction);
2592     + if (!phys) {
2593     + pci_unmap_page(hwdev, phys, PAGE_SIZE, PCI_DMA_FROMDEVICE);
2594     + phys = pci_map_page(hwdev, page, 0, PAGE_SIZE,
2595     + PCI_DMA_FROMDEVICE);
2596     + if (pci_dma_mapping_error(hwdev, phys))
2597     + return -ENOMEM;
2598     /*
2599     * FIXME: If we get 0 again, we should keep this page,
2600     * map another, then free the 0 page.
2601     */
2602     }
2603     -
2604     - return phys;
2605     + *daddr = phys;
2606     + return 0;
2607     }
2608    
2609     /**
2610     diff --git a/drivers/infiniband/sw/rdmavt/cq.c b/drivers/infiniband/sw/rdmavt/cq.c
2611     index fb52b669bfce..340c17aba3b0 100644
2612     --- a/drivers/infiniband/sw/rdmavt/cq.c
2613     +++ b/drivers/infiniband/sw/rdmavt/cq.c
2614     @@ -120,17 +120,20 @@ void rvt_cq_enter(struct rvt_cq *cq, struct ib_wc *entry, bool solicited)
2615     if (cq->notify == IB_CQ_NEXT_COMP ||
2616     (cq->notify == IB_CQ_SOLICITED &&
2617     (solicited || entry->status != IB_WC_SUCCESS))) {
2618     + struct kthread_worker *worker;
2619     +
2620     /*
2621     * This will cause send_complete() to be called in
2622     * another thread.
2623     */
2624     - spin_lock(&cq->rdi->n_cqs_lock);
2625     - if (likely(cq->rdi->worker)) {
2626     + rcu_read_lock();
2627     + worker = rcu_dereference(cq->rdi->worker);
2628     + if (likely(worker)) {
2629     cq->notify = RVT_CQ_NONE;
2630     cq->triggered++;
2631     - kthread_queue_work(cq->rdi->worker, &cq->comptask);
2632     + kthread_queue_work(worker, &cq->comptask);
2633     }
2634     - spin_unlock(&cq->rdi->n_cqs_lock);
2635     + rcu_read_unlock();
2636     }
2637    
2638     spin_unlock_irqrestore(&cq->lock, flags);
2639     @@ -512,7 +515,7 @@ int rvt_driver_cq_init(struct rvt_dev_info *rdi)
2640     int cpu;
2641     struct kthread_worker *worker;
2642    
2643     - if (rdi->worker)
2644     + if (rcu_access_pointer(rdi->worker))
2645     return 0;
2646    
2647     spin_lock_init(&rdi->n_cqs_lock);
2648     @@ -524,7 +527,7 @@ int rvt_driver_cq_init(struct rvt_dev_info *rdi)
2649     return PTR_ERR(worker);
2650    
2651     set_user_nice(worker->task, MIN_NICE);
2652     - rdi->worker = worker;
2653     + RCU_INIT_POINTER(rdi->worker, worker);
2654     return 0;
2655     }
2656    
2657     @@ -536,15 +539,19 @@ void rvt_cq_exit(struct rvt_dev_info *rdi)
2658     {
2659     struct kthread_worker *worker;
2660    
2661     - /* block future queuing from send_complete() */
2662     - spin_lock_irq(&rdi->n_cqs_lock);
2663     - worker = rdi->worker;
2664     + if (!rcu_access_pointer(rdi->worker))
2665     + return;
2666     +
2667     + spin_lock(&rdi->n_cqs_lock);
2668     + worker = rcu_dereference_protected(rdi->worker,
2669     + lockdep_is_held(&rdi->n_cqs_lock));
2670     if (!worker) {
2671     - spin_unlock_irq(&rdi->n_cqs_lock);
2672     + spin_unlock(&rdi->n_cqs_lock);
2673     return;
2674     }
2675     - rdi->worker = NULL;
2676     - spin_unlock_irq(&rdi->n_cqs_lock);
2677     + RCU_INIT_POINTER(rdi->worker, NULL);
2678     + spin_unlock(&rdi->n_cqs_lock);
2679     + synchronize_rcu();
2680    
2681     kthread_destroy_worker(worker);
2682     }
2683     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
2684     index fff40b097947..3130698fee70 100644
2685     --- a/drivers/infiniband/ulp/isert/ib_isert.c
2686     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
2687     @@ -886,15 +886,9 @@ isert_login_post_send(struct isert_conn *isert_conn, struct iser_tx_desc *tx_des
2688     }
2689    
2690     static void
2691     -isert_create_send_desc(struct isert_conn *isert_conn,
2692     - struct isert_cmd *isert_cmd,
2693     - struct iser_tx_desc *tx_desc)
2694     +__isert_create_send_desc(struct isert_device *device,
2695     + struct iser_tx_desc *tx_desc)
2696     {
2697     - struct isert_device *device = isert_conn->device;
2698     - struct ib_device *ib_dev = device->ib_device;
2699     -
2700     - ib_dma_sync_single_for_cpu(ib_dev, tx_desc->dma_addr,
2701     - ISER_HEADERS_LEN, DMA_TO_DEVICE);
2702    
2703     memset(&tx_desc->iser_header, 0, sizeof(struct iser_ctrl));
2704     tx_desc->iser_header.flags = ISCSI_CTRL;
2705     @@ -907,6 +901,20 @@ isert_create_send_desc(struct isert_conn *isert_conn,
2706     }
2707     }
2708    
2709     +static void
2710     +isert_create_send_desc(struct isert_conn *isert_conn,
2711     + struct isert_cmd *isert_cmd,
2712     + struct iser_tx_desc *tx_desc)
2713     +{
2714     + struct isert_device *device = isert_conn->device;
2715     + struct ib_device *ib_dev = device->ib_device;
2716     +
2717     + ib_dma_sync_single_for_cpu(ib_dev, tx_desc->dma_addr,
2718     + ISER_HEADERS_LEN, DMA_TO_DEVICE);
2719     +
2720     + __isert_create_send_desc(device, tx_desc);
2721     +}
2722     +
2723     static int
2724     isert_init_tx_hdrs(struct isert_conn *isert_conn,
2725     struct iser_tx_desc *tx_desc)
2726     @@ -994,7 +1002,7 @@ isert_put_login_tx(struct iscsi_conn *conn, struct iscsi_login *login,
2727     struct iser_tx_desc *tx_desc = &isert_conn->login_tx_desc;
2728     int ret;
2729    
2730     - isert_create_send_desc(isert_conn, NULL, tx_desc);
2731     + __isert_create_send_desc(device, tx_desc);
2732    
2733     memcpy(&tx_desc->iscsi_header, &login->rsp[0],
2734     sizeof(struct iscsi_hdr));
2735     @@ -2108,7 +2116,7 @@ isert_set_sig_attrs(struct se_cmd *se_cmd, struct ib_sig_attrs *sig_attrs)
2736    
2737     sig_attrs->check_mask =
2738     (se_cmd->prot_checks & TARGET_DIF_CHECK_GUARD ? 0xc0 : 0) |
2739     - (se_cmd->prot_checks & TARGET_DIF_CHECK_REFTAG ? 0x30 : 0) |
2740     + (se_cmd->prot_checks & TARGET_DIF_CHECK_APPTAG ? 0x30 : 0) |
2741     (se_cmd->prot_checks & TARGET_DIF_CHECK_REFTAG ? 0x0f : 0);
2742     return 0;
2743     }
2744     diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
2745     index a89b81b35932..62f9c23d8a7f 100644
2746     --- a/drivers/input/joystick/xpad.c
2747     +++ b/drivers/input/joystick/xpad.c
2748     @@ -123,7 +123,7 @@ static const struct xpad_device {
2749     u8 mapping;
2750     u8 xtype;
2751     } xpad_device[] = {
2752     - { 0x0079, 0x18d4, "GPD Win 2 Controller", 0, XTYPE_XBOX360 },
2753     + { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
2754     { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
2755     { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
2756     { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
2757     diff --git a/drivers/input/mouse/elan_i2c.h b/drivers/input/mouse/elan_i2c.h
2758     index 599544c1a91c..243e0fa6e3e3 100644
2759     --- a/drivers/input/mouse/elan_i2c.h
2760     +++ b/drivers/input/mouse/elan_i2c.h
2761     @@ -27,6 +27,8 @@
2762     #define ETP_DISABLE_POWER 0x0001
2763     #define ETP_PRESSURE_OFFSET 25
2764    
2765     +#define ETP_CALIBRATE_MAX_LEN 3
2766     +
2767     /* IAP Firmware handling */
2768     #define ETP_PRODUCT_ID_FORMAT_STRING "%d.0"
2769     #define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"
2770     diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
2771     index 93967c8139e7..37f954b704a6 100644
2772     --- a/drivers/input/mouse/elan_i2c_core.c
2773     +++ b/drivers/input/mouse/elan_i2c_core.c
2774     @@ -610,7 +610,7 @@ static ssize_t calibrate_store(struct device *dev,
2775     int tries = 20;
2776     int retval;
2777     int error;
2778     - u8 val[3];
2779     + u8 val[ETP_CALIBRATE_MAX_LEN];
2780    
2781     retval = mutex_lock_interruptible(&data->sysfs_mutex);
2782     if (retval)
2783     @@ -1263,6 +1263,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
2784     { "ELAN060C", 0 },
2785     { "ELAN0611", 0 },
2786     { "ELAN0612", 0 },
2787     + { "ELAN0618", 0 },
2788     { "ELAN1000", 0 },
2789     { }
2790     };
2791     diff --git a/drivers/input/mouse/elan_i2c_smbus.c b/drivers/input/mouse/elan_i2c_smbus.c
2792     index cfcb32559925..c060d270bc4d 100644
2793     --- a/drivers/input/mouse/elan_i2c_smbus.c
2794     +++ b/drivers/input/mouse/elan_i2c_smbus.c
2795     @@ -56,7 +56,7 @@
2796     static int elan_smbus_initialize(struct i2c_client *client)
2797     {
2798     u8 check[ETP_SMBUS_HELLOPACKET_LEN] = { 0x55, 0x55, 0x55, 0x55, 0x55 };
2799     - u8 values[ETP_SMBUS_HELLOPACKET_LEN] = { 0, 0, 0, 0, 0 };
2800     + u8 values[I2C_SMBUS_BLOCK_MAX] = {0};
2801     int len, error;
2802    
2803     /* Get hello packet */
2804     @@ -117,12 +117,16 @@ static int elan_smbus_calibrate(struct i2c_client *client)
2805     static int elan_smbus_calibrate_result(struct i2c_client *client, u8 *val)
2806     {
2807     int error;
2808     + u8 buf[I2C_SMBUS_BLOCK_MAX] = {0};
2809     +
2810     + BUILD_BUG_ON(ETP_CALIBRATE_MAX_LEN > sizeof(buf));
2811    
2812     error = i2c_smbus_read_block_data(client,
2813     - ETP_SMBUS_CALIBRATE_QUERY, val);
2814     + ETP_SMBUS_CALIBRATE_QUERY, buf);
2815     if (error < 0)
2816     return error;
2817    
2818     + memcpy(val, buf, ETP_CALIBRATE_MAX_LEN);
2819     return 0;
2820     }
2821    
2822     @@ -472,6 +476,8 @@ static int elan_smbus_get_report(struct i2c_client *client, u8 *report)
2823     {
2824     int len;
2825    
2826     + BUILD_BUG_ON(I2C_SMBUS_BLOCK_MAX > ETP_SMBUS_REPORT_LEN);
2827     +
2828     len = i2c_smbus_read_block_data(client,
2829     ETP_SMBUS_PACKET_QUERY,
2830     &report[ETP_SMBUS_REPORT_OFFSET]);
2831     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
2832     index db47a5e1d114..b68019109e99 100644
2833     --- a/drivers/input/mouse/elantech.c
2834     +++ b/drivers/input/mouse/elantech.c
2835     @@ -796,7 +796,7 @@ static int elantech_packet_check_v4(struct psmouse *psmouse)
2836     else if (ic_version == 7 && etd->samples[1] == 0x2A)
2837     sanity_check = ((packet[3] & 0x1c) == 0x10);
2838     else
2839     - sanity_check = ((packet[0] & 0x0c) == 0x04 &&
2840     + sanity_check = ((packet[0] & 0x08) == 0x00 &&
2841     (packet[3] & 0x1c) == 0x10);
2842    
2843     if (!sanity_check)
2844     @@ -1169,6 +1169,12 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
2845     { }
2846     };
2847    
2848     +static const char * const middle_button_pnp_ids[] = {
2849     + "LEN2131", /* ThinkPad P52 w/ NFC */
2850     + "LEN2132", /* ThinkPad P52 */
2851     + NULL
2852     +};
2853     +
2854     /*
2855     * Set the appropriate event bits for the input subsystem
2856     */
2857     @@ -1188,7 +1194,8 @@ static int elantech_set_input_params(struct psmouse *psmouse)
2858     __clear_bit(EV_REL, dev->evbit);
2859    
2860     __set_bit(BTN_LEFT, dev->keybit);
2861     - if (dmi_check_system(elantech_dmi_has_middle_button))
2862     + if (dmi_check_system(elantech_dmi_has_middle_button) ||
2863     + psmouse_matches_pnp_id(psmouse, middle_button_pnp_ids))
2864     __set_bit(BTN_MIDDLE, dev->keybit);
2865     __set_bit(BTN_RIGHT, dev->keybit);
2866    
2867     diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
2868     index 8900c3166ebf..47ed5616d026 100644
2869     --- a/drivers/input/mouse/psmouse-base.c
2870     +++ b/drivers/input/mouse/psmouse-base.c
2871     @@ -192,8 +192,8 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
2872     else
2873     input_report_rel(dev, REL_WHEEL, -wheel);
2874    
2875     - input_report_key(dev, BTN_SIDE, BIT(4));
2876     - input_report_key(dev, BTN_EXTRA, BIT(5));
2877     + input_report_key(dev, BTN_SIDE, packet[3] & BIT(4));
2878     + input_report_key(dev, BTN_EXTRA, packet[3] & BIT(5));
2879     break;
2880     }
2881     break;
2882     @@ -203,13 +203,13 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
2883     input_report_rel(dev, REL_WHEEL, -(s8) packet[3]);
2884    
2885     /* Extra buttons on Genius NewNet 3D */
2886     - input_report_key(dev, BTN_SIDE, BIT(6));
2887     - input_report_key(dev, BTN_EXTRA, BIT(7));
2888     + input_report_key(dev, BTN_SIDE, packet[0] & BIT(6));
2889     + input_report_key(dev, BTN_EXTRA, packet[0] & BIT(7));
2890     break;
2891    
2892     case PSMOUSE_THINKPS:
2893     /* Extra button on ThinkingMouse */
2894     - input_report_key(dev, BTN_EXTRA, BIT(3));
2895     + input_report_key(dev, BTN_EXTRA, packet[0] & BIT(3));
2896    
2897     /*
2898     * Without this bit of weirdness moving up gives wildly
2899     @@ -223,7 +223,7 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
2900     * Cortron PS2 Trackball reports SIDE button in the
2901     * 4th bit of the first byte.
2902     */
2903     - input_report_key(dev, BTN_SIDE, BIT(3));
2904     + input_report_key(dev, BTN_SIDE, packet[0] & BIT(3));
2905     packet[0] |= BIT(3);
2906     break;
2907    
2908     diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
2909     index ff7043f74a3d..d196ac3d8b8c 100644
2910     --- a/drivers/input/touchscreen/silead.c
2911     +++ b/drivers/input/touchscreen/silead.c
2912     @@ -603,6 +603,7 @@ static const struct acpi_device_id silead_ts_acpi_match[] = {
2913     { "GSL3692", 0 },
2914     { "MSSL1680", 0 },
2915     { "MSSL0001", 0 },
2916     + { "MSSL0002", 0 },
2917     { }
2918     };
2919     MODULE_DEVICE_TABLE(acpi, silead_ts_acpi_match);
2920     diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
2921     index df171cb85822..b38798cc5288 100644
2922     --- a/drivers/iommu/Kconfig
2923     +++ b/drivers/iommu/Kconfig
2924     @@ -107,7 +107,6 @@ config IOMMU_PGTABLES_L2
2925     # AMD IOMMU support
2926     config AMD_IOMMU
2927     bool "AMD IOMMU support"
2928     - select DMA_DIRECT_OPS
2929     select SWIOTLB
2930     select PCI_MSI
2931     select PCI_ATS
2932     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
2933     index b0b30a568db7..12c1491a1a9a 100644
2934     --- a/drivers/iommu/amd_iommu.c
2935     +++ b/drivers/iommu/amd_iommu.c
2936     @@ -2593,32 +2593,51 @@ static void *alloc_coherent(struct device *dev, size_t size,
2937     unsigned long attrs)
2938     {
2939     u64 dma_mask = dev->coherent_dma_mask;
2940     - struct protection_domain *domain = get_domain(dev);
2941     - bool is_direct = false;
2942     - void *virt_addr;
2943     + struct protection_domain *domain;
2944     + struct dma_ops_domain *dma_dom;
2945     + struct page *page;
2946     +
2947     + domain = get_domain(dev);
2948     + if (PTR_ERR(domain) == -EINVAL) {
2949     + page = alloc_pages(flag, get_order(size));
2950     + *dma_addr = page_to_phys(page);
2951     + return page_address(page);
2952     + } else if (IS_ERR(domain))
2953     + return NULL;
2954    
2955     - if (IS_ERR(domain)) {
2956     - if (PTR_ERR(domain) != -EINVAL)
2957     + dma_dom = to_dma_ops_domain(domain);
2958     + size = PAGE_ALIGN(size);
2959     + dma_mask = dev->coherent_dma_mask;
2960     + flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
2961     + flag |= __GFP_ZERO;
2962     +
2963     + page = alloc_pages(flag | __GFP_NOWARN, get_order(size));
2964     + if (!page) {
2965     + if (!gfpflags_allow_blocking(flag))
2966     return NULL;
2967     - is_direct = true;
2968     - }
2969    
2970     - virt_addr = dma_direct_alloc(dev, size, dma_addr, flag, attrs);
2971     - if (!virt_addr || is_direct)
2972     - return virt_addr;
2973     + page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
2974     + get_order(size), flag);
2975     + if (!page)
2976     + return NULL;
2977     + }
2978    
2979     if (!dma_mask)
2980     dma_mask = *dev->dma_mask;
2981    
2982     - *dma_addr = __map_single(dev, to_dma_ops_domain(domain),
2983     - virt_to_phys(virt_addr), PAGE_ALIGN(size),
2984     - DMA_BIDIRECTIONAL, dma_mask);
2985     + *dma_addr = __map_single(dev, dma_dom, page_to_phys(page),
2986     + size, DMA_BIDIRECTIONAL, dma_mask);
2987     +
2988     if (*dma_addr == AMD_IOMMU_MAPPING_ERROR)
2989     goto out_free;
2990     - return virt_addr;
2991     +
2992     + return page_address(page);
2993    
2994     out_free:
2995     - dma_direct_free(dev, size, virt_addr, *dma_addr, attrs);
2996     +
2997     + if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT))
2998     + __free_pages(page, get_order(size));
2999     +
3000     return NULL;
3001     }
3002    
3003     @@ -2629,17 +2648,24 @@ static void free_coherent(struct device *dev, size_t size,
3004     void *virt_addr, dma_addr_t dma_addr,
3005     unsigned long attrs)
3006     {
3007     - struct protection_domain *domain = get_domain(dev);
3008     + struct protection_domain *domain;
3009     + struct dma_ops_domain *dma_dom;
3010     + struct page *page;
3011    
3012     + page = virt_to_page(virt_addr);
3013     size = PAGE_ALIGN(size);
3014    
3015     - if (!IS_ERR(domain)) {
3016     - struct dma_ops_domain *dma_dom = to_dma_ops_domain(domain);
3017     + domain = get_domain(dev);
3018     + if (IS_ERR(domain))
3019     + goto free_mem;
3020    
3021     - __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL);
3022     - }
3023     + dma_dom = to_dma_ops_domain(domain);
3024     +
3025     + __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL);
3026    
3027     - dma_direct_free(dev, size, virt_addr, dma_addr, attrs);
3028     +free_mem:
3029     + if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT))
3030     + __free_pages(page, get_order(size));
3031     }
3032    
3033     /*
3034     diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
3035     index 5416f2b2ac21..ab16968fced8 100644
3036     --- a/drivers/irqchip/irq-gic-v3-its.c
3037     +++ b/drivers/irqchip/irq-gic-v3-its.c
3038     @@ -2309,7 +2309,14 @@ static int its_irq_domain_activate(struct irq_domain *domain,
3039     cpu_mask = cpumask_of_node(its_dev->its->numa_node);
3040    
3041     /* Bind the LPI to the first possible CPU */
3042     - cpu = cpumask_first(cpu_mask);
3043     + cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
3044     + if (cpu >= nr_cpu_ids) {
3045     + if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144)
3046     + return -EINVAL;
3047     +
3048     + cpu = cpumask_first(cpu_online_mask);
3049     + }
3050     +
3051     its_dev->event_map.col_map[event] = cpu;
3052     irq_data_update_effective_affinity(d, cpumask_of(cpu));
3053    
3054     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
3055     index b11107497d2e..19478c7b2268 100644
3056     --- a/drivers/md/dm-thin.c
3057     +++ b/drivers/md/dm-thin.c
3058     @@ -1385,6 +1385,8 @@ static void schedule_external_copy(struct thin_c *tc, dm_block_t virt_block,
3059    
3060     static void set_pool_mode(struct pool *pool, enum pool_mode new_mode);
3061    
3062     +static void requeue_bios(struct pool *pool);
3063     +
3064     static void check_for_space(struct pool *pool)
3065     {
3066     int r;
3067     @@ -1397,8 +1399,10 @@ static void check_for_space(struct pool *pool)
3068     if (r)
3069     return;
3070    
3071     - if (nr_free)
3072     + if (nr_free) {
3073     set_pool_mode(pool, PM_WRITE);
3074     + requeue_bios(pool);
3075     + }
3076     }
3077    
3078     /*
3079     @@ -1475,7 +1479,10 @@ static int alloc_data_block(struct thin_c *tc, dm_block_t *result)
3080    
3081     r = dm_pool_alloc_data_block(pool->pmd, result);
3082     if (r) {
3083     - metadata_operation_failed(pool, "dm_pool_alloc_data_block", r);
3084     + if (r == -ENOSPC)
3085     + set_pool_mode(pool, PM_OUT_OF_DATA_SPACE);
3086     + else
3087     + metadata_operation_failed(pool, "dm_pool_alloc_data_block", r);
3088     return r;
3089     }
3090    
3091     diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
3092     index e73b0776683c..e302f1558fa0 100644
3093     --- a/drivers/md/dm-zoned-target.c
3094     +++ b/drivers/md/dm-zoned-target.c
3095     @@ -788,7 +788,7 @@ static int dmz_ctr(struct dm_target *ti, unsigned int argc, char **argv)
3096    
3097     /* Chunk BIO work */
3098     mutex_init(&dmz->chunk_lock);
3099     - INIT_RADIX_TREE(&dmz->chunk_rxtree, GFP_KERNEL);
3100     + INIT_RADIX_TREE(&dmz->chunk_rxtree, GFP_NOIO);
3101     dmz->chunk_wq = alloc_workqueue("dmz_cwq_%s", WQ_MEM_RECLAIM | WQ_UNBOUND,
3102     0, dev->name);
3103     if (!dmz->chunk_wq) {
3104     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
3105     index 0a7b0107ca78..cabae3e280c2 100644
3106     --- a/drivers/md/dm.c
3107     +++ b/drivers/md/dm.c
3108     @@ -1582,10 +1582,9 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md,
3109     * the usage of io->orig_bio in dm_remap_zone_report()
3110     * won't be affected by this reassignment.
3111     */
3112     - struct bio *b = bio_clone_bioset(bio, GFP_NOIO,
3113     - md->queue->bio_split);
3114     + struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count,
3115     + GFP_NOIO, md->queue->bio_split);
3116     ci.io->orig_bio = b;
3117     - bio_advance(bio, (bio_sectors(bio) - ci.sector_count) << 9);
3118     bio_chain(b, bio);
3119     ret = generic_make_request(bio);
3120     break;
3121     diff --git a/drivers/md/md.c b/drivers/md/md.c
3122     index c208c01f63a5..bac480d75d1d 100644
3123     --- a/drivers/md/md.c
3124     +++ b/drivers/md/md.c
3125     @@ -2853,7 +2853,8 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len)
3126     err = 0;
3127     }
3128     } else if (cmd_match(buf, "re-add")) {
3129     - if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1)) {
3130     + if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) &&
3131     + rdev->saved_raid_disk >= 0) {
3132     /* clear_bit is performed _after_ all the devices
3133     * have their local Faulty bit cleared. If any writes
3134     * happen in the meantime in the local node, they
3135     @@ -8641,6 +8642,7 @@ static int remove_and_add_spares(struct mddev *mddev,
3136     if (mddev->pers->hot_remove_disk(
3137     mddev, rdev) == 0) {
3138     sysfs_unlink_rdev(mddev, rdev);
3139     + rdev->saved_raid_disk = rdev->raid_disk;
3140     rdev->raid_disk = -1;
3141     removed++;
3142     }
3143     diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
3144     index e33414975065..a4ada1ccf0df 100644
3145     --- a/drivers/media/dvb-core/dvb_frontend.c
3146     +++ b/drivers/media/dvb-core/dvb_frontend.c
3147     @@ -275,8 +275,20 @@ static void dvb_frontend_add_event(struct dvb_frontend *fe,
3148     wake_up_interruptible (&events->wait_queue);
3149     }
3150    
3151     +static int dvb_frontend_test_event(struct dvb_frontend_private *fepriv,
3152     + struct dvb_fe_events *events)
3153     +{
3154     + int ret;
3155     +
3156     + up(&fepriv->sem);
3157     + ret = events->eventw != events->eventr;
3158     + down(&fepriv->sem);
3159     +
3160     + return ret;
3161     +}
3162     +
3163     static int dvb_frontend_get_event(struct dvb_frontend *fe,
3164     - struct dvb_frontend_event *event, int flags)
3165     + struct dvb_frontend_event *event, int flags)
3166     {
3167     struct dvb_frontend_private *fepriv = fe->frontend_priv;
3168     struct dvb_fe_events *events = &fepriv->events;
3169     @@ -294,13 +306,8 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe,
3170     if (flags & O_NONBLOCK)
3171     return -EWOULDBLOCK;
3172    
3173     - up(&fepriv->sem);
3174     -
3175     - ret = wait_event_interruptible (events->wait_queue,
3176     - events->eventw != events->eventr);
3177     -
3178     - if (down_interruptible (&fepriv->sem))
3179     - return -ERESTARTSYS;
3180     + ret = wait_event_interruptible(events->wait_queue,
3181     + dvb_frontend_test_event(fepriv, events));
3182    
3183     if (ret < 0)
3184     return ret;
3185     diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c
3186     index c2d3b8f0f487..93f69b3ac911 100644
3187     --- a/drivers/media/platform/vsp1/vsp1_video.c
3188     +++ b/drivers/media/platform/vsp1/vsp1_video.c
3189     @@ -849,9 +849,8 @@ static int vsp1_video_setup_pipeline(struct vsp1_pipeline *pipe)
3190     return 0;
3191     }
3192    
3193     -static void vsp1_video_cleanup_pipeline(struct vsp1_pipeline *pipe)
3194     +static void vsp1_video_release_buffers(struct vsp1_video *video)
3195     {
3196     - struct vsp1_video *video = pipe->output->video;
3197     struct vsp1_vb2_buffer *buffer;
3198     unsigned long flags;
3199    
3200     @@ -861,12 +860,18 @@ static void vsp1_video_cleanup_pipeline(struct vsp1_pipeline *pipe)
3201     vb2_buffer_done(&buffer->buf.vb2_buf, VB2_BUF_STATE_ERROR);
3202     INIT_LIST_HEAD(&video->irqqueue);
3203     spin_unlock_irqrestore(&video->irqlock, flags);
3204     +}
3205     +
3206     +static void vsp1_video_cleanup_pipeline(struct vsp1_pipeline *pipe)
3207     +{
3208     + lockdep_assert_held(&pipe->lock);
3209    
3210     /* Release our partition table allocation */
3211     - mutex_lock(&pipe->lock);
3212     kfree(pipe->part_table);
3213     pipe->part_table = NULL;
3214     - mutex_unlock(&pipe->lock);
3215     +
3216     + vsp1_dl_list_put(pipe->dl);
3217     + pipe->dl = NULL;
3218     }
3219    
3220     static int vsp1_video_start_streaming(struct vb2_queue *vq, unsigned int count)
3221     @@ -881,8 +886,9 @@ static int vsp1_video_start_streaming(struct vb2_queue *vq, unsigned int count)
3222     if (pipe->stream_count == pipe->num_inputs) {
3223     ret = vsp1_video_setup_pipeline(pipe);
3224     if (ret < 0) {
3225     - mutex_unlock(&pipe->lock);
3226     + vsp1_video_release_buffers(video);
3227     vsp1_video_cleanup_pipeline(pipe);
3228     + mutex_unlock(&pipe->lock);
3229     return ret;
3230     }
3231    
3232     @@ -932,13 +938,12 @@ static void vsp1_video_stop_streaming(struct vb2_queue *vq)
3233     if (ret == -ETIMEDOUT)
3234     dev_err(video->vsp1->dev, "pipeline stop timeout\n");
3235    
3236     - vsp1_dl_list_put(pipe->dl);
3237     - pipe->dl = NULL;
3238     + vsp1_video_cleanup_pipeline(pipe);
3239     }
3240     mutex_unlock(&pipe->lock);
3241    
3242     media_pipeline_stop(&video->video.entity);
3243     - vsp1_video_cleanup_pipeline(pipe);
3244     + vsp1_video_release_buffers(video);
3245     vsp1_video_pipeline_put(pipe);
3246     }
3247    
3248     diff --git a/drivers/media/rc/ir-mce_kbd-decoder.c b/drivers/media/rc/ir-mce_kbd-decoder.c
3249     index c110984ca671..5478fe08f9d3 100644
3250     --- a/drivers/media/rc/ir-mce_kbd-decoder.c
3251     +++ b/drivers/media/rc/ir-mce_kbd-decoder.c
3252     @@ -130,6 +130,8 @@ static void mce_kbd_rx_timeout(struct timer_list *t)
3253    
3254     for (i = 0; i < MCIR2_MASK_KEYS_START; i++)
3255     input_report_key(raw->mce_kbd.idev, kbd_keycodes[i], 0);
3256     +
3257     + input_sync(raw->mce_kbd.idev);
3258     }
3259    
3260     static enum mce_kbd_mode mce_kbd_mode(struct mce_kbd_dec *data)
3261     diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
3262     index c76b2101193c..89795d4d0a71 100644
3263     --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
3264     +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
3265     @@ -1024,6 +1024,9 @@ struct usb_device_id cx231xx_id_table[] = {
3266     .driver_info = CX231XX_BOARD_CNXT_RDE_250},
3267     {USB_DEVICE(0x0572, 0x58A0),
3268     .driver_info = CX231XX_BOARD_CNXT_RDU_250},
3269     + /* AverMedia DVD EZMaker 7 */
3270     + {USB_DEVICE(0x07ca, 0xc039),
3271     + .driver_info = CX231XX_BOARD_CNXT_VIDEO_GRABBER},
3272     {USB_DEVICE(0x2040, 0xb110),
3273     .driver_info = CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL},
3274     {USB_DEVICE(0x2040, 0xb111),
3275     diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
3276     index 67ed66712d05..f31ffaf9d2f2 100644
3277     --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
3278     +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
3279     @@ -1151,7 +1151,7 @@ static int dvb_init(struct cx231xx *dev)
3280     info.platform_data = &si2157_config;
3281     request_module("si2157");
3282    
3283     - client = i2c_new_device(adapter, &info);
3284     + client = i2c_new_device(tuner_i2c, &info);
3285     if (client == NULL || client->dev.driver == NULL) {
3286     module_put(dvb->i2c_client_demod[0]->dev.driver->owner);
3287     i2c_unregister_device(dvb->i2c_client_demod[0]);
3288     diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
3289     index aa0082fe5833..b28c997a7ab0 100644
3290     --- a/drivers/media/usb/uvc/uvc_video.c
3291     +++ b/drivers/media/usb/uvc/uvc_video.c
3292     @@ -163,14 +163,27 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
3293     }
3294     }
3295    
3296     +static size_t uvc_video_ctrl_size(struct uvc_streaming *stream)
3297     +{
3298     + /*
3299     + * Return the size of the video probe and commit controls, which depends
3300     + * on the protocol version.
3301     + */
3302     + if (stream->dev->uvc_version < 0x0110)
3303     + return 26;
3304     + else if (stream->dev->uvc_version < 0x0150)
3305     + return 34;
3306     + else
3307     + return 48;
3308     +}
3309     +
3310     static int uvc_get_video_ctrl(struct uvc_streaming *stream,
3311     struct uvc_streaming_control *ctrl, int probe, u8 query)
3312     {
3313     + u16 size = uvc_video_ctrl_size(stream);
3314     u8 *data;
3315     - u16 size;
3316     int ret;
3317    
3318     - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
3319     if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
3320     query == UVC_GET_DEF)
3321     return -EIO;
3322     @@ -225,7 +238,7 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
3323     ctrl->dwMaxVideoFrameSize = get_unaligned_le32(&data[18]);
3324     ctrl->dwMaxPayloadTransferSize = get_unaligned_le32(&data[22]);
3325    
3326     - if (size == 34) {
3327     + if (size >= 34) {
3328     ctrl->dwClockFrequency = get_unaligned_le32(&data[26]);
3329     ctrl->bmFramingInfo = data[30];
3330     ctrl->bPreferedVersion = data[31];
3331     @@ -254,11 +267,10 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
3332     static int uvc_set_video_ctrl(struct uvc_streaming *stream,
3333     struct uvc_streaming_control *ctrl, int probe)
3334     {
3335     + u16 size = uvc_video_ctrl_size(stream);
3336     u8 *data;
3337     - u16 size;
3338     int ret;
3339    
3340     - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
3341     data = kzalloc(size, GFP_KERNEL);
3342     if (data == NULL)
3343     return -ENOMEM;
3344     @@ -275,7 +287,7 @@ static int uvc_set_video_ctrl(struct uvc_streaming *stream,
3345     put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
3346     put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
3347    
3348     - if (size == 34) {
3349     + if (size >= 34) {
3350     put_unaligned_le32(ctrl->dwClockFrequency, &data[26]);
3351     data[30] = ctrl->bmFramingInfo;
3352     data[31] = ctrl->bPreferedVersion;
3353     diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
3354     index 4312935f1dfc..d03a44d89649 100644
3355     --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
3356     +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
3357     @@ -871,7 +871,7 @@ static int put_v4l2_ext_controls32(struct file *file,
3358     get_user(kcontrols, &kp->controls))
3359     return -EFAULT;
3360    
3361     - if (!count)
3362     + if (!count || count > (U32_MAX/sizeof(*ucontrols)))
3363     return 0;
3364     if (get_user(p, &up->controls))
3365     return -EFAULT;
3366     diff --git a/drivers/mfd/intel-lpss-pci.c b/drivers/mfd/intel-lpss-pci.c
3367     index d1c46de89eb4..d9ae983095c5 100644
3368     --- a/drivers/mfd/intel-lpss-pci.c
3369     +++ b/drivers/mfd/intel-lpss-pci.c
3370     @@ -124,6 +124,11 @@ static const struct intel_lpss_platform_info apl_i2c_info = {
3371     .properties = apl_i2c_properties,
3372     };
3373    
3374     +static const struct intel_lpss_platform_info cnl_i2c_info = {
3375     + .clk_rate = 216000000,
3376     + .properties = spt_i2c_properties,
3377     +};
3378     +
3379     static const struct pci_device_id intel_lpss_pci_ids[] = {
3380     /* BXT A-Step */
3381     { PCI_VDEVICE(INTEL, 0x0aac), (kernel_ulong_t)&bxt_i2c_info },
3382     @@ -207,13 +212,13 @@ static const struct pci_device_id intel_lpss_pci_ids[] = {
3383     { PCI_VDEVICE(INTEL, 0x9daa), (kernel_ulong_t)&spt_info },
3384     { PCI_VDEVICE(INTEL, 0x9dab), (kernel_ulong_t)&spt_info },
3385     { PCI_VDEVICE(INTEL, 0x9dfb), (kernel_ulong_t)&spt_info },
3386     - { PCI_VDEVICE(INTEL, 0x9dc5), (kernel_ulong_t)&spt_i2c_info },
3387     - { PCI_VDEVICE(INTEL, 0x9dc6), (kernel_ulong_t)&spt_i2c_info },
3388     + { PCI_VDEVICE(INTEL, 0x9dc5), (kernel_ulong_t)&cnl_i2c_info },
3389     + { PCI_VDEVICE(INTEL, 0x9dc6), (kernel_ulong_t)&cnl_i2c_info },
3390     { PCI_VDEVICE(INTEL, 0x9dc7), (kernel_ulong_t)&spt_uart_info },
3391     - { PCI_VDEVICE(INTEL, 0x9de8), (kernel_ulong_t)&spt_i2c_info },
3392     - { PCI_VDEVICE(INTEL, 0x9de9), (kernel_ulong_t)&spt_i2c_info },
3393     - { PCI_VDEVICE(INTEL, 0x9dea), (kernel_ulong_t)&spt_i2c_info },
3394     - { PCI_VDEVICE(INTEL, 0x9deb), (kernel_ulong_t)&spt_i2c_info },
3395     + { PCI_VDEVICE(INTEL, 0x9de8), (kernel_ulong_t)&cnl_i2c_info },
3396     + { PCI_VDEVICE(INTEL, 0x9de9), (kernel_ulong_t)&cnl_i2c_info },
3397     + { PCI_VDEVICE(INTEL, 0x9dea), (kernel_ulong_t)&cnl_i2c_info },
3398     + { PCI_VDEVICE(INTEL, 0x9deb), (kernel_ulong_t)&cnl_i2c_info },
3399     /* SPT-H */
3400     { PCI_VDEVICE(INTEL, 0xa127), (kernel_ulong_t)&spt_uart_info },
3401     { PCI_VDEVICE(INTEL, 0xa128), (kernel_ulong_t)&spt_uart_info },
3402     @@ -240,10 +245,10 @@ static const struct pci_device_id intel_lpss_pci_ids[] = {
3403     { PCI_VDEVICE(INTEL, 0xa32b), (kernel_ulong_t)&spt_info },
3404     { PCI_VDEVICE(INTEL, 0xa37b), (kernel_ulong_t)&spt_info },
3405     { PCI_VDEVICE(INTEL, 0xa347), (kernel_ulong_t)&spt_uart_info },
3406     - { PCI_VDEVICE(INTEL, 0xa368), (kernel_ulong_t)&spt_i2c_info },
3407     - { PCI_VDEVICE(INTEL, 0xa369), (kernel_ulong_t)&spt_i2c_info },
3408     - { PCI_VDEVICE(INTEL, 0xa36a), (kernel_ulong_t)&spt_i2c_info },
3409     - { PCI_VDEVICE(INTEL, 0xa36b), (kernel_ulong_t)&spt_i2c_info },
3410     + { PCI_VDEVICE(INTEL, 0xa368), (kernel_ulong_t)&cnl_i2c_info },
3411     + { PCI_VDEVICE(INTEL, 0xa369), (kernel_ulong_t)&cnl_i2c_info },
3412     + { PCI_VDEVICE(INTEL, 0xa36a), (kernel_ulong_t)&cnl_i2c_info },
3413     + { PCI_VDEVICE(INTEL, 0xa36b), (kernel_ulong_t)&cnl_i2c_info },
3414     { }
3415     };
3416     MODULE_DEVICE_TABLE(pci, intel_lpss_pci_ids);
3417     diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c
3418     index 9e545eb6e8b4..4bcf117a7ba8 100644
3419     --- a/drivers/mfd/intel-lpss.c
3420     +++ b/drivers/mfd/intel-lpss.c
3421     @@ -275,11 +275,11 @@ static void intel_lpss_init_dev(const struct intel_lpss *lpss)
3422    
3423     intel_lpss_deassert_reset(lpss);
3424    
3425     + intel_lpss_set_remap_addr(lpss);
3426     +
3427     if (!intel_lpss_has_idma(lpss))
3428     return;
3429    
3430     - intel_lpss_set_remap_addr(lpss);
3431     -
3432     /* Make sure that SPI multiblock DMA transfers are re-enabled */
3433     if (lpss->type == LPSS_DEV_SPI)
3434     writel(value, lpss->priv + LPSS_PRIV_SSP_REG);
3435     diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
3436     index d3133a371e27..c649344fd7f2 100644
3437     --- a/drivers/mfd/twl-core.c
3438     +++ b/drivers/mfd/twl-core.c
3439     @@ -1177,7 +1177,7 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
3440     twl_priv->ready = true;
3441    
3442     /* setup clock framework */
3443     - clocks_init(&pdev->dev, pdata ? pdata->clock : NULL);
3444     + clocks_init(&client->dev, pdata ? pdata->clock : NULL);
3445    
3446     /* read TWL IDCODE Register */
3447     if (twl_class_is_4030()) {
3448     diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
3449     index 4d6736f9d463..429d6de1dde7 100644
3450     --- a/drivers/misc/cxl/pci.c
3451     +++ b/drivers/misc/cxl/pci.c
3452     @@ -514,9 +514,9 @@ static int init_implementation_adapter_regs_psl9(struct cxl *adapter,
3453     cxl_p1_write(adapter, CXL_PSL9_FIR_CNTL, psl_fircntl);
3454    
3455     /* Setup the PSL to transmit packets on the PCIe before the
3456     - * CAPP is enabled
3457     + * CAPP is enabled. Make sure that CAPP virtual machines are disabled
3458     */
3459     - cxl_p1_write(adapter, CXL_PSL9_DSNDCTL, 0x0001001000002A10ULL);
3460     + cxl_p1_write(adapter, CXL_PSL9_DSNDCTL, 0x0001001000012A10ULL);
3461    
3462     /*
3463     * A response to an ASB_Notify request is returned by the
3464     diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c
3465     index 4b5a4c5d3c01..629e2e156412 100644
3466     --- a/drivers/misc/cxl/sysfs.c
3467     +++ b/drivers/misc/cxl/sysfs.c
3468     @@ -353,12 +353,20 @@ static ssize_t prefault_mode_store(struct device *device,
3469     struct cxl_afu *afu = to_cxl_afu(device);
3470     enum prefault_modes mode = -1;
3471    
3472     - if (!strncmp(buf, "work_element_descriptor", 23))
3473     - mode = CXL_PREFAULT_WED;
3474     - if (!strncmp(buf, "all", 3))
3475     - mode = CXL_PREFAULT_ALL;
3476     if (!strncmp(buf, "none", 4))
3477     mode = CXL_PREFAULT_NONE;
3478     + else {
3479     + if (!radix_enabled()) {
3480     +
3481     + /* only allowed when not in radix mode */
3482     + if (!strncmp(buf, "work_element_descriptor", 23))
3483     + mode = CXL_PREFAULT_WED;
3484     + if (!strncmp(buf, "all", 3))
3485     + mode = CXL_PREFAULT_ALL;
3486     + } else {
3487     + dev_err(device, "Cannot prefault with radix enabled\n");
3488     + }
3489     + }
3490    
3491     if (mode == -1)
3492     return -EINVAL;
3493     diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesas_sdhi_core.c
3494     index 51e01f03fb99..45c015da2e75 100644
3495     --- a/drivers/mmc/host/renesas_sdhi_core.c
3496     +++ b/drivers/mmc/host/renesas_sdhi_core.c
3497     @@ -28,6 +28,7 @@
3498     #include <linux/of_device.h>
3499     #include <linux/platform_device.h>
3500     #include <linux/mmc/host.h>
3501     +#include <linux/mmc/slot-gpio.h>
3502     #include <linux/mfd/tmio.h>
3503     #include <linux/sh_dma.h>
3504     #include <linux/delay.h>
3505     @@ -534,6 +535,10 @@ int renesas_sdhi_probe(struct platform_device *pdev,
3506     host->multi_io_quirk = renesas_sdhi_multi_io_quirk;
3507     host->dma_ops = dma_ops;
3508    
3509     + /* For some SoC, we disable internal WP. GPIO may override this */
3510     + if (mmc_can_gpio_ro(host->mmc))
3511     + mmc_data->capabilities2 &= ~MMC_CAP2_NO_WRITE_PROTECT;
3512     +
3513     /* SDR speeds are only available on Gen2+ */
3514     if (mmc_data->flags & TMIO_MMC_MIN_RCAR2) {
3515     /* card_busy caused issues on r8a73a4 (pre-Gen2) CD-less SDHI */
3516     diff --git a/drivers/mmc/host/renesas_sdhi_internal_dmac.c b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
3517     index 6af946d16d24..eb027cdc8f24 100644
3518     --- a/drivers/mmc/host/renesas_sdhi_internal_dmac.c
3519     +++ b/drivers/mmc/host/renesas_sdhi_internal_dmac.c
3520     @@ -87,6 +87,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen3_compatible = {
3521     TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2,
3522     .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
3523     MMC_CAP_CMD23,
3524     + .capabilities2 = MMC_CAP2_NO_WRITE_PROTECT,
3525     .bus_shift = 2,
3526     .scc_offset = 0x1000,
3527     .taps = rcar_gen3_scc_taps,
3528     diff --git a/drivers/mmc/host/renesas_sdhi_sys_dmac.c b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
3529     index 848e50c1638a..4bb46c489d71 100644
3530     --- a/drivers/mmc/host/renesas_sdhi_sys_dmac.c
3531     +++ b/drivers/mmc/host/renesas_sdhi_sys_dmac.c
3532     @@ -42,6 +42,7 @@ static const struct renesas_sdhi_of_data of_rz_compatible = {
3533     static const struct renesas_sdhi_of_data of_rcar_gen1_compatible = {
3534     .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_CLK_ACTUAL,
3535     .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
3536     + .capabilities2 = MMC_CAP2_NO_WRITE_PROTECT,
3537     };
3538    
3539     /* Definitions for sampling clocks */
3540     @@ -61,6 +62,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen2_compatible = {
3541     TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2,
3542     .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
3543     MMC_CAP_CMD23,
3544     + .capabilities2 = MMC_CAP2_NO_WRITE_PROTECT,
3545     .dma_buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES,
3546     .dma_rx_offset = 0x2000,
3547     .scc_offset = 0x0300,
3548     @@ -81,6 +83,7 @@ static const struct renesas_sdhi_of_data of_rcar_gen3_compatible = {
3549     TMIO_MMC_HAVE_CBSY | TMIO_MMC_MIN_RCAR2,
3550     .capabilities = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
3551     MMC_CAP_CMD23,
3552     + .capabilities2 = MMC_CAP2_NO_WRITE_PROTECT,
3553     .bus_shift = 2,
3554     .scc_offset = 0x1000,
3555     .taps = rcar_gen3_scc_taps,
3556     diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
3557     index 692902df2598..3a8a88fa06aa 100644
3558     --- a/drivers/mtd/chips/cfi_cmdset_0002.c
3559     +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
3560     @@ -1880,7 +1880,7 @@ static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
3561     if (time_after(jiffies, timeo) && !chip_ready(map, adr))
3562     break;
3563    
3564     - if (chip_ready(map, adr)) {
3565     + if (chip_good(map, adr, datum)) {
3566     xip_enable(map, chip, adr);
3567     goto op_done;
3568     }
3569     @@ -2515,7 +2515,7 @@ static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
3570    
3571     struct ppb_lock {
3572     struct flchip *chip;
3573     - loff_t offset;
3574     + unsigned long adr;
3575     int locked;
3576     };
3577    
3578     @@ -2533,8 +2533,9 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
3579     unsigned long timeo;
3580     int ret;
3581    
3582     + adr += chip->start;
3583     mutex_lock(&chip->mutex);
3584     - ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
3585     + ret = get_chip(map, chip, adr, FL_LOCKING);
3586     if (ret) {
3587     mutex_unlock(&chip->mutex);
3588     return ret;
3589     @@ -2552,8 +2553,8 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
3590    
3591     if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
3592     chip->state = FL_LOCKING;
3593     - map_write(map, CMD(0xA0), chip->start + adr);
3594     - map_write(map, CMD(0x00), chip->start + adr);
3595     + map_write(map, CMD(0xA0), adr);
3596     + map_write(map, CMD(0x00), adr);
3597     } else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
3598     /*
3599     * Unlocking of one specific sector is not supported, so we
3600     @@ -2591,7 +2592,7 @@ static int __maybe_unused do_ppb_xxlock(struct map_info *map,
3601     map_write(map, CMD(0x00), chip->start);
3602    
3603     chip->state = FL_READY;
3604     - put_chip(map, chip, adr + chip->start);
3605     + put_chip(map, chip, adr);
3606     mutex_unlock(&chip->mutex);
3607    
3608     return ret;
3609     @@ -2648,9 +2649,9 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
3610     * sectors shall be unlocked, so lets keep their locking
3611     * status at "unlocked" (locked=0) for the final re-locking.
3612     */
3613     - if ((adr < ofs) || (adr >= (ofs + len))) {
3614     + if ((offset < ofs) || (offset >= (ofs + len))) {
3615     sect[sectors].chip = &cfi->chips[chipnum];
3616     - sect[sectors].offset = offset;
3617     + sect[sectors].adr = adr;
3618     sect[sectors].locked = do_ppb_xxlock(
3619     map, &cfi->chips[chipnum], adr, 0,
3620     DO_XXLOCK_ONEBLOCK_GETLOCK);
3621     @@ -2664,6 +2665,8 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
3622     i++;
3623    
3624     if (adr >> cfi->chipshift) {
3625     + if (offset >= (ofs + len))
3626     + break;
3627     adr = 0;
3628     chipnum++;
3629    
3630     @@ -2694,7 +2697,7 @@ static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
3631     */
3632     for (i = 0; i < sectors; i++) {
3633     if (sect[i].locked)
3634     - do_ppb_xxlock(map, sect[i].chip, sect[i].offset, 0,
3635     + do_ppb_xxlock(map, sect[i].chip, sect[i].adr, 0,
3636     DO_XXLOCK_ONEBLOCK_LOCK);
3637     }
3638    
3639     diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c
3640     index cfd33e6ca77f..5869e90cc14b 100644
3641     --- a/drivers/mtd/nand/raw/denali_dt.c
3642     +++ b/drivers/mtd/nand/raw/denali_dt.c
3643     @@ -123,7 +123,11 @@ static int denali_dt_probe(struct platform_device *pdev)
3644     if (ret)
3645     return ret;
3646    
3647     - denali->clk_x_rate = clk_get_rate(dt->clk);
3648     + /*
3649     + * Hardcode the clock rate for the backward compatibility.
3650     + * This works for both SOCFPGA and UniPhier.
3651     + */
3652     + denali->clk_x_rate = 200000000;
3653    
3654     ret = denali_init(denali);
3655     if (ret)
3656     diff --git a/drivers/mtd/nand/raw/mxc_nand.c b/drivers/mtd/nand/raw/mxc_nand.c
3657     index 45786e707b7b..26cef218bb43 100644
3658     --- a/drivers/mtd/nand/raw/mxc_nand.c
3659     +++ b/drivers/mtd/nand/raw/mxc_nand.c
3660     @@ -48,7 +48,7 @@
3661     #define NFC_V1_V2_CONFIG (host->regs + 0x0a)
3662     #define NFC_V1_V2_ECC_STATUS_RESULT (host->regs + 0x0c)
3663     #define NFC_V1_V2_RSLTMAIN_AREA (host->regs + 0x0e)
3664     -#define NFC_V1_V2_RSLTSPARE_AREA (host->regs + 0x10)
3665     +#define NFC_V21_RSLTSPARE_AREA (host->regs + 0x10)
3666     #define NFC_V1_V2_WRPROT (host->regs + 0x12)
3667     #define NFC_V1_UNLOCKSTART_BLKADDR (host->regs + 0x14)
3668     #define NFC_V1_UNLOCKEND_BLKADDR (host->regs + 0x16)
3669     @@ -1274,6 +1274,9 @@ static void preset_v2(struct mtd_info *mtd)
3670     writew(config1, NFC_V1_V2_CONFIG1);
3671     /* preset operation */
3672    
3673     + /* spare area size in 16-bit half-words */
3674     + writew(mtd->oobsize / 2, NFC_V21_RSLTSPARE_AREA);
3675     +
3676     /* Unlock the internal RAM Buffer */
3677     writew(0x2, NFC_V1_V2_CONFIG);
3678    
3679     diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
3680     index f28c3a555861..7a881000eeba 100644
3681     --- a/drivers/mtd/nand/raw/nand_base.c
3682     +++ b/drivers/mtd/nand/raw/nand_base.c
3683     @@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs)
3684    
3685     for (; page < page_end; page++) {
3686     res = chip->ecc.read_oob(mtd, chip, page);
3687     - if (res)
3688     + if (res < 0)
3689     return res;
3690    
3691     bad = chip->oob_poi[chip->badblockpos];
3692     @@ -2174,7 +2174,6 @@ static int nand_set_features_op(struct nand_chip *chip, u8 feature,
3693     struct mtd_info *mtd = nand_to_mtd(chip);
3694     const u8 *params = data;
3695     int i, ret;
3696     - u8 status;
3697    
3698     if (chip->exec_op) {
3699     const struct nand_sdr_timings *sdr =
3700     @@ -2188,26 +2187,18 @@ static int nand_set_features_op(struct nand_chip *chip, u8 feature,
3701     };
3702     struct nand_operation op = NAND_OPERATION(instrs);
3703    
3704     - ret = nand_exec_op(chip, &op);
3705     - if (ret)
3706     - return ret;
3707     -
3708     - ret = nand_status_op(chip, &status);
3709     - if (ret)
3710     - return ret;
3711     - } else {
3712     - chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, feature, -1);
3713     - for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3714     - chip->write_byte(mtd, params[i]);
3715     + return nand_exec_op(chip, &op);
3716     + }
3717    
3718     - ret = chip->waitfunc(mtd, chip);
3719     - if (ret < 0)
3720     - return ret;
3721     + chip->cmdfunc(mtd, NAND_CMD_SET_FEATURES, feature, -1);
3722     + for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
3723     + chip->write_byte(mtd, params[i]);
3724    
3725     - status = ret;
3726     - }
3727     + ret = chip->waitfunc(mtd, chip);
3728     + if (ret < 0)
3729     + return ret;
3730    
3731     - if (status & NAND_STATUS_FAIL)
3732     + if (ret & NAND_STATUS_FAIL)
3733     return -EIO;
3734    
3735     return 0;
3736     diff --git a/drivers/mtd/nand/raw/nand_macronix.c b/drivers/mtd/nand/raw/nand_macronix.c
3737     index 7ed1f87e742a..49c546c97c6f 100644
3738     --- a/drivers/mtd/nand/raw/nand_macronix.c
3739     +++ b/drivers/mtd/nand/raw/nand_macronix.c
3740     @@ -17,23 +17,47 @@
3741    
3742     #include <linux/mtd/rawnand.h>
3743    
3744     +/*
3745     + * Macronix AC series does not support using SET/GET_FEATURES to change
3746     + * the timings unlike what is declared in the parameter page. Unflag
3747     + * this feature to avoid unnecessary downturns.
3748     + */
3749     +static void macronix_nand_fix_broken_get_timings(struct nand_chip *chip)
3750     +{
3751     + unsigned int i;
3752     + static const char * const broken_get_timings[] = {
3753     + "MX30LF1G18AC",
3754     + "MX30LF1G28AC",
3755     + "MX30LF2G18AC",
3756     + "MX30LF2G28AC",
3757     + "MX30LF4G18AC",
3758     + "MX30LF4G28AC",
3759     + "MX60LF8G18AC",
3760     + };
3761     +
3762     + if (!chip->parameters.supports_set_get_features)
3763     + return;
3764     +
3765     + for (i = 0; i < ARRAY_SIZE(broken_get_timings); i++) {
3766     + if (!strcmp(broken_get_timings[i], chip->parameters.model))
3767     + break;
3768     + }
3769     +
3770     + if (i == ARRAY_SIZE(broken_get_timings))
3771     + return;
3772     +
3773     + bitmap_clear(chip->parameters.get_feature_list,
3774     + ONFI_FEATURE_ADDR_TIMING_MODE, 1);
3775     + bitmap_clear(chip->parameters.set_feature_list,
3776     + ONFI_FEATURE_ADDR_TIMING_MODE, 1);
3777     +}
3778     +
3779     static int macronix_nand_init(struct nand_chip *chip)
3780     {
3781     if (nand_is_slc(chip))
3782     chip->bbt_options |= NAND_BBT_SCAN2NDPAGE;
3783    
3784     - /*
3785     - * MX30LF2G18AC chip does not support using SET/GET_FEATURES to change
3786     - * the timings unlike what is declared in the parameter page. Unflag
3787     - * this feature to avoid unnecessary downturns.
3788     - */
3789     - if (chip->parameters.supports_set_get_features &&
3790     - !strcmp("MX30LF2G18AC", chip->parameters.model)) {
3791     - bitmap_clear(chip->parameters.get_feature_list,
3792     - ONFI_FEATURE_ADDR_TIMING_MODE, 1);
3793     - bitmap_clear(chip->parameters.set_feature_list,
3794     - ONFI_FEATURE_ADDR_TIMING_MODE, 1);
3795     - }
3796     + macronix_nand_fix_broken_get_timings(chip);
3797    
3798     return 0;
3799     }
3800     diff --git a/drivers/mtd/nand/raw/nand_micron.c b/drivers/mtd/nand/raw/nand_micron.c
3801     index 0af45b134c0c..5ec4c90a637d 100644
3802     --- a/drivers/mtd/nand/raw/nand_micron.c
3803     +++ b/drivers/mtd/nand/raw/nand_micron.c
3804     @@ -66,7 +66,9 @@ static int micron_nand_onfi_init(struct nand_chip *chip)
3805    
3806     if (p->supports_set_get_features) {
3807     set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->set_feature_list);
3808     + set_bit(ONFI_FEATURE_ON_DIE_ECC, p->set_feature_list);
3809     set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->get_feature_list);
3810     + set_bit(ONFI_FEATURE_ON_DIE_ECC, p->get_feature_list);
3811     }
3812    
3813     return 0;
3814     diff --git a/drivers/mtd/spi-nor/intel-spi.c b/drivers/mtd/spi-nor/intel-spi.c
3815     index 699951523179..8e98f4ab87c1 100644
3816     --- a/drivers/mtd/spi-nor/intel-spi.c
3817     +++ b/drivers/mtd/spi-nor/intel-spi.c
3818     @@ -136,6 +136,7 @@
3819     * @swseq_reg: Use SW sequencer in register reads/writes
3820     * @swseq_erase: Use SW sequencer in erase operation
3821     * @erase_64k: 64k erase supported
3822     + * @atomic_preopcode: Holds preopcode when atomic sequence is requested
3823     * @opcodes: Opcodes which are supported. This are programmed by BIOS
3824     * before it locks down the controller.
3825     */
3826     @@ -153,6 +154,7 @@ struct intel_spi {
3827     bool swseq_reg;
3828     bool swseq_erase;
3829     bool erase_64k;
3830     + u8 atomic_preopcode;
3831     u8 opcodes[8];
3832     };
3833    
3834     @@ -474,7 +476,7 @@ static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len,
3835     int optype)
3836     {
3837     u32 val = 0, status;
3838     - u16 preop;
3839     + u8 atomic_preopcode;
3840     int ret;
3841    
3842     ret = intel_spi_opcode_index(ispi, opcode, optype);
3843     @@ -484,17 +486,42 @@ static int intel_spi_sw_cycle(struct intel_spi *ispi, u8 opcode, int len,
3844     if (len > INTEL_SPI_FIFO_SZ)
3845     return -EINVAL;
3846    
3847     + /*
3848     + * Always clear it after each SW sequencer operation regardless
3849     + * of whether it is successful or not.
3850     + */
3851     + atomic_preopcode = ispi->atomic_preopcode;
3852     + ispi->atomic_preopcode = 0;
3853     +
3854     /* Only mark 'Data Cycle' bit when there is data to be transferred */
3855     if (len > 0)
3856     val = ((len - 1) << SSFSTS_CTL_DBC_SHIFT) | SSFSTS_CTL_DS;
3857     val |= ret << SSFSTS_CTL_COP_SHIFT;
3858     val |= SSFSTS_CTL_FCERR | SSFSTS_CTL_FDONE;
3859     val |= SSFSTS_CTL_SCGO;
3860     - preop = readw(ispi->sregs + PREOP_OPTYPE);
3861     - if (preop) {
3862     - val |= SSFSTS_CTL_ACS;
3863     - if (preop >> 8)
3864     - val |= SSFSTS_CTL_SPOP;
3865     + if (atomic_preopcode) {
3866     + u16 preop;
3867     +
3868     + switch (optype) {
3869     + case OPTYPE_WRITE_NO_ADDR:
3870     + case OPTYPE_WRITE_WITH_ADDR:
3871     + /* Pick matching preopcode for the atomic sequence */
3872     + preop = readw(ispi->sregs + PREOP_OPTYPE);
3873     + if ((preop & 0xff) == atomic_preopcode)
3874     + ; /* Do nothing */
3875     + else if ((preop >> 8) == atomic_preopcode)
3876     + val |= SSFSTS_CTL_SPOP;
3877     + else
3878     + return -EINVAL;
3879     +
3880     + /* Enable atomic sequence */
3881     + val |= SSFSTS_CTL_ACS;
3882     + break;
3883     +
3884     + default:
3885     + return -EINVAL;
3886     + }
3887     +
3888     }
3889     writel(val, ispi->sregs + SSFSTS_CTL);
3890    
3891     @@ -538,13 +565,31 @@ static int intel_spi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
3892    
3893     /*
3894     * This is handled with atomic operation and preop code in Intel
3895     - * controller so skip it here now. If the controller is not locked,
3896     - * program the opcode to the PREOP register for later use.
3897     + * controller so we only verify that it is available. If the
3898     + * controller is not locked, program the opcode to the PREOP
3899     + * register for later use.
3900     + *
3901     + * When hardware sequencer is used there is no need to program
3902     + * any opcodes (it handles them automatically as part of a command).
3903     */
3904     if (opcode == SPINOR_OP_WREN) {
3905     - if (!ispi->locked)
3906     + u16 preop;
3907     +
3908     + if (!ispi->swseq_reg)
3909     + return 0;
3910     +
3911     + preop = readw(ispi->sregs + PREOP_OPTYPE);
3912     + if ((preop & 0xff) != opcode && (preop >> 8) != opcode) {
3913     + if (ispi->locked)
3914     + return -EINVAL;
3915     writel(opcode, ispi->sregs + PREOP_OPTYPE);
3916     + }
3917    
3918     + /*
3919     + * This enables atomic sequence on next SW sycle. Will
3920     + * be cleared after next operation.
3921     + */
3922     + ispi->atomic_preopcode = opcode;
3923     return 0;
3924     }
3925    
3926     @@ -569,6 +614,13 @@ static ssize_t intel_spi_read(struct spi_nor *nor, loff_t from, size_t len,
3927     u32 val, status;
3928     ssize_t ret;
3929    
3930     + /*
3931     + * Atomic sequence is not expected with HW sequencer reads. Make
3932     + * sure it is cleared regardless.
3933     + */
3934     + if (WARN_ON_ONCE(ispi->atomic_preopcode))
3935     + ispi->atomic_preopcode = 0;
3936     +
3937     switch (nor->read_opcode) {
3938     case SPINOR_OP_READ:
3939     case SPINOR_OP_READ_FAST:
3940     @@ -627,6 +679,9 @@ static ssize_t intel_spi_write(struct spi_nor *nor, loff_t to, size_t len,
3941     u32 val, status;
3942     ssize_t ret;
3943    
3944     + /* Not needed with HW sequencer write, make sure it is cleared */
3945     + ispi->atomic_preopcode = 0;
3946     +
3947     while (len > 0) {
3948     block_size = min_t(size_t, len, INTEL_SPI_FIFO_SZ);
3949    
3950     @@ -707,6 +762,9 @@ static int intel_spi_erase(struct spi_nor *nor, loff_t offs)
3951     return 0;
3952     }
3953    
3954     + /* Not needed with HW sequencer erase, make sure it is cleared */
3955     + ispi->atomic_preopcode = 0;
3956     +
3957     while (len > 0) {
3958     writel(offs, ispi->base + FADDR);
3959    
3960     diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
3961     index 753494e042d5..74425af840d6 100644
3962     --- a/drivers/mtd/ubi/build.c
3963     +++ b/drivers/mtd/ubi/build.c
3964     @@ -1091,6 +1091,9 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
3965     if (ubi->bgt_thread)
3966     kthread_stop(ubi->bgt_thread);
3967    
3968     +#ifdef CONFIG_MTD_UBI_FASTMAP
3969     + cancel_work_sync(&ubi->fm_work);
3970     +#endif
3971     ubi_debugfs_exit_dev(ubi);
3972     uif_close(ubi);
3973    
3974     diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c
3975     index 250e30fac61b..593a4f9d97e3 100644
3976     --- a/drivers/mtd/ubi/eba.c
3977     +++ b/drivers/mtd/ubi/eba.c
3978     @@ -490,6 +490,82 @@ int ubi_eba_unmap_leb(struct ubi_device *ubi, struct ubi_volume *vol,
3979     return err;
3980     }
3981    
3982     +#ifdef CONFIG_MTD_UBI_FASTMAP
3983     +/**
3984     + * check_mapping - check and fixup a mapping
3985     + * @ubi: UBI device description object
3986     + * @vol: volume description object
3987     + * @lnum: logical eraseblock number
3988     + * @pnum: physical eraseblock number
3989     + *
3990     + * Checks whether a given mapping is valid. Fastmap cannot track LEB unmap
3991     + * operations, if such an operation is interrupted the mapping still looks
3992     + * good, but upon first read an ECC is reported to the upper layer.
3993     + * Normaly during the full-scan at attach time this is fixed, for Fastmap
3994     + * we have to deal with it while reading.
3995     + * If the PEB behind a LEB shows this symthom we change the mapping to
3996     + * %UBI_LEB_UNMAPPED and schedule the PEB for erasure.
3997     + *
3998     + * Returns 0 on success, negative error code in case of failure.
3999     + */
4000     +static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
4001     + int *pnum)
4002     +{
4003     + int err;
4004     + struct ubi_vid_io_buf *vidb;
4005     +
4006     + if (!ubi->fast_attach)
4007     + return 0;
4008     +
4009     + vidb = ubi_alloc_vid_buf(ubi, GFP_NOFS);
4010     + if (!vidb)
4011     + return -ENOMEM;
4012     +
4013     + err = ubi_io_read_vid_hdr(ubi, *pnum, vidb, 0);
4014     + if (err > 0 && err != UBI_IO_BITFLIPS) {
4015     + int torture = 0;
4016     +
4017     + switch (err) {
4018     + case UBI_IO_FF:
4019     + case UBI_IO_FF_BITFLIPS:
4020     + case UBI_IO_BAD_HDR:
4021     + case UBI_IO_BAD_HDR_EBADMSG:
4022     + break;
4023     + default:
4024     + ubi_assert(0);
4025     + }
4026     +
4027     + if (err == UBI_IO_BAD_HDR_EBADMSG || err == UBI_IO_FF_BITFLIPS)
4028     + torture = 1;
4029     +
4030     + down_read(&ubi->fm_eba_sem);
4031     + vol->eba_tbl->entries[lnum].pnum = UBI_LEB_UNMAPPED;
4032     + up_read(&ubi->fm_eba_sem);
4033     + ubi_wl_put_peb(ubi, vol->vol_id, lnum, *pnum, torture);
4034     +
4035     + *pnum = UBI_LEB_UNMAPPED;
4036     + } else if (err < 0) {
4037     + ubi_err(ubi, "unable to read VID header back from PEB %i: %i",
4038     + *pnum, err);
4039     +
4040     + goto out_free;
4041     + }
4042     +
4043     + err = 0;
4044     +
4045     +out_free:
4046     + ubi_free_vid_buf(vidb);
4047     +
4048     + return err;
4049     +}
4050     +#else
4051     +static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
4052     + int *pnum)
4053     +{
4054     + return 0;
4055     +}
4056     +#endif
4057     +
4058     /**
4059     * ubi_eba_read_leb - read data.
4060     * @ubi: UBI device description object
4061     @@ -522,7 +598,13 @@ int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
4062     return err;
4063    
4064     pnum = vol->eba_tbl->entries[lnum].pnum;
4065     - if (pnum < 0) {
4066     + if (pnum >= 0) {
4067     + err = check_mapping(ubi, vol, lnum, &pnum);
4068     + if (err < 0)
4069     + goto out_unlock;
4070     + }
4071     +
4072     + if (pnum == UBI_LEB_UNMAPPED) {
4073     /*
4074     * The logical eraseblock is not mapped, fill the whole buffer
4075     * with 0xFF bytes. The exception is static volumes for which
4076     @@ -930,6 +1012,12 @@ int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
4077     return err;
4078    
4079     pnum = vol->eba_tbl->entries[lnum].pnum;
4080     + if (pnum >= 0) {
4081     + err = check_mapping(ubi, vol, lnum, &pnum);
4082     + if (err < 0)
4083     + goto out;
4084     + }
4085     +
4086     if (pnum >= 0) {
4087     dbg_eba("write %d bytes at offset %d of LEB %d:%d, PEB %d",
4088     len, offset, vol_id, lnum, pnum);
4089     diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
4090     index 2052a647220e..f66b3b22f328 100644
4091     --- a/drivers/mtd/ubi/wl.c
4092     +++ b/drivers/mtd/ubi/wl.c
4093     @@ -1505,6 +1505,7 @@ int ubi_thread(void *u)
4094     }
4095    
4096     dbg_wl("background thread \"%s\" is killed", ubi->bgt_name);
4097     + ubi->thread_enabled = 0;
4098     return 0;
4099     }
4100    
4101     @@ -1514,9 +1515,6 @@ int ubi_thread(void *u)
4102     */
4103     static void shutdown_work(struct ubi_device *ubi)
4104     {
4105     -#ifdef CONFIG_MTD_UBI_FASTMAP
4106     - flush_work(&ubi->fm_work);
4107     -#endif
4108     while (!list_empty(&ubi->works)) {
4109     struct ubi_work *wrk;
4110    
4111     diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
4112     index 38828ab77eb9..1480c094b57d 100644
4113     --- a/drivers/net/ethernet/ti/davinci_emac.c
4114     +++ b/drivers/net/ethernet/ti/davinci_emac.c
4115     @@ -1385,6 +1385,11 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
4116     return -EOPNOTSUPP;
4117     }
4118    
4119     +static int match_first_device(struct device *dev, void *data)
4120     +{
4121     + return !strncmp(dev_name(dev), "davinci_mdio", 12);
4122     +}
4123     +
4124     /**
4125     * emac_dev_open - EMAC device open
4126     * @ndev: The DaVinci EMAC network adapter
4127     @@ -1484,8 +1489,14 @@ static int emac_dev_open(struct net_device *ndev)
4128    
4129     /* use the first phy on the bus if pdata did not give us a phy id */
4130     if (!phydev && !priv->phy_id) {
4131     - phy = bus_find_device_by_name(&mdio_bus_type, NULL,
4132     - "davinci_mdio");
4133     + /* NOTE: we can't use bus_find_device_by_name() here because
4134     + * the device name is not guaranteed to be 'davinci_mdio'. On
4135     + * some systems it can be 'davinci_mdio.0' so we need to use
4136     + * strncmp() against the first part of the string to correctly
4137     + * match it.
4138     + */
4139     + phy = bus_find_device(&mdio_bus_type, NULL, NULL,
4140     + match_first_device);
4141     if (phy) {
4142     priv->phy_id = dev_name(phy);
4143     if (!priv->phy_id || !*priv->phy_id)
4144     diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
4145     index a64023690cad..b9e0d30e317a 100644
4146     --- a/drivers/nvdimm/bus.c
4147     +++ b/drivers/nvdimm/bus.c
4148     @@ -566,14 +566,18 @@ int nvdimm_revalidate_disk(struct gendisk *disk)
4149     {
4150     struct device *dev = disk_to_dev(disk)->parent;
4151     struct nd_region *nd_region = to_nd_region(dev->parent);
4152     - const char *pol = nd_region->ro ? "only" : "write";
4153     + int disk_ro = get_disk_ro(disk);
4154    
4155     - if (nd_region->ro == get_disk_ro(disk))
4156     + /*
4157     + * Upgrade to read-only if the region is read-only preserve as
4158     + * read-only if the disk is already read-only.
4159     + */
4160     + if (disk_ro || nd_region->ro == disk_ro)
4161     return 0;
4162    
4163     - dev_info(dev, "%s read-%s, marking %s read-%s\n",
4164     - dev_name(&nd_region->dev), pol, disk->disk_name, pol);
4165     - set_disk_ro(disk, nd_region->ro);
4166     + dev_info(dev, "%s read-only, marking %s read-only\n",
4167     + dev_name(&nd_region->dev), disk->disk_name);
4168     + set_disk_ro(disk, 1);
4169    
4170     return 0;
4171    
4172     diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
4173     index 9d714926ecf5..d7193c4a6ee2 100644
4174     --- a/drivers/nvdimm/pmem.c
4175     +++ b/drivers/nvdimm/pmem.c
4176     @@ -299,7 +299,7 @@ static int pmem_attach_disk(struct device *dev,
4177     {
4178     struct nd_namespace_io *nsio = to_nd_namespace_io(&ndns->dev);
4179     struct nd_region *nd_region = to_nd_region(dev->parent);
4180     - int nid = dev_to_node(dev), fua, wbc;
4181     + int nid = dev_to_node(dev), fua;
4182     struct resource *res = &nsio->res;
4183     struct resource bb_res;
4184     struct nd_pfn *nd_pfn = NULL;
4185     @@ -335,7 +335,6 @@ static int pmem_attach_disk(struct device *dev,
4186     dev_warn(dev, "unable to guarantee persistence of writes\n");
4187     fua = 0;
4188     }
4189     - wbc = nvdimm_has_cache(nd_region);
4190    
4191     if (!devm_request_mem_region(dev, res->start, resource_size(res),
4192     dev_name(&ndns->dev))) {
4193     @@ -382,13 +381,14 @@ static int pmem_attach_disk(struct device *dev,
4194     return PTR_ERR(addr);
4195     pmem->virt_addr = addr;
4196    
4197     - blk_queue_write_cache(q, wbc, fua);
4198     + blk_queue_write_cache(q, true, fua);
4199     blk_queue_make_request(q, pmem_make_request);
4200     blk_queue_physical_block_size(q, PAGE_SIZE);
4201     blk_queue_logical_block_size(q, pmem_sector_size(ndns));
4202     blk_queue_max_hw_sectors(q, UINT_MAX);
4203     blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
4204     - blk_queue_flag_set(QUEUE_FLAG_DAX, q);
4205     + if (pmem->pfn_flags & PFN_MAP)
4206     + blk_queue_flag_set(QUEUE_FLAG_DAX, q);
4207     q->queuedata = pmem;
4208    
4209     disk = alloc_disk_node(0, nid);
4210     @@ -413,7 +413,7 @@ static int pmem_attach_disk(struct device *dev,
4211     put_disk(disk);
4212     return -ENOMEM;
4213     }
4214     - dax_write_cache(dax_dev, wbc);
4215     + dax_write_cache(dax_dev, nvdimm_has_cache(nd_region));
4216     pmem->dax_dev = dax_dev;
4217    
4218     gendev = disk_to_dev(disk);
4219     diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
4220     index a612be6f019d..ec3543b83330 100644
4221     --- a/drivers/nvdimm/region_devs.c
4222     +++ b/drivers/nvdimm/region_devs.c
4223     @@ -1132,7 +1132,8 @@ EXPORT_SYMBOL_GPL(nvdimm_has_flush);
4224    
4225     int nvdimm_has_cache(struct nd_region *nd_region)
4226     {
4227     - return is_nd_pmem(&nd_region->dev);
4228     + return is_nd_pmem(&nd_region->dev) &&
4229     + !test_bit(ND_REGION_PERSIST_CACHE, &nd_region->flags);
4230     }
4231     EXPORT_SYMBOL_GPL(nvdimm_has_cache);
4232    
4233     diff --git a/drivers/of/platform.c b/drivers/of/platform.c
4234     index c00d81dfac0b..9c91f97ffbe1 100644
4235     --- a/drivers/of/platform.c
4236     +++ b/drivers/of/platform.c
4237     @@ -537,6 +537,9 @@ int of_platform_device_destroy(struct device *dev, void *data)
4238     if (of_node_check_flag(dev->of_node, OF_POPULATED_BUS))
4239     device_for_each_child(dev, NULL, of_platform_device_destroy);
4240    
4241     + of_node_clear_flag(dev->of_node, OF_POPULATED);
4242     + of_node_clear_flag(dev->of_node, OF_POPULATED_BUS);
4243     +
4244     if (dev->bus == &platform_bus_type)
4245     platform_device_unregister(to_platform_device(dev));
4246     #ifdef CONFIG_ARM_AMBA
4247     @@ -544,8 +547,6 @@ int of_platform_device_destroy(struct device *dev, void *data)
4248     amba_device_unregister(to_amba_device(dev));
4249     #endif
4250    
4251     - of_node_clear_flag(dev->of_node, OF_POPULATED);
4252     - of_node_clear_flag(dev->of_node, OF_POPULATED_BUS);
4253     return 0;
4254     }
4255     EXPORT_SYMBOL_GPL(of_platform_device_destroy);
4256     diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c
4257     index 65d0b7adfcd4..7edfac6f1914 100644
4258     --- a/drivers/of/resolver.c
4259     +++ b/drivers/of/resolver.c
4260     @@ -122,6 +122,11 @@ static int update_usages_of_a_phandle_reference(struct device_node *overlay,
4261     goto err_fail;
4262     }
4263    
4264     + if (offset < 0 || offset + sizeof(__be32) > prop->length) {
4265     + err = -EINVAL;
4266     + goto err_fail;
4267     + }
4268     +
4269     *(__be32 *)(prop->value + offset) = cpu_to_be32(phandle);
4270     }
4271    
4272     diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
4273     index 6bb37c18292a..ecee50d10d14 100644
4274     --- a/drivers/of/unittest.c
4275     +++ b/drivers/of/unittest.c
4276     @@ -165,20 +165,20 @@ static void __init of_unittest_dynamic(void)
4277     /* Add a new property - should pass*/
4278     prop->name = "new-property";
4279     prop->value = "new-property-data";
4280     - prop->length = strlen(prop->value);
4281     + prop->length = strlen(prop->value) + 1;
4282     unittest(of_add_property(np, prop) == 0, "Adding a new property failed\n");
4283    
4284     /* Try to add an existing property - should fail */
4285     prop++;
4286     prop->name = "new-property";
4287     prop->value = "new-property-data-should-fail";
4288     - prop->length = strlen(prop->value);
4289     + prop->length = strlen(prop->value) + 1;
4290     unittest(of_add_property(np, prop) != 0,
4291     "Adding an existing property should have failed\n");
4292    
4293     /* Try to modify an existing property - should pass */
4294     prop->value = "modify-property-data-should-pass";
4295     - prop->length = strlen(prop->value);
4296     + prop->length = strlen(prop->value) + 1;
4297     unittest(of_update_property(np, prop) == 0,
4298     "Updating an existing property should have passed\n");
4299    
4300     @@ -186,7 +186,7 @@ static void __init of_unittest_dynamic(void)
4301     prop++;
4302     prop->name = "modify-property";
4303     prop->value = "modify-missing-property-data-should-pass";
4304     - prop->length = strlen(prop->value);
4305     + prop->length = strlen(prop->value) + 1;
4306     unittest(of_update_property(np, prop) == 0,
4307     "Updating a missing property should have passed\n");
4308    
4309     diff --git a/drivers/opp/core.c b/drivers/opp/core.c
4310     index 92fa94a6dcc1..9c3f5e3df232 100644
4311     --- a/drivers/opp/core.c
4312     +++ b/drivers/opp/core.c
4313     @@ -591,7 +591,7 @@ static int _generic_set_opp_regulator(const struct opp_table *opp_table,
4314     }
4315    
4316     /* Scaling up? Scale voltage before frequency */
4317     - if (freq > old_freq) {
4318     + if (freq >= old_freq) {
4319     ret = _set_opp_voltage(dev, reg, new_supply);
4320     if (ret)
4321     goto restore_voltage;
4322     diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
4323     index c75199538c05..da4b457a14e0 100644
4324     --- a/drivers/pci/host/pci-hyperv.c
4325     +++ b/drivers/pci/host/pci-hyperv.c
4326     @@ -1596,17 +1596,6 @@ static struct hv_pci_dev *new_pcichild_device(struct hv_pcibus_device *hbus,
4327     get_pcichild(hpdev, hv_pcidev_ref_childlist);
4328     spin_lock_irqsave(&hbus->device_list_lock, flags);
4329    
4330     - /*
4331     - * When a device is being added to the bus, we set the PCI domain
4332     - * number to be the device serial number, which is non-zero and
4333     - * unique on the same VM. The serial numbers start with 1, and
4334     - * increase by 1 for each device. So device names including this
4335     - * can have shorter names than based on the bus instance UUID.
4336     - * Only the first device serial number is used for domain, so the
4337     - * domain number will not change after the first device is added.
4338     - */
4339     - if (list_empty(&hbus->children))
4340     - hbus->sysdata.domain = desc->ser;
4341     list_add_tail(&hpdev->list_entry, &hbus->children);
4342     spin_unlock_irqrestore(&hbus->device_list_lock, flags);
4343     return hpdev;
4344     diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h
4345     index 88e917c9120f..5f892065585e 100644
4346     --- a/drivers/pci/hotplug/pciehp.h
4347     +++ b/drivers/pci/hotplug/pciehp.h
4348     @@ -121,7 +121,7 @@ struct controller *pcie_init(struct pcie_device *dev);
4349     int pcie_init_notification(struct controller *ctrl);
4350     int pciehp_enable_slot(struct slot *p_slot);
4351     int pciehp_disable_slot(struct slot *p_slot);
4352     -void pcie_enable_notification(struct controller *ctrl);
4353     +void pcie_reenable_notification(struct controller *ctrl);
4354     int pciehp_power_on_slot(struct slot *slot);
4355     void pciehp_power_off_slot(struct slot *slot);
4356     void pciehp_get_power_status(struct slot *slot, u8 *status);
4357     diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
4358     index 332b723ff9e6..44a6a63802d5 100644
4359     --- a/drivers/pci/hotplug/pciehp_core.c
4360     +++ b/drivers/pci/hotplug/pciehp_core.c
4361     @@ -283,7 +283,7 @@ static int pciehp_resume(struct pcie_device *dev)
4362     ctrl = get_service_data(dev);
4363    
4364     /* reinitialize the chipset's event detection logic */
4365     - pcie_enable_notification(ctrl);
4366     + pcie_reenable_notification(ctrl);
4367    
4368     slot = ctrl->slot;
4369    
4370     diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
4371     index 18a42f8f5dc5..98ea75aa32c7 100644
4372     --- a/drivers/pci/hotplug/pciehp_hpc.c
4373     +++ b/drivers/pci/hotplug/pciehp_hpc.c
4374     @@ -659,7 +659,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)
4375     return handled;
4376     }
4377    
4378     -void pcie_enable_notification(struct controller *ctrl)
4379     +static void pcie_enable_notification(struct controller *ctrl)
4380     {
4381     u16 cmd, mask;
4382    
4383     @@ -697,6 +697,17 @@ void pcie_enable_notification(struct controller *ctrl)
4384     pci_pcie_cap(ctrl->pcie->port) + PCI_EXP_SLTCTL, cmd);
4385     }
4386    
4387     +void pcie_reenable_notification(struct controller *ctrl)
4388     +{
4389     + /*
4390     + * Clear both Presence and Data Link Layer Changed to make sure
4391     + * those events still fire after we have re-enabled them.
4392     + */
4393     + pcie_capability_write_word(ctrl->pcie->port, PCI_EXP_SLTSTA,
4394     + PCI_EXP_SLTSTA_PDC | PCI_EXP_SLTSTA_DLLSC);
4395     + pcie_enable_notification(ctrl);
4396     +}
4397     +
4398     static void pcie_disable_notification(struct controller *ctrl)
4399     {
4400     u16 mask;
4401     diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
4402     index b9a131137e64..c816b0683a82 100644
4403     --- a/drivers/pci/pci-driver.c
4404     +++ b/drivers/pci/pci-driver.c
4405     @@ -753,10 +753,11 @@ static int pci_pm_suspend(struct device *dev)
4406     * better to resume the device from runtime suspend here.
4407     */
4408     if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
4409     - !pci_dev_keep_suspended(pci_dev))
4410     + !pci_dev_keep_suspended(pci_dev)) {
4411     pm_runtime_resume(dev);
4412     + pci_dev->state_saved = false;
4413     + }
4414    
4415     - pci_dev->state_saved = false;
4416     if (pm->suspend) {
4417     pci_power_t prev = pci_dev->current_state;
4418     int error;
4419     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
4420     index ac91b6fd0bcd..73ac02796ba9 100644
4421     --- a/drivers/pci/probe.c
4422     +++ b/drivers/pci/probe.c
4423     @@ -2638,7 +2638,14 @@ static unsigned int pci_scan_child_bus_extend(struct pci_bus *bus,
4424     for_each_pci_bridge(dev, bus) {
4425     cmax = max;
4426     max = pci_scan_bridge_extend(bus, dev, max, 0, 0);
4427     - used_buses += cmax - max;
4428     +
4429     + /*
4430     + * Reserve one bus for each bridge now to avoid extending
4431     + * hotplug bridges too much during the second scan below.
4432     + */
4433     + used_buses++;
4434     + if (cmax - max > 1)
4435     + used_buses += cmax - max - 1;
4436     }
4437    
4438     /* Scan bridges that need to be reconfigured */
4439     @@ -2661,12 +2668,14 @@ static unsigned int pci_scan_child_bus_extend(struct pci_bus *bus,
4440     * bridges if any.
4441     */
4442     buses = available_buses / hotplug_bridges;
4443     - buses = min(buses, available_buses - used_buses);
4444     + buses = min(buses, available_buses - used_buses + 1);
4445     }
4446    
4447     cmax = max;
4448     max = pci_scan_bridge_extend(bus, dev, cmax, buses, 1);
4449     - used_buses += max - cmax;
4450     + /* One bus is already accounted so don't add it again */
4451     + if (max - cmax > 1)
4452     + used_buses += max - cmax - 1;
4453     }
4454    
4455     /*
4456     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
4457     index 2990ad1e7c99..785a29ba4f51 100644
4458     --- a/drivers/pci/quirks.c
4459     +++ b/drivers/pci/quirks.c
4460     @@ -4230,11 +4230,29 @@ static int pci_quirk_qcom_rp_acs(struct pci_dev *dev, u16 acs_flags)
4461     * 0xa290-0xa29f PCI Express Root port #{0-16}
4462     * 0xa2e7-0xa2ee PCI Express Root port #{17-24}
4463     *
4464     + * Mobile chipsets are also affected, 7th & 8th Generation
4465     + * Specification update confirms ACS errata 22, status no fix: (7th Generation
4466     + * Intel Processor Family I/O for U/Y Platforms and 8th Generation Intel
4467     + * Processor Family I/O for U Quad Core Platforms Specification Update,
4468     + * August 2017, Revision 002, Document#: 334660-002)[6]
4469     + * Device IDs from I/O datasheet: (7th Generation Intel Processor Family I/O
4470     + * for U/Y Platforms and 8th Generation Intel ® Processor Family I/O for U
4471     + * Quad Core Platforms, Vol 1 of 2, August 2017, Document#: 334658-003)[7]
4472     + *
4473     + * 0x9d10-0x9d1b PCI Express Root port #{1-12}
4474     + *
4475     + * The 300 series chipset suffers from the same bug so include those root
4476     + * ports here as well.
4477     + *
4478     + * 0xa32c-0xa343 PCI Express Root port #{0-24}
4479     + *
4480     * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html
4481     * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html
4482     * [3] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html
4483     * [4] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-spec-update.html
4484     * [5] http://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-datasheet-vol-1.html
4485     + * [6] https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-u-y-processor-lines-i-o-spec-update.html
4486     + * [7] https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-u-y-processor-lines-i-o-datasheet-vol-1.html
4487     */
4488     static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev)
4489     {
4490     @@ -4244,6 +4262,8 @@ static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev)
4491     switch (dev->device) {
4492     case 0xa110 ... 0xa11f: case 0xa167 ... 0xa16a: /* Sunrise Point */
4493     case 0xa290 ... 0xa29f: case 0xa2e7 ... 0xa2ee: /* Union Point */
4494     + case 0x9d10 ... 0x9d1b: /* 7th & 8th Gen Mobile */
4495     + case 0xa32c ... 0xa343: /* 300 series */
4496     return true;
4497     }
4498    
4499     diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
4500     index b601039d6c69..c4aa411f5935 100644
4501     --- a/drivers/pinctrl/devicetree.c
4502     +++ b/drivers/pinctrl/devicetree.c
4503     @@ -101,10 +101,11 @@ struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
4504     }
4505    
4506     static int dt_to_map_one_config(struct pinctrl *p,
4507     - struct pinctrl_dev *pctldev,
4508     + struct pinctrl_dev *hog_pctldev,
4509     const char *statename,
4510     struct device_node *np_config)
4511     {
4512     + struct pinctrl_dev *pctldev = NULL;
4513     struct device_node *np_pctldev;
4514     const struct pinctrl_ops *ops;
4515     int ret;
4516     @@ -123,8 +124,10 @@ static int dt_to_map_one_config(struct pinctrl *p,
4517     return -EPROBE_DEFER;
4518     }
4519     /* If we're creating a hog we can use the passed pctldev */
4520     - if (pctldev && (np_pctldev == p->dev->of_node))
4521     + if (hog_pctldev && (np_pctldev == p->dev->of_node)) {
4522     + pctldev = hog_pctldev;
4523     break;
4524     + }
4525     pctldev = get_pinctrl_dev_from_of_node(np_pctldev);
4526     if (pctldev)
4527     break;
4528     diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
4529     index 5b63248c8209..7bef929bd7fe 100644
4530     --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
4531     +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
4532     @@ -679,12 +679,13 @@ static void armada_37xx_irq_handler(struct irq_desc *desc)
4533     writel(1 << hwirq,
4534     info->base +
4535     IRQ_STATUS + 4 * i);
4536     - continue;
4537     + goto update_status;
4538     }
4539     }
4540    
4541     generic_handle_irq(virq);
4542    
4543     +update_status:
4544     /* Update status in case a new IRQ appears */
4545     spin_lock_irqsave(&info->irq_lock, flags);
4546     status = readl_relaxed(info->base +
4547     diff --git a/drivers/pinctrl/samsung/pinctrl-exynos-arm.c b/drivers/pinctrl/samsung/pinctrl-exynos-arm.c
4548     index 90c274490181..4f4ae66a0ee3 100644
4549     --- a/drivers/pinctrl/samsung/pinctrl-exynos-arm.c
4550     +++ b/drivers/pinctrl/samsung/pinctrl-exynos-arm.c
4551     @@ -105,12 +105,12 @@ static const struct samsung_pin_bank_data s5pv210_pin_bank[] __initconst = {
4552     EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38),
4553     EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c),
4554     EXYNOS_PIN_BANK_EINTG(7, 0x200, "gpg3", 0x40),
4555     - EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"),
4556     EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x44),
4557     EXYNOS_PIN_BANK_EINTG(6, 0x260, "gpj1", 0x48),
4558     EXYNOS_PIN_BANK_EINTG(8, 0x280, "gpj2", 0x4c),
4559     EXYNOS_PIN_BANK_EINTG(8, 0x2a0, "gpj3", 0x50),
4560     EXYNOS_PIN_BANK_EINTG(5, 0x2c0, "gpj4", 0x54),
4561     + EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"),
4562     EXYNOS_PIN_BANK_EINTN(8, 0x2e0, "mp01"),
4563     EXYNOS_PIN_BANK_EINTN(4, 0x300, "mp02"),
4564     EXYNOS_PIN_BANK_EINTN(8, 0x320, "mp03"),
4565     @@ -630,7 +630,6 @@ static const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst =
4566     EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc3", 0x20),
4567     EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc1", 0x24),
4568     EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc2", 0x28),
4569     - EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"),
4570     EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x2c),
4571     EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpe0", 0x30),
4572     EXYNOS_PIN_BANK_EINTG(2, 0x1C0, "gpe1", 0x34),
4573     @@ -641,6 +640,7 @@ static const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst =
4574     EXYNOS_PIN_BANK_EINTG(2, 0x260, "gpg2", 0x48),
4575     EXYNOS_PIN_BANK_EINTG(4, 0x280, "gph0", 0x4c),
4576     EXYNOS_PIN_BANK_EINTG(8, 0x2A0, "gph1", 0x50),
4577     + EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"),
4578     EXYNOS_PIN_BANK_EINTN(8, 0x2C0, "gpm7"),
4579     EXYNOS_PIN_BANK_EINTN(6, 0x2E0, "gpy0"),
4580     EXYNOS_PIN_BANK_EINTN(4, 0x300, "gpy1"),
4581     diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
4582     index 3682e1539251..31c8b8c49e45 100644
4583     --- a/drivers/platform/chrome/cros_ec_lpc.c
4584     +++ b/drivers/platform/chrome/cros_ec_lpc.c
4585     @@ -435,7 +435,13 @@ static int __init cros_ec_lpc_init(void)
4586     int ret;
4587     acpi_status status;
4588    
4589     - if (!dmi_check_system(cros_ec_lpc_dmi_table)) {
4590     + status = acpi_get_devices(ACPI_DRV_NAME, cros_ec_lpc_parse_device,
4591     + &cros_ec_lpc_acpi_device_found, NULL);
4592     + if (ACPI_FAILURE(status))
4593     + pr_warn(DRV_NAME ": Looking for %s failed\n", ACPI_DRV_NAME);
4594     +
4595     + if (!cros_ec_lpc_acpi_device_found &&
4596     + !dmi_check_system(cros_ec_lpc_dmi_table)) {
4597     pr_err(DRV_NAME ": unsupported system.\n");
4598     return -ENODEV;
4599     }
4600     @@ -450,11 +456,6 @@ static int __init cros_ec_lpc_init(void)
4601     return ret;
4602     }
4603    
4604     - status = acpi_get_devices(ACPI_DRV_NAME, cros_ec_lpc_parse_device,
4605     - &cros_ec_lpc_acpi_device_found, NULL);
4606     - if (ACPI_FAILURE(status))
4607     - pr_warn(DRV_NAME ": Looking for %s failed\n", ACPI_DRV_NAME);
4608     -
4609     if (!cros_ec_lpc_acpi_device_found) {
4610     /* Register the device, and it'll get hooked up automatically */
4611     ret = platform_device_register(&cros_ec_lpc_device);
4612     diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
4613     index 5d6ed1507d29..5561b9e190f8 100644
4614     --- a/drivers/pwm/pwm-lpss-platform.c
4615     +++ b/drivers/pwm/pwm-lpss-platform.c
4616     @@ -74,6 +74,10 @@ static int pwm_lpss_remove_platform(struct platform_device *pdev)
4617     return pwm_lpss_remove(lpwm);
4618     }
4619    
4620     +static SIMPLE_DEV_PM_OPS(pwm_lpss_platform_pm_ops,
4621     + pwm_lpss_suspend,
4622     + pwm_lpss_resume);
4623     +
4624     static const struct acpi_device_id pwm_lpss_acpi_match[] = {
4625     { "80860F09", (unsigned long)&pwm_lpss_byt_info },
4626     { "80862288", (unsigned long)&pwm_lpss_bsw_info },
4627     @@ -86,6 +90,7 @@ static struct platform_driver pwm_lpss_driver_platform = {
4628     .driver = {
4629     .name = "pwm-lpss",
4630     .acpi_match_table = pwm_lpss_acpi_match,
4631     + .pm = &pwm_lpss_platform_pm_ops,
4632     },
4633     .probe = pwm_lpss_probe_platform,
4634     .remove = pwm_lpss_remove_platform,
4635     diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
4636     index 8db0d40ccacd..4721a264bac2 100644
4637     --- a/drivers/pwm/pwm-lpss.c
4638     +++ b/drivers/pwm/pwm-lpss.c
4639     @@ -32,10 +32,13 @@
4640     /* Size of each PWM register space if multiple */
4641     #define PWM_SIZE 0x400
4642    
4643     +#define MAX_PWMS 4
4644     +
4645     struct pwm_lpss_chip {
4646     struct pwm_chip chip;
4647     void __iomem *regs;
4648     const struct pwm_lpss_boardinfo *info;
4649     + u32 saved_ctrl[MAX_PWMS];
4650     };
4651    
4652     static inline struct pwm_lpss_chip *to_lpwm(struct pwm_chip *chip)
4653     @@ -177,6 +180,9 @@ struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
4654     unsigned long c;
4655     int ret;
4656    
4657     + if (WARN_ON(info->npwm > MAX_PWMS))
4658     + return ERR_PTR(-ENODEV);
4659     +
4660     lpwm = devm_kzalloc(dev, sizeof(*lpwm), GFP_KERNEL);
4661     if (!lpwm)
4662     return ERR_PTR(-ENOMEM);
4663     @@ -212,6 +218,30 @@ int pwm_lpss_remove(struct pwm_lpss_chip *lpwm)
4664     }
4665     EXPORT_SYMBOL_GPL(pwm_lpss_remove);
4666    
4667     +int pwm_lpss_suspend(struct device *dev)
4668     +{
4669     + struct pwm_lpss_chip *lpwm = dev_get_drvdata(dev);
4670     + int i;
4671     +
4672     + for (i = 0; i < lpwm->info->npwm; i++)
4673     + lpwm->saved_ctrl[i] = readl(lpwm->regs + i * PWM_SIZE + PWM);
4674     +
4675     + return 0;
4676     +}
4677     +EXPORT_SYMBOL_GPL(pwm_lpss_suspend);
4678     +
4679     +int pwm_lpss_resume(struct device *dev)
4680     +{
4681     + struct pwm_lpss_chip *lpwm = dev_get_drvdata(dev);
4682     + int i;
4683     +
4684     + for (i = 0; i < lpwm->info->npwm; i++)
4685     + writel(lpwm->saved_ctrl[i], lpwm->regs + i * PWM_SIZE + PWM);
4686     +
4687     + return 0;
4688     +}
4689     +EXPORT_SYMBOL_GPL(pwm_lpss_resume);
4690     +
4691     MODULE_DESCRIPTION("PWM driver for Intel LPSS");
4692     MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
4693     MODULE_LICENSE("GPL v2");
4694     diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
4695     index 98306bb02cfe..7a4238ad1fcb 100644
4696     --- a/drivers/pwm/pwm-lpss.h
4697     +++ b/drivers/pwm/pwm-lpss.h
4698     @@ -28,5 +28,7 @@ struct pwm_lpss_boardinfo {
4699     struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
4700     const struct pwm_lpss_boardinfo *info);
4701     int pwm_lpss_remove(struct pwm_lpss_chip *lpwm);
4702     +int pwm_lpss_suspend(struct device *dev);
4703     +int pwm_lpss_resume(struct device *dev);
4704    
4705     #endif /* __PWM_LPSS_H */
4706     diff --git a/drivers/remoteproc/qcom_q6v5_pil.c b/drivers/remoteproc/qcom_q6v5_pil.c
4707     index cbbafdcaaecb..56b14c27e275 100644
4708     --- a/drivers/remoteproc/qcom_q6v5_pil.c
4709     +++ b/drivers/remoteproc/qcom_q6v5_pil.c
4710     @@ -761,13 +761,11 @@ static int q6v5_start(struct rproc *rproc)
4711     }
4712    
4713     /* Assign MBA image access in DDR to q6 */
4714     - xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true,
4715     - qproc->mba_phys,
4716     - qproc->mba_size);
4717     - if (xfermemop_ret) {
4718     + ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true,
4719     + qproc->mba_phys, qproc->mba_size);
4720     + if (ret) {
4721     dev_err(qproc->dev,
4722     - "assigning Q6 access to mba memory failed: %d\n",
4723     - xfermemop_ret);
4724     + "assigning Q6 access to mba memory failed: %d\n", ret);
4725     goto disable_active_clks;
4726     }
4727    
4728     diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c
4729     index 5ce9bf7b897d..f63adcd95eb0 100644
4730     --- a/drivers/rpmsg/qcom_smd.c
4731     +++ b/drivers/rpmsg/qcom_smd.c
4732     @@ -1100,12 +1100,12 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed
4733     void *info;
4734     int ret;
4735    
4736     - channel = devm_kzalloc(&edge->dev, sizeof(*channel), GFP_KERNEL);
4737     + channel = kzalloc(sizeof(*channel), GFP_KERNEL);
4738     if (!channel)
4739     return ERR_PTR(-ENOMEM);
4740    
4741     channel->edge = edge;
4742     - channel->name = devm_kstrdup(&edge->dev, name, GFP_KERNEL);
4743     + channel->name = kstrdup(name, GFP_KERNEL);
4744     if (!channel->name)
4745     return ERR_PTR(-ENOMEM);
4746    
4747     @@ -1156,8 +1156,8 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed
4748     return channel;
4749    
4750     free_name_and_channel:
4751     - devm_kfree(&edge->dev, channel->name);
4752     - devm_kfree(&edge->dev, channel);
4753     + kfree(channel->name);
4754     + kfree(channel);
4755    
4756     return ERR_PTR(ret);
4757     }
4758     @@ -1378,13 +1378,13 @@ static int qcom_smd_parse_edge(struct device *dev,
4759     */
4760     static void qcom_smd_edge_release(struct device *dev)
4761     {
4762     - struct qcom_smd_channel *channel;
4763     + struct qcom_smd_channel *channel, *tmp;
4764     struct qcom_smd_edge *edge = to_smd_edge(dev);
4765    
4766     - list_for_each_entry(channel, &edge->channels, list) {
4767     - SET_RX_CHANNEL_INFO(channel, state, SMD_CHANNEL_CLOSED);
4768     - SET_RX_CHANNEL_INFO(channel, head, 0);
4769     - SET_RX_CHANNEL_INFO(channel, tail, 0);
4770     + list_for_each_entry_safe(channel, tmp, &edge->channels, list) {
4771     + list_del(&channel->list);
4772     + kfree(channel->name);
4773     + kfree(channel);
4774     }
4775    
4776     kfree(edge);
4777     diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
4778     index 2e6fb275acc8..2cd5a7b1a2e3 100644
4779     --- a/drivers/rtc/rtc-sun6i.c
4780     +++ b/drivers/rtc/rtc-sun6i.c
4781     @@ -74,7 +74,7 @@
4782     #define SUN6I_ALARM_CONFIG_WAKEUP BIT(0)
4783    
4784     #define SUN6I_LOSC_OUT_GATING 0x0060
4785     -#define SUN6I_LOSC_OUT_GATING_EN BIT(0)
4786     +#define SUN6I_LOSC_OUT_GATING_EN_OFFSET 0
4787    
4788     /*
4789     * Get date values
4790     @@ -255,7 +255,7 @@ static void __init sun6i_rtc_clk_init(struct device_node *node)
4791     &clkout_name);
4792     rtc->ext_losc = clk_register_gate(NULL, clkout_name, rtc->hw.init->name,
4793     0, rtc->base + SUN6I_LOSC_OUT_GATING,
4794     - SUN6I_LOSC_OUT_GATING_EN, 0,
4795     + SUN6I_LOSC_OUT_GATING_EN_OFFSET, 0,
4796     &rtc->lock);
4797     if (IS_ERR(rtc->ext_losc)) {
4798     pr_crit("Couldn't register the LOSC external gate\n");
4799     diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
4800     index 18c4f933e8b9..b415ba42ca73 100644
4801     --- a/drivers/s390/scsi/zfcp_dbf.c
4802     +++ b/drivers/s390/scsi/zfcp_dbf.c
4803     @@ -664,6 +664,46 @@ void zfcp_dbf_scsi(char *tag, int level, struct scsi_cmnd *sc,
4804     spin_unlock_irqrestore(&dbf->scsi_lock, flags);
4805     }
4806    
4807     +/**
4808     + * zfcp_dbf_scsi_eh() - Trace event for special cases of scsi_eh callbacks.
4809     + * @tag: Identifier for event.
4810     + * @adapter: Pointer to zfcp adapter as context for this event.
4811     + * @scsi_id: SCSI ID/target to indicate scope of task management function (TMF).
4812     + * @ret: Return value of calling function.
4813     + *
4814     + * This SCSI trace variant does not depend on any of:
4815     + * scsi_cmnd, zfcp_fsf_req, scsi_device.
4816     + */
4817     +void zfcp_dbf_scsi_eh(char *tag, struct zfcp_adapter *adapter,
4818     + unsigned int scsi_id, int ret)
4819     +{
4820     + struct zfcp_dbf *dbf = adapter->dbf;
4821     + struct zfcp_dbf_scsi *rec = &dbf->scsi_buf;
4822     + unsigned long flags;
4823     + static int const level = 1;
4824     +
4825     + if (unlikely(!debug_level_enabled(adapter->dbf->scsi, level)))
4826     + return;
4827     +
4828     + spin_lock_irqsave(&dbf->scsi_lock, flags);
4829     + memset(rec, 0, sizeof(*rec));
4830     +
4831     + memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
4832     + rec->id = ZFCP_DBF_SCSI_CMND;
4833     + rec->scsi_result = ret; /* re-use field, int is 4 bytes and fits */
4834     + rec->scsi_retries = ~0;
4835     + rec->scsi_allowed = ~0;
4836     + rec->fcp_rsp_info = ~0;
4837     + rec->scsi_id = scsi_id;
4838     + rec->scsi_lun = (u32)ZFCP_DBF_INVALID_LUN;
4839     + rec->scsi_lun_64_hi = (u32)(ZFCP_DBF_INVALID_LUN >> 32);
4840     + rec->host_scribble = ~0;
4841     + memset(rec->scsi_opcode, 0xff, ZFCP_DBF_SCSI_OPCODE);
4842     +
4843     + debug_event(dbf->scsi, level, rec, sizeof(*rec));
4844     + spin_unlock_irqrestore(&dbf->scsi_lock, flags);
4845     +}
4846     +
4847     static debug_info_t *zfcp_dbf_reg(const char *name, int size, int rec_size)
4848     {
4849     struct debug_info *d;
4850     diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
4851     index 1d91a32db08e..69dfb328dba4 100644
4852     --- a/drivers/s390/scsi/zfcp_erp.c
4853     +++ b/drivers/s390/scsi/zfcp_erp.c
4854     @@ -35,11 +35,28 @@ enum zfcp_erp_steps {
4855     ZFCP_ERP_STEP_LUN_OPENING = 0x2000,
4856     };
4857    
4858     +/**
4859     + * enum zfcp_erp_act_type - Type of ERP action object.
4860     + * @ZFCP_ERP_ACTION_REOPEN_LUN: LUN recovery.
4861     + * @ZFCP_ERP_ACTION_REOPEN_PORT: Port recovery.
4862     + * @ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: Forced port recovery.
4863     + * @ZFCP_ERP_ACTION_REOPEN_ADAPTER: Adapter recovery.
4864     + * @ZFCP_ERP_ACTION_NONE: Eyecatcher pseudo flag to bitwise or-combine with
4865     + * either of the first four enum values.
4866     + * Used to indicate that an ERP action could not be
4867     + * set up despite a detected need for some recovery.
4868     + * @ZFCP_ERP_ACTION_FAILED: Eyecatcher pseudo flag to bitwise or-combine with
4869     + * either of the first four enum values.
4870     + * Used to indicate that ERP not needed because
4871     + * the object has ZFCP_STATUS_COMMON_ERP_FAILED.
4872     + */
4873     enum zfcp_erp_act_type {
4874     ZFCP_ERP_ACTION_REOPEN_LUN = 1,
4875     ZFCP_ERP_ACTION_REOPEN_PORT = 2,
4876     ZFCP_ERP_ACTION_REOPEN_PORT_FORCED = 3,
4877     ZFCP_ERP_ACTION_REOPEN_ADAPTER = 4,
4878     + ZFCP_ERP_ACTION_NONE = 0xc0,
4879     + ZFCP_ERP_ACTION_FAILED = 0xe0,
4880     };
4881    
4882     enum zfcp_erp_act_state {
4883     @@ -126,6 +143,49 @@ static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
4884     }
4885     }
4886    
4887     +static int zfcp_erp_handle_failed(int want, struct zfcp_adapter *adapter,
4888     + struct zfcp_port *port,
4889     + struct scsi_device *sdev)
4890     +{
4891     + int need = want;
4892     + struct zfcp_scsi_dev *zsdev;
4893     +
4894     + switch (want) {
4895     + case ZFCP_ERP_ACTION_REOPEN_LUN:
4896     + zsdev = sdev_to_zfcp(sdev);
4897     + if (atomic_read(&zsdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
4898     + need = 0;
4899     + break;
4900     + case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
4901     + if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
4902     + need = 0;
4903     + break;
4904     + case ZFCP_ERP_ACTION_REOPEN_PORT:
4905     + if (atomic_read(&port->status) &
4906     + ZFCP_STATUS_COMMON_ERP_FAILED) {
4907     + need = 0;
4908     + /* ensure propagation of failed status to new devices */
4909     + zfcp_erp_set_port_status(
4910     + port, ZFCP_STATUS_COMMON_ERP_FAILED);
4911     + }
4912     + break;
4913     + case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
4914     + if (atomic_read(&adapter->status) &
4915     + ZFCP_STATUS_COMMON_ERP_FAILED) {
4916     + need = 0;
4917     + /* ensure propagation of failed status to new devices */
4918     + zfcp_erp_set_adapter_status(
4919     + adapter, ZFCP_STATUS_COMMON_ERP_FAILED);
4920     + }
4921     + break;
4922     + default:
4923     + need = 0;
4924     + break;
4925     + }
4926     +
4927     + return need;
4928     +}
4929     +
4930     static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
4931     struct zfcp_port *port,
4932     struct scsi_device *sdev)
4933     @@ -249,16 +309,27 @@ static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
4934     int retval = 1, need;
4935     struct zfcp_erp_action *act;
4936    
4937     - if (!adapter->erp_thread)
4938     - return -EIO;
4939     + need = zfcp_erp_handle_failed(want, adapter, port, sdev);
4940     + if (!need) {
4941     + need = ZFCP_ERP_ACTION_FAILED; /* marker for trace */
4942     + goto out;
4943     + }
4944     +
4945     + if (!adapter->erp_thread) {
4946     + need = ZFCP_ERP_ACTION_NONE; /* marker for trace */
4947     + retval = -EIO;
4948     + goto out;
4949     + }
4950    
4951     need = zfcp_erp_required_act(want, adapter, port, sdev);
4952     if (!need)
4953     goto out;
4954    
4955     act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
4956     - if (!act)
4957     + if (!act) {
4958     + need |= ZFCP_ERP_ACTION_NONE; /* marker for trace */
4959     goto out;
4960     + }
4961     atomic_or(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
4962     ++adapter->erp_total_count;
4963     list_add_tail(&act->list, &adapter->erp_ready_head);
4964     @@ -269,18 +340,32 @@ static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
4965     return retval;
4966     }
4967    
4968     +void zfcp_erp_port_forced_no_port_dbf(char *id, struct zfcp_adapter *adapter,
4969     + u64 port_name, u32 port_id)
4970     +{
4971     + unsigned long flags;
4972     + static /* don't waste stack */ struct zfcp_port tmpport;
4973     +
4974     + write_lock_irqsave(&adapter->erp_lock, flags);
4975     + /* Stand-in zfcp port with fields just good enough for
4976     + * zfcp_dbf_rec_trig() and zfcp_dbf_set_common().
4977     + * Under lock because tmpport is static.
4978     + */
4979     + atomic_set(&tmpport.status, -1); /* unknown */
4980     + tmpport.wwpn = port_name;
4981     + tmpport.d_id = port_id;
4982     + zfcp_dbf_rec_trig(id, adapter, &tmpport, NULL,
4983     + ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
4984     + ZFCP_ERP_ACTION_NONE);
4985     + write_unlock_irqrestore(&adapter->erp_lock, flags);
4986     +}
4987     +
4988     static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter,
4989     int clear_mask, char *id)
4990     {
4991     zfcp_erp_adapter_block(adapter, clear_mask);
4992     zfcp_scsi_schedule_rports_block(adapter);
4993    
4994     - /* ensure propagation of failed status to new devices */
4995     - if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
4996     - zfcp_erp_set_adapter_status(adapter,
4997     - ZFCP_STATUS_COMMON_ERP_FAILED);
4998     - return -EIO;
4999     - }
5000     return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER,
5001     adapter, NULL, NULL, id, 0);
5002     }
5003     @@ -299,12 +384,8 @@ void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id)
5004     zfcp_scsi_schedule_rports_block(adapter);
5005    
5006     write_lock_irqsave(&adapter->erp_lock, flags);
5007     - if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
5008     - zfcp_erp_set_adapter_status(adapter,
5009     - ZFCP_STATUS_COMMON_ERP_FAILED);
5010     - else
5011     - zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter,
5012     - NULL, NULL, id, 0);
5013     + zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter,
5014     + NULL, NULL, id, 0);
5015     write_unlock_irqrestore(&adapter->erp_lock, flags);
5016     }
5017    
5018     @@ -345,9 +426,6 @@ static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear,
5019     zfcp_erp_port_block(port, clear);
5020     zfcp_scsi_schedule_rport_block(port);
5021    
5022     - if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
5023     - return;
5024     -
5025     zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
5026     port->adapter, port, NULL, id, 0);
5027     }
5028     @@ -373,12 +451,6 @@ static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id)
5029     zfcp_erp_port_block(port, clear);
5030     zfcp_scsi_schedule_rport_block(port);
5031    
5032     - if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
5033     - /* ensure propagation of failed status to new devices */
5034     - zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
5035     - return -EIO;
5036     - }
5037     -
5038     return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT,
5039     port->adapter, port, NULL, id, 0);
5040     }
5041     @@ -418,9 +490,6 @@ static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
5042    
5043     zfcp_erp_lun_block(sdev, clear);
5044    
5045     - if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
5046     - return;
5047     -
5048     zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter,
5049     zfcp_sdev->port, sdev, id, act_status);
5050     }
5051     diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
5052     index e5eed8aac0ce..65d16747c301 100644
5053     --- a/drivers/s390/scsi/zfcp_ext.h
5054     +++ b/drivers/s390/scsi/zfcp_ext.h
5055     @@ -52,10 +52,15 @@ extern void zfcp_dbf_san_res(char *, struct zfcp_fsf_req *);
5056     extern void zfcp_dbf_san_in_els(char *, struct zfcp_fsf_req *);
5057     extern void zfcp_dbf_scsi(char *, int, struct scsi_cmnd *,
5058     struct zfcp_fsf_req *);
5059     +extern void zfcp_dbf_scsi_eh(char *tag, struct zfcp_adapter *adapter,
5060     + unsigned int scsi_id, int ret);
5061    
5062     /* zfcp_erp.c */
5063     extern void zfcp_erp_set_adapter_status(struct zfcp_adapter *, u32);
5064     extern void zfcp_erp_clear_adapter_status(struct zfcp_adapter *, u32);
5065     +extern void zfcp_erp_port_forced_no_port_dbf(char *id,
5066     + struct zfcp_adapter *adapter,
5067     + u64 port_name, u32 port_id);
5068     extern void zfcp_erp_adapter_reopen(struct zfcp_adapter *, int, char *);
5069     extern void zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int, char *);
5070     extern void zfcp_erp_set_port_status(struct zfcp_port *, u32);
5071     diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
5072     index 22f9562f415c..0b6f51424745 100644
5073     --- a/drivers/s390/scsi/zfcp_scsi.c
5074     +++ b/drivers/s390/scsi/zfcp_scsi.c
5075     @@ -181,6 +181,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
5076     if (abrt_req)
5077     break;
5078    
5079     + zfcp_dbf_scsi_abort("abrt_wt", scpnt, NULL);
5080     zfcp_erp_wait(adapter);
5081     ret = fc_block_scsi_eh(scpnt);
5082     if (ret) {
5083     @@ -277,6 +278,7 @@ static int zfcp_task_mgmt_function(struct scsi_cmnd *scpnt, u8 tm_flags)
5084     if (fsf_req)
5085     break;
5086    
5087     + zfcp_dbf_scsi_devreset("wait", scpnt, tm_flags, NULL);
5088     zfcp_erp_wait(adapter);
5089     ret = fc_block_scsi_eh(scpnt);
5090     if (ret) {
5091     @@ -323,15 +325,16 @@ static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
5092     {
5093     struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
5094     struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
5095     - int ret;
5096     + int ret = SUCCESS, fc_ret;
5097    
5098     zfcp_erp_adapter_reopen(adapter, 0, "schrh_1");
5099     zfcp_erp_wait(adapter);
5100     - ret = fc_block_scsi_eh(scpnt);
5101     - if (ret)
5102     - return ret;
5103     + fc_ret = fc_block_scsi_eh(scpnt);
5104     + if (fc_ret)
5105     + ret = fc_ret;
5106    
5107     - return SUCCESS;
5108     + zfcp_dbf_scsi_eh("schrh_r", adapter, ~0, ret);
5109     + return ret;
5110     }
5111    
5112     struct scsi_transport_template *zfcp_scsi_transport_template;
5113     @@ -602,6 +605,11 @@ static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport)
5114     if (port) {
5115     zfcp_erp_port_forced_reopen(port, 0, "sctrpi1");
5116     put_device(&port->dev);
5117     + } else {
5118     + zfcp_erp_port_forced_no_port_dbf(
5119     + "sctrpin", adapter,
5120     + rport->port_name /* zfcp_scsi_rport_register */,
5121     + rport->port_id /* zfcp_scsi_rport_register */);
5122     }
5123     }
5124    
5125     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
5126     index 3a9eca163db8..b92f86acb8bb 100644
5127     --- a/drivers/scsi/hpsa.c
5128     +++ b/drivers/scsi/hpsa.c
5129     @@ -8869,7 +8869,7 @@ static void hpsa_disable_rld_caching(struct ctlr_info *h)
5130     kfree(options);
5131     }
5132    
5133     -static void hpsa_shutdown(struct pci_dev *pdev)
5134     +static void __hpsa_shutdown(struct pci_dev *pdev)
5135     {
5136     struct ctlr_info *h;
5137    
5138     @@ -8884,6 +8884,12 @@ static void hpsa_shutdown(struct pci_dev *pdev)
5139     hpsa_disable_interrupt_mode(h); /* pci_init 2 */
5140     }
5141    
5142     +static void hpsa_shutdown(struct pci_dev *pdev)
5143     +{
5144     + __hpsa_shutdown(pdev);
5145     + pci_disable_device(pdev);
5146     +}
5147     +
5148     static void hpsa_free_device_info(struct ctlr_info *h)
5149     {
5150     int i;
5151     @@ -8927,7 +8933,7 @@ static void hpsa_remove_one(struct pci_dev *pdev)
5152     scsi_remove_host(h->scsi_host); /* init_one 8 */
5153     /* includes hpsa_free_irqs - init_one 4 */
5154     /* includes hpsa_disable_interrupt_mode - pci_init 2 */
5155     - hpsa_shutdown(pdev);
5156     + __hpsa_shutdown(pdev);
5157    
5158     hpsa_free_device_info(h); /* scan */
5159    
5160     diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
5161     index 9e914f9c3ffb..05abe5aaab7f 100644
5162     --- a/drivers/scsi/qla2xxx/qla_gs.c
5163     +++ b/drivers/scsi/qla2xxx/qla_gs.c
5164     @@ -3915,7 +3915,6 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
5165     if (memcmp(rp->port_name, fcport->port_name, WWN_SIZE))
5166     continue;
5167     fcport->scan_state = QLA_FCPORT_FOUND;
5168     - fcport->d_id.b24 = rp->id.b24;
5169     found = true;
5170     /*
5171     * If device was not a fabric device before.
5172     @@ -3923,7 +3922,10 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
5173     if ((fcport->flags & FCF_FABRIC_DEVICE) == 0) {
5174     qla2x00_clear_loop_id(fcport);
5175     fcport->flags |= FCF_FABRIC_DEVICE;
5176     + } else if (fcport->d_id.b24 != rp->id.b24) {
5177     + qlt_schedule_sess_for_deletion(fcport);
5178     }
5179     + fcport->d_id.b24 = rp->id.b24;
5180     break;
5181     }
5182    
5183     diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
5184     index 8f55dd44adae..636960ad029a 100644
5185     --- a/drivers/scsi/qla2xxx/qla_init.c
5186     +++ b/drivers/scsi/qla2xxx/qla_init.c
5187     @@ -5037,7 +5037,8 @@ qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
5188     return;
5189    
5190     if (fcport->fp_speed == PORT_SPEED_UNKNOWN ||
5191     - fcport->fp_speed > ha->link_data_rate)
5192     + fcport->fp_speed > ha->link_data_rate ||
5193     + !ha->flags.gpsc_supported)
5194     return;
5195    
5196     rval = qla2x00_set_idma_speed(vha, fcport->loop_id, fcport->fp_speed,
5197     diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
5198     index a3dc83f9444d..68560a097ae1 100644
5199     --- a/drivers/scsi/qla2xxx/qla_isr.c
5200     +++ b/drivers/scsi/qla2xxx/qla_isr.c
5201     @@ -2494,8 +2494,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
5202     ox_id = le16_to_cpu(sts24->ox_id);
5203     par_sense_len = sizeof(sts24->data);
5204     /* Valid values of the retry delay timer are 0x1-0xffef */
5205     - if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1)
5206     - retry_delay = sts24->retry_delay;
5207     + if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) {
5208     + retry_delay = sts24->retry_delay & 0x3fff;
5209     + ql_dbg(ql_dbg_io, sp->vha, 0x3033,
5210     + "%s: scope=%#x retry_delay=%#x\n", __func__,
5211     + sts24->retry_delay >> 14, retry_delay);
5212     + }
5213     } else {
5214     if (scsi_status & SS_SENSE_LEN_VALID)
5215     sense_len = le16_to_cpu(sts->req_sense_length);
5216     diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
5217     index 025dc2d3f3de..0266c4d07bc9 100644
5218     --- a/drivers/scsi/qla2xxx/qla_target.c
5219     +++ b/drivers/scsi/qla2xxx/qla_target.c
5220     @@ -1230,7 +1230,6 @@ static void qla24xx_chk_fcp_state(struct fc_port *sess)
5221     void qlt_schedule_sess_for_deletion(struct fc_port *sess)
5222     {
5223     struct qla_tgt *tgt = sess->tgt;
5224     - struct qla_hw_data *ha = sess->vha->hw;
5225     unsigned long flags;
5226    
5227     if (sess->disc_state == DSC_DELETE_PEND)
5228     @@ -1247,16 +1246,16 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
5229     return;
5230     }
5231    
5232     - spin_lock_irqsave(&ha->tgt.sess_lock, flags);
5233     if (sess->deleted == QLA_SESS_DELETED)
5234     sess->logout_on_delete = 0;
5235    
5236     + spin_lock_irqsave(&sess->vha->work_lock, flags);
5237     if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) {
5238     - spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
5239     + spin_unlock_irqrestore(&sess->vha->work_lock, flags);
5240     return;
5241     }
5242     sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
5243     - spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
5244     + spin_unlock_irqrestore(&sess->vha->work_lock, flags);
5245    
5246     sess->disc_state = DSC_DELETE_PEND;
5247    
5248     diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
5249     index 656c98e116a9..e086bb63da46 100644
5250     --- a/drivers/scsi/scsi_debug.c
5251     +++ b/drivers/scsi/scsi_debug.c
5252     @@ -5506,9 +5506,9 @@ static void __exit scsi_debug_exit(void)
5253     int k = sdebug_add_host;
5254    
5255     stop_all_queued();
5256     - free_all_queued();
5257     for (; k; k--)
5258     sdebug_remove_adapter();
5259     + free_all_queued();
5260     driver_unregister(&sdebug_driverfs_driver);
5261     bus_unregister(&pseudo_lld_bus);
5262     root_device_unregister(pseudo_primary);
5263     diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
5264     index 53efc386b1ad..df7f30a425c6 100644
5265     --- a/drivers/soc/rockchip/pm_domains.c
5266     +++ b/drivers/soc/rockchip/pm_domains.c
5267     @@ -255,7 +255,7 @@ static void rockchip_do_pmu_set_power_domain(struct rockchip_pm_domain *pd,
5268     return;
5269     else if (pd->info->pwr_w_mask)
5270     regmap_write(pmu->regmap, pmu->info->pwr_offset,
5271     - on ? pd->info->pwr_mask :
5272     + on ? pd->info->pwr_w_mask :
5273     (pd->info->pwr_mask | pd->info->pwr_w_mask));
5274     else
5275     regmap_update_bits(pmu->regmap, pmu->info->pwr_offset,
5276     diff --git a/drivers/thermal/broadcom/bcm2835_thermal.c b/drivers/thermal/broadcom/bcm2835_thermal.c
5277     index a4d6a0e2e993..23ad4f9f2143 100644
5278     --- a/drivers/thermal/broadcom/bcm2835_thermal.c
5279     +++ b/drivers/thermal/broadcom/bcm2835_thermal.c
5280     @@ -213,8 +213,8 @@ static int bcm2835_thermal_probe(struct platform_device *pdev)
5281     rate = clk_get_rate(data->clk);
5282     if ((rate < 1920000) || (rate > 5000000))
5283     dev_warn(&pdev->dev,
5284     - "Clock %pCn running at %pCr Hz is outside of the recommended range: 1.92 to 5MHz\n",
5285     - data->clk, data->clk);
5286     + "Clock %pCn running at %lu Hz is outside of the recommended range: 1.92 to 5MHz\n",
5287     + data->clk, rate);
5288    
5289     /* register of thermal sensor and get info from DT */
5290     tz = thermal_zone_of_sensor_register(&pdev->dev, 0, data,
5291     diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
5292     index a4f82ec665fe..2051a5309851 100644
5293     --- a/drivers/tty/serial/sh-sci.c
5294     +++ b/drivers/tty/serial/sh-sci.c
5295     @@ -2890,16 +2890,15 @@ static void serial_console_write(struct console *co, const char *s,
5296     unsigned long flags;
5297     int locked = 1;
5298    
5299     - local_irq_save(flags);
5300     #if defined(SUPPORT_SYSRQ)
5301     if (port->sysrq)
5302     locked = 0;
5303     else
5304     #endif
5305     if (oops_in_progress)
5306     - locked = spin_trylock(&port->lock);
5307     + locked = spin_trylock_irqsave(&port->lock, flags);
5308     else
5309     - spin_lock(&port->lock);
5310     + spin_lock_irqsave(&port->lock, flags);
5311    
5312     /* first save SCSCR then disable interrupts, keep clock source */
5313     ctrl = serial_port_in(port, SCSCR);
5314     @@ -2919,8 +2918,7 @@ static void serial_console_write(struct console *co, const char *s,
5315     serial_port_out(port, SCSCR, ctrl);
5316    
5317     if (locked)
5318     - spin_unlock(&port->lock);
5319     - local_irq_restore(flags);
5320     + spin_unlock_irqrestore(&port->lock, flags);
5321     }
5322    
5323     static int serial_console_setup(struct console *co, char *options)
5324     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
5325     index aa9968d90a48..e3bf65e213cd 100644
5326     --- a/drivers/usb/core/hub.c
5327     +++ b/drivers/usb/core/hub.c
5328     @@ -4551,7 +4551,9 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
5329     * reset. But only on the first attempt,
5330     * lest we get into a time out/reset loop
5331     */
5332     - if (r == 0 || (r == -ETIMEDOUT && retries == 0))
5333     + if (r == 0 || (r == -ETIMEDOUT &&
5334     + retries == 0 &&
5335     + udev->speed > USB_SPEED_FULL))
5336     break;
5337     }
5338     udev->descriptor.bMaxPacketSize0 =
5339     diff --git a/drivers/video/backlight/as3711_bl.c b/drivers/video/backlight/as3711_bl.c
5340     index 734a9158946b..e55304d5cf07 100644
5341     --- a/drivers/video/backlight/as3711_bl.c
5342     +++ b/drivers/video/backlight/as3711_bl.c
5343     @@ -262,10 +262,10 @@ static int as3711_bl_register(struct platform_device *pdev,
5344     static int as3711_backlight_parse_dt(struct device *dev)
5345     {
5346     struct as3711_bl_pdata *pdata = dev_get_platdata(dev);
5347     - struct device_node *bl =
5348     - of_find_node_by_name(dev->parent->of_node, "backlight"), *fb;
5349     + struct device_node *bl, *fb;
5350     int ret;
5351    
5352     + bl = of_get_child_by_name(dev->parent->of_node, "backlight");
5353     if (!bl) {
5354     dev_dbg(dev, "backlight node not found\n");
5355     return -ENODEV;
5356     @@ -279,7 +279,7 @@ static int as3711_backlight_parse_dt(struct device *dev)
5357     if (pdata->su1_max_uA <= 0)
5358     ret = -EINVAL;
5359     if (ret < 0)
5360     - return ret;
5361     + goto err_put_bl;
5362     }
5363    
5364     fb = of_parse_phandle(bl, "su2-dev", 0);
5365     @@ -292,7 +292,7 @@ static int as3711_backlight_parse_dt(struct device *dev)
5366     if (pdata->su2_max_uA <= 0)
5367     ret = -EINVAL;
5368     if (ret < 0)
5369     - return ret;
5370     + goto err_put_bl;
5371    
5372     if (of_find_property(bl, "su2-feedback-voltage", NULL)) {
5373     pdata->su2_feedback = AS3711_SU2_VOLTAGE;
5374     @@ -314,8 +314,10 @@ static int as3711_backlight_parse_dt(struct device *dev)
5375     pdata->su2_feedback = AS3711_SU2_CURR_AUTO;
5376     count++;
5377     }
5378     - if (count != 1)
5379     - return -EINVAL;
5380     + if (count != 1) {
5381     + ret = -EINVAL;
5382     + goto err_put_bl;
5383     + }
5384    
5385     count = 0;
5386     if (of_find_property(bl, "su2-fbprot-lx-sd4", NULL)) {
5387     @@ -334,8 +336,10 @@ static int as3711_backlight_parse_dt(struct device *dev)
5388     pdata->su2_fbprot = AS3711_SU2_GPIO4;
5389     count++;
5390     }
5391     - if (count != 1)
5392     - return -EINVAL;
5393     + if (count != 1) {
5394     + ret = -EINVAL;
5395     + goto err_put_bl;
5396     + }
5397    
5398     count = 0;
5399     if (of_find_property(bl, "su2-auto-curr1", NULL)) {
5400     @@ -355,11 +359,20 @@ static int as3711_backlight_parse_dt(struct device *dev)
5401     * At least one su2-auto-curr* must be specified iff
5402     * AS3711_SU2_CURR_AUTO is used
5403     */
5404     - if (!count ^ (pdata->su2_feedback != AS3711_SU2_CURR_AUTO))
5405     - return -EINVAL;
5406     + if (!count ^ (pdata->su2_feedback != AS3711_SU2_CURR_AUTO)) {
5407     + ret = -EINVAL;
5408     + goto err_put_bl;
5409     + }
5410     }
5411    
5412     + of_node_put(bl);
5413     +
5414     return 0;
5415     +
5416     +err_put_bl:
5417     + of_node_put(bl);
5418     +
5419     + return ret;
5420     }
5421    
5422     static int as3711_backlight_probe(struct platform_device *pdev)
5423     diff --git a/drivers/video/backlight/max8925_bl.c b/drivers/video/backlight/max8925_bl.c
5424     index 7b738d60ecc2..f3aa6088f1d9 100644
5425     --- a/drivers/video/backlight/max8925_bl.c
5426     +++ b/drivers/video/backlight/max8925_bl.c
5427     @@ -116,7 +116,7 @@ static void max8925_backlight_dt_init(struct platform_device *pdev)
5428     if (!pdata)
5429     return;
5430    
5431     - np = of_find_node_by_name(nproot, "backlight");
5432     + np = of_get_child_by_name(nproot, "backlight");
5433     if (!np) {
5434     dev_err(&pdev->dev, "failed to find backlight node\n");
5435     return;
5436     @@ -125,6 +125,8 @@ static void max8925_backlight_dt_init(struct platform_device *pdev)
5437     if (!of_property_read_u32(np, "maxim,max8925-dual-string", &val))
5438     pdata->dual_string = val;
5439    
5440     + of_node_put(np);
5441     +
5442     pdev->dev.platform_data = pdata;
5443     }
5444    
5445     diff --git a/drivers/video/backlight/tps65217_bl.c b/drivers/video/backlight/tps65217_bl.c
5446     index 380917c86276..762e3feed097 100644
5447     --- a/drivers/video/backlight/tps65217_bl.c
5448     +++ b/drivers/video/backlight/tps65217_bl.c
5449     @@ -184,11 +184,11 @@ static struct tps65217_bl_pdata *
5450     tps65217_bl_parse_dt(struct platform_device *pdev)
5451     {
5452     struct tps65217 *tps = dev_get_drvdata(pdev->dev.parent);
5453     - struct device_node *node = of_node_get(tps->dev->of_node);
5454     + struct device_node *node;
5455     struct tps65217_bl_pdata *pdata, *err;
5456     u32 val;
5457    
5458     - node = of_find_node_by_name(node, "backlight");
5459     + node = of_get_child_by_name(tps->dev->of_node, "backlight");
5460     if (!node)
5461     return ERR_PTR(-ENODEV);
5462    
5463     diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.c
5464     index 73676eb0244a..c592ca513115 100644
5465     --- a/drivers/video/fbdev/uvesafb.c
5466     +++ b/drivers/video/fbdev/uvesafb.c
5467     @@ -1044,7 +1044,8 @@ static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
5468     info->cmap.len || cmap->start < info->cmap.start)
5469     return -EINVAL;
5470    
5471     - entries = kmalloc(sizeof(*entries) * cmap->len, GFP_KERNEL);
5472     + entries = kmalloc_array(cmap->len, sizeof(*entries),
5473     + GFP_KERNEL);
5474     if (!entries)
5475     return -ENOMEM;
5476    
5477     diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c
5478     index 398d22693234..6e2a9619192d 100644
5479     --- a/drivers/virt/vboxguest/vboxguest_linux.c
5480     +++ b/drivers/virt/vboxguest/vboxguest_linux.c
5481     @@ -121,7 +121,9 @@ static long vbg_misc_device_ioctl(struct file *filp, unsigned int req,
5482     if (!buf)
5483     return -ENOMEM;
5484    
5485     - if (copy_from_user(buf, (void *)arg, hdr.size_in)) {
5486     + *((struct vbg_ioctl_hdr *)buf) = hdr;
5487     + if (copy_from_user(buf + sizeof(hdr), (void *)arg + sizeof(hdr),
5488     + hdr.size_in - sizeof(hdr))) {
5489     ret = -EFAULT;
5490     goto out;
5491     }
5492     diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
5493     index 80a778b02f28..caef0e0fd817 100644
5494     --- a/drivers/w1/w1.c
5495     +++ b/drivers/w1/w1.c
5496     @@ -751,7 +751,7 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
5497    
5498     /* slave modules need to be loaded in a context with unlocked mutex */
5499     mutex_unlock(&dev->mutex);
5500     - request_module("w1-family-0x%02x", rn->family);
5501     + request_module("w1-family-0x%02X", rn->family);
5502     mutex_lock(&dev->mutex);
5503    
5504     spin_lock(&w1_flock);
5505     diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
5506     index 762378f1811c..08e4af04d6f2 100644
5507     --- a/drivers/xen/events/events_base.c
5508     +++ b/drivers/xen/events/events_base.c
5509     @@ -628,8 +628,6 @@ static void __unbind_from_irq(unsigned int irq)
5510     xen_irq_info_cleanup(info);
5511     }
5512    
5513     - BUG_ON(info_for_irq(irq)->type == IRQT_UNBOUND);
5514     -
5515     xen_free_irq(irq);
5516     }
5517    
5518     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
5519     index 775a0f2d0b45..b54a55497216 100644
5520     --- a/fs/btrfs/inode.c
5521     +++ b/fs/btrfs/inode.c
5522     @@ -9475,6 +9475,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
5523     u64 new_idx = 0;
5524     u64 root_objectid;
5525     int ret;
5526     + int ret2;
5527     bool root_log_pinned = false;
5528     bool dest_log_pinned = false;
5529    
5530     @@ -9671,7 +9672,8 @@ static int btrfs_rename_exchange(struct inode *old_dir,
5531     dest_log_pinned = false;
5532     }
5533     }
5534     - ret = btrfs_end_transaction(trans);
5535     + ret2 = btrfs_end_transaction(trans);
5536     + ret = ret ? ret : ret2;
5537     out_notrans:
5538     if (new_ino == BTRFS_FIRST_FREE_OBJECTID)
5539     up_read(&fs_info->subvol_sem);
5540     diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
5541     index bf779461df13..2e23b953d304 100644
5542     --- a/fs/f2fs/checkpoint.c
5543     +++ b/fs/f2fs/checkpoint.c
5544     @@ -100,8 +100,10 @@ static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
5545     * readonly and make sure do not write checkpoint with non-uptodate
5546     * meta page.
5547     */
5548     - if (unlikely(!PageUptodate(page)))
5549     + if (unlikely(!PageUptodate(page))) {
5550     + memset(page_address(page), 0, PAGE_SIZE);
5551     f2fs_stop_checkpoint(sbi, false);
5552     + }
5553     out:
5554     return page;
5555     }
5556     diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
5557     index e0d9e8f27ed2..f8ef04c9f69d 100644
5558     --- a/fs/f2fs/inode.c
5559     +++ b/fs/f2fs/inode.c
5560     @@ -320,10 +320,10 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
5561     make_now:
5562     if (ino == F2FS_NODE_INO(sbi)) {
5563     inode->i_mapping->a_ops = &f2fs_node_aops;
5564     - mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_ZERO);
5565     + mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
5566     } else if (ino == F2FS_META_INO(sbi)) {
5567     inode->i_mapping->a_ops = &f2fs_meta_aops;
5568     - mapping_set_gfp_mask(inode->i_mapping, GFP_F2FS_ZERO);
5569     + mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
5570     } else if (S_ISREG(inode->i_mode)) {
5571     inode->i_op = &f2fs_file_inode_operations;
5572     inode->i_fop = &f2fs_file_operations;
5573     diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
5574     index 5854cc4e1d67..be8d1b16b8d1 100644
5575     --- a/fs/f2fs/segment.c
5576     +++ b/fs/f2fs/segment.c
5577     @@ -2020,6 +2020,7 @@ static void write_current_sum_page(struct f2fs_sb_info *sbi,
5578     struct f2fs_summary_block *dst;
5579    
5580     dst = (struct f2fs_summary_block *)page_address(page);
5581     + memset(dst, 0, PAGE_SIZE);
5582    
5583     mutex_lock(&curseg->curseg_mutex);
5584    
5585     @@ -3116,6 +3117,7 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
5586    
5587     page = grab_meta_page(sbi, blkaddr++);
5588     kaddr = (unsigned char *)page_address(page);
5589     + memset(kaddr, 0, PAGE_SIZE);
5590    
5591     /* Step 1: write nat cache */
5592     seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA);
5593     @@ -3140,6 +3142,7 @@ static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr)
5594     if (!page) {
5595     page = grab_meta_page(sbi, blkaddr++);
5596     kaddr = (unsigned char *)page_address(page);
5597     + memset(kaddr, 0, PAGE_SIZE);
5598     written_size = 0;
5599     }
5600     summary = (struct f2fs_summary *)(kaddr + written_size);
5601     diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
5602     index 3325d0769723..492ad0c86fa9 100644
5603     --- a/fs/f2fs/segment.h
5604     +++ b/fs/f2fs/segment.h
5605     @@ -375,6 +375,7 @@ static inline void seg_info_to_sit_page(struct f2fs_sb_info *sbi,
5606     int i;
5607    
5608     raw_sit = (struct f2fs_sit_block *)page_address(page);
5609     + memset(raw_sit, 0, PAGE_SIZE);
5610     for (i = 0; i < end - start; i++) {
5611     rs = &raw_sit->entries[i];
5612     se = get_seg_entry(sbi, start + i);
5613     diff --git a/fs/fuse/control.c b/fs/fuse/control.c
5614     index b9ea99c5b5b3..5be0339dcceb 100644
5615     --- a/fs/fuse/control.c
5616     +++ b/fs/fuse/control.c
5617     @@ -211,10 +211,11 @@ static struct dentry *fuse_ctl_add_dentry(struct dentry *parent,
5618     if (!dentry)
5619     return NULL;
5620    
5621     - fc->ctl_dentry[fc->ctl_ndents++] = dentry;
5622     inode = new_inode(fuse_control_sb);
5623     - if (!inode)
5624     + if (!inode) {
5625     + dput(dentry);
5626     return NULL;
5627     + }
5628    
5629     inode->i_ino = get_next_ino();
5630     inode->i_mode = mode;
5631     @@ -228,6 +229,9 @@ static struct dentry *fuse_ctl_add_dentry(struct dentry *parent,
5632     set_nlink(inode, nlink);
5633     inode->i_private = fc;
5634     d_add(dentry, inode);
5635     +
5636     + fc->ctl_dentry[fc->ctl_ndents++] = dentry;
5637     +
5638     return dentry;
5639     }
5640    
5641     @@ -284,7 +288,10 @@ void fuse_ctl_remove_conn(struct fuse_conn *fc)
5642     for (i = fc->ctl_ndents - 1; i >= 0; i--) {
5643     struct dentry *dentry = fc->ctl_dentry[i];
5644     d_inode(dentry)->i_private = NULL;
5645     - d_drop(dentry);
5646     + if (!i) {
5647     + /* Get rid of submounts: */
5648     + d_invalidate(dentry);
5649     + }
5650     dput(dentry);
5651     }
5652     drop_nlink(d_inode(fuse_control_sb->s_root));
5653     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
5654     index 5d06384c2cae..ee6c9baf8158 100644
5655     --- a/fs/fuse/dev.c
5656     +++ b/fs/fuse/dev.c
5657     @@ -381,8 +381,7 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
5658     if (!fc->blocked && waitqueue_active(&fc->blocked_waitq))
5659     wake_up(&fc->blocked_waitq);
5660    
5661     - if (fc->num_background == fc->congestion_threshold &&
5662     - fc->connected && fc->sb) {
5663     + if (fc->num_background == fc->congestion_threshold && fc->sb) {
5664     clear_bdi_congested(fc->sb->s_bdi, BLK_RW_SYNC);
5665     clear_bdi_congested(fc->sb->s_bdi, BLK_RW_ASYNC);
5666     }
5667     diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
5668     index 24967382a7b1..7a980b4462d9 100644
5669     --- a/fs/fuse/dir.c
5670     +++ b/fs/fuse/dir.c
5671     @@ -1629,8 +1629,19 @@ int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
5672     return err;
5673    
5674     if (attr->ia_valid & ATTR_OPEN) {
5675     - if (fc->atomic_o_trunc)
5676     + /* This is coming from open(..., ... | O_TRUNC); */
5677     + WARN_ON(!(attr->ia_valid & ATTR_SIZE));
5678     + WARN_ON(attr->ia_size != 0);
5679     + if (fc->atomic_o_trunc) {
5680     + /*
5681     + * No need to send request to userspace, since actual
5682     + * truncation has already been done by OPEN. But still
5683     + * need to truncate page cache.
5684     + */
5685     + i_size_write(inode, 0);
5686     + truncate_pagecache(inode, 0);
5687     return 0;
5688     + }
5689     file = NULL;
5690     }
5691    
5692     diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
5693     index ef309958e060..9b37cf8142b5 100644
5694     --- a/fs/fuse/inode.c
5695     +++ b/fs/fuse/inode.c
5696     @@ -1179,6 +1179,7 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
5697     fuse_dev_free(fud);
5698     err_put_conn:
5699     fuse_conn_put(fc);
5700     + sb->s_fs_info = NULL;
5701     err_fput:
5702     fput(file);
5703     err:
5704     diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
5705     index a50d7813e3ea..180b4b616725 100644
5706     --- a/fs/nfs/callback_proc.c
5707     +++ b/fs/nfs/callback_proc.c
5708     @@ -420,11 +420,8 @@ validate_seqid(const struct nfs4_slot_table *tbl, const struct nfs4_slot *slot,
5709     return htonl(NFS4ERR_SEQ_FALSE_RETRY);
5710     }
5711    
5712     - /* Wraparound */
5713     - if (unlikely(slot->seq_nr == 0xFFFFFFFFU)) {
5714     - if (args->csa_sequenceid == 1)
5715     - return htonl(NFS4_OK);
5716     - } else if (likely(args->csa_sequenceid == slot->seq_nr + 1))
5717     + /* Note: wraparound relies on seq_nr being of type u32 */
5718     + if (likely(args->csa_sequenceid == slot->seq_nr + 1))
5719     return htonl(NFS4_OK);
5720    
5721     /* Misordered request */
5722     diff --git a/fs/nfs/nfs4idmap.c b/fs/nfs/nfs4idmap.c
5723     index 22dc30a679a0..b6f9d84ba19b 100644
5724     --- a/fs/nfs/nfs4idmap.c
5725     +++ b/fs/nfs/nfs4idmap.c
5726     @@ -343,7 +343,7 @@ static ssize_t nfs_idmap_lookup_name(__u32 id, const char *type, char *buf,
5727     int id_len;
5728     ssize_t ret;
5729    
5730     - id_len = snprintf(id_str, sizeof(id_str), "%u", id);
5731     + id_len = nfs_map_numeric_to_string(id, id_str, sizeof(id_str));
5732     ret = nfs_idmap_get_key(id_str, id_len, type, buf, buflen, idmap);
5733     if (ret < 0)
5734     return -EINVAL;
5735     @@ -627,7 +627,8 @@ static int nfs_idmap_read_and_verify_message(struct idmap_msg *im,
5736     if (strcmp(upcall->im_name, im->im_name) != 0)
5737     break;
5738     /* Note: here we store the NUL terminator too */
5739     - len = sprintf(id_str, "%d", im->im_id) + 1;
5740     + len = 1 + nfs_map_numeric_to_string(im->im_id, id_str,
5741     + sizeof(id_str));
5742     ret = nfs_idmap_instantiate(key, authkey, id_str, len);
5743     break;
5744     case IDMAP_CONV_IDTONAME:
5745     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
5746     index b71757e85066..409acdda70dd 100644
5747     --- a/fs/nfs/nfs4proc.c
5748     +++ b/fs/nfs/nfs4proc.c
5749     @@ -751,7 +751,7 @@ static int nfs41_sequence_process(struct rpc_task *task,
5750     * The slot id we used was probably retired. Try again
5751     * using a different slot id.
5752     */
5753     - if (slot->seq_nr < slot->table->target_highest_slotid)
5754     + if (slot->slot_nr < slot->table->target_highest_slotid)
5755     goto session_recover;
5756     goto retry_nowait;
5757     case -NFS4ERR_SEQ_MISORDERED:
5758     diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
5759     index 1d048dd95464..cfe535c286c3 100644
5760     --- a/fs/nfsd/nfs4xdr.c
5761     +++ b/fs/nfsd/nfs4xdr.c
5762     @@ -3651,7 +3651,8 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
5763     nfserr = nfserr_resource;
5764     goto err_no_verf;
5765     }
5766     - maxcount = min_t(u32, readdir->rd_maxcount, INT_MAX);
5767     + maxcount = svc_max_payload(resp->rqstp);
5768     + maxcount = min_t(u32, readdir->rd_maxcount, maxcount);
5769     /*
5770     * Note the rfc defines rd_maxcount as the size of the
5771     * READDIR4resok structure, which includes the verifier above
5772     @@ -3665,7 +3666,7 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
5773    
5774     /* RFC 3530 14.2.24 allows us to ignore dircount when it's 0: */
5775     if (!readdir->rd_dircount)
5776     - readdir->rd_dircount = INT_MAX;
5777     + readdir->rd_dircount = svc_max_payload(resp->rqstp);
5778    
5779     readdir->xdr = xdr;
5780     readdir->rd_maxcount = maxcount;
5781     diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c
5782     index 04c4ec6483e5..8ae1cd8611cc 100644
5783     --- a/fs/ubifs/journal.c
5784     +++ b/fs/ubifs/journal.c
5785     @@ -1283,10 +1283,11 @@ static int truncate_data_node(const struct ubifs_info *c, const struct inode *in
5786     int *new_len)
5787     {
5788     void *buf;
5789     - int err, dlen, compr_type, out_len, old_dlen;
5790     + int err, compr_type;
5791     + u32 dlen, out_len, old_dlen;
5792    
5793     out_len = le32_to_cpu(dn->size);
5794     - buf = kmalloc(out_len * WORST_COMPR_FACTOR, GFP_NOFS);
5795     + buf = kmalloc_array(out_len, WORST_COMPR_FACTOR, GFP_NOFS);
5796     if (!buf)
5797     return -ENOMEM;
5798    
5799     diff --git a/fs/udf/directory.c b/fs/udf/directory.c
5800     index 0a98a2369738..3835f983cc99 100644
5801     --- a/fs/udf/directory.c
5802     +++ b/fs/udf/directory.c
5803     @@ -152,6 +152,9 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
5804     sizeof(struct fileIdentDesc));
5805     }
5806     }
5807     + /* Got last entry outside of dir size - fs is corrupted! */
5808     + if (*nf_pos > dir->i_size)
5809     + return NULL;
5810     return fi;
5811     }
5812    
5813     diff --git a/include/dt-bindings/clock/aspeed-clock.h b/include/dt-bindings/clock/aspeed-clock.h
5814     index d3558d897a4d..8d69b9134bef 100644
5815     --- a/include/dt-bindings/clock/aspeed-clock.h
5816     +++ b/include/dt-bindings/clock/aspeed-clock.h
5817     @@ -45,7 +45,7 @@
5818     #define ASPEED_RESET_JTAG_MASTER 3
5819     #define ASPEED_RESET_MIC 4
5820     #define ASPEED_RESET_PWM 5
5821     -#define ASPEED_RESET_PCIVGA 6
5822     +#define ASPEED_RESET_PECI 6
5823     #define ASPEED_RESET_I2C 7
5824     #define ASPEED_RESET_AHB 8
5825    
5826     diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
5827     index 5c4eee043191..7d047465dfc2 100644
5828     --- a/include/linux/blkdev.h
5829     +++ b/include/linux/blkdev.h
5830     @@ -1124,8 +1124,8 @@ static inline unsigned int blk_max_size_offset(struct request_queue *q,
5831     if (!q->limits.chunk_sectors)
5832     return q->limits.max_sectors;
5833    
5834     - return q->limits.chunk_sectors -
5835     - (offset & (q->limits.chunk_sectors - 1));
5836     + return min(q->limits.max_sectors, (unsigned int)(q->limits.chunk_sectors -
5837     + (offset & (q->limits.chunk_sectors - 1))));
5838     }
5839    
5840     static inline unsigned int blk_rq_get_max_sectors(struct request *rq,
5841     diff --git a/include/linux/compiler.h b/include/linux/compiler.h
5842     index ab4711c63601..42506e4d1f53 100644
5843     --- a/include/linux/compiler.h
5844     +++ b/include/linux/compiler.h
5845     @@ -21,7 +21,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
5846     #define unlikely_notrace(x) __builtin_expect(!!(x), 0)
5847    
5848     #define __branch_check__(x, expect, is_constant) ({ \
5849     - int ______r; \
5850     + long ______r; \
5851     static struct ftrace_likely_data \
5852     __attribute__((__aligned__(4))) \
5853     __attribute__((section("_ftrace_annotated_branch"))) \
5854     diff --git a/include/linux/memory.h b/include/linux/memory.h
5855     index 31ca3e28b0eb..a6ddefc60517 100644
5856     --- a/include/linux/memory.h
5857     +++ b/include/linux/memory.h
5858     @@ -38,6 +38,7 @@ struct memory_block {
5859    
5860     int arch_get_memory_phys_device(unsigned long start_pfn);
5861     unsigned long memory_block_size_bytes(void);
5862     +int set_memory_block_size_order(unsigned int order);
5863    
5864     /* These states are exposed to userspace as text strings in sysfs */
5865     #define MEM_ONLINE (1<<0) /* exposed to userspace */
5866     diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
5867     index 3773e26c08c1..bb93a6c693e3 100644
5868     --- a/include/linux/slub_def.h
5869     +++ b/include/linux/slub_def.h
5870     @@ -156,8 +156,12 @@ struct kmem_cache {
5871    
5872     #ifdef CONFIG_SYSFS
5873     #define SLAB_SUPPORTS_SYSFS
5874     +void sysfs_slab_unlink(struct kmem_cache *);
5875     void sysfs_slab_release(struct kmem_cache *);
5876     #else
5877     +static inline void sysfs_slab_unlink(struct kmem_cache *s)
5878     +{
5879     +}
5880     static inline void sysfs_slab_release(struct kmem_cache *s)
5881     {
5882     }
5883     diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
5884     index 9fc8a825aa28..ba015efb5312 100644
5885     --- a/include/rdma/ib_verbs.h
5886     +++ b/include/rdma/ib_verbs.h
5887     @@ -3310,11 +3310,14 @@ int ib_process_cq_direct(struct ib_cq *cq, int budget);
5888     *
5889     * Users can examine the cq structure to determine the actual CQ size.
5890     */
5891     -struct ib_cq *ib_create_cq(struct ib_device *device,
5892     - ib_comp_handler comp_handler,
5893     - void (*event_handler)(struct ib_event *, void *),
5894     - void *cq_context,
5895     - const struct ib_cq_init_attr *cq_attr);
5896     +struct ib_cq *__ib_create_cq(struct ib_device *device,
5897     + ib_comp_handler comp_handler,
5898     + void (*event_handler)(struct ib_event *, void *),
5899     + void *cq_context,
5900     + const struct ib_cq_init_attr *cq_attr,
5901     + const char *caller);
5902     +#define ib_create_cq(device, cmp_hndlr, evt_hndlr, cq_ctxt, cq_attr) \
5903     + __ib_create_cq((device), (cmp_hndlr), (evt_hndlr), (cq_ctxt), (cq_attr), KBUILD_MODNAME)
5904    
5905     /**
5906     * ib_resize_cq - Modifies the capacity of the CQ.
5907     @@ -3734,6 +3737,20 @@ static inline int ib_check_mr_access(int flags)
5908     return 0;
5909     }
5910    
5911     +static inline bool ib_access_writable(int access_flags)
5912     +{
5913     + /*
5914     + * We have writable memory backing the MR if any of the following
5915     + * access flags are set. "Local write" and "remote write" obviously
5916     + * require write access. "Remote atomic" can do things like fetch and
5917     + * add, which will modify memory, and "MW bind" can change permissions
5918     + * by binding a window.
5919     + */
5920     + return access_flags &
5921     + (IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_WRITE |
5922     + IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND);
5923     +}
5924     +
5925     /**
5926     * ib_check_mr_status: lightweight check of MR status.
5927     * This routine may provide status checks on a selected
5928     diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
5929     index 3f4c187e435d..eec495e68823 100644
5930     --- a/include/rdma/rdma_vt.h
5931     +++ b/include/rdma/rdma_vt.h
5932     @@ -402,7 +402,7 @@ struct rvt_dev_info {
5933     spinlock_t pending_lock; /* protect pending mmap list */
5934    
5935     /* CQ */
5936     - struct kthread_worker *worker; /* per device cq worker */
5937     + struct kthread_worker __rcu *worker; /* per device cq worker */
5938     u32 n_cqs_allocated; /* number of CQs allocated for device */
5939     spinlock_t n_cqs_lock; /* protect count of in use cqs */
5940    
5941     diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
5942     index bc1e507be9ff..776308d2fa9e 100644
5943     --- a/kernel/locking/rwsem.c
5944     +++ b/kernel/locking/rwsem.c
5945     @@ -181,6 +181,7 @@ void down_read_non_owner(struct rw_semaphore *sem)
5946     might_sleep();
5947    
5948     __down_read(sem);
5949     + rwsem_set_reader_owned(sem);
5950     }
5951    
5952     EXPORT_SYMBOL(down_read_non_owner);
5953     diff --git a/kernel/printk/printk_safe.c b/kernel/printk/printk_safe.c
5954     index 3e3c2004bb23..449d67edfa4b 100644
5955     --- a/kernel/printk/printk_safe.c
5956     +++ b/kernel/printk/printk_safe.c
5957     @@ -82,6 +82,7 @@ static __printf(2, 0) int printk_safe_log_store(struct printk_safe_seq_buf *s,
5958     {
5959     int add;
5960     size_t len;
5961     + va_list ap;
5962    
5963     again:
5964     len = atomic_read(&s->len);
5965     @@ -100,7 +101,9 @@ static __printf(2, 0) int printk_safe_log_store(struct printk_safe_seq_buf *s,
5966     if (!len)
5967     smp_rmb();
5968    
5969     - add = vscnprintf(s->buffer + len, sizeof(s->buffer) - len, fmt, args);
5970     + va_copy(ap, args);
5971     + add = vscnprintf(s->buffer + len, sizeof(s->buffer) - len, fmt, ap);
5972     + va_end(ap);
5973     if (!add)
5974     return 0;
5975    
5976     diff --git a/kernel/softirq.c b/kernel/softirq.c
5977     index 177de3640c78..8a040bcaa033 100644
5978     --- a/kernel/softirq.c
5979     +++ b/kernel/softirq.c
5980     @@ -139,9 +139,13 @@ static void __local_bh_enable(unsigned int cnt)
5981     {
5982     lockdep_assert_irqs_disabled();
5983    
5984     + if (preempt_count() == cnt)
5985     + trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip());
5986     +
5987     if (softirq_count() == (cnt & SOFTIRQ_MASK))
5988     trace_softirqs_on(_RET_IP_);
5989     - preempt_count_sub(cnt);
5990     +
5991     + __preempt_count_sub(cnt);
5992     }
5993    
5994     /*
5995     diff --git a/kernel/time/time.c b/kernel/time/time.c
5996     index 3044d48ebe56..e8127f4e9e66 100644
5997     --- a/kernel/time/time.c
5998     +++ b/kernel/time/time.c
5999     @@ -28,6 +28,7 @@
6000     */
6001    
6002     #include <linux/export.h>
6003     +#include <linux/kernel.h>
6004     #include <linux/timex.h>
6005     #include <linux/capability.h>
6006     #include <linux/timekeeper_internal.h>
6007     @@ -314,9 +315,10 @@ unsigned int jiffies_to_msecs(const unsigned long j)
6008     return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC);
6009     #else
6010     # if BITS_PER_LONG == 32
6011     - return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32;
6012     + return (HZ_TO_MSEC_MUL32 * j + (1ULL << HZ_TO_MSEC_SHR32) - 1) >>
6013     + HZ_TO_MSEC_SHR32;
6014     # else
6015     - return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN;
6016     + return DIV_ROUND_UP(j * HZ_TO_MSEC_NUM, HZ_TO_MSEC_DEN);
6017     # endif
6018     #endif
6019     }
6020     diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
6021     index 7d306b74230f..c44f74daefbf 100644
6022     --- a/kernel/trace/trace_events_filter.c
6023     +++ b/kernel/trace/trace_events_filter.c
6024     @@ -78,7 +78,8 @@ static const char * ops[] = { OPS };
6025     C(TOO_MANY_PREDS, "Too many terms in predicate expression"), \
6026     C(INVALID_FILTER, "Meaningless filter expression"), \
6027     C(IP_FIELD_ONLY, "Only 'ip' field is supported for function trace"), \
6028     - C(INVALID_VALUE, "Invalid value (did you forget quotes)?"),
6029     + C(INVALID_VALUE, "Invalid value (did you forget quotes)?"), \
6030     + C(NO_FILTER, "No filter found"),
6031    
6032     #undef C
6033     #define C(a, b) FILT_ERR_##a
6034     @@ -550,6 +551,13 @@ predicate_parse(const char *str, int nr_parens, int nr_preds,
6035     goto out_free;
6036     }
6037    
6038     + if (!N) {
6039     + /* No program? */
6040     + ret = -EINVAL;
6041     + parse_error(pe, FILT_ERR_NO_FILTER, ptr - str);
6042     + goto out_free;
6043     + }
6044     +
6045     prog[N].pred = NULL; /* #13 */
6046     prog[N].target = 1; /* TRUE */
6047     prog[N+1].pred = NULL;
6048     diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan
6049     index 3d35d062970d..c253c1b46c6b 100644
6050     --- a/lib/Kconfig.kasan
6051     +++ b/lib/Kconfig.kasan
6052     @@ -6,6 +6,7 @@ if HAVE_ARCH_KASAN
6053     config KASAN
6054     bool "KASan: runtime memory debugger"
6055     depends on SLUB || (SLAB && !DEBUG_SLAB)
6056     + select SLUB_DEBUG if SLUB
6057     select CONSTRUCTORS
6058     select STACKDEPOT
6059     help
6060     diff --git a/lib/vsprintf.c b/lib/vsprintf.c
6061     index 23920c5ff728..91320e5bfd5b 100644
6062     --- a/lib/vsprintf.c
6063     +++ b/lib/vsprintf.c
6064     @@ -1456,9 +1456,6 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
6065     return string(buf, end, NULL, spec);
6066    
6067     switch (fmt[1]) {
6068     - case 'r':
6069     - return number(buf, end, clk_get_rate(clk), spec);
6070     -
6071     case 'n':
6072     default:
6073     #ifdef CONFIG_COMMON_CLK
6074     diff --git a/mm/gup.c b/mm/gup.c
6075     index 541904a7c60f..3d8472d48a0b 100644
6076     --- a/mm/gup.c
6077     +++ b/mm/gup.c
6078     @@ -1459,32 +1459,48 @@ static int __gup_device_huge(unsigned long pfn, unsigned long addr,
6079     return 1;
6080     }
6081    
6082     -static int __gup_device_huge_pmd(pmd_t pmd, unsigned long addr,
6083     +static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
6084     unsigned long end, struct page **pages, int *nr)
6085     {
6086     unsigned long fault_pfn;
6087     + int nr_start = *nr;
6088     +
6089     + fault_pfn = pmd_pfn(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
6090     + if (!__gup_device_huge(fault_pfn, addr, end, pages, nr))
6091     + return 0;
6092    
6093     - fault_pfn = pmd_pfn(pmd) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
6094     - return __gup_device_huge(fault_pfn, addr, end, pages, nr);
6095     + if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) {
6096     + undo_dev_pagemap(nr, nr_start, pages);
6097     + return 0;
6098     + }
6099     + return 1;
6100     }
6101    
6102     -static int __gup_device_huge_pud(pud_t pud, unsigned long addr,
6103     +static int __gup_device_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr,
6104     unsigned long end, struct page **pages, int *nr)
6105     {
6106     unsigned long fault_pfn;
6107     + int nr_start = *nr;
6108     +
6109     + fault_pfn = pud_pfn(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
6110     + if (!__gup_device_huge(fault_pfn, addr, end, pages, nr))
6111     + return 0;
6112    
6113     - fault_pfn = pud_pfn(pud) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
6114     - return __gup_device_huge(fault_pfn, addr, end, pages, nr);
6115     + if (unlikely(pud_val(orig) != pud_val(*pudp))) {
6116     + undo_dev_pagemap(nr, nr_start, pages);
6117     + return 0;
6118     + }
6119     + return 1;
6120     }
6121     #else
6122     -static int __gup_device_huge_pmd(pmd_t pmd, unsigned long addr,
6123     +static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
6124     unsigned long end, struct page **pages, int *nr)
6125     {
6126     BUILD_BUG();
6127     return 0;
6128     }
6129    
6130     -static int __gup_device_huge_pud(pud_t pud, unsigned long addr,
6131     +static int __gup_device_huge_pud(pud_t pud, pud_t *pudp, unsigned long addr,
6132     unsigned long end, struct page **pages, int *nr)
6133     {
6134     BUILD_BUG();
6135     @@ -1502,7 +1518,7 @@ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
6136     return 0;
6137    
6138     if (pmd_devmap(orig))
6139     - return __gup_device_huge_pmd(orig, addr, end, pages, nr);
6140     + return __gup_device_huge_pmd(orig, pmdp, addr, end, pages, nr);
6141    
6142     refs = 0;
6143     page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
6144     @@ -1540,7 +1556,7 @@ static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr,
6145     return 0;
6146    
6147     if (pud_devmap(orig))
6148     - return __gup_device_huge_pud(orig, addr, end, pages, nr);
6149     + return __gup_device_huge_pud(orig, pudp, addr, end, pages, nr);
6150    
6151     refs = 0;
6152     page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
6153     diff --git a/mm/ksm.c b/mm/ksm.c
6154     index e3cbf9a92f3c..e6a9640580fc 100644
6155     --- a/mm/ksm.c
6156     +++ b/mm/ksm.c
6157     @@ -199,6 +199,8 @@ struct rmap_item {
6158     #define SEQNR_MASK 0x0ff /* low bits of unstable tree seqnr */
6159     #define UNSTABLE_FLAG 0x100 /* is a node of the unstable tree */
6160     #define STABLE_FLAG 0x200 /* is listed from the stable tree */
6161     +#define KSM_FLAG_MASK (SEQNR_MASK|UNSTABLE_FLAG|STABLE_FLAG)
6162     + /* to mask all the flags */
6163    
6164     /* The stable and unstable tree heads */
6165     static struct rb_root one_stable_tree[1] = { RB_ROOT };
6166     @@ -2570,10 +2572,15 @@ void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc)
6167     anon_vma_lock_read(anon_vma);
6168     anon_vma_interval_tree_foreach(vmac, &anon_vma->rb_root,
6169     0, ULONG_MAX) {
6170     + unsigned long addr;
6171     +
6172     cond_resched();
6173     vma = vmac->vma;
6174     - if (rmap_item->address < vma->vm_start ||
6175     - rmap_item->address >= vma->vm_end)
6176     +
6177     + /* Ignore the stable/unstable/sqnr flags */
6178     + addr = rmap_item->address & ~KSM_FLAG_MASK;
6179     +
6180     + if (addr < vma->vm_start || addr >= vma->vm_end)
6181     continue;
6182     /*
6183     * Initially we examine only the vma which covers this
6184     @@ -2587,8 +2594,7 @@ void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc)
6185     if (rwc->invalid_vma && rwc->invalid_vma(vma, rwc->arg))
6186     continue;
6187    
6188     - if (!rwc->rmap_one(page, vma,
6189     - rmap_item->address, rwc->arg)) {
6190     + if (!rwc->rmap_one(page, vma, addr, rwc->arg)) {
6191     anon_vma_unlock_read(anon_vma);
6192     return;
6193     }
6194     diff --git a/mm/slab_common.c b/mm/slab_common.c
6195     index 98dcdc352062..65408ced18f1 100644
6196     --- a/mm/slab_common.c
6197     +++ b/mm/slab_common.c
6198     @@ -566,10 +566,14 @@ static int shutdown_cache(struct kmem_cache *s)
6199     list_del(&s->list);
6200    
6201     if (s->flags & SLAB_TYPESAFE_BY_RCU) {
6202     +#ifdef SLAB_SUPPORTS_SYSFS
6203     + sysfs_slab_unlink(s);
6204     +#endif
6205     list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
6206     schedule_work(&slab_caches_to_rcu_destroy_work);
6207     } else {
6208     #ifdef SLAB_SUPPORTS_SYSFS
6209     + sysfs_slab_unlink(s);
6210     sysfs_slab_release(s);
6211     #else
6212     slab_kmem_cache_release(s);
6213     diff --git a/mm/slub.c b/mm/slub.c
6214     index 44aa7847324a..613c8dc2f409 100644
6215     --- a/mm/slub.c
6216     +++ b/mm/slub.c
6217     @@ -5714,7 +5714,6 @@ static void sysfs_slab_remove_workfn(struct work_struct *work)
6218     kset_unregister(s->memcg_kset);
6219     #endif
6220     kobject_uevent(&s->kobj, KOBJ_REMOVE);
6221     - kobject_del(&s->kobj);
6222     out:
6223     kobject_put(&s->kobj);
6224     }
6225     @@ -5799,6 +5798,12 @@ static void sysfs_slab_remove(struct kmem_cache *s)
6226     schedule_work(&s->kobj_remove_work);
6227     }
6228    
6229     +void sysfs_slab_unlink(struct kmem_cache *s)
6230     +{
6231     + if (slab_state >= FULL)
6232     + kobject_del(&s->kobj);
6233     +}
6234     +
6235     void sysfs_slab_release(struct kmem_cache *s)
6236     {
6237     if (slab_state >= FULL)
6238     diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
6239     index e8adad33d0bb..8e531ac9bc87 100644
6240     --- a/net/sunrpc/xprtrdma/rpc_rdma.c
6241     +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
6242     @@ -230,7 +230,7 @@ rpcrdma_convert_iovs(struct rpcrdma_xprt *r_xprt, struct xdr_buf *xdrbuf,
6243     */
6244     *ppages = alloc_page(GFP_ATOMIC);
6245     if (!*ppages)
6246     - return -EAGAIN;
6247     + return -ENOBUFS;
6248     }
6249     seg->mr_page = *ppages;
6250     seg->mr_offset = (char *)page_base;
6251     diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
6252     index 245160373dab..cbf227d12c2b 100644
6253     --- a/security/selinux/selinuxfs.c
6254     +++ b/security/selinux/selinuxfs.c
6255     @@ -435,22 +435,16 @@ static int sel_release_policy(struct inode *inode, struct file *filp)
6256     static ssize_t sel_read_policy(struct file *filp, char __user *buf,
6257     size_t count, loff_t *ppos)
6258     {
6259     - struct selinux_fs_info *fsi = file_inode(filp)->i_sb->s_fs_info;
6260     struct policy_load_memory *plm = filp->private_data;
6261     int ret;
6262    
6263     - mutex_lock(&fsi->mutex);
6264     -
6265     ret = avc_has_perm(&selinux_state,
6266     current_sid(), SECINITSID_SECURITY,
6267     SECCLASS_SECURITY, SECURITY__READ_POLICY, NULL);
6268     if (ret)
6269     - goto out;
6270     + return ret;
6271    
6272     - ret = simple_read_from_buffer(buf, count, ppos, plm->data, plm->len);
6273     -out:
6274     - mutex_unlock(&fsi->mutex);
6275     - return ret;
6276     + return simple_read_from_buffer(buf, count, ppos, plm->data, plm->len);
6277     }
6278    
6279     static int sel_mmap_policy_fault(struct vm_fault *vmf)
6280     @@ -1182,25 +1176,29 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf,
6281     ret = -EINVAL;
6282     if (index >= fsi->bool_num || strcmp(name,
6283     fsi->bool_pending_names[index]))
6284     - goto out;
6285     + goto out_unlock;
6286    
6287     ret = -ENOMEM;
6288     page = (char *)get_zeroed_page(GFP_KERNEL);
6289     if (!page)
6290     - goto out;
6291     + goto out_unlock;
6292    
6293     cur_enforcing = security_get_bool_value(fsi->state, index);
6294     if (cur_enforcing < 0) {
6295     ret = cur_enforcing;
6296     - goto out;
6297     + goto out_unlock;
6298     }
6299     length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing,
6300     fsi->bool_pending_values[index]);
6301     - ret = simple_read_from_buffer(buf, count, ppos, page, length);
6302     -out:
6303     mutex_unlock(&fsi->mutex);
6304     + ret = simple_read_from_buffer(buf, count, ppos, page, length);
6305     +out_free:
6306     free_page((unsigned long)page);
6307     return ret;
6308     +
6309     +out_unlock:
6310     + mutex_unlock(&fsi->mutex);
6311     + goto out_free;
6312     }
6313    
6314     static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
6315     @@ -1213,6 +1211,17 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
6316     unsigned index = file_inode(filep)->i_ino & SEL_INO_MASK;
6317     const char *name = filep->f_path.dentry->d_name.name;
6318    
6319     + if (count >= PAGE_SIZE)
6320     + return -ENOMEM;
6321     +
6322     + /* No partial writes. */
6323     + if (*ppos != 0)
6324     + return -EINVAL;
6325     +
6326     + page = memdup_user_nul(buf, count);
6327     + if (IS_ERR(page))
6328     + return PTR_ERR(page);
6329     +
6330     mutex_lock(&fsi->mutex);
6331    
6332     length = avc_has_perm(&selinux_state,
6333     @@ -1227,22 +1236,6 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
6334     fsi->bool_pending_names[index]))
6335     goto out;
6336    
6337     - length = -ENOMEM;
6338     - if (count >= PAGE_SIZE)
6339     - goto out;
6340     -
6341     - /* No partial writes. */
6342     - length = -EINVAL;
6343     - if (*ppos != 0)
6344     - goto out;
6345     -
6346     - page = memdup_user_nul(buf, count);
6347     - if (IS_ERR(page)) {
6348     - length = PTR_ERR(page);
6349     - page = NULL;
6350     - goto out;
6351     - }
6352     -
6353     length = -EINVAL;
6354     if (sscanf(page, "%d", &new_value) != 1)
6355     goto out;
6356     @@ -1274,6 +1267,17 @@ static ssize_t sel_commit_bools_write(struct file *filep,
6357     ssize_t length;
6358     int new_value;
6359    
6360     + if (count >= PAGE_SIZE)
6361     + return -ENOMEM;
6362     +
6363     + /* No partial writes. */
6364     + if (*ppos != 0)
6365     + return -EINVAL;
6366     +
6367     + page = memdup_user_nul(buf, count);
6368     + if (IS_ERR(page))
6369     + return PTR_ERR(page);
6370     +
6371     mutex_lock(&fsi->mutex);
6372    
6373     length = avc_has_perm(&selinux_state,
6374     @@ -1283,22 +1287,6 @@ static ssize_t sel_commit_bools_write(struct file *filep,
6375     if (length)
6376     goto out;
6377    
6378     - length = -ENOMEM;
6379     - if (count >= PAGE_SIZE)
6380     - goto out;
6381     -
6382     - /* No partial writes. */
6383     - length = -EINVAL;
6384     - if (*ppos != 0)
6385     - goto out;
6386     -
6387     - page = memdup_user_nul(buf, count);
6388     - if (IS_ERR(page)) {
6389     - length = PTR_ERR(page);
6390     - page = NULL;
6391     - goto out;
6392     - }
6393     -
6394     length = -EINVAL;
6395     if (sscanf(page, "%d", &new_value) != 1)
6396     goto out;
6397     diff --git a/sound/core/timer.c b/sound/core/timer.c
6398     index 0ddcae495838..e9e73edb4bd8 100644
6399     --- a/sound/core/timer.c
6400     +++ b/sound/core/timer.c
6401     @@ -1517,7 +1517,7 @@ static int snd_timer_user_next_device(struct snd_timer_id __user *_tid)
6402     } else {
6403     if (id.subdevice < 0)
6404     id.subdevice = 0;
6405     - else
6406     + else if (id.subdevice < INT_MAX)
6407     id.subdevice++;
6408     }
6409     }
6410     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
6411     index 5bc3a7468e17..4d26bb010ddf 100644
6412     --- a/sound/pci/hda/hda_codec.c
6413     +++ b/sound/pci/hda/hda_codec.c
6414     @@ -2887,8 +2887,9 @@ static int hda_codec_runtime_suspend(struct device *dev)
6415     list_for_each_entry(pcm, &codec->pcm_list_head, list)
6416     snd_pcm_suspend_all(pcm->pcm);
6417     state = hda_call_codec_suspend(codec);
6418     - if (codec_has_clkstop(codec) && codec_has_epss(codec) &&
6419     - (state & AC_PWRST_CLK_STOP_OK))
6420     + if (codec->link_down_at_suspend ||
6421     + (codec_has_clkstop(codec) && codec_has_epss(codec) &&
6422     + (state & AC_PWRST_CLK_STOP_OK)))
6423     snd_hdac_codec_link_down(&codec->core);
6424     snd_hdac_link_power(&codec->core, false);
6425     return 0;
6426     diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
6427     index 681c360f29f9..a8b1b31f161c 100644
6428     --- a/sound/pci/hda/hda_codec.h
6429     +++ b/sound/pci/hda/hda_codec.h
6430     @@ -258,6 +258,7 @@ struct hda_codec {
6431     unsigned int power_save_node:1; /* advanced PM for each widget */
6432     unsigned int auto_runtime_pm:1; /* enable automatic codec runtime pm */
6433     unsigned int force_pin_prefix:1; /* Add location prefix */
6434     + unsigned int link_down_at_suspend:1; /* link down at runtime suspend */
6435     #ifdef CONFIG_PM
6436     unsigned long power_on_acct;
6437     unsigned long power_off_acct;
6438     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
6439     index 7d7eb1354eee..ed39a77f9253 100644
6440     --- a/sound/pci/hda/patch_hdmi.c
6441     +++ b/sound/pci/hda/patch_hdmi.c
6442     @@ -3741,6 +3741,11 @@ static int patch_atihdmi(struct hda_codec *codec)
6443    
6444     spec->chmap.channels_max = max(spec->chmap.channels_max, 8u);
6445    
6446     + /* AMD GPUs have neither EPSS nor CLKSTOP bits, hence preventing
6447     + * the link-down as is. Tell the core to allow it.
6448     + */
6449     + codec->link_down_at_suspend = 1;
6450     +
6451     return 0;
6452     }
6453    
6454     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
6455     index 06c2c80a045b..cb9a977bf188 100644
6456     --- a/sound/pci/hda/patch_realtek.c
6457     +++ b/sound/pci/hda/patch_realtek.c
6458     @@ -2542,6 +2542,7 @@ static const struct snd_pci_quirk alc262_fixup_tbl[] = {
6459     SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),
6460     SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),
6461     SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),
6462     + SND_PCI_QUIRK(0x1734, 0x1141, "FSC ESPRIMO U9210", ALC262_FIXUP_FSC_H270),
6463     SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),
6464     SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),
6465     SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),
6466     @@ -4985,7 +4986,6 @@ static void alc_fixup_tpt440_dock(struct hda_codec *codec,
6467     struct alc_spec *spec = codec->spec;
6468    
6469     if (action == HDA_FIXUP_ACT_PRE_PROBE) {
6470     - spec->shutup = alc_no_shutup; /* reduce click noise */
6471     spec->reboot_notify = alc_d3_at_reboot; /* reduce noise */
6472     spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
6473     codec->power_save_node = 0; /* avoid click noises */
6474     @@ -5384,6 +5384,13 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
6475     /* for hda_fixup_thinkpad_acpi() */
6476     #include "thinkpad_helper.c"
6477    
6478     +static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
6479     + const struct hda_fixup *fix, int action)
6480     +{
6481     + alc_fixup_no_shutup(codec, fix, action); /* reduce click noise */
6482     + hda_fixup_thinkpad_acpi(codec, fix, action);
6483     +}
6484     +
6485     /* for dell wmi mic mute led */
6486     #include "dell_wmi_helper.c"
6487    
6488     @@ -5927,7 +5934,7 @@ static const struct hda_fixup alc269_fixups[] = {
6489     },
6490     [ALC269_FIXUP_THINKPAD_ACPI] = {
6491     .type = HDA_FIXUP_FUNC,
6492     - .v.func = hda_fixup_thinkpad_acpi,
6493     + .v.func = alc_fixup_thinkpad_acpi,
6494     .chained = true,
6495     .chain_id = ALC269_FIXUP_SKU_IGNORE,
6496     },
6497     @@ -6577,8 +6584,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6498     SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6499     SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
6500     SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6501     + SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6502     SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6503     - SND_PCI_QUIRK(0x17aa, 0x3138, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6504     + SND_PCI_QUIRK(0x17aa, 0x3136, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6505     SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
6506     SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
6507     SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
6508     @@ -6756,6 +6764,12 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
6509     {0x14, 0x90170110},
6510     {0x19, 0x02a11030},
6511     {0x21, 0x02211020}),
6512     + SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
6513     + {0x14, 0x90170110},
6514     + {0x19, 0x02a11030},
6515     + {0x1a, 0x02a11040},
6516     + {0x1b, 0x01014020},
6517     + {0x21, 0x0221101f}),
6518     SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
6519     {0x12, 0x90a60140},
6520     {0x14, 0x90170110},
6521     diff --git a/sound/soc/cirrus/edb93xx.c b/sound/soc/cirrus/edb93xx.c
6522     index c53bd6f2c2d7..3d011abaa266 100644
6523     --- a/sound/soc/cirrus/edb93xx.c
6524     +++ b/sound/soc/cirrus/edb93xx.c
6525     @@ -67,7 +67,7 @@ static struct snd_soc_dai_link edb93xx_dai = {
6526     .cpu_dai_name = "ep93xx-i2s",
6527     .codec_name = "spi0.0",
6528     .codec_dai_name = "cs4271-hifi",
6529     - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_IF |
6530     + .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
6531     SND_SOC_DAIFMT_CBS_CFS,
6532     .ops = &edb93xx_ops,
6533     };
6534     diff --git a/sound/soc/cirrus/ep93xx-i2s.c b/sound/soc/cirrus/ep93xx-i2s.c
6535     index 934f8aefdd90..0dc3852c4621 100644
6536     --- a/sound/soc/cirrus/ep93xx-i2s.c
6537     +++ b/sound/soc/cirrus/ep93xx-i2s.c
6538     @@ -51,7 +51,9 @@
6539     #define EP93XX_I2S_WRDLEN_24 (1 << 0)
6540     #define EP93XX_I2S_WRDLEN_32 (2 << 0)
6541    
6542     -#define EP93XX_I2S_LINCTRLDATA_R_JUST (1 << 2) /* Right justify */
6543     +#define EP93XX_I2S_RXLINCTRLDATA_R_JUST BIT(1) /* Right justify */
6544     +
6545     +#define EP93XX_I2S_TXLINCTRLDATA_R_JUST BIT(2) /* Right justify */
6546    
6547     #define EP93XX_I2S_CLKCFG_LRS (1 << 0) /* lrclk polarity */
6548     #define EP93XX_I2S_CLKCFG_CKP (1 << 1) /* Bit clock polarity */
6549     @@ -170,25 +172,25 @@ static int ep93xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
6550     unsigned int fmt)
6551     {
6552     struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai);
6553     - unsigned int clk_cfg, lin_ctrl;
6554     + unsigned int clk_cfg;
6555     + unsigned int txlin_ctrl = 0;
6556     + unsigned int rxlin_ctrl = 0;
6557    
6558     clk_cfg = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXCLKCFG);
6559     - lin_ctrl = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXLINCTRLDATA);
6560    
6561     switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
6562     case SND_SOC_DAIFMT_I2S:
6563     clk_cfg |= EP93XX_I2S_CLKCFG_REL;
6564     - lin_ctrl &= ~EP93XX_I2S_LINCTRLDATA_R_JUST;
6565     break;
6566    
6567     case SND_SOC_DAIFMT_LEFT_J:
6568     clk_cfg &= ~EP93XX_I2S_CLKCFG_REL;
6569     - lin_ctrl &= ~EP93XX_I2S_LINCTRLDATA_R_JUST;
6570     break;
6571    
6572     case SND_SOC_DAIFMT_RIGHT_J:
6573     clk_cfg &= ~EP93XX_I2S_CLKCFG_REL;
6574     - lin_ctrl |= EP93XX_I2S_LINCTRLDATA_R_JUST;
6575     + rxlin_ctrl |= EP93XX_I2S_RXLINCTRLDATA_R_JUST;
6576     + txlin_ctrl |= EP93XX_I2S_TXLINCTRLDATA_R_JUST;
6577     break;
6578    
6579     default:
6580     @@ -213,32 +215,32 @@ static int ep93xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
6581     switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
6582     case SND_SOC_DAIFMT_NB_NF:
6583     /* Negative bit clock, lrclk low on left word */
6584     - clk_cfg &= ~(EP93XX_I2S_CLKCFG_CKP | EP93XX_I2S_CLKCFG_REL);
6585     + clk_cfg &= ~(EP93XX_I2S_CLKCFG_CKP | EP93XX_I2S_CLKCFG_LRS);
6586     break;
6587    
6588     case SND_SOC_DAIFMT_NB_IF:
6589     /* Negative bit clock, lrclk low on right word */
6590     clk_cfg &= ~EP93XX_I2S_CLKCFG_CKP;
6591     - clk_cfg |= EP93XX_I2S_CLKCFG_REL;
6592     + clk_cfg |= EP93XX_I2S_CLKCFG_LRS;
6593     break;
6594    
6595     case SND_SOC_DAIFMT_IB_NF:
6596     /* Positive bit clock, lrclk low on left word */
6597     clk_cfg |= EP93XX_I2S_CLKCFG_CKP;
6598     - clk_cfg &= ~EP93XX_I2S_CLKCFG_REL;
6599     + clk_cfg &= ~EP93XX_I2S_CLKCFG_LRS;
6600     break;
6601    
6602     case SND_SOC_DAIFMT_IB_IF:
6603     /* Positive bit clock, lrclk low on right word */
6604     - clk_cfg |= EP93XX_I2S_CLKCFG_CKP | EP93XX_I2S_CLKCFG_REL;
6605     + clk_cfg |= EP93XX_I2S_CLKCFG_CKP | EP93XX_I2S_CLKCFG_LRS;
6606     break;
6607     }
6608    
6609     /* Write new register values */
6610     ep93xx_i2s_write_reg(info, EP93XX_I2S_RXCLKCFG, clk_cfg);
6611     ep93xx_i2s_write_reg(info, EP93XX_I2S_TXCLKCFG, clk_cfg);
6612     - ep93xx_i2s_write_reg(info, EP93XX_I2S_RXLINCTRLDATA, lin_ctrl);
6613     - ep93xx_i2s_write_reg(info, EP93XX_I2S_TXLINCTRLDATA, lin_ctrl);
6614     + ep93xx_i2s_write_reg(info, EP93XX_I2S_RXLINCTRLDATA, rxlin_ctrl);
6615     + ep93xx_i2s_write_reg(info, EP93XX_I2S_TXLINCTRLDATA, txlin_ctrl);
6616     return 0;
6617     }
6618    
6619     diff --git a/sound/soc/cirrus/snappercl15.c b/sound/soc/cirrus/snappercl15.c
6620     index 2334ec19e7eb..11ff7b2672b2 100644
6621     --- a/sound/soc/cirrus/snappercl15.c
6622     +++ b/sound/soc/cirrus/snappercl15.c
6623     @@ -72,7 +72,7 @@ static struct snd_soc_dai_link snappercl15_dai = {
6624     .codec_dai_name = "tlv320aic23-hifi",
6625     .codec_name = "tlv320aic23-codec.0-001a",
6626     .platform_name = "ep93xx-i2s",
6627     - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_IF |
6628     + .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
6629     SND_SOC_DAIFMT_CBS_CFS,
6630     .ops = &snappercl15_ops,
6631     };
6632     diff --git a/sound/soc/codecs/cs35l35.c b/sound/soc/codecs/cs35l35.c
6633     index a4a2cb171bdf..bd6226bde45f 100644
6634     --- a/sound/soc/codecs/cs35l35.c
6635     +++ b/sound/soc/codecs/cs35l35.c
6636     @@ -1105,6 +1105,7 @@ static struct regmap_config cs35l35_regmap = {
6637     .readable_reg = cs35l35_readable_register,
6638     .precious_reg = cs35l35_precious_register,
6639     .cache_type = REGCACHE_RBTREE,
6640     + .use_single_rw = true,
6641     };
6642    
6643     static irqreturn_t cs35l35_irq(int irq, void *data)
6644     diff --git a/sound/soc/mediatek/common/mtk-afe-platform-driver.c b/sound/soc/mediatek/common/mtk-afe-platform-driver.c
6645     index 53215b52e4f2..f8a06709f76d 100644
6646     --- a/sound/soc/mediatek/common/mtk-afe-platform-driver.c
6647     +++ b/sound/soc/mediatek/common/mtk-afe-platform-driver.c
6648     @@ -64,14 +64,14 @@ static const struct snd_pcm_ops mtk_afe_pcm_ops = {
6649     static int mtk_afe_pcm_new(struct snd_soc_pcm_runtime *rtd)
6650     {
6651     size_t size;
6652     - struct snd_card *card = rtd->card->snd_card;
6653     struct snd_pcm *pcm = rtd->pcm;
6654     struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
6655     struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
6656    
6657     size = afe->mtk_afe_hardware->buffer_bytes_max;
6658     return snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
6659     - card->dev, size, size);
6660     + rtd->platform->dev,
6661     + size, size);
6662     }
6663    
6664     static void mtk_afe_pcm_free(struct snd_pcm *pcm)
6665     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
6666     index 2d9709104ec5..b2b501ef57d7 100644
6667     --- a/sound/soc/soc-dapm.c
6668     +++ b/sound/soc/soc-dapm.c
6669     @@ -433,6 +433,8 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
6670     static void dapm_kcontrol_free(struct snd_kcontrol *kctl)
6671     {
6672     struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl);
6673     +
6674     + list_del(&data->paths);
6675     kfree(data->wlist);
6676     kfree(data);
6677     }
6678     diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
6679     index 36ef45b2e89d..09c4a4a7b5dd 100644
6680     --- a/tools/perf/util/dso.c
6681     +++ b/tools/perf/util/dso.c
6682     @@ -354,6 +354,8 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,
6683     if ((strncmp(name, "[kernel.kallsyms]", 17) == 0) ||
6684     (strncmp(name, "[guest.kernel.kallsyms", 22) == 0) ||
6685     (strncmp(name, "[vdso]", 6) == 0) ||
6686     + (strncmp(name, "[vdso32]", 8) == 0) ||
6687     + (strncmp(name, "[vdsox32]", 9) == 0) ||
6688     (strncmp(name, "[vsyscall]", 10) == 0)) {
6689     m->kmod = false;
6690    
6691     diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
6692     index f9157aed1289..d404bed7003a 100644
6693     --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
6694     +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
6695     @@ -113,6 +113,7 @@ struct intel_pt_decoder {
6696     bool have_cyc;
6697     bool fixup_last_mtc;
6698     bool have_last_ip;
6699     + enum intel_pt_param_flags flags;
6700     uint64_t pos;
6701     uint64_t last_ip;
6702     uint64_t ip;
6703     @@ -226,6 +227,8 @@ struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params)
6704     decoder->return_compression = params->return_compression;
6705     decoder->branch_enable = params->branch_enable;
6706    
6707     + decoder->flags = params->flags;
6708     +
6709     decoder->period = params->period;
6710     decoder->period_type = params->period_type;
6711    
6712     @@ -1097,6 +1100,15 @@ static bool intel_pt_fup_event(struct intel_pt_decoder *decoder)
6713     return ret;
6714     }
6715    
6716     +static inline bool intel_pt_fup_with_nlip(struct intel_pt_decoder *decoder,
6717     + struct intel_pt_insn *intel_pt_insn,
6718     + uint64_t ip, int err)
6719     +{
6720     + return decoder->flags & INTEL_PT_FUP_WITH_NLIP && !err &&
6721     + intel_pt_insn->branch == INTEL_PT_BR_INDIRECT &&
6722     + ip == decoder->ip + intel_pt_insn->length;
6723     +}
6724     +
6725     static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
6726     {
6727     struct intel_pt_insn intel_pt_insn;
6728     @@ -1109,10 +1121,11 @@ static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
6729     err = intel_pt_walk_insn(decoder, &intel_pt_insn, ip);
6730     if (err == INTEL_PT_RETURN)
6731     return 0;
6732     - if (err == -EAGAIN) {
6733     + if (err == -EAGAIN ||
6734     + intel_pt_fup_with_nlip(decoder, &intel_pt_insn, ip, err)) {
6735     if (intel_pt_fup_event(decoder))
6736     return 0;
6737     - return err;
6738     + return -EAGAIN;
6739     }
6740     decoder->set_fup_tx_flags = false;
6741     if (err)
6742     @@ -1376,7 +1389,6 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
6743     {
6744     intel_pt_log("ERROR: Buffer overflow\n");
6745     intel_pt_clear_tx_flags(decoder);
6746     - decoder->have_tma = false;
6747     decoder->cbr = 0;
6748     decoder->timestamp_insn_cnt = 0;
6749     decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
6750     @@ -1604,7 +1616,6 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
6751     case INTEL_PT_PSB:
6752     case INTEL_PT_TSC:
6753     case INTEL_PT_TMA:
6754     - case INTEL_PT_CBR:
6755     case INTEL_PT_MODE_TSX:
6756     case INTEL_PT_BAD:
6757     case INTEL_PT_PSBEND:
6758     @@ -1620,6 +1631,10 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
6759     decoder->pkt_step = 0;
6760     return -ENOENT;
6761    
6762     + case INTEL_PT_CBR:
6763     + intel_pt_calc_cbr(decoder);
6764     + break;
6765     +
6766     case INTEL_PT_OVF:
6767     return intel_pt_overflow(decoder);
6768    
6769     diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
6770     index fc1752d50019..51c18d67f4ca 100644
6771     --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
6772     +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
6773     @@ -60,6 +60,14 @@ enum {
6774     INTEL_PT_ERR_MAX,
6775     };
6776    
6777     +enum intel_pt_param_flags {
6778     + /*
6779     + * FUP packet can contain next linear instruction pointer instead of
6780     + * current linear instruction pointer.
6781     + */
6782     + INTEL_PT_FUP_WITH_NLIP = 1 << 0,
6783     +};
6784     +
6785     struct intel_pt_state {
6786     enum intel_pt_sample_type type;
6787     int err;
6788     @@ -106,6 +114,7 @@ struct intel_pt_params {
6789     unsigned int mtc_period;
6790     uint32_t tsc_ctc_ratio_n;
6791     uint32_t tsc_ctc_ratio_d;
6792     + enum intel_pt_param_flags flags;
6793     };
6794    
6795     struct intel_pt_decoder;
6796     diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
6797     index ba4c9dd18643..d426761a549d 100644
6798     --- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
6799     +++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
6800     @@ -366,7 +366,7 @@ static int intel_pt_get_cyc(unsigned int byte, const unsigned char *buf,
6801     if (len < offs)
6802     return INTEL_PT_NEED_MORE_BYTES;
6803     byte = buf[offs++];
6804     - payload |= (byte >> 1) << shift;
6805     + payload |= ((uint64_t)byte >> 1) << shift;
6806     }
6807    
6808     packet->type = INTEL_PT_CYC;
6809     diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
6810     index 0effaff57020..38b25e826a45 100644
6811     --- a/tools/perf/util/intel-pt.c
6812     +++ b/tools/perf/util/intel-pt.c
6813     @@ -751,6 +751,7 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt,
6814     unsigned int queue_nr)
6815     {
6816     struct intel_pt_params params = { .get_trace = 0, };
6817     + struct perf_env *env = pt->machine->env;
6818     struct intel_pt_queue *ptq;
6819    
6820     ptq = zalloc(sizeof(struct intel_pt_queue));
6821     @@ -832,6 +833,9 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt,
6822     }
6823     }
6824    
6825     + if (env->cpuid && !strncmp(env->cpuid, "GenuineIntel,6,92,", 18))
6826     + params.flags |= INTEL_PT_FUP_WITH_NLIP;
6827     +
6828     ptq->decoder = intel_pt_decoder_new(&params);
6829     if (!ptq->decoder)
6830     goto out_free;
6831     @@ -1523,6 +1527,7 @@ static int intel_pt_sample(struct intel_pt_queue *ptq)
6832    
6833     if (intel_pt_is_switch_ip(ptq, state->to_ip)) {
6834     switch (ptq->switch_state) {
6835     + case INTEL_PT_SS_NOT_TRACING:
6836     case INTEL_PT_SS_UNKNOWN:
6837     case INTEL_PT_SS_EXPECTING_SWITCH_IP:
6838     err = intel_pt_next_tid(pt, ptq);
6839     diff --git a/tools/testing/selftests/ftrace/test.d/functions b/tools/testing/selftests/ftrace/test.d/functions
6840     index 2a4f16fc9819..8393b1c06027 100644
6841     --- a/tools/testing/selftests/ftrace/test.d/functions
6842     +++ b/tools/testing/selftests/ftrace/test.d/functions
6843     @@ -15,14 +15,29 @@ reset_tracer() { # reset the current tracer
6844     echo nop > current_tracer
6845     }
6846    
6847     -reset_trigger() { # reset all current setting triggers
6848     - grep -v ^# events/*/*/trigger |
6849     +reset_trigger_file() {
6850     + # remove action triggers first
6851     + grep -H ':on[^:]*(' $@ |
6852     + while read line; do
6853     + cmd=`echo $line | cut -f2- -d: | cut -f1 -d" "`
6854     + file=`echo $line | cut -f1 -d:`
6855     + echo "!$cmd" >> $file
6856     + done
6857     + grep -Hv ^# $@ |
6858     while read line; do
6859     cmd=`echo $line | cut -f2- -d: | cut -f1 -d" "`
6860     - echo "!$cmd" > `echo $line | cut -f1 -d:`
6861     + file=`echo $line | cut -f1 -d:`
6862     + echo "!$cmd" > $file
6863     done
6864     }
6865    
6866     +reset_trigger() { # reset all current setting triggers
6867     + if [ -d events/synthetic ]; then
6868     + reset_trigger_file events/synthetic/*/trigger
6869     + fi
6870     + reset_trigger_file events/*/*/trigger
6871     +}
6872     +
6873     reset_events_filter() { # reset all current setting filters
6874     grep -v ^none events/*/*/filter |
6875     while read line; do