Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0148-5.4.49-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3529 - (hide annotations) (download)
Thu Jun 25 11:15:00 2020 UTC (3 years, 10 months ago) by niro
File size: 389391 byte(s)
-linux-5.4.49
1 niro 3529 diff --git a/Makefile b/Makefile
2     index fee4101b5d22..72230ad23299 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 5
8     PATCHLEVEL = 4
9     -SUBLEVEL = 48
10     +SUBLEVEL = 49
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/arm/boot/dts/r8a7743.dtsi b/arch/arm/boot/dts/r8a7743.dtsi
15     index de981d629bdd..fdd267819319 100644
16     --- a/arch/arm/boot/dts/r8a7743.dtsi
17     +++ b/arch/arm/boot/dts/r8a7743.dtsi
18     @@ -338,7 +338,7 @@
19     #thermal-sensor-cells = <0>;
20     };
21    
22     - ipmmu_sy0: mmu@e6280000 {
23     + ipmmu_sy0: iommu@e6280000 {
24     compatible = "renesas,ipmmu-r8a7743",
25     "renesas,ipmmu-vmsa";
26     reg = <0 0xe6280000 0 0x1000>;
27     @@ -348,7 +348,7 @@
28     status = "disabled";
29     };
30    
31     - ipmmu_sy1: mmu@e6290000 {
32     + ipmmu_sy1: iommu@e6290000 {
33     compatible = "renesas,ipmmu-r8a7743",
34     "renesas,ipmmu-vmsa";
35     reg = <0 0xe6290000 0 0x1000>;
36     @@ -357,7 +357,7 @@
37     status = "disabled";
38     };
39    
40     - ipmmu_ds: mmu@e6740000 {
41     + ipmmu_ds: iommu@e6740000 {
42     compatible = "renesas,ipmmu-r8a7743",
43     "renesas,ipmmu-vmsa";
44     reg = <0 0xe6740000 0 0x1000>;
45     @@ -367,7 +367,7 @@
46     status = "disabled";
47     };
48    
49     - ipmmu_mp: mmu@ec680000 {
50     + ipmmu_mp: iommu@ec680000 {
51     compatible = "renesas,ipmmu-r8a7743",
52     "renesas,ipmmu-vmsa";
53     reg = <0 0xec680000 0 0x1000>;
54     @@ -376,7 +376,7 @@
55     status = "disabled";
56     };
57    
58     - ipmmu_mx: mmu@fe951000 {
59     + ipmmu_mx: iommu@fe951000 {
60     compatible = "renesas,ipmmu-r8a7743",
61     "renesas,ipmmu-vmsa";
62     reg = <0 0xfe951000 0 0x1000>;
63     @@ -386,7 +386,7 @@
64     status = "disabled";
65     };
66    
67     - ipmmu_gp: mmu@e62a0000 {
68     + ipmmu_gp: iommu@e62a0000 {
69     compatible = "renesas,ipmmu-r8a7743",
70     "renesas,ipmmu-vmsa";
71     reg = <0 0xe62a0000 0 0x1000>;
72     diff --git a/arch/arm/boot/dts/r8a7744.dtsi b/arch/arm/boot/dts/r8a7744.dtsi
73     index fa74a262107b..8264481bf876 100644
74     --- a/arch/arm/boot/dts/r8a7744.dtsi
75     +++ b/arch/arm/boot/dts/r8a7744.dtsi
76     @@ -338,7 +338,7 @@
77     #thermal-sensor-cells = <0>;
78     };
79    
80     - ipmmu_sy0: mmu@e6280000 {
81     + ipmmu_sy0: iommu@e6280000 {
82     compatible = "renesas,ipmmu-r8a7744",
83     "renesas,ipmmu-vmsa";
84     reg = <0 0xe6280000 0 0x1000>;
85     @@ -348,7 +348,7 @@
86     status = "disabled";
87     };
88    
89     - ipmmu_sy1: mmu@e6290000 {
90     + ipmmu_sy1: iommu@e6290000 {
91     compatible = "renesas,ipmmu-r8a7744",
92     "renesas,ipmmu-vmsa";
93     reg = <0 0xe6290000 0 0x1000>;
94     @@ -357,7 +357,7 @@
95     status = "disabled";
96     };
97    
98     - ipmmu_ds: mmu@e6740000 {
99     + ipmmu_ds: iommu@e6740000 {
100     compatible = "renesas,ipmmu-r8a7744",
101     "renesas,ipmmu-vmsa";
102     reg = <0 0xe6740000 0 0x1000>;
103     @@ -367,7 +367,7 @@
104     status = "disabled";
105     };
106    
107     - ipmmu_mp: mmu@ec680000 {
108     + ipmmu_mp: iommu@ec680000 {
109     compatible = "renesas,ipmmu-r8a7744",
110     "renesas,ipmmu-vmsa";
111     reg = <0 0xec680000 0 0x1000>;
112     @@ -376,7 +376,7 @@
113     status = "disabled";
114     };
115    
116     - ipmmu_mx: mmu@fe951000 {
117     + ipmmu_mx: iommu@fe951000 {
118     compatible = "renesas,ipmmu-r8a7744",
119     "renesas,ipmmu-vmsa";
120     reg = <0 0xfe951000 0 0x1000>;
121     @@ -386,7 +386,7 @@
122     status = "disabled";
123     };
124    
125     - ipmmu_gp: mmu@e62a0000 {
126     + ipmmu_gp: iommu@e62a0000 {
127     compatible = "renesas,ipmmu-r8a7744",
128     "renesas,ipmmu-vmsa";
129     reg = <0 0xe62a0000 0 0x1000>;
130     diff --git a/arch/arm/boot/dts/r8a7745.dtsi b/arch/arm/boot/dts/r8a7745.dtsi
131     index c53f7ff20695..c306713f2ab7 100644
132     --- a/arch/arm/boot/dts/r8a7745.dtsi
133     +++ b/arch/arm/boot/dts/r8a7745.dtsi
134     @@ -302,7 +302,7 @@
135     resets = <&cpg 407>;
136     };
137    
138     - ipmmu_sy0: mmu@e6280000 {
139     + ipmmu_sy0: iommu@e6280000 {
140     compatible = "renesas,ipmmu-r8a7745",
141     "renesas,ipmmu-vmsa";
142     reg = <0 0xe6280000 0 0x1000>;
143     @@ -312,7 +312,7 @@
144     status = "disabled";
145     };
146    
147     - ipmmu_sy1: mmu@e6290000 {
148     + ipmmu_sy1: iommu@e6290000 {
149     compatible = "renesas,ipmmu-r8a7745",
150     "renesas,ipmmu-vmsa";
151     reg = <0 0xe6290000 0 0x1000>;
152     @@ -321,7 +321,7 @@
153     status = "disabled";
154     };
155    
156     - ipmmu_ds: mmu@e6740000 {
157     + ipmmu_ds: iommu@e6740000 {
158     compatible = "renesas,ipmmu-r8a7745",
159     "renesas,ipmmu-vmsa";
160     reg = <0 0xe6740000 0 0x1000>;
161     @@ -331,7 +331,7 @@
162     status = "disabled";
163     };
164    
165     - ipmmu_mp: mmu@ec680000 {
166     + ipmmu_mp: iommu@ec680000 {
167     compatible = "renesas,ipmmu-r8a7745",
168     "renesas,ipmmu-vmsa";
169     reg = <0 0xec680000 0 0x1000>;
170     @@ -340,7 +340,7 @@
171     status = "disabled";
172     };
173    
174     - ipmmu_mx: mmu@fe951000 {
175     + ipmmu_mx: iommu@fe951000 {
176     compatible = "renesas,ipmmu-r8a7745",
177     "renesas,ipmmu-vmsa";
178     reg = <0 0xfe951000 0 0x1000>;
179     @@ -350,7 +350,7 @@
180     status = "disabled";
181     };
182    
183     - ipmmu_gp: mmu@e62a0000 {
184     + ipmmu_gp: iommu@e62a0000 {
185     compatible = "renesas,ipmmu-r8a7745",
186     "renesas,ipmmu-vmsa";
187     reg = <0 0xe62a0000 0 0x1000>;
188     diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
189     index 5a2747758f67..e3ba00a22eeb 100644
190     --- a/arch/arm/boot/dts/r8a7790.dtsi
191     +++ b/arch/arm/boot/dts/r8a7790.dtsi
192     @@ -427,7 +427,7 @@
193     #thermal-sensor-cells = <0>;
194     };
195    
196     - ipmmu_sy0: mmu@e6280000 {
197     + ipmmu_sy0: iommu@e6280000 {
198     compatible = "renesas,ipmmu-r8a7790",
199     "renesas,ipmmu-vmsa";
200     reg = <0 0xe6280000 0 0x1000>;
201     @@ -437,7 +437,7 @@
202     status = "disabled";
203     };
204    
205     - ipmmu_sy1: mmu@e6290000 {
206     + ipmmu_sy1: iommu@e6290000 {
207     compatible = "renesas,ipmmu-r8a7790",
208     "renesas,ipmmu-vmsa";
209     reg = <0 0xe6290000 0 0x1000>;
210     @@ -446,7 +446,7 @@
211     status = "disabled";
212     };
213    
214     - ipmmu_ds: mmu@e6740000 {
215     + ipmmu_ds: iommu@e6740000 {
216     compatible = "renesas,ipmmu-r8a7790",
217     "renesas,ipmmu-vmsa";
218     reg = <0 0xe6740000 0 0x1000>;
219     @@ -456,7 +456,7 @@
220     status = "disabled";
221     };
222    
223     - ipmmu_mp: mmu@ec680000 {
224     + ipmmu_mp: iommu@ec680000 {
225     compatible = "renesas,ipmmu-r8a7790",
226     "renesas,ipmmu-vmsa";
227     reg = <0 0xec680000 0 0x1000>;
228     @@ -465,7 +465,7 @@
229     status = "disabled";
230     };
231    
232     - ipmmu_mx: mmu@fe951000 {
233     + ipmmu_mx: iommu@fe951000 {
234     compatible = "renesas,ipmmu-r8a7790",
235     "renesas,ipmmu-vmsa";
236     reg = <0 0xfe951000 0 0x1000>;
237     @@ -475,7 +475,7 @@
238     status = "disabled";
239     };
240    
241     - ipmmu_rt: mmu@ffc80000 {
242     + ipmmu_rt: iommu@ffc80000 {
243     compatible = "renesas,ipmmu-r8a7790",
244     "renesas,ipmmu-vmsa";
245     reg = <0 0xffc80000 0 0x1000>;
246     diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
247     index 6f875502453c..a26f86ccc579 100644
248     --- a/arch/arm/boot/dts/r8a7791.dtsi
249     +++ b/arch/arm/boot/dts/r8a7791.dtsi
250     @@ -350,7 +350,7 @@
251     #thermal-sensor-cells = <0>;
252     };
253    
254     - ipmmu_sy0: mmu@e6280000 {
255     + ipmmu_sy0: iommu@e6280000 {
256     compatible = "renesas,ipmmu-r8a7791",
257     "renesas,ipmmu-vmsa";
258     reg = <0 0xe6280000 0 0x1000>;
259     @@ -360,7 +360,7 @@
260     status = "disabled";
261     };
262    
263     - ipmmu_sy1: mmu@e6290000 {
264     + ipmmu_sy1: iommu@e6290000 {
265     compatible = "renesas,ipmmu-r8a7791",
266     "renesas,ipmmu-vmsa";
267     reg = <0 0xe6290000 0 0x1000>;
268     @@ -369,7 +369,7 @@
269     status = "disabled";
270     };
271    
272     - ipmmu_ds: mmu@e6740000 {
273     + ipmmu_ds: iommu@e6740000 {
274     compatible = "renesas,ipmmu-r8a7791",
275     "renesas,ipmmu-vmsa";
276     reg = <0 0xe6740000 0 0x1000>;
277     @@ -379,7 +379,7 @@
278     status = "disabled";
279     };
280    
281     - ipmmu_mp: mmu@ec680000 {
282     + ipmmu_mp: iommu@ec680000 {
283     compatible = "renesas,ipmmu-r8a7791",
284     "renesas,ipmmu-vmsa";
285     reg = <0 0xec680000 0 0x1000>;
286     @@ -388,7 +388,7 @@
287     status = "disabled";
288     };
289    
290     - ipmmu_mx: mmu@fe951000 {
291     + ipmmu_mx: iommu@fe951000 {
292     compatible = "renesas,ipmmu-r8a7791",
293     "renesas,ipmmu-vmsa";
294     reg = <0 0xfe951000 0 0x1000>;
295     @@ -398,7 +398,7 @@
296     status = "disabled";
297     };
298    
299     - ipmmu_rt: mmu@ffc80000 {
300     + ipmmu_rt: iommu@ffc80000 {
301     compatible = "renesas,ipmmu-r8a7791",
302     "renesas,ipmmu-vmsa";
303     reg = <0 0xffc80000 0 0x1000>;
304     @@ -407,7 +407,7 @@
305     status = "disabled";
306     };
307    
308     - ipmmu_gp: mmu@e62a0000 {
309     + ipmmu_gp: iommu@e62a0000 {
310     compatible = "renesas,ipmmu-r8a7791",
311     "renesas,ipmmu-vmsa";
312     reg = <0 0xe62a0000 0 0x1000>;
313     diff --git a/arch/arm/boot/dts/r8a7793.dtsi b/arch/arm/boot/dts/r8a7793.dtsi
314     index bf05110fac4e..fa3839795018 100644
315     --- a/arch/arm/boot/dts/r8a7793.dtsi
316     +++ b/arch/arm/boot/dts/r8a7793.dtsi
317     @@ -336,7 +336,7 @@
318     #thermal-sensor-cells = <0>;
319     };
320    
321     - ipmmu_sy0: mmu@e6280000 {
322     + ipmmu_sy0: iommu@e6280000 {
323     compatible = "renesas,ipmmu-r8a7793",
324     "renesas,ipmmu-vmsa";
325     reg = <0 0xe6280000 0 0x1000>;
326     @@ -346,7 +346,7 @@
327     status = "disabled";
328     };
329    
330     - ipmmu_sy1: mmu@e6290000 {
331     + ipmmu_sy1: iommu@e6290000 {
332     compatible = "renesas,ipmmu-r8a7793",
333     "renesas,ipmmu-vmsa";
334     reg = <0 0xe6290000 0 0x1000>;
335     @@ -355,7 +355,7 @@
336     status = "disabled";
337     };
338    
339     - ipmmu_ds: mmu@e6740000 {
340     + ipmmu_ds: iommu@e6740000 {
341     compatible = "renesas,ipmmu-r8a7793",
342     "renesas,ipmmu-vmsa";
343     reg = <0 0xe6740000 0 0x1000>;
344     @@ -365,7 +365,7 @@
345     status = "disabled";
346     };
347    
348     - ipmmu_mp: mmu@ec680000 {
349     + ipmmu_mp: iommu@ec680000 {
350     compatible = "renesas,ipmmu-r8a7793",
351     "renesas,ipmmu-vmsa";
352     reg = <0 0xec680000 0 0x1000>;
353     @@ -374,7 +374,7 @@
354     status = "disabled";
355     };
356    
357     - ipmmu_mx: mmu@fe951000 {
358     + ipmmu_mx: iommu@fe951000 {
359     compatible = "renesas,ipmmu-r8a7793",
360     "renesas,ipmmu-vmsa";
361     reg = <0 0xfe951000 0 0x1000>;
362     @@ -384,7 +384,7 @@
363     status = "disabled";
364     };
365    
366     - ipmmu_rt: mmu@ffc80000 {
367     + ipmmu_rt: iommu@ffc80000 {
368     compatible = "renesas,ipmmu-r8a7793",
369     "renesas,ipmmu-vmsa";
370     reg = <0 0xffc80000 0 0x1000>;
371     @@ -393,7 +393,7 @@
372     status = "disabled";
373     };
374    
375     - ipmmu_gp: mmu@e62a0000 {
376     + ipmmu_gp: iommu@e62a0000 {
377     compatible = "renesas,ipmmu-r8a7793",
378     "renesas,ipmmu-vmsa";
379     reg = <0 0xe62a0000 0 0x1000>;
380     diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
381     index 8d797d34816e..9dd952479e68 100644
382     --- a/arch/arm/boot/dts/r8a7794.dtsi
383     +++ b/arch/arm/boot/dts/r8a7794.dtsi
384     @@ -290,7 +290,7 @@
385     resets = <&cpg 407>;
386     };
387    
388     - ipmmu_sy0: mmu@e6280000 {
389     + ipmmu_sy0: iommu@e6280000 {
390     compatible = "renesas,ipmmu-r8a7794",
391     "renesas,ipmmu-vmsa";
392     reg = <0 0xe6280000 0 0x1000>;
393     @@ -300,7 +300,7 @@
394     status = "disabled";
395     };
396    
397     - ipmmu_sy1: mmu@e6290000 {
398     + ipmmu_sy1: iommu@e6290000 {
399     compatible = "renesas,ipmmu-r8a7794",
400     "renesas,ipmmu-vmsa";
401     reg = <0 0xe6290000 0 0x1000>;
402     @@ -309,7 +309,7 @@
403     status = "disabled";
404     };
405    
406     - ipmmu_ds: mmu@e6740000 {
407     + ipmmu_ds: iommu@e6740000 {
408     compatible = "renesas,ipmmu-r8a7794",
409     "renesas,ipmmu-vmsa";
410     reg = <0 0xe6740000 0 0x1000>;
411     @@ -319,7 +319,7 @@
412     status = "disabled";
413     };
414    
415     - ipmmu_mp: mmu@ec680000 {
416     + ipmmu_mp: iommu@ec680000 {
417     compatible = "renesas,ipmmu-r8a7794",
418     "renesas,ipmmu-vmsa";
419     reg = <0 0xec680000 0 0x1000>;
420     @@ -328,7 +328,7 @@
421     status = "disabled";
422     };
423    
424     - ipmmu_mx: mmu@fe951000 {
425     + ipmmu_mx: iommu@fe951000 {
426     compatible = "renesas,ipmmu-r8a7794",
427     "renesas,ipmmu-vmsa";
428     reg = <0 0xfe951000 0 0x1000>;
429     @@ -338,7 +338,7 @@
430     status = "disabled";
431     };
432    
433     - ipmmu_gp: mmu@e62a0000 {
434     + ipmmu_gp: iommu@e62a0000 {
435     compatible = "renesas,ipmmu-r8a7794",
436     "renesas,ipmmu-vmsa";
437     reg = <0 0xe62a0000 0 0x1000>;
438     diff --git a/arch/arm/boot/dts/stm32mp157a-avenger96.dts b/arch/arm/boot/dts/stm32mp157a-avenger96.dts
439     index 2e4742c53d04..7b8c3f25861c 100644
440     --- a/arch/arm/boot/dts/stm32mp157a-avenger96.dts
441     +++ b/arch/arm/boot/dts/stm32mp157a-avenger96.dts
442     @@ -91,6 +91,9 @@
443     #address-cells = <1>;
444     #size-cells = <0>;
445     compatible = "snps,dwmac-mdio";
446     + reset-gpios = <&gpioz 2 GPIO_ACTIVE_LOW>;
447     + reset-delay-us = <1000>;
448     +
449     phy0: ethernet-phy@7 {
450     reg = <7>;
451     };
452     diff --git a/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
453     index d277d043031b..4c6704e4c57e 100644
454     --- a/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
455     +++ b/arch/arm/boot/dts/sun8i-h2-plus-bananapi-m2-zero.dts
456     @@ -31,7 +31,7 @@
457    
458     pwr_led {
459     label = "bananapi-m2-zero:red:pwr";
460     - gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>; /* PL10 */
461     + gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */
462     default-state = "on";
463     };
464     };
465     diff --git a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi
466     index dfae90adbb7c..ce64bfb22f22 100644
467     --- a/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi
468     +++ b/arch/arm/boot/dts/vexpress-v2m-rs1.dtsi
469     @@ -31,7 +31,7 @@
470     #interrupt-cells = <1>;
471     ranges;
472    
473     - nor_flash: flash@0,00000000 {
474     + nor_flash: flash@0 {
475     compatible = "arm,vexpress-flash", "cfi-flash";
476     reg = <0 0x00000000 0x04000000>,
477     <4 0x00000000 0x04000000>;
478     @@ -41,13 +41,13 @@
479     };
480     };
481    
482     - psram@1,00000000 {
483     + psram@100000000 {
484     compatible = "arm,vexpress-psram", "mtd-ram";
485     reg = <1 0x00000000 0x02000000>;
486     bank-width = <4>;
487     };
488    
489     - ethernet@2,02000000 {
490     + ethernet@202000000 {
491     compatible = "smsc,lan9118", "smsc,lan9115";
492     reg = <2 0x02000000 0x10000>;
493     interrupts = <15>;
494     @@ -59,14 +59,14 @@
495     vddvario-supply = <&v2m_fixed_3v3>;
496     };
497    
498     - usb@2,03000000 {
499     + usb@203000000 {
500     compatible = "nxp,usb-isp1761";
501     reg = <2 0x03000000 0x20000>;
502     interrupts = <16>;
503     port1-otg;
504     };
505    
506     - iofpga@3,00000000 {
507     + iofpga@300000000 {
508     compatible = "simple-bus";
509     #address-cells = <1>;
510     #size-cells = <1>;
511     diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig
512     index 982eabc36163..2406cab73835 100644
513     --- a/arch/arm/mach-integrator/Kconfig
514     +++ b/arch/arm/mach-integrator/Kconfig
515     @@ -4,6 +4,8 @@ menuconfig ARCH_INTEGRATOR
516     depends on ARCH_MULTI_V4T || ARCH_MULTI_V5 || ARCH_MULTI_V6
517     select ARM_AMBA
518     select COMMON_CLK_VERSATILE
519     + select CMA
520     + select DMA_CMA
521     select HAVE_TCM
522     select ICST
523     select MFD_SYSCON
524     @@ -35,14 +37,13 @@ config INTEGRATOR_IMPD1
525     select ARM_VIC
526     select GPIO_PL061
527     select GPIOLIB
528     + select REGULATOR
529     + select REGULATOR_FIXED_VOLTAGE
530     help
531     The IM-PD1 is an add-on logic module for the Integrator which
532     allows ARM(R) Ltd PrimeCells to be developed and evaluated.
533     The IM-PD1 can be found on the Integrator/PP2 platform.
534    
535     - To compile this driver as a module, choose M here: the
536     - module will be called impd1.
537     -
538     config INTEGRATOR_CM7TDMI
539     bool "Integrator/CM7TDMI core module"
540     depends on ARCH_INTEGRATOR_AP
541     diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
542     index bb4a2acb9970..502c4ac45c29 100644
543     --- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
544     +++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
545     @@ -1728,18 +1728,18 @@
546     };
547    
548     sram: sram@fffc0000 {
549     - compatible = "amlogic,meson-axg-sram", "mmio-sram";
550     + compatible = "mmio-sram";
551     reg = <0x0 0xfffc0000 0x0 0x20000>;
552     #address-cells = <1>;
553     #size-cells = <1>;
554     ranges = <0 0x0 0xfffc0000 0x20000>;
555    
556     - cpu_scp_lpri: scp-shmem@13000 {
557     + cpu_scp_lpri: scp-sram@13000 {
558     compatible = "amlogic,meson-axg-scp-shmem";
559     reg = <0x13000 0x400>;
560     };
561    
562     - cpu_scp_hpri: scp-shmem@13400 {
563     + cpu_scp_hpri: scp-sram@13400 {
564     compatible = "amlogic,meson-axg-scp-shmem";
565     reg = <0x13400 0x400>;
566     };
567     diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
568     index 6733050d735f..ce230d6ac35c 100644
569     --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
570     +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
571     @@ -345,20 +345,20 @@
572     };
573    
574     sram: sram@c8000000 {
575     - compatible = "amlogic,meson-gx-sram", "amlogic,meson-gxbb-sram", "mmio-sram";
576     + compatible = "mmio-sram";
577     reg = <0x0 0xc8000000 0x0 0x14000>;
578    
579     #address-cells = <1>;
580     #size-cells = <1>;
581     ranges = <0 0x0 0xc8000000 0x14000>;
582    
583     - cpu_scp_lpri: scp-shmem@0 {
584     - compatible = "amlogic,meson-gx-scp-shmem", "amlogic,meson-gxbb-scp-shmem";
585     + cpu_scp_lpri: scp-sram@0 {
586     + compatible = "amlogic,meson-gxbb-scp-shmem";
587     reg = <0x13000 0x400>;
588     };
589    
590     - cpu_scp_hpri: scp-shmem@200 {
591     - compatible = "amlogic,meson-gx-scp-shmem", "amlogic,meson-gxbb-scp-shmem";
592     + cpu_scp_hpri: scp-sram@200 {
593     + compatible = "amlogic,meson-gxbb-scp-shmem";
594     reg = <0x13400 0x400>;
595     };
596     };
597     diff --git a/arch/arm64/boot/dts/arm/foundation-v8-gicv2.dtsi b/arch/arm64/boot/dts/arm/foundation-v8-gicv2.dtsi
598     index 15fe81738e94..dfb23dfc0b0f 100644
599     --- a/arch/arm64/boot/dts/arm/foundation-v8-gicv2.dtsi
600     +++ b/arch/arm64/boot/dts/arm/foundation-v8-gicv2.dtsi
601     @@ -8,7 +8,7 @@
602     gic: interrupt-controller@2c001000 {
603     compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
604     #interrupt-cells = <3>;
605     - #address-cells = <2>;
606     + #address-cells = <1>;
607     interrupt-controller;
608     reg = <0x0 0x2c001000 0 0x1000>,
609     <0x0 0x2c002000 0 0x2000>,
610     diff --git a/arch/arm64/boot/dts/arm/foundation-v8-gicv3.dtsi b/arch/arm64/boot/dts/arm/foundation-v8-gicv3.dtsi
611     index f2c75c756039..906f51935b36 100644
612     --- a/arch/arm64/boot/dts/arm/foundation-v8-gicv3.dtsi
613     +++ b/arch/arm64/boot/dts/arm/foundation-v8-gicv3.dtsi
614     @@ -8,9 +8,9 @@
615     gic: interrupt-controller@2f000000 {
616     compatible = "arm,gic-v3";
617     #interrupt-cells = <3>;
618     - #address-cells = <2>;
619     - #size-cells = <2>;
620     - ranges;
621     + #address-cells = <1>;
622     + #size-cells = <1>;
623     + ranges = <0x0 0x0 0x2f000000 0x100000>;
624     interrupt-controller;
625     reg = <0x0 0x2f000000 0x0 0x10000>,
626     <0x0 0x2f100000 0x0 0x200000>,
627     @@ -22,7 +22,7 @@
628     its: its@2f020000 {
629     compatible = "arm,gic-v3-its";
630     msi-controller;
631     - reg = <0x0 0x2f020000 0x0 0x20000>;
632     + reg = <0x20000 0x20000>;
633     };
634     };
635     };
636     diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dtsi b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
637     index 3f78373f708a..05d1657170b4 100644
638     --- a/arch/arm64/boot/dts/arm/foundation-v8.dtsi
639     +++ b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
640     @@ -107,51 +107,51 @@
641    
642     #interrupt-cells = <1>;
643     interrupt-map-mask = <0 0 63>;
644     - interrupt-map = <0 0 0 &gic 0 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
645     - <0 0 1 &gic 0 0 GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
646     - <0 0 2 &gic 0 0 GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
647     - <0 0 3 &gic 0 0 GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
648     - <0 0 4 &gic 0 0 GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
649     - <0 0 5 &gic 0 0 GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
650     - <0 0 6 &gic 0 0 GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
651     - <0 0 7 &gic 0 0 GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
652     - <0 0 8 &gic 0 0 GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
653     - <0 0 9 &gic 0 0 GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
654     - <0 0 10 &gic 0 0 GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
655     - <0 0 11 &gic 0 0 GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
656     - <0 0 12 &gic 0 0 GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
657     - <0 0 13 &gic 0 0 GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
658     - <0 0 14 &gic 0 0 GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
659     - <0 0 15 &gic 0 0 GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
660     - <0 0 16 &gic 0 0 GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
661     - <0 0 17 &gic 0 0 GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
662     - <0 0 18 &gic 0 0 GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
663     - <0 0 19 &gic 0 0 GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
664     - <0 0 20 &gic 0 0 GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
665     - <0 0 21 &gic 0 0 GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
666     - <0 0 22 &gic 0 0 GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
667     - <0 0 23 &gic 0 0 GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
668     - <0 0 24 &gic 0 0 GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
669     - <0 0 25 &gic 0 0 GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
670     - <0 0 26 &gic 0 0 GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
671     - <0 0 27 &gic 0 0 GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
672     - <0 0 28 &gic 0 0 GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
673     - <0 0 29 &gic 0 0 GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
674     - <0 0 30 &gic 0 0 GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
675     - <0 0 31 &gic 0 0 GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
676     - <0 0 32 &gic 0 0 GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
677     - <0 0 33 &gic 0 0 GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
678     - <0 0 34 &gic 0 0 GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
679     - <0 0 35 &gic 0 0 GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
680     - <0 0 36 &gic 0 0 GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
681     - <0 0 37 &gic 0 0 GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
682     - <0 0 38 &gic 0 0 GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
683     - <0 0 39 &gic 0 0 GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
684     - <0 0 40 &gic 0 0 GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
685     - <0 0 41 &gic 0 0 GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
686     - <0 0 42 &gic 0 0 GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
687     -
688     - ethernet@2,02000000 {
689     + interrupt-map = <0 0 0 &gic 0 GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
690     + <0 0 1 &gic 0 GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
691     + <0 0 2 &gic 0 GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
692     + <0 0 3 &gic 0 GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
693     + <0 0 4 &gic 0 GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
694     + <0 0 5 &gic 0 GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
695     + <0 0 6 &gic 0 GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
696     + <0 0 7 &gic 0 GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
697     + <0 0 8 &gic 0 GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
698     + <0 0 9 &gic 0 GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
699     + <0 0 10 &gic 0 GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
700     + <0 0 11 &gic 0 GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
701     + <0 0 12 &gic 0 GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
702     + <0 0 13 &gic 0 GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
703     + <0 0 14 &gic 0 GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
704     + <0 0 15 &gic 0 GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
705     + <0 0 16 &gic 0 GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
706     + <0 0 17 &gic 0 GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
707     + <0 0 18 &gic 0 GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
708     + <0 0 19 &gic 0 GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
709     + <0 0 20 &gic 0 GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
710     + <0 0 21 &gic 0 GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
711     + <0 0 22 &gic 0 GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
712     + <0 0 23 &gic 0 GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
713     + <0 0 24 &gic 0 GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
714     + <0 0 25 &gic 0 GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
715     + <0 0 26 &gic 0 GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
716     + <0 0 27 &gic 0 GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
717     + <0 0 28 &gic 0 GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
718     + <0 0 29 &gic 0 GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
719     + <0 0 30 &gic 0 GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
720     + <0 0 31 &gic 0 GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
721     + <0 0 32 &gic 0 GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
722     + <0 0 33 &gic 0 GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
723     + <0 0 34 &gic 0 GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
724     + <0 0 35 &gic 0 GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
725     + <0 0 36 &gic 0 GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
726     + <0 0 37 &gic 0 GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
727     + <0 0 38 &gic 0 GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
728     + <0 0 39 &gic 0 GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
729     + <0 0 40 &gic 0 GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
730     + <0 0 41 &gic 0 GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
731     + <0 0 42 &gic 0 GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
732     +
733     + ethernet@202000000 {
734     compatible = "smsc,lan91c111";
735     reg = <2 0x02000000 0x10000>;
736     interrupts = <15>;
737     @@ -178,7 +178,7 @@
738     clock-output-names = "v2m:refclk32khz";
739     };
740    
741     - iofpga@3,00000000 {
742     + iofpga@300000000 {
743     compatible = "simple-bus";
744     #address-cells = <1>;
745     #size-cells = <1>;
746     diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
747     index 8c11660bbe40..c47f76b01c4b 100644
748     --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
749     +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
750     @@ -62,35 +62,35 @@
751     <0x0 0x2c02f000 0 0x2000>,
752     <0x0 0x2c04f000 0 0x2000>,
753     <0x0 0x2c06f000 0 0x2000>;
754     - #address-cells = <2>;
755     + #address-cells = <1>;
756     #interrupt-cells = <3>;
757     - #size-cells = <2>;
758     + #size-cells = <1>;
759     interrupt-controller;
760     interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
761     - ranges = <0 0 0 0x2c1c0000 0 0x40000>;
762     + ranges = <0 0 0x2c1c0000 0x40000>;
763    
764     v2m_0: v2m@0 {
765     compatible = "arm,gic-v2m-frame";
766     msi-controller;
767     - reg = <0 0 0 0x10000>;
768     + reg = <0 0x10000>;
769     };
770    
771     v2m@10000 {
772     compatible = "arm,gic-v2m-frame";
773     msi-controller;
774     - reg = <0 0x10000 0 0x10000>;
775     + reg = <0x10000 0x10000>;
776     };
777    
778     v2m@20000 {
779     compatible = "arm,gic-v2m-frame";
780     msi-controller;
781     - reg = <0 0x20000 0 0x10000>;
782     + reg = <0x20000 0x10000>;
783     };
784    
785     v2m@30000 {
786     compatible = "arm,gic-v2m-frame";
787     msi-controller;
788     - reg = <0 0x30000 0 0x10000>;
789     + reg = <0x30000 0x10000>;
790     };
791     };
792    
793     @@ -519,10 +519,10 @@
794     <0x42000000 0x40 0x00000000 0x40 0x00000000 0x1 0x00000000>;
795     #interrupt-cells = <1>;
796     interrupt-map-mask = <0 0 0 7>;
797     - interrupt-map = <0 0 0 1 &gic 0 0 GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
798     - <0 0 0 2 &gic 0 0 GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
799     - <0 0 0 3 &gic 0 0 GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
800     - <0 0 0 4 &gic 0 0 GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
801     + interrupt-map = <0 0 0 1 &gic 0 GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
802     + <0 0 0 2 &gic 0 GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
803     + <0 0 0 3 &gic 0 GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
804     + <0 0 0 4 &gic 0 GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
805     msi-parent = <&v2m_0>;
806     status = "disabled";
807     iommu-map-mask = <0x0>; /* RC has no means to output PCI RID */
808     @@ -786,19 +786,19 @@
809    
810     #interrupt-cells = <1>;
811     interrupt-map-mask = <0 0 15>;
812     - interrupt-map = <0 0 0 &gic 0 0 GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
813     - <0 0 1 &gic 0 0 GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
814     - <0 0 2 &gic 0 0 GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
815     - <0 0 3 &gic 0 0 GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
816     - <0 0 4 &gic 0 0 GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,
817     - <0 0 5 &gic 0 0 GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>,
818     - <0 0 6 &gic 0 0 GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
819     - <0 0 7 &gic 0 0 GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
820     - <0 0 8 &gic 0 0 GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>,
821     - <0 0 9 &gic 0 0 GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>,
822     - <0 0 10 &gic 0 0 GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>,
823     - <0 0 11 &gic 0 0 GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
824     - <0 0 12 &gic 0 0 GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
825     + interrupt-map = <0 0 0 &gic 0 GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
826     + <0 0 1 &gic 0 GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
827     + <0 0 2 &gic 0 GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
828     + <0 0 3 &gic 0 GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
829     + <0 0 4 &gic 0 GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,
830     + <0 0 5 &gic 0 GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>,
831     + <0 0 6 &gic 0 GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
832     + <0 0 7 &gic 0 GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
833     + <0 0 8 &gic 0 GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>,
834     + <0 0 9 &gic 0 GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>,
835     + <0 0 10 &gic 0 GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>,
836     + <0 0 11 &gic 0 GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
837     + <0 0 12 &gic 0 GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
838     };
839    
840     site2: tlx@60000000 {
841     @@ -808,6 +808,6 @@
842     ranges = <0 0 0x60000000 0x10000000>;
843     #interrupt-cells = <1>;
844     interrupt-map-mask = <0 0>;
845     - interrupt-map = <0 0 &gic 0 0 GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
846     + interrupt-map = <0 0 &gic 0 GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
847     };
848     };
849     diff --git a/arch/arm64/boot/dts/arm/juno-motherboard.dtsi b/arch/arm64/boot/dts/arm/juno-motherboard.dtsi
850     index 9f60dacb4f80..1234a8cfc0a9 100644
851     --- a/arch/arm64/boot/dts/arm/juno-motherboard.dtsi
852     +++ b/arch/arm64/boot/dts/arm/juno-motherboard.dtsi
853     @@ -103,7 +103,7 @@
854     };
855     };
856    
857     - flash@0,00000000 {
858     + flash@0 {
859     /* 2 * 32MiB NOR Flash memory mounted on CS0 */
860     compatible = "arm,vexpress-flash", "cfi-flash";
861     reg = <0 0x00000000 0x04000000>;
862     @@ -120,7 +120,7 @@
863     };
864     };
865    
866     - ethernet@2,00000000 {
867     + ethernet@200000000 {
868     compatible = "smsc,lan9118", "smsc,lan9115";
869     reg = <2 0x00000000 0x10000>;
870     interrupts = <3>;
871     @@ -133,7 +133,7 @@
872     vddvario-supply = <&mb_fixed_3v3>;
873     };
874    
875     - iofpga@3,00000000 {
876     + iofpga@300000000 {
877     compatible = "simple-bus";
878     #address-cells = <1>;
879     #size-cells = <1>;
880     diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi
881     index 57b0b9d7f3fa..29e6962c70bd 100644
882     --- a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi
883     +++ b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard-rs2.dtsi
884     @@ -9,7 +9,7 @@
885     motherboard {
886     arm,v2m-memory-map = "rs2";
887    
888     - iofpga@3,00000000 {
889     + iofpga@300000000 {
890     virtio-p9@140000 {
891     compatible = "virtio,mmio";
892     reg = <0x140000 0x200>;
893     diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi
894     index 03a7bf079c8f..ad20076357f5 100644
895     --- a/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi
896     +++ b/arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi
897     @@ -17,14 +17,14 @@
898     #interrupt-cells = <1>;
899     ranges;
900    
901     - flash@0,00000000 {
902     + flash@0 {
903     compatible = "arm,vexpress-flash", "cfi-flash";
904     reg = <0 0x00000000 0x04000000>,
905     <4 0x00000000 0x04000000>;
906     bank-width = <4>;
907     };
908    
909     - ethernet@2,02000000 {
910     + ethernet@202000000 {
911     compatible = "smsc,lan91c111";
912     reg = <2 0x02000000 0x10000>;
913     interrupts = <15>;
914     @@ -51,7 +51,7 @@
915     clock-output-names = "v2m:refclk32khz";
916     };
917    
918     - iofpga@3,00000000 {
919     + iofpga@300000000 {
920     compatible = "simple-bus";
921     #address-cells = <1>;
922     #size-cells = <1>;
923     diff --git a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
924     index 5f350cc71a2f..c3668187b844 100644
925     --- a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
926     +++ b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
927     @@ -95,7 +95,7 @@
928     };
929    
930     sfp: sfp {
931     - compatible = "sff,sfp+";
932     + compatible = "sff,sfp";
933     i2c-bus = <&i2c0>;
934     los-gpio = <&moxtet_sfp 0 GPIO_ACTIVE_HIGH>;
935     tx-fault-gpio = <&moxtet_sfp 1 GPIO_ACTIVE_HIGH>;
936     @@ -171,6 +171,8 @@
937     marvell,pad-type = "sd";
938     vqmmc-supply = <&vsdio_reg>;
939     mmc-pwrseq = <&sdhci1_pwrseq>;
940     + /* forbid SDR104 for FCC purposes */
941     + sdhci-caps-mask = <0x2 0x0>;
942     status = "okay";
943     };
944    
945     diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
946     index 5891b7151432..dec5e4113ce4 100644
947     --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
948     +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
949     @@ -238,21 +238,21 @@
950     cpu_on = <0x84000003>;
951     };
952    
953     - clk26m: oscillator@0 {
954     + clk26m: oscillator0 {
955     compatible = "fixed-clock";
956     #clock-cells = <0>;
957     clock-frequency = <26000000>;
958     clock-output-names = "clk26m";
959     };
960    
961     - clk32k: oscillator@1 {
962     + clk32k: oscillator1 {
963     compatible = "fixed-clock";
964     #clock-cells = <0>;
965     clock-frequency = <32000>;
966     clock-output-names = "clk32k";
967     };
968    
969     - cpum_ck: oscillator@2 {
970     + cpum_ck: oscillator2 {
971     compatible = "fixed-clock";
972     #clock-cells = <0>;
973     clock-frequency = <0>;
974     @@ -268,19 +268,19 @@
975     sustainable-power = <1500>; /* milliwatts */
976    
977     trips {
978     - threshold: trip-point@0 {
979     + threshold: trip-point0 {
980     temperature = <68000>;
981     hysteresis = <2000>;
982     type = "passive";
983     };
984    
985     - target: trip-point@1 {
986     + target: trip-point1 {
987     temperature = <85000>;
988     hysteresis = <2000>;
989     type = "passive";
990     };
991    
992     - cpu_crit: cpu_crit@0 {
993     + cpu_crit: cpu_crit0 {
994     temperature = <115000>;
995     hysteresis = <2000>;
996     type = "critical";
997     @@ -288,13 +288,13 @@
998     };
999    
1000     cooling-maps {
1001     - map@0 {
1002     + map0 {
1003     trip = <&target>;
1004     cooling-device = <&cpu0 0 0>,
1005     <&cpu1 0 0>;
1006     contribution = <3072>;
1007     };
1008     - map@1 {
1009     + map1 {
1010     trip = <&target>;
1011     cooling-device = <&cpu2 0 0>,
1012     <&cpu3 0 0>;
1013     @@ -308,7 +308,7 @@
1014     #address-cells = <2>;
1015     #size-cells = <2>;
1016     ranges;
1017     - vpu_dma_reserved: vpu_dma_mem_region {
1018     + vpu_dma_reserved: vpu_dma_mem_region@b7000000 {
1019     compatible = "shared-dma-pool";
1020     reg = <0 0xb7000000 0 0x500000>;
1021     alignment = <0x1000>;
1022     @@ -360,7 +360,7 @@
1023     reg = <0 0x10005000 0 0x1000>;
1024     };
1025    
1026     - pio: pinctrl@10005000 {
1027     + pio: pinctrl@1000b000 {
1028     compatible = "mediatek,mt8173-pinctrl";
1029     reg = <0 0x1000b000 0 0x1000>;
1030     mediatek,pctl-regmap = <&syscfg_pctl_a>;
1031     @@ -567,7 +567,7 @@
1032     status = "disabled";
1033     };
1034    
1035     - gic: interrupt-controller@10220000 {
1036     + gic: interrupt-controller@10221000 {
1037     compatible = "arm,gic-400";
1038     #interrupt-cells = <3>;
1039     interrupt-parent = <&gic>;
1040     diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi b/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
1041     index 02909a48dfcd..7899759a12f8 100644
1042     --- a/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
1043     +++ b/arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
1044     @@ -32,7 +32,7 @@
1045    
1046     phy-reset-gpios = <&gpio TEGRA194_MAIN_GPIO(G, 5) GPIO_ACTIVE_LOW>;
1047     phy-handle = <&phy>;
1048     - phy-mode = "rgmii";
1049     + phy-mode = "rgmii-id";
1050    
1051     mdio {
1052     #address-cells = <1>;
1053     diff --git a/arch/arm64/boot/dts/nvidia/tegra194.dtsi b/arch/arm64/boot/dts/nvidia/tegra194.dtsi
1054     index 457b815d57f4..2f3926719434 100644
1055     --- a/arch/arm64/boot/dts/nvidia/tegra194.dtsi
1056     +++ b/arch/arm64/boot/dts/nvidia/tegra194.dtsi
1057     @@ -1192,7 +1192,7 @@
1058    
1059     bus-range = <0x0 0xff>;
1060     ranges = <0x81000000 0x0 0x30100000 0x0 0x30100000 0x0 0x00100000 /* downstream I/O (1MB) */
1061     - 0xc2000000 0x12 0x00000000 0x12 0x00000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1062     + 0xc3000000 0x12 0x00000000 0x12 0x00000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1063     0x82000000 0x0 0x40000000 0x12 0x30000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
1064     };
1065    
1066     @@ -1238,7 +1238,7 @@
1067    
1068     bus-range = <0x0 0xff>;
1069     ranges = <0x81000000 0x0 0x32100000 0x0 0x32100000 0x0 0x00100000 /* downstream I/O (1MB) */
1070     - 0xc2000000 0x12 0x40000000 0x12 0x40000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1071     + 0xc3000000 0x12 0x40000000 0x12 0x40000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1072     0x82000000 0x0 0x40000000 0x12 0x70000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
1073     };
1074    
1075     @@ -1284,7 +1284,7 @@
1076    
1077     bus-range = <0x0 0xff>;
1078     ranges = <0x81000000 0x0 0x34100000 0x0 0x34100000 0x0 0x00100000 /* downstream I/O (1MB) */
1079     - 0xc2000000 0x12 0x80000000 0x12 0x80000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1080     + 0xc3000000 0x12 0x80000000 0x12 0x80000000 0x0 0x30000000 /* prefetchable memory (768MB) */
1081     0x82000000 0x0 0x40000000 0x12 0xb0000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
1082     };
1083    
1084     @@ -1330,7 +1330,7 @@
1085    
1086     bus-range = <0x0 0xff>;
1087     ranges = <0x81000000 0x0 0x36100000 0x0 0x36100000 0x0 0x00100000 /* downstream I/O (1MB) */
1088     - 0xc2000000 0x14 0x00000000 0x14 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1089     + 0xc3000000 0x14 0x00000000 0x14 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1090     0x82000000 0x0 0x40000000 0x17 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
1091     };
1092    
1093     @@ -1376,7 +1376,7 @@
1094    
1095     bus-range = <0x0 0xff>;
1096     ranges = <0x81000000 0x0 0x38100000 0x0 0x38100000 0x0 0x00100000 /* downstream I/O (1MB) */
1097     - 0xc2000000 0x18 0x00000000 0x18 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1098     + 0xc3000000 0x18 0x00000000 0x18 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1099     0x82000000 0x0 0x40000000 0x1b 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
1100     };
1101    
1102     @@ -1426,7 +1426,7 @@
1103    
1104     bus-range = <0x0 0xff>;
1105     ranges = <0x81000000 0x0 0x3a100000 0x0 0x3a100000 0x0 0x00100000 /* downstream I/O (1MB) */
1106     - 0xc2000000 0x1c 0x00000000 0x1c 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1107     + 0xc3000000 0x1c 0x00000000 0x1c 0x00000000 0x3 0x40000000 /* prefetchable memory (13GB) */
1108     0x82000000 0x0 0x40000000 0x1f 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
1109     };
1110    
1111     diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
1112     index 5ea9fb8f2f87..340da154d4e3 100644
1113     --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
1114     +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
1115     @@ -212,7 +212,7 @@
1116     thermal-sensors = <&tsens 3>;
1117    
1118     trips {
1119     - cpu2_3_alert0: trip-point@0 {
1120     + cpu2_3_alert0: trip-point0 {
1121     temperature = <75000>;
1122     hysteresis = <2000>;
1123     type = "passive";
1124     @@ -242,7 +242,7 @@
1125     thermal-sensors = <&tsens 2>;
1126    
1127     trips {
1128     - gpu_alert0: trip-point@0 {
1129     + gpu_alert0: trip-point0 {
1130     temperature = <75000>;
1131     hysteresis = <2000>;
1132     type = "passive";
1133     @@ -262,7 +262,7 @@
1134     thermal-sensors = <&tsens 1>;
1135    
1136     trips {
1137     - cam_alert0: trip-point@0 {
1138     + cam_alert0: trip-point0 {
1139     temperature = <75000>;
1140     hysteresis = <2000>;
1141     type = "hot";
1142     @@ -277,7 +277,7 @@
1143     thermal-sensors = <&tsens 0>;
1144    
1145     trips {
1146     - modem_alert0: trip-point@0 {
1147     + modem_alert0: trip-point0 {
1148     temperature = <85000>;
1149     hysteresis = <2000>;
1150     type = "hot";
1151     diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi
1152     index fbb8ce78f95b..d303df3887d9 100644
1153     --- a/arch/arm64/boot/dts/qcom/msm8996.dtsi
1154     +++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi
1155     @@ -1681,16 +1681,16 @@
1156     "csi_clk_mux",
1157     "vfe0",
1158     "vfe1";
1159     - interrupts = <GIC_SPI 78 0>,
1160     - <GIC_SPI 79 0>,
1161     - <GIC_SPI 80 0>,
1162     - <GIC_SPI 296 0>,
1163     - <GIC_SPI 297 0>,
1164     - <GIC_SPI 298 0>,
1165     - <GIC_SPI 299 0>,
1166     - <GIC_SPI 309 0>,
1167     - <GIC_SPI 314 0>,
1168     - <GIC_SPI 315 0>;
1169     + interrupts = <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>,
1170     + <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>,
1171     + <GIC_SPI 80 IRQ_TYPE_EDGE_RISING>,
1172     + <GIC_SPI 296 IRQ_TYPE_EDGE_RISING>,
1173     + <GIC_SPI 297 IRQ_TYPE_EDGE_RISING>,
1174     + <GIC_SPI 298 IRQ_TYPE_EDGE_RISING>,
1175     + <GIC_SPI 299 IRQ_TYPE_EDGE_RISING>,
1176     + <GIC_SPI 309 IRQ_TYPE_EDGE_RISING>,
1177     + <GIC_SPI 314 IRQ_TYPE_EDGE_RISING>,
1178     + <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>;
1179     interrupt-names = "csiphy0",
1180     "csiphy1",
1181     "csiphy2",
1182     diff --git a/arch/arm64/boot/dts/qcom/pm8150.dtsi b/arch/arm64/boot/dts/qcom/pm8150.dtsi
1183     index b6e304748a57..c0b197458665 100644
1184     --- a/arch/arm64/boot/dts/qcom/pm8150.dtsi
1185     +++ b/arch/arm64/boot/dts/qcom/pm8150.dtsi
1186     @@ -73,18 +73,8 @@
1187     reg = <0xc000>;
1188     gpio-controller;
1189     #gpio-cells = <2>;
1190     - interrupts = <0x0 0xc0 0x0 IRQ_TYPE_NONE>,
1191     - <0x0 0xc1 0x0 IRQ_TYPE_NONE>,
1192     - <0x0 0xc2 0x0 IRQ_TYPE_NONE>,
1193     - <0x0 0xc3 0x0 IRQ_TYPE_NONE>,
1194     - <0x0 0xc4 0x0 IRQ_TYPE_NONE>,
1195     - <0x0 0xc5 0x0 IRQ_TYPE_NONE>,
1196     - <0x0 0xc6 0x0 IRQ_TYPE_NONE>,
1197     - <0x0 0xc7 0x0 IRQ_TYPE_NONE>,
1198     - <0x0 0xc8 0x0 IRQ_TYPE_NONE>,
1199     - <0x0 0xc9 0x0 IRQ_TYPE_NONE>,
1200     - <0x0 0xca 0x0 IRQ_TYPE_NONE>,
1201     - <0x0 0xcb 0x0 IRQ_TYPE_NONE>;
1202     + interrupt-controller;
1203     + #interrupt-cells = <2>;
1204     };
1205     };
1206    
1207     diff --git a/arch/arm64/boot/dts/qcom/pm8150b.dtsi b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
1208     index 322379d5c31f..40b5d75a4a1d 100644
1209     --- a/arch/arm64/boot/dts/qcom/pm8150b.dtsi
1210     +++ b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
1211     @@ -62,18 +62,8 @@
1212     reg = <0xc000>;
1213     gpio-controller;
1214     #gpio-cells = <2>;
1215     - interrupts = <0x2 0xc0 0x0 IRQ_TYPE_NONE>,
1216     - <0x2 0xc1 0x0 IRQ_TYPE_NONE>,
1217     - <0x2 0xc2 0x0 IRQ_TYPE_NONE>,
1218     - <0x2 0xc3 0x0 IRQ_TYPE_NONE>,
1219     - <0x2 0xc4 0x0 IRQ_TYPE_NONE>,
1220     - <0x2 0xc5 0x0 IRQ_TYPE_NONE>,
1221     - <0x2 0xc6 0x0 IRQ_TYPE_NONE>,
1222     - <0x2 0xc7 0x0 IRQ_TYPE_NONE>,
1223     - <0x2 0xc8 0x0 IRQ_TYPE_NONE>,
1224     - <0x2 0xc9 0x0 IRQ_TYPE_NONE>,
1225     - <0x2 0xca 0x0 IRQ_TYPE_NONE>,
1226     - <0x2 0xcb 0x0 IRQ_TYPE_NONE>;
1227     + interrupt-controller;
1228     + #interrupt-cells = <2>;
1229     };
1230     };
1231    
1232     diff --git a/arch/arm64/boot/dts/qcom/pm8150l.dtsi b/arch/arm64/boot/dts/qcom/pm8150l.dtsi
1233     index eb0e9a090e42..cf05e0685d10 100644
1234     --- a/arch/arm64/boot/dts/qcom/pm8150l.dtsi
1235     +++ b/arch/arm64/boot/dts/qcom/pm8150l.dtsi
1236     @@ -56,18 +56,8 @@
1237     reg = <0xc000>;
1238     gpio-controller;
1239     #gpio-cells = <2>;
1240     - interrupts = <0x4 0xc0 0x0 IRQ_TYPE_NONE>,
1241     - <0x4 0xc1 0x0 IRQ_TYPE_NONE>,
1242     - <0x4 0xc2 0x0 IRQ_TYPE_NONE>,
1243     - <0x4 0xc3 0x0 IRQ_TYPE_NONE>,
1244     - <0x4 0xc4 0x0 IRQ_TYPE_NONE>,
1245     - <0x4 0xc5 0x0 IRQ_TYPE_NONE>,
1246     - <0x4 0xc6 0x0 IRQ_TYPE_NONE>,
1247     - <0x4 0xc7 0x0 IRQ_TYPE_NONE>,
1248     - <0x4 0xc8 0x0 IRQ_TYPE_NONE>,
1249     - <0x4 0xc9 0x0 IRQ_TYPE_NONE>,
1250     - <0x4 0xca 0x0 IRQ_TYPE_NONE>,
1251     - <0x4 0xcb 0x0 IRQ_TYPE_NONE>;
1252     + interrupt-controller;
1253     + #interrupt-cells = <2>;
1254     };
1255     };
1256    
1257     diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c
1258     index 38ee1514cd9c..b4a160795824 100644
1259     --- a/arch/arm64/kernel/hw_breakpoint.c
1260     +++ b/arch/arm64/kernel/hw_breakpoint.c
1261     @@ -730,6 +730,27 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,
1262     return 0;
1263     }
1264    
1265     +static int watchpoint_report(struct perf_event *wp, unsigned long addr,
1266     + struct pt_regs *regs)
1267     +{
1268     + int step = is_default_overflow_handler(wp);
1269     + struct arch_hw_breakpoint *info = counter_arch_bp(wp);
1270     +
1271     + info->trigger = addr;
1272     +
1273     + /*
1274     + * If we triggered a user watchpoint from a uaccess routine, then
1275     + * handle the stepping ourselves since userspace really can't help
1276     + * us with this.
1277     + */
1278     + if (!user_mode(regs) && info->ctrl.privilege == AARCH64_BREAKPOINT_EL0)
1279     + step = 1;
1280     + else
1281     + perf_bp_event(wp, regs);
1282     +
1283     + return step;
1284     +}
1285     +
1286     static int watchpoint_handler(unsigned long addr, unsigned int esr,
1287     struct pt_regs *regs)
1288     {
1289     @@ -739,7 +760,6 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
1290     u64 val;
1291     struct perf_event *wp, **slots;
1292     struct debug_info *debug_info;
1293     - struct arch_hw_breakpoint *info;
1294     struct arch_hw_breakpoint_ctrl ctrl;
1295    
1296     slots = this_cpu_ptr(wp_on_reg);
1297     @@ -777,25 +797,13 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
1298     if (dist != 0)
1299     continue;
1300    
1301     - info = counter_arch_bp(wp);
1302     - info->trigger = addr;
1303     - perf_bp_event(wp, regs);
1304     -
1305     - /* Do we need to handle the stepping? */
1306     - if (is_default_overflow_handler(wp))
1307     - step = 1;
1308     + step = watchpoint_report(wp, addr, regs);
1309     }
1310     - if (min_dist > 0 && min_dist != -1) {
1311     - /* No exact match found. */
1312     - wp = slots[closest_match];
1313     - info = counter_arch_bp(wp);
1314     - info->trigger = addr;
1315     - perf_bp_event(wp, regs);
1316    
1317     - /* Do we need to handle the stepping? */
1318     - if (is_default_overflow_handler(wp))
1319     - step = 1;
1320     - }
1321     + /* No exact match found? */
1322     + if (min_dist > 0 && min_dist != -1)
1323     + step = watchpoint_report(slots[closest_match], addr, regs);
1324     +
1325     rcu_read_unlock();
1326    
1327     if (!step)
1328     diff --git a/arch/m68k/coldfire/pci.c b/arch/m68k/coldfire/pci.c
1329     index 62b0eb6cf69a..84eab0f5e00a 100644
1330     --- a/arch/m68k/coldfire/pci.c
1331     +++ b/arch/m68k/coldfire/pci.c
1332     @@ -216,8 +216,10 @@ static int __init mcf_pci_init(void)
1333    
1334     /* Keep a virtual mapping to IO/config space active */
1335     iospace = (unsigned long) ioremap(PCI_IO_PA, PCI_IO_SIZE);
1336     - if (iospace == 0)
1337     + if (iospace == 0) {
1338     + pci_free_host_bridge(bridge);
1339     return -ENODEV;
1340     + }
1341     pr_info("Coldfire: PCI IO/config window mapped to 0x%x\n",
1342     (u32) iospace);
1343    
1344     diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
1345     index e4a78571f883..c6481cfc5220 100644
1346     --- a/arch/openrisc/kernel/entry.S
1347     +++ b/arch/openrisc/kernel/entry.S
1348     @@ -1166,13 +1166,13 @@ ENTRY(__sys_clone)
1349     l.movhi r29,hi(sys_clone)
1350     l.ori r29,r29,lo(sys_clone)
1351     l.j _fork_save_extra_regs_and_call
1352     - l.addi r7,r1,0
1353     + l.nop
1354    
1355     ENTRY(__sys_fork)
1356     l.movhi r29,hi(sys_fork)
1357     l.ori r29,r29,lo(sys_fork)
1358     l.j _fork_save_extra_regs_and_call
1359     - l.addi r3,r1,0
1360     + l.nop
1361    
1362     ENTRY(sys_rt_sigreturn)
1363     l.jal _sys_rt_sigreturn
1364     diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
1365     index 44431dc06982..ad620637cbd1 100644
1366     --- a/arch/powerpc/Kconfig
1367     +++ b/arch/powerpc/Kconfig
1368     @@ -747,6 +747,7 @@ config THREAD_SHIFT
1369     range 13 15
1370     default "15" if PPC_256K_PAGES
1371     default "14" if PPC64
1372     + default "14" if KASAN
1373     default "13"
1374     help
1375     Used to define the stack size. The default is almost always what you
1376     diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
1377     index a143d394ff46..e1eb8aa9cfbb 100644
1378     --- a/arch/powerpc/include/asm/book3s/64/pgtable.h
1379     +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
1380     @@ -998,10 +998,25 @@ extern struct page *pgd_page(pgd_t pgd);
1381     #define pud_page_vaddr(pud) __va(pud_val(pud) & ~PUD_MASKED_BITS)
1382     #define pgd_page_vaddr(pgd) __va(pgd_val(pgd) & ~PGD_MASKED_BITS)
1383    
1384     -#define pgd_index(address) (((address) >> (PGDIR_SHIFT)) & (PTRS_PER_PGD - 1))
1385     -#define pud_index(address) (((address) >> (PUD_SHIFT)) & (PTRS_PER_PUD - 1))
1386     -#define pmd_index(address) (((address) >> (PMD_SHIFT)) & (PTRS_PER_PMD - 1))
1387     -#define pte_index(address) (((address) >> (PAGE_SHIFT)) & (PTRS_PER_PTE - 1))
1388     +static inline unsigned long pgd_index(unsigned long address)
1389     +{
1390     + return (address >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1);
1391     +}
1392     +
1393     +static inline unsigned long pud_index(unsigned long address)
1394     +{
1395     + return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
1396     +}
1397     +
1398     +static inline unsigned long pmd_index(unsigned long address)
1399     +{
1400     + return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
1401     +}
1402     +
1403     +static inline unsigned long pte_index(unsigned long address)
1404     +{
1405     + return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
1406     +}
1407    
1408     /*
1409     * Find an entry in a page-table-directory. We combine the address region
1410     diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
1411     index a9993e7a443b..64b998db9d3e 100644
1412     --- a/arch/powerpc/include/asm/processor.h
1413     +++ b/arch/powerpc/include/asm/processor.h
1414     @@ -291,7 +291,6 @@ struct thread_struct {
1415     #else
1416     #define INIT_THREAD { \
1417     .ksp = INIT_SP, \
1418     - .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \
1419     .addr_limit = KERNEL_DS, \
1420     .fpexc_mode = 0, \
1421     .fscr = FSCR_TAR | FSCR_EBB \
1422     diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
1423     index d0018dd17e0a..70ac8a6ba0c1 100644
1424     --- a/arch/powerpc/kernel/exceptions-64s.S
1425     +++ b/arch/powerpc/kernel/exceptions-64s.S
1426     @@ -1090,17 +1090,19 @@ EXC_COMMON_BEGIN(machine_check_idle_common)
1427     bl machine_check_queue_event
1428    
1429     /*
1430     - * We have not used any non-volatile GPRs here, and as a rule
1431     - * most exception code including machine check does not.
1432     - * Therefore PACA_NAPSTATELOST does not need to be set. Idle
1433     - * wakeup will restore volatile registers.
1434     + * GPR-loss wakeups are relatively straightforward, because the
1435     + * idle sleep code has saved all non-volatile registers on its
1436     + * own stack, and r1 in PACAR1.
1437     *
1438     - * Load the original SRR1 into r3 for pnv_powersave_wakeup_mce.
1439     + * For no-loss wakeups the r1 and lr registers used by the
1440     + * early machine check handler have to be restored first. r2 is
1441     + * the kernel TOC, so no need to restore it.
1442     *
1443     * Then decrement MCE nesting after finishing with the stack.
1444     */
1445     ld r3,_MSR(r1)
1446     ld r4,_LINK(r1)
1447     + ld r1,GPR1(r1)
1448    
1449     lhz r11,PACA_IN_MCE(r13)
1450     subi r11,r11,1
1451     @@ -1109,7 +1111,7 @@ EXC_COMMON_BEGIN(machine_check_idle_common)
1452     mtlr r4
1453     rlwinm r10,r3,47-31,30,31
1454     cmpwi cr1,r10,2
1455     - bltlr cr1 /* no state loss, return to idle caller */
1456     + bltlr cr1 /* no state loss, return to idle caller with r3=SRR1 */
1457     b idle_return_gpr_loss
1458     #endif
1459    
1460     diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
1461     index ad79fddb974d..780f527eabd2 100644
1462     --- a/arch/powerpc/kernel/head_64.S
1463     +++ b/arch/powerpc/kernel/head_64.S
1464     @@ -945,15 +945,8 @@ start_here_multiplatform:
1465     std r0,0(r4)
1466     #endif
1467    
1468     - /* The following gets the stack set up with the regs */
1469     - /* pointing to the real addr of the kernel stack. This is */
1470     - /* all done to support the C function call below which sets */
1471     - /* up the htab. This is done because we have relocated the */
1472     - /* kernel but are still running in real mode. */
1473     -
1474     - LOAD_REG_ADDR(r3,init_thread_union)
1475     -
1476     /* set up a stack pointer */
1477     + LOAD_REG_ADDR(r3,init_thread_union)
1478     LOAD_REG_IMMEDIATE(r1,THREAD_SIZE)
1479     add r1,r3,r1
1480     li r0,0
1481     diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
1482     index c4ed328a7b96..7a1c11a7cba5 100644
1483     --- a/arch/powerpc/kernel/machine_kexec.c
1484     +++ b/arch/powerpc/kernel/machine_kexec.c
1485     @@ -114,11 +114,12 @@ void machine_kexec(struct kimage *image)
1486    
1487     void __init reserve_crashkernel(void)
1488     {
1489     - unsigned long long crash_size, crash_base;
1490     + unsigned long long crash_size, crash_base, total_mem_sz;
1491     int ret;
1492    
1493     + total_mem_sz = memory_limit ? memory_limit : memblock_phys_mem_size();
1494     /* use common parsing */
1495     - ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
1496     + ret = parse_crashkernel(boot_command_line, total_mem_sz,
1497     &crash_size, &crash_base);
1498     if (ret == 0 && crash_size > 0) {
1499     crashk_res.start = crash_base;
1500     @@ -177,6 +178,7 @@ void __init reserve_crashkernel(void)
1501     /* Crash kernel trumps memory limit */
1502     if (memory_limit && memory_limit <= crashk_res.end) {
1503     memory_limit = crashk_res.end + 1;
1504     + total_mem_sz = memory_limit;
1505     printk("Adjusted memory limit for crashkernel, now 0x%llx\n",
1506     memory_limit);
1507     }
1508     @@ -185,7 +187,7 @@ void __init reserve_crashkernel(void)
1509     "for crashkernel (System RAM: %ldMB)\n",
1510     (unsigned long)(crash_size >> 20),
1511     (unsigned long)(crashk_res.start >> 20),
1512     - (unsigned long)(memblock_phys_mem_size() >> 20));
1513     + (unsigned long)(total_mem_sz >> 20));
1514    
1515     if (!memblock_is_region_memory(crashk_res.start, crash_size) ||
1516     memblock_reserve(crashk_res.start, crash_size)) {
1517     diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
1518     index 639ceae7da9d..bd0c258a1d5d 100644
1519     --- a/arch/powerpc/kernel/process.c
1520     +++ b/arch/powerpc/kernel/process.c
1521     @@ -1218,29 +1218,31 @@ struct task_struct *__switch_to(struct task_struct *prev,
1522     static void show_instructions(struct pt_regs *regs)
1523     {
1524     int i;
1525     + unsigned long nip = regs->nip;
1526     unsigned long pc = regs->nip - (NR_INSN_TO_PRINT * 3 / 4 * sizeof(int));
1527    
1528     printk("Instruction dump:");
1529    
1530     + /*
1531     + * If we were executing with the MMU off for instructions, adjust pc
1532     + * rather than printing XXXXXXXX.
1533     + */
1534     + if (!IS_ENABLED(CONFIG_BOOKE) && !(regs->msr & MSR_IR)) {
1535     + pc = (unsigned long)phys_to_virt(pc);
1536     + nip = (unsigned long)phys_to_virt(regs->nip);
1537     + }
1538     +
1539     for (i = 0; i < NR_INSN_TO_PRINT; i++) {
1540     int instr;
1541    
1542     if (!(i % 8))
1543     pr_cont("\n");
1544    
1545     -#if !defined(CONFIG_BOOKE)
1546     - /* If executing with the IMMU off, adjust pc rather
1547     - * than print XXXXXXXX.
1548     - */
1549     - if (!(regs->msr & MSR_IR))
1550     - pc = (unsigned long)phys_to_virt(pc);
1551     -#endif
1552     -
1553     if (!__kernel_text_address(pc) ||
1554     probe_kernel_address((const void *)pc, instr)) {
1555     pr_cont("XXXXXXXX ");
1556     } else {
1557     - if (regs->nip == pc)
1558     + if (nip == pc)
1559     pr_cont("<%08x> ", instr);
1560     else
1561     pr_cont("%08x ", instr);
1562     diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
1563     index 2d415c36a61d..43b56f8f6beb 100644
1564     --- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
1565     +++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
1566     @@ -353,7 +353,13 @@ static struct kmem_cache *kvm_pmd_cache;
1567    
1568     static pte_t *kvmppc_pte_alloc(void)
1569     {
1570     - return kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);
1571     + pte_t *pte;
1572     +
1573     + pte = kmem_cache_alloc(kvm_pte_cache, GFP_KERNEL);
1574     + /* pmd_populate() will only reference _pa(pte). */
1575     + kmemleak_ignore(pte);
1576     +
1577     + return pte;
1578     }
1579    
1580     static void kvmppc_pte_free(pte_t *ptep)
1581     @@ -363,7 +369,13 @@ static void kvmppc_pte_free(pte_t *ptep)
1582    
1583     static pmd_t *kvmppc_pmd_alloc(void)
1584     {
1585     - return kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);
1586     + pmd_t *pmd;
1587     +
1588     + pmd = kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL);
1589     + /* pud_populate() will only reference _pa(pmd). */
1590     + kmemleak_ignore(pmd);
1591     +
1592     + return pmd;
1593     }
1594    
1595     static void kvmppc_pmd_free(pmd_t *pmdp)
1596     diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
1597     index 5834db0a54c6..03b947429e4d 100644
1598     --- a/arch/powerpc/kvm/book3s_64_vio.c
1599     +++ b/arch/powerpc/kvm/book3s_64_vio.c
1600     @@ -74,6 +74,7 @@ extern void kvm_spapr_tce_release_iommu_group(struct kvm *kvm,
1601     struct kvmppc_spapr_tce_iommu_table *stit, *tmp;
1602     struct iommu_table_group *table_group = NULL;
1603    
1604     + rcu_read_lock();
1605     list_for_each_entry_rcu(stt, &kvm->arch.spapr_tce_tables, list) {
1606    
1607     table_group = iommu_group_get_iommudata(grp);
1608     @@ -88,7 +89,9 @@ extern void kvm_spapr_tce_release_iommu_group(struct kvm *kvm,
1609     kref_put(&stit->kref, kvm_spapr_tce_liobn_put);
1610     }
1611     }
1612     + cond_resched_rcu();
1613     }
1614     + rcu_read_unlock();
1615     }
1616    
1617     extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
1618     @@ -106,12 +109,14 @@ extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
1619     if (!f.file)
1620     return -EBADF;
1621    
1622     + rcu_read_lock();
1623     list_for_each_entry_rcu(stt, &kvm->arch.spapr_tce_tables, list) {
1624     if (stt == f.file->private_data) {
1625     found = true;
1626     break;
1627     }
1628     }
1629     + rcu_read_unlock();
1630    
1631     fdput(f);
1632    
1633     @@ -144,6 +149,7 @@ extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
1634     if (!tbl)
1635     return -EINVAL;
1636    
1637     + rcu_read_lock();
1638     list_for_each_entry_rcu(stit, &stt->iommu_tables, next) {
1639     if (tbl != stit->tbl)
1640     continue;
1641     @@ -151,14 +157,17 @@ extern long kvm_spapr_tce_attach_iommu_group(struct kvm *kvm, int tablefd,
1642     if (!kref_get_unless_zero(&stit->kref)) {
1643     /* stit is being destroyed */
1644     iommu_tce_table_put(tbl);
1645     + rcu_read_unlock();
1646     return -ENOTTY;
1647     }
1648     /*
1649     * The table is already known to this KVM, we just increased
1650     * its KVM reference counter and can return.
1651     */
1652     + rcu_read_unlock();
1653     return 0;
1654     }
1655     + rcu_read_unlock();
1656    
1657     stit = kzalloc(sizeof(*stit), GFP_KERNEL);
1658     if (!stit) {
1659     @@ -364,18 +373,19 @@ static long kvmppc_tce_validate(struct kvmppc_spapr_tce_table *stt,
1660     if (kvmppc_tce_to_ua(stt->kvm, tce, &ua))
1661     return H_TOO_HARD;
1662    
1663     + rcu_read_lock();
1664     list_for_each_entry_rcu(stit, &stt->iommu_tables, next) {
1665     unsigned long hpa = 0;
1666     struct mm_iommu_table_group_mem_t *mem;
1667     long shift = stit->tbl->it_page_shift;
1668    
1669     mem = mm_iommu_lookup(stt->kvm->mm, ua, 1ULL << shift);
1670     - if (!mem)
1671     - return H_TOO_HARD;
1672     -
1673     - if (mm_iommu_ua_to_hpa(mem, ua, shift, &hpa))
1674     + if (!mem || mm_iommu_ua_to_hpa(mem, ua, shift, &hpa)) {
1675     + rcu_read_unlock();
1676     return H_TOO_HARD;
1677     + }
1678     }
1679     + rcu_read_unlock();
1680    
1681     return H_SUCCESS;
1682     }
1683     diff --git a/arch/powerpc/mm/book3s32/mmu.c b/arch/powerpc/mm/book3s32/mmu.c
1684     index 84d5fab94f8f..1424a120710e 100644
1685     --- a/arch/powerpc/mm/book3s32/mmu.c
1686     +++ b/arch/powerpc/mm/book3s32/mmu.c
1687     @@ -187,6 +187,7 @@ void mmu_mark_initmem_nx(void)
1688     int i;
1689     unsigned long base = (unsigned long)_stext - PAGE_OFFSET;
1690     unsigned long top = (unsigned long)_etext - PAGE_OFFSET;
1691     + unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET;
1692     unsigned long size;
1693    
1694     if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
1695     @@ -201,9 +202,10 @@ void mmu_mark_initmem_nx(void)
1696     size = block_size(base, top);
1697     size = max(size, 128UL << 10);
1698     if ((top - base) > size) {
1699     - if (strict_kernel_rwx_enabled())
1700     - pr_warn("Kernel _etext not properly aligned\n");
1701     size <<= 1;
1702     + if (strict_kernel_rwx_enabled() && base + size > border)
1703     + pr_warn("Some RW data is getting mapped X. "
1704     + "Adjust CONFIG_DATA_SHIFT to avoid that.\n");
1705     }
1706     setibat(i++, PAGE_OFFSET + base, base, size, PAGE_KERNEL_TEXT);
1707     base += size;
1708     diff --git a/arch/powerpc/mm/ptdump/shared.c b/arch/powerpc/mm/ptdump/shared.c
1709     index f7ed2f187cb0..784f8df17f73 100644
1710     --- a/arch/powerpc/mm/ptdump/shared.c
1711     +++ b/arch/powerpc/mm/ptdump/shared.c
1712     @@ -30,6 +30,11 @@ static const struct flag_info flag_array[] = {
1713     .val = _PAGE_PRESENT,
1714     .set = "present",
1715     .clear = " ",
1716     + }, {
1717     + .mask = _PAGE_COHERENT,
1718     + .val = _PAGE_COHERENT,
1719     + .set = "coherent",
1720     + .clear = " ",
1721     }, {
1722     .mask = _PAGE_GUARDED,
1723     .val = _PAGE_GUARDED,
1724     diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
1725     index 573e0b309c0c..48e8f4b17b91 100644
1726     --- a/arch/powerpc/perf/hv-24x7.c
1727     +++ b/arch/powerpc/perf/hv-24x7.c
1728     @@ -1400,16 +1400,6 @@ static void h_24x7_event_read(struct perf_event *event)
1729     h24x7hw = &get_cpu_var(hv_24x7_hw);
1730     h24x7hw->events[i] = event;
1731     put_cpu_var(h24x7hw);
1732     - /*
1733     - * Clear the event count so we can compute the _change_
1734     - * in the 24x7 raw counter value at the end of the txn.
1735     - *
1736     - * Note that we could alternatively read the 24x7 value
1737     - * now and save its value in event->hw.prev_count. But
1738     - * that would require issuing a hcall, which would then
1739     - * defeat the purpose of using the txn interface.
1740     - */
1741     - local64_set(&event->count, 0);
1742     }
1743    
1744     put_cpu_var(hv_24x7_reqb);
1745     diff --git a/arch/powerpc/platforms/4xx/pci.c b/arch/powerpc/platforms/4xx/pci.c
1746     index e6e2adcc7b64..c13d64c3b019 100644
1747     --- a/arch/powerpc/platforms/4xx/pci.c
1748     +++ b/arch/powerpc/platforms/4xx/pci.c
1749     @@ -1242,7 +1242,7 @@ static void __init ppc460sx_pciex_check_link(struct ppc4xx_pciex_port *port)
1750     if (mbase == NULL) {
1751     printk(KERN_ERR "%pOF: Can't map internal config space !",
1752     port->node);
1753     - goto done;
1754     + return;
1755     }
1756    
1757     while (attempt && (0 == (in_le32(mbase + PECFG_460SX_DLLSTA)
1758     @@ -1252,9 +1252,7 @@ static void __init ppc460sx_pciex_check_link(struct ppc4xx_pciex_port *port)
1759     }
1760     if (attempt)
1761     port->link = 1;
1762     -done:
1763     iounmap(mbase);
1764     -
1765     }
1766    
1767     static struct ppc4xx_pciex_hwops ppc460sx_pcie_hwops __initdata = {
1768     diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c
1769     index 423be34f0f5f..f42fe4e86ce5 100644
1770     --- a/arch/powerpc/platforms/ps3/mm.c
1771     +++ b/arch/powerpc/platforms/ps3/mm.c
1772     @@ -200,13 +200,14 @@ void ps3_mm_vas_destroy(void)
1773     {
1774     int result;
1775    
1776     - DBG("%s:%d: map.vas_id = %llu\n", __func__, __LINE__, map.vas_id);
1777     -
1778     if (map.vas_id) {
1779     result = lv1_select_virtual_address_space(0);
1780     - BUG_ON(result);
1781     - result = lv1_destruct_virtual_address_space(map.vas_id);
1782     - BUG_ON(result);
1783     + result += lv1_destruct_virtual_address_space(map.vas_id);
1784     +
1785     + if (result) {
1786     + lv1_panic(0);
1787     + }
1788     +
1789     map.vas_id = 0;
1790     }
1791     }
1792     @@ -304,19 +305,20 @@ static void ps3_mm_region_destroy(struct mem_region *r)
1793     int result;
1794    
1795     if (!r->destroy) {
1796     - pr_info("%s:%d: Not destroying high region: %llxh %llxh\n",
1797     - __func__, __LINE__, r->base, r->size);
1798     return;
1799     }
1800    
1801     - DBG("%s:%d: r->base = %llxh\n", __func__, __LINE__, r->base);
1802     -
1803     if (r->base) {
1804     result = lv1_release_memory(r->base);
1805     - BUG_ON(result);
1806     +
1807     + if (result) {
1808     + lv1_panic(0);
1809     + }
1810     +
1811     r->size = r->base = r->offset = 0;
1812     map.total = map.rm.size;
1813     }
1814     +
1815     ps3_mm_set_repository_highmem(NULL);
1816     }
1817    
1818     diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
1819     index 753adeb624f2..13ef77fd648f 100644
1820     --- a/arch/powerpc/platforms/pseries/ras.c
1821     +++ b/arch/powerpc/platforms/pseries/ras.c
1822     @@ -395,10 +395,11 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id)
1823     /*
1824     * Some versions of FWNMI place the buffer inside the 4kB page starting at
1825     * 0x7000. Other versions place it inside the rtas buffer. We check both.
1826     + * Minimum size of the buffer is 16 bytes.
1827     */
1828     #define VALID_FWNMI_BUFFER(A) \
1829     - ((((A) >= 0x7000) && ((A) < 0x7ff0)) || \
1830     - (((A) >= rtas.base) && ((A) < (rtas.base + rtas.size - 16))))
1831     + ((((A) >= 0x7000) && ((A) <= 0x8000 - 16)) || \
1832     + (((A) >= rtas.base) && ((A) <= (rtas.base + rtas.size - 16))))
1833    
1834     static inline struct rtas_error_log *fwnmi_get_errlog(void)
1835     {
1836     diff --git a/arch/s390/include/asm/syscall.h b/arch/s390/include/asm/syscall.h
1837     index f073292e9fdb..d9d5de0f67ff 100644
1838     --- a/arch/s390/include/asm/syscall.h
1839     +++ b/arch/s390/include/asm/syscall.h
1840     @@ -33,7 +33,17 @@ static inline void syscall_rollback(struct task_struct *task,
1841     static inline long syscall_get_error(struct task_struct *task,
1842     struct pt_regs *regs)
1843     {
1844     - return IS_ERR_VALUE(regs->gprs[2]) ? regs->gprs[2] : 0;
1845     + unsigned long error = regs->gprs[2];
1846     +#ifdef CONFIG_COMPAT
1847     + if (test_tsk_thread_flag(task, TIF_31BIT)) {
1848     + /*
1849     + * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
1850     + * and will match correctly in comparisons.
1851     + */
1852     + error = (long)(int)error;
1853     + }
1854     +#endif
1855     + return IS_ERR_VALUE(error) ? error : 0;
1856     }
1857    
1858     static inline long syscall_get_return_value(struct task_struct *task,
1859     diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
1860     index cc3ad64479ac..9e256d4d1f4c 100644
1861     --- a/arch/sparc/mm/srmmu.c
1862     +++ b/arch/sparc/mm/srmmu.c
1863     @@ -379,7 +379,6 @@ pgtable_t pte_alloc_one(struct mm_struct *mm)
1864     return NULL;
1865     page = pfn_to_page(__nocache_pa(pte) >> PAGE_SHIFT);
1866     if (!pgtable_pte_page_ctor(page)) {
1867     - __free_page(page);
1868     return NULL;
1869     }
1870     return page;
1871     diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
1872     index e2839b5c246c..6539c50fb9aa 100644
1873     --- a/arch/x86/boot/Makefile
1874     +++ b/arch/x86/boot/Makefile
1875     @@ -87,7 +87,7 @@ $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
1876    
1877     SETUP_OBJS = $(addprefix $(obj)/,$(setup-y))
1878    
1879     -sed-zoffset := -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|_ehead\|_text\|z_.*\)$$/\#define ZO_\2 0x\1/p'
1880     +sed-zoffset := -e 's/^\([0-9a-fA-F]*\) [a-zA-Z] \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|_ehead\|_text\|z_.*\)$$/\#define ZO_\2 0x\1/p'
1881    
1882     quiet_cmd_zoffset = ZOFFSET $@
1883     cmd_zoffset = $(NM) $< | sed -n $(sed-zoffset) > $@
1884     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
1885     index 25b8c45467fc..fce94c799f01 100644
1886     --- a/arch/x86/kernel/apic/apic.c
1887     +++ b/arch/x86/kernel/apic/apic.c
1888     @@ -2099,7 +2099,7 @@ void __init init_apic_mappings(void)
1889     unsigned int new_apicid;
1890    
1891     if (apic_validate_deadline_timer())
1892     - pr_debug("TSC deadline timer available\n");
1893     + pr_info("TSC deadline timer available\n");
1894    
1895     if (x2apic_mode) {
1896     boot_cpu_physical_apicid = read_apic_id();
1897     diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
1898     index 87ef69a72c52..7bb4c3cbf4dc 100644
1899     --- a/arch/x86/kernel/idt.c
1900     +++ b/arch/x86/kernel/idt.c
1901     @@ -318,7 +318,11 @@ void __init idt_setup_apic_and_irq_gates(void)
1902    
1903     #ifdef CONFIG_X86_LOCAL_APIC
1904     for_each_clear_bit_from(i, system_vectors, NR_VECTORS) {
1905     - set_bit(i, system_vectors);
1906     + /*
1907     + * Don't set the non assigned system vectors in the
1908     + * system_vectors bitmap. Otherwise they show up in
1909     + * /proc/interrupts.
1910     + */
1911     entry = spurious_entries_start + 8 * (i - FIRST_SYSTEM_VECTOR);
1912     set_intr_gate(i, entry);
1913     }
1914     diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
1915     index 43fc13c831af..62c39baea39e 100644
1916     --- a/arch/x86/kernel/kprobes/core.c
1917     +++ b/arch/x86/kernel/kprobes/core.c
1918     @@ -746,16 +746,11 @@ asm(
1919     NOKPROBE_SYMBOL(kretprobe_trampoline);
1920     STACK_FRAME_NON_STANDARD(kretprobe_trampoline);
1921    
1922     -static struct kprobe kretprobe_kprobe = {
1923     - .addr = (void *)kretprobe_trampoline,
1924     -};
1925     -
1926     /*
1927     * Called from kretprobe_trampoline
1928     */
1929     __used __visible void *trampoline_handler(struct pt_regs *regs)
1930     {
1931     - struct kprobe_ctlblk *kcb;
1932     struct kretprobe_instance *ri = NULL;
1933     struct hlist_head *head, empty_rp;
1934     struct hlist_node *tmp;
1935     @@ -765,16 +760,12 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
1936     void *frame_pointer;
1937     bool skipped = false;
1938    
1939     - preempt_disable();
1940     -
1941     /*
1942     * Set a dummy kprobe for avoiding kretprobe recursion.
1943     * Since kretprobe never run in kprobe handler, kprobe must not
1944     * be running at this point.
1945     */
1946     - kcb = get_kprobe_ctlblk();
1947     - __this_cpu_write(current_kprobe, &kretprobe_kprobe);
1948     - kcb->kprobe_status = KPROBE_HIT_ACTIVE;
1949     + kprobe_busy_begin();
1950    
1951     INIT_HLIST_HEAD(&empty_rp);
1952     kretprobe_hash_lock(current, &head, &flags);
1953     @@ -850,7 +841,7 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
1954     __this_cpu_write(current_kprobe, &ri->rp->kp);
1955     ri->ret_addr = correct_ret_addr;
1956     ri->rp->handler(ri, regs);
1957     - __this_cpu_write(current_kprobe, &kretprobe_kprobe);
1958     + __this_cpu_write(current_kprobe, &kprobe_busy);
1959     }
1960    
1961     recycle_rp_inst(ri, &empty_rp);
1962     @@ -866,8 +857,7 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
1963    
1964     kretprobe_hash_unlock(current, &flags);
1965    
1966     - __this_cpu_write(current_kprobe, NULL);
1967     - preempt_enable();
1968     + kprobe_busy_end();
1969    
1970     hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
1971     hlist_del(&ri->hlist);
1972     diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
1973     index fb4ee5444379..9733d1cc791d 100644
1974     --- a/arch/x86/purgatory/Makefile
1975     +++ b/arch/x86/purgatory/Makefile
1976     @@ -17,7 +17,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
1977     LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib
1978     targets += purgatory.ro
1979    
1980     +# Sanitizer, etc. runtimes are unavailable and cannot be linked here.
1981     +GCOV_PROFILE := n
1982     KASAN_SANITIZE := n
1983     +UBSAN_SANITIZE := n
1984     KCOV_INSTRUMENT := n
1985    
1986     # These are adjustments to the compiler flags used for objects that
1987     @@ -25,7 +28,7 @@ KCOV_INSTRUMENT := n
1988    
1989     PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
1990     PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss
1991     -PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN)
1992     +PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
1993    
1994     # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
1995     # in turn leaves some undefined symbols like __fentry__ in purgatory and not
1996     diff --git a/crypto/algboss.c b/crypto/algboss.c
1997     index a62149d6c839..2d41e67532c0 100644
1998     --- a/crypto/algboss.c
1999     +++ b/crypto/algboss.c
2000     @@ -188,8 +188,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
2001     if (IS_ERR(thread))
2002     goto err_put_larval;
2003    
2004     - wait_for_completion_interruptible(&larval->completion);
2005     -
2006     return NOTIFY_STOP;
2007    
2008     err_put_larval:
2009     diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
2010     index e2c8ab408bed..4c3bdffe0c3a 100644
2011     --- a/crypto/algif_skcipher.c
2012     +++ b/crypto/algif_skcipher.c
2013     @@ -74,14 +74,10 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
2014     return PTR_ERR(areq);
2015    
2016     /* convert iovecs of output buffers into RX SGL */
2017     - err = af_alg_get_rsgl(sk, msg, flags, areq, -1, &len);
2018     + err = af_alg_get_rsgl(sk, msg, flags, areq, ctx->used, &len);
2019     if (err)
2020     goto free;
2021    
2022     - /* Process only as much RX buffers for which we have TX data */
2023     - if (len > ctx->used)
2024     - len = ctx->used;
2025     -
2026     /*
2027     * If more buffers are to be expected to be processed, process only
2028     * full block size buffers.
2029     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
2030     index 581595b35573..35f75c691d7c 100644
2031     --- a/drivers/ata/libata-core.c
2032     +++ b/drivers/ata/libata-core.c
2033     @@ -41,7 +41,6 @@
2034     #include <linux/workqueue.h>
2035     #include <linux/scatterlist.h>
2036     #include <linux/io.h>
2037     -#include <linux/async.h>
2038     #include <linux/log2.h>
2039     #include <linux/slab.h>
2040     #include <linux/glob.h>
2041     @@ -6592,7 +6591,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
2042     /* perform each probe asynchronously */
2043     for (i = 0; i < host->n_ports; i++) {
2044     struct ata_port *ap = host->ports[i];
2045     - async_schedule(async_port_probe, ap);
2046     + ap->cookie = async_schedule(async_port_probe, ap);
2047     }
2048    
2049     return 0;
2050     @@ -6732,11 +6731,11 @@ void ata_host_detach(struct ata_host *host)
2051     {
2052     int i;
2053    
2054     - /* Ensure ata_port probe has completed */
2055     - async_synchronize_full();
2056     -
2057     - for (i = 0; i < host->n_ports; i++)
2058     + for (i = 0; i < host->n_ports; i++) {
2059     + /* Ensure ata_port probe has completed */
2060     + async_synchronize_cookie(host->ports[i]->cookie + 1);
2061     ata_port_detach(host->ports[i]);
2062     + }
2063    
2064     /* the host is dead now, dissociate ACPI */
2065     ata_acpi_dissociate(host);
2066     diff --git a/drivers/base/platform.c b/drivers/base/platform.c
2067     index 604a461848c9..0b67d41bab8f 100644
2068     --- a/drivers/base/platform.c
2069     +++ b/drivers/base/platform.c
2070     @@ -802,6 +802,8 @@ int __init_or_module __platform_driver_probe(struct platform_driver *drv,
2071     /* temporary section violation during probe() */
2072     drv->probe = probe;
2073     retval = code = __platform_driver_register(drv, module);
2074     + if (retval)
2075     + return retval;
2076    
2077     /*
2078     * Fixup that section violation, being paranoid about code scanning
2079     diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
2080     index c5c6487a19d5..7b55811c2a81 100644
2081     --- a/drivers/block/ps3disk.c
2082     +++ b/drivers/block/ps3disk.c
2083     @@ -454,7 +454,6 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
2084     queue->queuedata = dev;
2085    
2086     blk_queue_max_hw_sectors(queue, dev->bounce_size >> 9);
2087     - blk_queue_segment_boundary(queue, -1UL);
2088     blk_queue_dma_alignment(queue, dev->blk_size-1);
2089     blk_queue_logical_block_size(queue, dev->blk_size);
2090    
2091     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
2092     index 90f5292e2051..ac656a6d5daf 100644
2093     --- a/drivers/char/ipmi/ipmi_msghandler.c
2094     +++ b/drivers/char/ipmi/ipmi_msghandler.c
2095     @@ -33,6 +33,7 @@
2096     #include <linux/workqueue.h>
2097     #include <linux/uuid.h>
2098     #include <linux/nospec.h>
2099     +#include <linux/vmalloc.h>
2100    
2101     #define IPMI_DRIVER_VERSION "39.2"
2102    
2103     @@ -1170,7 +1171,7 @@ static void free_user_work(struct work_struct *work)
2104     remove_work);
2105    
2106     cleanup_srcu_struct(&user->release_barrier);
2107     - kfree(user);
2108     + vfree(user);
2109     }
2110    
2111     int ipmi_create_user(unsigned int if_num,
2112     @@ -1202,7 +1203,7 @@ int ipmi_create_user(unsigned int if_num,
2113     if (rv)
2114     return rv;
2115    
2116     - new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
2117     + new_user = vzalloc(sizeof(*new_user));
2118     if (!new_user)
2119     return -ENOMEM;
2120    
2121     @@ -1249,7 +1250,7 @@ int ipmi_create_user(unsigned int if_num,
2122    
2123     out_kfree:
2124     srcu_read_unlock(&ipmi_interfaces_srcu, index);
2125     - kfree(new_user);
2126     + vfree(new_user);
2127     return rv;
2128     }
2129     EXPORT_SYMBOL(ipmi_create_user);
2130     diff --git a/drivers/char/mem.c b/drivers/char/mem.c
2131     index 43dd0891ca1e..31cae88a730b 100644
2132     --- a/drivers/char/mem.c
2133     +++ b/drivers/char/mem.c
2134     @@ -31,11 +31,15 @@
2135     #include <linux/uio.h>
2136     #include <linux/uaccess.h>
2137     #include <linux/security.h>
2138     +#include <linux/pseudo_fs.h>
2139     +#include <uapi/linux/magic.h>
2140     +#include <linux/mount.h>
2141    
2142     #ifdef CONFIG_IA64
2143     # include <linux/efi.h>
2144     #endif
2145    
2146     +#define DEVMEM_MINOR 1
2147     #define DEVPORT_MINOR 4
2148    
2149     static inline unsigned long size_inside_page(unsigned long start,
2150     @@ -805,12 +809,64 @@ static loff_t memory_lseek(struct file *file, loff_t offset, int orig)
2151     return ret;
2152     }
2153    
2154     +static struct inode *devmem_inode;
2155     +
2156     +#ifdef CONFIG_IO_STRICT_DEVMEM
2157     +void revoke_devmem(struct resource *res)
2158     +{
2159     + struct inode *inode = READ_ONCE(devmem_inode);
2160     +
2161     + /*
2162     + * Check that the initialization has completed. Losing the race
2163     + * is ok because it means drivers are claiming resources before
2164     + * the fs_initcall level of init and prevent /dev/mem from
2165     + * establishing mappings.
2166     + */
2167     + if (!inode)
2168     + return;
2169     +
2170     + /*
2171     + * The expectation is that the driver has successfully marked
2172     + * the resource busy by this point, so devmem_is_allowed()
2173     + * should start returning false, however for performance this
2174     + * does not iterate the entire resource range.
2175     + */
2176     + if (devmem_is_allowed(PHYS_PFN(res->start)) &&
2177     + devmem_is_allowed(PHYS_PFN(res->end))) {
2178     + /*
2179     + * *cringe* iomem=relaxed says "go ahead, what's the
2180     + * worst that can happen?"
2181     + */
2182     + return;
2183     + }
2184     +
2185     + unmap_mapping_range(inode->i_mapping, res->start, resource_size(res), 1);
2186     +}
2187     +#endif
2188     +
2189     static int open_port(struct inode *inode, struct file *filp)
2190     {
2191     + int rc;
2192     +
2193     if (!capable(CAP_SYS_RAWIO))
2194     return -EPERM;
2195    
2196     - return security_locked_down(LOCKDOWN_DEV_MEM);
2197     + rc = security_locked_down(LOCKDOWN_DEV_MEM);
2198     + if (rc)
2199     + return rc;
2200     +
2201     + if (iminor(inode) != DEVMEM_MINOR)
2202     + return 0;
2203     +
2204     + /*
2205     + * Use a unified address space to have a single point to manage
2206     + * revocations when drivers want to take over a /dev/mem mapped
2207     + * range.
2208     + */
2209     + inode->i_mapping = devmem_inode->i_mapping;
2210     + filp->f_mapping = inode->i_mapping;
2211     +
2212     + return 0;
2213     }
2214    
2215     #define zero_lseek null_lseek
2216     @@ -885,7 +941,7 @@ static const struct memdev {
2217     fmode_t fmode;
2218     } devlist[] = {
2219     #ifdef CONFIG_DEVMEM
2220     - [1] = { "mem", 0, &mem_fops, FMODE_UNSIGNED_OFFSET },
2221     + [DEVMEM_MINOR] = { "mem", 0, &mem_fops, FMODE_UNSIGNED_OFFSET },
2222     #endif
2223     #ifdef CONFIG_DEVKMEM
2224     [2] = { "kmem", 0, &kmem_fops, FMODE_UNSIGNED_OFFSET },
2225     @@ -939,6 +995,45 @@ static char *mem_devnode(struct device *dev, umode_t *mode)
2226    
2227     static struct class *mem_class;
2228    
2229     +static int devmem_fs_init_fs_context(struct fs_context *fc)
2230     +{
2231     + return init_pseudo(fc, DEVMEM_MAGIC) ? 0 : -ENOMEM;
2232     +}
2233     +
2234     +static struct file_system_type devmem_fs_type = {
2235     + .name = "devmem",
2236     + .owner = THIS_MODULE,
2237     + .init_fs_context = devmem_fs_init_fs_context,
2238     + .kill_sb = kill_anon_super,
2239     +};
2240     +
2241     +static int devmem_init_inode(void)
2242     +{
2243     + static struct vfsmount *devmem_vfs_mount;
2244     + static int devmem_fs_cnt;
2245     + struct inode *inode;
2246     + int rc;
2247     +
2248     + rc = simple_pin_fs(&devmem_fs_type, &devmem_vfs_mount, &devmem_fs_cnt);
2249     + if (rc < 0) {
2250     + pr_err("Cannot mount /dev/mem pseudo filesystem: %d\n", rc);
2251     + return rc;
2252     + }
2253     +
2254     + inode = alloc_anon_inode(devmem_vfs_mount->mnt_sb);
2255     + if (IS_ERR(inode)) {
2256     + rc = PTR_ERR(inode);
2257     + pr_err("Cannot allocate inode for /dev/mem: %d\n", rc);
2258     + simple_release_fs(&devmem_vfs_mount, &devmem_fs_cnt);
2259     + return rc;
2260     + }
2261     +
2262     + /* publish /dev/mem initialized */
2263     + WRITE_ONCE(devmem_inode, inode);
2264     +
2265     + return 0;
2266     +}
2267     +
2268     static int __init chr_dev_init(void)
2269     {
2270     int minor;
2271     @@ -960,6 +1055,8 @@ static int __init chr_dev_init(void)
2272     */
2273     if ((minor == DEVPORT_MINOR) && !arch_has_dev_port())
2274     continue;
2275     + if ((minor == DEVMEM_MINOR) && devmem_init_inode() != 0)
2276     + continue;
2277    
2278     device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor),
2279     NULL, devlist[minor].name);
2280     diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
2281     index 802e488fd3c3..6e5d635f030f 100644
2282     --- a/drivers/clk/bcm/clk-bcm2835.c
2283     +++ b/drivers/clk/bcm/clk-bcm2835.c
2284     @@ -1448,13 +1448,13 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman,
2285     return &clock->hw;
2286     }
2287    
2288     -static struct clk *bcm2835_register_gate(struct bcm2835_cprman *cprman,
2289     +static struct clk_hw *bcm2835_register_gate(struct bcm2835_cprman *cprman,
2290     const struct bcm2835_gate_data *data)
2291     {
2292     - return clk_register_gate(cprman->dev, data->name, data->parent,
2293     - CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
2294     - cprman->regs + data->ctl_reg,
2295     - CM_GATE_BIT, 0, &cprman->regs_lock);
2296     + return clk_hw_register_gate(cprman->dev, data->name, data->parent,
2297     + CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
2298     + cprman->regs + data->ctl_reg,
2299     + CM_GATE_BIT, 0, &cprman->regs_lock);
2300     }
2301    
2302     typedef struct clk_hw *(*bcm2835_clk_register)(struct bcm2835_cprman *cprman,
2303     diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
2304     index b1318e6b655b..675cab6fa781 100644
2305     --- a/drivers/clk/clk-ast2600.c
2306     +++ b/drivers/clk/clk-ast2600.c
2307     @@ -599,14 +599,22 @@ static const u32 ast2600_a0_axi_ahb_div_table[] = {
2308     2, 2, 3, 5,
2309     };
2310    
2311     -static const u32 ast2600_a1_axi_ahb_div_table[] = {
2312     - 4, 6, 2, 4,
2313     +static const u32 ast2600_a1_axi_ahb_div0_tbl[] = {
2314     + 3, 2, 3, 4,
2315     +};
2316     +
2317     +static const u32 ast2600_a1_axi_ahb_div1_tbl[] = {
2318     + 3, 4, 6, 8,
2319     +};
2320     +
2321     +static const u32 ast2600_a1_axi_ahb200_tbl[] = {
2322     + 3, 4, 3, 4, 2, 2, 2, 2,
2323     };
2324    
2325     static void __init aspeed_g6_cc(struct regmap *map)
2326     {
2327     struct clk_hw *hw;
2328     - u32 val, div, chip_id, axi_div, ahb_div;
2329     + u32 val, div, divbits, chip_id, axi_div, ahb_div;
2330    
2331     clk_hw_register_fixed_rate(NULL, "clkin", NULL, 0, 25000000);
2332    
2333     @@ -636,11 +644,22 @@ static void __init aspeed_g6_cc(struct regmap *map)
2334     else
2335     axi_div = 2;
2336    
2337     + divbits = (val >> 11) & 0x3;
2338     regmap_read(map, ASPEED_G6_SILICON_REV, &chip_id);
2339     - if (chip_id & BIT(16))
2340     - ahb_div = ast2600_a1_axi_ahb_div_table[(val >> 11) & 0x3];
2341     - else
2342     + if (chip_id & BIT(16)) {
2343     + if (!divbits) {
2344     + ahb_div = ast2600_a1_axi_ahb200_tbl[(val >> 8) & 0x3];
2345     + if (val & BIT(16))
2346     + ahb_div *= 2;
2347     + } else {
2348     + if (val & BIT(16))
2349     + ahb_div = ast2600_a1_axi_ahb_div1_tbl[divbits];
2350     + else
2351     + ahb_div = ast2600_a1_axi_ahb_div0_tbl[divbits];
2352     + }
2353     + } else {
2354     ahb_div = ast2600_a0_axi_ahb_div_table[(val >> 11) & 0x3];
2355     + }
2356    
2357     hw = clk_hw_register_fixed_factor(NULL, "ahb", "hpll", 0, 1, axi_div * ahb_div);
2358     aspeed_g6_clk_data->hws[ASPEED_CLK_AHB] = hw;
2359     diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
2360     index 8856ce476ccf..082178a0f41a 100644
2361     --- a/drivers/clk/meson/meson8b.c
2362     +++ b/drivers/clk/meson/meson8b.c
2363     @@ -1071,7 +1071,7 @@ static struct clk_regmap meson8b_vid_pll_in_sel = {
2364     * Meson8m2: vid2_pll
2365     */
2366     .parent_hws = (const struct clk_hw *[]) {
2367     - &meson8b_hdmi_pll_dco.hw
2368     + &meson8b_hdmi_pll_lvds_out.hw
2369     },
2370     .num_parents = 1,
2371     .flags = CLK_SET_RATE_PARENT,
2372     @@ -1207,7 +1207,7 @@ static struct clk_regmap meson8b_vclk_in_en = {
2373    
2374     static struct clk_regmap meson8b_vclk_div1_gate = {
2375     .data = &(struct clk_regmap_gate_data){
2376     - .offset = HHI_VID_CLK_DIV,
2377     + .offset = HHI_VID_CLK_CNTL,
2378     .bit_idx = 0,
2379     },
2380     .hw.init = &(struct clk_init_data){
2381     @@ -1237,7 +1237,7 @@ static struct clk_fixed_factor meson8b_vclk_div2_div = {
2382    
2383     static struct clk_regmap meson8b_vclk_div2_div_gate = {
2384     .data = &(struct clk_regmap_gate_data){
2385     - .offset = HHI_VID_CLK_DIV,
2386     + .offset = HHI_VID_CLK_CNTL,
2387     .bit_idx = 1,
2388     },
2389     .hw.init = &(struct clk_init_data){
2390     @@ -1267,7 +1267,7 @@ static struct clk_fixed_factor meson8b_vclk_div4_div = {
2391    
2392     static struct clk_regmap meson8b_vclk_div4_div_gate = {
2393     .data = &(struct clk_regmap_gate_data){
2394     - .offset = HHI_VID_CLK_DIV,
2395     + .offset = HHI_VID_CLK_CNTL,
2396     .bit_idx = 2,
2397     },
2398     .hw.init = &(struct clk_init_data){
2399     @@ -1297,7 +1297,7 @@ static struct clk_fixed_factor meson8b_vclk_div6_div = {
2400    
2401     static struct clk_regmap meson8b_vclk_div6_div_gate = {
2402     .data = &(struct clk_regmap_gate_data){
2403     - .offset = HHI_VID_CLK_DIV,
2404     + .offset = HHI_VID_CLK_CNTL,
2405     .bit_idx = 3,
2406     },
2407     .hw.init = &(struct clk_init_data){
2408     @@ -1327,7 +1327,7 @@ static struct clk_fixed_factor meson8b_vclk_div12_div = {
2409    
2410     static struct clk_regmap meson8b_vclk_div12_div_gate = {
2411     .data = &(struct clk_regmap_gate_data){
2412     - .offset = HHI_VID_CLK_DIV,
2413     + .offset = HHI_VID_CLK_CNTL,
2414     .bit_idx = 4,
2415     },
2416     .hw.init = &(struct clk_init_data){
2417     @@ -1910,6 +1910,13 @@ static struct clk_regmap meson8b_mali = {
2418     },
2419     };
2420    
2421     +static const struct reg_sequence meson8m2_gp_pll_init_regs[] = {
2422     + { .reg = HHI_GP_PLL_CNTL2, .def = 0x59c88000 },
2423     + { .reg = HHI_GP_PLL_CNTL3, .def = 0xca463823 },
2424     + { .reg = HHI_GP_PLL_CNTL4, .def = 0x0286a027 },
2425     + { .reg = HHI_GP_PLL_CNTL5, .def = 0x00003000 },
2426     +};
2427     +
2428     static const struct pll_params_table meson8m2_gp_pll_params_table[] = {
2429     PLL_PARAMS(182, 3),
2430     { /* sentinel */ },
2431     @@ -1943,6 +1950,8 @@ static struct clk_regmap meson8m2_gp_pll_dco = {
2432     .width = 1,
2433     },
2434     .table = meson8m2_gp_pll_params_table,
2435     + .init_regs = meson8m2_gp_pll_init_regs,
2436     + .init_count = ARRAY_SIZE(meson8m2_gp_pll_init_regs),
2437     },
2438     .hw.init = &(struct clk_init_data){
2439     .name = "gp_pll_dco",
2440     @@ -3491,54 +3500,87 @@ static struct clk_regmap *const meson8b_clk_regmaps[] = {
2441     static const struct meson8b_clk_reset_line {
2442     u32 reg;
2443     u8 bit_idx;
2444     + bool active_low;
2445     } meson8b_clk_reset_bits[] = {
2446     [CLKC_RESET_L2_CACHE_SOFT_RESET] = {
2447     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 30
2448     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2449     + .bit_idx = 30,
2450     + .active_low = false,
2451     },
2452     [CLKC_RESET_AXI_64_TO_128_BRIDGE_A5_SOFT_RESET] = {
2453     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 29
2454     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2455     + .bit_idx = 29,
2456     + .active_low = false,
2457     },
2458     [CLKC_RESET_SCU_SOFT_RESET] = {
2459     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 28
2460     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2461     + .bit_idx = 28,
2462     + .active_low = false,
2463     },
2464     [CLKC_RESET_CPU3_SOFT_RESET] = {
2465     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 27
2466     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2467     + .bit_idx = 27,
2468     + .active_low = false,
2469     },
2470     [CLKC_RESET_CPU2_SOFT_RESET] = {
2471     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 26
2472     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2473     + .bit_idx = 26,
2474     + .active_low = false,
2475     },
2476     [CLKC_RESET_CPU1_SOFT_RESET] = {
2477     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 25
2478     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2479     + .bit_idx = 25,
2480     + .active_low = false,
2481     },
2482     [CLKC_RESET_CPU0_SOFT_RESET] = {
2483     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 24
2484     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2485     + .bit_idx = 24,
2486     + .active_low = false,
2487     },
2488     [CLKC_RESET_A5_GLOBAL_RESET] = {
2489     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 18
2490     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2491     + .bit_idx = 18,
2492     + .active_low = false,
2493     },
2494     [CLKC_RESET_A5_AXI_SOFT_RESET] = {
2495     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 17
2496     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2497     + .bit_idx = 17,
2498     + .active_low = false,
2499     },
2500     [CLKC_RESET_A5_ABP_SOFT_RESET] = {
2501     - .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 16
2502     + .reg = HHI_SYS_CPU_CLK_CNTL0,
2503     + .bit_idx = 16,
2504     + .active_low = false,
2505     },
2506     [CLKC_RESET_AXI_64_TO_128_BRIDGE_MMC_SOFT_RESET] = {
2507     - .reg = HHI_SYS_CPU_CLK_CNTL1, .bit_idx = 30
2508     + .reg = HHI_SYS_CPU_CLK_CNTL1,
2509     + .bit_idx = 30,
2510     + .active_low = false,
2511     },
2512     [CLKC_RESET_VID_CLK_CNTL_SOFT_RESET] = {
2513     - .reg = HHI_VID_CLK_CNTL, .bit_idx = 15
2514     + .reg = HHI_VID_CLK_CNTL,
2515     + .bit_idx = 15,
2516     + .active_low = false,
2517     },
2518     [CLKC_RESET_VID_DIVIDER_CNTL_SOFT_RESET_POST] = {
2519     - .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 7
2520     + .reg = HHI_VID_DIVIDER_CNTL,
2521     + .bit_idx = 7,
2522     + .active_low = false,
2523     },
2524     [CLKC_RESET_VID_DIVIDER_CNTL_SOFT_RESET_PRE] = {
2525     - .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 3
2526     + .reg = HHI_VID_DIVIDER_CNTL,
2527     + .bit_idx = 3,
2528     + .active_low = false,
2529     },
2530     [CLKC_RESET_VID_DIVIDER_CNTL_RESET_N_POST] = {
2531     - .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 1
2532     + .reg = HHI_VID_DIVIDER_CNTL,
2533     + .bit_idx = 1,
2534     + .active_low = true,
2535     },
2536     [CLKC_RESET_VID_DIVIDER_CNTL_RESET_N_PRE] = {
2537     - .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 0
2538     + .reg = HHI_VID_DIVIDER_CNTL,
2539     + .bit_idx = 0,
2540     + .active_low = true,
2541     },
2542     };
2543    
2544     @@ -3547,22 +3589,22 @@ static int meson8b_clk_reset_update(struct reset_controller_dev *rcdev,
2545     {
2546     struct meson8b_clk_reset *meson8b_clk_reset =
2547     container_of(rcdev, struct meson8b_clk_reset, reset);
2548     - unsigned long flags;
2549     const struct meson8b_clk_reset_line *reset;
2550     + unsigned int value = 0;
2551     + unsigned long flags;
2552    
2553     if (id >= ARRAY_SIZE(meson8b_clk_reset_bits))
2554     return -EINVAL;
2555    
2556     reset = &meson8b_clk_reset_bits[id];
2557    
2558     + if (assert != reset->active_low)
2559     + value = BIT(reset->bit_idx);
2560     +
2561     spin_lock_irqsave(&meson_clk_lock, flags);
2562    
2563     - if (assert)
2564     - regmap_update_bits(meson8b_clk_reset->regmap, reset->reg,
2565     - BIT(reset->bit_idx), BIT(reset->bit_idx));
2566     - else
2567     - regmap_update_bits(meson8b_clk_reset->regmap, reset->reg,
2568     - BIT(reset->bit_idx), 0);
2569     + regmap_update_bits(meson8b_clk_reset->regmap, reset->reg,
2570     + BIT(reset->bit_idx), value);
2571    
2572     spin_unlock_irqrestore(&meson_clk_lock, flags);
2573    
2574     diff --git a/drivers/clk/meson/meson8b.h b/drivers/clk/meson/meson8b.h
2575     index c889fbeec30f..c91fb07fcb65 100644
2576     --- a/drivers/clk/meson/meson8b.h
2577     +++ b/drivers/clk/meson/meson8b.h
2578     @@ -20,6 +20,10 @@
2579     * [0] http://dn.odroid.com/S805/Datasheet/S805_Datasheet%20V0.8%2020150126.pdf
2580     */
2581     #define HHI_GP_PLL_CNTL 0x40 /* 0x10 offset in data sheet */
2582     +#define HHI_GP_PLL_CNTL2 0x44 /* 0x11 offset in data sheet */
2583     +#define HHI_GP_PLL_CNTL3 0x48 /* 0x12 offset in data sheet */
2584     +#define HHI_GP_PLL_CNTL4 0x4C /* 0x13 offset in data sheet */
2585     +#define HHI_GP_PLL_CNTL5 0x50 /* 0x14 offset in data sheet */
2586     #define HHI_VIID_CLK_DIV 0x128 /* 0x4a offset in data sheet */
2587     #define HHI_VIID_CLK_CNTL 0x12c /* 0x4b offset in data sheet */
2588     #define HHI_GCLK_MPEG0 0x140 /* 0x50 offset in data sheet */
2589     diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
2590     index 4e329a7baf2b..17e4a5a2a9fd 100644
2591     --- a/drivers/clk/qcom/gcc-msm8916.c
2592     +++ b/drivers/clk/qcom/gcc-msm8916.c
2593     @@ -260,7 +260,7 @@ static struct clk_pll gpll0 = {
2594     .l_reg = 0x21004,
2595     .m_reg = 0x21008,
2596     .n_reg = 0x2100c,
2597     - .config_reg = 0x21014,
2598     + .config_reg = 0x21010,
2599     .mode_reg = 0x21000,
2600     .status_reg = 0x2101c,
2601     .status_bit = 17,
2602     @@ -287,7 +287,7 @@ static struct clk_pll gpll1 = {
2603     .l_reg = 0x20004,
2604     .m_reg = 0x20008,
2605     .n_reg = 0x2000c,
2606     - .config_reg = 0x20014,
2607     + .config_reg = 0x20010,
2608     .mode_reg = 0x20000,
2609     .status_reg = 0x2001c,
2610     .status_bit = 17,
2611     @@ -314,7 +314,7 @@ static struct clk_pll gpll2 = {
2612     .l_reg = 0x4a004,
2613     .m_reg = 0x4a008,
2614     .n_reg = 0x4a00c,
2615     - .config_reg = 0x4a014,
2616     + .config_reg = 0x4a010,
2617     .mode_reg = 0x4a000,
2618     .status_reg = 0x4a01c,
2619     .status_bit = 17,
2620     @@ -341,7 +341,7 @@ static struct clk_pll bimc_pll = {
2621     .l_reg = 0x23004,
2622     .m_reg = 0x23008,
2623     .n_reg = 0x2300c,
2624     - .config_reg = 0x23014,
2625     + .config_reg = 0x23010,
2626     .mode_reg = 0x23000,
2627     .status_reg = 0x2301c,
2628     .status_bit = 17,
2629     diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
2630     index 132cc96895e3..6f9612c169af 100644
2631     --- a/drivers/clk/renesas/renesas-cpg-mssr.c
2632     +++ b/drivers/clk/renesas/renesas-cpg-mssr.c
2633     @@ -800,7 +800,8 @@ static int cpg_mssr_suspend_noirq(struct device *dev)
2634     /* Save module registers with bits under our control */
2635     for (reg = 0; reg < ARRAY_SIZE(priv->smstpcr_saved); reg++) {
2636     if (priv->smstpcr_saved[reg].mask)
2637     - priv->smstpcr_saved[reg].val =
2638     + priv->smstpcr_saved[reg].val = priv->stbyctrl ?
2639     + readb(priv->base + STBCR(reg)) :
2640     readl(priv->base + SMSTPCR(reg));
2641     }
2642    
2643     @@ -860,8 +861,9 @@ static int cpg_mssr_resume_noirq(struct device *dev)
2644     }
2645    
2646     if (!i)
2647     - dev_warn(dev, "Failed to enable SMSTP %p[0x%x]\n",
2648     - priv->base + SMSTPCR(reg), oldval & mask);
2649     + dev_warn(dev, "Failed to enable %s%u[0x%x]\n",
2650     + priv->stbyctrl ? "STB" : "SMSTP", reg,
2651     + oldval & mask);
2652     }
2653    
2654     return 0;
2655     diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
2656     index 27fd274e92f8..dfef5f0833db 100644
2657     --- a/drivers/clk/samsung/clk-exynos5420.c
2658     +++ b/drivers/clk/samsung/clk-exynos5420.c
2659     @@ -540,7 +540,7 @@ static const struct samsung_div_clock exynos5800_div_clks[] __initconst = {
2660    
2661     static const struct samsung_gate_clock exynos5800_gate_clks[] __initconst = {
2662     GATE(CLK_ACLK550_CAM, "aclk550_cam", "mout_user_aclk550_cam",
2663     - GATE_BUS_TOP, 24, 0, 0),
2664     + GATE_BUS_TOP, 24, CLK_IS_CRITICAL, 0),
2665     GATE(CLK_ACLK432_SCALER, "aclk432_scaler", "mout_user_aclk432_scaler",
2666     GATE_BUS_TOP, 27, CLK_IS_CRITICAL, 0),
2667     };
2668     @@ -940,25 +940,25 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
2669     GATE(0, "aclk300_jpeg", "mout_user_aclk300_jpeg",
2670     GATE_BUS_TOP, 4, CLK_IGNORE_UNUSED, 0),
2671     GATE(0, "aclk333_432_isp0", "mout_user_aclk333_432_isp0",
2672     - GATE_BUS_TOP, 5, 0, 0),
2673     + GATE_BUS_TOP, 5, CLK_IS_CRITICAL, 0),
2674     GATE(0, "aclk300_gscl", "mout_user_aclk300_gscl",
2675     GATE_BUS_TOP, 6, CLK_IS_CRITICAL, 0),
2676     GATE(0, "aclk333_432_gscl", "mout_user_aclk333_432_gscl",
2677     GATE_BUS_TOP, 7, CLK_IGNORE_UNUSED, 0),
2678     GATE(0, "aclk333_432_isp", "mout_user_aclk333_432_isp",
2679     - GATE_BUS_TOP, 8, 0, 0),
2680     + GATE_BUS_TOP, 8, CLK_IS_CRITICAL, 0),
2681     GATE(CLK_PCLK66_GPIO, "pclk66_gpio", "mout_user_pclk66_gpio",
2682     GATE_BUS_TOP, 9, CLK_IGNORE_UNUSED, 0),
2683     GATE(0, "aclk66_psgen", "mout_user_aclk66_psgen",
2684     GATE_BUS_TOP, 10, CLK_IGNORE_UNUSED, 0),
2685     GATE(0, "aclk266_isp", "mout_user_aclk266_isp",
2686     - GATE_BUS_TOP, 13, 0, 0),
2687     + GATE_BUS_TOP, 13, CLK_IS_CRITICAL, 0),
2688     GATE(0, "aclk166", "mout_user_aclk166",
2689     GATE_BUS_TOP, 14, CLK_IGNORE_UNUSED, 0),
2690     GATE(CLK_ACLK333, "aclk333", "mout_user_aclk333",
2691     GATE_BUS_TOP, 15, CLK_IS_CRITICAL, 0),
2692     GATE(0, "aclk400_isp", "mout_user_aclk400_isp",
2693     - GATE_BUS_TOP, 16, 0, 0),
2694     + GATE_BUS_TOP, 16, CLK_IS_CRITICAL, 0),
2695     GATE(0, "aclk400_mscl", "mout_user_aclk400_mscl",
2696     GATE_BUS_TOP, 17, CLK_IS_CRITICAL, 0),
2697     GATE(0, "aclk200_disp1", "mout_user_aclk200_disp1",
2698     @@ -1158,8 +1158,10 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
2699     GATE_IP_GSCL1, 3, 0, 0),
2700     GATE(CLK_SMMU_FIMCL1, "smmu_fimcl1", "dout_gscl_blk_333",
2701     GATE_IP_GSCL1, 4, 0, 0),
2702     - GATE(CLK_GSCL_WA, "gscl_wa", "sclk_gscl_wa", GATE_IP_GSCL1, 12, 0, 0),
2703     - GATE(CLK_GSCL_WB, "gscl_wb", "sclk_gscl_wb", GATE_IP_GSCL1, 13, 0, 0),
2704     + GATE(CLK_GSCL_WA, "gscl_wa", "sclk_gscl_wa", GATE_IP_GSCL1, 12,
2705     + CLK_IS_CRITICAL, 0),
2706     + GATE(CLK_GSCL_WB, "gscl_wb", "sclk_gscl_wb", GATE_IP_GSCL1, 13,
2707     + CLK_IS_CRITICAL, 0),
2708     GATE(CLK_SMMU_FIMCL3, "smmu_fimcl3,", "dout_gscl_blk_333",
2709     GATE_IP_GSCL1, 16, 0, 0),
2710     GATE(CLK_FIMC_LITE3, "fimc_lite3", "aclk333_432_gscl",
2711     diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
2712     index 4b1aa9382ad2..6f29ecd0442e 100644
2713     --- a/drivers/clk/samsung/clk-exynos5433.c
2714     +++ b/drivers/clk/samsung/clk-exynos5433.c
2715     @@ -1706,7 +1706,8 @@ static const struct samsung_gate_clock peric_gate_clks[] __initconst = {
2716     GATE(CLK_SCLK_PCM1, "sclk_pcm1", "sclk_pcm1_peric",
2717     ENABLE_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
2718     GATE(CLK_SCLK_I2S1, "sclk_i2s1", "sclk_i2s1_peric",
2719     - ENABLE_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
2720     + ENABLE_SCLK_PERIC, 6,
2721     + CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
2722     GATE(CLK_SCLK_SPI2, "sclk_spi2", "sclk_spi2_peric", ENABLE_SCLK_PERIC,
2723     5, CLK_SET_RATE_PARENT, 0),
2724     GATE(CLK_SCLK_SPI1, "sclk_spi1", "sclk_spi1_peric", ENABLE_SCLK_PERIC,
2725     diff --git a/drivers/clk/sprd/pll.c b/drivers/clk/sprd/pll.c
2726     index 640270f51aa5..eb8862752c2b 100644
2727     --- a/drivers/clk/sprd/pll.c
2728     +++ b/drivers/clk/sprd/pll.c
2729     @@ -105,7 +105,7 @@ static unsigned long _sprd_pll_recalc_rate(const struct sprd_pll *pll,
2730    
2731     cfg = kcalloc(regs_num, sizeof(*cfg), GFP_KERNEL);
2732     if (!cfg)
2733     - return -ENOMEM;
2734     + return parent_rate;
2735    
2736     for (i = 0; i < regs_num; i++)
2737     cfg[i] = sprd_pll_read(pll, i);
2738     diff --git a/drivers/clk/st/clk-flexgen.c b/drivers/clk/st/clk-flexgen.c
2739     index 4413b6e04a8e..55873d4b7603 100644
2740     --- a/drivers/clk/st/clk-flexgen.c
2741     +++ b/drivers/clk/st/clk-flexgen.c
2742     @@ -375,6 +375,7 @@ static void __init st_of_flexgen_setup(struct device_node *np)
2743     break;
2744     }
2745    
2746     + flex_flags &= ~CLK_IS_CRITICAL;
2747     of_clk_detect_critical(np, i, &flex_flags);
2748    
2749     /*
2750     diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
2751     index 27201fd26e44..e1aa1fbac48a 100644
2752     --- a/drivers/clk/sunxi/clk-sunxi.c
2753     +++ b/drivers/clk/sunxi/clk-sunxi.c
2754     @@ -90,7 +90,7 @@ static void sun6i_a31_get_pll1_factors(struct factors_request *req)
2755     * Round down the frequency to the closest multiple of either
2756     * 6 or 16
2757     */
2758     - u32 round_freq_6 = round_down(freq_mhz, 6);
2759     + u32 round_freq_6 = rounddown(freq_mhz, 6);
2760     u32 round_freq_16 = round_down(freq_mhz, 16);
2761    
2762     if (round_freq_6 > round_freq_16)
2763     diff --git a/drivers/clk/ti/composite.c b/drivers/clk/ti/composite.c
2764     index 6a89936ba03a..eaa43575cfa5 100644
2765     --- a/drivers/clk/ti/composite.c
2766     +++ b/drivers/clk/ti/composite.c
2767     @@ -196,6 +196,7 @@ cleanup:
2768     if (!cclk->comp_clks[i])
2769     continue;
2770     list_del(&cclk->comp_clks[i]->link);
2771     + kfree(cclk->comp_clks[i]->parent_names);
2772     kfree(cclk->comp_clks[i]);
2773     }
2774    
2775     diff --git a/drivers/clk/zynqmp/clkc.c b/drivers/clk/zynqmp/clkc.c
2776     index a11f93ecbf34..6f057ab9df03 100644
2777     --- a/drivers/clk/zynqmp/clkc.c
2778     +++ b/drivers/clk/zynqmp/clkc.c
2779     @@ -558,7 +558,7 @@ static struct clk_hw *zynqmp_register_clk_topology(int clk_id, char *clk_name,
2780     {
2781     int j;
2782     u32 num_nodes, clk_dev_id;
2783     - char *clk_out = NULL;
2784     + char *clk_out[MAX_NODES];
2785     struct clock_topology *nodes;
2786     struct clk_hw *hw = NULL;
2787    
2788     @@ -572,16 +572,16 @@ static struct clk_hw *zynqmp_register_clk_topology(int clk_id, char *clk_name,
2789     * Intermediate clock names are postfixed with type of clock.
2790     */
2791     if (j != (num_nodes - 1)) {
2792     - clk_out = kasprintf(GFP_KERNEL, "%s%s", clk_name,
2793     + clk_out[j] = kasprintf(GFP_KERNEL, "%s%s", clk_name,
2794     clk_type_postfix[nodes[j].type]);
2795     } else {
2796     - clk_out = kasprintf(GFP_KERNEL, "%s", clk_name);
2797     + clk_out[j] = kasprintf(GFP_KERNEL, "%s", clk_name);
2798     }
2799    
2800     if (!clk_topology[nodes[j].type])
2801     continue;
2802    
2803     - hw = (*clk_topology[nodes[j].type])(clk_out, clk_dev_id,
2804     + hw = (*clk_topology[nodes[j].type])(clk_out[j], clk_dev_id,
2805     parent_names,
2806     num_parents,
2807     &nodes[j]);
2808     @@ -590,9 +590,12 @@ static struct clk_hw *zynqmp_register_clk_topology(int clk_id, char *clk_name,
2809     __func__, clk_dev_id, clk_name,
2810     PTR_ERR(hw));
2811    
2812     - parent_names[0] = clk_out;
2813     + parent_names[0] = clk_out[j];
2814     }
2815     - kfree(clk_out);
2816     +
2817     + for (j = 0; j < num_nodes; j++)
2818     + kfree(clk_out[j]);
2819     +
2820     return hw;
2821     }
2822    
2823     diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
2824     index ac80bc6af093..aba5db3c0588 100644
2825     --- a/drivers/crypto/omap-sham.c
2826     +++ b/drivers/crypto/omap-sham.c
2827     @@ -165,8 +165,6 @@ struct omap_sham_hmac_ctx {
2828     };
2829    
2830     struct omap_sham_ctx {
2831     - struct omap_sham_dev *dd;
2832     -
2833     unsigned long flags;
2834    
2835     /* fallback stuff */
2836     @@ -918,27 +916,35 @@ static int omap_sham_update_dma_stop(struct omap_sham_dev *dd)
2837     return 0;
2838     }
2839    
2840     +struct omap_sham_dev *omap_sham_find_dev(struct omap_sham_reqctx *ctx)
2841     +{
2842     + struct omap_sham_dev *dd;
2843     +
2844     + if (ctx->dd)
2845     + return ctx->dd;
2846     +
2847     + spin_lock_bh(&sham.lock);
2848     + dd = list_first_entry(&sham.dev_list, struct omap_sham_dev, list);
2849     + list_move_tail(&dd->list, &sham.dev_list);
2850     + ctx->dd = dd;
2851     + spin_unlock_bh(&sham.lock);
2852     +
2853     + return dd;
2854     +}
2855     +
2856     static int omap_sham_init(struct ahash_request *req)
2857     {
2858     struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
2859     struct omap_sham_ctx *tctx = crypto_ahash_ctx(tfm);
2860     struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
2861     - struct omap_sham_dev *dd = NULL, *tmp;
2862     + struct omap_sham_dev *dd;
2863     int bs = 0;
2864    
2865     - spin_lock_bh(&sham.lock);
2866     - if (!tctx->dd) {
2867     - list_for_each_entry(tmp, &sham.dev_list, list) {
2868     - dd = tmp;
2869     - break;
2870     - }
2871     - tctx->dd = dd;
2872     - } else {
2873     - dd = tctx->dd;
2874     - }
2875     - spin_unlock_bh(&sham.lock);
2876     + ctx->dd = NULL;
2877    
2878     - ctx->dd = dd;
2879     + dd = omap_sham_find_dev(ctx);
2880     + if (!dd)
2881     + return -ENODEV;
2882    
2883     ctx->flags = 0;
2884    
2885     @@ -1187,8 +1193,7 @@ err1:
2886     static int omap_sham_enqueue(struct ahash_request *req, unsigned int op)
2887     {
2888     struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
2889     - struct omap_sham_ctx *tctx = crypto_tfm_ctx(req->base.tfm);
2890     - struct omap_sham_dev *dd = tctx->dd;
2891     + struct omap_sham_dev *dd = ctx->dd;
2892    
2893     ctx->op = op;
2894    
2895     @@ -1198,7 +1203,7 @@ static int omap_sham_enqueue(struct ahash_request *req, unsigned int op)
2896     static int omap_sham_update(struct ahash_request *req)
2897     {
2898     struct omap_sham_reqctx *ctx = ahash_request_ctx(req);
2899     - struct omap_sham_dev *dd = ctx->dd;
2900     + struct omap_sham_dev *dd = omap_sham_find_dev(ctx);
2901    
2902     if (!req->nbytes)
2903     return 0;
2904     @@ -1302,21 +1307,8 @@ static int omap_sham_setkey(struct crypto_ahash *tfm, const u8 *key,
2905     struct omap_sham_hmac_ctx *bctx = tctx->base;
2906     int bs = crypto_shash_blocksize(bctx->shash);
2907     int ds = crypto_shash_digestsize(bctx->shash);
2908     - struct omap_sham_dev *dd = NULL, *tmp;
2909     int err, i;
2910    
2911     - spin_lock_bh(&sham.lock);
2912     - if (!tctx->dd) {
2913     - list_for_each_entry(tmp, &sham.dev_list, list) {
2914     - dd = tmp;
2915     - break;
2916     - }
2917     - tctx->dd = dd;
2918     - } else {
2919     - dd = tctx->dd;
2920     - }
2921     - spin_unlock_bh(&sham.lock);
2922     -
2923     err = crypto_shash_setkey(tctx->fallback, key, keylen);
2924     if (err)
2925     return err;
2926     @@ -1334,7 +1326,7 @@ static int omap_sham_setkey(struct crypto_ahash *tfm, const u8 *key,
2927    
2928     memset(bctx->ipad + keylen, 0, bs - keylen);
2929    
2930     - if (!test_bit(FLAGS_AUTO_XOR, &dd->flags)) {
2931     + if (!test_bit(FLAGS_AUTO_XOR, &sham.flags)) {
2932     memcpy(bctx->opad, bctx->ipad, bs);
2933    
2934     for (i = 0; i < bs; i++) {
2935     @@ -2136,6 +2128,7 @@ static int omap_sham_probe(struct platform_device *pdev)
2936     }
2937    
2938     dd->flags |= dd->pdata->flags;
2939     + sham.flags |= dd->pdata->flags;
2940    
2941     pm_runtime_use_autosuspend(dev);
2942     pm_runtime_set_autosuspend_delay(dev, DEFAULT_AUTOSUSPEND_DELAY);
2943     @@ -2163,6 +2156,9 @@ static int omap_sham_probe(struct platform_device *pdev)
2944     spin_unlock(&sham.lock);
2945    
2946     for (i = 0; i < dd->pdata->algs_info_size; i++) {
2947     + if (dd->pdata->algs_info[i].registered)
2948     + break;
2949     +
2950     for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
2951     struct ahash_alg *alg;
2952    
2953     @@ -2214,9 +2210,11 @@ static int omap_sham_remove(struct platform_device *pdev)
2954     list_del(&dd->list);
2955     spin_unlock(&sham.lock);
2956     for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
2957     - for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
2958     + for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) {
2959     crypto_unregister_ahash(
2960     &dd->pdata->algs_info[i].algs_list[j]);
2961     + dd->pdata->algs_info[i].registered--;
2962     + }
2963     tasklet_kill(&dd->done_task);
2964     pm_runtime_disable(&pdev->dev);
2965    
2966     diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c
2967     index ad02dc6747a4..0317b614b680 100644
2968     --- a/drivers/extcon/extcon-adc-jack.c
2969     +++ b/drivers/extcon/extcon-adc-jack.c
2970     @@ -124,7 +124,7 @@ static int adc_jack_probe(struct platform_device *pdev)
2971     for (i = 0; data->adc_conditions[i].id != EXTCON_NONE; i++);
2972     data->num_conditions = i;
2973    
2974     - data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel);
2975     + data->chan = devm_iio_channel_get(&pdev->dev, pdata->consumer_channel);
2976     if (IS_ERR(data->chan))
2977     return PTR_ERR(data->chan);
2978    
2979     @@ -164,7 +164,6 @@ static int adc_jack_remove(struct platform_device *pdev)
2980    
2981     free_irq(data->irq, data);
2982     cancel_work_sync(&data->handler.work);
2983     - iio_channel_release(data->chan);
2984    
2985     return 0;
2986     }
2987     diff --git a/drivers/firmware/imx/imx-scu.c b/drivers/firmware/imx/imx-scu.c
2988     index e48d971ffb61..a3b11bc71dcb 100644
2989     --- a/drivers/firmware/imx/imx-scu.c
2990     +++ b/drivers/firmware/imx/imx-scu.c
2991     @@ -300,6 +300,7 @@ static int imx_scu_probe(struct platform_device *pdev)
2992     if (ret != -EPROBE_DEFER)
2993     dev_err(dev, "Failed to request mbox chan %s ret %d\n",
2994     chan_name, ret);
2995     + kfree(chan_name);
2996     return ret;
2997     }
2998    
2999     diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
3000     index 4802ab170fe5..b9fdc20b4eb9 100644
3001     --- a/drivers/firmware/qcom_scm.c
3002     +++ b/drivers/firmware/qcom_scm.c
3003     @@ -9,7 +9,6 @@
3004     #include <linux/init.h>
3005     #include <linux/cpumask.h>
3006     #include <linux/export.h>
3007     -#include <linux/dma-direct.h>
3008     #include <linux/dma-mapping.h>
3009     #include <linux/module.h>
3010     #include <linux/types.h>
3011     @@ -441,8 +440,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
3012     struct qcom_scm_mem_map_info *mem_to_map;
3013     phys_addr_t mem_to_map_phys;
3014     phys_addr_t dest_phys;
3015     - phys_addr_t ptr_phys;
3016     - dma_addr_t ptr_dma;
3017     + dma_addr_t ptr_phys;
3018     size_t mem_to_map_sz;
3019     size_t dest_sz;
3020     size_t src_sz;
3021     @@ -459,10 +457,9 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
3022     ptr_sz = ALIGN(src_sz, SZ_64) + ALIGN(mem_to_map_sz, SZ_64) +
3023     ALIGN(dest_sz, SZ_64);
3024    
3025     - ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_dma, GFP_KERNEL);
3026     + ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_phys, GFP_KERNEL);
3027     if (!ptr)
3028     return -ENOMEM;
3029     - ptr_phys = dma_to_phys(__scm->dev, ptr_dma);
3030    
3031     /* Fill source vmid detail */
3032     src = ptr;
3033     @@ -490,7 +487,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
3034    
3035     ret = __qcom_scm_assign_mem(__scm->dev, mem_to_map_phys, mem_to_map_sz,
3036     ptr_phys, src_sz, dest_phys, dest_sz);
3037     - dma_free_coherent(__scm->dev, ptr_sz, ptr, ptr_dma);
3038     + dma_free_coherent(__scm->dev, ptr_sz, ptr, ptr_phys);
3039     if (ret) {
3040     dev_err(__scm->dev,
3041     "Assign memory protection call failed %d\n", ret);
3042     diff --git a/drivers/fpga/dfl-afu-dma-region.c b/drivers/fpga/dfl-afu-dma-region.c
3043     index 62f924489db5..5942343a5d6e 100644
3044     --- a/drivers/fpga/dfl-afu-dma-region.c
3045     +++ b/drivers/fpga/dfl-afu-dma-region.c
3046     @@ -61,10 +61,10 @@ static int afu_dma_pin_pages(struct dfl_feature_platform_data *pdata,
3047     region->pages);
3048     if (pinned < 0) {
3049     ret = pinned;
3050     - goto put_pages;
3051     + goto free_pages;
3052     } else if (pinned != npages) {
3053     ret = -EFAULT;
3054     - goto free_pages;
3055     + goto put_pages;
3056     }
3057    
3058     dev_dbg(dev, "%d pages pinned\n", pinned);
3059     diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
3060     index 92e127e74813..ed6061b5cca1 100644
3061     --- a/drivers/gpio/gpio-dwapb.c
3062     +++ b/drivers/gpio/gpio-dwapb.c
3063     @@ -49,7 +49,9 @@
3064     #define GPIO_EXT_PORTC 0x58
3065     #define GPIO_EXT_PORTD 0x5c
3066    
3067     +#define DWAPB_DRIVER_NAME "gpio-dwapb"
3068     #define DWAPB_MAX_PORTS 4
3069     +
3070     #define GPIO_EXT_PORT_STRIDE 0x04 /* register stride 32 bits */
3071     #define GPIO_SWPORT_DR_STRIDE 0x0c /* register stride 3*32 bits */
3072     #define GPIO_SWPORT_DDR_STRIDE 0x0c /* register stride 3*32 bits */
3073     @@ -398,7 +400,7 @@ static void dwapb_configure_irqs(struct dwapb_gpio *gpio,
3074     return;
3075    
3076     err = irq_alloc_domain_generic_chips(gpio->domain, ngpio, 2,
3077     - "gpio-dwapb", handle_level_irq,
3078     + DWAPB_DRIVER_NAME, handle_level_irq,
3079     IRQ_NOREQUEST, 0,
3080     IRQ_GC_INIT_NESTED_LOCK);
3081     if (err) {
3082     @@ -455,7 +457,7 @@ static void dwapb_configure_irqs(struct dwapb_gpio *gpio,
3083     */
3084     err = devm_request_irq(gpio->dev, pp->irq[0],
3085     dwapb_irq_handler_mfd,
3086     - IRQF_SHARED, "gpio-dwapb-mfd", gpio);
3087     + IRQF_SHARED, DWAPB_DRIVER_NAME, gpio);
3088     if (err) {
3089     dev_err(gpio->dev, "error requesting IRQ\n");
3090     irq_domain_remove(gpio->domain);
3091     @@ -533,26 +535,33 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
3092     dwapb_configure_irqs(gpio, port, pp);
3093    
3094     err = gpiochip_add_data(&port->gc, port);
3095     - if (err)
3096     + if (err) {
3097     dev_err(gpio->dev, "failed to register gpiochip for port%d\n",
3098     port->idx);
3099     - else
3100     - port->is_registered = true;
3101     + return err;
3102     + }
3103    
3104     /* Add GPIO-signaled ACPI event support */
3105     - if (pp->has_irq)
3106     - acpi_gpiochip_request_interrupts(&port->gc);
3107     + acpi_gpiochip_request_interrupts(&port->gc);
3108    
3109     - return err;
3110     + port->is_registered = true;
3111     +
3112     + return 0;
3113     }
3114    
3115     static void dwapb_gpio_unregister(struct dwapb_gpio *gpio)
3116     {
3117     unsigned int m;
3118    
3119     - for (m = 0; m < gpio->nr_ports; ++m)
3120     - if (gpio->ports[m].is_registered)
3121     - gpiochip_remove(&gpio->ports[m].gc);
3122     + for (m = 0; m < gpio->nr_ports; ++m) {
3123     + struct dwapb_gpio_port *port = &gpio->ports[m];
3124     +
3125     + if (!port->is_registered)
3126     + continue;
3127     +
3128     + acpi_gpiochip_free_interrupts(&port->gc);
3129     + gpiochip_remove(&port->gc);
3130     + }
3131     }
3132    
3133     static struct dwapb_platform_data *
3134     @@ -836,7 +845,7 @@ static SIMPLE_DEV_PM_OPS(dwapb_gpio_pm_ops, dwapb_gpio_suspend,
3135    
3136     static struct platform_driver dwapb_gpio_driver = {
3137     .driver = {
3138     - .name = "gpio-dwapb",
3139     + .name = DWAPB_DRIVER_NAME,
3140     .pm = &dwapb_gpio_pm_ops,
3141     .of_match_table = of_match_ptr(dwapb_of_match),
3142     .acpi_match_table = ACPI_PTR(dwapb_acpi_match),
3143     @@ -850,3 +859,4 @@ module_platform_driver(dwapb_gpio_driver);
3144     MODULE_LICENSE("GPL");
3145     MODULE_AUTHOR("Jamie Iles");
3146     MODULE_DESCRIPTION("Synopsys DesignWare APB GPIO driver");
3147     +MODULE_ALIAS("platform:" DWAPB_DRIVER_NAME);
3148     diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
3149     index 3edc1762803a..29ba26742c8f 100644
3150     --- a/drivers/gpio/gpio-pca953x.c
3151     +++ b/drivers/gpio/gpio-pca953x.c
3152     @@ -306,8 +306,22 @@ static const struct regmap_config pca953x_i2c_regmap = {
3153     .volatile_reg = pca953x_volatile_register,
3154    
3155     .cache_type = REGCACHE_RBTREE,
3156     - /* REVISIT: should be 0x7f but some 24 bit chips use REG_ADDR_AI */
3157     - .max_register = 0xff,
3158     + .max_register = 0x7f,
3159     +};
3160     +
3161     +static const struct regmap_config pca953x_ai_i2c_regmap = {
3162     + .reg_bits = 8,
3163     + .val_bits = 8,
3164     +
3165     + .read_flag_mask = REG_ADDR_AI,
3166     + .write_flag_mask = REG_ADDR_AI,
3167     +
3168     + .readable_reg = pca953x_readable_register,
3169     + .writeable_reg = pca953x_writeable_register,
3170     + .volatile_reg = pca953x_volatile_register,
3171     +
3172     + .cache_type = REGCACHE_RBTREE,
3173     + .max_register = 0x7f,
3174     };
3175    
3176     static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off,
3177     @@ -318,18 +332,6 @@ static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off,
3178     int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1;
3179     u8 regaddr = pinctrl | addr | (off / BANK_SZ);
3180    
3181     - /* Single byte read doesn't need AI bit set. */
3182     - if (!addrinc)
3183     - return regaddr;
3184     -
3185     - /* Chips with 24 and more GPIOs always support Auto Increment */
3186     - if (write && NBANK(chip) > 2)
3187     - regaddr |= REG_ADDR_AI;
3188     -
3189     - /* PCA9575 needs address-increment on multi-byte writes */
3190     - if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE)
3191     - regaddr |= REG_ADDR_AI;
3192     -
3193     return regaddr;
3194     }
3195    
3196     @@ -897,6 +899,7 @@ static int pca953x_probe(struct i2c_client *client,
3197     int ret;
3198     u32 invert = 0;
3199     struct regulator *reg;
3200     + const struct regmap_config *regmap_config;
3201    
3202     chip = devm_kzalloc(&client->dev,
3203     sizeof(struct pca953x_chip), GFP_KERNEL);
3204     @@ -960,7 +963,17 @@ static int pca953x_probe(struct i2c_client *client,
3205    
3206     i2c_set_clientdata(client, chip);
3207    
3208     - chip->regmap = devm_regmap_init_i2c(client, &pca953x_i2c_regmap);
3209     + pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK);
3210     +
3211     + if (NBANK(chip) > 2 || PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) {
3212     + dev_info(&client->dev, "using AI\n");
3213     + regmap_config = &pca953x_ai_i2c_regmap;
3214     + } else {
3215     + dev_info(&client->dev, "using no AI\n");
3216     + regmap_config = &pca953x_i2c_regmap;
3217     + }
3218     +
3219     + chip->regmap = devm_regmap_init_i2c(client, regmap_config);
3220     if (IS_ERR(chip->regmap)) {
3221     ret = PTR_ERR(chip->regmap);
3222     goto err_exit;
3223     @@ -991,7 +1004,6 @@ static int pca953x_probe(struct i2c_client *client,
3224     /* initialize cached registers from their original values.
3225     * we can't share this chip with another i2c master.
3226     */
3227     - pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK);
3228    
3229     if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
3230     chip->regs = &pca953x_regs;
3231     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3232     index 9fd12e108a70..4fad0b603b3a 100644
3233     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3234     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3235     @@ -929,7 +929,7 @@ static int dm_late_init(void *handle)
3236     unsigned int linear_lut[16];
3237     int i;
3238     struct dmcu *dmcu = adev->dm.dc->res_pool->dmcu;
3239     - bool ret = false;
3240     + bool ret;
3241    
3242     for (i = 0; i < 16; i++)
3243     linear_lut[i] = 0xFFFF * i / 15;
3244     @@ -945,13 +945,10 @@ static int dm_late_init(void *handle)
3245     */
3246     params.min_abm_backlight = 0x28F;
3247    
3248     - /* todo will enable for navi10 */
3249     - if (adev->asic_type <= CHIP_RAVEN) {
3250     - ret = dmcu_load_iram(dmcu, params);
3251     + ret = dmcu_load_iram(dmcu, params);
3252    
3253     - if (!ret)
3254     - return -EINVAL;
3255     - }
3256     + if (!ret)
3257     + return -EINVAL;
3258    
3259     return detect_mst_link_for_all_connectors(adev->ddev);
3260     }
3261     diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
3262     index 221e0f56389f..823843cd2613 100644
3263     --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
3264     +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
3265     @@ -2543,7 +2543,6 @@ static enum bp_result construct_integrated_info(
3266    
3267     /* Sort voltage table from low to high*/
3268     if (result == BP_RESULT_OK) {
3269     - struct clock_voltage_caps temp = {0, 0};
3270     uint32_t i;
3271     uint32_t j;
3272    
3273     @@ -2553,10 +2552,8 @@ static enum bp_result construct_integrated_info(
3274     info->disp_clk_voltage[j].max_supported_clk <
3275     info->disp_clk_voltage[j-1].max_supported_clk) {
3276     /* swap j and j - 1*/
3277     - temp = info->disp_clk_voltage[j-1];
3278     - info->disp_clk_voltage[j-1] =
3279     - info->disp_clk_voltage[j];
3280     - info->disp_clk_voltage[j] = temp;
3281     + swap(info->disp_clk_voltage[j - 1],
3282     + info->disp_clk_voltage[j]);
3283     }
3284     }
3285     }
3286     diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
3287     index dff65c0fe82f..7873abea4112 100644
3288     --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
3289     +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
3290     @@ -1613,8 +1613,6 @@ static enum bp_result construct_integrated_info(
3291    
3292     struct atom_common_table_header *header;
3293     struct atom_data_revision revision;
3294     -
3295     - struct clock_voltage_caps temp = {0, 0};
3296     uint32_t i;
3297     uint32_t j;
3298    
3299     @@ -1644,10 +1642,8 @@ static enum bp_result construct_integrated_info(
3300     info->disp_clk_voltage[j-1].max_supported_clk
3301     ) {
3302     /* swap j and j - 1*/
3303     - temp = info->disp_clk_voltage[j-1];
3304     - info->disp_clk_voltage[j-1] =
3305     - info->disp_clk_voltage[j];
3306     - info->disp_clk_voltage[j] = temp;
3307     + swap(info->disp_clk_voltage[j - 1],
3308     + info->disp_clk_voltage[j]);
3309     }
3310     }
3311     }
3312     diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
3313     index 2028dc017f7a..47e7d11ca0c9 100644
3314     --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
3315     +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
3316     @@ -907,15 +907,11 @@ static void program_timing_sync(
3317    
3318     /* set first pipe with plane as master */
3319     for (j = 0; j < group_size; j++) {
3320     - struct pipe_ctx *temp;
3321     -
3322     if (pipe_set[j]->plane_state) {
3323     if (j == 0)
3324     break;
3325    
3326     - temp = pipe_set[0];
3327     - pipe_set[0] = pipe_set[j];
3328     - pipe_set[j] = temp;
3329     + swap(pipe_set[0], pipe_set[j]);
3330     break;
3331     }
3332     }
3333     @@ -2230,6 +2226,12 @@ void dc_commit_updates_for_stream(struct dc *dc,
3334    
3335     copy_stream_update_to_stream(dc, context, stream, stream_update);
3336    
3337     + if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
3338     + DC_ERROR("Mode validation failed for stream update!\n");
3339     + dc_release_state(context);
3340     + return;
3341     + }
3342     +
3343     commit_planes_for_stream(
3344     dc,
3345     srf_updates,
3346     diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
3347     index 2d8f14b69117..207435fa4f2c 100644
3348     --- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
3349     +++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
3350     @@ -799,7 +799,7 @@ static bool build_regamma(struct pwl_float_data_ex *rgb_regamma,
3351     pow_buffer_ptr = -1; // reset back to no optimize
3352     ret = true;
3353     release:
3354     - kfree(coeff);
3355     + kvfree(coeff);
3356     return ret;
3357     }
3358    
3359     diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
3360     index 15590fd86ef4..2e71ca3e19f5 100644
3361     --- a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
3362     +++ b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
3363     @@ -239,7 +239,7 @@ static void ci_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
3364    
3365     switch (dev_id) {
3366     case 0x67BA:
3367     - case 0x66B1:
3368     + case 0x67B1:
3369     smu_data->power_tune_defaults = &defaults_hawaii_pro;
3370     break;
3371     case 0x67B8:
3372     diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
3373     index 4c766624b20d..2337b3827e6a 100644
3374     --- a/drivers/gpu/drm/drm_connector.c
3375     +++ b/drivers/gpu/drm/drm_connector.c
3376     @@ -27,6 +27,7 @@
3377     #include <drm/drm_print.h>
3378     #include <drm/drm_drv.h>
3379     #include <drm/drm_file.h>
3380     +#include <drm/drm_sysfs.h>
3381    
3382     #include <linux/uaccess.h>
3383    
3384     @@ -511,6 +512,10 @@ int drm_connector_register(struct drm_connector *connector)
3385     drm_mode_object_register(connector->dev, &connector->base);
3386    
3387     connector->registration_state = DRM_CONNECTOR_REGISTERED;
3388     +
3389     + /* Let userspace know we have a new connector */
3390     + drm_sysfs_hotplug_event(connector->dev);
3391     +
3392     goto unlock;
3393    
3394     err_debugfs:
3395     diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
3396     index 4b7aaad07423..006d6087700f 100644
3397     --- a/drivers/gpu/drm/drm_dp_mst_topology.c
3398     +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
3399     @@ -27,6 +27,7 @@
3400     #include <linux/kernel.h>
3401     #include <linux/sched.h>
3402     #include <linux/seq_file.h>
3403     +#include <linux/iopoll.h>
3404    
3405     #include <drm/drm_atomic.h>
3406     #include <drm/drm_atomic_helper.h>
3407     @@ -3498,6 +3499,17 @@ fail:
3408     return ret;
3409     }
3410    
3411     +static int do_get_act_status(struct drm_dp_aux *aux)
3412     +{
3413     + int ret;
3414     + u8 status;
3415     +
3416     + ret = drm_dp_dpcd_readb(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status);
3417     + if (ret < 0)
3418     + return ret;
3419     +
3420     + return status;
3421     +}
3422    
3423     /**
3424     * drm_dp_check_act_status() - Check ACT handled status.
3425     @@ -3507,33 +3519,29 @@ fail:
3426     */
3427     int drm_dp_check_act_status(struct drm_dp_mst_topology_mgr *mgr)
3428     {
3429     - u8 status;
3430     - int ret;
3431     - int count = 0;
3432     -
3433     - do {
3434     - ret = drm_dp_dpcd_readb(mgr->aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status);
3435     -
3436     - if (ret < 0) {
3437     - DRM_DEBUG_KMS("failed to read payload table status %d\n", ret);
3438     - goto fail;
3439     - }
3440     -
3441     - if (status & DP_PAYLOAD_ACT_HANDLED)
3442     - break;
3443     - count++;
3444     - udelay(100);
3445     -
3446     - } while (count < 30);
3447     -
3448     - if (!(status & DP_PAYLOAD_ACT_HANDLED)) {
3449     - DRM_DEBUG_KMS("failed to get ACT bit %d after %d retries\n", status, count);
3450     - ret = -EINVAL;
3451     - goto fail;
3452     + /*
3453     + * There doesn't seem to be any recommended retry count or timeout in
3454     + * the MST specification. Since some hubs have been observed to take
3455     + * over 1 second to update their payload allocations under certain
3456     + * conditions, we use a rather large timeout value.
3457     + */
3458     + const int timeout_ms = 3000;
3459     + int ret, status;
3460     +
3461     + ret = readx_poll_timeout(do_get_act_status, mgr->aux, status,
3462     + status & DP_PAYLOAD_ACT_HANDLED || status < 0,
3463     + 200, timeout_ms * USEC_PER_MSEC);
3464     + if (ret < 0 && status >= 0) {
3465     + DRM_DEBUG_KMS("Failed to get ACT after %dms, last status: %02x\n",
3466     + timeout_ms, status);
3467     + return -EINVAL;
3468     + } else if (status < 0) {
3469     + DRM_DEBUG_KMS("Failed to read payload table status: %d\n",
3470     + status);
3471     + return status;
3472     }
3473     +
3474     return 0;
3475     -fail:
3476     - return ret;
3477     }
3478     EXPORT_SYMBOL(drm_dp_check_act_status);
3479    
3480     diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
3481     index cf804389f5ec..d50a7884e69e 100644
3482     --- a/drivers/gpu/drm/drm_encoder_slave.c
3483     +++ b/drivers/gpu/drm/drm_encoder_slave.c
3484     @@ -84,7 +84,7 @@ int drm_i2c_encoder_init(struct drm_device *dev,
3485    
3486     err = encoder_drv->encoder_init(client, dev, encoder);
3487     if (err)
3488     - goto fail_unregister;
3489     + goto fail_module_put;
3490    
3491     if (info->platform_data)
3492     encoder->slave_funcs->set_config(&encoder->base,
3493     @@ -92,9 +92,10 @@ int drm_i2c_encoder_init(struct drm_device *dev,
3494    
3495     return 0;
3496    
3497     +fail_module_put:
3498     + module_put(module);
3499     fail_unregister:
3500     i2c_unregister_device(client);
3501     - module_put(module);
3502     fail:
3503     return err;
3504     }
3505     diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
3506     index dd2bc85f43cc..4fd2f6cd03c1 100644
3507     --- a/drivers/gpu/drm/drm_sysfs.c
3508     +++ b/drivers/gpu/drm/drm_sysfs.c
3509     @@ -293,9 +293,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
3510     return PTR_ERR(connector->kdev);
3511     }
3512    
3513     - /* Let userspace know we have a new connector */
3514     - drm_sysfs_hotplug_event(dev);
3515     -
3516     if (connector->ddc)
3517     return sysfs_create_link(&connector->kdev->kobj,
3518     &connector->ddc->dev.kobj, "ddc");
3519     diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
3520     index 4ab6531a4a74..2efc317c90df 100644
3521     --- a/drivers/gpu/drm/i915/display/intel_dp.c
3522     +++ b/drivers/gpu/drm/i915/display/intel_dp.c
3523     @@ -1292,8 +1292,7 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
3524     bool is_tc_port = intel_phy_is_tc(i915, phy);
3525     i915_reg_t ch_ctl, ch_data[5];
3526     u32 aux_clock_divider;
3527     - enum intel_display_power_domain aux_domain =
3528     - intel_aux_power_domain(intel_dig_port);
3529     + enum intel_display_power_domain aux_domain;
3530     intel_wakeref_t aux_wakeref;
3531     intel_wakeref_t pps_wakeref;
3532     int i, ret, recv_bytes;
3533     @@ -1308,6 +1307,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
3534     if (is_tc_port)
3535     intel_tc_port_lock(intel_dig_port);
3536    
3537     + aux_domain = intel_aux_power_domain(intel_dig_port);
3538     +
3539     aux_wakeref = intel_display_power_get(i915, aux_domain);
3540     pps_wakeref = pps_lock(intel_dp);
3541    
3542     diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
3543     index 4c4954e8ce0a..3f875aebbd23 100644
3544     --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
3545     +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
3546     @@ -36,7 +36,6 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
3547     unsigned long last_pfn = 0; /* suppress gcc warning */
3548     unsigned int max_segment = i915_sg_segment_size();
3549     unsigned int sg_page_sizes;
3550     - struct pagevec pvec;
3551     gfp_t noreclaim;
3552     int ret;
3553    
3554     @@ -188,13 +187,17 @@ err_sg:
3555     sg_mark_end(sg);
3556     err_pages:
3557     mapping_clear_unevictable(mapping);
3558     - pagevec_init(&pvec);
3559     - for_each_sgt_page(page, sgt_iter, st) {
3560     - if (!pagevec_add(&pvec, page))
3561     + if (sg != st->sgl) {
3562     + struct pagevec pvec;
3563     +
3564     + pagevec_init(&pvec);
3565     + for_each_sgt_page(page, sgt_iter, st) {
3566     + if (!pagevec_add(&pvec, page))
3567     + check_release_pagevec(&pvec);
3568     + }
3569     + if (pagevec_count(&pvec))
3570     check_release_pagevec(&pvec);
3571     }
3572     - if (pagevec_count(&pvec))
3573     - check_release_pagevec(&pvec);
3574     sg_free_table(st);
3575     kfree(st);
3576    
3577     diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
3578     index f24096e27bef..21417ac8e878 100644
3579     --- a/drivers/gpu/drm/i915/i915_cmd_parser.c
3580     +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
3581     @@ -572,6 +572,9 @@ struct drm_i915_reg_descriptor {
3582     #define REG32(_reg, ...) \
3583     { .addr = (_reg), __VA_ARGS__ }
3584    
3585     +#define REG32_IDX(_reg, idx) \
3586     + { .addr = _reg(idx) }
3587     +
3588     /*
3589     * Convenience macro for adding 64-bit registers.
3590     *
3591     @@ -669,6 +672,7 @@ static const struct drm_i915_reg_descriptor gen9_blt_regs[] = {
3592     REG64_IDX(RING_TIMESTAMP, BSD_RING_BASE),
3593     REG32(BCS_SWCTRL),
3594     REG64_IDX(RING_TIMESTAMP, BLT_RING_BASE),
3595     + REG32_IDX(RING_CTX_TIMESTAMP, BLT_RING_BASE),
3596     REG64_IDX(BCS_GPR, 0),
3597     REG64_IDX(BCS_GPR, 1),
3598     REG64_IDX(BCS_GPR, 2),
3599     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
3600     index 37e3dd3c1a9d..4193a9970251 100644
3601     --- a/drivers/gpu/drm/i915/i915_irq.c
3602     +++ b/drivers/gpu/drm/i915/i915_irq.c
3603     @@ -3500,6 +3500,7 @@ static void gen11_hpd_irq_setup(struct drm_i915_private *dev_priv)
3604    
3605     val = I915_READ(GEN11_DE_HPD_IMR);
3606     val &= ~hotplug_irqs;
3607     + val |= ~enabled_irqs & hotplug_irqs;
3608     I915_WRITE(GEN11_DE_HPD_IMR, val);
3609     POSTING_READ(GEN11_DE_HPD_IMR);
3610    
3611     diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
3612     index 99cd6e62a971..7829247de60e 100644
3613     --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
3614     +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
3615     @@ -1359,6 +1359,10 @@ static unsigned long a5xx_gpu_busy(struct msm_gpu *gpu)
3616     {
3617     u64 busy_cycles, busy_time;
3618    
3619     + /* Only read the gpu busy if the hardware is already active */
3620     + if (pm_runtime_get_if_in_use(&gpu->pdev->dev) == 0)
3621     + return 0;
3622     +
3623     busy_cycles = gpu_read64(gpu, REG_A5XX_RBBM_PERFCTR_RBBM_0_LO,
3624     REG_A5XX_RBBM_PERFCTR_RBBM_0_HI);
3625    
3626     @@ -1367,6 +1371,8 @@ static unsigned long a5xx_gpu_busy(struct msm_gpu *gpu)
3627    
3628     gpu->devfreq.busy_cycles = busy_cycles;
3629    
3630     + pm_runtime_put(&gpu->pdev->dev);
3631     +
3632     if (WARN_ON(busy_time > ~0LU))
3633     return ~0LU;
3634    
3635     diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
3636     index 85f14feafdec..e62b286947a7 100644
3637     --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
3638     +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
3639     @@ -107,6 +107,13 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index)
3640     struct msm_gpu *gpu = &adreno_gpu->base;
3641     int ret;
3642    
3643     + /*
3644     + * This can get called from devfreq while the hardware is idle. Don't
3645     + * bring up the power if it isn't already active
3646     + */
3647     + if (pm_runtime_get_if_in_use(gmu->dev) == 0)
3648     + return;
3649     +
3650     gmu_write(gmu, REG_A6XX_GMU_DCVS_ACK_OPTION, 0);
3651    
3652     gmu_write(gmu, REG_A6XX_GMU_DCVS_PERF_SETTING,
3653     @@ -133,6 +140,7 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index)
3654     * for now leave it at max so that the performance is nominal.
3655     */
3656     icc_set_bw(gpu->icc_path, 0, MBps_to_icc(7216));
3657     + pm_runtime_put(gmu->dev);
3658     }
3659    
3660     void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq)
3661     diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
3662     index 686c34d706b0..be68d4e6551c 100644
3663     --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
3664     +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
3665     @@ -803,6 +803,11 @@ static unsigned long a6xx_gpu_busy(struct msm_gpu *gpu)
3666     struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
3667     u64 busy_cycles, busy_time;
3668    
3669     +
3670     + /* Only read the gpu busy if the hardware is already active */
3671     + if (pm_runtime_get_if_in_use(a6xx_gpu->gmu.dev) == 0)
3672     + return 0;
3673     +
3674     busy_cycles = gmu_read64(&a6xx_gpu->gmu,
3675     REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L,
3676     REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H);
3677     @@ -812,6 +817,8 @@ static unsigned long a6xx_gpu_busy(struct msm_gpu *gpu)
3678    
3679     gpu->devfreq.busy_cycles = busy_cycles;
3680    
3681     + pm_runtime_put(a6xx_gpu->gmu.dev);
3682     +
3683     if (WARN_ON(busy_time > ~0LU))
3684     return ~0LU;
3685    
3686     diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
3687     index 91cd76a2bab1..77823ccdd0f8 100644
3688     --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
3689     +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
3690     @@ -1037,7 +1037,8 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
3691    
3692     return 0;
3693     fail:
3694     - mdp5_destroy(pdev);
3695     + if (mdp5_kms)
3696     + mdp5_destroy(pdev);
3697     return ret;
3698     }
3699    
3700     diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigm200.c
3701     index 9b16a08eb4d9..bf6d41fb0c9f 100644
3702     --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigm200.c
3703     +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigm200.c
3704     @@ -27,10 +27,10 @@ void
3705     gm200_hdmi_scdc(struct nvkm_ior *ior, int head, u8 scdc)
3706     {
3707     struct nvkm_device *device = ior->disp->engine.subdev.device;
3708     - const u32 hoff = head * 0x800;
3709     + const u32 soff = nv50_ior_base(ior);
3710     const u32 ctrl = scdc & 0x3;
3711    
3712     - nvkm_mask(device, 0x61c5bc + hoff, 0x00000003, ctrl);
3713     + nvkm_mask(device, 0x61c5bc + soff, 0x00000003, ctrl);
3714    
3715     ior->tmds.high_speed = !!(scdc & 0x2);
3716     }
3717     diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c
3718     index bfc1631093e9..9bdbe0db8795 100644
3719     --- a/drivers/gpu/drm/qxl/qxl_kms.c
3720     +++ b/drivers/gpu/drm/qxl/qxl_kms.c
3721     @@ -218,7 +218,7 @@ int qxl_device_init(struct qxl_device *qdev,
3722     &(qdev->ram_header->cursor_ring_hdr),
3723     sizeof(struct qxl_command),
3724     QXL_CURSOR_RING_SIZE,
3725     - qdev->io_base + QXL_IO_NOTIFY_CMD,
3726     + qdev->io_base + QXL_IO_NOTIFY_CURSOR,
3727     false,
3728     &qdev->cursor_event);
3729    
3730     diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi.h b/drivers/gpu/drm/sun4i/sun4i_hdmi.h
3731     index 7ad3f06c127e..00ca35f07ba5 100644
3732     --- a/drivers/gpu/drm/sun4i/sun4i_hdmi.h
3733     +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi.h
3734     @@ -148,7 +148,7 @@
3735     #define SUN4I_HDMI_DDC_CMD_IMPLICIT_WRITE 3
3736    
3737     #define SUN4I_HDMI_DDC_CLK_REG 0x528
3738     -#define SUN4I_HDMI_DDC_CLK_M(m) (((m) & 0x7) << 3)
3739     +#define SUN4I_HDMI_DDC_CLK_M(m) (((m) & 0xf) << 3)
3740     #define SUN4I_HDMI_DDC_CLK_N(n) ((n) & 0x7)
3741    
3742     #define SUN4I_HDMI_DDC_LINE_CTRL_REG 0x540
3743     diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
3744     index 2ff780114106..12430b9d4e93 100644
3745     --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
3746     +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_ddc_clk.c
3747     @@ -33,7 +33,7 @@ static unsigned long sun4i_ddc_calc_divider(unsigned long rate,
3748     unsigned long best_rate = 0;
3749     u8 best_m = 0, best_n = 0, _m, _n;
3750    
3751     - for (_m = 0; _m < 8; _m++) {
3752     + for (_m = 0; _m < 16; _m++) {
3753     for (_n = 0; _n < 8; _n++) {
3754     unsigned long tmp_rate;
3755    
3756     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
3757     index 13b7222ef2c9..c552a6bc627e 100644
3758     --- a/drivers/hid/hid-ids.h
3759     +++ b/drivers/hid/hid-ids.h
3760     @@ -1147,6 +1147,9 @@
3761     #define USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882 0x8882
3762     #define USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883 0x8883
3763    
3764     +#define USB_VENDOR_ID_TRUST 0x145f
3765     +#define USB_DEVICE_ID_TRUST_PANORA_TABLET 0x0212
3766     +
3767     #define USB_VENDOR_ID_TURBOX 0x062a
3768     #define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201
3769     #define USB_DEVICE_ID_ASUS_MD_5110 0x5110
3770     diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
3771     index 90ec2390ef68..168fdaa1999f 100644
3772     --- a/drivers/hid/hid-quirks.c
3773     +++ b/drivers/hid/hid-quirks.c
3774     @@ -168,6 +168,7 @@ static const struct hid_device_id hid_quirks[] = {
3775     { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
3776     { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
3777     { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883), HID_QUIRK_NOGET },
3778     + { HID_USB_DEVICE(USB_VENDOR_ID_TRUST, USB_DEVICE_ID_TRUST_PANORA_TABLET), HID_QUIRK_MULTI_INPUT | HID_QUIRK_HIDINPUT_FORCE },
3779     { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET },
3780     { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT },
3781     { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT },
3782     diff --git a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3783     index aa2dbed30fc3..6cf59fd26ad7 100644
3784     --- a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3785     +++ b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3786     @@ -480,6 +480,7 @@ static int ish_query_loader_prop(struct ishtp_cl_data *client_data,
3787     sizeof(ldr_xfer_query_resp));
3788     if (rv < 0) {
3789     client_data->flag_retry = true;
3790     + *fw_info = (struct shim_fw_info){};
3791     return rv;
3792     }
3793    
3794     @@ -489,6 +490,7 @@ static int ish_query_loader_prop(struct ishtp_cl_data *client_data,
3795     "data size %d is not equal to size of loader_xfer_query_response %zu\n",
3796     rv, sizeof(struct loader_xfer_query_response));
3797     client_data->flag_retry = true;
3798     + *fw_info = (struct shim_fw_info){};
3799     return -EMSGSIZE;
3800     }
3801    
3802     diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
3803     index d0cc3985b72a..36cce2bfb744 100644
3804     --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
3805     +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
3806     @@ -596,13 +596,6 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata)
3807     goto out;
3808     }
3809    
3810     - /* There is no point in reading a TMC in HW FIFO mode */
3811     - mode = readl_relaxed(drvdata->base + TMC_MODE);
3812     - if (mode != TMC_MODE_CIRCULAR_BUFFER) {
3813     - ret = -EINVAL;
3814     - goto out;
3815     - }
3816     -
3817     /* Don't interfere if operated from Perf */
3818     if (drvdata->mode == CS_MODE_PERF) {
3819     ret = -EINVAL;
3820     @@ -616,8 +609,15 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata)
3821     }
3822    
3823     /* Disable the TMC if need be */
3824     - if (drvdata->mode == CS_MODE_SYSFS)
3825     + if (drvdata->mode == CS_MODE_SYSFS) {
3826     + /* There is no point in reading a TMC in HW FIFO mode */
3827     + mode = readl_relaxed(drvdata->base + TMC_MODE);
3828     + if (mode != TMC_MODE_CIRCULAR_BUFFER) {
3829     + ret = -EINVAL;
3830     + goto out;
3831     + }
3832     __tmc_etb_disable_hw(drvdata);
3833     + }
3834    
3835     drvdata->reading = true;
3836     out:
3837     diff --git a/drivers/i2c/busses/i2c-icy.c b/drivers/i2c/busses/i2c-icy.c
3838     index 8382eb64b424..d6c17506dba4 100644
3839     --- a/drivers/i2c/busses/i2c-icy.c
3840     +++ b/drivers/i2c/busses/i2c-icy.c
3841     @@ -43,6 +43,7 @@
3842     #include <linux/i2c.h>
3843     #include <linux/i2c-algo-pcf.h>
3844    
3845     +#include <asm/amigahw.h>
3846     #include <asm/amigaints.h>
3847     #include <linux/zorro.h>
3848    
3849     diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
3850     index 30ded6422e7b..69740a4ff1db 100644
3851     --- a/drivers/i2c/busses/i2c-piix4.c
3852     +++ b/drivers/i2c/busses/i2c-piix4.c
3853     @@ -977,7 +977,8 @@ static int piix4_probe(struct pci_dev *dev, const struct pci_device_id *id)
3854     }
3855    
3856     if (dev->vendor == PCI_VENDOR_ID_AMD &&
3857     - dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS) {
3858     + (dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS ||
3859     + dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS)) {
3860     retval = piix4_setup_sb800(dev, id, 1);
3861     }
3862    
3863     diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
3864     index 2c3c3d6935c0..d0c557c8d80f 100644
3865     --- a/drivers/i2c/busses/i2c-pxa.c
3866     +++ b/drivers/i2c/busses/i2c-pxa.c
3867     @@ -312,11 +312,10 @@ static void i2c_pxa_scream_blue_murder(struct pxa_i2c *i2c, const char *why)
3868     dev_err(dev, "IBMR: %08x IDBR: %08x ICR: %08x ISR: %08x\n",
3869     readl(_IBMR(i2c)), readl(_IDBR(i2c)), readl(_ICR(i2c)),
3870     readl(_ISR(i2c)));
3871     - dev_dbg(dev, "log: ");
3872     + dev_err(dev, "log:");
3873     for (i = 0; i < i2c->irqlogidx; i++)
3874     - pr_debug("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
3875     -
3876     - pr_debug("\n");
3877     + pr_cont(" [%03x:%05x]", i2c->isrlog[i], i2c->icrlog[i]);
3878     + pr_cont("\n");
3879     }
3880    
3881     #else /* ifdef DEBUG */
3882     @@ -706,11 +705,9 @@ static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
3883     {
3884     u32 icr;
3885    
3886     - /*
3887     - * Clear the STOP and ACK flags
3888     - */
3889     + /* Clear the START, STOP, ACK, TB and MA flags */
3890     icr = readl(_ICR(i2c));
3891     - icr &= ~(ICR_STOP | ICR_ACKNAK);
3892     + icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
3893     writel(icr, _ICR(i2c));
3894     }
3895    
3896     diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
3897     index 8d0f15f27dc5..0a95afaa48fe 100644
3898     --- a/drivers/iio/pressure/bmp280-core.c
3899     +++ b/drivers/iio/pressure/bmp280-core.c
3900     @@ -264,6 +264,8 @@ static u32 bmp280_compensate_humidity(struct bmp280_data *data,
3901     + (s32)2097152) * calib->H2 + 8192) >> 14);
3902     var -= ((((var >> 15) * (var >> 15)) >> 7) * (s32)calib->H1) >> 4;
3903    
3904     + var = clamp_val(var, 0, 419430400);
3905     +
3906     return var >> 12;
3907     };
3908    
3909     @@ -706,7 +708,7 @@ static int bmp180_measure(struct bmp280_data *data, u8 ctrl_meas)
3910     unsigned int ctrl;
3911    
3912     if (data->use_eoc)
3913     - init_completion(&data->done);
3914     + reinit_completion(&data->done);
3915    
3916     ret = regmap_write(data->regmap, BMP280_REG_CTRL_MEAS, ctrl_meas);
3917     if (ret)
3918     @@ -962,6 +964,9 @@ static int bmp085_fetch_eoc_irq(struct device *dev,
3919     "trying to enforce it\n");
3920     irq_trig = IRQF_TRIGGER_RISING;
3921     }
3922     +
3923     + init_completion(&data->done);
3924     +
3925     ret = devm_request_threaded_irq(dev,
3926     irq,
3927     bmp085_eoc_irq,
3928     diff --git a/drivers/infiniband/core/cma_configfs.c b/drivers/infiniband/core/cma_configfs.c
3929     index 8b0b5ae22e4c..726e70b68249 100644
3930     --- a/drivers/infiniband/core/cma_configfs.c
3931     +++ b/drivers/infiniband/core/cma_configfs.c
3932     @@ -322,8 +322,21 @@ fail:
3933     return ERR_PTR(err);
3934     }
3935    
3936     +static void drop_cma_dev(struct config_group *cgroup, struct config_item *item)
3937     +{
3938     + struct config_group *group =
3939     + container_of(item, struct config_group, cg_item);
3940     + struct cma_dev_group *cma_dev_group =
3941     + container_of(group, struct cma_dev_group, device_group);
3942     +
3943     + configfs_remove_default_groups(&cma_dev_group->ports_group);
3944     + configfs_remove_default_groups(&cma_dev_group->device_group);
3945     + config_item_put(item);
3946     +}
3947     +
3948     static struct configfs_group_operations cma_subsys_group_ops = {
3949     .make_group = make_cma_dev,
3950     + .drop_item = drop_cma_dev,
3951     };
3952    
3953     static const struct config_item_type cma_subsys_type = {
3954     diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
3955     index 7a50cedcef1f..091cca9d88ed 100644
3956     --- a/drivers/infiniband/core/sysfs.c
3957     +++ b/drivers/infiniband/core/sysfs.c
3958     @@ -1060,8 +1060,7 @@ static int add_port(struct ib_core_device *coredev, int port_num)
3959     coredev->ports_kobj,
3960     "%d", port_num);
3961     if (ret) {
3962     - kfree(p);
3963     - return ret;
3964     + goto err_put;
3965     }
3966    
3967     p->gid_attr_group = kzalloc(sizeof(*p->gid_attr_group), GFP_KERNEL);
3968     @@ -1074,8 +1073,7 @@ static int add_port(struct ib_core_device *coredev, int port_num)
3969     ret = kobject_init_and_add(&p->gid_attr_group->kobj, &gid_attr_type,
3970     &p->kobj, "gid_attrs");
3971     if (ret) {
3972     - kfree(p->gid_attr_group);
3973     - goto err_put;
3974     + goto err_put_gid_attrs;
3975     }
3976    
3977     if (device->ops.process_mad && is_full_dev) {
3978     @@ -1406,8 +1404,10 @@ int ib_port_register_module_stat(struct ib_device *device, u8 port_num,
3979    
3980     ret = kobject_init_and_add(kobj, ktype, &port->kobj, "%s",
3981     name);
3982     - if (ret)
3983     + if (ret) {
3984     + kobject_put(kobj);
3985     return ret;
3986     + }
3987     }
3988    
3989     return 0;
3990     diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
3991     index 599340c1f0b8..541dbcf22d0e 100644
3992     --- a/drivers/infiniband/hw/cxgb4/device.c
3993     +++ b/drivers/infiniband/hw/cxgb4/device.c
3994     @@ -953,6 +953,7 @@ void c4iw_dealloc(struct uld_ctx *ctx)
3995     static void c4iw_remove(struct uld_ctx *ctx)
3996     {
3997     pr_debug("c4iw_dev %p\n", ctx->dev);
3998     + debugfs_remove_recursive(ctx->dev->debugfs_root);
3999     c4iw_unregister_device(ctx->dev);
4000     c4iw_dealloc(ctx);
4001     }
4002     diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
4003     index 4540b00ccee9..0502c90c83ed 100644
4004     --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
4005     +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
4006     @@ -1349,34 +1349,26 @@ static int hns_roce_query_pf_resource(struct hns_roce_dev *hr_dev)
4007     static int hns_roce_query_pf_timer_resource(struct hns_roce_dev *hr_dev)
4008     {
4009     struct hns_roce_pf_timer_res_a *req_a;
4010     - struct hns_roce_cmq_desc desc[2];
4011     - int ret, i;
4012     + struct hns_roce_cmq_desc desc;
4013     + int ret;
4014    
4015     - for (i = 0; i < 2; i++) {
4016     - hns_roce_cmq_setup_basic_desc(&desc[i],
4017     - HNS_ROCE_OPC_QUERY_PF_TIMER_RES,
4018     - true);
4019     + hns_roce_cmq_setup_basic_desc(&desc, HNS_ROCE_OPC_QUERY_PF_TIMER_RES,
4020     + true);
4021    
4022     - if (i == 0)
4023     - desc[i].flag |= cpu_to_le16(HNS_ROCE_CMD_FLAG_NEXT);
4024     - else
4025     - desc[i].flag &= ~cpu_to_le16(HNS_ROCE_CMD_FLAG_NEXT);
4026     - }
4027     -
4028     - ret = hns_roce_cmq_send(hr_dev, desc, 2);
4029     + ret = hns_roce_cmq_send(hr_dev, &desc, 1);
4030     if (ret)
4031     return ret;
4032    
4033     - req_a = (struct hns_roce_pf_timer_res_a *)desc[0].data;
4034     + req_a = (struct hns_roce_pf_timer_res_a *)desc.data;
4035    
4036     hr_dev->caps.qpc_timer_bt_num =
4037     - roce_get_field(req_a->qpc_timer_bt_idx_num,
4038     - PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_M,
4039     - PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_S);
4040     + roce_get_field(req_a->qpc_timer_bt_idx_num,
4041     + PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_M,
4042     + PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_S);
4043     hr_dev->caps.cqc_timer_bt_num =
4044     - roce_get_field(req_a->cqc_timer_bt_idx_num,
4045     - PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_M,
4046     - PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_S);
4047     + roce_get_field(req_a->cqc_timer_bt_idx_num,
4048     + PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_M,
4049     + PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_S);
4050    
4051     return 0;
4052     }
4053     @@ -4564,7 +4556,7 @@ static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
4054     qp_attr->path_mig_state = IB_MIG_ARMED;
4055     qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
4056     if (hr_qp->ibqp.qp_type == IB_QPT_UD)
4057     - qp_attr->qkey = V2_QKEY_VAL;
4058     + qp_attr->qkey = le32_to_cpu(context.qkey_xrcd);
4059    
4060     qp_attr->rq_psn = roce_get_field(context.byte_108_rx_reqepsn,
4061     V2_QPC_BYTE_108_RX_REQ_EPSN_M,
4062     diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
4063     index d609f4659afb..fd75a9043bf1 100644
4064     --- a/drivers/infiniband/hw/mlx5/devx.c
4065     +++ b/drivers/infiniband/hw/mlx5/devx.c
4066     @@ -489,6 +489,10 @@ static u64 devx_get_obj_id(const void *in)
4067     obj_id = get_enc_obj_id(MLX5_CMD_OP_CREATE_QP,
4068     MLX5_GET(rst2init_qp_in, in, qpn));
4069     break;
4070     + case MLX5_CMD_OP_INIT2INIT_QP:
4071     + obj_id = get_enc_obj_id(MLX5_CMD_OP_CREATE_QP,
4072     + MLX5_GET(init2init_qp_in, in, qpn));
4073     + break;
4074     case MLX5_CMD_OP_INIT2RTR_QP:
4075     obj_id = get_enc_obj_id(MLX5_CMD_OP_CREATE_QP,
4076     MLX5_GET(init2rtr_qp_in, in, qpn));
4077     @@ -814,6 +818,7 @@ static bool devx_is_obj_modify_cmd(const void *in)
4078     case MLX5_CMD_OP_SET_L2_TABLE_ENTRY:
4079     case MLX5_CMD_OP_RST2INIT_QP:
4080     case MLX5_CMD_OP_INIT2RTR_QP:
4081     + case MLX5_CMD_OP_INIT2INIT_QP:
4082     case MLX5_CMD_OP_RTR2RTS_QP:
4083     case MLX5_CMD_OP_RTS2RTS_QP:
4084     case MLX5_CMD_OP_SQERR2RTS_QP:
4085     diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c
4086     index 4e7fde86c96b..c29c1f7da4a1 100644
4087     --- a/drivers/infiniband/hw/mlx5/srq.c
4088     +++ b/drivers/infiniband/hw/mlx5/srq.c
4089     @@ -310,12 +310,18 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,
4090     srq->msrq.event = mlx5_ib_srq_event;
4091     srq->ibsrq.ext.xrc.srq_num = srq->msrq.srqn;
4092    
4093     - if (udata)
4094     - if (ib_copy_to_udata(udata, &srq->msrq.srqn, sizeof(__u32))) {
4095     + if (udata) {
4096     + struct mlx5_ib_create_srq_resp resp = {
4097     + .srqn = srq->msrq.srqn,
4098     + };
4099     +
4100     + if (ib_copy_to_udata(udata, &resp, min(udata->outlen,
4101     + sizeof(resp)))) {
4102     mlx5_ib_dbg(dev, "copy to user failed\n");
4103     err = -EFAULT;
4104     goto err_core;
4105     }
4106     + }
4107    
4108     init_attr->attr.max_wr = srq->msrq.max - 1;
4109    
4110     diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h
4111     deleted file mode 100644
4112     index 391f94d9e47d..000000000000
4113     --- a/drivers/input/serio/i8042-ppcio.h
4114     +++ /dev/null
4115     @@ -1,57 +0,0 @@
4116     -/* SPDX-License-Identifier: GPL-2.0-only */
4117     -#ifndef _I8042_PPCIO_H
4118     -#define _I8042_PPCIO_H
4119     -
4120     -
4121     -#if defined(CONFIG_WALNUT)
4122     -
4123     -#define I8042_KBD_IRQ 25
4124     -#define I8042_AUX_IRQ 26
4125     -
4126     -#define I8042_KBD_PHYS_DESC "walnutps2/serio0"
4127     -#define I8042_AUX_PHYS_DESC "walnutps2/serio1"
4128     -#define I8042_MUX_PHYS_DESC "walnutps2/serio%d"
4129     -
4130     -extern void *kb_cs;
4131     -extern void *kb_data;
4132     -
4133     -#define I8042_COMMAND_REG (*(int *)kb_cs)
4134     -#define I8042_DATA_REG (*(int *)kb_data)
4135     -
4136     -static inline int i8042_read_data(void)
4137     -{
4138     - return readb(kb_data);
4139     -}
4140     -
4141     -static inline int i8042_read_status(void)
4142     -{
4143     - return readb(kb_cs);
4144     -}
4145     -
4146     -static inline void i8042_write_data(int val)
4147     -{
4148     - writeb(val, kb_data);
4149     -}
4150     -
4151     -static inline void i8042_write_command(int val)
4152     -{
4153     - writeb(val, kb_cs);
4154     -}
4155     -
4156     -static inline int i8042_platform_init(void)
4157     -{
4158     - i8042_reset = I8042_RESET_ALWAYS;
4159     - return 0;
4160     -}
4161     -
4162     -static inline void i8042_platform_exit(void)
4163     -{
4164     -}
4165     -
4166     -#else
4167     -
4168     -#include "i8042-io.h"
4169     -
4170     -#endif
4171     -
4172     -#endif /* _I8042_PPCIO_H */
4173     diff --git a/drivers/input/serio/i8042.h b/drivers/input/serio/i8042.h
4174     index 38dc27ad3c18..eb376700dfff 100644
4175     --- a/drivers/input/serio/i8042.h
4176     +++ b/drivers/input/serio/i8042.h
4177     @@ -17,8 +17,6 @@
4178     #include "i8042-ip22io.h"
4179     #elif defined(CONFIG_SNI_RM)
4180     #include "i8042-snirm.h"
4181     -#elif defined(CONFIG_PPC)
4182     -#include "i8042-ppcio.h"
4183     #elif defined(CONFIG_SPARC)
4184     #include "i8042-sparcio.h"
4185     #elif defined(CONFIG_X86) || defined(CONFIG_IA64)
4186     diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
4187     index 240e8de24cd2..b41b97c962ed 100644
4188     --- a/drivers/input/touchscreen/edt-ft5x06.c
4189     +++ b/drivers/input/touchscreen/edt-ft5x06.c
4190     @@ -935,19 +935,25 @@ static void edt_ft5x06_ts_get_defaults(struct device *dev,
4191    
4192     error = device_property_read_u32(dev, "offset", &val);
4193     if (!error) {
4194     - edt_ft5x06_register_write(tsdata, reg_addr->reg_offset, val);
4195     + if (reg_addr->reg_offset != NO_REGISTER)
4196     + edt_ft5x06_register_write(tsdata,
4197     + reg_addr->reg_offset, val);
4198     tsdata->offset = val;
4199     }
4200    
4201     error = device_property_read_u32(dev, "offset-x", &val);
4202     if (!error) {
4203     - edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_x, val);
4204     + if (reg_addr->reg_offset_x != NO_REGISTER)
4205     + edt_ft5x06_register_write(tsdata,
4206     + reg_addr->reg_offset_x, val);
4207     tsdata->offset_x = val;
4208     }
4209    
4210     error = device_property_read_u32(dev, "offset-y", &val);
4211     if (!error) {
4212     - edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_y, val);
4213     + if (reg_addr->reg_offset_y != NO_REGISTER)
4214     + edt_ft5x06_register_write(tsdata,
4215     + reg_addr->reg_offset_y, val);
4216     tsdata->offset_y = val;
4217     }
4218     }
4219     diff --git a/drivers/mailbox/zynqmp-ipi-mailbox.c b/drivers/mailbox/zynqmp-ipi-mailbox.c
4220     index 86887c9a349a..f9cc674ba9b7 100644
4221     --- a/drivers/mailbox/zynqmp-ipi-mailbox.c
4222     +++ b/drivers/mailbox/zynqmp-ipi-mailbox.c
4223     @@ -504,10 +504,9 @@ static int zynqmp_ipi_mbox_probe(struct zynqmp_ipi_mbox *ipi_mbox,
4224     mchan->req_buf_size = resource_size(&res);
4225     mchan->req_buf = devm_ioremap(mdev, res.start,
4226     mchan->req_buf_size);
4227     - if (IS_ERR(mchan->req_buf)) {
4228     + if (!mchan->req_buf) {
4229     dev_err(mdev, "Unable to map IPI buffer I/O memory\n");
4230     - ret = PTR_ERR(mchan->req_buf);
4231     - return ret;
4232     + return -ENOMEM;
4233     }
4234     } else if (ret != -ENODEV) {
4235     dev_err(mdev, "Unmatched resource %s, %d.\n", name, ret);
4236     @@ -520,10 +519,9 @@ static int zynqmp_ipi_mbox_probe(struct zynqmp_ipi_mbox *ipi_mbox,
4237     mchan->resp_buf_size = resource_size(&res);
4238     mchan->resp_buf = devm_ioremap(mdev, res.start,
4239     mchan->resp_buf_size);
4240     - if (IS_ERR(mchan->resp_buf)) {
4241     + if (!mchan->resp_buf) {
4242     dev_err(mdev, "Unable to map IPI buffer I/O memory\n");
4243     - ret = PTR_ERR(mchan->resp_buf);
4244     - return ret;
4245     + return -ENOMEM;
4246     }
4247     } else if (ret != -ENODEV) {
4248     dev_err(mdev, "Unmatched resource %s.\n", name);
4249     @@ -543,10 +541,9 @@ static int zynqmp_ipi_mbox_probe(struct zynqmp_ipi_mbox *ipi_mbox,
4250     mchan->req_buf_size = resource_size(&res);
4251     mchan->req_buf = devm_ioremap(mdev, res.start,
4252     mchan->req_buf_size);
4253     - if (IS_ERR(mchan->req_buf)) {
4254     + if (!mchan->req_buf) {
4255     dev_err(mdev, "Unable to map IPI buffer I/O memory\n");
4256     - ret = PTR_ERR(mchan->req_buf);
4257     - return ret;
4258     + return -ENOMEM;
4259     }
4260     } else if (ret != -ENODEV) {
4261     dev_err(mdev, "Unmatched resource %s.\n", name);
4262     @@ -559,10 +556,9 @@ static int zynqmp_ipi_mbox_probe(struct zynqmp_ipi_mbox *ipi_mbox,
4263     mchan->resp_buf_size = resource_size(&res);
4264     mchan->resp_buf = devm_ioremap(mdev, res.start,
4265     mchan->resp_buf_size);
4266     - if (IS_ERR(mchan->resp_buf)) {
4267     + if (!mchan->resp_buf) {
4268     dev_err(mdev, "Unable to map IPI buffer I/O memory\n");
4269     - ret = PTR_ERR(mchan->resp_buf);
4270     - return ret;
4271     + return -ENOMEM;
4272     }
4273     } else if (ret != -ENODEV) {
4274     dev_err(mdev, "Unmatched resource %s.\n", name);
4275     diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
4276     index 46a8b5a91c38..3c1109fceb2f 100644
4277     --- a/drivers/md/bcache/btree.c
4278     +++ b/drivers/md/bcache/btree.c
4279     @@ -1442,7 +1442,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
4280     if (__set_blocks(n1, n1->keys + n2->keys,
4281     block_bytes(b->c)) >
4282     btree_blocks(new_nodes[i]))
4283     - goto out_nocoalesce;
4284     + goto out_unlock_nocoalesce;
4285    
4286     keys = n2->keys;
4287     /* Take the key of the node we're getting rid of */
4288     @@ -1471,7 +1471,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
4289    
4290     if (__bch_keylist_realloc(&keylist,
4291     bkey_u64s(&new_nodes[i]->key)))
4292     - goto out_nocoalesce;
4293     + goto out_unlock_nocoalesce;
4294    
4295     bch_btree_node_write(new_nodes[i], &cl);
4296     bch_keylist_add(&keylist, &new_nodes[i]->key);
4297     @@ -1517,6 +1517,10 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
4298     /* Invalidated our iterator */
4299     return -EINTR;
4300    
4301     +out_unlock_nocoalesce:
4302     + for (i = 0; i < nodes; i++)
4303     + mutex_unlock(&new_nodes[i]->write_lock);
4304     +
4305     out_nocoalesce:
4306     closure_sync(&cl);
4307    
4308     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
4309     index 456d790c918c..f2de4c73cc8f 100644
4310     --- a/drivers/md/dm-mpath.c
4311     +++ b/drivers/md/dm-mpath.c
4312     @@ -1856,7 +1856,7 @@ static int multipath_prepare_ioctl(struct dm_target *ti,
4313     int r;
4314    
4315     current_pgpath = READ_ONCE(m->current_pgpath);
4316     - if (!current_pgpath)
4317     + if (!current_pgpath || !test_bit(MPATHF_QUEUE_IO, &m->flags))
4318     current_pgpath = choose_pgpath(m, 0);
4319    
4320     if (current_pgpath) {
4321     diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
4322     index e0a6cf9239f1..e6b0039d07aa 100644
4323     --- a/drivers/md/dm-zoned-metadata.c
4324     +++ b/drivers/md/dm-zoned-metadata.c
4325     @@ -1589,7 +1589,7 @@ static struct dm_zone *dmz_get_rnd_zone_for_reclaim(struct dmz_metadata *zmd)
4326     return dzone;
4327     }
4328    
4329     - return ERR_PTR(-EBUSY);
4330     + return NULL;
4331     }
4332    
4333     /*
4334     @@ -1609,7 +1609,7 @@ static struct dm_zone *dmz_get_seq_zone_for_reclaim(struct dmz_metadata *zmd)
4335     return zone;
4336     }
4337    
4338     - return ERR_PTR(-EBUSY);
4339     + return NULL;
4340     }
4341    
4342     /*
4343     diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
4344     index e7ace908a9b7..d50817320e8e 100644
4345     --- a/drivers/md/dm-zoned-reclaim.c
4346     +++ b/drivers/md/dm-zoned-reclaim.c
4347     @@ -349,8 +349,8 @@ static int dmz_do_reclaim(struct dmz_reclaim *zrc)
4348    
4349     /* Get a data zone */
4350     dzone = dmz_get_zone_for_reclaim(zmd);
4351     - if (IS_ERR(dzone))
4352     - return PTR_ERR(dzone);
4353     + if (!dzone)
4354     + return -EBUSY;
4355    
4356     start = jiffies;
4357    
4358     diff --git a/drivers/mfd/stmfx.c b/drivers/mfd/stmfx.c
4359     index 857991cb3cbb..711979afd90a 100644
4360     --- a/drivers/mfd/stmfx.c
4361     +++ b/drivers/mfd/stmfx.c
4362     @@ -287,14 +287,21 @@ static int stmfx_irq_init(struct i2c_client *client)
4363    
4364     ret = regmap_write(stmfx->map, STMFX_REG_IRQ_OUT_PIN, irqoutpin);
4365     if (ret)
4366     - return ret;
4367     + goto irq_exit;
4368    
4369     ret = devm_request_threaded_irq(stmfx->dev, client->irq,
4370     NULL, stmfx_irq_handler,
4371     irqtrigger | IRQF_ONESHOT,
4372     "stmfx", stmfx);
4373     if (ret)
4374     - stmfx_irq_exit(client);
4375     + goto irq_exit;
4376     +
4377     + stmfx->irq = client->irq;
4378     +
4379     + return 0;
4380     +
4381     +irq_exit:
4382     + stmfx_irq_exit(client);
4383    
4384     return ret;
4385     }
4386     @@ -481,6 +488,8 @@ static int stmfx_suspend(struct device *dev)
4387     if (ret)
4388     return ret;
4389    
4390     + disable_irq(stmfx->irq);
4391     +
4392     if (stmfx->vdd)
4393     return regulator_disable(stmfx->vdd);
4394    
4395     @@ -501,6 +510,13 @@ static int stmfx_resume(struct device *dev)
4396     }
4397     }
4398    
4399     + /* Reset STMFX - supply has been stopped during suspend */
4400     + ret = stmfx_chip_reset(stmfx);
4401     + if (ret) {
4402     + dev_err(stmfx->dev, "Failed to reset chip: %d\n", ret);
4403     + return ret;
4404     + }
4405     +
4406     ret = regmap_raw_write(stmfx->map, STMFX_REG_SYS_CTRL,
4407     &stmfx->bkp_sysctrl, sizeof(stmfx->bkp_sysctrl));
4408     if (ret)
4409     @@ -517,6 +533,8 @@ static int stmfx_resume(struct device *dev)
4410     if (ret)
4411     return ret;
4412    
4413     + enable_irq(stmfx->irq);
4414     +
4415     return 0;
4416     }
4417     #endif
4418     diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
4419     index 1e9fe7d92597..737dede4a95c 100644
4420     --- a/drivers/mfd/wm8994-core.c
4421     +++ b/drivers/mfd/wm8994-core.c
4422     @@ -690,3 +690,4 @@ module_i2c_driver(wm8994_i2c_driver);
4423     MODULE_DESCRIPTION("Core support for the WM8994 audio CODEC");
4424     MODULE_LICENSE("GPL");
4425     MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
4426     +MODULE_SOFTDEP("pre: wm8994_regulator");
4427     diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
4428     index 842f2210dc7e..3a5d2890fe2a 100644
4429     --- a/drivers/misc/fastrpc.c
4430     +++ b/drivers/misc/fastrpc.c
4431     @@ -886,6 +886,7 @@ static int fastrpc_invoke_send(struct fastrpc_session_ctx *sctx,
4432     struct fastrpc_channel_ctx *cctx;
4433     struct fastrpc_user *fl = ctx->fl;
4434     struct fastrpc_msg *msg = &ctx->msg;
4435     + int ret;
4436    
4437     cctx = fl->cctx;
4438     msg->pid = fl->tgid;
4439     @@ -901,7 +902,13 @@ static int fastrpc_invoke_send(struct fastrpc_session_ctx *sctx,
4440     msg->size = roundup(ctx->msg_sz, PAGE_SIZE);
4441     fastrpc_context_get(ctx);
4442    
4443     - return rpmsg_send(cctx->rpdev->ept, (void *)msg, sizeof(*msg));
4444     + ret = rpmsg_send(cctx->rpdev->ept, (void *)msg, sizeof(*msg));
4445     +
4446     + if (ret)
4447     + fastrpc_context_put(ctx);
4448     +
4449     + return ret;
4450     +
4451     }
4452    
4453     static int fastrpc_internal_invoke(struct fastrpc_user *fl, u32 kernel,
4454     @@ -1434,8 +1441,10 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
4455     domains[domain_id]);
4456     data->miscdev.fops = &fastrpc_fops;
4457     err = misc_register(&data->miscdev);
4458     - if (err)
4459     + if (err) {
4460     + kfree(data);
4461     return err;
4462     + }
4463    
4464     kref_init(&data->refcount);
4465    
4466     diff --git a/drivers/misc/habanalabs/habanalabs.h b/drivers/misc/habanalabs/habanalabs.h
4467     index 75862be53c60..30addffd76f5 100644
4468     --- a/drivers/misc/habanalabs/habanalabs.h
4469     +++ b/drivers/misc/habanalabs/habanalabs.h
4470     @@ -23,7 +23,7 @@
4471    
4472     #define HL_MMAP_CB_MASK (0x8000000000000000ull >> PAGE_SHIFT)
4473    
4474     -#define HL_PENDING_RESET_PER_SEC 5
4475     +#define HL_PENDING_RESET_PER_SEC 30
4476    
4477     #define HL_DEVICE_TIMEOUT_USEC 1000000 /* 1 s */
4478    
4479     diff --git a/drivers/misc/xilinx_sdfec.c b/drivers/misc/xilinx_sdfec.c
4480     index 48ba7e02bed7..d4c14b617201 100644
4481     --- a/drivers/misc/xilinx_sdfec.c
4482     +++ b/drivers/misc/xilinx_sdfec.c
4483     @@ -602,10 +602,10 @@ static int xsdfec_table_write(struct xsdfec_dev *xsdfec, u32 offset,
4484     const u32 depth)
4485     {
4486     u32 reg = 0;
4487     - u32 res;
4488     - u32 n, i;
4489     + int res, i, nr_pages;
4490     + u32 n;
4491     u32 *addr = NULL;
4492     - struct page *page[MAX_NUM_PAGES];
4493     + struct page *pages[MAX_NUM_PAGES];
4494    
4495     /*
4496     * Writes that go beyond the length of
4497     @@ -622,15 +622,22 @@ static int xsdfec_table_write(struct xsdfec_dev *xsdfec, u32 offset,
4498     if ((len * XSDFEC_REG_WIDTH_JUMP) % PAGE_SIZE)
4499     n += 1;
4500    
4501     - res = get_user_pages_fast((unsigned long)src_ptr, n, 0, page);
4502     - if (res < n) {
4503     - for (i = 0; i < res; i++)
4504     - put_page(page[i]);
4505     + if (WARN_ON_ONCE(n > INT_MAX))
4506     + return -EINVAL;
4507     +
4508     + nr_pages = n;
4509     +
4510     + res = get_user_pages_fast((unsigned long)src_ptr, nr_pages, 0, pages);
4511     + if (res < nr_pages) {
4512     + if (res > 0) {
4513     + for (i = 0; i < res; i++)
4514     + put_page(pages[i]);
4515     + }
4516     return -EINVAL;
4517     }
4518    
4519     - for (i = 0; i < n; i++) {
4520     - addr = kmap(page[i]);
4521     + for (i = 0; i < nr_pages; i++) {
4522     + addr = kmap(pages[i]);
4523     do {
4524     xsdfec_regwrite(xsdfec,
4525     base_addr + ((offset + reg) *
4526     @@ -639,7 +646,7 @@ static int xsdfec_table_write(struct xsdfec_dev *xsdfec, u32 offset,
4527     reg++;
4528     } while ((reg < len) &&
4529     ((reg * XSDFEC_REG_WIDTH_JUMP) % PAGE_SIZE));
4530     - put_page(page[i]);
4531     + put_page(pages[i]);
4532     }
4533     return reg;
4534     }
4535     diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
4536     index a69c9b9878b7..636966e93517 100644
4537     --- a/drivers/net/dsa/lantiq_gswip.c
4538     +++ b/drivers/net/dsa/lantiq_gswip.c
4539     @@ -1451,7 +1451,8 @@ static void gswip_phylink_validate(struct dsa_switch *ds, int port,
4540    
4541     unsupported:
4542     bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
4543     - dev_err(ds->dev, "Unsupported interface: %d\n", state->interface);
4544     + dev_err(ds->dev, "Unsupported interface '%s' for port %d\n",
4545     + phy_modes(state->interface), port);
4546     return;
4547     }
4548    
4549     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4550     index 63ee0c49be7c..b5147bd6cba6 100644
4551     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4552     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4553     @@ -9992,7 +9992,7 @@ static void bnxt_timer(struct timer_list *t)
4554     struct bnxt *bp = from_timer(bp, t, timer);
4555     struct net_device *dev = bp->dev;
4556    
4557     - if (!netif_running(dev))
4558     + if (!netif_running(dev) || !test_bit(BNXT_STATE_OPEN, &bp->state))
4559     return;
4560    
4561     if (atomic_read(&bp->intr_sem) != 0)
4562     diff --git a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
4563     index cdd7e5da4a74..d375e438d805 100644
4564     --- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
4565     +++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
4566     @@ -235,6 +235,11 @@ static void octeon_mgmt_rx_fill_ring(struct net_device *netdev)
4567    
4568     /* Put it in the ring. */
4569     p->rx_ring[p->rx_next_fill] = re.d64;
4570     + /* Make sure there is no reorder of filling the ring and ringing
4571     + * the bell
4572     + */
4573     + wmb();
4574     +
4575     dma_sync_single_for_device(p->dev, p->rx_ring_handle,
4576     ring_size_to_bytes(OCTEON_MGMT_RX_RING_SIZE),
4577     DMA_BIDIRECTIONAL);
4578     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
4579     index 108297a099ed..1ec33c614474 100644
4580     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
4581     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
4582     @@ -6345,11 +6345,17 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
4583     struct net_device *netdev = pci_get_drvdata(pdev);
4584     struct e1000_adapter *adapter = netdev_priv(netdev);
4585     struct e1000_hw *hw = &adapter->hw;
4586     - u32 ctrl, ctrl_ext, rctl, status;
4587     - /* Runtime suspend should only enable wakeup for link changes */
4588     - u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
4589     + u32 ctrl, ctrl_ext, rctl, status, wufc;
4590     int retval = 0;
4591    
4592     + /* Runtime suspend should only enable wakeup for link changes */
4593     + if (runtime)
4594     + wufc = E1000_WUFC_LNKC;
4595     + else if (device_may_wakeup(&pdev->dev))
4596     + wufc = adapter->wol;
4597     + else
4598     + wufc = 0;
4599     +
4600     status = er32(STATUS);
4601     if (status & E1000_STATUS_LU)
4602     wufc &= ~E1000_WUFC_LNKC;
4603     @@ -6406,7 +6412,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
4604     if (adapter->hw.phy.type == e1000_phy_igp_3) {
4605     e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
4606     } else if (hw->mac.type >= e1000_pch_lpt) {
4607     - if (!(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
4608     + if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
4609     /* ULP does not support wake from unicast, multicast
4610     * or broadcast.
4611     */
4612     diff --git a/drivers/net/ethernet/intel/iavf/iavf.h b/drivers/net/ethernet/intel/iavf/iavf.h
4613     index bd1b1ed323f4..6b9117a350fa 100644
4614     --- a/drivers/net/ethernet/intel/iavf/iavf.h
4615     +++ b/drivers/net/ethernet/intel/iavf/iavf.h
4616     @@ -87,6 +87,10 @@ struct iavf_vsi {
4617     #define IAVF_HLUT_ARRAY_SIZE ((IAVF_VFQF_HLUT_MAX_INDEX + 1) * 4)
4618     #define IAVF_MBPS_DIVISOR 125000 /* divisor to convert to Mbps */
4619    
4620     +#define IAVF_VIRTCHNL_VF_RESOURCE_SIZE (sizeof(struct virtchnl_vf_resource) + \
4621     + (IAVF_MAX_VF_VSI * \
4622     + sizeof(struct virtchnl_vsi_resource)))
4623     +
4624     /* MAX_MSIX_Q_VECTORS of these are allocated,
4625     * but we only use one per queue-specific vector.
4626     */
4627     @@ -306,6 +310,14 @@ struct iavf_adapter {
4628     bool netdev_registered;
4629     bool link_up;
4630     enum virtchnl_link_speed link_speed;
4631     + /* This is only populated if the VIRTCHNL_VF_CAP_ADV_LINK_SPEED is set
4632     + * in vf_res->vf_cap_flags. Use ADV_LINK_SUPPORT macro to determine if
4633     + * this field is valid. This field should be used going forward and the
4634     + * enum virtchnl_link_speed above should be considered the legacy way of
4635     + * storing/communicating link speeds.
4636     + */
4637     + u32 link_speed_mbps;
4638     +
4639     enum virtchnl_ops current_op;
4640     #define CLIENT_ALLOWED(_a) ((_a)->vf_res ? \
4641     (_a)->vf_res->vf_cap_flags & \
4642     @@ -322,6 +334,8 @@ struct iavf_adapter {
4643     VIRTCHNL_VF_OFFLOAD_RSS_PF)))
4644     #define VLAN_ALLOWED(_a) ((_a)->vf_res->vf_cap_flags & \
4645     VIRTCHNL_VF_OFFLOAD_VLAN)
4646     +#define ADV_LINK_SUPPORT(_a) ((_a)->vf_res->vf_cap_flags & \
4647     + VIRTCHNL_VF_CAP_ADV_LINK_SPEED)
4648     struct virtchnl_vf_resource *vf_res; /* incl. all VSIs */
4649     struct virtchnl_vsi_resource *vsi_res; /* our LAN VSI */
4650     struct virtchnl_version_info pf_version;
4651     diff --git a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
4652     index dad3eec8ccd8..758bef02a2a8 100644
4653     --- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
4654     +++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
4655     @@ -278,7 +278,18 @@ static int iavf_get_link_ksettings(struct net_device *netdev,
4656     ethtool_link_ksettings_zero_link_mode(cmd, supported);
4657     cmd->base.autoneg = AUTONEG_DISABLE;
4658     cmd->base.port = PORT_NONE;
4659     - /* Set speed and duplex */
4660     + cmd->base.duplex = DUPLEX_FULL;
4661     +
4662     + if (ADV_LINK_SUPPORT(adapter)) {
4663     + if (adapter->link_speed_mbps &&
4664     + adapter->link_speed_mbps < U32_MAX)
4665     + cmd->base.speed = adapter->link_speed_mbps;
4666     + else
4667     + cmd->base.speed = SPEED_UNKNOWN;
4668     +
4669     + return 0;
4670     + }
4671     +
4672     switch (adapter->link_speed) {
4673     case IAVF_LINK_SPEED_40GB:
4674     cmd->base.speed = SPEED_40000;
4675     @@ -306,7 +317,6 @@ static int iavf_get_link_ksettings(struct net_device *netdev,
4676     default:
4677     break;
4678     }
4679     - cmd->base.duplex = DUPLEX_FULL;
4680    
4681     return 0;
4682     }
4683     diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
4684     index 8e16be960e96..bacc5fb7eba2 100644
4685     --- a/drivers/net/ethernet/intel/iavf/iavf_main.c
4686     +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
4687     @@ -1756,17 +1756,17 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
4688     struct net_device *netdev = adapter->netdev;
4689     struct pci_dev *pdev = adapter->pdev;
4690     struct iavf_hw *hw = &adapter->hw;
4691     - int err = 0, bufsz;
4692     + int err;
4693    
4694     WARN_ON(adapter->state != __IAVF_INIT_GET_RESOURCES);
4695     /* aq msg sent, awaiting reply */
4696     if (!adapter->vf_res) {
4697     - bufsz = sizeof(struct virtchnl_vf_resource) +
4698     - (IAVF_MAX_VF_VSI *
4699     - sizeof(struct virtchnl_vsi_resource));
4700     - adapter->vf_res = kzalloc(bufsz, GFP_KERNEL);
4701     - if (!adapter->vf_res)
4702     + adapter->vf_res = kzalloc(IAVF_VIRTCHNL_VF_RESOURCE_SIZE,
4703     + GFP_KERNEL);
4704     + if (!adapter->vf_res) {
4705     + err = -ENOMEM;
4706     goto err;
4707     + }
4708     }
4709     err = iavf_get_vf_config(adapter);
4710     if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK) {
4711     @@ -2036,7 +2036,7 @@ static void iavf_disable_vf(struct iavf_adapter *adapter)
4712     iavf_reset_interrupt_capability(adapter);
4713     iavf_free_queues(adapter);
4714     iavf_free_q_vectors(adapter);
4715     - kfree(adapter->vf_res);
4716     + memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE);
4717     iavf_shutdown_adminq(&adapter->hw);
4718     adapter->netdev->flags &= ~IFF_UP;
4719     clear_bit(__IAVF_IN_CRITICAL_TASK, &adapter->crit_section);
4720     @@ -2487,6 +2487,16 @@ static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter,
4721     {
4722     int speed = 0, ret = 0;
4723    
4724     + if (ADV_LINK_SUPPORT(adapter)) {
4725     + if (adapter->link_speed_mbps < U32_MAX) {
4726     + speed = adapter->link_speed_mbps;
4727     + goto validate_bw;
4728     + } else {
4729     + dev_err(&adapter->pdev->dev, "Unknown link speed\n");
4730     + return -EINVAL;
4731     + }
4732     + }
4733     +
4734     switch (adapter->link_speed) {
4735     case IAVF_LINK_SPEED_40GB:
4736     speed = 40000;
4737     @@ -2510,6 +2520,7 @@ static int iavf_validate_tx_bandwidth(struct iavf_adapter *adapter,
4738     break;
4739     }
4740    
4741     +validate_bw:
4742     if (max_tx_rate > speed) {
4743     dev_err(&adapter->pdev->dev,
4744     "Invalid tx rate specified\n");
4745     diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
4746     index 1ab9cb339acb..9655318803b7 100644
4747     --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
4748     +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
4749     @@ -139,7 +139,8 @@ int iavf_send_vf_config_msg(struct iavf_adapter *adapter)
4750     VIRTCHNL_VF_OFFLOAD_ENCAP |
4751     VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM |
4752     VIRTCHNL_VF_OFFLOAD_REQ_QUEUES |
4753     - VIRTCHNL_VF_OFFLOAD_ADQ;
4754     + VIRTCHNL_VF_OFFLOAD_ADQ |
4755     + VIRTCHNL_VF_CAP_ADV_LINK_SPEED;
4756    
4757     adapter->current_op = VIRTCHNL_OP_GET_VF_RESOURCES;
4758     adapter->aq_required &= ~IAVF_FLAG_AQ_GET_CONFIG;
4759     @@ -918,6 +919,8 @@ void iavf_disable_vlan_stripping(struct iavf_adapter *adapter)
4760     iavf_send_pf_msg(adapter, VIRTCHNL_OP_DISABLE_VLAN_STRIPPING, NULL, 0);
4761     }
4762    
4763     +#define IAVF_MAX_SPEED_STRLEN 13
4764     +
4765     /**
4766     * iavf_print_link_message - print link up or down
4767     * @adapter: adapter structure
4768     @@ -927,37 +930,99 @@ void iavf_disable_vlan_stripping(struct iavf_adapter *adapter)
4769     static void iavf_print_link_message(struct iavf_adapter *adapter)
4770     {
4771     struct net_device *netdev = adapter->netdev;
4772     - char *speed = "Unknown ";
4773     + int link_speed_mbps;
4774     + char *speed;
4775    
4776     if (!adapter->link_up) {
4777     netdev_info(netdev, "NIC Link is Down\n");
4778     return;
4779     }
4780    
4781     + speed = kcalloc(1, IAVF_MAX_SPEED_STRLEN, GFP_KERNEL);
4782     + if (!speed)
4783     + return;
4784     +
4785     + if (ADV_LINK_SUPPORT(adapter)) {
4786     + link_speed_mbps = adapter->link_speed_mbps;
4787     + goto print_link_msg;
4788     + }
4789     +
4790     switch (adapter->link_speed) {
4791     case IAVF_LINK_SPEED_40GB:
4792     - speed = "40 G";
4793     + link_speed_mbps = SPEED_40000;
4794     break;
4795     case IAVF_LINK_SPEED_25GB:
4796     - speed = "25 G";
4797     + link_speed_mbps = SPEED_25000;
4798     break;
4799     case IAVF_LINK_SPEED_20GB:
4800     - speed = "20 G";
4801     + link_speed_mbps = SPEED_20000;
4802     break;
4803     case IAVF_LINK_SPEED_10GB:
4804     - speed = "10 G";
4805     + link_speed_mbps = SPEED_10000;
4806     break;
4807     case IAVF_LINK_SPEED_1GB:
4808     - speed = "1000 M";
4809     + link_speed_mbps = SPEED_1000;
4810     break;
4811     case IAVF_LINK_SPEED_100MB:
4812     - speed = "100 M";
4813     + link_speed_mbps = SPEED_100;
4814     break;
4815     default:
4816     + link_speed_mbps = SPEED_UNKNOWN;
4817     break;
4818     }
4819    
4820     - netdev_info(netdev, "NIC Link is Up %sbps Full Duplex\n", speed);
4821     +print_link_msg:
4822     + if (link_speed_mbps > SPEED_1000) {
4823     + if (link_speed_mbps == SPEED_2500)
4824     + snprintf(speed, IAVF_MAX_SPEED_STRLEN, "2.5 Gbps");
4825     + else
4826     + /* convert to Gbps inline */
4827     + snprintf(speed, IAVF_MAX_SPEED_STRLEN, "%d %s",
4828     + link_speed_mbps / 1000, "Gbps");
4829     + } else if (link_speed_mbps == SPEED_UNKNOWN) {
4830     + snprintf(speed, IAVF_MAX_SPEED_STRLEN, "%s", "Unknown Mbps");
4831     + } else {
4832     + snprintf(speed, IAVF_MAX_SPEED_STRLEN, "%u %s",
4833     + link_speed_mbps, "Mbps");
4834     + }
4835     +
4836     + netdev_info(netdev, "NIC Link is Up Speed is %s Full Duplex\n", speed);
4837     + kfree(speed);
4838     +}
4839     +
4840     +/**
4841     + * iavf_get_vpe_link_status
4842     + * @adapter: adapter structure
4843     + * @vpe: virtchnl_pf_event structure
4844     + *
4845     + * Helper function for determining the link status
4846     + **/
4847     +static bool
4848     +iavf_get_vpe_link_status(struct iavf_adapter *adapter,
4849     + struct virtchnl_pf_event *vpe)
4850     +{
4851     + if (ADV_LINK_SUPPORT(adapter))
4852     + return vpe->event_data.link_event_adv.link_status;
4853     + else
4854     + return vpe->event_data.link_event.link_status;
4855     +}
4856     +
4857     +/**
4858     + * iavf_set_adapter_link_speed_from_vpe
4859     + * @adapter: adapter structure for which we are setting the link speed
4860     + * @vpe: virtchnl_pf_event structure that contains the link speed we are setting
4861     + *
4862     + * Helper function for setting iavf_adapter link speed
4863     + **/
4864     +static void
4865     +iavf_set_adapter_link_speed_from_vpe(struct iavf_adapter *adapter,
4866     + struct virtchnl_pf_event *vpe)
4867     +{
4868     + if (ADV_LINK_SUPPORT(adapter))
4869     + adapter->link_speed_mbps =
4870     + vpe->event_data.link_event_adv.link_speed;
4871     + else
4872     + adapter->link_speed = vpe->event_data.link_event.link_speed;
4873     }
4874    
4875     /**
4876     @@ -1187,12 +1252,11 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,
4877     if (v_opcode == VIRTCHNL_OP_EVENT) {
4878     struct virtchnl_pf_event *vpe =
4879     (struct virtchnl_pf_event *)msg;
4880     - bool link_up = vpe->event_data.link_event.link_status;
4881     + bool link_up = iavf_get_vpe_link_status(adapter, vpe);
4882    
4883     switch (vpe->event) {
4884     case VIRTCHNL_EVENT_LINK_CHANGE:
4885     - adapter->link_speed =
4886     - vpe->event_data.link_event.link_speed;
4887     + iavf_set_adapter_link_speed_from_vpe(adapter, vpe);
4888    
4889     /* we've already got the right link status, bail */
4890     if (adapter->link_up == link_up)
4891     diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
4892     index 373b8c832850..cf5d447af7db 100644
4893     --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
4894     +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
4895     @@ -5925,8 +5925,8 @@ static int mvpp2_remove(struct platform_device *pdev)
4896     {
4897     struct mvpp2 *priv = platform_get_drvdata(pdev);
4898     struct fwnode_handle *fwnode = pdev->dev.fwnode;
4899     + int i = 0, poolnum = MVPP2_BM_POOLS_NUM;
4900     struct fwnode_handle *port_fwnode;
4901     - int i = 0;
4902    
4903     mvpp2_dbgfs_cleanup(priv);
4904    
4905     @@ -5940,7 +5940,10 @@ static int mvpp2_remove(struct platform_device *pdev)
4906    
4907     destroy_workqueue(priv->stats_queue);
4908    
4909     - for (i = 0; i < MVPP2_BM_POOLS_NUM; i++) {
4910     + if (priv->percpu_pools)
4911     + poolnum = mvpp2_get_nrxqs(priv) * 2;
4912     +
4913     + for (i = 0; i < poolnum; i++) {
4914     struct mvpp2_bm_pool *bm_pool = &priv->bm_pools[i];
4915    
4916     mvpp2_bm_pool_destroy(&pdev->dev, priv, bm_pool);
4917     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
4918     index 7c77378accf0..f012aac83b10 100644
4919     --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
4920     +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
4921     @@ -181,7 +181,7 @@ static struct mlx5dr_qp *dr_create_rc_qp(struct mlx5_core_dev *mdev,
4922     in, pas));
4923    
4924     err = mlx5_core_create_qp(mdev, &dr_qp->mqp, in, inlen);
4925     - kfree(in);
4926     + kvfree(in);
4927    
4928     if (err) {
4929     mlx5_core_warn(mdev, " Can't create QP\n");
4930     diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
4931     index aa101f72d405..cac75c7d1d01 100644
4932     --- a/drivers/net/geneve.c
4933     +++ b/drivers/net/geneve.c
4934     @@ -987,9 +987,10 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
4935     if (geneve->collect_md) {
4936     info = skb_tunnel_info(skb);
4937     if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) {
4938     - err = -EINVAL;
4939     netdev_dbg(dev, "no tunnel metadata\n");
4940     - goto tx_error;
4941     + dev_kfree_skb(skb);
4942     + dev->stats.tx_dropped++;
4943     + return NETDEV_TX_OK;
4944     }
4945     } else {
4946     info = &geneve->info;
4947     @@ -1006,7 +1007,7 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
4948    
4949     if (likely(!err))
4950     return NETDEV_TX_OK;
4951     -tx_error:
4952     +
4953     dev_kfree_skb(skb);
4954    
4955     if (err == -ELOOP)
4956     diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
4957     index 71cdef9fb56b..5ab53e9942f3 100644
4958     --- a/drivers/net/hamradio/yam.c
4959     +++ b/drivers/net/hamradio/yam.c
4960     @@ -1133,6 +1133,7 @@ static int __init yam_init_driver(void)
4961     err = register_netdev(dev);
4962     if (err) {
4963     printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name);
4964     + free_netdev(dev);
4965     goto error;
4966     }
4967     yam_devs[i] = dev;
4968     diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
4969     index a7796134e3be..91cf1d167263 100644
4970     --- a/drivers/net/phy/marvell.c
4971     +++ b/drivers/net/phy/marvell.c
4972     @@ -358,7 +358,7 @@ static int m88e1101_config_aneg(struct phy_device *phydev)
4973     return marvell_config_aneg(phydev);
4974     }
4975    
4976     -#ifdef CONFIG_OF_MDIO
4977     +#if IS_ENABLED(CONFIG_OF_MDIO)
4978     /* Set and/or override some configuration registers based on the
4979     * marvell,reg-init property stored in the of_node for the phydev.
4980     *
4981     diff --git a/drivers/ntb/core.c b/drivers/ntb/core.c
4982     index 2581ab724c34..f8f75a504a58 100644
4983     --- a/drivers/ntb/core.c
4984     +++ b/drivers/ntb/core.c
4985     @@ -214,10 +214,8 @@ int ntb_default_port_number(struct ntb_dev *ntb)
4986     case NTB_TOPO_B2B_DSD:
4987     return NTB_PORT_SEC_DSD;
4988     default:
4989     - break;
4990     + return 0;
4991     }
4992     -
4993     - return -EINVAL;
4994     }
4995     EXPORT_SYMBOL(ntb_default_port_number);
4996    
4997     @@ -240,10 +238,8 @@ int ntb_default_peer_port_number(struct ntb_dev *ntb, int pidx)
4998     case NTB_TOPO_B2B_DSD:
4999     return NTB_PORT_PRI_USD;
5000     default:
5001     - break;
5002     + return 0;
5003     }
5004     -
5005     - return -EINVAL;
5006     }
5007     EXPORT_SYMBOL(ntb_default_peer_port_number);
5008    
5009     @@ -315,4 +311,3 @@ static void __exit ntb_driver_exit(void)
5010     bus_unregister(&ntb_bus);
5011     }
5012     module_exit(ntb_driver_exit);
5013     -
5014     diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c
5015     index e9b7c2dfc730..5ce4766a6c9e 100644
5016     --- a/drivers/ntb/test/ntb_perf.c
5017     +++ b/drivers/ntb/test/ntb_perf.c
5018     @@ -158,6 +158,8 @@ struct perf_peer {
5019     /* NTB connection setup service */
5020     struct work_struct service;
5021     unsigned long sts;
5022     +
5023     + struct completion init_comp;
5024     };
5025     #define to_peer_service(__work) \
5026     container_of(__work, struct perf_peer, service)
5027     @@ -546,6 +548,7 @@ static int perf_setup_outbuf(struct perf_peer *peer)
5028    
5029     /* Initialization is finally done */
5030     set_bit(PERF_STS_DONE, &peer->sts);
5031     + complete_all(&peer->init_comp);
5032    
5033     return 0;
5034     }
5035     @@ -556,7 +559,7 @@ static void perf_free_inbuf(struct perf_peer *peer)
5036     return;
5037    
5038     (void)ntb_mw_clear_trans(peer->perf->ntb, peer->pidx, peer->gidx);
5039     - dma_free_coherent(&peer->perf->ntb->dev, peer->inbuf_size,
5040     + dma_free_coherent(&peer->perf->ntb->pdev->dev, peer->inbuf_size,
5041     peer->inbuf, peer->inbuf_xlat);
5042     peer->inbuf = NULL;
5043     }
5044     @@ -585,8 +588,9 @@ static int perf_setup_inbuf(struct perf_peer *peer)
5045    
5046     perf_free_inbuf(peer);
5047    
5048     - peer->inbuf = dma_alloc_coherent(&perf->ntb->dev, peer->inbuf_size,
5049     - &peer->inbuf_xlat, GFP_KERNEL);
5050     + peer->inbuf = dma_alloc_coherent(&perf->ntb->pdev->dev,
5051     + peer->inbuf_size, &peer->inbuf_xlat,
5052     + GFP_KERNEL);
5053     if (!peer->inbuf) {
5054     dev_err(&perf->ntb->dev, "Failed to alloc inbuf of %pa\n",
5055     &peer->inbuf_size);
5056     @@ -636,6 +640,7 @@ static void perf_service_work(struct work_struct *work)
5057     perf_setup_outbuf(peer);
5058    
5059     if (test_and_clear_bit(PERF_CMD_CLEAR, &peer->sts)) {
5060     + init_completion(&peer->init_comp);
5061     clear_bit(PERF_STS_DONE, &peer->sts);
5062     if (test_bit(0, &peer->perf->busy_flag) &&
5063     peer == peer->perf->test_peer) {
5064     @@ -652,7 +657,7 @@ static int perf_init_service(struct perf_ctx *perf)
5065     {
5066     u64 mask;
5067    
5068     - if (ntb_peer_mw_count(perf->ntb) < perf->pcnt + 1) {
5069     + if (ntb_peer_mw_count(perf->ntb) < perf->pcnt) {
5070     dev_err(&perf->ntb->dev, "Not enough memory windows\n");
5071     return -EINVAL;
5072     }
5073     @@ -1051,8 +1056,9 @@ static int perf_submit_test(struct perf_peer *peer)
5074     struct perf_thread *pthr;
5075     int tidx, ret;
5076    
5077     - if (!test_bit(PERF_STS_DONE, &peer->sts))
5078     - return -ENOLINK;
5079     + ret = wait_for_completion_interruptible(&peer->init_comp);
5080     + if (ret < 0)
5081     + return ret;
5082    
5083     if (test_and_set_bit_lock(0, &perf->busy_flag))
5084     return -EBUSY;
5085     @@ -1418,10 +1424,21 @@ static int perf_init_peers(struct perf_ctx *perf)
5086     peer->gidx = pidx;
5087     }
5088     INIT_WORK(&peer->service, perf_service_work);
5089     + init_completion(&peer->init_comp);
5090     }
5091     if (perf->gidx == -1)
5092     perf->gidx = pidx;
5093    
5094     + /*
5095     + * Hardware with only two ports may not have unique port
5096     + * numbers. In this case, the gidxs should all be zero.
5097     + */
5098     + if (perf->pcnt == 1 && ntb_port_number(perf->ntb) == 0 &&
5099     + ntb_peer_port_number(perf->ntb, 0) == 0) {
5100     + perf->gidx = 0;
5101     + perf->peers[0].gidx = 0;
5102     + }
5103     +
5104     for (pidx = 0; pidx < perf->pcnt; pidx++) {
5105     ret = perf_setup_peer_mw(&perf->peers[pidx]);
5106     if (ret)
5107     @@ -1517,4 +1534,3 @@ static void __exit perf_exit(void)
5108     destroy_workqueue(perf_wq);
5109     }
5110     module_exit(perf_exit);
5111     -
5112     diff --git a/drivers/ntb/test/ntb_pingpong.c b/drivers/ntb/test/ntb_pingpong.c
5113     index 65865e460ab8..18d00eec7b02 100644
5114     --- a/drivers/ntb/test/ntb_pingpong.c
5115     +++ b/drivers/ntb/test/ntb_pingpong.c
5116     @@ -121,15 +121,14 @@ static int pp_find_next_peer(struct pp_ctx *pp)
5117     link = ntb_link_is_up(pp->ntb, NULL, NULL);
5118    
5119     /* Find next available peer */
5120     - if (link & pp->nmask) {
5121     + if (link & pp->nmask)
5122     pidx = __ffs64(link & pp->nmask);
5123     - out_db = BIT_ULL(pidx + 1);
5124     - } else if (link & pp->pmask) {
5125     + else if (link & pp->pmask)
5126     pidx = __ffs64(link & pp->pmask);
5127     - out_db = BIT_ULL(pidx);
5128     - } else {
5129     + else
5130     return -ENODEV;
5131     - }
5132     +
5133     + out_db = BIT_ULL(ntb_peer_port_number(pp->ntb, pidx));
5134    
5135     spin_lock(&pp->lock);
5136     pp->out_pidx = pidx;
5137     @@ -303,7 +302,7 @@ static void pp_init_flds(struct pp_ctx *pp)
5138     break;
5139     }
5140    
5141     - pp->in_db = BIT_ULL(pidx);
5142     + pp->in_db = BIT_ULL(lport);
5143     pp->pmask = GENMASK_ULL(pidx, 0) >> 1;
5144     pp->nmask = GENMASK_ULL(pcnt - 1, pidx);
5145    
5146     @@ -435,4 +434,3 @@ static void __exit pp_exit(void)
5147     debugfs_remove_recursive(pp_dbgfs_topdir);
5148     }
5149     module_exit(pp_exit);
5150     -
5151     diff --git a/drivers/ntb/test/ntb_tool.c b/drivers/ntb/test/ntb_tool.c
5152     index d592c0ffbd19..311d6ab8d016 100644
5153     --- a/drivers/ntb/test/ntb_tool.c
5154     +++ b/drivers/ntb/test/ntb_tool.c
5155     @@ -504,7 +504,7 @@ static ssize_t tool_peer_link_read(struct file *filep, char __user *ubuf,
5156     buf[1] = '\n';
5157     buf[2] = '\0';
5158    
5159     - return simple_read_from_buffer(ubuf, size, offp, buf, 3);
5160     + return simple_read_from_buffer(ubuf, size, offp, buf, 2);
5161     }
5162    
5163     static TOOL_FOPS_RDWR(tool_peer_link_fops,
5164     @@ -590,7 +590,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx, int widx,
5165     inmw->size = min_t(resource_size_t, req_size, size);
5166     inmw->size = round_up(inmw->size, addr_align);
5167     inmw->size = round_up(inmw->size, size_align);
5168     - inmw->mm_base = dma_alloc_coherent(&tc->ntb->dev, inmw->size,
5169     + inmw->mm_base = dma_alloc_coherent(&tc->ntb->pdev->dev, inmw->size,
5170     &inmw->dma_base, GFP_KERNEL);
5171     if (!inmw->mm_base)
5172     return -ENOMEM;
5173     @@ -612,7 +612,7 @@ static int tool_setup_mw(struct tool_ctx *tc, int pidx, int widx,
5174     return 0;
5175    
5176     err_free_dma:
5177     - dma_free_coherent(&tc->ntb->dev, inmw->size, inmw->mm_base,
5178     + dma_free_coherent(&tc->ntb->pdev->dev, inmw->size, inmw->mm_base,
5179     inmw->dma_base);
5180     inmw->mm_base = NULL;
5181     inmw->dma_base = 0;
5182     @@ -629,7 +629,7 @@ static void tool_free_mw(struct tool_ctx *tc, int pidx, int widx)
5183    
5184     if (inmw->mm_base != NULL) {
5185     ntb_mw_clear_trans(tc->ntb, pidx, widx);
5186     - dma_free_coherent(&tc->ntb->dev, inmw->size,
5187     + dma_free_coherent(&tc->ntb->pdev->dev, inmw->size,
5188     inmw->mm_base, inmw->dma_base);
5189     }
5190    
5191     @@ -1690,4 +1690,3 @@ static void __exit tool_exit(void)
5192     debugfs_remove_recursive(tool_dbgfs_topdir);
5193     }
5194     module_exit(tool_exit);
5195     -
5196     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
5197     index 1c2129493508..a13cae190196 100644
5198     --- a/drivers/nvme/host/pci.c
5199     +++ b/drivers/nvme/host/pci.c
5200     @@ -2971,9 +2971,15 @@ static int nvme_suspend(struct device *dev)
5201     * the PCI bus layer to put it into D3 in order to take the PCIe link
5202     * down, so as to allow the platform to achieve its minimum low-power
5203     * state (which may not be possible if the link is up).
5204     + *
5205     + * If a host memory buffer is enabled, shut down the device as the NVMe
5206     + * specification allows the device to access the host memory buffer in
5207     + * host DRAM from all power states, but hosts will fail access to DRAM
5208     + * during S3.
5209     */
5210     if (pm_suspend_via_firmware() || !ctrl->npss ||
5211     !pcie_aspm_enabled(pdev) ||
5212     + ndev->nr_host_mem_descs ||
5213     (ndev->ctrl.quirks & NVME_QUIRK_SIMPLE_SUSPEND))
5214     return nvme_disable_prepare_reset(ndev, true);
5215    
5216     diff --git a/drivers/of/kobj.c b/drivers/of/kobj.c
5217     index c72eef988041..a32e60b024b8 100644
5218     --- a/drivers/of/kobj.c
5219     +++ b/drivers/of/kobj.c
5220     @@ -134,8 +134,6 @@ int __of_attach_node_sysfs(struct device_node *np)
5221     if (!name)
5222     return -ENOMEM;
5223    
5224     - of_node_get(np);
5225     -
5226     rc = kobject_add(&np->kobj, parent, "%s", name);
5227     kfree(name);
5228     if (rc)
5229     @@ -144,6 +142,7 @@ int __of_attach_node_sysfs(struct device_node *np)
5230     for_each_property_of_node(np, pp)
5231     __of_add_property_sysfs(np, pp);
5232    
5233     + of_node_get(np);
5234     return 0;
5235     }
5236    
5237     diff --git a/drivers/pci/controller/dwc/pci-meson.c b/drivers/pci/controller/dwc/pci-meson.c
5238     index b927a92e3463..8c9f88704874 100644
5239     --- a/drivers/pci/controller/dwc/pci-meson.c
5240     +++ b/drivers/pci/controller/dwc/pci-meson.c
5241     @@ -301,11 +301,11 @@ static void meson_pcie_init_dw(struct meson_pcie *mp)
5242     meson_cfg_writel(mp, val, PCIE_CFG0);
5243    
5244     val = meson_elb_readl(mp, PCIE_PORT_LINK_CTRL_OFF);
5245     - val &= ~LINK_CAPABLE_MASK;
5246     + val &= ~(LINK_CAPABLE_MASK | FAST_LINK_MODE);
5247     meson_elb_writel(mp, val, PCIE_PORT_LINK_CTRL_OFF);
5248    
5249     val = meson_elb_readl(mp, PCIE_PORT_LINK_CTRL_OFF);
5250     - val |= LINK_CAPABLE_X1 | FAST_LINK_MODE;
5251     + val |= LINK_CAPABLE_X1;
5252     meson_elb_writel(mp, val, PCIE_PORT_LINK_CTRL_OFF);
5253    
5254     val = meson_elb_readl(mp, PCIE_GEN2_CTRL_OFF);
5255     diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
5256     index 8615f1548882..fbcb211cceb4 100644
5257     --- a/drivers/pci/controller/dwc/pcie-designware-host.c
5258     +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
5259     @@ -263,6 +263,8 @@ int dw_pcie_allocate_domains(struct pcie_port *pp)
5260     return -ENOMEM;
5261     }
5262    
5263     + irq_domain_update_bus_token(pp->irq_domain, DOMAIN_BUS_NEXUS);
5264     +
5265     pp->msi_domain = pci_msi_create_irq_domain(fwnode,
5266     &dw_pcie_msi_domain_info,
5267     pp->irq_domain);
5268     diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
5269     index 97245e076548..f2481e80e272 100644
5270     --- a/drivers/pci/controller/pci-aardvark.c
5271     +++ b/drivers/pci/controller/pci-aardvark.c
5272     @@ -344,10 +344,6 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
5273    
5274     advk_pcie_wait_for_link(pcie);
5275    
5276     - reg = PCIE_CORE_LINK_L0S_ENTRY |
5277     - (1 << PCIE_CORE_LINK_WIDTH_SHIFT);
5278     - advk_writel(pcie, reg, PCIE_CORE_LINK_CTRL_STAT_REG);
5279     -
5280     reg = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG);
5281     reg |= PCIE_CORE_CMD_MEM_ACCESS_EN |
5282     PCIE_CORE_CMD_IO_ACCESS_EN |
5283     diff --git a/drivers/pci/controller/pci-v3-semi.c b/drivers/pci/controller/pci-v3-semi.c
5284     index d219404bad92..9a86bb7448ac 100644
5285     --- a/drivers/pci/controller/pci-v3-semi.c
5286     +++ b/drivers/pci/controller/pci-v3-semi.c
5287     @@ -743,7 +743,7 @@ static int v3_pci_probe(struct platform_device *pdev)
5288     int ret;
5289     LIST_HEAD(res);
5290    
5291     - host = pci_alloc_host_bridge(sizeof(*v3));
5292     + host = devm_pci_alloc_host_bridge(dev, sizeof(*v3));
5293     if (!host)
5294     return -ENOMEM;
5295    
5296     diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
5297     index 1ad0b56f11b4..04114352d0e7 100644
5298     --- a/drivers/pci/controller/pcie-rcar.c
5299     +++ b/drivers/pci/controller/pcie-rcar.c
5300     @@ -335,11 +335,12 @@ static struct pci_ops rcar_pcie_ops = {
5301     };
5302    
5303     static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
5304     - struct resource *res)
5305     + struct resource_entry *window)
5306     {
5307     /* Setup PCIe address space mappings for each resource */
5308     resource_size_t size;
5309     resource_size_t res_start;
5310     + struct resource *res = window->res;
5311     u32 mask;
5312    
5313     rcar_pci_write_reg(pcie, 0x00000000, PCIEPTCTLR(win));
5314     @@ -353,9 +354,9 @@ static void rcar_pcie_setup_window(int win, struct rcar_pcie *pcie,
5315     rcar_pci_write_reg(pcie, mask << 7, PCIEPAMR(win));
5316    
5317     if (res->flags & IORESOURCE_IO)
5318     - res_start = pci_pio_to_address(res->start);
5319     + res_start = pci_pio_to_address(res->start) - window->offset;
5320     else
5321     - res_start = res->start;
5322     + res_start = res->start - window->offset;
5323    
5324     rcar_pci_write_reg(pcie, upper_32_bits(res_start), PCIEPAUR(win));
5325     rcar_pci_write_reg(pcie, lower_32_bits(res_start) & ~0x7F,
5326     @@ -384,7 +385,7 @@ static int rcar_pcie_setup(struct list_head *resource, struct rcar_pcie *pci)
5327     switch (resource_type(res)) {
5328     case IORESOURCE_IO:
5329     case IORESOURCE_MEM:
5330     - rcar_pcie_setup_window(i, pci, res);
5331     + rcar_pcie_setup_window(i, pci, win);
5332     i++;
5333     break;
5334     case IORESOURCE_BUS:
5335     diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
5336     index afc1a3d240b5..87348ecfe3fc 100644
5337     --- a/drivers/pci/controller/vmd.c
5338     +++ b/drivers/pci/controller/vmd.c
5339     @@ -593,9 +593,11 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
5340     if (!membar2)
5341     return -ENOMEM;
5342     offset[0] = vmd->dev->resource[VMD_MEMBAR1].start -
5343     - readq(membar2 + MB2_SHADOW_OFFSET);
5344     + (readq(membar2 + MB2_SHADOW_OFFSET) &
5345     + PCI_BASE_ADDRESS_MEM_MASK);
5346     offset[1] = vmd->dev->resource[VMD_MEMBAR2].start -
5347     - readq(membar2 + MB2_SHADOW_OFFSET + 8);
5348     + (readq(membar2 + MB2_SHADOW_OFFSET + 8) &
5349     + PCI_BASE_ADDRESS_MEM_MASK);
5350     pci_iounmap(vmd->dev, membar2);
5351     }
5352     }
5353     diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c
5354     index 5fd90105510d..d3b6b9a05618 100644
5355     --- a/drivers/pci/pci-bridge-emul.c
5356     +++ b/drivers/pci/pci-bridge-emul.c
5357     @@ -195,8 +195,8 @@ static const struct pci_bridge_reg_behavior pcie_cap_regs_behavior[] = {
5358     * RO, the rest is reserved
5359     */
5360     .w1c = GENMASK(19, 16),
5361     - .ro = GENMASK(20, 19),
5362     - .rsvd = GENMASK(31, 21),
5363     + .ro = GENMASK(21, 20),
5364     + .rsvd = GENMASK(31, 22),
5365     },
5366    
5367     [PCI_EXP_LNKCAP / 4] = {
5368     @@ -236,7 +236,7 @@ static const struct pci_bridge_reg_behavior pcie_cap_regs_behavior[] = {
5369     PCI_EXP_SLTSTA_CC | PCI_EXP_SLTSTA_DLLSC) << 16,
5370     .ro = (PCI_EXP_SLTSTA_MRLSS | PCI_EXP_SLTSTA_PDS |
5371     PCI_EXP_SLTSTA_EIS) << 16,
5372     - .rsvd = GENMASK(15, 12) | (GENMASK(15, 9) << 16),
5373     + .rsvd = GENMASK(15, 13) | (GENMASK(15, 9) << 16),
5374     },
5375    
5376     [PCI_EXP_RTCTL / 4] = {
5377     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
5378     index c73e8095a849..689f0280c038 100644
5379     --- a/drivers/pci/pci.c
5380     +++ b/drivers/pci/pci.c
5381     @@ -4608,7 +4608,8 @@ static int pci_pm_reset(struct pci_dev *dev, int probe)
5382     * pcie_wait_for_link_delay - Wait until link is active or inactive
5383     * @pdev: Bridge device
5384     * @active: waiting for active or inactive?
5385     - * @delay: Delay to wait after link has become active (in ms)
5386     + * @delay: Delay to wait after link has become active (in ms). Specify %0
5387     + * for no delay.
5388     *
5389     * Use this to wait till link becomes active or inactive.
5390     */
5391     @@ -4649,7 +4650,7 @@ static bool pcie_wait_for_link_delay(struct pci_dev *pdev, bool active,
5392     msleep(10);
5393     timeout -= 10;
5394     }
5395     - if (active && ret)
5396     + if (active && ret && delay)
5397     msleep(delay);
5398     else if (ret != active)
5399     pci_info(pdev, "Data Link Layer Link Active not %s in 1000 msec\n",
5400     @@ -4770,17 +4771,28 @@ void pci_bridge_wait_for_secondary_bus(struct pci_dev *dev)
5401     if (!pcie_downstream_port(dev))
5402     return;
5403    
5404     - if (pcie_get_speed_cap(dev) <= PCIE_SPEED_5_0GT) {
5405     - pci_dbg(dev, "waiting %d ms for downstream link\n", delay);
5406     - msleep(delay);
5407     - } else {
5408     - pci_dbg(dev, "waiting %d ms for downstream link, after activation\n",
5409     - delay);
5410     - if (!pcie_wait_for_link_delay(dev, true, delay)) {
5411     + /*
5412     + * Per PCIe r5.0, sec 6.6.1, for downstream ports that support
5413     + * speeds > 5 GT/s, we must wait for link training to complete
5414     + * before the mandatory delay.
5415     + *
5416     + * We can only tell when link training completes via DLL Link
5417     + * Active, which is required for downstream ports that support
5418     + * speeds > 5 GT/s (sec 7.5.3.6). Unfortunately some common
5419     + * devices do not implement Link Active reporting even when it's
5420     + * required, so we'll check for that directly instead of checking
5421     + * the supported link speed. We assume devices without Link Active
5422     + * reporting can train in 100 ms regardless of speed.
5423     + */
5424     + if (dev->link_active_reporting) {
5425     + pci_dbg(dev, "waiting for link to train\n");
5426     + if (!pcie_wait_for_link_delay(dev, true, 0)) {
5427     /* Did not train, no need to wait any further */
5428     return;
5429     }
5430     }
5431     + pci_dbg(child, "waiting %d ms to become accessible\n", delay);
5432     + msleep(delay);
5433    
5434     if (!pci_device_is_present(child)) {
5435     pci_dbg(child, "waiting additional %d ms to become accessible\n", delay);
5436     diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
5437     index 5a1bbf2cb7e9..4a0ec34062d6 100644
5438     --- a/drivers/pci/pcie/aspm.c
5439     +++ b/drivers/pci/pcie/aspm.c
5440     @@ -628,16 +628,6 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
5441    
5442     /* Setup initial capable state. Will be updated later */
5443     link->aspm_capable = link->aspm_support;
5444     - /*
5445     - * If the downstream component has pci bridge function, don't
5446     - * do ASPM for now.
5447     - */
5448     - list_for_each_entry(child, &linkbus->devices, bus_list) {
5449     - if (pci_pcie_type(child) == PCI_EXP_TYPE_PCI_BRIDGE) {
5450     - link->aspm_disable = ASPM_STATE_ALL;
5451     - break;
5452     - }
5453     - }
5454    
5455     /* Get and check endpoint acceptable latencies */
5456     list_for_each_entry(child, &linkbus->devices, bus_list) {
5457     diff --git a/drivers/pci/pcie/ptm.c b/drivers/pci/pcie/ptm.c
5458     index 9361f3aa26ab..357a454cafa0 100644
5459     --- a/drivers/pci/pcie/ptm.c
5460     +++ b/drivers/pci/pcie/ptm.c
5461     @@ -39,10 +39,6 @@ void pci_ptm_init(struct pci_dev *dev)
5462     if (!pci_is_pcie(dev))
5463     return;
5464    
5465     - pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_PTM);
5466     - if (!pos)
5467     - return;
5468     -
5469     /*
5470     * Enable PTM only on interior devices (root ports, switch ports,
5471     * etc.) on the assumption that it causes no link traffic until an
5472     @@ -52,6 +48,23 @@ void pci_ptm_init(struct pci_dev *dev)
5473     pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END))
5474     return;
5475    
5476     + /*
5477     + * Switch Downstream Ports are not permitted to have a PTM
5478     + * capability; their PTM behavior is controlled by the Upstream
5479     + * Port (PCIe r5.0, sec 7.9.16).
5480     + */
5481     + ups = pci_upstream_bridge(dev);
5482     + if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM &&
5483     + ups && ups->ptm_enabled) {
5484     + dev->ptm_granularity = ups->ptm_granularity;
5485     + dev->ptm_enabled = 1;
5486     + return;
5487     + }
5488     +
5489     + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_PTM);
5490     + if (!pos)
5491     + return;
5492     +
5493     pci_read_config_dword(dev, pos + PCI_PTM_CAP, &cap);
5494     local_clock = (cap & PCI_PTM_GRANULARITY_MASK) >> 8;
5495    
5496     @@ -61,7 +74,6 @@ void pci_ptm_init(struct pci_dev *dev)
5497     * the spec recommendation (PCIe r3.1, sec 7.32.3), select the
5498     * furthest upstream Time Source as the PTM Root.
5499     */
5500     - ups = pci_upstream_bridge(dev);
5501     if (ups && ups->ptm_enabled) {
5502     ctrl = PCI_PTM_CTRL_ENABLE;
5503     if (ups->ptm_granularity == 0)
5504     diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
5505     index 83d909abc61d..8fa13486f2f1 100644
5506     --- a/drivers/pci/probe.c
5507     +++ b/drivers/pci/probe.c
5508     @@ -867,9 +867,10 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
5509     goto free;
5510    
5511     err = device_register(&bridge->dev);
5512     - if (err)
5513     + if (err) {
5514     put_device(&bridge->dev);
5515     -
5516     + goto free;
5517     + }
5518     bus->bridge = get_device(&bridge->dev);
5519     device_enable_async_suspend(bus->bridge);
5520     pci_set_bus_of_node(bus);
5521     diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
5522     index d8ca40a97693..d21fa04fa44d 100644
5523     --- a/drivers/pci/setup-res.c
5524     +++ b/drivers/pci/setup-res.c
5525     @@ -439,10 +439,11 @@ int pci_resize_resource(struct pci_dev *dev, int resno, int size)
5526     res->end = res->start + pci_rebar_size_to_bytes(size) - 1;
5527    
5528     /* Check if the new config works by trying to assign everything. */
5529     - ret = pci_reassign_bridge_resources(dev->bus->self, res->flags);
5530     - if (ret)
5531     - goto error_resize;
5532     -
5533     + if (dev->bus->self) {
5534     + ret = pci_reassign_bridge_resources(dev->bus->self, res->flags);
5535     + if (ret)
5536     + goto error_resize;
5537     + }
5538     return 0;
5539    
5540     error_resize:
5541     diff --git a/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c b/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
5542     index 078b8dc57250..c5b0950c2a7a 100644
5543     --- a/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
5544     +++ b/drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c
5545     @@ -35,7 +35,7 @@
5546     /* L3C has 8-counters */
5547     #define L3C_NR_COUNTERS 0x8
5548    
5549     -#define L3C_PERF_CTRL_EN 0x20000
5550     +#define L3C_PERF_CTRL_EN 0x10000
5551     #define L3C_EVTYPE_NONE 0xff
5552    
5553     /*
5554     diff --git a/drivers/phy/broadcom/phy-bcm-sr-usb.c b/drivers/phy/broadcom/phy-bcm-sr-usb.c
5555     index fe6c58910e4c..7c7862b4f41f 100644
5556     --- a/drivers/phy/broadcom/phy-bcm-sr-usb.c
5557     +++ b/drivers/phy/broadcom/phy-bcm-sr-usb.c
5558     @@ -16,8 +16,6 @@ enum bcm_usb_phy_version {
5559     };
5560    
5561     enum bcm_usb_phy_reg {
5562     - PLL_NDIV_FRAC,
5563     - PLL_NDIV_INT,
5564     PLL_CTRL,
5565     PHY_CTRL,
5566     PHY_PLL_CTRL,
5567     @@ -31,18 +29,11 @@ static const u8 bcm_usb_combo_phy_ss[] = {
5568     };
5569    
5570     static const u8 bcm_usb_combo_phy_hs[] = {
5571     - [PLL_NDIV_FRAC] = 0x04,
5572     - [PLL_NDIV_INT] = 0x08,
5573     [PLL_CTRL] = 0x0c,
5574     [PHY_CTRL] = 0x10,
5575     };
5576    
5577     -#define HSPLL_NDIV_INT_VAL 0x13
5578     -#define HSPLL_NDIV_FRAC_VAL 0x1005
5579     -
5580     static const u8 bcm_usb_hs_phy[] = {
5581     - [PLL_NDIV_FRAC] = 0x0,
5582     - [PLL_NDIV_INT] = 0x4,
5583     [PLL_CTRL] = 0x8,
5584     [PHY_CTRL] = 0xc,
5585     };
5586     @@ -52,7 +43,6 @@ enum pll_ctrl_bits {
5587     SSPLL_SUSPEND_EN,
5588     PLL_SEQ_START,
5589     PLL_LOCK,
5590     - PLL_PDIV,
5591     };
5592    
5593     static const u8 u3pll_ctrl[] = {
5594     @@ -66,29 +56,17 @@ static const u8 u3pll_ctrl[] = {
5595     #define HSPLL_PDIV_VAL 0x1
5596    
5597     static const u8 u2pll_ctrl[] = {
5598     - [PLL_PDIV] = 1,
5599     [PLL_RESETB] = 5,
5600     [PLL_LOCK] = 6,
5601     };
5602    
5603     enum bcm_usb_phy_ctrl_bits {
5604     CORERDY,
5605     - AFE_LDO_PWRDWNB,
5606     - AFE_PLL_PWRDWNB,
5607     - AFE_BG_PWRDWNB,
5608     - PHY_ISO,
5609     PHY_RESETB,
5610     PHY_PCTL,
5611     };
5612    
5613     #define PHY_PCTL_MASK 0xffff
5614     -/*
5615     - * 0x0806 of PCTL_VAL has below bits set
5616     - * BIT-8 : refclk divider 1
5617     - * BIT-3:2: device mode; mode is not effect
5618     - * BIT-1: soft reset active low
5619     - */
5620     -#define HSPHY_PCTL_VAL 0x0806
5621     #define SSPHY_PCTL_VAL 0x0006
5622    
5623     static const u8 u3phy_ctrl[] = {
5624     @@ -98,10 +76,6 @@ static const u8 u3phy_ctrl[] = {
5625    
5626     static const u8 u2phy_ctrl[] = {
5627     [CORERDY] = 0,
5628     - [AFE_LDO_PWRDWNB] = 1,
5629     - [AFE_PLL_PWRDWNB] = 2,
5630     - [AFE_BG_PWRDWNB] = 3,
5631     - [PHY_ISO] = 4,
5632     [PHY_RESETB] = 5,
5633     [PHY_PCTL] = 6,
5634     };
5635     @@ -186,38 +160,13 @@ static int bcm_usb_hs_phy_init(struct bcm_usb_phy_cfg *phy_cfg)
5636     int ret = 0;
5637     void __iomem *regs = phy_cfg->regs;
5638     const u8 *offset;
5639     - u32 rd_data;
5640    
5641     offset = phy_cfg->offset;
5642    
5643     - writel(HSPLL_NDIV_INT_VAL, regs + offset[PLL_NDIV_INT]);
5644     - writel(HSPLL_NDIV_FRAC_VAL, regs + offset[PLL_NDIV_FRAC]);
5645     -
5646     - rd_data = readl(regs + offset[PLL_CTRL]);
5647     - rd_data &= ~(HSPLL_PDIV_MASK << u2pll_ctrl[PLL_PDIV]);
5648     - rd_data |= (HSPLL_PDIV_VAL << u2pll_ctrl[PLL_PDIV]);
5649     - writel(rd_data, regs + offset[PLL_CTRL]);
5650     -
5651     - /* Set Core Ready high */
5652     - bcm_usb_reg32_setbits(regs + offset[PHY_CTRL],
5653     - BIT(u2phy_ctrl[CORERDY]));
5654     -
5655     - /* Maximum timeout for Core Ready done */
5656     - msleep(30);
5657     -
5658     + bcm_usb_reg32_clrbits(regs + offset[PLL_CTRL],
5659     + BIT(u2pll_ctrl[PLL_RESETB]));
5660     bcm_usb_reg32_setbits(regs + offset[PLL_CTRL],
5661     BIT(u2pll_ctrl[PLL_RESETB]));
5662     - bcm_usb_reg32_setbits(regs + offset[PHY_CTRL],
5663     - BIT(u2phy_ctrl[PHY_RESETB]));
5664     -
5665     -
5666     - rd_data = readl(regs + offset[PHY_CTRL]);
5667     - rd_data &= ~(PHY_PCTL_MASK << u2phy_ctrl[PHY_PCTL]);
5668     - rd_data |= (HSPHY_PCTL_VAL << u2phy_ctrl[PHY_PCTL]);
5669     - writel(rd_data, regs + offset[PHY_CTRL]);
5670     -
5671     - /* Maximum timeout for PLL reset done */
5672     - msleep(30);
5673    
5674     ret = bcm_usb_pll_lock_check(regs + offset[PLL_CTRL],
5675     BIT(u2pll_ctrl[PLL_LOCK]));
5676     diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
5677     index 9f42036c5fbb..1f81569c7ae3 100644
5678     --- a/drivers/pinctrl/freescale/pinctrl-imx.c
5679     +++ b/drivers/pinctrl/freescale/pinctrl-imx.c
5680     @@ -774,16 +774,6 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev,
5681     return 0;
5682     }
5683    
5684     -/*
5685     - * imx_free_resources() - free memory used by this driver
5686     - * @info: info driver instance
5687     - */
5688     -static void imx_free_resources(struct imx_pinctrl *ipctl)
5689     -{
5690     - if (ipctl->pctl)
5691     - pinctrl_unregister(ipctl->pctl);
5692     -}
5693     -
5694     int imx_pinctrl_probe(struct platform_device *pdev,
5695     const struct imx_pinctrl_soc_info *info)
5696     {
5697     @@ -874,23 +864,18 @@ int imx_pinctrl_probe(struct platform_device *pdev,
5698     &ipctl->pctl);
5699     if (ret) {
5700     dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
5701     - goto free;
5702     + return ret;
5703     }
5704    
5705     ret = imx_pinctrl_probe_dt(pdev, ipctl);
5706     if (ret) {
5707     dev_err(&pdev->dev, "fail to probe dt properties\n");
5708     - goto free;
5709     + return ret;
5710     }
5711    
5712     dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
5713    
5714     return pinctrl_enable(ipctl->pctl);
5715     -
5716     -free:
5717     - imx_free_resources(ipctl);
5718     -
5719     - return ret;
5720     }
5721    
5722     static int __maybe_unused imx_pinctrl_suspend(struct device *dev)
5723     diff --git a/drivers/pinctrl/freescale/pinctrl-imx1-core.c b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
5724     index 7e29e3fecdb2..5bb183c0ce31 100644
5725     --- a/drivers/pinctrl/freescale/pinctrl-imx1-core.c
5726     +++ b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
5727     @@ -638,7 +638,6 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev,
5728    
5729     ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
5730     if (ret) {
5731     - pinctrl_unregister(ipctl->pctl);
5732     dev_err(&pdev->dev, "Failed to populate subdevices\n");
5733     return ret;
5734     }
5735     diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c
5736     index fb76fb2e9ea5..0a951a75c82b 100644
5737     --- a/drivers/pinctrl/pinctrl-ocelot.c
5738     +++ b/drivers/pinctrl/pinctrl-ocelot.c
5739     @@ -711,11 +711,12 @@ static void ocelot_irq_handler(struct irq_desc *desc)
5740     struct irq_chip *parent_chip = irq_desc_get_chip(desc);
5741     struct gpio_chip *chip = irq_desc_get_handler_data(desc);
5742     struct ocelot_pinctrl *info = gpiochip_get_data(chip);
5743     + unsigned int id_reg = OCELOT_GPIO_INTR_IDENT * info->stride;
5744     unsigned int reg = 0, irq, i;
5745     unsigned long irqs;
5746    
5747     for (i = 0; i < info->stride; i++) {
5748     - regmap_read(info->map, OCELOT_GPIO_INTR_IDENT + 4 * i, &reg);
5749     + regmap_read(info->map, id_reg + 4 * i, &reg);
5750     if (!reg)
5751     continue;
5752    
5753     diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
5754     index dc0bbf198cbc..1bd8840e11a6 100644
5755     --- a/drivers/pinctrl/pinctrl-rockchip.c
5756     +++ b/drivers/pinctrl/pinctrl-rockchip.c
5757     @@ -506,8 +506,8 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
5758     }
5759    
5760     map_num += grp->npins;
5761     - new_map = devm_kcalloc(pctldev->dev, map_num, sizeof(*new_map),
5762     - GFP_KERNEL);
5763     +
5764     + new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
5765     if (!new_map)
5766     return -ENOMEM;
5767    
5768     @@ -517,7 +517,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
5769     /* create mux map */
5770     parent = of_get_parent(np);
5771     if (!parent) {
5772     - devm_kfree(pctldev->dev, new_map);
5773     + kfree(new_map);
5774     return -EINVAL;
5775     }
5776     new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
5777     @@ -544,6 +544,7 @@ static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
5778     static void rockchip_dt_free_map(struct pinctrl_dev *pctldev,
5779     struct pinctrl_map *map, unsigned num_maps)
5780     {
5781     + kfree(map);
5782     }
5783    
5784     static const struct pinctrl_ops rockchip_pctrl_ops = {
5785     diff --git a/drivers/pinctrl/pinctrl-rza1.c b/drivers/pinctrl/pinctrl-rza1.c
5786     index 017fc6b3e27e..ca9da61cfc4e 100644
5787     --- a/drivers/pinctrl/pinctrl-rza1.c
5788     +++ b/drivers/pinctrl/pinctrl-rza1.c
5789     @@ -418,7 +418,7 @@ static const struct rza1_bidir_entry rza1l_bidir_entries[RZA1_NPORTS] = {
5790     };
5791    
5792     static const struct rza1_swio_entry rza1l_swio_entries[] = {
5793     - [0] = { ARRAY_SIZE(rza1h_swio_pins), rza1h_swio_pins },
5794     + [0] = { ARRAY_SIZE(rza1l_swio_pins), rza1l_swio_pins },
5795     };
5796    
5797     /* RZ/A1L (r7s72102x) pinmux flags table */
5798     diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
5799     index c84a7b1caeb6..d6fdc10c29f0 100644
5800     --- a/drivers/power/supply/Kconfig
5801     +++ b/drivers/power/supply/Kconfig
5802     @@ -577,7 +577,7 @@ config CHARGER_BQ24257
5803     tristate "TI BQ24250/24251/24257 battery charger driver"
5804     depends on I2C
5805     depends on GPIOLIB || COMPILE_TEST
5806     - depends on REGMAP_I2C
5807     + select REGMAP_I2C
5808     help
5809     Say Y to enable support for the TI BQ24250, BQ24251, and BQ24257 battery
5810     chargers.
5811     diff --git a/drivers/power/supply/lp8788-charger.c b/drivers/power/supply/lp8788-charger.c
5812     index 84a206f42a8e..e7931ffb7151 100644
5813     --- a/drivers/power/supply/lp8788-charger.c
5814     +++ b/drivers/power/supply/lp8788-charger.c
5815     @@ -572,27 +572,14 @@ static void lp8788_setup_adc_channel(struct device *dev,
5816     return;
5817    
5818     /* ADC channel for battery voltage */
5819     - chan = iio_channel_get(dev, pdata->adc_vbatt);
5820     + chan = devm_iio_channel_get(dev, pdata->adc_vbatt);
5821     pchg->chan[LP8788_VBATT] = IS_ERR(chan) ? NULL : chan;
5822    
5823     /* ADC channel for battery temperature */
5824     - chan = iio_channel_get(dev, pdata->adc_batt_temp);
5825     + chan = devm_iio_channel_get(dev, pdata->adc_batt_temp);
5826     pchg->chan[LP8788_BATT_TEMP] = IS_ERR(chan) ? NULL : chan;
5827     }
5828    
5829     -static void lp8788_release_adc_channel(struct lp8788_charger *pchg)
5830     -{
5831     - int i;
5832     -
5833     - for (i = 0; i < LP8788_NUM_CHG_ADC; i++) {
5834     - if (!pchg->chan[i])
5835     - continue;
5836     -
5837     - iio_channel_release(pchg->chan[i]);
5838     - pchg->chan[i] = NULL;
5839     - }
5840     -}
5841     -
5842     static ssize_t lp8788_show_charger_status(struct device *dev,
5843     struct device_attribute *attr, char *buf)
5844     {
5845     @@ -735,7 +722,6 @@ static int lp8788_charger_remove(struct platform_device *pdev)
5846     flush_work(&pchg->charger_work);
5847     lp8788_irq_unregister(pdev, pchg);
5848     lp8788_psy_unregister(pchg);
5849     - lp8788_release_adc_channel(pchg);
5850    
5851     return 0;
5852     }
5853     diff --git a/drivers/power/supply/smb347-charger.c b/drivers/power/supply/smb347-charger.c
5854     index c1d124b8be0c..d102921b3ab2 100644
5855     --- a/drivers/power/supply/smb347-charger.c
5856     +++ b/drivers/power/supply/smb347-charger.c
5857     @@ -1138,6 +1138,7 @@ static bool smb347_volatile_reg(struct device *dev, unsigned int reg)
5858     switch (reg) {
5859     case IRQSTAT_A:
5860     case IRQSTAT_C:
5861     + case IRQSTAT_D:
5862     case IRQSTAT_E:
5863     case IRQSTAT_F:
5864     case STAT_A:
5865     diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
5866     index c9e57bd109fb..599a0f66a384 100644
5867     --- a/drivers/pwm/pwm-img.c
5868     +++ b/drivers/pwm/pwm-img.c
5869     @@ -129,8 +129,10 @@ static int img_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
5870     duty = DIV_ROUND_UP(timebase * duty_ns, period_ns);
5871    
5872     ret = pm_runtime_get_sync(chip->dev);
5873     - if (ret < 0)
5874     + if (ret < 0) {
5875     + pm_runtime_put_autosuspend(chip->dev);
5876     return ret;
5877     + }
5878    
5879     val = img_pwm_readl(pwm_chip, PWM_CTRL_CFG);
5880     val &= ~(PWM_CTRL_CFG_DIV_MASK << PWM_CTRL_CFG_DIV_SHIFT(pwm->hwpwm));
5881     @@ -331,8 +333,10 @@ static int img_pwm_remove(struct platform_device *pdev)
5882     int ret;
5883    
5884     ret = pm_runtime_get_sync(&pdev->dev);
5885     - if (ret < 0)
5886     + if (ret < 0) {
5887     + pm_runtime_put(&pdev->dev);
5888     return ret;
5889     + }
5890    
5891     for (i = 0; i < pwm_chip->chip.npwm; i++) {
5892     val = img_pwm_readl(pwm_chip, PWM_CTRL_CFG);
5893     diff --git a/drivers/pwm/pwm-jz4740.c b/drivers/pwm/pwm-jz4740.c
5894     index 9d78cc21cb12..d0f5c69930d0 100644
5895     --- a/drivers/pwm/pwm-jz4740.c
5896     +++ b/drivers/pwm/pwm-jz4740.c
5897     @@ -108,8 +108,8 @@ static int jz4740_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
5898     if (prescaler == 6)
5899     return -EINVAL;
5900    
5901     - tmp = (unsigned long long)period * state->duty_cycle;
5902     - do_div(tmp, state->period);
5903     + tmp = (unsigned long long)rate * state->duty_cycle;
5904     + do_div(tmp, NSEC_PER_SEC);
5905     duty = period - tmp;
5906    
5907     if (duty >= period)
5908     diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
5909     index 6ba065d5c4d9..d84e9f306086 100644
5910     --- a/drivers/remoteproc/qcom_q6v5_mss.c
5911     +++ b/drivers/remoteproc/qcom_q6v5_mss.c
5912     @@ -1005,7 +1005,13 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
5913     goto release_firmware;
5914     }
5915    
5916     - ptr = qproc->mpss_region + offset;
5917     + ptr = ioremap_wc(qproc->mpss_phys + offset, phdr->p_memsz);
5918     + if (!ptr) {
5919     + dev_err(qproc->dev,
5920     + "unable to map memory region: %pa+%zx-%x\n",
5921     + &qproc->mpss_phys, offset, phdr->p_memsz);
5922     + goto release_firmware;
5923     + }
5924    
5925     if (phdr->p_filesz && phdr->p_offset < fw->size) {
5926     /* Firmware is large enough to be non-split */
5927     @@ -1014,6 +1020,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
5928     "failed to load segment %d from truncated file %s\n",
5929     i, fw_name);
5930     ret = -EINVAL;
5931     + iounmap(ptr);
5932     goto release_firmware;
5933     }
5934    
5935     @@ -1024,6 +1031,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
5936     ret = request_firmware(&seg_fw, fw_name, qproc->dev);
5937     if (ret) {
5938     dev_err(qproc->dev, "failed to load %s\n", fw_name);
5939     + iounmap(ptr);
5940     goto release_firmware;
5941     }
5942    
5943     @@ -1036,6 +1044,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
5944     memset(ptr + phdr->p_filesz, 0,
5945     phdr->p_memsz - phdr->p_filesz);
5946     }
5947     + iounmap(ptr);
5948     size += phdr->p_memsz;
5949     }
5950    
5951     @@ -1075,7 +1084,8 @@ static void qcom_q6v5_dump_segment(struct rproc *rproc,
5952     int ret = 0;
5953     struct q6v5 *qproc = rproc->priv;
5954     unsigned long mask = BIT((unsigned long)segment->priv);
5955     - void *ptr = rproc_da_to_va(rproc, segment->da, segment->size);
5956     + int offset = segment->da - qproc->mpss_reloc;
5957     + void *ptr = NULL;
5958    
5959     /* Unlock mba before copying segments */
5960     if (!qproc->dump_mba_loaded) {
5961     @@ -1089,10 +1099,15 @@ static void qcom_q6v5_dump_segment(struct rproc *rproc,
5962     }
5963     }
5964    
5965     - if (!ptr || ret)
5966     - memset(dest, 0xff, segment->size);
5967     - else
5968     + if (!ret)
5969     + ptr = ioremap_wc(qproc->mpss_phys + offset, segment->size);
5970     +
5971     + if (ptr) {
5972     memcpy(dest, ptr, segment->size);
5973     + iounmap(ptr);
5974     + } else {
5975     + memset(dest, 0xff, segment->size);
5976     + }
5977    
5978     qproc->dump_segment_mask |= mask;
5979    
5980     @@ -1393,12 +1408,6 @@ static int q6v5_alloc_memory_region(struct q6v5 *qproc)
5981    
5982     qproc->mpss_phys = qproc->mpss_reloc = r.start;
5983     qproc->mpss_size = resource_size(&r);
5984     - qproc->mpss_region = devm_ioremap_wc(qproc->dev, qproc->mpss_phys, qproc->mpss_size);
5985     - if (!qproc->mpss_region) {
5986     - dev_err(qproc->dev, "unable to map memory region: %pa+%zx\n",
5987     - &r.start, qproc->mpss_size);
5988     - return -EBUSY;
5989     - }
5990    
5991     return 0;
5992     }
5993     diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
5994     index 0896b3614eb1..ce92ae227aa1 100644
5995     --- a/drivers/remoteproc/remoteproc_core.c
5996     +++ b/drivers/remoteproc/remoteproc_core.c
5997     @@ -2036,6 +2036,7 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
5998     rproc->dev.type = &rproc_type;
5999     rproc->dev.class = &rproc_class;
6000     rproc->dev.driver_data = rproc;
6001     + idr_init(&rproc->notifyids);
6002    
6003     /* Assign a unique device index and name */
6004     rproc->index = ida_simple_get(&rproc_dev_index, 0, 0, GFP_KERNEL);
6005     @@ -2060,8 +2061,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
6006    
6007     mutex_init(&rproc->lock);
6008    
6009     - idr_init(&rproc->notifyids);
6010     -
6011     INIT_LIST_HEAD(&rproc->carveouts);
6012     INIT_LIST_HEAD(&rproc->mappings);
6013     INIT_LIST_HEAD(&rproc->traces);
6014     diff --git a/drivers/rtc/rtc-mc13xxx.c b/drivers/rtc/rtc-mc13xxx.c
6015     index afce2c0b4bd6..d6802e6191cb 100644
6016     --- a/drivers/rtc/rtc-mc13xxx.c
6017     +++ b/drivers/rtc/rtc-mc13xxx.c
6018     @@ -308,8 +308,10 @@ static int __init mc13xxx_rtc_probe(struct platform_device *pdev)
6019     mc13xxx_unlock(mc13xxx);
6020    
6021     ret = rtc_register_device(priv->rtc);
6022     - if (ret)
6023     + if (ret) {
6024     + mc13xxx_lock(mc13xxx);
6025     goto err_irq_request;
6026     + }
6027    
6028     return 0;
6029    
6030     diff --git a/drivers/rtc/rtc-rv3028.c b/drivers/rtc/rtc-rv3028.c
6031     index 2b316661a578..bbdfebd70644 100644
6032     --- a/drivers/rtc/rtc-rv3028.c
6033     +++ b/drivers/rtc/rtc-rv3028.c
6034     @@ -625,6 +625,8 @@ static int rv3028_probe(struct i2c_client *client)
6035     return -ENOMEM;
6036    
6037     rv3028->regmap = devm_regmap_init_i2c(client, &regmap_config);
6038     + if (IS_ERR(rv3028->regmap))
6039     + return PTR_ERR(rv3028->regmap);
6040    
6041     i2c_set_clientdata(client, rv3028);
6042    
6043     diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
6044     index a58b45df95d7..3b0a4483a252 100644
6045     --- a/drivers/s390/cio/qdio.h
6046     +++ b/drivers/s390/cio/qdio.h
6047     @@ -372,7 +372,6 @@ static inline int multicast_outbound(struct qdio_q *q)
6048     extern u64 last_ai_time;
6049    
6050     /* prototypes for thin interrupt */
6051     -void qdio_setup_thinint(struct qdio_irq *irq_ptr);
6052     int qdio_establish_thinint(struct qdio_irq *irq_ptr);
6053     void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
6054     void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
6055     diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
6056     index ee0b3c586211..9dc56aa3ae55 100644
6057     --- a/drivers/s390/cio/qdio_setup.c
6058     +++ b/drivers/s390/cio/qdio_setup.c
6059     @@ -479,7 +479,6 @@ int qdio_setup_irq(struct qdio_initialize *init_data)
6060     setup_queues(irq_ptr, init_data);
6061    
6062     setup_qib(irq_ptr, init_data);
6063     - qdio_setup_thinint(irq_ptr);
6064     set_impl_params(irq_ptr, init_data->qib_param_field_format,
6065     init_data->qib_param_field,
6066     init_data->input_slib_elements,
6067     diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c
6068     index 93ee067c10ca..ddf780b12d40 100644
6069     --- a/drivers/s390/cio/qdio_thinint.c
6070     +++ b/drivers/s390/cio/qdio_thinint.c
6071     @@ -268,17 +268,19 @@ int __init tiqdio_register_thinints(void)
6072    
6073     int qdio_establish_thinint(struct qdio_irq *irq_ptr)
6074     {
6075     + int rc;
6076     +
6077     if (!is_thinint_irq(irq_ptr))
6078     return 0;
6079     - return set_subchannel_ind(irq_ptr, 0);
6080     -}
6081    
6082     -void qdio_setup_thinint(struct qdio_irq *irq_ptr)
6083     -{
6084     - if (!is_thinint_irq(irq_ptr))
6085     - return;
6086     irq_ptr->dsci = get_indicator();
6087     DBF_HEX(&irq_ptr->dsci, sizeof(void *));
6088     +
6089     + rc = set_subchannel_ind(irq_ptr, 0);
6090     + if (rc)
6091     + put_indicator(irq_ptr->dsci);
6092     +
6093     + return rc;
6094     }
6095    
6096     void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)
6097     diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
6098     index d12dd89538df..deab66598910 100644
6099     --- a/drivers/scsi/arm/acornscsi.c
6100     +++ b/drivers/scsi/arm/acornscsi.c
6101     @@ -2911,8 +2911,10 @@ static int acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
6102    
6103     ashost->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
6104     ashost->fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
6105     - if (!ashost->base || !ashost->fast)
6106     + if (!ashost->base || !ashost->fast) {
6107     + ret = -ENOMEM;
6108     goto out_put;
6109     + }
6110    
6111     host->irq = ec->irq;
6112     ashost->host = host;
6113     diff --git a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c
6114     index 524cdbcd29aa..ec7d01f6e2d5 100644
6115     --- a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c
6116     +++ b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c
6117     @@ -959,6 +959,7 @@ static int init_act_open(struct cxgbi_sock *csk)
6118     struct net_device *ndev = cdev->ports[csk->port_id];
6119     struct cxgbi_hba *chba = cdev->hbas[csk->port_id];
6120     struct sk_buff *skb = NULL;
6121     + int ret;
6122    
6123     log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
6124     "csk 0x%p,%u,0x%lx.\n", csk, csk->state, csk->flags);
6125     @@ -979,16 +980,16 @@ static int init_act_open(struct cxgbi_sock *csk)
6126     csk->atid = cxgb3_alloc_atid(t3dev, &t3_client, csk);
6127     if (csk->atid < 0) {
6128     pr_err("NO atid available.\n");
6129     - return -EINVAL;
6130     + ret = -EINVAL;
6131     + goto put_sock;
6132     }
6133     cxgbi_sock_set_flag(csk, CTPF_HAS_ATID);
6134     cxgbi_sock_get(csk);
6135    
6136     skb = alloc_wr(sizeof(struct cpl_act_open_req), 0, GFP_KERNEL);
6137     if (!skb) {
6138     - cxgb3_free_atid(t3dev, csk->atid);
6139     - cxgbi_sock_put(csk);
6140     - return -ENOMEM;
6141     + ret = -ENOMEM;
6142     + goto free_atid;
6143     }
6144     skb->sk = (struct sock *)csk;
6145     set_arp_failure_handler(skb, act_open_arp_failure);
6146     @@ -1010,6 +1011,15 @@ static int init_act_open(struct cxgbi_sock *csk)
6147     cxgbi_sock_set_state(csk, CTP_ACTIVE_OPEN);
6148     send_act_open_req(csk, skb, csk->l2t);
6149     return 0;
6150     +
6151     +free_atid:
6152     + cxgb3_free_atid(t3dev, csk->atid);
6153     +put_sock:
6154     + cxgbi_sock_put(csk);
6155     + l2t_release(t3dev, csk->l2t);
6156     + csk->l2t = NULL;
6157     +
6158     + return ret;
6159     }
6160    
6161     cxgb3_cpl_handler_func cxgb3i_cpl_handlers[NUM_CPL_CMDS] = {
6162     diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
6163     index 6f4692f0d714..031aa4043c5e 100644
6164     --- a/drivers/scsi/hisi_sas/hisi_sas_main.c
6165     +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
6166     @@ -904,8 +904,11 @@ void hisi_sas_phy_oob_ready(struct hisi_hba *hisi_hba, int phy_no)
6167     struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
6168     struct device *dev = hisi_hba->dev;
6169    
6170     + dev_dbg(dev, "phy%d OOB ready\n", phy_no);
6171     + if (phy->phy_attached)
6172     + return;
6173     +
6174     if (!timer_pending(&phy->timer)) {
6175     - dev_dbg(dev, "phy%d OOB ready\n", phy_no);
6176     phy->timer.expires = jiffies + HISI_SAS_WAIT_PHYUP_TIMEOUT * HZ;
6177     add_timer(&phy->timer);
6178     }
6179     diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
6180     index 59f0f1030c54..c5711c659b51 100644
6181     --- a/drivers/scsi/ibmvscsi/ibmvscsi.c
6182     +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
6183     @@ -415,6 +415,8 @@ static int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
6184     int rc = 0;
6185     struct vio_dev *vdev = to_vio_dev(hostdata->dev);
6186    
6187     + set_adapter_info(hostdata);
6188     +
6189     /* Re-enable the CRQ */
6190     do {
6191     if (rc)
6192     diff --git a/drivers/scsi/iscsi_boot_sysfs.c b/drivers/scsi/iscsi_boot_sysfs.c
6193     index e4857b728033..a64abe38db2d 100644
6194     --- a/drivers/scsi/iscsi_boot_sysfs.c
6195     +++ b/drivers/scsi/iscsi_boot_sysfs.c
6196     @@ -352,7 +352,7 @@ iscsi_boot_create_kobj(struct iscsi_boot_kset *boot_kset,
6197     boot_kobj->kobj.kset = boot_kset->kset;
6198     if (kobject_init_and_add(&boot_kobj->kobj, &iscsi_boot_ktype,
6199     NULL, name, index)) {
6200     - kfree(boot_kobj);
6201     + kobject_put(&boot_kobj->kobj);
6202     return NULL;
6203     }
6204     boot_kobj->data = data;
6205     diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
6206     index 66f8867dd837..94d8f2834100 100644
6207     --- a/drivers/scsi/lpfc/lpfc_els.c
6208     +++ b/drivers/scsi/lpfc/lpfc_els.c
6209     @@ -8394,6 +8394,8 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
6210     spin_lock_irq(shost->host_lock);
6211     if (ndlp->nlp_flag & NLP_IN_DEV_LOSS) {
6212     spin_unlock_irq(shost->host_lock);
6213     + if (newnode)
6214     + lpfc_nlp_put(ndlp);
6215     goto dropit;
6216     }
6217     spin_unlock_irq(shost->host_lock);
6218     diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
6219     index 752b71cfbe12..7fd1d731555f 100644
6220     --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
6221     +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
6222     @@ -4777,7 +4777,9 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
6223     }
6224    
6225     kfree(ioc->hpr_lookup);
6226     + ioc->hpr_lookup = NULL;
6227     kfree(ioc->internal_lookup);
6228     + ioc->internal_lookup = NULL;
6229     if (ioc->chain_lookup) {
6230     for (i = 0; i < ioc->scsiio_depth; i++) {
6231     for (j = ioc->chains_per_prp_buffer;
6232     diff --git a/drivers/scsi/qedf/qedf.h b/drivers/scsi/qedf/qedf.h
6233     index f3f399fe10c8..0da4e16fb23a 100644
6234     --- a/drivers/scsi/qedf/qedf.h
6235     +++ b/drivers/scsi/qedf/qedf.h
6236     @@ -355,6 +355,7 @@ struct qedf_ctx {
6237     #define QEDF_GRCDUMP_CAPTURE 4
6238     #define QEDF_IN_RECOVERY 5
6239     #define QEDF_DBG_STOP_IO 6
6240     +#define QEDF_PROBING 8
6241     unsigned long flags; /* Miscellaneous state flags */
6242     int fipvlan_retries;
6243     u8 num_queues;
6244     diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
6245     index 59ca98f12afd..3d0e345947c1 100644
6246     --- a/drivers/scsi/qedf/qedf_main.c
6247     +++ b/drivers/scsi/qedf/qedf_main.c
6248     @@ -3153,7 +3153,7 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
6249     {
6250     int rc = -EINVAL;
6251     struct fc_lport *lport;
6252     - struct qedf_ctx *qedf;
6253     + struct qedf_ctx *qedf = NULL;
6254     struct Scsi_Host *host;
6255     bool is_vf = false;
6256     struct qed_ll2_params params;
6257     @@ -3183,6 +3183,7 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
6258    
6259     /* Initialize qedf_ctx */
6260     qedf = lport_priv(lport);
6261     + set_bit(QEDF_PROBING, &qedf->flags);
6262     qedf->lport = lport;
6263     qedf->ctlr.lp = lport;
6264     qedf->pdev = pdev;
6265     @@ -3206,9 +3207,12 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
6266     } else {
6267     /* Init pointers during recovery */
6268     qedf = pci_get_drvdata(pdev);
6269     + set_bit(QEDF_PROBING, &qedf->flags);
6270     lport = qedf->lport;
6271     }
6272    
6273     + QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe started.\n");
6274     +
6275     host = lport->host;
6276    
6277     /* Allocate mempool for qedf_io_work structs */
6278     @@ -3513,6 +3517,10 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
6279     else
6280     fc_fabric_login(lport);
6281    
6282     + QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe done.\n");
6283     +
6284     + clear_bit(QEDF_PROBING, &qedf->flags);
6285     +
6286     /* All good */
6287     return 0;
6288    
6289     @@ -3538,6 +3546,11 @@ err2:
6290     err1:
6291     scsi_host_put(lport->host);
6292     err0:
6293     + if (qedf) {
6294     + QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe done.\n");
6295     +
6296     + clear_bit(QEDF_PROBING, &qedf->flags);
6297     + }
6298     return rc;
6299     }
6300    
6301     @@ -3687,11 +3700,25 @@ void qedf_get_protocol_tlv_data(void *dev, void *data)
6302     {
6303     struct qedf_ctx *qedf = dev;
6304     struct qed_mfw_tlv_fcoe *fcoe = data;
6305     - struct fc_lport *lport = qedf->lport;
6306     - struct Scsi_Host *host = lport->host;
6307     - struct fc_host_attrs *fc_host = shost_to_fc_host(host);
6308     + struct fc_lport *lport;
6309     + struct Scsi_Host *host;
6310     + struct fc_host_attrs *fc_host;
6311     struct fc_host_statistics *hst;
6312    
6313     + if (!qedf) {
6314     + QEDF_ERR(NULL, "qedf is null.\n");
6315     + return;
6316     + }
6317     +
6318     + if (test_bit(QEDF_PROBING, &qedf->flags)) {
6319     + QEDF_ERR(&qedf->dbg_ctx, "Function is still probing.\n");
6320     + return;
6321     + }
6322     +
6323     + lport = qedf->lport;
6324     + host = lport->host;
6325     + fc_host = shost_to_fc_host(host);
6326     +
6327     /* Force a refresh of the fc_host stats including offload stats */
6328     hst = qedf_fc_get_host_stats(host);
6329    
6330     diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
6331     index 8829880a54c3..0f57c8073406 100644
6332     --- a/drivers/scsi/qedi/qedi_iscsi.c
6333     +++ b/drivers/scsi/qedi/qedi_iscsi.c
6334     @@ -997,7 +997,8 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)
6335     if (qedi_ep->state == EP_STATE_OFLDCONN_START)
6336     goto ep_exit_recover;
6337    
6338     - flush_work(&qedi_ep->offload_work);
6339     + if (qedi_ep->state != EP_STATE_OFLDCONN_NONE)
6340     + flush_work(&qedi_ep->offload_work);
6341    
6342     if (qedi_ep->conn) {
6343     qedi_conn = qedi_ep->conn;
6344     @@ -1214,6 +1215,10 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
6345     }
6346    
6347     iscsi_cid = (u32)path_data->handle;
6348     + if (iscsi_cid >= qedi->max_active_conns) {
6349     + ret = -EINVAL;
6350     + goto set_path_exit;
6351     + }
6352     qedi_ep = qedi->ep_tbl[iscsi_cid];
6353     QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
6354     "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep);
6355     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
6356     index 03d272a09e26..d7ec4083a091 100644
6357     --- a/drivers/scsi/qla2xxx/qla_os.c
6358     +++ b/drivers/scsi/qla2xxx/qla_os.c
6359     @@ -6295,6 +6295,7 @@ qla2x00_do_dpc(void *data)
6360    
6361     if (do_reset && !(test_and_set_bit(ABORT_ISP_ACTIVE,
6362     &base_vha->dpc_flags))) {
6363     + base_vha->flags.online = 1;
6364     ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
6365     "ISP abort scheduled.\n");
6366     if (ha->isp_ops->abort_isp(base_vha)) {
6367     diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6368     index abe7f79bb789..744cd93189da 100644
6369     --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6370     +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
6371     @@ -926,6 +926,7 @@ static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
6372    
6373     atomic_set(&tpg->lport_tpg_enabled, 0);
6374     qlt_stop_phase1(vha->vha_tgt.qla_tgt);
6375     + qlt_stop_phase2(vha->vha_tgt.qla_tgt);
6376     }
6377    
6378     return count;
6379     @@ -1088,6 +1089,7 @@ static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
6380    
6381     atomic_set(&tpg->lport_tpg_enabled, 0);
6382     qlt_stop_phase1(vha->vha_tgt.qla_tgt);
6383     + qlt_stop_phase2(vha->vha_tgt.qla_tgt);
6384     }
6385    
6386     return count;
6387     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
6388     index 91c007d26c1e..206c9f53e9e7 100644
6389     --- a/drivers/scsi/scsi_lib.c
6390     +++ b/drivers/scsi/scsi_lib.c
6391     @@ -551,7 +551,7 @@ static void scsi_uninit_cmd(struct scsi_cmnd *cmd)
6392     }
6393     }
6394    
6395     -static void scsi_mq_free_sgtables(struct scsi_cmnd *cmd)
6396     +static void scsi_free_sgtables(struct scsi_cmnd *cmd)
6397     {
6398     if (cmd->sdb.table.nents)
6399     sg_free_table_chained(&cmd->sdb.table,
6400     @@ -563,7 +563,7 @@ static void scsi_mq_free_sgtables(struct scsi_cmnd *cmd)
6401    
6402     static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd)
6403     {
6404     - scsi_mq_free_sgtables(cmd);
6405     + scsi_free_sgtables(cmd);
6406     scsi_uninit_cmd(cmd);
6407     scsi_del_cmd_from_list(cmd);
6408     }
6409     @@ -1063,7 +1063,7 @@ blk_status_t scsi_init_io(struct scsi_cmnd *cmd)
6410    
6411     return BLK_STS_OK;
6412     out_free_sgtables:
6413     - scsi_mq_free_sgtables(cmd);
6414     + scsi_free_sgtables(cmd);
6415     return ret;
6416     }
6417     EXPORT_SYMBOL(scsi_init_io);
6418     @@ -1214,6 +1214,7 @@ static blk_status_t scsi_setup_cmnd(struct scsi_device *sdev,
6419     struct request *req)
6420     {
6421     struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
6422     + blk_status_t ret;
6423    
6424     if (!blk_rq_bytes(req))
6425     cmd->sc_data_direction = DMA_NONE;
6426     @@ -1223,9 +1224,14 @@ static blk_status_t scsi_setup_cmnd(struct scsi_device *sdev,
6427     cmd->sc_data_direction = DMA_FROM_DEVICE;
6428    
6429     if (blk_rq_is_scsi(req))
6430     - return scsi_setup_scsi_cmnd(sdev, req);
6431     + ret = scsi_setup_scsi_cmnd(sdev, req);
6432     else
6433     - return scsi_setup_fs_cmnd(sdev, req);
6434     + ret = scsi_setup_fs_cmnd(sdev, req);
6435     +
6436     + if (ret != BLK_STS_OK)
6437     + scsi_free_sgtables(cmd);
6438     +
6439     + return ret;
6440     }
6441    
6442     static blk_status_t
6443     diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
6444     index 4664fdf75c0f..70a28f6fb1d0 100644
6445     --- a/drivers/scsi/sr.c
6446     +++ b/drivers/scsi/sr.c
6447     @@ -750,7 +750,7 @@ static int sr_probe(struct device *dev)
6448     cd->cdi.disk = disk;
6449    
6450     if (register_cdrom(&cd->cdi))
6451     - goto fail_put;
6452     + goto fail_minor;
6453    
6454     /*
6455     * Initialize block layer runtime PM stuffs before the
6456     @@ -768,6 +768,10 @@ static int sr_probe(struct device *dev)
6457    
6458     return 0;
6459    
6460     +fail_minor:
6461     + spin_lock(&sr_index_lock);
6462     + clear_bit(minor, sr_index_bits);
6463     + spin_unlock(&sr_index_lock);
6464     fail_put:
6465     put_disk(disk);
6466     fail_free:
6467     diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
6468     index 411ef60b2c14..c49e9f6c46f8 100644
6469     --- a/drivers/scsi/ufs/ufs-qcom.c
6470     +++ b/drivers/scsi/ufs/ufs-qcom.c
6471     @@ -1546,11 +1546,11 @@ static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
6472    
6473     /* sleep a bit intermittently as we are dumping too much data */
6474     ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper);
6475     - usleep_range(1000, 1100);
6476     + udelay(1000);
6477     ufs_qcom_testbus_read(hba);
6478     - usleep_range(1000, 1100);
6479     + udelay(1000);
6480     ufs_qcom_print_unipro_testbus(hba);
6481     - usleep_range(1000, 1100);
6482     + udelay(1000);
6483     }
6484    
6485     /**
6486     diff --git a/drivers/scsi/ufs/ufs_bsg.c b/drivers/scsi/ufs/ufs_bsg.c
6487     index d2197a31abe5..bad366e49159 100644
6488     --- a/drivers/scsi/ufs/ufs_bsg.c
6489     +++ b/drivers/scsi/ufs/ufs_bsg.c
6490     @@ -106,8 +106,10 @@ static int ufs_bsg_request(struct bsg_job *job)
6491     desc_op = bsg_request->upiu_req.qr.opcode;
6492     ret = ufs_bsg_alloc_desc_buffer(hba, job, &desc_buff,
6493     &desc_len, desc_op);
6494     - if (ret)
6495     + if (ret) {
6496     + pm_runtime_put_sync(hba->dev);
6497     goto out;
6498     + }
6499    
6500     /* fall through */
6501     case UPIU_TRANSACTION_NOP_OUT:
6502     diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
6503     index bc73181b0405..2b6853c7375c 100644
6504     --- a/drivers/scsi/ufs/ufshcd.c
6505     +++ b/drivers/scsi/ufs/ufshcd.c
6506     @@ -5101,7 +5101,6 @@ static int ufshcd_bkops_ctrl(struct ufs_hba *hba,
6507     err = ufshcd_enable_auto_bkops(hba);
6508     else
6509     err = ufshcd_disable_auto_bkops(hba);
6510     - hba->urgent_bkops_lvl = curr_status;
6511     out:
6512     return err;
6513     }
6514     diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c
6515     index 29fbab55c3b3..01a17d84b606 100644
6516     --- a/drivers/slimbus/qcom-ngd-ctrl.c
6517     +++ b/drivers/slimbus/qcom-ngd-ctrl.c
6518     @@ -1354,7 +1354,6 @@ static int of_qcom_slim_ngd_register(struct device *parent,
6519     ngd->pdev->driver_override = QCOM_SLIM_NGD_DRV_NAME;
6520     ngd->pdev->dev.of_node = node;
6521     ctrl->ngd = ngd;
6522     - platform_set_drvdata(ngd->pdev, ctrl);
6523    
6524     platform_device_add(ngd->pdev);
6525     ngd->base = ctrl->base + ngd->id * data->offset +
6526     @@ -1369,12 +1368,13 @@ static int of_qcom_slim_ngd_register(struct device *parent,
6527    
6528     static int qcom_slim_ngd_probe(struct platform_device *pdev)
6529     {
6530     - struct qcom_slim_ngd_ctrl *ctrl = platform_get_drvdata(pdev);
6531     struct device *dev = &pdev->dev;
6532     + struct qcom_slim_ngd_ctrl *ctrl = dev_get_drvdata(dev->parent);
6533     int ret;
6534    
6535     ctrl->ctrl.dev = dev;
6536    
6537     + platform_set_drvdata(pdev, ctrl);
6538     pm_runtime_use_autosuspend(dev);
6539     pm_runtime_set_autosuspend_delay(dev, QCOM_SLIM_NGD_AUTOSUSPEND);
6540     pm_runtime_set_suspended(dev);
6541     diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c
6542     index 6473fa602f82..611f4f5bc36a 100644
6543     --- a/drivers/soundwire/slave.c
6544     +++ b/drivers/soundwire/slave.c
6545     @@ -57,6 +57,8 @@ static int sdw_slave_add(struct sdw_bus *bus,
6546     list_del(&slave->node);
6547     mutex_unlock(&bus->bus_lock);
6548     put_device(&slave->dev);
6549     +
6550     + return ret;
6551     }
6552     sdw_slave_debugfs_init(slave);
6553    
6554     diff --git a/drivers/staging/gasket/gasket_sysfs.c b/drivers/staging/gasket/gasket_sysfs.c
6555     index 5f0e089573a2..af26bc9f184a 100644
6556     --- a/drivers/staging/gasket/gasket_sysfs.c
6557     +++ b/drivers/staging/gasket/gasket_sysfs.c
6558     @@ -339,6 +339,7 @@ void gasket_sysfs_put_attr(struct device *device,
6559    
6560     dev_err(device, "Unable to put unknown attribute: %s\n",
6561     attr->attr.attr.name);
6562     + put_mapping(mapping);
6563     }
6564     EXPORT_SYMBOL(gasket_sysfs_put_attr);
6565    
6566     @@ -372,6 +373,7 @@ ssize_t gasket_sysfs_register_store(struct device *device,
6567     gasket_dev = mapping->gasket_dev;
6568     if (!gasket_dev) {
6569     dev_err(device, "Device driver may have been removed\n");
6570     + put_mapping(mapping);
6571     return 0;
6572     }
6573    
6574     diff --git a/drivers/staging/greybus/light.c b/drivers/staging/greybus/light.c
6575     index d6ba25f21d80..d2672b65c3f4 100644
6576     --- a/drivers/staging/greybus/light.c
6577     +++ b/drivers/staging/greybus/light.c
6578     @@ -1026,7 +1026,8 @@ static int gb_lights_light_config(struct gb_lights *glights, u8 id)
6579    
6580     light->channels_count = conf.channel_count;
6581     light->name = kstrndup(conf.name, NAMES_MAX, GFP_KERNEL);
6582     -
6583     + if (!light->name)
6584     + return -ENOMEM;
6585     light->channels = kcalloc(light->channels_count,
6586     sizeof(struct gb_channel), GFP_KERNEL);
6587     if (!light->channels)
6588     diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
6589     index 59568d18ce23..5b72aa81d94c 100644
6590     --- a/drivers/staging/sm750fb/sm750.c
6591     +++ b/drivers/staging/sm750fb/sm750.c
6592     @@ -898,6 +898,7 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
6593     fix->visual = FB_VISUAL_PSEUDOCOLOR;
6594     break;
6595     case 16:
6596     + case 24:
6597     case 32:
6598     fix->visual = FB_VISUAL_TRUECOLOR;
6599     break;
6600     diff --git a/drivers/staging/wilc1000/wilc_hif.c b/drivers/staging/wilc1000/wilc_hif.c
6601     index 77d0732f451b..221e3d93db14 100644
6602     --- a/drivers/staging/wilc1000/wilc_hif.c
6603     +++ b/drivers/staging/wilc1000/wilc_hif.c
6604     @@ -12,6 +12,8 @@
6605     #define WILC_FALSE_FRMWR_CHANNEL 100
6606     #define WILC_MAX_RATES_SUPPORTED 12
6607    
6608     +#define WILC_SCAN_WID_LIST_SIZE 6
6609     +
6610     struct wilc_rcvd_mac_info {
6611     u8 status;
6612     };
6613     @@ -233,7 +235,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source, u8 scan_type,
6614     void *user_arg, struct cfg80211_scan_request *request)
6615     {
6616     int result = 0;
6617     - struct wid wid_list[5];
6618     + struct wid wid_list[WILC_SCAN_WID_LIST_SIZE];
6619     u32 index = 0;
6620     u32 i, scan_timeout;
6621     u8 *buffer;
6622     diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
6623     index 3305b47fdf53..16d5a4e117a2 100644
6624     --- a/drivers/target/loopback/tcm_loop.c
6625     +++ b/drivers/target/loopback/tcm_loop.c
6626     @@ -545,32 +545,15 @@ static int tcm_loop_write_pending(struct se_cmd *se_cmd)
6627     return 0;
6628     }
6629    
6630     -static int tcm_loop_queue_data_in(struct se_cmd *se_cmd)
6631     +static int tcm_loop_queue_data_or_status(const char *func,
6632     + struct se_cmd *se_cmd, u8 scsi_status)
6633     {
6634     struct tcm_loop_cmd *tl_cmd = container_of(se_cmd,
6635     struct tcm_loop_cmd, tl_se_cmd);
6636     struct scsi_cmnd *sc = tl_cmd->sc;
6637    
6638     pr_debug("%s() called for scsi_cmnd: %p cdb: 0x%02x\n",
6639     - __func__, sc, sc->cmnd[0]);
6640     -
6641     - sc->result = SAM_STAT_GOOD;
6642     - set_host_byte(sc, DID_OK);
6643     - if ((se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) ||
6644     - (se_cmd->se_cmd_flags & SCF_UNDERFLOW_BIT))
6645     - scsi_set_resid(sc, se_cmd->residual_count);
6646     - sc->scsi_done(sc);
6647     - return 0;
6648     -}
6649     -
6650     -static int tcm_loop_queue_status(struct se_cmd *se_cmd)
6651     -{
6652     - struct tcm_loop_cmd *tl_cmd = container_of(se_cmd,
6653     - struct tcm_loop_cmd, tl_se_cmd);
6654     - struct scsi_cmnd *sc = tl_cmd->sc;
6655     -
6656     - pr_debug("%s() called for scsi_cmnd: %p cdb: 0x%02x\n",
6657     - __func__, sc, sc->cmnd[0]);
6658     + func, sc, sc->cmnd[0]);
6659    
6660     if (se_cmd->sense_buffer &&
6661     ((se_cmd->se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) ||
6662     @@ -581,7 +564,7 @@ static int tcm_loop_queue_status(struct se_cmd *se_cmd)
6663     sc->result = SAM_STAT_CHECK_CONDITION;
6664     set_driver_byte(sc, DRIVER_SENSE);
6665     } else
6666     - sc->result = se_cmd->scsi_status;
6667     + sc->result = scsi_status;
6668    
6669     set_host_byte(sc, DID_OK);
6670     if ((se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) ||
6671     @@ -591,6 +574,17 @@ static int tcm_loop_queue_status(struct se_cmd *se_cmd)
6672     return 0;
6673     }
6674    
6675     +static int tcm_loop_queue_data_in(struct se_cmd *se_cmd)
6676     +{
6677     + return tcm_loop_queue_data_or_status(__func__, se_cmd, SAM_STAT_GOOD);
6678     +}
6679     +
6680     +static int tcm_loop_queue_status(struct se_cmd *se_cmd)
6681     +{
6682     + return tcm_loop_queue_data_or_status(__func__,
6683     + se_cmd, se_cmd->scsi_status);
6684     +}
6685     +
6686     static void tcm_loop_queue_tm_rsp(struct se_cmd *se_cmd)
6687     {
6688     struct tcm_loop_cmd *tl_cmd = container_of(se_cmd,
6689     diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
6690     index 9425354aef99..a497e7c1f4fc 100644
6691     --- a/drivers/target/target_core_user.c
6692     +++ b/drivers/target/target_core_user.c
6693     @@ -882,41 +882,24 @@ static inline size_t tcmu_cmd_get_cmd_size(struct tcmu_cmd *tcmu_cmd,
6694     return command_size;
6695     }
6696    
6697     -static int tcmu_setup_cmd_timer(struct tcmu_cmd *tcmu_cmd, unsigned int tmo,
6698     - struct timer_list *timer)
6699     +static void tcmu_setup_cmd_timer(struct tcmu_cmd *tcmu_cmd, unsigned int tmo,
6700     + struct timer_list *timer)
6701     {
6702     - struct tcmu_dev *udev = tcmu_cmd->tcmu_dev;
6703     - int cmd_id;
6704     -
6705     - if (tcmu_cmd->cmd_id)
6706     - goto setup_timer;
6707     -
6708     - cmd_id = idr_alloc(&udev->commands, tcmu_cmd, 1, USHRT_MAX, GFP_NOWAIT);
6709     - if (cmd_id < 0) {
6710     - pr_err("tcmu: Could not allocate cmd id.\n");
6711     - return cmd_id;
6712     - }
6713     - tcmu_cmd->cmd_id = cmd_id;
6714     -
6715     - pr_debug("allocated cmd %u for dev %s tmo %lu\n", tcmu_cmd->cmd_id,
6716     - udev->name, tmo / MSEC_PER_SEC);
6717     -
6718     -setup_timer:
6719     if (!tmo)
6720     - return 0;
6721     + return;
6722    
6723     tcmu_cmd->deadline = round_jiffies_up(jiffies + msecs_to_jiffies(tmo));
6724     if (!timer_pending(timer))
6725     mod_timer(timer, tcmu_cmd->deadline);
6726    
6727     - return 0;
6728     + pr_debug("Timeout set up for cmd %p, dev = %s, tmo = %lu\n", tcmu_cmd,
6729     + tcmu_cmd->tcmu_dev->name, tmo / MSEC_PER_SEC);
6730     }
6731    
6732     static int add_to_qfull_queue(struct tcmu_cmd *tcmu_cmd)
6733     {
6734     struct tcmu_dev *udev = tcmu_cmd->tcmu_dev;
6735     unsigned int tmo;
6736     - int ret;
6737    
6738     /*
6739     * For backwards compat if qfull_time_out is not set use
6740     @@ -931,13 +914,11 @@ static int add_to_qfull_queue(struct tcmu_cmd *tcmu_cmd)
6741     else
6742     tmo = TCMU_TIME_OUT;
6743    
6744     - ret = tcmu_setup_cmd_timer(tcmu_cmd, tmo, &udev->qfull_timer);
6745     - if (ret)
6746     - return ret;
6747     + tcmu_setup_cmd_timer(tcmu_cmd, tmo, &udev->qfull_timer);
6748    
6749     list_add_tail(&tcmu_cmd->queue_entry, &udev->qfull_queue);
6750     - pr_debug("adding cmd %u on dev %s to ring space wait queue\n",
6751     - tcmu_cmd->cmd_id, udev->name);
6752     + pr_debug("adding cmd %p on dev %s to ring space wait queue\n",
6753     + tcmu_cmd, udev->name);
6754     return 0;
6755     }
6756    
6757     @@ -959,7 +940,7 @@ static int queue_cmd_ring(struct tcmu_cmd *tcmu_cmd, sense_reason_t *scsi_err)
6758     struct tcmu_mailbox *mb;
6759     struct tcmu_cmd_entry *entry;
6760     struct iovec *iov;
6761     - int iov_cnt, ret;
6762     + int iov_cnt, cmd_id;
6763     uint32_t cmd_head;
6764     uint64_t cdb_off;
6765     bool copy_to_data_area;
6766     @@ -1060,14 +1041,21 @@ static int queue_cmd_ring(struct tcmu_cmd *tcmu_cmd, sense_reason_t *scsi_err)
6767     }
6768     entry->req.iov_bidi_cnt = iov_cnt;
6769    
6770     - ret = tcmu_setup_cmd_timer(tcmu_cmd, udev->cmd_time_out,
6771     - &udev->cmd_timer);
6772     - if (ret) {
6773     - tcmu_cmd_free_data(tcmu_cmd, tcmu_cmd->dbi_cnt);
6774     + cmd_id = idr_alloc(&udev->commands, tcmu_cmd, 1, USHRT_MAX, GFP_NOWAIT);
6775     + if (cmd_id < 0) {
6776     + pr_err("tcmu: Could not allocate cmd id.\n");
6777    
6778     + tcmu_cmd_free_data(tcmu_cmd, tcmu_cmd->dbi_cnt);
6779     *scsi_err = TCM_OUT_OF_RESOURCES;
6780     return -1;
6781     }
6782     + tcmu_cmd->cmd_id = cmd_id;
6783     +
6784     + pr_debug("allocated cmd id %u for cmd %p dev %s\n", tcmu_cmd->cmd_id,
6785     + tcmu_cmd, udev->name);
6786     +
6787     + tcmu_setup_cmd_timer(tcmu_cmd, udev->cmd_time_out, &udev->cmd_timer);
6788     +
6789     entry->hdr.cmd_id = tcmu_cmd->cmd_id;
6790    
6791     /*
6792     @@ -1279,50 +1267,39 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev)
6793     return handled;
6794     }
6795    
6796     -static int tcmu_check_expired_cmd(int id, void *p, void *data)
6797     +static void tcmu_check_expired_ring_cmd(struct tcmu_cmd *cmd)
6798     {
6799     - struct tcmu_cmd *cmd = p;
6800     - struct tcmu_dev *udev = cmd->tcmu_dev;
6801     - u8 scsi_status;
6802     struct se_cmd *se_cmd;
6803     - bool is_running;
6804     -
6805     - if (test_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags))
6806     - return 0;
6807    
6808     if (!time_after(jiffies, cmd->deadline))
6809     - return 0;
6810     + return;
6811    
6812     - is_running = test_bit(TCMU_CMD_BIT_INFLIGHT, &cmd->flags);
6813     + set_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags);
6814     + list_del_init(&cmd->queue_entry);
6815     se_cmd = cmd->se_cmd;
6816     + cmd->se_cmd = NULL;
6817    
6818     - if (is_running) {
6819     - /*
6820     - * If cmd_time_out is disabled but qfull is set deadline
6821     - * will only reflect the qfull timeout. Ignore it.
6822     - */
6823     - if (!udev->cmd_time_out)
6824     - return 0;
6825     + pr_debug("Timing out inflight cmd %u on dev %s.\n",
6826     + cmd->cmd_id, cmd->tcmu_dev->name);
6827    
6828     - set_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags);
6829     - /*
6830     - * target_complete_cmd will translate this to LUN COMM FAILURE
6831     - */
6832     - scsi_status = SAM_STAT_CHECK_CONDITION;
6833     - list_del_init(&cmd->queue_entry);
6834     - cmd->se_cmd = NULL;
6835     - } else {
6836     - list_del_init(&cmd->queue_entry);
6837     - idr_remove(&udev->commands, id);
6838     - tcmu_free_cmd(cmd);
6839     - scsi_status = SAM_STAT_TASK_SET_FULL;
6840     - }
6841     + target_complete_cmd(se_cmd, SAM_STAT_CHECK_CONDITION);
6842     +}
6843    
6844     - pr_debug("Timing out cmd %u on dev %s that is %s.\n",
6845     - id, udev->name, is_running ? "inflight" : "queued");
6846     +static void tcmu_check_expired_queue_cmd(struct tcmu_cmd *cmd)
6847     +{
6848     + struct se_cmd *se_cmd;
6849    
6850     - target_complete_cmd(se_cmd, scsi_status);
6851     - return 0;
6852     + if (!time_after(jiffies, cmd->deadline))
6853     + return;
6854     +
6855     + pr_debug("Timing out queued cmd %p on dev %s.\n",
6856     + cmd, cmd->tcmu_dev->name);
6857     +
6858     + list_del_init(&cmd->queue_entry);
6859     + se_cmd = cmd->se_cmd;
6860     + tcmu_free_cmd(cmd);
6861     +
6862     + target_complete_cmd(se_cmd, SAM_STAT_TASK_SET_FULL);
6863     }
6864    
6865     static void tcmu_device_timedout(struct tcmu_dev *udev)
6866     @@ -1407,16 +1384,15 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)
6867     return &udev->se_dev;
6868     }
6869    
6870     -static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
6871     +static void run_qfull_queue(struct tcmu_dev *udev, bool fail)
6872     {
6873     struct tcmu_cmd *tcmu_cmd, *tmp_cmd;
6874     LIST_HEAD(cmds);
6875     - bool drained = true;
6876     sense_reason_t scsi_ret;
6877     int ret;
6878    
6879     if (list_empty(&udev->qfull_queue))
6880     - return true;
6881     + return;
6882    
6883     pr_debug("running %s's cmdr queue forcefail %d\n", udev->name, fail);
6884    
6885     @@ -1425,11 +1401,10 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
6886     list_for_each_entry_safe(tcmu_cmd, tmp_cmd, &cmds, queue_entry) {
6887     list_del_init(&tcmu_cmd->queue_entry);
6888    
6889     - pr_debug("removing cmd %u on dev %s from queue\n",
6890     - tcmu_cmd->cmd_id, udev->name);
6891     + pr_debug("removing cmd %p on dev %s from queue\n",
6892     + tcmu_cmd, udev->name);
6893    
6894     if (fail) {
6895     - idr_remove(&udev->commands, tcmu_cmd->cmd_id);
6896     /*
6897     * We were not able to even start the command, so
6898     * fail with busy to allow a retry in case runner
6899     @@ -1444,10 +1419,8 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
6900    
6901     ret = queue_cmd_ring(tcmu_cmd, &scsi_ret);
6902     if (ret < 0) {
6903     - pr_debug("cmd %u on dev %s failed with %u\n",
6904     - tcmu_cmd->cmd_id, udev->name, scsi_ret);
6905     -
6906     - idr_remove(&udev->commands, tcmu_cmd->cmd_id);
6907     + pr_debug("cmd %p on dev %s failed with %u\n",
6908     + tcmu_cmd, udev->name, scsi_ret);
6909     /*
6910     * Ignore scsi_ret for now. target_complete_cmd
6911     * drops it.
6912     @@ -1462,13 +1435,11 @@ static bool run_qfull_queue(struct tcmu_dev *udev, bool fail)
6913     * the queue
6914     */
6915     list_splice_tail(&cmds, &udev->qfull_queue);
6916     - drained = false;
6917     break;
6918     }
6919     }
6920    
6921     tcmu_set_next_deadline(&udev->qfull_queue, &udev->qfull_timer);
6922     - return drained;
6923     }
6924    
6925     static int tcmu_irqcontrol(struct uio_info *info, s32 irq_on)
6926     @@ -1652,6 +1623,8 @@ static void tcmu_dev_kref_release(struct kref *kref)
6927     if (tcmu_check_and_free_pending_cmd(cmd) != 0)
6928     all_expired = false;
6929     }
6930     + if (!list_empty(&udev->qfull_queue))
6931     + all_expired = false;
6932     idr_destroy(&udev->commands);
6933     WARN_ON(!all_expired);
6934    
6935     @@ -2037,9 +2010,6 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level)
6936     mutex_lock(&udev->cmdr_lock);
6937    
6938     idr_for_each_entry(&udev->commands, cmd, i) {
6939     - if (!test_bit(TCMU_CMD_BIT_INFLIGHT, &cmd->flags))
6940     - continue;
6941     -
6942     pr_debug("removing cmd %u on dev %s from ring (is expired %d)\n",
6943     cmd->cmd_id, udev->name,
6944     test_bit(TCMU_CMD_BIT_EXPIRED, &cmd->flags));
6945     @@ -2077,6 +2047,8 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level)
6946    
6947     del_timer(&udev->cmd_timer);
6948    
6949     + run_qfull_queue(udev, false);
6950     +
6951     mutex_unlock(&udev->cmdr_lock);
6952     }
6953    
6954     @@ -2698,6 +2670,7 @@ static void find_free_blocks(void)
6955     static void check_timedout_devices(void)
6956     {
6957     struct tcmu_dev *udev, *tmp_dev;
6958     + struct tcmu_cmd *cmd, *tmp_cmd;
6959     LIST_HEAD(devs);
6960    
6961     spin_lock_bh(&timed_out_udevs_lock);
6962     @@ -2708,9 +2681,24 @@ static void check_timedout_devices(void)
6963     spin_unlock_bh(&timed_out_udevs_lock);
6964    
6965     mutex_lock(&udev->cmdr_lock);
6966     - idr_for_each(&udev->commands, tcmu_check_expired_cmd, NULL);
6967    
6968     - tcmu_set_next_deadline(&udev->inflight_queue, &udev->cmd_timer);
6969     + /*
6970     + * If cmd_time_out is disabled but qfull is set deadline
6971     + * will only reflect the qfull timeout. Ignore it.
6972     + */
6973     + if (udev->cmd_time_out) {
6974     + list_for_each_entry_safe(cmd, tmp_cmd,
6975     + &udev->inflight_queue,
6976     + queue_entry) {
6977     + tcmu_check_expired_ring_cmd(cmd);
6978     + }
6979     + tcmu_set_next_deadline(&udev->inflight_queue,
6980     + &udev->cmd_timer);
6981     + }
6982     + list_for_each_entry_safe(cmd, tmp_cmd, &udev->qfull_queue,
6983     + queue_entry) {
6984     + tcmu_check_expired_queue_cmd(cmd);
6985     + }
6986     tcmu_set_next_deadline(&udev->qfull_queue, &udev->qfull_timer);
6987    
6988     mutex_unlock(&udev->cmdr_lock);
6989     diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
6990     index d3e959d01606..85776db4bf34 100644
6991     --- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
6992     +++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
6993     @@ -169,7 +169,7 @@ int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id,
6994    
6995     data = ti_bandgap_get_sensor_data(bgp, id);
6996    
6997     - if (!data || IS_ERR(data))
6998     + if (!IS_ERR_OR_NULL(data))
6999     data = ti_thermal_build_data(bgp, id);
7000    
7001     if (!data)
7002     @@ -196,7 +196,7 @@ int ti_thermal_remove_sensor(struct ti_bandgap *bgp, int id)
7003    
7004     data = ti_bandgap_get_sensor_data(bgp, id);
7005    
7006     - if (data && data->ti_thermal) {
7007     + if (!IS_ERR_OR_NULL(data) && data->ti_thermal) {
7008     if (data->our_zone)
7009     thermal_zone_device_unregister(data->ti_thermal);
7010     }
7011     @@ -262,7 +262,7 @@ int ti_thermal_unregister_cpu_cooling(struct ti_bandgap *bgp, int id)
7012    
7013     data = ti_bandgap_get_sensor_data(bgp, id);
7014    
7015     - if (data) {
7016     + if (!IS_ERR_OR_NULL(data)) {
7017     cpufreq_cooling_unregister(data->cool_dev);
7018     if (data->policy)
7019     cpufreq_cpu_put(data->policy);
7020     diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
7021     index cdcc64ea2554..f8e43a6faea9 100644
7022     --- a/drivers/tty/hvc/hvc_console.c
7023     +++ b/drivers/tty/hvc/hvc_console.c
7024     @@ -75,6 +75,8 @@ static LIST_HEAD(hvc_structs);
7025     */
7026     static DEFINE_MUTEX(hvc_structs_mutex);
7027    
7028     +/* Mutex to serialize hvc_open */
7029     +static DEFINE_MUTEX(hvc_open_mutex);
7030     /*
7031     * This value is used to assign a tty->index value to a hvc_struct based
7032     * upon order of exposure via hvc_probe(), when we can not match it to
7033     @@ -346,16 +348,24 @@ static int hvc_install(struct tty_driver *driver, struct tty_struct *tty)
7034     */
7035     static int hvc_open(struct tty_struct *tty, struct file * filp)
7036     {
7037     - struct hvc_struct *hp = tty->driver_data;
7038     + struct hvc_struct *hp;
7039     unsigned long flags;
7040     int rc = 0;
7041    
7042     + mutex_lock(&hvc_open_mutex);
7043     +
7044     + hp = tty->driver_data;
7045     + if (!hp) {
7046     + rc = -EIO;
7047     + goto out;
7048     + }
7049     +
7050     spin_lock_irqsave(&hp->port.lock, flags);
7051     /* Check and then increment for fast path open. */
7052     if (hp->port.count++ > 0) {
7053     spin_unlock_irqrestore(&hp->port.lock, flags);
7054     hvc_kick();
7055     - return 0;
7056     + goto out;
7057     } /* else count == 0 */
7058     spin_unlock_irqrestore(&hp->port.lock, flags);
7059    
7060     @@ -383,6 +393,8 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
7061     /* Force wakeup of the polling thread */
7062     hvc_kick();
7063    
7064     +out:
7065     + mutex_unlock(&hvc_open_mutex);
7066     return rc;
7067     }
7068    
7069     diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
7070     index 36a3eb4ad4c5..75408b9f232d 100644
7071     --- a/drivers/tty/n_gsm.c
7072     +++ b/drivers/tty/n_gsm.c
7073     @@ -665,11 +665,10 @@ static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
7074     * FIXME: lock against link layer control transmissions
7075     */
7076    
7077     -static void gsm_data_kick(struct gsm_mux *gsm)
7078     +static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci)
7079     {
7080     struct gsm_msg *msg, *nmsg;
7081     int len;
7082     - int skip_sof = 0;
7083    
7084     list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) {
7085     if (gsm->constipated && msg->addr)
7086     @@ -691,18 +690,23 @@ static void gsm_data_kick(struct gsm_mux *gsm)
7087     print_hex_dump_bytes("gsm_data_kick: ",
7088     DUMP_PREFIX_OFFSET,
7089     gsm->txframe, len);
7090     -
7091     - if (gsm->output(gsm, gsm->txframe + skip_sof,
7092     - len - skip_sof) < 0)
7093     + if (gsm->output(gsm, gsm->txframe, len) < 0)
7094     break;
7095     /* FIXME: Can eliminate one SOF in many more cases */
7096     gsm->tx_bytes -= msg->len;
7097     - /* For a burst of frames skip the extra SOF within the
7098     - burst */
7099     - skip_sof = 1;
7100    
7101     list_del(&msg->list);
7102     kfree(msg);
7103     +
7104     + if (dlci) {
7105     + tty_port_tty_wakeup(&dlci->port);
7106     + } else {
7107     + int i = 0;
7108     +
7109     + for (i = 0; i < NUM_DLCI; i++)
7110     + if (gsm->dlci[i])
7111     + tty_port_tty_wakeup(&gsm->dlci[i]->port);
7112     + }
7113     }
7114     }
7115    
7116     @@ -754,7 +758,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
7117     /* Add to the actual output queue */
7118     list_add_tail(&msg->list, &gsm->tx_list);
7119     gsm->tx_bytes += msg->len;
7120     - gsm_data_kick(gsm);
7121     + gsm_data_kick(gsm, dlci);
7122     }
7123    
7124     /**
7125     @@ -1215,7 +1219,7 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
7126     gsm_control_reply(gsm, CMD_FCON, NULL, 0);
7127     /* Kick the link in case it is idling */
7128     spin_lock_irqsave(&gsm->tx_lock, flags);
7129     - gsm_data_kick(gsm);
7130     + gsm_data_kick(gsm, NULL);
7131     spin_unlock_irqrestore(&gsm->tx_lock, flags);
7132     break;
7133     case CMD_FCOFF:
7134     @@ -2525,7 +2529,7 @@ static void gsmld_write_wakeup(struct tty_struct *tty)
7135     /* Queue poll */
7136     clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
7137     spin_lock_irqsave(&gsm->tx_lock, flags);
7138     - gsm_data_kick(gsm);
7139     + gsm_data_kick(gsm, NULL);
7140     if (gsm->tx_bytes < TX_THRESH_LO) {
7141     gsm_dlci_data_sweep(gsm);
7142     }
7143     diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
7144     index 2c65c775bf5a..dbb27303a6b4 100644
7145     --- a/drivers/tty/serial/8250/8250_port.c
7146     +++ b/drivers/tty/serial/8250/8250_port.c
7147     @@ -2539,6 +2539,8 @@ static unsigned int serial8250_get_baud_rate(struct uart_port *port,
7148     struct ktermios *termios,
7149     struct ktermios *old)
7150     {
7151     + unsigned int tolerance = port->uartclk / 100;
7152     +
7153     /*
7154     * Ask the core to calculate the divisor for us.
7155     * Allow 1% tolerance at the upper limit so uart clks marginally
7156     @@ -2547,7 +2549,7 @@ static unsigned int serial8250_get_baud_rate(struct uart_port *port,
7157     */
7158     return uart_get_baud_rate(port, termios, old,
7159     port->uartclk / 16 / UART_DIV_MAX,
7160     - port->uartclk);
7161     + (port->uartclk + tolerance) / 16);
7162     }
7163    
7164     void
7165     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
7166     index b0b689546395..de3e8c24c03e 100644
7167     --- a/drivers/tty/serial/amba-pl011.c
7168     +++ b/drivers/tty/serial/amba-pl011.c
7169     @@ -2585,6 +2585,7 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap,
7170     uap->port.fifosize = uap->fifosize;
7171     uap->port.flags = UPF_BOOT_AUTOCONF;
7172     uap->port.line = index;
7173     + spin_lock_init(&uap->port.lock);
7174    
7175     amba_ports[index] = uap;
7176    
7177     diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
7178     index 0d8e3f3804a3..084c48c5848f 100644
7179     --- a/drivers/usb/class/usblp.c
7180     +++ b/drivers/usb/class/usblp.c
7181     @@ -468,7 +468,8 @@ static int usblp_release(struct inode *inode, struct file *file)
7182     usb_autopm_put_interface(usblp->intf);
7183    
7184     if (!usblp->present) /* finish cleanup from disconnect */
7185     - usblp_cleanup(usblp);
7186     + usblp_cleanup(usblp); /* any URBs must be dead */
7187     +
7188     mutex_unlock(&usblp_mutex);
7189     return 0;
7190     }
7191     @@ -1375,9 +1376,11 @@ static void usblp_disconnect(struct usb_interface *intf)
7192    
7193     usblp_unlink_urbs(usblp);
7194     mutex_unlock(&usblp->mut);
7195     + usb_poison_anchored_urbs(&usblp->urbs);
7196    
7197     if (!usblp->used)
7198     usblp_cleanup(usblp);
7199     +
7200     mutex_unlock(&usblp_mutex);
7201     }
7202    
7203     diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
7204     index 6af6add3d4c0..6272b4ae4740 100644
7205     --- a/drivers/usb/dwc2/core_intr.c
7206     +++ b/drivers/usb/dwc2/core_intr.c
7207     @@ -421,10 +421,13 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
7208     if (ret && (ret != -ENOTSUPP))
7209     dev_err(hsotg->dev, "exit power_down failed\n");
7210    
7211     + /* Change to L0 state */
7212     + hsotg->lx_state = DWC2_L0;
7213     call_gadget(hsotg, resume);
7214     + } else {
7215     + /* Change to L0 state */
7216     + hsotg->lx_state = DWC2_L0;
7217     }
7218     - /* Change to L0 state */
7219     - hsotg->lx_state = DWC2_L0;
7220     } else {
7221     if (hsotg->params.power_down)
7222     return;
7223     diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
7224     index c30c5b1c478c..17340864a540 100644
7225     --- a/drivers/usb/dwc3/gadget.c
7226     +++ b/drivers/usb/dwc3/gadget.c
7227     @@ -1217,6 +1217,8 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep)
7228     }
7229     }
7230    
7231     +static void dwc3_gadget_ep_cleanup_cancelled_requests(struct dwc3_ep *dep);
7232     +
7233     static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
7234     {
7235     struct dwc3_gadget_ep_cmd_params params;
7236     @@ -1256,14 +1258,20 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
7237    
7238     ret = dwc3_send_gadget_ep_cmd(dep, cmd, &params);
7239     if (ret < 0) {
7240     - /*
7241     - * FIXME we need to iterate over the list of requests
7242     - * here and stop, unmap, free and del each of the linked
7243     - * requests instead of what we do now.
7244     - */
7245     - if (req->trb)
7246     - memset(req->trb, 0, sizeof(struct dwc3_trb));
7247     - dwc3_gadget_del_and_unmap_request(dep, req, ret);
7248     + struct dwc3_request *tmp;
7249     +
7250     + if (ret == -EAGAIN)
7251     + return ret;
7252     +
7253     + dwc3_stop_active_transfer(dep, true, true);
7254     +
7255     + list_for_each_entry_safe(req, tmp, &dep->started_list, list)
7256     + dwc3_gadget_move_cancelled_request(req);
7257     +
7258     + /* If ep isn't started, then there's no end transfer pending */
7259     + if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING))
7260     + dwc3_gadget_ep_cleanup_cancelled_requests(dep);
7261     +
7262     return ret;
7263     }
7264    
7265     @@ -1505,6 +1513,10 @@ static void dwc3_gadget_ep_skip_trbs(struct dwc3_ep *dep, struct dwc3_request *r
7266     {
7267     int i;
7268    
7269     + /* If req->trb is not set, then the request has not started */
7270     + if (!req->trb)
7271     + return;
7272     +
7273     /*
7274     * If request was already started, this means we had to
7275     * stop the transfer. With that we also need to ignore
7276     @@ -1595,6 +1607,8 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
7277     {
7278     struct dwc3_gadget_ep_cmd_params params;
7279     struct dwc3 *dwc = dep->dwc;
7280     + struct dwc3_request *req;
7281     + struct dwc3_request *tmp;
7282     int ret;
7283    
7284     if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
7285     @@ -1631,13 +1645,37 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
7286     else
7287     dep->flags |= DWC3_EP_STALL;
7288     } else {
7289     + /*
7290     + * Don't issue CLEAR_STALL command to control endpoints. The
7291     + * controller automatically clears the STALL when it receives
7292     + * the SETUP token.
7293     + */
7294     + if (dep->number <= 1) {
7295     + dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
7296     + return 0;
7297     + }
7298    
7299     ret = dwc3_send_clear_stall_ep_cmd(dep);
7300     - if (ret)
7301     + if (ret) {
7302     dev_err(dwc->dev, "failed to clear STALL on %s\n",
7303     dep->name);
7304     - else
7305     - dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
7306     + return ret;
7307     + }
7308     +
7309     + dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
7310     +
7311     + dwc3_stop_active_transfer(dep, true, true);
7312     +
7313     + list_for_each_entry_safe(req, tmp, &dep->started_list, list)
7314     + dwc3_gadget_move_cancelled_request(req);
7315     +
7316     + list_for_each_entry_safe(req, tmp, &dep->pending_list, list)
7317     + dwc3_gadget_move_cancelled_request(req);
7318     +
7319     + if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING)) {
7320     + dep->flags &= ~DWC3_EP_DELAY_START;
7321     + dwc3_gadget_ep_cleanup_cancelled_requests(dep);
7322     + }
7323     }
7324    
7325     return ret;
7326     diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
7327     index d98ca1566e95..f75ff1a75dc4 100644
7328     --- a/drivers/usb/gadget/composite.c
7329     +++ b/drivers/usb/gadget/composite.c
7330     @@ -96,40 +96,43 @@ function_descriptors(struct usb_function *f,
7331     }
7332    
7333     /**
7334     - * next_ep_desc() - advance to the next EP descriptor
7335     + * next_desc() - advance to the next desc_type descriptor
7336     * @t: currect pointer within descriptor array
7337     + * @desc_type: descriptor type
7338     *
7339     - * Return: next EP descriptor or NULL
7340     + * Return: next desc_type descriptor or NULL
7341     *
7342     - * Iterate over @t until either EP descriptor found or
7343     + * Iterate over @t until either desc_type descriptor found or
7344     * NULL (that indicates end of list) encountered
7345     */
7346     static struct usb_descriptor_header**
7347     -next_ep_desc(struct usb_descriptor_header **t)
7348     +next_desc(struct usb_descriptor_header **t, u8 desc_type)
7349     {
7350     for (; *t; t++) {
7351     - if ((*t)->bDescriptorType == USB_DT_ENDPOINT)
7352     + if ((*t)->bDescriptorType == desc_type)
7353     return t;
7354     }
7355     return NULL;
7356     }
7357    
7358     /*
7359     - * for_each_ep_desc()- iterate over endpoint descriptors in the
7360     - * descriptors list
7361     - * @start: pointer within descriptor array.
7362     - * @ep_desc: endpoint descriptor to use as the loop cursor
7363     + * for_each_desc() - iterate over desc_type descriptors in the
7364     + * descriptors list
7365     + * @start: pointer within descriptor array.
7366     + * @iter_desc: desc_type descriptor to use as the loop cursor
7367     + * @desc_type: wanted descriptr type
7368     */
7369     -#define for_each_ep_desc(start, ep_desc) \
7370     - for (ep_desc = next_ep_desc(start); \
7371     - ep_desc; ep_desc = next_ep_desc(ep_desc+1))
7372     +#define for_each_desc(start, iter_desc, desc_type) \
7373     + for (iter_desc = next_desc(start, desc_type); \
7374     + iter_desc; iter_desc = next_desc(iter_desc + 1, desc_type))
7375    
7376     /**
7377     - * config_ep_by_speed() - configures the given endpoint
7378     + * config_ep_by_speed_and_alt() - configures the given endpoint
7379     * according to gadget speed.
7380     * @g: pointer to the gadget
7381     * @f: usb function
7382     * @_ep: the endpoint to configure
7383     + * @alt: alternate setting number
7384     *
7385     * Return: error code, 0 on success
7386     *
7387     @@ -142,11 +145,13 @@ next_ep_desc(struct usb_descriptor_header **t)
7388     * Note: the supplied function should hold all the descriptors
7389     * for supported speeds
7390     */
7391     -int config_ep_by_speed(struct usb_gadget *g,
7392     - struct usb_function *f,
7393     - struct usb_ep *_ep)
7394     +int config_ep_by_speed_and_alt(struct usb_gadget *g,
7395     + struct usb_function *f,
7396     + struct usb_ep *_ep,
7397     + u8 alt)
7398     {
7399     struct usb_endpoint_descriptor *chosen_desc = NULL;
7400     + struct usb_interface_descriptor *int_desc = NULL;
7401     struct usb_descriptor_header **speed_desc = NULL;
7402    
7403     struct usb_ss_ep_comp_descriptor *comp_desc = NULL;
7404     @@ -182,8 +187,21 @@ int config_ep_by_speed(struct usb_gadget *g,
7405     default:
7406     speed_desc = f->fs_descriptors;
7407     }
7408     +
7409     + /* find correct alternate setting descriptor */
7410     + for_each_desc(speed_desc, d_spd, USB_DT_INTERFACE) {
7411     + int_desc = (struct usb_interface_descriptor *)*d_spd;
7412     +
7413     + if (int_desc->bAlternateSetting == alt) {
7414     + speed_desc = d_spd;
7415     + goto intf_found;
7416     + }
7417     + }
7418     + return -EIO;
7419     +
7420     +intf_found:
7421     /* find descriptors */
7422     - for_each_ep_desc(speed_desc, d_spd) {
7423     + for_each_desc(speed_desc, d_spd, USB_DT_ENDPOINT) {
7424     chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
7425     if (chosen_desc->bEndpointAddress == _ep->address)
7426     goto ep_found;
7427     @@ -237,6 +255,32 @@ ep_found:
7428     }
7429     return 0;
7430     }
7431     +EXPORT_SYMBOL_GPL(config_ep_by_speed_and_alt);
7432     +
7433     +/**
7434     + * config_ep_by_speed() - configures the given endpoint
7435     + * according to gadget speed.
7436     + * @g: pointer to the gadget
7437     + * @f: usb function
7438     + * @_ep: the endpoint to configure
7439     + *
7440     + * Return: error code, 0 on success
7441     + *
7442     + * This function chooses the right descriptors for a given
7443     + * endpoint according to gadget speed and saves it in the
7444     + * endpoint desc field. If the endpoint already has a descriptor
7445     + * assigned to it - overwrites it with currently corresponding
7446     + * descriptor. The endpoint maxpacket field is updated according
7447     + * to the chosen descriptor.
7448     + * Note: the supplied function should hold all the descriptors
7449     + * for supported speeds
7450     + */
7451     +int config_ep_by_speed(struct usb_gadget *g,
7452     + struct usb_function *f,
7453     + struct usb_ep *_ep)
7454     +{
7455     + return config_ep_by_speed_and_alt(g, f, _ep, 0);
7456     +}
7457     EXPORT_SYMBOL_GPL(config_ep_by_speed);
7458    
7459     /**
7460     diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
7461     index 51fa614b4079..0e7820158aaa 100644
7462     --- a/drivers/usb/gadget/udc/core.c
7463     +++ b/drivers/usb/gadget/udc/core.c
7464     @@ -1297,6 +1297,8 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
7465     kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
7466    
7467     usb_gadget_disconnect(udc->gadget);
7468     + if (udc->gadget->irq)
7469     + synchronize_irq(udc->gadget->irq);
7470     udc->driver->unbind(udc->gadget);
7471     usb_gadget_udc_stop(udc);
7472    
7473     diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c
7474     index bf6c81e2f8cc..6d2f1f98f13d 100644
7475     --- a/drivers/usb/gadget/udc/lpc32xx_udc.c
7476     +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c
7477     @@ -1614,17 +1614,17 @@ static int lpc32xx_ep_enable(struct usb_ep *_ep,
7478     const struct usb_endpoint_descriptor *desc)
7479     {
7480     struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
7481     - struct lpc32xx_udc *udc = ep->udc;
7482     + struct lpc32xx_udc *udc;
7483     u16 maxpacket;
7484     u32 tmp;
7485     unsigned long flags;
7486    
7487     /* Verify EP data */
7488     if ((!_ep) || (!ep) || (!desc) ||
7489     - (desc->bDescriptorType != USB_DT_ENDPOINT)) {
7490     - dev_dbg(udc->dev, "bad ep or descriptor\n");
7491     + (desc->bDescriptorType != USB_DT_ENDPOINT))
7492     return -EINVAL;
7493     - }
7494     +
7495     + udc = ep->udc;
7496     maxpacket = usb_endpoint_maxp(desc);
7497     if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) {
7498     dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
7499     @@ -1872,7 +1872,7 @@ static int lpc32xx_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
7500     static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
7501     {
7502     struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
7503     - struct lpc32xx_udc *udc = ep->udc;
7504     + struct lpc32xx_udc *udc;
7505     unsigned long flags;
7506    
7507     if ((!ep) || (ep->hwep_num <= 1))
7508     @@ -1882,6 +1882,7 @@ static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
7509     if (ep->is_in)
7510     return -EAGAIN;
7511    
7512     + udc = ep->udc;
7513     spin_lock_irqsave(&udc->lock, flags);
7514    
7515     if (value == 1) {
7516     diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c
7517     index a8288df6aadf..ea59b56e5402 100644
7518     --- a/drivers/usb/gadget/udc/m66592-udc.c
7519     +++ b/drivers/usb/gadget/udc/m66592-udc.c
7520     @@ -1667,7 +1667,7 @@ static int m66592_probe(struct platform_device *pdev)
7521    
7522     err_add_udc:
7523     m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
7524     -
7525     + m66592->ep0_req = NULL;
7526     clean_up3:
7527     if (m66592->pdata->on_chip) {
7528     clk_disable(m66592->clk);
7529     diff --git a/drivers/usb/gadget/udc/s3c2410_udc.c b/drivers/usb/gadget/udc/s3c2410_udc.c
7530     index f82208fbc249..5dcc0692b95c 100644
7531     --- a/drivers/usb/gadget/udc/s3c2410_udc.c
7532     +++ b/drivers/usb/gadget/udc/s3c2410_udc.c
7533     @@ -251,10 +251,6 @@ static void s3c2410_udc_done(struct s3c2410_ep *ep,
7534     static void s3c2410_udc_nuke(struct s3c2410_udc *udc,
7535     struct s3c2410_ep *ep, int status)
7536     {
7537     - /* Sanity check */
7538     - if (&ep->queue == NULL)
7539     - return;
7540     -
7541     while (!list_empty(&ep->queue)) {
7542     struct s3c2410_request *req;
7543     req = list_entry(ep->queue.next, struct s3c2410_request,
7544     diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
7545     index c9f91e6c72b6..7f65c86047dd 100644
7546     --- a/drivers/usb/host/ehci-mxc.c
7547     +++ b/drivers/usb/host/ehci-mxc.c
7548     @@ -50,6 +50,8 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
7549     }
7550    
7551     irq = platform_get_irq(pdev, 0);
7552     + if (irq < 0)
7553     + return irq;
7554    
7555     hcd = usb_create_hcd(&ehci_mxc_hc_driver, dev, dev_name(dev));
7556     if (!hcd)
7557     diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
7558     index 769749ca5961..e9a49007cce4 100644
7559     --- a/drivers/usb/host/ehci-platform.c
7560     +++ b/drivers/usb/host/ehci-platform.c
7561     @@ -29,6 +29,8 @@
7562     #include <linux/of.h>
7563     #include <linux/platform_device.h>
7564     #include <linux/reset.h>
7565     +#include <linux/sys_soc.h>
7566     +#include <linux/timer.h>
7567     #include <linux/usb.h>
7568     #include <linux/usb/hcd.h>
7569     #include <linux/usb/ehci_pdriver.h>
7570     @@ -44,6 +46,9 @@ struct ehci_platform_priv {
7571     struct clk *clks[EHCI_MAX_CLKS];
7572     struct reset_control *rsts;
7573     bool reset_on_resume;
7574     + bool quirk_poll;
7575     + struct timer_list poll_timer;
7576     + struct delayed_work poll_work;
7577     };
7578    
7579     static const char hcd_name[] = "ehci-platform";
7580     @@ -118,6 +123,111 @@ static struct usb_ehci_pdata ehci_platform_defaults = {
7581     .power_off = ehci_platform_power_off,
7582     };
7583    
7584     +/**
7585     + * quirk_poll_check_port_status - Poll port_status if the device sticks
7586     + * @ehci: the ehci hcd pointer
7587     + *
7588     + * Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to be getting
7589     + * stuck very rarely after a full/low usb device was disconnected. To
7590     + * detect such a situation, the controllers require a special way which poll
7591     + * the EHCI PORTSC register.
7592     + *
7593     + * Return: true if the controller's port_status indicated getting stuck
7594     + */
7595     +static bool quirk_poll_check_port_status(struct ehci_hcd *ehci)
7596     +{
7597     + u32 port_status = ehci_readl(ehci, &ehci->regs->port_status[0]);
7598     +
7599     + if (!(port_status & PORT_OWNER) &&
7600     + (port_status & PORT_POWER) &&
7601     + !(port_status & PORT_CONNECT) &&
7602     + (port_status & PORT_LS_MASK))
7603     + return true;
7604     +
7605     + return false;
7606     +}
7607     +
7608     +/**
7609     + * quirk_poll_rebind_companion - rebind comanion device to recover
7610     + * @ehci: the ehci hcd pointer
7611     + *
7612     + * Since EHCI/OHCI controllers on R-Car Gen3 SoCs are possible to be getting
7613     + * stuck very rarely after a full/low usb device was disconnected. To
7614     + * recover from such a situation, the controllers require changing the OHCI
7615     + * functional state.
7616     + */
7617     +static void quirk_poll_rebind_companion(struct ehci_hcd *ehci)
7618     +{
7619     + struct device *companion_dev;
7620     + struct usb_hcd *hcd = ehci_to_hcd(ehci);
7621     +
7622     + companion_dev = usb_of_get_companion_dev(hcd->self.controller);
7623     + if (!companion_dev)
7624     + return;
7625     +
7626     + device_release_driver(companion_dev);
7627     + if (device_attach(companion_dev) < 0)
7628     + ehci_err(ehci, "%s: failed\n", __func__);
7629     +
7630     + put_device(companion_dev);
7631     +}
7632     +
7633     +static void quirk_poll_work(struct work_struct *work)
7634     +{
7635     + struct ehci_platform_priv *priv =
7636     + container_of(to_delayed_work(work), struct ehci_platform_priv,
7637     + poll_work);
7638     + struct ehci_hcd *ehci = container_of((void *)priv, struct ehci_hcd,
7639     + priv);
7640     +
7641     + /* check the status twice to reduce misdetection rate */
7642     + if (!quirk_poll_check_port_status(ehci))
7643     + return;
7644     + udelay(10);
7645     + if (!quirk_poll_check_port_status(ehci))
7646     + return;
7647     +
7648     + ehci_dbg(ehci, "%s: detected getting stuck. rebind now!\n", __func__);
7649     + quirk_poll_rebind_companion(ehci);
7650     +}
7651     +
7652     +static void quirk_poll_timer(struct timer_list *t)
7653     +{
7654     + struct ehci_platform_priv *priv = from_timer(priv, t, poll_timer);
7655     + struct ehci_hcd *ehci = container_of((void *)priv, struct ehci_hcd,
7656     + priv);
7657     +
7658     + if (quirk_poll_check_port_status(ehci)) {
7659     + /*
7660     + * Now scheduling the work for testing the port more. Note that
7661     + * updating the status is possible to be delayed when
7662     + * reconnection. So, this uses delayed work with 5 ms delay
7663     + * to avoid misdetection.
7664     + */
7665     + schedule_delayed_work(&priv->poll_work, msecs_to_jiffies(5));
7666     + }
7667     +
7668     + mod_timer(&priv->poll_timer, jiffies + HZ);
7669     +}
7670     +
7671     +static void quirk_poll_init(struct ehci_platform_priv *priv)
7672     +{
7673     + INIT_DELAYED_WORK(&priv->poll_work, quirk_poll_work);
7674     + timer_setup(&priv->poll_timer, quirk_poll_timer, 0);
7675     + mod_timer(&priv->poll_timer, jiffies + HZ);
7676     +}
7677     +
7678     +static void quirk_poll_end(struct ehci_platform_priv *priv)
7679     +{
7680     + del_timer_sync(&priv->poll_timer);
7681     + cancel_delayed_work(&priv->poll_work);
7682     +}
7683     +
7684     +static const struct soc_device_attribute quirk_poll_match[] = {
7685     + { .family = "R-Car Gen3" },
7686     + { /* sentinel*/ }
7687     +};
7688     +
7689     static int ehci_platform_probe(struct platform_device *dev)
7690     {
7691     struct usb_hcd *hcd;
7692     @@ -176,6 +286,9 @@ static int ehci_platform_probe(struct platform_device *dev)
7693     "has-transaction-translator"))
7694     hcd->has_tt = 1;
7695    
7696     + if (soc_device_match(quirk_poll_match))
7697     + priv->quirk_poll = true;
7698     +
7699     for (clk = 0; clk < EHCI_MAX_CLKS; clk++) {
7700     priv->clks[clk] = of_clk_get(dev->dev.of_node, clk);
7701     if (IS_ERR(priv->clks[clk])) {
7702     @@ -247,6 +360,9 @@ static int ehci_platform_probe(struct platform_device *dev)
7703     device_enable_async_suspend(hcd->self.controller);
7704     platform_set_drvdata(dev, hcd);
7705    
7706     + if (priv->quirk_poll)
7707     + quirk_poll_init(priv);
7708     +
7709     return err;
7710    
7711     err_power:
7712     @@ -273,6 +389,9 @@ static int ehci_platform_remove(struct platform_device *dev)
7713     struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
7714     int clk;
7715    
7716     + if (priv->quirk_poll)
7717     + quirk_poll_end(priv);
7718     +
7719     usb_remove_hcd(hcd);
7720    
7721     if (pdata->power_off)
7722     @@ -297,9 +416,13 @@ static int ehci_platform_suspend(struct device *dev)
7723     struct usb_hcd *hcd = dev_get_drvdata(dev);
7724     struct usb_ehci_pdata *pdata = dev_get_platdata(dev);
7725     struct platform_device *pdev = to_platform_device(dev);
7726     + struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
7727     bool do_wakeup = device_may_wakeup(dev);
7728     int ret;
7729    
7730     + if (priv->quirk_poll)
7731     + quirk_poll_end(priv);
7732     +
7733     ret = ehci_suspend(hcd, do_wakeup);
7734     if (ret)
7735     return ret;
7736     @@ -331,6 +454,14 @@ static int ehci_platform_resume(struct device *dev)
7737     }
7738    
7739     ehci_resume(hcd, priv->reset_on_resume);
7740     +
7741     + pm_runtime_disable(dev);
7742     + pm_runtime_set_active(dev);
7743     + pm_runtime_enable(dev);
7744     +
7745     + if (priv->quirk_poll)
7746     + quirk_poll_init(priv);
7747     +
7748     return 0;
7749     }
7750     #endif /* CONFIG_PM_SLEEP */
7751     diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
7752     index 7addfc2cbadc..4a8456f12a73 100644
7753     --- a/drivers/usb/host/ohci-platform.c
7754     +++ b/drivers/usb/host/ohci-platform.c
7755     @@ -299,6 +299,11 @@ static int ohci_platform_resume(struct device *dev)
7756     }
7757    
7758     ohci_resume(hcd, false);
7759     +
7760     + pm_runtime_disable(dev);
7761     + pm_runtime_set_active(dev);
7762     + pm_runtime_enable(dev);
7763     +
7764     return 0;
7765     }
7766     #endif /* CONFIG_PM_SLEEP */
7767     diff --git a/drivers/usb/host/ohci-sm501.c b/drivers/usb/host/ohci-sm501.c
7768     index c158cda9e4b9..cff965240327 100644
7769     --- a/drivers/usb/host/ohci-sm501.c
7770     +++ b/drivers/usb/host/ohci-sm501.c
7771     @@ -157,9 +157,10 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
7772     * the call to usb_hcd_setup_local_mem() below does just that.
7773     */
7774    
7775     - if (usb_hcd_setup_local_mem(hcd, mem->start,
7776     - mem->start - mem->parent->start,
7777     - resource_size(mem)) < 0)
7778     + retval = usb_hcd_setup_local_mem(hcd, mem->start,
7779     + mem->start - mem->parent->start,
7780     + resource_size(mem));
7781     + if (retval < 0)
7782     goto err5;
7783     retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
7784     if (retval)
7785     diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
7786     index 52c625c02341..60d06e9b600f 100644
7787     --- a/drivers/usb/host/xhci-plat.c
7788     +++ b/drivers/usb/host/xhci-plat.c
7789     @@ -410,7 +410,15 @@ static int __maybe_unused xhci_plat_resume(struct device *dev)
7790     if (ret)
7791     return ret;
7792    
7793     - return xhci_resume(xhci, 0);
7794     + ret = xhci_resume(xhci, 0);
7795     + if (ret)
7796     + return ret;
7797     +
7798     + pm_runtime_disable(dev);
7799     + pm_runtime_set_active(dev);
7800     + pm_runtime_enable(dev);
7801     +
7802     + return 0;
7803     }
7804    
7805     static int __maybe_unused xhci_plat_runtime_suspend(struct device *dev)
7806     diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c
7807     index 7570c7602ab4..f32c582611eb 100644
7808     --- a/drivers/vfio/mdev/mdev_sysfs.c
7809     +++ b/drivers/vfio/mdev/mdev_sysfs.c
7810     @@ -110,7 +110,7 @@ static struct mdev_type *add_mdev_supported_type(struct mdev_parent *parent,
7811     "%s-%s", dev_driver_string(parent->dev),
7812     group->name);
7813     if (ret) {
7814     - kfree(type);
7815     + kobject_put(&type->kobj);
7816     return ERR_PTR(ret);
7817     }
7818    
7819     diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
7820     index f0891bd8444c..d6359c37c9e5 100644
7821     --- a/drivers/vfio/pci/vfio_pci_config.c
7822     +++ b/drivers/vfio/pci/vfio_pci_config.c
7823     @@ -1460,7 +1460,12 @@ static int vfio_cap_init(struct vfio_pci_device *vdev)
7824     if (ret)
7825     return ret;
7826    
7827     - if (cap <= PCI_CAP_ID_MAX) {
7828     + /*
7829     + * ID 0 is a NULL capability, conflicting with our fake
7830     + * PCI_CAP_ID_BASIC. As it has no content, consider it
7831     + * hidden for now.
7832     + */
7833     + if (cap && cap <= PCI_CAP_ID_MAX) {
7834     len = pci_cap_length[cap];
7835     if (len == 0xFF) { /* Variable length */
7836     len = vfio_cap_len(vdev, cap, pos);
7837     @@ -1726,8 +1731,11 @@ void vfio_config_free(struct vfio_pci_device *vdev)
7838     vdev->vconfig = NULL;
7839     kfree(vdev->pci_config_map);
7840     vdev->pci_config_map = NULL;
7841     - kfree(vdev->msi_perm);
7842     - vdev->msi_perm = NULL;
7843     + if (vdev->msi_perm) {
7844     + free_perm_bits(vdev->msi_perm);
7845     + kfree(vdev->msi_perm);
7846     + vdev->msi_perm = NULL;
7847     + }
7848     }
7849    
7850     /*
7851     diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
7852     index a9caf1bc3c3e..88ce114790d7 100644
7853     --- a/drivers/vhost/scsi.c
7854     +++ b/drivers/vhost/scsi.c
7855     @@ -2290,6 +2290,7 @@ static struct configfs_attribute *vhost_scsi_wwn_attrs[] = {
7856     static const struct target_core_fabric_ops vhost_scsi_ops = {
7857     .module = THIS_MODULE,
7858     .fabric_name = "vhost",
7859     + .max_data_sg_nents = VHOST_SCSI_PREALLOC_SGLS,
7860     .tpg_get_wwn = vhost_scsi_get_fabric_wwn,
7861     .tpg_get_tag = vhost_scsi_get_tpgt,
7862     .tpg_check_demo_mode = vhost_scsi_check_true,
7863     diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c
7864     index f68920131a4a..e94932c69f54 100644
7865     --- a/drivers/video/backlight/lp855x_bl.c
7866     +++ b/drivers/video/backlight/lp855x_bl.c
7867     @@ -456,7 +456,7 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
7868     ret = regulator_enable(lp->enable);
7869     if (ret < 0) {
7870     dev_err(lp->dev, "failed to enable vddio: %d\n", ret);
7871     - return ret;
7872     + goto disable_supply;
7873     }
7874    
7875     /*
7876     @@ -471,24 +471,34 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
7877     ret = lp855x_configure(lp);
7878     if (ret) {
7879     dev_err(lp->dev, "device config err: %d", ret);
7880     - return ret;
7881     + goto disable_vddio;
7882     }
7883    
7884     ret = lp855x_backlight_register(lp);
7885     if (ret) {
7886     dev_err(lp->dev,
7887     "failed to register backlight. err: %d\n", ret);
7888     - return ret;
7889     + goto disable_vddio;
7890     }
7891    
7892     ret = sysfs_create_group(&lp->dev->kobj, &lp855x_attr_group);
7893     if (ret) {
7894     dev_err(lp->dev, "failed to register sysfs. err: %d\n", ret);
7895     - return ret;
7896     + goto disable_vddio;
7897     }
7898    
7899     backlight_update_status(lp->bl);
7900     +
7901     return 0;
7902     +
7903     +disable_vddio:
7904     + if (lp->enable)
7905     + regulator_disable(lp->enable);
7906     +disable_supply:
7907     + if (lp->supply)
7908     + regulator_disable(lp->supply);
7909     +
7910     + return ret;
7911     }
7912    
7913     static int lp855x_remove(struct i2c_client *cl)
7914     @@ -497,6 +507,8 @@ static int lp855x_remove(struct i2c_client *cl)
7915    
7916     lp->bl->props.brightness = 0;
7917     backlight_update_status(lp->bl);
7918     + if (lp->enable)
7919     + regulator_disable(lp->enable);
7920     if (lp->supply)
7921     regulator_disable(lp->supply);
7922     sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);
7923     diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
7924     index e92f38fcb7a4..1b9bcfed39e9 100644
7925     --- a/drivers/watchdog/da9062_wdt.c
7926     +++ b/drivers/watchdog/da9062_wdt.c
7927     @@ -55,11 +55,6 @@ static int da9062_wdt_update_timeout_register(struct da9062_watchdog *wdt,
7928     unsigned int regval)
7929     {
7930     struct da9062 *chip = wdt->hw;
7931     - int ret;
7932     -
7933     - ret = da9062_reset_watchdog_timer(wdt);
7934     - if (ret)
7935     - return ret;
7936    
7937     regmap_update_bits(chip->regmap,
7938     DA9062AA_CONTROL_D,
7939     diff --git a/fs/afs/dir.c b/fs/afs/dir.c
7940     index d1e1caa23c8b..3c486340b220 100644
7941     --- a/fs/afs/dir.c
7942     +++ b/fs/afs/dir.c
7943     @@ -658,7 +658,8 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
7944    
7945     cookie->ctx.actor = afs_lookup_filldir;
7946     cookie->name = dentry->d_name;
7947     - cookie->nr_fids = 1; /* slot 0 is saved for the fid we actually want */
7948     + cookie->nr_fids = 2; /* slot 0 is saved for the fid we actually want
7949     + * and slot 1 for the directory */
7950    
7951     read_seqlock_excl(&dvnode->cb_lock);
7952     dcbi = rcu_dereference_protected(dvnode->cb_interest,
7953     @@ -709,7 +710,11 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
7954     if (!cookie->inodes)
7955     goto out_s;
7956    
7957     - for (i = 1; i < cookie->nr_fids; i++) {
7958     + cookie->fids[1] = dvnode->fid;
7959     + cookie->statuses[1].cb_break = afs_calc_vnode_cb_break(dvnode);
7960     + cookie->inodes[1] = igrab(&dvnode->vfs_inode);
7961     +
7962     + for (i = 2; i < cookie->nr_fids; i++) {
7963     scb = &cookie->statuses[i];
7964    
7965     /* Find any inodes that already exist and get their
7966     diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c
7967     index 0a4fed9e706b..5c2729fc07e5 100644
7968     --- a/fs/afs/fsclient.c
7969     +++ b/fs/afs/fsclient.c
7970     @@ -56,16 +56,15 @@ static void xdr_dump_bad(const __be32 *bp)
7971     /*
7972     * decode an AFSFetchStatus block
7973     */
7974     -static int xdr_decode_AFSFetchStatus(const __be32 **_bp,
7975     - struct afs_call *call,
7976     - struct afs_status_cb *scb)
7977     +static void xdr_decode_AFSFetchStatus(const __be32 **_bp,
7978     + struct afs_call *call,
7979     + struct afs_status_cb *scb)
7980     {
7981     const struct afs_xdr_AFSFetchStatus *xdr = (const void *)*_bp;
7982     struct afs_file_status *status = &scb->status;
7983     bool inline_error = (call->operation_ID == afs_FS_InlineBulkStatus);
7984     u64 data_version, size;
7985     u32 type, abort_code;
7986     - int ret;
7987    
7988     abort_code = ntohl(xdr->abort_code);
7989    
7990     @@ -79,7 +78,7 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp,
7991     */
7992     status->abort_code = abort_code;
7993     scb->have_error = true;
7994     - goto good;
7995     + goto advance;
7996     }
7997    
7998     pr_warn("Unknown AFSFetchStatus version %u\n", ntohl(xdr->if_version));
7999     @@ -89,7 +88,7 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp,
8000     if (abort_code != 0 && inline_error) {
8001     status->abort_code = abort_code;
8002     scb->have_error = true;
8003     - goto good;
8004     + goto advance;
8005     }
8006    
8007     type = ntohl(xdr->type);
8008     @@ -125,15 +124,13 @@ static int xdr_decode_AFSFetchStatus(const __be32 **_bp,
8009     data_version |= (u64)ntohl(xdr->data_version_hi) << 32;
8010     status->data_version = data_version;
8011     scb->have_status = true;
8012     -good:
8013     - ret = 0;
8014     advance:
8015     *_bp = (const void *)*_bp + sizeof(*xdr);
8016     - return ret;
8017     + return;
8018    
8019     bad:
8020     xdr_dump_bad(*_bp);
8021     - ret = afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
8022     + afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
8023     goto advance;
8024     }
8025    
8026     @@ -254,9 +251,7 @@ static int afs_deliver_fs_fetch_status_vnode(struct afs_call *call)
8027    
8028     /* unmarshall the reply once we've received all of it */
8029     bp = call->buffer;
8030     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8031     - if (ret < 0)
8032     - return ret;
8033     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8034     xdr_decode_AFSCallBack(&bp, call, call->out_scb);
8035     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8036    
8037     @@ -419,9 +414,7 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call)
8038     return ret;
8039    
8040     bp = call->buffer;
8041     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8042     - if (ret < 0)
8043     - return ret;
8044     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8045     xdr_decode_AFSCallBack(&bp, call, call->out_scb);
8046     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8047    
8048     @@ -579,12 +572,8 @@ static int afs_deliver_fs_create_vnode(struct afs_call *call)
8049     /* unmarshall the reply once we've received all of it */
8050     bp = call->buffer;
8051     xdr_decode_AFSFid(&bp, call->out_fid);
8052     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8053     - if (ret < 0)
8054     - return ret;
8055     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8056     - if (ret < 0)
8057     - return ret;
8058     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8059     + xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8060     xdr_decode_AFSCallBack(&bp, call, call->out_scb);
8061     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8062    
8063     @@ -693,9 +682,7 @@ static int afs_deliver_fs_dir_status_and_vol(struct afs_call *call)
8064    
8065     /* unmarshall the reply once we've received all of it */
8066     bp = call->buffer;
8067     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8068     - if (ret < 0)
8069     - return ret;
8070     + xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8071     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8072    
8073     _leave(" = 0 [done]");
8074     @@ -786,12 +773,8 @@ static int afs_deliver_fs_link(struct afs_call *call)
8075    
8076     /* unmarshall the reply once we've received all of it */
8077     bp = call->buffer;
8078     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8079     - if (ret < 0)
8080     - return ret;
8081     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8082     - if (ret < 0)
8083     - return ret;
8084     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8085     + xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8086     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8087    
8088     _leave(" = 0 [done]");
8089     @@ -880,12 +863,8 @@ static int afs_deliver_fs_symlink(struct afs_call *call)
8090     /* unmarshall the reply once we've received all of it */
8091     bp = call->buffer;
8092     xdr_decode_AFSFid(&bp, call->out_fid);
8093     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8094     - if (ret < 0)
8095     - return ret;
8096     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8097     - if (ret < 0)
8098     - return ret;
8099     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8100     + xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8101     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8102    
8103     _leave(" = 0 [done]");
8104     @@ -988,16 +967,12 @@ static int afs_deliver_fs_rename(struct afs_call *call)
8105     if (ret < 0)
8106     return ret;
8107    
8108     + bp = call->buffer;
8109     /* If the two dirs are the same, we have two copies of the same status
8110     * report, so we just decode it twice.
8111     */
8112     - bp = call->buffer;
8113     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8114     - if (ret < 0)
8115     - return ret;
8116     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8117     - if (ret < 0)
8118     - return ret;
8119     + xdr_decode_AFSFetchStatus(&bp, call, call->out_dir_scb);
8120     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8121     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8122    
8123     _leave(" = 0 [done]");
8124     @@ -1105,9 +1080,7 @@ static int afs_deliver_fs_store_data(struct afs_call *call)
8125    
8126     /* unmarshall the reply once we've received all of it */
8127     bp = call->buffer;
8128     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8129     - if (ret < 0)
8130     - return ret;
8131     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8132     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8133    
8134     _leave(" = 0 [done]");
8135     @@ -1285,9 +1258,7 @@ static int afs_deliver_fs_store_status(struct afs_call *call)
8136    
8137     /* unmarshall the reply once we've received all of it */
8138     bp = call->buffer;
8139     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8140     - if (ret < 0)
8141     - return ret;
8142     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8143     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8144    
8145     _leave(" = 0 [done]");
8146     @@ -1956,9 +1927,7 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call)
8147    
8148     /* unmarshall the reply once we've received all of it */
8149     bp = call->buffer;
8150     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8151     - if (ret < 0)
8152     - return ret;
8153     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8154     xdr_decode_AFSCallBack(&bp, call, call->out_scb);
8155     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8156    
8157     @@ -2064,10 +2033,7 @@ static int afs_deliver_fs_inline_bulk_status(struct afs_call *call)
8158    
8159     bp = call->buffer;
8160     scb = &call->out_scb[call->count];
8161     - ret = xdr_decode_AFSFetchStatus(&bp, call, scb);
8162     - if (ret < 0)
8163     - return ret;
8164     -
8165     + xdr_decode_AFSFetchStatus(&bp, call, scb);
8166     call->count++;
8167     if (call->count < call->count2)
8168     goto more_counts;
8169     @@ -2245,9 +2211,7 @@ static int afs_deliver_fs_fetch_acl(struct afs_call *call)
8170     return ret;
8171    
8172     bp = call->buffer;
8173     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8174     - if (ret < 0)
8175     - return ret;
8176     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8177     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8178    
8179     call->unmarshall++;
8180     @@ -2328,9 +2292,7 @@ static int afs_deliver_fs_file_status_and_vol(struct afs_call *call)
8181     return ret;
8182    
8183     bp = call->buffer;
8184     - ret = xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8185     - if (ret < 0)
8186     - return ret;
8187     + xdr_decode_AFSFetchStatus(&bp, call, call->out_scb);
8188     xdr_decode_AFSVolSync(&bp, call->out_volsync);
8189    
8190     _leave(" = 0 [done]");
8191     diff --git a/fs/afs/inode.c b/fs/afs/inode.c
8192     index 46d2d7cb461d..a74e8e209454 100644
8193     --- a/fs/afs/inode.c
8194     +++ b/fs/afs/inode.c
8195     @@ -171,6 +171,7 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
8196     struct timespec64 t;
8197     umode_t mode;
8198     bool data_changed = false;
8199     + bool change_size = false;
8200    
8201     BUG_ON(test_bit(AFS_VNODE_UNSET, &vnode->flags));
8202    
8203     @@ -226,6 +227,7 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
8204     } else {
8205     set_bit(AFS_VNODE_ZAP_DATA, &vnode->flags);
8206     }
8207     + change_size = true;
8208     } else if (vnode->status.type == AFS_FTYPE_DIR) {
8209     /* Expected directory change is handled elsewhere so
8210     * that we can locally edit the directory and save on a
8211     @@ -233,11 +235,19 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
8212     */
8213     if (test_bit(AFS_VNODE_DIR_VALID, &vnode->flags))
8214     data_changed = false;
8215     + change_size = true;
8216     }
8217    
8218     if (data_changed) {
8219     inode_set_iversion_raw(&vnode->vfs_inode, status->data_version);
8220     - afs_set_i_size(vnode, status->size);
8221     +
8222     + /* Only update the size if the data version jumped. If the
8223     + * file is being modified locally, then we might have our own
8224     + * idea of what the size should be that's not the same as
8225     + * what's on the server.
8226     + */
8227     + if (change_size)
8228     + afs_set_i_size(vnode, status->size);
8229     }
8230     }
8231    
8232     diff --git a/fs/afs/internal.h b/fs/afs/internal.h
8233     index 485cc3b2aaa8..555ad7c9afcb 100644
8234     --- a/fs/afs/internal.h
8235     +++ b/fs/afs/internal.h
8236     @@ -161,6 +161,7 @@ struct afs_call {
8237     bool upgrade; /* T to request service upgrade */
8238     bool have_reply_time; /* T if have got reply_time */
8239     bool intr; /* T if interruptible */
8240     + bool unmarshalling_error; /* T if an unmarshalling error occurred */
8241     u16 service_id; /* Actual service ID (after upgrade) */
8242     unsigned int debug_id; /* Trace ID */
8243     u32 operation_ID; /* operation ID for an incoming call */
8244     diff --git a/fs/afs/misc.c b/fs/afs/misc.c
8245     index 52b19e9c1535..5334f1bd2bca 100644
8246     --- a/fs/afs/misc.c
8247     +++ b/fs/afs/misc.c
8248     @@ -83,6 +83,7 @@ int afs_abort_to_error(u32 abort_code)
8249     case UAENOLCK: return -ENOLCK;
8250     case UAENOTEMPTY: return -ENOTEMPTY;
8251     case UAELOOP: return -ELOOP;
8252     + case UAEOVERFLOW: return -EOVERFLOW;
8253     case UAENOMEDIUM: return -ENOMEDIUM;
8254     case UAEDQUOT: return -EDQUOT;
8255    
8256     diff --git a/fs/afs/proc.c b/fs/afs/proc.c
8257     index fba2ec3a3a9c..106b27011f6d 100644
8258     --- a/fs/afs/proc.c
8259     +++ b/fs/afs/proc.c
8260     @@ -562,6 +562,7 @@ void afs_put_sysnames(struct afs_sysnames *sysnames)
8261     if (sysnames->subs[i] != afs_init_sysname &&
8262     sysnames->subs[i] != sysnames->blank)
8263     kfree(sysnames->subs[i]);
8264     + kfree(sysnames);
8265     }
8266     }
8267    
8268     diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c
8269     index 52aa90fb4fbd..6adab30a8399 100644
8270     --- a/fs/afs/rxrpc.c
8271     +++ b/fs/afs/rxrpc.c
8272     @@ -540,6 +540,8 @@ static void afs_deliver_to_call(struct afs_call *call)
8273    
8274     ret = call->type->deliver(call);
8275     state = READ_ONCE(call->state);
8276     + if (ret == 0 && call->unmarshalling_error)
8277     + ret = -EBADMSG;
8278     switch (ret) {
8279     case 0:
8280     afs_queue_call_work(call);
8281     @@ -963,5 +965,7 @@ noinline int afs_protocol_error(struct afs_call *call, int error,
8282     enum afs_eproto_cause cause)
8283     {
8284     trace_afs_protocol_error(call, error, cause);
8285     + if (call)
8286     + call->unmarshalling_error = true;
8287     return error;
8288     }
8289     diff --git a/fs/afs/write.c b/fs/afs/write.c
8290     index cb76566763db..96b042af6248 100644
8291     --- a/fs/afs/write.c
8292     +++ b/fs/afs/write.c
8293     @@ -194,11 +194,11 @@ int afs_write_end(struct file *file, struct address_space *mapping,
8294    
8295     i_size = i_size_read(&vnode->vfs_inode);
8296     if (maybe_i_size > i_size) {
8297     - spin_lock(&vnode->wb_lock);
8298     + write_seqlock(&vnode->cb_lock);
8299     i_size = i_size_read(&vnode->vfs_inode);
8300     if (maybe_i_size > i_size)
8301     i_size_write(&vnode->vfs_inode, maybe_i_size);
8302     - spin_unlock(&vnode->wb_lock);
8303     + write_sequnlock(&vnode->cb_lock);
8304     }
8305    
8306     if (!PageUptodate(page)) {
8307     @@ -811,6 +811,7 @@ vm_fault_t afs_page_mkwrite(struct vm_fault *vmf)
8308     vmf->page->index, priv);
8309     SetPagePrivate(vmf->page);
8310     set_page_private(vmf->page, priv);
8311     + file_update_time(file);
8312    
8313     sb_end_pagefault(inode->i_sb);
8314     return VM_FAULT_LOCKED;
8315     diff --git a/fs/afs/yfsclient.c b/fs/afs/yfsclient.c
8316     index 8af7f093305d..d21cf61d86b9 100644
8317     --- a/fs/afs/yfsclient.c
8318     +++ b/fs/afs/yfsclient.c
8319     @@ -179,21 +179,20 @@ static void xdr_dump_bad(const __be32 *bp)
8320     /*
8321     * Decode a YFSFetchStatus block
8322     */
8323     -static int xdr_decode_YFSFetchStatus(const __be32 **_bp,
8324     - struct afs_call *call,
8325     - struct afs_status_cb *scb)
8326     +static void xdr_decode_YFSFetchStatus(const __be32 **_bp,
8327     + struct afs_call *call,
8328     + struct afs_status_cb *scb)
8329     {
8330     const struct yfs_xdr_YFSFetchStatus *xdr = (const void *)*_bp;
8331     struct afs_file_status *status = &scb->status;
8332     u32 type;
8333     - int ret;
8334    
8335     status->abort_code = ntohl(xdr->abort_code);
8336     if (status->abort_code != 0) {
8337     if (status->abort_code == VNOVNODE)
8338     status->nlink = 0;
8339     scb->have_error = true;
8340     - goto good;
8341     + goto advance;
8342     }
8343    
8344     type = ntohl(xdr->type);
8345     @@ -221,15 +220,13 @@ static int xdr_decode_YFSFetchStatus(const __be32 **_bp,
8346     status->size = xdr_to_u64(xdr->size);
8347     status->data_version = xdr_to_u64(xdr->data_version);
8348     scb->have_status = true;
8349     -good:
8350     - ret = 0;
8351     advance:
8352     *_bp += xdr_size(xdr);
8353     - return ret;
8354     + return;
8355    
8356     bad:
8357     xdr_dump_bad(*_bp);
8358     - ret = afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
8359     + afs_protocol_error(call, -EBADMSG, afs_eproto_bad_status);
8360     goto advance;
8361     }
8362    
8363     @@ -348,9 +345,7 @@ static int yfs_deliver_fs_status_cb_and_volsync(struct afs_call *call)
8364    
8365     /* unmarshall the reply once we've received all of it */
8366     bp = call->buffer;
8367     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8368     - if (ret < 0)
8369     - return ret;
8370     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8371     xdr_decode_YFSCallBack(&bp, call, call->out_scb);
8372     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8373    
8374     @@ -372,9 +367,7 @@ static int yfs_deliver_status_and_volsync(struct afs_call *call)
8375     return ret;
8376    
8377     bp = call->buffer;
8378     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8379     - if (ret < 0)
8380     - return ret;
8381     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8382     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8383    
8384     _leave(" = 0 [done]");
8385     @@ -534,9 +527,7 @@ static int yfs_deliver_fs_fetch_data64(struct afs_call *call)
8386     return ret;
8387    
8388     bp = call->buffer;
8389     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8390     - if (ret < 0)
8391     - return ret;
8392     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8393     xdr_decode_YFSCallBack(&bp, call, call->out_scb);
8394     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8395    
8396     @@ -645,12 +636,8 @@ static int yfs_deliver_fs_create_vnode(struct afs_call *call)
8397     /* unmarshall the reply once we've received all of it */
8398     bp = call->buffer;
8399     xdr_decode_YFSFid(&bp, call->out_fid);
8400     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8401     - if (ret < 0)
8402     - return ret;
8403     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8404     - if (ret < 0)
8405     - return ret;
8406     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8407     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8408     xdr_decode_YFSCallBack(&bp, call, call->out_scb);
8409     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8410    
8411     @@ -803,14 +790,9 @@ static int yfs_deliver_fs_remove_file2(struct afs_call *call)
8412     return ret;
8413    
8414     bp = call->buffer;
8415     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8416     - if (ret < 0)
8417     - return ret;
8418     -
8419     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8420     xdr_decode_YFSFid(&bp, &fid);
8421     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8422     - if (ret < 0)
8423     - return ret;
8424     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8425     /* Was deleted if vnode->status.abort_code == VNOVNODE. */
8426    
8427     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8428     @@ -890,10 +872,7 @@ static int yfs_deliver_fs_remove(struct afs_call *call)
8429     return ret;
8430    
8431     bp = call->buffer;
8432     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8433     - if (ret < 0)
8434     - return ret;
8435     -
8436     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8437     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8438     return 0;
8439     }
8440     @@ -975,12 +954,8 @@ static int yfs_deliver_fs_link(struct afs_call *call)
8441     return ret;
8442    
8443     bp = call->buffer;
8444     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8445     - if (ret < 0)
8446     - return ret;
8447     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8448     - if (ret < 0)
8449     - return ret;
8450     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8451     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8452     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8453     _leave(" = 0 [done]");
8454     return 0;
8455     @@ -1062,12 +1037,8 @@ static int yfs_deliver_fs_symlink(struct afs_call *call)
8456     /* unmarshall the reply once we've received all of it */
8457     bp = call->buffer;
8458     xdr_decode_YFSFid(&bp, call->out_fid);
8459     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8460     - if (ret < 0)
8461     - return ret;
8462     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8463     - if (ret < 0)
8464     - return ret;
8465     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8466     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8467     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8468    
8469     _leave(" = 0 [done]");
8470     @@ -1155,13 +1126,11 @@ static int yfs_deliver_fs_rename(struct afs_call *call)
8471     return ret;
8472    
8473     bp = call->buffer;
8474     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8475     - if (ret < 0)
8476     - return ret;
8477     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8478     - if (ret < 0)
8479     - return ret;
8480     -
8481     + /* If the two dirs are the same, we have two copies of the same status
8482     + * report, so we just decode it twice.
8483     + */
8484     + xdr_decode_YFSFetchStatus(&bp, call, call->out_dir_scb);
8485     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8486     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8487     _leave(" = 0 [done]");
8488     return 0;
8489     @@ -1846,9 +1815,7 @@ static int yfs_deliver_fs_inline_bulk_status(struct afs_call *call)
8490    
8491     bp = call->buffer;
8492     scb = &call->out_scb[call->count];
8493     - ret = xdr_decode_YFSFetchStatus(&bp, call, scb);
8494     - if (ret < 0)
8495     - return ret;
8496     + xdr_decode_YFSFetchStatus(&bp, call, scb);
8497    
8498     call->count++;
8499     if (call->count < call->count2)
8500     @@ -2068,9 +2035,7 @@ static int yfs_deliver_fs_fetch_opaque_acl(struct afs_call *call)
8501     bp = call->buffer;
8502     yacl->inherit_flag = ntohl(*bp++);
8503     yacl->num_cleaned = ntohl(*bp++);
8504     - ret = xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8505     - if (ret < 0)
8506     - return ret;
8507     + xdr_decode_YFSFetchStatus(&bp, call, call->out_scb);
8508     xdr_decode_YFSVolSync(&bp, call->out_volsync);
8509    
8510     call->unmarshall++;
8511     diff --git a/fs/block_dev.c b/fs/block_dev.c
8512     index 34644ce4b502..2dc9c73a4cb2 100644
8513     --- a/fs/block_dev.c
8514     +++ b/fs/block_dev.c
8515     @@ -1546,10 +1546,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
8516     */
8517     if (!for_part) {
8518     ret = devcgroup_inode_permission(bdev->bd_inode, perm);
8519     - if (ret != 0) {
8520     - bdput(bdev);
8521     + if (ret != 0)
8522     return ret;
8523     - }
8524     }
8525    
8526     restart:
8527     @@ -1618,8 +1616,10 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
8528     goto out_clear;
8529     BUG_ON(for_part);
8530     ret = __blkdev_get(whole, mode, 1);
8531     - if (ret)
8532     + if (ret) {
8533     + bdput(whole);
8534     goto out_clear;
8535     + }
8536     bdev->bd_contains = whole;
8537     bdev->bd_part = disk_get_part(disk, partno);
8538     if (!(disk->flags & GENHD_FL_UP) ||
8539     @@ -1669,7 +1669,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
8540     disk_unblock_events(disk);
8541     put_disk_and_module(disk);
8542     out:
8543     - bdput(bdev);
8544    
8545     return ret;
8546     }
8547     @@ -1736,6 +1735,9 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
8548     bdput(whole);
8549     }
8550    
8551     + if (res)
8552     + bdput(bdev);
8553     +
8554     return res;
8555     }
8556     EXPORT_SYMBOL(blkdev_get);
8557     diff --git a/fs/ceph/export.c b/fs/ceph/export.c
8558     index 79dc06881e78..e088843a7734 100644
8559     --- a/fs/ceph/export.c
8560     +++ b/fs/ceph/export.c
8561     @@ -172,9 +172,16 @@ struct inode *ceph_lookup_inode(struct super_block *sb, u64 ino)
8562     static struct dentry *__fh_to_dentry(struct super_block *sb, u64 ino)
8563     {
8564     struct inode *inode = __lookup_inode(sb, ino);
8565     + int err;
8566     +
8567     if (IS_ERR(inode))
8568     return ERR_CAST(inode);
8569     - if (inode->i_nlink == 0) {
8570     + /* We need LINK caps to reliably check i_nlink */
8571     + err = ceph_do_getattr(inode, CEPH_CAP_LINK_SHARED, false);
8572     + if (err)
8573     + return ERR_PTR(err);
8574     + /* -ESTALE if inode as been unlinked and no file is open */
8575     + if ((inode->i_nlink == 0) && (atomic_read(&inode->i_count) == 1)) {
8576     iput(inode);
8577     return ERR_PTR(-ESTALE);
8578     }
8579     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
8580     index 721b2560caa7..947c4aad5d6a 100644
8581     --- a/fs/cifs/connect.c
8582     +++ b/fs/cifs/connect.c
8583     @@ -614,26 +614,26 @@ cifs_reconnect(struct TCP_Server_Info *server)
8584     try_to_freeze();
8585    
8586     mutex_lock(&server->srv_mutex);
8587     +#ifdef CONFIG_CIFS_DFS_UPCALL
8588     /*
8589     * Set up next DFS target server (if any) for reconnect. If DFS
8590     * feature is disabled, then we will retry last server we
8591     * connected to before.
8592     */
8593     + reconn_inval_dfs_target(server, cifs_sb, &tgt_list, &tgt_it);
8594     +#endif
8595     + rc = reconn_set_ipaddr(server);
8596     + if (rc) {
8597     + cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n",
8598     + __func__, rc);
8599     + }
8600     +
8601     if (cifs_rdma_enabled(server))
8602     rc = smbd_reconnect(server);
8603     else
8604     rc = generic_ip_connect(server);
8605     if (rc) {
8606     cifs_dbg(FYI, "reconnect error %d\n", rc);
8607     -#ifdef CONFIG_CIFS_DFS_UPCALL
8608     - reconn_inval_dfs_target(server, cifs_sb, &tgt_list,
8609     - &tgt_it);
8610     -#endif
8611     - rc = reconn_set_ipaddr(server);
8612     - if (rc) {
8613     - cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n",
8614     - __func__, rc);
8615     - }
8616     mutex_unlock(&server->srv_mutex);
8617     msleep(3000);
8618     } else {
8619     diff --git a/fs/dlm/dlm_internal.h b/fs/dlm/dlm_internal.h
8620     index 416d9de35679..4311d01b02a8 100644
8621     --- a/fs/dlm/dlm_internal.h
8622     +++ b/fs/dlm/dlm_internal.h
8623     @@ -97,7 +97,6 @@ do { \
8624     __LINE__, __FILE__, #x, jiffies); \
8625     {do} \
8626     printk("\n"); \
8627     - BUG(); \
8628     panic("DLM: Record message above and reboot.\n"); \
8629     } \
8630     }
8631     diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
8632     index 2743c6f8a457..0589e914663f 100644
8633     --- a/fs/ext4/dir.c
8634     +++ b/fs/ext4/dir.c
8635     @@ -677,6 +677,7 @@ static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
8636     struct qstr qstr = {.name = str, .len = len };
8637     const struct dentry *parent = READ_ONCE(dentry->d_parent);
8638     const struct inode *inode = READ_ONCE(parent->d_inode);
8639     + char strbuf[DNAME_INLINE_LEN];
8640    
8641     if (!inode || !IS_CASEFOLDED(inode) ||
8642     !EXT4_SB(inode->i_sb)->s_encoding) {
8643     @@ -685,6 +686,21 @@ static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
8644     return memcmp(str, name->name, len);
8645     }
8646    
8647     + /*
8648     + * If the dentry name is stored in-line, then it may be concurrently
8649     + * modified by a rename. If this happens, the VFS will eventually retry
8650     + * the lookup, so it doesn't matter what ->d_compare() returns.
8651     + * However, it's unsafe to call utf8_strncasecmp() with an unstable
8652     + * string. Therefore, we have to copy the name into a temporary buffer.
8653     + */
8654     + if (len <= DNAME_INLINE_LEN - 1) {
8655     + memcpy(strbuf, str, len);
8656     + strbuf[len] = 0;
8657     + qstr.name = strbuf;
8658     + /* prevent compiler from optimizing out the temporary buffer */
8659     + barrier();
8660     + }
8661     +
8662     return ext4_ci_compare(inode, name, &qstr, false);
8663     }
8664    
8665     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
8666     index 9bd44588eb77..3193f0b4a02d 100644
8667     --- a/fs/ext4/extents.c
8668     +++ b/fs/ext4/extents.c
8669     @@ -3010,7 +3010,7 @@ again:
8670     * in use to avoid freeing it when removing blocks.
8671     */
8672     if (sbi->s_cluster_ratio > 1) {
8673     - pblk = ext4_ext_pblock(ex) + end - ee_block + 2;
8674     + pblk = ext4_ext_pblock(ex) + end - ee_block + 1;
8675     partial.pclu = EXT4_B2C(sbi, pblk);
8676     partial.state = nofree;
8677     }
8678     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
8679     index d3500eaf900e..f7c20bb20da3 100644
8680     --- a/fs/ext4/super.c
8681     +++ b/fs/ext4/super.c
8682     @@ -2034,6 +2034,16 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
8683     #endif
8684     } else if (token == Opt_dax) {
8685     #ifdef CONFIG_FS_DAX
8686     + if (is_remount && test_opt(sb, DAX)) {
8687     + ext4_msg(sb, KERN_ERR, "can't mount with "
8688     + "both data=journal and dax");
8689     + return -1;
8690     + }
8691     + if (is_remount && !(sbi->s_mount_opt & EXT4_MOUNT_DAX)) {
8692     + ext4_msg(sb, KERN_ERR, "can't change "
8693     + "dax mount option while remounting");
8694     + return -1;
8695     + }
8696     ext4_msg(sb, KERN_WARNING,
8697     "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
8698     sbi->s_mount_opt |= m->mount_opt;
8699     @@ -2294,6 +2304,7 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
8700     ext4_msg(sb, KERN_ERR, "revision level too high, "
8701     "forcing read-only mode");
8702     err = -EROFS;
8703     + goto done;
8704     }
8705     if (read_only)
8706     goto done;
8707     @@ -5366,12 +5377,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
8708     err = -EINVAL;
8709     goto restore_opts;
8710     }
8711     - if (test_opt(sb, DAX)) {
8712     - ext4_msg(sb, KERN_ERR, "can't mount with "
8713     - "both data=journal and dax");
8714     - err = -EINVAL;
8715     - goto restore_opts;
8716     - }
8717     } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) {
8718     if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
8719     ext4_msg(sb, KERN_ERR, "can't mount with "
8720     @@ -5387,12 +5392,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
8721     goto restore_opts;
8722     }
8723    
8724     - if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_DAX) {
8725     - ext4_msg(sb, KERN_WARNING, "warning: refusing change of "
8726     - "dax flag with busy inodes while remounting");
8727     - sbi->s_mount_opt ^= EXT4_MOUNT_DAX;
8728     - }
8729     -
8730     if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
8731     ext4_abort(sb, "Abort forced by user");
8732    
8733     diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
8734     index a28ffecc0f95..bbd07fe8a492 100644
8735     --- a/fs/f2fs/checkpoint.c
8736     +++ b/fs/f2fs/checkpoint.c
8737     @@ -892,8 +892,8 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
8738     int i;
8739     int err;
8740    
8741     - sbi->ckpt = f2fs_kzalloc(sbi, array_size(blk_size, cp_blks),
8742     - GFP_KERNEL);
8743     + sbi->ckpt = f2fs_kvzalloc(sbi, array_size(blk_size, cp_blks),
8744     + GFP_KERNEL);
8745     if (!sbi->ckpt)
8746     return -ENOMEM;
8747     /*
8748     diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
8749     index 84280ad3786c..e9af46dc06f7 100644
8750     --- a/fs/f2fs/dir.c
8751     +++ b/fs/f2fs/dir.c
8752     @@ -107,36 +107,28 @@ static struct f2fs_dir_entry *find_in_block(struct inode *dir,
8753     /*
8754     * Test whether a case-insensitive directory entry matches the filename
8755     * being searched for.
8756     - *
8757     - * Returns: 0 if the directory entry matches, more than 0 if it
8758     - * doesn't match or less than zero on error.
8759     */
8760     -int f2fs_ci_compare(const struct inode *parent, const struct qstr *name,
8761     - const struct qstr *entry, bool quick)
8762     +static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
8763     + const struct qstr *entry, bool quick)
8764     {
8765     - const struct f2fs_sb_info *sbi = F2FS_SB(parent->i_sb);
8766     + const struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
8767     const struct unicode_map *um = sbi->s_encoding;
8768     - int ret;
8769     + int res;
8770    
8771     if (quick)
8772     - ret = utf8_strncasecmp_folded(um, name, entry);
8773     + res = utf8_strncasecmp_folded(um, name, entry);
8774     else
8775     - ret = utf8_strncasecmp(um, name, entry);
8776     -
8777     - if (ret < 0) {
8778     - /* Handle invalid character sequence as either an error
8779     - * or as an opaque byte sequence.
8780     + res = utf8_strncasecmp(um, name, entry);
8781     + if (res < 0) {
8782     + /*
8783     + * In strict mode, ignore invalid names. In non-strict mode,
8784     + * fall back to treating them as opaque byte sequences.
8785     */
8786     - if (f2fs_has_strict_mode(sbi))
8787     - return -EINVAL;
8788     -
8789     - if (name->len != entry->len)
8790     - return 1;
8791     -
8792     - return !!memcmp(name->name, entry->name, name->len);
8793     + if (f2fs_has_strict_mode(sbi) || name->len != entry->len)
8794     + return false;
8795     + return !memcmp(name->name, entry->name, name->len);
8796     }
8797     -
8798     - return ret;
8799     + return res == 0;
8800     }
8801    
8802     static void f2fs_fname_setup_ci_filename(struct inode *dir,
8803     @@ -188,10 +180,10 @@ static inline bool f2fs_match_name(struct f2fs_dentry_ptr *d,
8804     if (cf_str->name) {
8805     struct qstr cf = {.name = cf_str->name,
8806     .len = cf_str->len};
8807     - return !f2fs_ci_compare(parent, &cf, &entry, true);
8808     + return f2fs_match_ci_name(parent, &cf, &entry, true);
8809     }
8810     - return !f2fs_ci_compare(parent, fname->usr_fname, &entry,
8811     - false);
8812     + return f2fs_match_ci_name(parent, fname->usr_fname, &entry,
8813     + false);
8814     }
8815     #endif
8816     if (fscrypt_match_name(fname, d->filename[bit_pos],
8817     @@ -1067,17 +1059,41 @@ const struct file_operations f2fs_dir_operations = {
8818     static int f2fs_d_compare(const struct dentry *dentry, unsigned int len,
8819     const char *str, const struct qstr *name)
8820     {
8821     - struct qstr qstr = {.name = str, .len = len };
8822     const struct dentry *parent = READ_ONCE(dentry->d_parent);
8823     - const struct inode *inode = READ_ONCE(parent->d_inode);
8824     + const struct inode *dir = READ_ONCE(parent->d_inode);
8825     + const struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
8826     + struct qstr entry = QSTR_INIT(str, len);
8827     + char strbuf[DNAME_INLINE_LEN];
8828     + int res;
8829     +
8830     + if (!dir || !IS_CASEFOLDED(dir))
8831     + goto fallback;
8832    
8833     - if (!inode || !IS_CASEFOLDED(inode)) {
8834     - if (len != name->len)
8835     - return -1;
8836     - return memcmp(str, name->name, len);
8837     + /*
8838     + * If the dentry name is stored in-line, then it may be concurrently
8839     + * modified by a rename. If this happens, the VFS will eventually retry
8840     + * the lookup, so it doesn't matter what ->d_compare() returns.
8841     + * However, it's unsafe to call utf8_strncasecmp() with an unstable
8842     + * string. Therefore, we have to copy the name into a temporary buffer.
8843     + */
8844     + if (len <= DNAME_INLINE_LEN - 1) {
8845     + memcpy(strbuf, str, len);
8846     + strbuf[len] = 0;
8847     + entry.name = strbuf;
8848     + /* prevent compiler from optimizing out the temporary buffer */
8849     + barrier();
8850     }
8851    
8852     - return f2fs_ci_compare(inode, name, &qstr, false);
8853     + res = utf8_strncasecmp(sbi->s_encoding, name, &entry);
8854     + if (res >= 0)
8855     + return res;
8856     +
8857     + if (f2fs_has_strict_mode(sbi))
8858     + return -EINVAL;
8859     +fallback:
8860     + if (len != name->len)
8861     + return 1;
8862     + return !!memcmp(str, name->name, len);
8863     }
8864    
8865     static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str)
8866     diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
8867     index a26ea1e6ba88..03693d6b1c10 100644
8868     --- a/fs/f2fs/f2fs.h
8869     +++ b/fs/f2fs/f2fs.h
8870     @@ -2790,18 +2790,12 @@ static inline bool f2fs_may_extent_tree(struct inode *inode)
8871     static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
8872     size_t size, gfp_t flags)
8873     {
8874     - void *ret;
8875     -
8876     if (time_to_inject(sbi, FAULT_KMALLOC)) {
8877     f2fs_show_injection_info(FAULT_KMALLOC);
8878     return NULL;
8879     }
8880    
8881     - ret = kmalloc(size, flags);
8882     - if (ret)
8883     - return ret;
8884     -
8885     - return kvmalloc(size, flags);
8886     + return kmalloc(size, flags);
8887     }
8888    
8889     static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi,
8890     @@ -2960,11 +2954,6 @@ int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
8891     bool hot, bool set);
8892     struct dentry *f2fs_get_parent(struct dentry *child);
8893    
8894     -extern int f2fs_ci_compare(const struct inode *parent,
8895     - const struct qstr *name,
8896     - const struct qstr *entry,
8897     - bool quick);
8898     -
8899     /*
8900     * dir.c
8901     */
8902     diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
8903     index c3a9da79ac99..5d94abe467a4 100644
8904     --- a/fs/f2fs/file.c
8905     +++ b/fs/f2fs/file.c
8906     @@ -2056,8 +2056,15 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
8907    
8908     if (in != F2FS_GOING_DOWN_FULLSYNC) {
8909     ret = mnt_want_write_file(filp);
8910     - if (ret)
8911     + if (ret) {
8912     + if (ret == -EROFS) {
8913     + ret = 0;
8914     + f2fs_stop_checkpoint(sbi, false);
8915     + set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
8916     + trace_f2fs_shutdown(sbi, in, ret);
8917     + }
8918     return ret;
8919     + }
8920     }
8921    
8922     switch (in) {
8923     diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
8924     index f14401a77d60..90a20bd12961 100644
8925     --- a/fs/f2fs/node.c
8926     +++ b/fs/f2fs/node.c
8927     @@ -2933,7 +2933,7 @@ static int __get_nat_bitmaps(struct f2fs_sb_info *sbi)
8928     return 0;
8929    
8930     nm_i->nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8);
8931     - nm_i->nat_bits = f2fs_kzalloc(sbi,
8932     + nm_i->nat_bits = f2fs_kvzalloc(sbi,
8933     nm_i->nat_bits_blocks << F2FS_BLKSIZE_BITS, GFP_KERNEL);
8934     if (!nm_i->nat_bits)
8935     return -ENOMEM;
8936     @@ -3066,9 +3066,9 @@ static int init_free_nid_cache(struct f2fs_sb_info *sbi)
8937     int i;
8938    
8939     nm_i->free_nid_bitmap =
8940     - f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *),
8941     - nm_i->nat_blocks),
8942     - GFP_KERNEL);
8943     + f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *),
8944     + nm_i->nat_blocks),
8945     + GFP_KERNEL);
8946     if (!nm_i->free_nid_bitmap)
8947     return -ENOMEM;
8948    
8949     diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
8950     index e36543c9f2b7..f4b882ee48dd 100644
8951     --- a/fs/f2fs/super.c
8952     +++ b/fs/f2fs/super.c
8953     @@ -1230,7 +1230,8 @@ static int f2fs_statfs_project(struct super_block *sb,
8954     limit >>= sb->s_blocksize_bits;
8955    
8956     if (limit && buf->f_blocks > limit) {
8957     - curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
8958     + curblock = (dquot->dq_dqb.dqb_curspace +
8959     + dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
8960     buf->f_blocks = limit;
8961     buf->f_bfree = buf->f_bavail =
8962     (buf->f_blocks > curblock) ?
8963     @@ -2900,7 +2901,7 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
8964     if (nr_sectors & (bdev_zone_sectors(bdev) - 1))
8965     FDEV(devi).nr_blkz++;
8966    
8967     - FDEV(devi).blkz_seq = f2fs_kzalloc(sbi,
8968     + FDEV(devi).blkz_seq = f2fs_kvzalloc(sbi,
8969     BITS_TO_LONGS(FDEV(devi).nr_blkz)
8970     * sizeof(unsigned long),
8971     GFP_KERNEL);
8972     diff --git a/fs/fuse/file.c b/fs/fuse/file.c
8973     index 3dd37a998ea9..66214707a945 100644
8974     --- a/fs/fuse/file.c
8975     +++ b/fs/fuse/file.c
8976     @@ -712,6 +712,7 @@ static ssize_t fuse_async_req_send(struct fuse_conn *fc,
8977     spin_unlock(&io->lock);
8978    
8979     ia->ap.args.end = fuse_aio_complete_req;
8980     + ia->ap.args.may_block = io->should_dirty;
8981     err = fuse_simple_background(fc, &ia->ap.args, GFP_KERNEL);
8982     if (err)
8983     fuse_aio_complete_req(fc, &ia->ap.args, err);
8984     @@ -3279,13 +3280,11 @@ static ssize_t __fuse_copy_file_range(struct file *file_in, loff_t pos_in,
8985     if (file_inode(file_in)->i_sb != file_inode(file_out)->i_sb)
8986     return -EXDEV;
8987    
8988     - if (fc->writeback_cache) {
8989     - inode_lock(inode_in);
8990     - err = fuse_writeback_range(inode_in, pos_in, pos_in + len);
8991     - inode_unlock(inode_in);
8992     - if (err)
8993     - return err;
8994     - }
8995     + inode_lock(inode_in);
8996     + err = fuse_writeback_range(inode_in, pos_in, pos_in + len - 1);
8997     + inode_unlock(inode_in);
8998     + if (err)
8999     + return err;
9000    
9001     inode_lock(inode_out);
9002    
9003     @@ -3293,11 +3292,27 @@ static ssize_t __fuse_copy_file_range(struct file *file_in, loff_t pos_in,
9004     if (err)
9005     goto out;
9006    
9007     - if (fc->writeback_cache) {
9008     - err = fuse_writeback_range(inode_out, pos_out, pos_out + len);
9009     - if (err)
9010     - goto out;
9011     - }
9012     + /*
9013     + * Write out dirty pages in the destination file before sending the COPY
9014     + * request to userspace. After the request is completed, truncate off
9015     + * pages (including partial ones) from the cache that have been copied,
9016     + * since these contain stale data at that point.
9017     + *
9018     + * This should be mostly correct, but if the COPY writes to partial
9019     + * pages (at the start or end) and the parts not covered by the COPY are
9020     + * written through a memory map after calling fuse_writeback_range(),
9021     + * then these partial page modifications will be lost on truncation.
9022     + *
9023     + * It is unlikely that someone would rely on such mixed style
9024     + * modifications. Yet this does give less guarantees than if the
9025     + * copying was performed with write(2).
9026     + *
9027     + * To fix this a i_mmap_sem style lock could be used to prevent new
9028     + * faults while the copy is ongoing.
9029     + */
9030     + err = fuse_writeback_range(inode_out, pos_out, pos_out + len - 1);
9031     + if (err)
9032     + goto out;
9033    
9034     if (is_unstable)
9035     set_bit(FUSE_I_SIZE_UNSTABLE, &fi_out->state);
9036     @@ -3318,6 +3333,10 @@ static ssize_t __fuse_copy_file_range(struct file *file_in, loff_t pos_in,
9037     if (err)
9038     goto out;
9039    
9040     + truncate_inode_pages_range(inode_out->i_mapping,
9041     + ALIGN_DOWN(pos_out, PAGE_SIZE),
9042     + ALIGN(pos_out + outarg.size, PAGE_SIZE) - 1);
9043     +
9044     if (fc->writeback_cache) {
9045     fuse_write_update_size(inode_out, pos_out + outarg.size);
9046     file_update_time(file_out);
9047     diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
9048     index ca344bf71404..d7cde216fc87 100644
9049     --- a/fs/fuse/fuse_i.h
9050     +++ b/fs/fuse/fuse_i.h
9051     @@ -249,6 +249,7 @@ struct fuse_args {
9052     bool out_argvar:1;
9053     bool page_zeroing:1;
9054     bool page_replace:1;
9055     + bool may_block:1;
9056     struct fuse_in_arg in_args[3];
9057     struct fuse_arg out_args[2];
9058     void (*end)(struct fuse_conn *fc, struct fuse_args *args, int error);
9059     diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
9060     index a5c86048b96e..7505f8102762 100644
9061     --- a/fs/fuse/virtio_fs.c
9062     +++ b/fs/fuse/virtio_fs.c
9063     @@ -55,6 +55,12 @@ struct virtio_fs_forget {
9064     struct list_head list;
9065     };
9066    
9067     +struct virtio_fs_req_work {
9068     + struct fuse_req *req;
9069     + struct virtio_fs_vq *fsvq;
9070     + struct work_struct done_work;
9071     +};
9072     +
9073     static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
9074     struct fuse_req *req, bool in_flight);
9075    
9076     @@ -443,19 +449,67 @@ static void copy_args_from_argbuf(struct fuse_args *args, struct fuse_req *req)
9077     }
9078    
9079     /* Work function for request completion */
9080     +static void virtio_fs_request_complete(struct fuse_req *req,
9081     + struct virtio_fs_vq *fsvq)
9082     +{
9083     + struct fuse_pqueue *fpq = &fsvq->fud->pq;
9084     + struct fuse_conn *fc = fsvq->fud->fc;
9085     + struct fuse_args *args;
9086     + struct fuse_args_pages *ap;
9087     + unsigned int len, i, thislen;
9088     + struct page *page;
9089     +
9090     + /*
9091     + * TODO verify that server properly follows FUSE protocol
9092     + * (oh.uniq, oh.len)
9093     + */
9094     + args = req->args;
9095     + copy_args_from_argbuf(args, req);
9096     +
9097     + if (args->out_pages && args->page_zeroing) {
9098     + len = args->out_args[args->out_numargs - 1].size;
9099     + ap = container_of(args, typeof(*ap), args);
9100     + for (i = 0; i < ap->num_pages; i++) {
9101     + thislen = ap->descs[i].length;
9102     + if (len < thislen) {
9103     + WARN_ON(ap->descs[i].offset);
9104     + page = ap->pages[i];
9105     + zero_user_segment(page, len, thislen);
9106     + len = 0;
9107     + } else {
9108     + len -= thislen;
9109     + }
9110     + }
9111     + }
9112     +
9113     + spin_lock(&fpq->lock);
9114     + clear_bit(FR_SENT, &req->flags);
9115     + spin_unlock(&fpq->lock);
9116     +
9117     + fuse_request_end(fc, req);
9118     + spin_lock(&fsvq->lock);
9119     + dec_in_flight_req(fsvq);
9120     + spin_unlock(&fsvq->lock);
9121     +}
9122     +
9123     +static void virtio_fs_complete_req_work(struct work_struct *work)
9124     +{
9125     + struct virtio_fs_req_work *w =
9126     + container_of(work, typeof(*w), done_work);
9127     +
9128     + virtio_fs_request_complete(w->req, w->fsvq);
9129     + kfree(w);
9130     +}
9131     +
9132     static void virtio_fs_requests_done_work(struct work_struct *work)
9133     {
9134     struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
9135     done_work);
9136     struct fuse_pqueue *fpq = &fsvq->fud->pq;
9137     - struct fuse_conn *fc = fsvq->fud->fc;
9138     struct virtqueue *vq = fsvq->vq;
9139     struct fuse_req *req;
9140     - struct fuse_args_pages *ap;
9141     struct fuse_req *next;
9142     - struct fuse_args *args;
9143     - unsigned int len, i, thislen;
9144     - struct page *page;
9145     + unsigned int len;
9146     LIST_HEAD(reqs);
9147    
9148     /* Collect completed requests off the virtqueue */
9149     @@ -473,38 +527,20 @@ static void virtio_fs_requests_done_work(struct work_struct *work)
9150    
9151     /* End requests */
9152     list_for_each_entry_safe(req, next, &reqs, list) {
9153     - /*
9154     - * TODO verify that server properly follows FUSE protocol
9155     - * (oh.uniq, oh.len)
9156     - */
9157     - args = req->args;
9158     - copy_args_from_argbuf(args, req);
9159     -
9160     - if (args->out_pages && args->page_zeroing) {
9161     - len = args->out_args[args->out_numargs - 1].size;
9162     - ap = container_of(args, typeof(*ap), args);
9163     - for (i = 0; i < ap->num_pages; i++) {
9164     - thislen = ap->descs[i].length;
9165     - if (len < thislen) {
9166     - WARN_ON(ap->descs[i].offset);
9167     - page = ap->pages[i];
9168     - zero_user_segment(page, len, thislen);
9169     - len = 0;
9170     - } else {
9171     - len -= thislen;
9172     - }
9173     - }
9174     - }
9175     -
9176     - spin_lock(&fpq->lock);
9177     - clear_bit(FR_SENT, &req->flags);
9178     list_del_init(&req->list);
9179     - spin_unlock(&fpq->lock);
9180    
9181     - fuse_request_end(fc, req);
9182     - spin_lock(&fsvq->lock);
9183     - dec_in_flight_req(fsvq);
9184     - spin_unlock(&fsvq->lock);
9185     + /* blocking async request completes in a worker context */
9186     + if (req->args->may_block) {
9187     + struct virtio_fs_req_work *w;
9188     +
9189     + w = kzalloc(sizeof(*w), GFP_NOFS | __GFP_NOFAIL);
9190     + INIT_WORK(&w->done_work, virtio_fs_complete_req_work);
9191     + w->fsvq = fsvq;
9192     + w->req = req;
9193     + schedule_work(&w->done_work);
9194     + } else {
9195     + virtio_fs_request_complete(req, fsvq);
9196     + }
9197     }
9198     }
9199    
9200     diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
9201     index 110e5c4db819..a4b6a49462a4 100644
9202     --- a/fs/gfs2/log.c
9203     +++ b/fs/gfs2/log.c
9204     @@ -881,8 +881,10 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
9205     * @new: New transaction to be merged
9206     */
9207    
9208     -static void gfs2_merge_trans(struct gfs2_trans *old, struct gfs2_trans *new)
9209     +static void gfs2_merge_trans(struct gfs2_sbd *sdp, struct gfs2_trans *new)
9210     {
9211     + struct gfs2_trans *old = sdp->sd_log_tr;
9212     +
9213     WARN_ON_ONCE(!test_bit(TR_ATTACHED, &old->tr_flags));
9214    
9215     old->tr_num_buf_new += new->tr_num_buf_new;
9216     @@ -893,6 +895,11 @@ static void gfs2_merge_trans(struct gfs2_trans *old, struct gfs2_trans *new)
9217    
9218     list_splice_tail_init(&new->tr_databuf, &old->tr_databuf);
9219     list_splice_tail_init(&new->tr_buf, &old->tr_buf);
9220     +
9221     + spin_lock(&sdp->sd_ail_lock);
9222     + list_splice_tail_init(&new->tr_ail1_list, &old->tr_ail1_list);
9223     + list_splice_tail_init(&new->tr_ail2_list, &old->tr_ail2_list);
9224     + spin_unlock(&sdp->sd_ail_lock);
9225     }
9226    
9227     static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
9228     @@ -904,7 +911,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
9229     gfs2_log_lock(sdp);
9230    
9231     if (sdp->sd_log_tr) {
9232     - gfs2_merge_trans(sdp->sd_log_tr, tr);
9233     + gfs2_merge_trans(sdp, tr);
9234     } else if (tr->tr_num_buf_new || tr->tr_num_databuf_new) {
9235     gfs2_assert_withdraw(sdp, test_bit(TR_ALLOCED, &tr->tr_flags));
9236     sdp->sd_log_tr = tr;
9237     diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
9238     index 18daf494abab..c26c864590cc 100644
9239     --- a/fs/gfs2/ops_fstype.c
9240     +++ b/fs/gfs2/ops_fstype.c
9241     @@ -911,7 +911,7 @@ fail:
9242     }
9243    
9244     static const match_table_t nolock_tokens = {
9245     - { Opt_jid, "jid=%d\n", },
9246     + { Opt_jid, "jid=%d", },
9247     { Opt_err, NULL },
9248     };
9249    
9250     diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
9251     index c1ce2805c563..fa58835668a6 100644
9252     --- a/fs/jbd2/journal.c
9253     +++ b/fs/jbd2/journal.c
9254     @@ -96,7 +96,6 @@ EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
9255     EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
9256     EXPORT_SYMBOL(jbd2_inode_cache);
9257    
9258     -static void __journal_abort_soft (journal_t *journal, int errno);
9259     static int jbd2_journal_create_slab(size_t slab_size);
9260    
9261     #ifdef CONFIG_JBD2_DEBUG
9262     @@ -805,7 +804,7 @@ int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
9263     "at offset %lu on %s\n",
9264     __func__, blocknr, journal->j_devname);
9265     err = -EIO;
9266     - __journal_abort_soft(journal, err);
9267     + jbd2_journal_abort(journal, err);
9268     }
9269     } else {
9270     *retp = blocknr; /* +journal->j_blk_offset */
9271     @@ -2070,64 +2069,6 @@ int jbd2_journal_wipe(journal_t *journal, int write)
9272     return err;
9273     }
9274    
9275     -/*
9276     - * Journal abort has very specific semantics, which we describe
9277     - * for journal abort.
9278     - *
9279     - * Two internal functions, which provide abort to the jbd layer
9280     - * itself are here.
9281     - */
9282     -
9283     -/*
9284     - * Quick version for internal journal use (doesn't lock the journal).
9285     - * Aborts hard --- we mark the abort as occurred, but do _nothing_ else,
9286     - * and don't attempt to make any other journal updates.
9287     - */
9288     -void __jbd2_journal_abort_hard(journal_t *journal)
9289     -{
9290     - transaction_t *transaction;
9291     -
9292     - if (journal->j_flags & JBD2_ABORT)
9293     - return;
9294     -
9295     - printk(KERN_ERR "Aborting journal on device %s.\n",
9296     - journal->j_devname);
9297     -
9298     - write_lock(&journal->j_state_lock);
9299     - journal->j_flags |= JBD2_ABORT;
9300     - transaction = journal->j_running_transaction;
9301     - if (transaction)
9302     - __jbd2_log_start_commit(journal, transaction->t_tid);
9303     - write_unlock(&journal->j_state_lock);
9304     -}
9305     -
9306     -/* Soft abort: record the abort error status in the journal superblock,
9307     - * but don't do any other IO. */
9308     -static void __journal_abort_soft (journal_t *journal, int errno)
9309     -{
9310     - int old_errno;
9311     -
9312     - write_lock(&journal->j_state_lock);
9313     - old_errno = journal->j_errno;
9314     - if (!journal->j_errno || errno == -ESHUTDOWN)
9315     - journal->j_errno = errno;
9316     -
9317     - if (journal->j_flags & JBD2_ABORT) {
9318     - write_unlock(&journal->j_state_lock);
9319     - if (old_errno != -ESHUTDOWN && errno == -ESHUTDOWN)
9320     - jbd2_journal_update_sb_errno(journal);
9321     - return;
9322     - }
9323     - write_unlock(&journal->j_state_lock);
9324     -
9325     - __jbd2_journal_abort_hard(journal);
9326     -
9327     - jbd2_journal_update_sb_errno(journal);
9328     - write_lock(&journal->j_state_lock);
9329     - journal->j_flags |= JBD2_REC_ERR;
9330     - write_unlock(&journal->j_state_lock);
9331     -}
9332     -
9333     /**
9334     * void jbd2_journal_abort () - Shutdown the journal immediately.
9335     * @journal: the journal to shutdown.
9336     @@ -2171,7 +2112,47 @@ static void __journal_abort_soft (journal_t *journal, int errno)
9337    
9338     void jbd2_journal_abort(journal_t *journal, int errno)
9339     {
9340     - __journal_abort_soft(journal, errno);
9341     + transaction_t *transaction;
9342     +
9343     + /*
9344     + * ESHUTDOWN always takes precedence because a file system check
9345     + * caused by any other journal abort error is not required after
9346     + * a shutdown triggered.
9347     + */
9348     + write_lock(&journal->j_state_lock);
9349     + if (journal->j_flags & JBD2_ABORT) {
9350     + int old_errno = journal->j_errno;
9351     +
9352     + write_unlock(&journal->j_state_lock);
9353     + if (old_errno != -ESHUTDOWN && errno == -ESHUTDOWN) {
9354     + journal->j_errno = errno;
9355     + jbd2_journal_update_sb_errno(journal);
9356     + }
9357     + return;
9358     + }
9359     +
9360     + /*
9361     + * Mark the abort as occurred and start current running transaction
9362     + * to release all journaled buffer.
9363     + */
9364     + pr_err("Aborting journal on device %s.\n", journal->j_devname);
9365     +
9366     + journal->j_flags |= JBD2_ABORT;
9367     + journal->j_errno = errno;
9368     + transaction = journal->j_running_transaction;
9369     + if (transaction)
9370     + __jbd2_log_start_commit(journal, transaction->t_tid);
9371     + write_unlock(&journal->j_state_lock);
9372     +
9373     + /*
9374     + * Record errno to the journal super block, so that fsck and jbd2
9375     + * layer could realise that a filesystem check is needed.
9376     + */
9377     + jbd2_journal_update_sb_errno(journal);
9378     +
9379     + write_lock(&journal->j_state_lock);
9380     + journal->j_flags |= JBD2_REC_ERR;
9381     + write_unlock(&journal->j_state_lock);
9382     }
9383    
9384     /**
9385     diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
9386     index 3802c88e8372..6de41f741280 100644
9387     --- a/fs/nfs/inode.c
9388     +++ b/fs/nfs/inode.c
9389     @@ -826,6 +826,8 @@ int nfs_getattr(const struct path *path, struct kstat *stat,
9390     do_update |= cache_validity & NFS_INO_INVALID_ATIME;
9391     if (request_mask & (STATX_CTIME|STATX_MTIME))
9392     do_update |= cache_validity & NFS_INO_REVAL_PAGECACHE;
9393     + if (request_mask & STATX_BLOCKS)
9394     + do_update |= cache_validity & NFS_INO_INVALID_BLOCKS;
9395     if (do_update) {
9396     /* Update the attribute cache */
9397     if (!(server->flags & NFS_MOUNT_NOAC))
9398     @@ -1750,7 +1752,8 @@ out_noforce:
9399     status = nfs_post_op_update_inode_locked(inode, fattr,
9400     NFS_INO_INVALID_CHANGE
9401     | NFS_INO_INVALID_CTIME
9402     - | NFS_INO_INVALID_MTIME);
9403     + | NFS_INO_INVALID_MTIME
9404     + | NFS_INO_INVALID_BLOCKS);
9405     return status;
9406     }
9407    
9408     @@ -1857,7 +1860,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
9409     nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
9410     | NFS_INO_INVALID_ATIME
9411     | NFS_INO_REVAL_FORCED
9412     - | NFS_INO_REVAL_PAGECACHE);
9413     + | NFS_INO_REVAL_PAGECACHE
9414     + | NFS_INO_INVALID_BLOCKS);
9415    
9416     /* Do atomic weak cache consistency updates */
9417     nfs_wcc_update_inode(inode, fattr);
9418     @@ -2019,8 +2023,12 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
9419     inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
9420     } else if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
9421     inode->i_blocks = fattr->du.nfs2.blocks;
9422     - else
9423     + else {
9424     + nfsi->cache_validity |= save_cache_validity &
9425     + (NFS_INO_INVALID_BLOCKS
9426     + | NFS_INO_REVAL_FORCED);
9427     cache_revalidated = false;
9428     + }
9429    
9430     /* Update attrtimeo value if we're out of the unstable period */
9431     if (attr_changed) {
9432     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
9433     index e257653f25ab..33c17c69aeaa 100644
9434     --- a/fs/nfs/nfs4proc.c
9435     +++ b/fs/nfs/nfs4proc.c
9436     @@ -7870,7 +7870,7 @@ nfs4_bind_one_conn_to_session_done(struct rpc_task *task, void *calldata)
9437     }
9438    
9439     static const struct rpc_call_ops nfs4_bind_one_conn_to_session_ops = {
9440     - .rpc_call_done = &nfs4_bind_one_conn_to_session_done,
9441     + .rpc_call_done = nfs4_bind_one_conn_to_session_done,
9442     };
9443    
9444     /*
9445     diff --git a/fs/nfsd/cache.h b/fs/nfsd/cache.h
9446     index 10ec5ecdf117..65c331f75e9c 100644
9447     --- a/fs/nfsd/cache.h
9448     +++ b/fs/nfsd/cache.h
9449     @@ -78,6 +78,8 @@ enum {
9450     /* Checksum this amount of the request */
9451     #define RC_CSUMLEN (256U)
9452    
9453     +int nfsd_drc_slab_create(void);
9454     +void nfsd_drc_slab_free(void);
9455     int nfsd_reply_cache_init(struct nfsd_net *);
9456     void nfsd_reply_cache_shutdown(struct nfsd_net *);
9457     int nfsd_cache_lookup(struct svc_rqst *);
9458     diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h
9459     index 9a4ef815fb8c..ed53e206a299 100644
9460     --- a/fs/nfsd/netns.h
9461     +++ b/fs/nfsd/netns.h
9462     @@ -139,7 +139,6 @@ struct nfsd_net {
9463     * Duplicate reply cache
9464     */
9465     struct nfsd_drc_bucket *drc_hashtbl;
9466     - struct kmem_cache *drc_slab;
9467    
9468     /* max number of entries allowed in the cache */
9469     unsigned int max_drc_entries;
9470     diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
9471     index afca3287184b..efe55d101b0e 100644
9472     --- a/fs/nfsd/nfs4callback.c
9473     +++ b/fs/nfsd/nfs4callback.c
9474     @@ -1230,6 +1230,8 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb)
9475     err = setup_callback_client(clp, &conn, ses);
9476     if (err) {
9477     nfsd4_mark_cb_down(clp, err);
9478     + if (c)
9479     + svc_xprt_put(c->cn_xprt);
9480     return;
9481     }
9482     }
9483     diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
9484     index 96352ab7bd81..4a258065188e 100644
9485     --- a/fs/nfsd/nfscache.c
9486     +++ b/fs/nfsd/nfscache.c
9487     @@ -36,6 +36,8 @@ struct nfsd_drc_bucket {
9488     spinlock_t cache_lock;
9489     };
9490    
9491     +static struct kmem_cache *drc_slab;
9492     +
9493     static int nfsd_cache_append(struct svc_rqst *rqstp, struct kvec *vec);
9494     static unsigned long nfsd_reply_cache_count(struct shrinker *shrink,
9495     struct shrink_control *sc);
9496     @@ -95,7 +97,7 @@ nfsd_reply_cache_alloc(struct svc_rqst *rqstp, __wsum csum,
9497     {
9498     struct svc_cacherep *rp;
9499    
9500     - rp = kmem_cache_alloc(nn->drc_slab, GFP_KERNEL);
9501     + rp = kmem_cache_alloc(drc_slab, GFP_KERNEL);
9502     if (rp) {
9503     rp->c_state = RC_UNUSED;
9504     rp->c_type = RC_NOCACHE;
9505     @@ -129,7 +131,7 @@ nfsd_reply_cache_free_locked(struct nfsd_drc_bucket *b, struct svc_cacherep *rp,
9506     atomic_dec(&nn->num_drc_entries);
9507     nn->drc_mem_usage -= sizeof(*rp);
9508     }
9509     - kmem_cache_free(nn->drc_slab, rp);
9510     + kmem_cache_free(drc_slab, rp);
9511     }
9512    
9513     static void
9514     @@ -141,6 +143,18 @@ nfsd_reply_cache_free(struct nfsd_drc_bucket *b, struct svc_cacherep *rp,
9515     spin_unlock(&b->cache_lock);
9516     }
9517    
9518     +int nfsd_drc_slab_create(void)
9519     +{
9520     + drc_slab = kmem_cache_create("nfsd_drc",
9521     + sizeof(struct svc_cacherep), 0, 0, NULL);
9522     + return drc_slab ? 0: -ENOMEM;
9523     +}
9524     +
9525     +void nfsd_drc_slab_free(void)
9526     +{
9527     + kmem_cache_destroy(drc_slab);
9528     +}
9529     +
9530     int nfsd_reply_cache_init(struct nfsd_net *nn)
9531     {
9532     unsigned int hashsize;
9533     @@ -159,18 +173,13 @@ int nfsd_reply_cache_init(struct nfsd_net *nn)
9534     if (status)
9535     goto out_nomem;
9536    
9537     - nn->drc_slab = kmem_cache_create("nfsd_drc",
9538     - sizeof(struct svc_cacherep), 0, 0, NULL);
9539     - if (!nn->drc_slab)
9540     - goto out_shrinker;
9541     -
9542     nn->drc_hashtbl = kcalloc(hashsize,
9543     sizeof(*nn->drc_hashtbl), GFP_KERNEL);
9544     if (!nn->drc_hashtbl) {
9545     nn->drc_hashtbl = vzalloc(array_size(hashsize,
9546     sizeof(*nn->drc_hashtbl)));
9547     if (!nn->drc_hashtbl)
9548     - goto out_slab;
9549     + goto out_shrinker;
9550     }
9551    
9552     for (i = 0; i < hashsize; i++) {
9553     @@ -180,8 +189,6 @@ int nfsd_reply_cache_init(struct nfsd_net *nn)
9554     nn->drc_hashsize = hashsize;
9555    
9556     return 0;
9557     -out_slab:
9558     - kmem_cache_destroy(nn->drc_slab);
9559     out_shrinker:
9560     unregister_shrinker(&nn->nfsd_reply_cache_shrinker);
9561     out_nomem:
9562     @@ -209,8 +216,6 @@ void nfsd_reply_cache_shutdown(struct nfsd_net *nn)
9563     nn->drc_hashtbl = NULL;
9564     nn->drc_hashsize = 0;
9565    
9566     - kmem_cache_destroy(nn->drc_slab);
9567     - nn->drc_slab = NULL;
9568     }
9569    
9570     /*
9571     @@ -464,8 +469,7 @@ found_entry:
9572     rtn = RC_REPLY;
9573     break;
9574     default:
9575     - printk(KERN_WARNING "nfsd: bad repcache type %d\n", rp->c_type);
9576     - nfsd_reply_cache_free_locked(b, rp, nn);
9577     + WARN_ONCE(1, "nfsd: bad repcache type %d\n", rp->c_type);
9578     }
9579    
9580     goto out;
9581     diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
9582     index d77c5261c03c..159feae6af8b 100644
9583     --- a/fs/nfsd/nfsctl.c
9584     +++ b/fs/nfsd/nfsctl.c
9585     @@ -1534,6 +1534,9 @@ static int __init init_nfsd(void)
9586     goto out_free_slabs;
9587     nfsd_fault_inject_init(); /* nfsd fault injection controls */
9588     nfsd_stat_init(); /* Statistics */
9589     + retval = nfsd_drc_slab_create();
9590     + if (retval)
9591     + goto out_free_stat;
9592     nfsd_lockd_init(); /* lockd->nfsd callbacks */
9593     retval = create_proc_exports_entry();
9594     if (retval)
9595     @@ -1547,6 +1550,8 @@ out_free_all:
9596     remove_proc_entry("fs/nfs", NULL);
9597     out_free_lockd:
9598     nfsd_lockd_shutdown();
9599     + nfsd_drc_slab_free();
9600     +out_free_stat:
9601     nfsd_stat_shutdown();
9602     nfsd_fault_inject_cleanup();
9603     nfsd4_exit_pnfs();
9604     @@ -1561,6 +1566,7 @@ out_unregister_pernet:
9605    
9606     static void __exit exit_nfsd(void)
9607     {
9608     + nfsd_drc_slab_free();
9609     remove_proc_entry("fs/nfs/exports", NULL);
9610     remove_proc_entry("fs/nfs", NULL);
9611     nfsd_stat_shutdown();
9612     diff --git a/include/linux/bitops.h b/include/linux/bitops.h
9613     index c94a9ff9f082..4f0e62cbf2ff 100644
9614     --- a/include/linux/bitops.h
9615     +++ b/include/linux/bitops.h
9616     @@ -57,7 +57,7 @@ static inline int get_bitmask_order(unsigned int count)
9617    
9618     static __always_inline unsigned long hweight_long(unsigned long w)
9619     {
9620     - return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
9621     + return sizeof(w) == 4 ? hweight32(w) : hweight64((__u64)w);
9622     }
9623    
9624     /**
9625     diff --git a/include/linux/genhd.h b/include/linux/genhd.h
9626     index 8b5330dd5ac0..62a2ec9f17df 100644
9627     --- a/include/linux/genhd.h
9628     +++ b/include/linux/genhd.h
9629     @@ -750,9 +750,11 @@ static inline sector_t part_nr_sects_read(struct hd_struct *part)
9630     static inline void part_nr_sects_write(struct hd_struct *part, sector_t size)
9631     {
9632     #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
9633     + preempt_disable();
9634     write_seqcount_begin(&part->nr_sects_seq);
9635     part->nr_sects = size;
9636     write_seqcount_end(&part->nr_sects_seq);
9637     + preempt_enable();
9638     #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
9639     preempt_disable();
9640     part->nr_sects = size;
9641     diff --git a/include/linux/ioport.h b/include/linux/ioport.h
9642     index 7bddddfc76d6..fdc201d61460 100644
9643     --- a/include/linux/ioport.h
9644     +++ b/include/linux/ioport.h
9645     @@ -300,5 +300,11 @@ struct resource *devm_request_free_mem_region(struct device *dev,
9646     struct resource *request_free_mem_region(struct resource *base,
9647     unsigned long size, const char *name);
9648    
9649     +#ifdef CONFIG_IO_STRICT_DEVMEM
9650     +void revoke_devmem(struct resource *res);
9651     +#else
9652     +static inline void revoke_devmem(struct resource *res) { };
9653     +#endif
9654     +
9655     #endif /* __ASSEMBLY__ */
9656     #endif /* _LINUX_IOPORT_H */
9657     diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
9658     index 10e6049c0ba9..b0e97e5de8ca 100644
9659     --- a/include/linux/jbd2.h
9660     +++ b/include/linux/jbd2.h
9661     @@ -1402,7 +1402,6 @@ extern int jbd2_journal_skip_recovery (journal_t *);
9662     extern void jbd2_journal_update_sb_errno(journal_t *);
9663     extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
9664     unsigned long, int);
9665     -extern void __jbd2_journal_abort_hard (journal_t *);
9666     extern void jbd2_journal_abort (journal_t *, int);
9667     extern int jbd2_journal_errno (journal_t *);
9668     extern void jbd2_journal_ack_err (journal_t *);
9669     diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
9670     index 04bdaf01112c..645fd401c856 100644
9671     --- a/include/linux/kprobes.h
9672     +++ b/include/linux/kprobes.h
9673     @@ -350,6 +350,10 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void)
9674     return this_cpu_ptr(&kprobe_ctlblk);
9675     }
9676    
9677     +extern struct kprobe kprobe_busy;
9678     +void kprobe_busy_begin(void);
9679     +void kprobe_busy_end(void);
9680     +
9681     kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset);
9682     int register_kprobe(struct kprobe *p);
9683     void unregister_kprobe(struct kprobe *p);
9684     diff --git a/include/linux/libata.h b/include/linux/libata.h
9685     index c44e4cfbcb16..b9970f5bab67 100644
9686     --- a/include/linux/libata.h
9687     +++ b/include/linux/libata.h
9688     @@ -22,6 +22,7 @@
9689     #include <linux/acpi.h>
9690     #include <linux/cdrom.h>
9691     #include <linux/sched.h>
9692     +#include <linux/async.h>
9693    
9694     /*
9695     * Define if arch has non-standard setup. This is a _PCI_ standard
9696     @@ -870,6 +871,8 @@ struct ata_port {
9697     struct timer_list fastdrain_timer;
9698     unsigned long fastdrain_cnt;
9699    
9700     + async_cookie_t cookie;
9701     +
9702     int em_message_type;
9703     void *private_data;
9704    
9705     diff --git a/include/linux/mfd/stmfx.h b/include/linux/mfd/stmfx.h
9706     index 3c67983678ec..744dce63946e 100644
9707     --- a/include/linux/mfd/stmfx.h
9708     +++ b/include/linux/mfd/stmfx.h
9709     @@ -109,6 +109,7 @@ struct stmfx {
9710     struct device *dev;
9711     struct regmap *map;
9712     struct regulator *vdd;
9713     + int irq;
9714     struct irq_domain *irq_domain;
9715     struct mutex lock; /* IRQ bus lock */
9716     u8 irq_src;
9717     diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
9718     index 570a60c2f4f4..ad09c0cc5464 100644
9719     --- a/include/linux/nfs_fs.h
9720     +++ b/include/linux/nfs_fs.h
9721     @@ -225,6 +225,7 @@ struct nfs4_copy_state {
9722     #define NFS_INO_INVALID_OTHER BIT(12) /* other attrs are invalid */
9723     #define NFS_INO_DATA_INVAL_DEFER \
9724     BIT(13) /* Deferred cache invalidation */
9725     +#define NFS_INO_INVALID_BLOCKS BIT(14) /* cached blocks are invalid */
9726    
9727     #define NFS_INO_INVALID_ATTR (NFS_INO_INVALID_CHANGE \
9728     | NFS_INO_INVALID_CTIME \
9729     diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
9730     index 8675e145ea8b..2040696d75b6 100644
9731     --- a/include/linux/usb/composite.h
9732     +++ b/include/linux/usb/composite.h
9733     @@ -249,6 +249,9 @@ int usb_function_activate(struct usb_function *);
9734    
9735     int usb_interface_id(struct usb_configuration *, struct usb_function *);
9736    
9737     +int config_ep_by_speed_and_alt(struct usb_gadget *g, struct usb_function *f,
9738     + struct usb_ep *_ep, u8 alt);
9739     +
9740     int config_ep_by_speed(struct usb_gadget *g, struct usb_function *f,
9741     struct usb_ep *_ep);
9742    
9743     diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h
9744     index a15ce99dfc2d..78e006355557 100644
9745     --- a/include/linux/usb/ehci_def.h
9746     +++ b/include/linux/usb/ehci_def.h
9747     @@ -151,7 +151,7 @@ struct ehci_regs {
9748     #define PORT_OWNER (1<<13) /* true: companion hc owns this port */
9749     #define PORT_POWER (1<<12) /* true: has power (see PPC) */
9750     #define PORT_USB11(x) (((x)&(3<<10)) == (1<<10)) /* USB 1.1 device */
9751     -/* 11:10 for detecting lowspeed devices (reset vs release ownership) */
9752     +#define PORT_LS_MASK (3<<10) /* Link status (SE0, K or J */
9753     /* 9 reserved */
9754     #define PORT_LPM (1<<9) /* LPM transaction */
9755     #define PORT_RESET (1<<8) /* reset port */
9756     diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
9757     index 124462d65eac..67f5adc9b875 100644
9758     --- a/include/linux/usb/gadget.h
9759     +++ b/include/linux/usb/gadget.h
9760     @@ -373,6 +373,7 @@ struct usb_gadget_ops {
9761     * @connected: True if gadget is connected.
9762     * @lpm_capable: If the gadget max_speed is FULL or HIGH, this flag
9763     * indicates that it supports LPM as per the LPM ECN & errata.
9764     + * @irq: the interrupt number for device controller.
9765     *
9766     * Gadgets have a mostly-portable "gadget driver" implementing device
9767     * functions, handling all usb configurations and interfaces. Gadget
9768     @@ -427,6 +428,7 @@ struct usb_gadget {
9769     unsigned deactivated:1;
9770     unsigned connected:1;
9771     unsigned lpm_capable:1;
9772     + int irq;
9773     };
9774     #define work_to_gadget(w) (container_of((w), struct usb_gadget, work))
9775    
9776     diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
9777     index 903cc2d2750b..84ae605c0643 100644
9778     --- a/include/uapi/linux/magic.h
9779     +++ b/include/uapi/linux/magic.h
9780     @@ -93,6 +93,7 @@
9781     #define BALLOON_KVM_MAGIC 0x13661366
9782     #define ZSMALLOC_MAGIC 0x58295829
9783     #define DMA_BUF_MAGIC 0x444d4142 /* "DMAB" */
9784     +#define DEVMEM_MAGIC 0x454d444d /* "DMEM" */
9785     #define Z3FOLD_MAGIC 0x33
9786    
9787     #endif /* __LINUX_MAGIC_H__ */
9788     diff --git a/kernel/kprobes.c b/kernel/kprobes.c
9789     index 2625c241ac00..195ecb955fcc 100644
9790     --- a/kernel/kprobes.c
9791     +++ b/kernel/kprobes.c
9792     @@ -586,11 +586,12 @@ static void kprobe_optimizer(struct work_struct *work)
9793     mutex_unlock(&module_mutex);
9794     mutex_unlock(&text_mutex);
9795     cpus_read_unlock();
9796     - mutex_unlock(&kprobe_mutex);
9797    
9798     /* Step 5: Kick optimizer again if needed */
9799     if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
9800     kick_kprobe_optimizer();
9801     +
9802     + mutex_unlock(&kprobe_mutex);
9803     }
9804    
9805     /* Wait for completing optimization and unoptimization */
9806     @@ -1236,6 +1237,26 @@ __releases(hlist_lock)
9807     }
9808     NOKPROBE_SYMBOL(kretprobe_table_unlock);
9809    
9810     +struct kprobe kprobe_busy = {
9811     + .addr = (void *) get_kprobe,
9812     +};
9813     +
9814     +void kprobe_busy_begin(void)
9815     +{
9816     + struct kprobe_ctlblk *kcb;
9817     +
9818     + preempt_disable();
9819     + __this_cpu_write(current_kprobe, &kprobe_busy);
9820     + kcb = get_kprobe_ctlblk();
9821     + kcb->kprobe_status = KPROBE_HIT_ACTIVE;
9822     +}
9823     +
9824     +void kprobe_busy_end(void)
9825     +{
9826     + __this_cpu_write(current_kprobe, NULL);
9827     + preempt_enable();
9828     +}
9829     +
9830     /*
9831     * This function is called from finish_task_switch when task tk becomes dead,
9832     * so that we can recycle any function-return probe instances associated
9833     @@ -1253,6 +1274,8 @@ void kprobe_flush_task(struct task_struct *tk)
9834     /* Early boot. kretprobe_table_locks not yet initialized. */
9835     return;
9836    
9837     + kprobe_busy_begin();
9838     +
9839     INIT_HLIST_HEAD(&empty_rp);
9840     hash = hash_ptr(tk, KPROBE_HASH_BITS);
9841     head = &kretprobe_inst_table[hash];
9842     @@ -1266,6 +1289,8 @@ void kprobe_flush_task(struct task_struct *tk)
9843     hlist_del(&ri->hlist);
9844     kfree(ri);
9845     }
9846     +
9847     + kprobe_busy_end();
9848     }
9849     NOKPROBE_SYMBOL(kprobe_flush_task);
9850    
9851     diff --git a/kernel/resource.c b/kernel/resource.c
9852     index 76036a41143b..841737bbda9e 100644
9853     --- a/kernel/resource.c
9854     +++ b/kernel/resource.c
9855     @@ -1126,6 +1126,7 @@ struct resource * __request_region(struct resource *parent,
9856     {
9857     DECLARE_WAITQUEUE(wait, current);
9858     struct resource *res = alloc_resource(GFP_KERNEL);
9859     + struct resource *orig_parent = parent;
9860    
9861     if (!res)
9862     return NULL;
9863     @@ -1176,6 +1177,10 @@ struct resource * __request_region(struct resource *parent,
9864     break;
9865     }
9866     write_unlock(&resource_lock);
9867     +
9868     + if (res && orig_parent == &iomem_resource)
9869     + revoke_devmem(res);
9870     +
9871     return res;
9872     }
9873     EXPORT_SYMBOL(__request_region);
9874     diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
9875     index e7e483cdbea6..a677aa84ccb6 100644
9876     --- a/kernel/trace/blktrace.c
9877     +++ b/kernel/trace/blktrace.c
9878     @@ -999,8 +999,10 @@ static void blk_add_trace_split(void *ignore,
9879    
9880     __blk_add_trace(bt, bio->bi_iter.bi_sector,
9881     bio->bi_iter.bi_size, bio_op(bio), bio->bi_opf,
9882     - BLK_TA_SPLIT, bio->bi_status, sizeof(rpdu),
9883     - &rpdu, blk_trace_bio_get_cgid(q, bio));
9884     + BLK_TA_SPLIT,
9885     + blk_status_to_errno(bio->bi_status),
9886     + sizeof(rpdu), &rpdu,
9887     + blk_trace_bio_get_cgid(q, bio));
9888     }
9889     rcu_read_unlock();
9890     }
9891     @@ -1037,7 +1039,8 @@ static void blk_add_trace_bio_remap(void *ignore,
9892     r.sector_from = cpu_to_be64(from);
9893    
9894     __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
9895     - bio_op(bio), bio->bi_opf, BLK_TA_REMAP, bio->bi_status,
9896     + bio_op(bio), bio->bi_opf, BLK_TA_REMAP,
9897     + blk_status_to_errno(bio->bi_status),
9898     sizeof(r), &r, blk_trace_bio_get_cgid(q, bio));
9899     rcu_read_unlock();
9900     }
9901     @@ -1259,21 +1262,10 @@ static inline __u16 t_error(const struct trace_entry *ent)
9902    
9903     static __u64 get_pdu_int(const struct trace_entry *ent, bool has_cg)
9904     {
9905     - const __u64 *val = pdu_start(ent, has_cg);
9906     + const __be64 *val = pdu_start(ent, has_cg);
9907     return be64_to_cpu(*val);
9908     }
9909    
9910     -static void get_pdu_remap(const struct trace_entry *ent,
9911     - struct blk_io_trace_remap *r, bool has_cg)
9912     -{
9913     - const struct blk_io_trace_remap *__r = pdu_start(ent, has_cg);
9914     - __u64 sector_from = __r->sector_from;
9915     -
9916     - r->device_from = be32_to_cpu(__r->device_from);
9917     - r->device_to = be32_to_cpu(__r->device_to);
9918     - r->sector_from = be64_to_cpu(sector_from);
9919     -}
9920     -
9921     typedef void (blk_log_action_t) (struct trace_iterator *iter, const char *act,
9922     bool has_cg);
9923    
9924     @@ -1399,13 +1391,13 @@ static void blk_log_with_error(struct trace_seq *s,
9925    
9926     static void blk_log_remap(struct trace_seq *s, const struct trace_entry *ent, bool has_cg)
9927     {
9928     - struct blk_io_trace_remap r = { .device_from = 0, };
9929     + const struct blk_io_trace_remap *__r = pdu_start(ent, has_cg);
9930    
9931     - get_pdu_remap(ent, &r, has_cg);
9932     trace_seq_printf(s, "%llu + %u <- (%d,%d) %llu\n",
9933     t_sector(ent), t_sec(ent),
9934     - MAJOR(r.device_from), MINOR(r.device_from),
9935     - (unsigned long long)r.sector_from);
9936     + MAJOR(be32_to_cpu(__r->device_from)),
9937     + MINOR(be32_to_cpu(__r->device_from)),
9938     + be64_to_cpu(__r->sector_from));
9939     }
9940    
9941     static void blk_log_plug(struct trace_seq *s, const struct trace_entry *ent, bool has_cg)
9942     diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
9943     index fba4b48451f6..26de9c654956 100644
9944     --- a/kernel/trace/trace_kprobe.c
9945     +++ b/kernel/trace/trace_kprobe.c
9946     @@ -1464,7 +1464,7 @@ int bpf_get_kprobe_info(const struct perf_event *event, u32 *fd_type,
9947     if (perf_type_tracepoint)
9948     tk = find_trace_kprobe(pevent, group);
9949     else
9950     - tk = event->tp_event->data;
9951     + tk = trace_kprobe_primary_from_call(event->tp_event);
9952     if (!tk)
9953     return -EINVAL;
9954    
9955     diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
9956     index ab8b6436d53f..f98d6d94cbbf 100644
9957     --- a/kernel/trace/trace_probe.c
9958     +++ b/kernel/trace/trace_probe.c
9959     @@ -639,8 +639,8 @@ static int traceprobe_parse_probe_arg_body(char *arg, ssize_t *size,
9960     ret = -EINVAL;
9961     goto fail;
9962     }
9963     - if ((code->op == FETCH_OP_IMM || code->op == FETCH_OP_COMM) ||
9964     - parg->count) {
9965     + if ((code->op == FETCH_OP_IMM || code->op == FETCH_OP_COMM ||
9966     + code->op == FETCH_OP_DATA) || parg->count) {
9967     /*
9968     * IMM, DATA and COMM is pointing actual address, those
9969     * must be kept, and if parg->count != 0, this is an
9970     diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
9971     index 2619bc5ed520..5294843de6ef 100644
9972     --- a/kernel/trace/trace_uprobe.c
9973     +++ b/kernel/trace/trace_uprobe.c
9974     @@ -1405,7 +1405,7 @@ int bpf_get_uprobe_info(const struct perf_event *event, u32 *fd_type,
9975     if (perf_type_tracepoint)
9976     tu = find_probe_event(pevent, group);
9977     else
9978     - tu = event->tp_event->data;
9979     + tu = trace_uprobe_primary_from_call(event->tp_event);
9980     if (!tu)
9981     return -EINVAL;
9982    
9983     diff --git a/lib/zlib_inflate/inffast.c b/lib/zlib_inflate/inffast.c
9984     index 2c13ecc5bb2c..ed1f3df27260 100644
9985     --- a/lib/zlib_inflate/inffast.c
9986     +++ b/lib/zlib_inflate/inffast.c
9987     @@ -10,17 +10,6 @@
9988    
9989     #ifndef ASMINF
9990    
9991     -/* Allow machine dependent optimization for post-increment or pre-increment.
9992     - Based on testing to date,
9993     - Pre-increment preferred for:
9994     - - PowerPC G3 (Adler)
9995     - - MIPS R5000 (Randers-Pehrson)
9996     - Post-increment preferred for:
9997     - - none
9998     - No measurable difference:
9999     - - Pentium III (Anderson)
10000     - - M68060 (Nikl)
10001     - */
10002     union uu {
10003     unsigned short us;
10004     unsigned char b[2];
10005     @@ -38,16 +27,6 @@ get_unaligned16(const unsigned short *p)
10006     return mm.us;
10007     }
10008    
10009     -#ifdef POSTINC
10010     -# define OFF 0
10011     -# define PUP(a) *(a)++
10012     -# define UP_UNALIGNED(a) get_unaligned16((a)++)
10013     -#else
10014     -# define OFF 1
10015     -# define PUP(a) *++(a)
10016     -# define UP_UNALIGNED(a) get_unaligned16(++(a))
10017     -#endif
10018     -
10019     /*
10020     Decode literal, length, and distance codes and write out the resulting
10021     literal and match bytes until either not enough input or output is
10022     @@ -115,9 +94,9 @@ void inflate_fast(z_streamp strm, unsigned start)
10023    
10024     /* copy state to local variables */
10025     state = (struct inflate_state *)strm->state;
10026     - in = strm->next_in - OFF;
10027     + in = strm->next_in;
10028     last = in + (strm->avail_in - 5);
10029     - out = strm->next_out - OFF;
10030     + out = strm->next_out;
10031     beg = out - (start - strm->avail_out);
10032     end = out + (strm->avail_out - 257);
10033     #ifdef INFLATE_STRICT
10034     @@ -138,9 +117,9 @@ void inflate_fast(z_streamp strm, unsigned start)
10035     input data or output space */
10036     do {
10037     if (bits < 15) {
10038     - hold += (unsigned long)(PUP(in)) << bits;
10039     + hold += (unsigned long)(*in++) << bits;
10040     bits += 8;
10041     - hold += (unsigned long)(PUP(in)) << bits;
10042     + hold += (unsigned long)(*in++) << bits;
10043     bits += 8;
10044     }
10045     this = lcode[hold & lmask];
10046     @@ -150,14 +129,14 @@ void inflate_fast(z_streamp strm, unsigned start)
10047     bits -= op;
10048     op = (unsigned)(this.op);
10049     if (op == 0) { /* literal */
10050     - PUP(out) = (unsigned char)(this.val);
10051     + *out++ = (unsigned char)(this.val);
10052     }
10053     else if (op & 16) { /* length base */
10054     len = (unsigned)(this.val);
10055     op &= 15; /* number of extra bits */
10056     if (op) {
10057     if (bits < op) {
10058     - hold += (unsigned long)(PUP(in)) << bits;
10059     + hold += (unsigned long)(*in++) << bits;
10060     bits += 8;
10061     }
10062     len += (unsigned)hold & ((1U << op) - 1);
10063     @@ -165,9 +144,9 @@ void inflate_fast(z_streamp strm, unsigned start)
10064     bits -= op;
10065     }
10066     if (bits < 15) {
10067     - hold += (unsigned long)(PUP(in)) << bits;
10068     + hold += (unsigned long)(*in++) << bits;
10069     bits += 8;
10070     - hold += (unsigned long)(PUP(in)) << bits;
10071     + hold += (unsigned long)(*in++) << bits;
10072     bits += 8;
10073     }
10074     this = dcode[hold & dmask];
10075     @@ -180,10 +159,10 @@ void inflate_fast(z_streamp strm, unsigned start)
10076     dist = (unsigned)(this.val);
10077     op &= 15; /* number of extra bits */
10078     if (bits < op) {
10079     - hold += (unsigned long)(PUP(in)) << bits;
10080     + hold += (unsigned long)(*in++) << bits;
10081     bits += 8;
10082     if (bits < op) {
10083     - hold += (unsigned long)(PUP(in)) << bits;
10084     + hold += (unsigned long)(*in++) << bits;
10085     bits += 8;
10086     }
10087     }
10088     @@ -205,13 +184,13 @@ void inflate_fast(z_streamp strm, unsigned start)
10089     state->mode = BAD;
10090     break;
10091     }
10092     - from = window - OFF;
10093     + from = window;
10094     if (write == 0) { /* very common case */
10095     from += wsize - op;
10096     if (op < len) { /* some from window */
10097     len -= op;
10098     do {
10099     - PUP(out) = PUP(from);
10100     + *out++ = *from++;
10101     } while (--op);
10102     from = out - dist; /* rest from output */
10103     }
10104     @@ -222,14 +201,14 @@ void inflate_fast(z_streamp strm, unsigned start)
10105     if (op < len) { /* some from end of window */
10106     len -= op;
10107     do {
10108     - PUP(out) = PUP(from);
10109     + *out++ = *from++;
10110     } while (--op);
10111     - from = window - OFF;
10112     + from = window;
10113     if (write < len) { /* some from start of window */
10114     op = write;
10115     len -= op;
10116     do {
10117     - PUP(out) = PUP(from);
10118     + *out++ = *from++;
10119     } while (--op);
10120     from = out - dist; /* rest from output */
10121     }
10122     @@ -240,21 +219,21 @@ void inflate_fast(z_streamp strm, unsigned start)
10123     if (op < len) { /* some from window */
10124     len -= op;
10125     do {
10126     - PUP(out) = PUP(from);
10127     + *out++ = *from++;
10128     } while (--op);
10129     from = out - dist; /* rest from output */
10130     }
10131     }
10132     while (len > 2) {
10133     - PUP(out) = PUP(from);
10134     - PUP(out) = PUP(from);
10135     - PUP(out) = PUP(from);
10136     + *out++ = *from++;
10137     + *out++ = *from++;
10138     + *out++ = *from++;
10139     len -= 3;
10140     }
10141     if (len) {
10142     - PUP(out) = PUP(from);
10143     + *out++ = *from++;
10144     if (len > 1)
10145     - PUP(out) = PUP(from);
10146     + *out++ = *from++;
10147     }
10148     }
10149     else {
10150     @@ -264,29 +243,29 @@ void inflate_fast(z_streamp strm, unsigned start)
10151     from = out - dist; /* copy direct from output */
10152     /* minimum length is three */
10153     /* Align out addr */
10154     - if (!((long)(out - 1 + OFF) & 1)) {
10155     - PUP(out) = PUP(from);
10156     + if (!((long)(out - 1) & 1)) {
10157     + *out++ = *from++;
10158     len--;
10159     }
10160     - sout = (unsigned short *)(out - OFF);
10161     + sout = (unsigned short *)(out);
10162     if (dist > 2) {
10163     unsigned short *sfrom;
10164    
10165     - sfrom = (unsigned short *)(from - OFF);
10166     + sfrom = (unsigned short *)(from);
10167     loops = len >> 1;
10168     do
10169     #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
10170     - PUP(sout) = PUP(sfrom);
10171     + *sout++ = *sfrom++;
10172     #else
10173     - PUP(sout) = UP_UNALIGNED(sfrom);
10174     + *sout++ = get_unaligned16(sfrom++);
10175     #endif
10176     while (--loops);
10177     - out = (unsigned char *)sout + OFF;
10178     - from = (unsigned char *)sfrom + OFF;
10179     + out = (unsigned char *)sout;
10180     + from = (unsigned char *)sfrom;
10181     } else { /* dist == 1 or dist == 2 */
10182     unsigned short pat16;
10183    
10184     - pat16 = *(sout-1+OFF);
10185     + pat16 = *(sout-1);
10186     if (dist == 1) {
10187     union uu mm;
10188     /* copy one char pattern to both bytes */
10189     @@ -296,12 +275,12 @@ void inflate_fast(z_streamp strm, unsigned start)
10190     }
10191     loops = len >> 1;
10192     do
10193     - PUP(sout) = pat16;
10194     + *sout++ = pat16;
10195     while (--loops);
10196     - out = (unsigned char *)sout + OFF;
10197     + out = (unsigned char *)sout;
10198     }
10199     if (len & 1)
10200     - PUP(out) = PUP(from);
10201     + *out++ = *from++;
10202     }
10203     }
10204     else if ((op & 64) == 0) { /* 2nd level distance code */
10205     @@ -336,8 +315,8 @@ void inflate_fast(z_streamp strm, unsigned start)
10206     hold &= (1U << bits) - 1;
10207    
10208     /* update state and return */
10209     - strm->next_in = in + OFF;
10210     - strm->next_out = out + OFF;
10211     + strm->next_in = in;
10212     + strm->next_out = out;
10213     strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
10214     strm->avail_out = (unsigned)(out < end ?
10215     257 + (end - out) : 257 - (out - end));
10216     diff --git a/net/core/dev.c b/net/core/dev.c
10217     index 8552874e5aac..204d87e7c9b1 100644
10218     --- a/net/core/dev.c
10219     +++ b/net/core/dev.c
10220     @@ -79,6 +79,7 @@
10221     #include <linux/sched.h>
10222     #include <linux/sched/mm.h>
10223     #include <linux/mutex.h>
10224     +#include <linux/rwsem.h>
10225     #include <linux/string.h>
10226     #include <linux/mm.h>
10227     #include <linux/socket.h>
10228     @@ -194,7 +195,7 @@ static DEFINE_SPINLOCK(napi_hash_lock);
10229     static unsigned int napi_gen_id = NR_CPUS;
10230     static DEFINE_READ_MOSTLY_HASHTABLE(napi_hash, 8);
10231    
10232     -static seqcount_t devnet_rename_seq;
10233     +static DECLARE_RWSEM(devnet_rename_sem);
10234    
10235     static inline void dev_base_seq_inc(struct net *net)
10236     {
10237     @@ -816,33 +817,28 @@ EXPORT_SYMBOL(dev_get_by_napi_id);
10238     * @net: network namespace
10239     * @name: a pointer to the buffer where the name will be stored.
10240     * @ifindex: the ifindex of the interface to get the name from.
10241     - *
10242     - * The use of raw_seqcount_begin() and cond_resched() before
10243     - * retrying is required as we want to give the writers a chance
10244     - * to complete when CONFIG_PREEMPT is not set.
10245     */
10246     int netdev_get_name(struct net *net, char *name, int ifindex)
10247     {
10248     struct net_device *dev;
10249     - unsigned int seq;
10250     + int ret;
10251    
10252     -retry:
10253     - seq = raw_seqcount_begin(&devnet_rename_seq);
10254     + down_read(&devnet_rename_sem);
10255     rcu_read_lock();
10256     +
10257     dev = dev_get_by_index_rcu(net, ifindex);
10258     if (!dev) {
10259     - rcu_read_unlock();
10260     - return -ENODEV;
10261     + ret = -ENODEV;
10262     + goto out;
10263     }
10264    
10265     strcpy(name, dev->name);
10266     - rcu_read_unlock();
10267     - if (read_seqcount_retry(&devnet_rename_seq, seq)) {
10268     - cond_resched();
10269     - goto retry;
10270     - }
10271    
10272     - return 0;
10273     + ret = 0;
10274     +out:
10275     + rcu_read_unlock();
10276     + up_read(&devnet_rename_sem);
10277     + return ret;
10278     }
10279    
10280     /**
10281     @@ -1115,10 +1111,10 @@ int dev_change_name(struct net_device *dev, const char *newname)
10282     likely(!(dev->priv_flags & IFF_LIVE_RENAME_OK)))
10283     return -EBUSY;
10284    
10285     - write_seqcount_begin(&devnet_rename_seq);
10286     + down_write(&devnet_rename_sem);
10287    
10288     if (strncmp(newname, dev->name, IFNAMSIZ) == 0) {
10289     - write_seqcount_end(&devnet_rename_seq);
10290     + up_write(&devnet_rename_sem);
10291     return 0;
10292     }
10293    
10294     @@ -1126,7 +1122,7 @@ int dev_change_name(struct net_device *dev, const char *newname)
10295    
10296     err = dev_get_valid_name(net, dev, newname);
10297     if (err < 0) {
10298     - write_seqcount_end(&devnet_rename_seq);
10299     + up_write(&devnet_rename_sem);
10300     return err;
10301     }
10302    
10303     @@ -1141,11 +1137,11 @@ rollback:
10304     if (ret) {
10305     memcpy(dev->name, oldname, IFNAMSIZ);
10306     dev->name_assign_type = old_assign_type;
10307     - write_seqcount_end(&devnet_rename_seq);
10308     + up_write(&devnet_rename_sem);
10309     return ret;
10310     }
10311    
10312     - write_seqcount_end(&devnet_rename_seq);
10313     + up_write(&devnet_rename_sem);
10314    
10315     netdev_adjacent_rename_links(dev, oldname);
10316    
10317     @@ -1166,7 +1162,7 @@ rollback:
10318     /* err >= 0 after dev_alloc_name() or stores the first errno */
10319     if (err >= 0) {
10320     err = ret;
10321     - write_seqcount_begin(&devnet_rename_seq);
10322     + down_write(&devnet_rename_sem);
10323     memcpy(dev->name, oldname, IFNAMSIZ);
10324     memcpy(oldname, newname, IFNAMSIZ);
10325     dev->name_assign_type = old_assign_type;
10326     diff --git a/net/core/filter.c b/net/core/filter.c
10327     index f1f2304822e3..a0a492f7cf9c 100644
10328     --- a/net/core/filter.c
10329     +++ b/net/core/filter.c
10330     @@ -1766,25 +1766,27 @@ BPF_CALL_5(bpf_skb_load_bytes_relative, const struct sk_buff *, skb,
10331     u32, offset, void *, to, u32, len, u32, start_header)
10332     {
10333     u8 *end = skb_tail_pointer(skb);
10334     - u8 *net = skb_network_header(skb);
10335     - u8 *mac = skb_mac_header(skb);
10336     - u8 *ptr;
10337     + u8 *start, *ptr;
10338    
10339     - if (unlikely(offset > 0xffff || len > (end - mac)))
10340     + if (unlikely(offset > 0xffff))
10341     goto err_clear;
10342    
10343     switch (start_header) {
10344     case BPF_HDR_START_MAC:
10345     - ptr = mac + offset;
10346     + if (unlikely(!skb_mac_header_was_set(skb)))
10347     + goto err_clear;
10348     + start = skb_mac_header(skb);
10349     break;
10350     case BPF_HDR_START_NET:
10351     - ptr = net + offset;
10352     + start = skb_network_header(skb);
10353     break;
10354     default:
10355     goto err_clear;
10356     }
10357    
10358     - if (likely(ptr >= mac && ptr + len <= end)) {
10359     + ptr = start + offset;
10360     +
10361     + if (likely(ptr + len <= end)) {
10362     memcpy(to, ptr, len);
10363     return 0;
10364     }
10365     diff --git a/net/core/sock_map.c b/net/core/sock_map.c
10366     index 8291568b707f..6bbc118bf00e 100644
10367     --- a/net/core/sock_map.c
10368     +++ b/net/core/sock_map.c
10369     @@ -837,11 +837,15 @@ static struct bpf_map *sock_hash_alloc(union bpf_attr *attr)
10370     err = -EINVAL;
10371     goto free_htab;
10372     }
10373     + err = bpf_map_charge_init(&htab->map.memory, cost);
10374     + if (err)
10375     + goto free_htab;
10376    
10377     htab->buckets = bpf_map_area_alloc(htab->buckets_num *
10378     sizeof(struct bpf_htab_bucket),
10379     htab->map.numa_node);
10380     if (!htab->buckets) {
10381     + bpf_map_charge_finish(&htab->map.memory);
10382     err = -ENOMEM;
10383     goto free_htab;
10384     }
10385     @@ -861,6 +865,7 @@ static void sock_hash_free(struct bpf_map *map)
10386     {
10387     struct bpf_htab *htab = container_of(map, struct bpf_htab, map);
10388     struct bpf_htab_bucket *bucket;
10389     + struct hlist_head unlink_list;
10390     struct bpf_htab_elem *elem;
10391     struct hlist_node *node;
10392     int i;
10393     @@ -872,13 +877,32 @@ static void sock_hash_free(struct bpf_map *map)
10394     synchronize_rcu();
10395     for (i = 0; i < htab->buckets_num; i++) {
10396     bucket = sock_hash_select_bucket(htab, i);
10397     - hlist_for_each_entry_safe(elem, node, &bucket->head, node) {
10398     - hlist_del_rcu(&elem->node);
10399     +
10400     + /* We are racing with sock_hash_delete_from_link to
10401     + * enter the spin-lock critical section. Every socket on
10402     + * the list is still linked to sockhash. Since link
10403     + * exists, psock exists and holds a ref to socket. That
10404     + * lets us to grab a socket ref too.
10405     + */
10406     + raw_spin_lock_bh(&bucket->lock);
10407     + hlist_for_each_entry(elem, &bucket->head, node)
10408     + sock_hold(elem->sk);
10409     + hlist_move_list(&bucket->head, &unlink_list);
10410     + raw_spin_unlock_bh(&bucket->lock);
10411     +
10412     + /* Process removed entries out of atomic context to
10413     + * block for socket lock before deleting the psock's
10414     + * link to sockhash.
10415     + */
10416     + hlist_for_each_entry_safe(elem, node, &unlink_list, node) {
10417     + hlist_del(&elem->node);
10418     lock_sock(elem->sk);
10419     rcu_read_lock();
10420     sock_map_unref(elem->sk, elem);
10421     rcu_read_unlock();
10422     release_sock(elem->sk);
10423     + sock_put(elem->sk);
10424     + sock_hash_free_elem(htab, elem);
10425     }
10426     }
10427    
10428     diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
10429     index 69b025408390..ad9f38202731 100644
10430     --- a/net/ipv4/tcp_bpf.c
10431     +++ b/net/ipv4/tcp_bpf.c
10432     @@ -96,6 +96,9 @@ int __tcp_bpf_recvmsg(struct sock *sk, struct sk_psock *psock,
10433     } while (i != msg_rx->sg.end);
10434    
10435     if (unlikely(peek)) {
10436     + if (msg_rx == list_last_entry(&psock->ingress_msg,
10437     + struct sk_msg, list))
10438     + break;
10439     msg_rx = list_next_entry(msg_rx, list);
10440     continue;
10441     }
10442     diff --git a/net/rxrpc/proc.c b/net/rxrpc/proc.c
10443     index 8b179e3c802a..543afd9bd664 100644
10444     --- a/net/rxrpc/proc.c
10445     +++ b/net/rxrpc/proc.c
10446     @@ -68,7 +68,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
10447     "Proto Local "
10448     " Remote "
10449     " SvID ConnID CallID End Use State Abort "
10450     - " UserID TxSeq TW RxSeq RW RxSerial RxTimo\n");
10451     + " DebugId TxSeq TW RxSeq RW RxSerial RxTimo\n");
10452     return 0;
10453     }
10454    
10455     @@ -100,7 +100,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
10456     rx_hard_ack = READ_ONCE(call->rx_hard_ack);
10457     seq_printf(seq,
10458     "UDP %-47.47s %-47.47s %4x %08x %08x %s %3u"
10459     - " %-8.8s %08x %lx %08x %02x %08x %02x %08x %06lx\n",
10460     + " %-8.8s %08x %08x %08x %02x %08x %02x %08x %06lx\n",
10461     lbuff,
10462     rbuff,
10463     call->service_id,
10464     @@ -110,7 +110,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v)
10465     atomic_read(&call->usage),
10466     rxrpc_call_states[call->state],
10467     call->abort_code,
10468     - call->user_call_ID,
10469     + call->debug_id,
10470     tx_hard_ack, READ_ONCE(call->tx_top) - tx_hard_ack,
10471     rx_hard_ack, READ_ONCE(call->rx_top) - rx_hard_ack,
10472     call->rx_serial,
10473     diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c
10474     index d024af4be85e..105d17af4abc 100644
10475     --- a/net/sunrpc/addr.c
10476     +++ b/net/sunrpc/addr.c
10477     @@ -82,11 +82,11 @@ static size_t rpc_ntop6(const struct sockaddr *sap,
10478    
10479     rc = snprintf(scopebuf, sizeof(scopebuf), "%c%u",
10480     IPV6_SCOPE_DELIMITER, sin6->sin6_scope_id);
10481     - if (unlikely((size_t)rc > sizeof(scopebuf)))
10482     + if (unlikely((size_t)rc >= sizeof(scopebuf)))
10483     return 0;
10484    
10485     len += rc;
10486     - if (unlikely(len > buflen))
10487     + if (unlikely(len >= buflen))
10488     return 0;
10489    
10490     strcat(buf, scopebuf);
10491     diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
10492     index 7181a30666b4..f9eb5efb237c 100644
10493     --- a/net/xdp/xsk.c
10494     +++ b/net/xdp/xsk.c
10495     @@ -362,10 +362,8 @@ static int xsk_generic_xmit(struct sock *sk)
10496    
10497     len = desc.len;
10498     skb = sock_alloc_send_skb(sk, len, 1, &err);
10499     - if (unlikely(!skb)) {
10500     - err = -EAGAIN;
10501     + if (unlikely(!skb))
10502     goto out;
10503     - }
10504    
10505     skb_put(skb, len);
10506     addr = desc.addr;
10507     diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
10508     index a07668a5c36b..94a833597a88 100755
10509     --- a/scripts/headers_install.sh
10510     +++ b/scripts/headers_install.sh
10511     @@ -64,7 +64,7 @@ configs=$(sed -e '
10512     d
10513     ' $OUTFILE)
10514    
10515     -# The entries in the following list are not warned.
10516     +# The entries in the following list do not result in an error.
10517     # Please do not add a new entry. This list is only for existing ones.
10518     # The list will be reduced gradually, and deleted eventually. (hopefully)
10519     #
10520     @@ -98,18 +98,19 @@ include/uapi/linux/raw.h:CONFIG_MAX_RAW_DEVS
10521    
10522     for c in $configs
10523     do
10524     - warn=1
10525     + leak_error=1
10526    
10527     for ignore in $config_leak_ignores
10528     do
10529     if echo "$INFILE:$c" | grep -q "$ignore$"; then
10530     - warn=
10531     + leak_error=
10532     break
10533     fi
10534     done
10535    
10536     - if [ "$warn" = 1 ]; then
10537     - echo "warning: $INFILE: leak $c to user-space" >&2
10538     + if [ "$leak_error" = 1 ]; then
10539     + echo "error: $INFILE: leak $c to user-space" >&2
10540     + exit 1
10541     fi
10542     done
10543    
10544     diff --git a/scripts/mksysmap b/scripts/mksysmap
10545     index a35acc0d0b82..9aa23d15862a 100755
10546     --- a/scripts/mksysmap
10547     +++ b/scripts/mksysmap
10548     @@ -41,4 +41,4 @@
10549     # so we just ignore them to let readprofile continue to work.
10550     # (At least sparc64 has __crc_ in the middle).
10551    
10552     -$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( .L\)' > $2
10553     +$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)' > $2
10554     diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
10555     index 5dedc0173b02..1a33f490e667 100644
10556     --- a/security/apparmor/domain.c
10557     +++ b/security/apparmor/domain.c
10558     @@ -935,7 +935,8 @@ int apparmor_bprm_set_creds(struct linux_binprm *bprm)
10559     * aways results in a further reduction of permissions.
10560     */
10561     if ((bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS) &&
10562     - !unconfined(label) && !aa_label_is_subset(new, ctx->nnp)) {
10563     + !unconfined(label) &&
10564     + !aa_label_is_unconfined_subset(new, ctx->nnp)) {
10565     error = -EPERM;
10566     info = "no new privs";
10567     goto audit;
10568     @@ -1213,7 +1214,7 @@ int aa_change_hat(const char *hats[], int count, u64 token, int flags)
10569     * reduce restrictions.
10570     */
10571     if (task_no_new_privs(current) && !unconfined(label) &&
10572     - !aa_label_is_subset(new, ctx->nnp)) {
10573     + !aa_label_is_unconfined_subset(new, ctx->nnp)) {
10574     /* not an apparmor denial per se, so don't log it */
10575     AA_DEBUG("no_new_privs - change_hat denied");
10576     error = -EPERM;
10577     @@ -1234,7 +1235,7 @@ int aa_change_hat(const char *hats[], int count, u64 token, int flags)
10578     * reduce restrictions.
10579     */
10580     if (task_no_new_privs(current) && !unconfined(label) &&
10581     - !aa_label_is_subset(previous, ctx->nnp)) {
10582     + !aa_label_is_unconfined_subset(previous, ctx->nnp)) {
10583     /* not an apparmor denial per se, so don't log it */
10584     AA_DEBUG("no_new_privs - change_hat denied");
10585     error = -EPERM;
10586     @@ -1429,7 +1430,7 @@ check:
10587     * reduce restrictions.
10588     */
10589     if (task_no_new_privs(current) && !unconfined(label) &&
10590     - !aa_label_is_subset(new, ctx->nnp)) {
10591     + !aa_label_is_unconfined_subset(new, ctx->nnp)) {
10592     /* not an apparmor denial per se, so don't log it */
10593     AA_DEBUG("no_new_privs - change_hat denied");
10594     error = -EPERM;
10595     diff --git a/security/apparmor/include/label.h b/security/apparmor/include/label.h
10596     index 47942c4ba7ca..255764ab06e2 100644
10597     --- a/security/apparmor/include/label.h
10598     +++ b/security/apparmor/include/label.h
10599     @@ -281,6 +281,7 @@ bool aa_label_init(struct aa_label *label, int size, gfp_t gfp);
10600     struct aa_label *aa_label_alloc(int size, struct aa_proxy *proxy, gfp_t gfp);
10601    
10602     bool aa_label_is_subset(struct aa_label *set, struct aa_label *sub);
10603     +bool aa_label_is_unconfined_subset(struct aa_label *set, struct aa_label *sub);
10604     struct aa_profile *__aa_label_next_not_in_set(struct label_it *I,
10605     struct aa_label *set,
10606     struct aa_label *sub);
10607     diff --git a/security/apparmor/label.c b/security/apparmor/label.c
10608     index 470693239e64..5f324d63ceaa 100644
10609     --- a/security/apparmor/label.c
10610     +++ b/security/apparmor/label.c
10611     @@ -550,6 +550,39 @@ bool aa_label_is_subset(struct aa_label *set, struct aa_label *sub)
10612     return __aa_label_next_not_in_set(&i, set, sub) == NULL;
10613     }
10614    
10615     +/**
10616     + * aa_label_is_unconfined_subset - test if @sub is a subset of @set
10617     + * @set: label to test against
10618     + * @sub: label to test if is subset of @set
10619     + *
10620     + * This checks for subset but taking into account unconfined. IF
10621     + * @sub contains an unconfined profile that does not have a matching
10622     + * unconfined in @set then this will not cause the test to fail.
10623     + * Conversely we don't care about an unconfined in @set that is not in
10624     + * @sub
10625     + *
10626     + * Returns: true if @sub is special_subset of @set
10627     + * else false
10628     + */
10629     +bool aa_label_is_unconfined_subset(struct aa_label *set, struct aa_label *sub)
10630     +{
10631     + struct label_it i = { };
10632     + struct aa_profile *p;
10633     +
10634     + AA_BUG(!set);
10635     + AA_BUG(!sub);
10636     +
10637     + if (sub == set)
10638     + return true;
10639     +
10640     + do {
10641     + p = __aa_label_next_not_in_set(&i, set, sub);
10642     + if (p && !profile_unconfined(p))
10643     + break;
10644     + } while (p);
10645     +
10646     + return p == NULL;
10647     +}
10648    
10649    
10650     /**
10651     @@ -1531,13 +1564,13 @@ static const char *label_modename(struct aa_ns *ns, struct aa_label *label,
10652    
10653     label_for_each(i, label, profile) {
10654     if (aa_ns_visible(ns, profile->ns, flags & FLAG_VIEW_SUBNS)) {
10655     - if (profile->mode == APPARMOR_UNCONFINED)
10656     + count++;
10657     + if (profile == profile->ns->unconfined)
10658     /* special case unconfined so stacks with
10659     * unconfined don't report as mixed. ie.
10660     * profile_foo//&:ns1:unconfined (mixed)
10661     */
10662     continue;
10663     - count++;
10664     if (mode == -1)
10665     mode = profile->mode;
10666     else if (mode != profile->mode)
10667     diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
10668     index ec3a928af829..e31965dc6dd1 100644
10669     --- a/security/apparmor/lsm.c
10670     +++ b/security/apparmor/lsm.c
10671     @@ -791,7 +791,12 @@ static void apparmor_sk_clone_security(const struct sock *sk,
10672     struct aa_sk_ctx *ctx = SK_CTX(sk);
10673     struct aa_sk_ctx *new = SK_CTX(newsk);
10674    
10675     + if (new->label)
10676     + aa_put_label(new->label);
10677     new->label = aa_get_label(ctx->label);
10678     +
10679     + if (new->peer)
10680     + aa_put_label(new->peer);
10681     new->peer = aa_get_label(ctx->peer);
10682     }
10683    
10684     diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
10685     index a5813c7629c1..f62adf3cfce8 100644
10686     --- a/security/selinux/ss/services.c
10687     +++ b/security/selinux/ss/services.c
10688     @@ -2844,8 +2844,12 @@ err:
10689     if (*names) {
10690     for (i = 0; i < *len; i++)
10691     kfree((*names)[i]);
10692     + kfree(*names);
10693     }
10694     kfree(*values);
10695     + *len = 0;
10696     + *names = NULL;
10697     + *values = NULL;
10698     goto out;
10699     }
10700    
10701     diff --git a/sound/firewire/amdtp-am824.c b/sound/firewire/amdtp-am824.c
10702     index 67d735e9a6a4..fea92e148790 100644
10703     --- a/sound/firewire/amdtp-am824.c
10704     +++ b/sound/firewire/amdtp-am824.c
10705     @@ -82,7 +82,8 @@ int amdtp_am824_set_parameters(struct amdtp_stream *s, unsigned int rate,
10706     if (err < 0)
10707     return err;
10708    
10709     - s->ctx_data.rx.fdf = AMDTP_FDF_AM824 | s->sfc;
10710     + if (s->direction == AMDTP_OUT_STREAM)
10711     + s->ctx_data.rx.fdf = AMDTP_FDF_AM824 | s->sfc;
10712    
10713     p->pcm_channels = pcm_channels;
10714     p->midi_ports = midi_ports;
10715     diff --git a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c
10716     index c5b1d5900eed..d6420d224d09 100644
10717     --- a/sound/isa/wavefront/wavefront_synth.c
10718     +++ b/sound/isa/wavefront/wavefront_synth.c
10719     @@ -1171,7 +1171,10 @@ wavefront_send_alias (snd_wavefront_t *dev, wavefront_patch_info *header)
10720     "alias for %d\n",
10721     header->number,
10722     header->hdr.a.OriginalSample);
10723     -
10724     +
10725     + if (header->number >= WF_MAX_SAMPLE)
10726     + return -EINVAL;
10727     +
10728     munge_int32 (header->number, &alias_hdr[0], 2);
10729     munge_int32 (header->hdr.a.OriginalSample, &alias_hdr[2], 2);
10730     munge_int32 (*((unsigned int *)&header->hdr.a.sampleStartOffset),
10731     @@ -1202,6 +1205,9 @@ wavefront_send_multisample (snd_wavefront_t *dev, wavefront_patch_info *header)
10732     int num_samples;
10733     unsigned char *msample_hdr;
10734    
10735     + if (header->number >= WF_MAX_SAMPLE)
10736     + return -EINVAL;
10737     +
10738     msample_hdr = kmalloc(WF_MSAMPLE_BYTES, GFP_KERNEL);
10739     if (! msample_hdr)
10740     return -ENOMEM;
10741     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
10742     index df5afac0b600..459a7d61326e 100644
10743     --- a/sound/pci/hda/patch_realtek.c
10744     +++ b/sound/pci/hda/patch_realtek.c
10745     @@ -81,6 +81,7 @@ struct alc_spec {
10746    
10747     /* mute LED for HP laptops, see alc269_fixup_mic_mute_hook() */
10748     int mute_led_polarity;
10749     + int micmute_led_polarity;
10750     hda_nid_t mute_led_nid;
10751     hda_nid_t cap_mute_led_nid;
10752    
10753     @@ -4080,11 +4081,9 @@ static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
10754    
10755     /* update LED status via GPIO */
10756     static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask,
10757     - bool enabled)
10758     + int polarity, bool enabled)
10759     {
10760     - struct alc_spec *spec = codec->spec;
10761     -
10762     - if (spec->mute_led_polarity)
10763     + if (polarity)
10764     enabled = !enabled;
10765     alc_update_gpio_data(codec, mask, !enabled); /* muted -> LED on */
10766     }
10767     @@ -4095,7 +4094,8 @@ static void alc_fixup_gpio_mute_hook(void *private_data, int enabled)
10768     struct hda_codec *codec = private_data;
10769     struct alc_spec *spec = codec->spec;
10770    
10771     - alc_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled);
10772     + alc_update_gpio_led(codec, spec->gpio_mute_led_mask,
10773     + spec->mute_led_polarity, enabled);
10774     }
10775    
10776     /* turn on/off mic-mute LED via GPIO per capture hook */
10777     @@ -4104,6 +4104,7 @@ static void alc_gpio_micmute_update(struct hda_codec *codec)
10778     struct alc_spec *spec = codec->spec;
10779    
10780     alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
10781     + spec->micmute_led_polarity,
10782     spec->gen.micmute_led.led_value);
10783     }
10784    
10785     @@ -5808,7 +5809,8 @@ static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
10786    
10787     snd_hda_gen_hp_automute(codec, jack);
10788     /* mute_led_polarity is set to 0, so we pass inverted value here */
10789     - alc_update_gpio_led(codec, 0x10, !spec->gen.hp_jack_present);
10790     + alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
10791     + !spec->gen.hp_jack_present);
10792     }
10793    
10794     /* Manage GPIOs for HP EliteBook Folio 9480m.
10795     diff --git a/sound/soc/codecs/max98373.c b/sound/soc/codecs/max98373.c
10796     index cae1def8902d..96718e3a1ad0 100644
10797     --- a/sound/soc/codecs/max98373.c
10798     +++ b/sound/soc/codecs/max98373.c
10799     @@ -850,8 +850,8 @@ static int max98373_resume(struct device *dev)
10800     {
10801     struct max98373_priv *max98373 = dev_get_drvdata(dev);
10802    
10803     - max98373_reset(max98373, dev);
10804     regcache_cache_only(max98373->regmap, false);
10805     + max98373_reset(max98373, dev);
10806     regcache_sync(max98373->regmap);
10807     return 0;
10808     }
10809     diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
10810     index 19662ee330d6..c83f7f5da96b 100644
10811     --- a/sound/soc/codecs/rt5645.c
10812     +++ b/sound/soc/codecs/rt5645.c
10813     @@ -3625,6 +3625,12 @@ static const struct rt5645_platform_data asus_t100ha_platform_data = {
10814     .inv_jd1_1 = true,
10815     };
10816    
10817     +static const struct rt5645_platform_data asus_t101ha_platform_data = {
10818     + .dmic1_data_pin = RT5645_DMIC_DATA_IN2N,
10819     + .dmic2_data_pin = RT5645_DMIC2_DISABLE,
10820     + .jd_mode = 3,
10821     +};
10822     +
10823     static const struct rt5645_platform_data lenovo_ideapad_miix_310_pdata = {
10824     .jd_mode = 3,
10825     .in2_diff = true,
10826     @@ -3702,6 +3708,14 @@ static const struct dmi_system_id dmi_platform_data[] = {
10827     },
10828     .driver_data = (void *)&asus_t100ha_platform_data,
10829     },
10830     + {
10831     + .ident = "ASUS T101HA",
10832     + .matches = {
10833     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
10834     + DMI_MATCH(DMI_PRODUCT_NAME, "T101HA"),
10835     + },
10836     + .driver_data = (void *)&asus_t101ha_platform_data,
10837     + },
10838     {
10839     .ident = "MINIX Z83-4",
10840     .matches = {
10841     diff --git a/sound/soc/fsl/fsl_asrc_dma.c b/sound/soc/fsl/fsl_asrc_dma.c
10842     index 01052a0808b0..5aee6b8366d2 100644
10843     --- a/sound/soc/fsl/fsl_asrc_dma.c
10844     +++ b/sound/soc/fsl/fsl_asrc_dma.c
10845     @@ -241,6 +241,7 @@ static int fsl_asrc_dma_hw_params(struct snd_pcm_substream *substream,
10846     ret = dmaengine_slave_config(pair->dma_chan[dir], &config_be);
10847     if (ret) {
10848     dev_err(dev, "failed to config DMA channel for Back-End\n");
10849     + dma_release_channel(pair->dma_chan[dir]);
10850     return ret;
10851     }
10852    
10853     diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
10854     index c7a49d03463a..84290be778f0 100644
10855     --- a/sound/soc/fsl/fsl_esai.c
10856     +++ b/sound/soc/fsl/fsl_esai.c
10857     @@ -87,6 +87,10 @@ static irqreturn_t esai_isr(int irq, void *devid)
10858     if ((saisr & (ESAI_SAISR_TUE | ESAI_SAISR_ROE)) &&
10859     esai_priv->reset_at_xrun) {
10860     dev_dbg(&pdev->dev, "reset module for xrun\n");
10861     + regmap_update_bits(esai_priv->regmap, REG_ESAI_TCR,
10862     + ESAI_xCR_xEIE_MASK, 0);
10863     + regmap_update_bits(esai_priv->regmap, REG_ESAI_RCR,
10864     + ESAI_xCR_xEIE_MASK, 0);
10865     tasklet_schedule(&esai_priv->task);
10866     }
10867    
10868     diff --git a/sound/soc/img/img-i2s-in.c b/sound/soc/img/img-i2s-in.c
10869     index fdd2c73fd2fa..869fe0068cbd 100644
10870     --- a/sound/soc/img/img-i2s-in.c
10871     +++ b/sound/soc/img/img-i2s-in.c
10872     @@ -482,6 +482,7 @@ static int img_i2s_in_probe(struct platform_device *pdev)
10873     if (IS_ERR(rst)) {
10874     if (PTR_ERR(rst) == -EPROBE_DEFER) {
10875     ret = -EPROBE_DEFER;
10876     + pm_runtime_put(&pdev->dev);
10877     goto err_suspend;
10878     }
10879    
10880     diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
10881     index e62e1d7815aa..f7964d1ec486 100644
10882     --- a/sound/soc/intel/boards/bytcr_rt5640.c
10883     +++ b/sound/soc/intel/boards/bytcr_rt5640.c
10884     @@ -742,6 +742,30 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
10885     BYT_RT5640_SSP0_AIF1 |
10886     BYT_RT5640_MCLK_EN),
10887     },
10888     + { /* Toshiba Encore WT8-A */
10889     + .matches = {
10890     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
10891     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TOSHIBA WT8-A"),
10892     + },
10893     + .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
10894     + BYT_RT5640_JD_SRC_JD2_IN4N |
10895     + BYT_RT5640_OVCD_TH_2000UA |
10896     + BYT_RT5640_OVCD_SF_0P75 |
10897     + BYT_RT5640_JD_NOT_INV |
10898     + BYT_RT5640_MCLK_EN),
10899     + },
10900     + { /* Toshiba Encore WT10-A */
10901     + .matches = {
10902     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
10903     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TOSHIBA WT10-A-103"),
10904     + },
10905     + .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
10906     + BYT_RT5640_JD_SRC_JD1_IN4P |
10907     + BYT_RT5640_OVCD_TH_2000UA |
10908     + BYT_RT5640_OVCD_SF_0P75 |
10909     + BYT_RT5640_SSP0_AIF2 |
10910     + BYT_RT5640_MCLK_EN),
10911     + },
10912     { /* Catch-all for generic Insyde tablets, must be last */
10913     .matches = {
10914     DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
10915     diff --git a/sound/soc/meson/axg-fifo.c b/sound/soc/meson/axg-fifo.c
10916     index d286dff3171d..898ef1d5608f 100644
10917     --- a/sound/soc/meson/axg-fifo.c
10918     +++ b/sound/soc/meson/axg-fifo.c
10919     @@ -244,7 +244,7 @@ static int axg_fifo_pcm_open(struct snd_pcm_substream *ss)
10920     /* Enable pclk to access registers and clock the fifo ip */
10921     ret = clk_prepare_enable(fifo->pclk);
10922     if (ret)
10923     - return ret;
10924     + goto free_irq;
10925    
10926     /* Setup status2 so it reports the memory pointer */
10927     regmap_update_bits(fifo->map, FIFO_CTRL1,
10928     @@ -264,8 +264,14 @@ static int axg_fifo_pcm_open(struct snd_pcm_substream *ss)
10929     /* Take memory arbitror out of reset */
10930     ret = reset_control_deassert(fifo->arb);
10931     if (ret)
10932     - clk_disable_unprepare(fifo->pclk);
10933     + goto free_clk;
10934     +
10935     + return 0;
10936    
10937     +free_clk:
10938     + clk_disable_unprepare(fifo->pclk);
10939     +free_irq:
10940     + free_irq(fifo->irq, ss);
10941     return ret;
10942     }
10943    
10944     diff --git a/sound/soc/qcom/qdsp6/q6asm-dai.c b/sound/soc/qcom/qdsp6/q6asm-dai.c
10945     index 548eb4fa2da6..9f0ffdcef637 100644
10946     --- a/sound/soc/qcom/qdsp6/q6asm-dai.c
10947     +++ b/sound/soc/qcom/qdsp6/q6asm-dai.c
10948     @@ -171,7 +171,7 @@ static const struct snd_compr_codec_caps q6asm_compr_caps = {
10949     };
10950    
10951     static void event_handler(uint32_t opcode, uint32_t token,
10952     - uint32_t *payload, void *priv)
10953     + void *payload, void *priv)
10954     {
10955     struct q6asm_dai_rtd *prtd = priv;
10956     struct snd_pcm_substream *substream = prtd->substream;
10957     @@ -494,7 +494,7 @@ static struct snd_pcm_ops q6asm_dai_ops = {
10958     };
10959    
10960     static void compress_event_handler(uint32_t opcode, uint32_t token,
10961     - uint32_t *payload, void *priv)
10962     + void *payload, void *priv)
10963     {
10964     struct q6asm_dai_rtd *prtd = priv;
10965     struct snd_compr_stream *substream = prtd->cstream;
10966     diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
10967     index af19010b9d88..8bd49c8a9517 100644
10968     --- a/sound/soc/sh/rcar/gen.c
10969     +++ b/sound/soc/sh/rcar/gen.c
10970     @@ -224,6 +224,14 @@ static int rsnd_gen2_probe(struct rsnd_priv *priv)
10971     RSND_GEN_S_REG(SSI_SYS_STATUS5, 0x884),
10972     RSND_GEN_S_REG(SSI_SYS_STATUS6, 0x888),
10973     RSND_GEN_S_REG(SSI_SYS_STATUS7, 0x88c),
10974     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE0, 0x850),
10975     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE1, 0x854),
10976     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE2, 0x858),
10977     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE3, 0x85c),
10978     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE4, 0x890),
10979     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE5, 0x894),
10980     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE6, 0x898),
10981     + RSND_GEN_S_REG(SSI_SYS_INT_ENABLE7, 0x89c),
10982     RSND_GEN_S_REG(HDMI0_SEL, 0x9e0),
10983     RSND_GEN_S_REG(HDMI1_SEL, 0x9e4),
10984    
10985     diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
10986     index ea6cbaa9743e..d47608ff5fac 100644
10987     --- a/sound/soc/sh/rcar/rsnd.h
10988     +++ b/sound/soc/sh/rcar/rsnd.h
10989     @@ -189,6 +189,14 @@ enum rsnd_reg {
10990     SSI_SYS_STATUS5,
10991     SSI_SYS_STATUS6,
10992     SSI_SYS_STATUS7,
10993     + SSI_SYS_INT_ENABLE0,
10994     + SSI_SYS_INT_ENABLE1,
10995     + SSI_SYS_INT_ENABLE2,
10996     + SSI_SYS_INT_ENABLE3,
10997     + SSI_SYS_INT_ENABLE4,
10998     + SSI_SYS_INT_ENABLE5,
10999     + SSI_SYS_INT_ENABLE6,
11000     + SSI_SYS_INT_ENABLE7,
11001     HDMI0_SEL,
11002     HDMI1_SEL,
11003     SSI9_BUSIF0_MODE,
11004     @@ -237,6 +245,7 @@ enum rsnd_reg {
11005     #define SSI9_BUSIF_ADINR(i) (SSI9_BUSIF0_ADINR + (i))
11006     #define SSI9_BUSIF_DALIGN(i) (SSI9_BUSIF0_DALIGN + (i))
11007     #define SSI_SYS_STATUS(i) (SSI_SYS_STATUS0 + (i))
11008     +#define SSI_SYS_INT_ENABLE(i) (SSI_SYS_INT_ENABLE0 + (i))
11009    
11010    
11011     struct rsnd_priv;
11012     diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
11013     index 4a7d3413917f..47d5ddb526f2 100644
11014     --- a/sound/soc/sh/rcar/ssi.c
11015     +++ b/sound/soc/sh/rcar/ssi.c
11016     @@ -372,6 +372,9 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
11017     u32 wsr = ssi->wsr;
11018     int width;
11019     int is_tdm, is_tdm_split;
11020     + int id = rsnd_mod_id(mod);
11021     + int i;
11022     + u32 sys_int_enable = 0;
11023    
11024     is_tdm = rsnd_runtime_is_tdm(io);
11025     is_tdm_split = rsnd_runtime_is_tdm_split(io);
11026     @@ -447,6 +450,38 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
11027     cr_mode = DIEN; /* PIO : enable Data interrupt */
11028     }
11029    
11030     + /* enable busif buffer over/under run interrupt. */
11031     + if (is_tdm || is_tdm_split) {
11032     + switch (id) {
11033     + case 0:
11034     + case 1:
11035     + case 2:
11036     + case 3:
11037     + case 4:
11038     + for (i = 0; i < 4; i++) {
11039     + sys_int_enable = rsnd_mod_read(mod,
11040     + SSI_SYS_INT_ENABLE(i * 2));
11041     + sys_int_enable |= 0xf << (id * 4);
11042     + rsnd_mod_write(mod,
11043     + SSI_SYS_INT_ENABLE(i * 2),
11044     + sys_int_enable);
11045     + }
11046     +
11047     + break;
11048     + case 9:
11049     + for (i = 0; i < 4; i++) {
11050     + sys_int_enable = rsnd_mod_read(mod,
11051     + SSI_SYS_INT_ENABLE((i * 2) + 1));
11052     + sys_int_enable |= 0xf << 4;
11053     + rsnd_mod_write(mod,
11054     + SSI_SYS_INT_ENABLE((i * 2) + 1),
11055     + sys_int_enable);
11056     + }
11057     +
11058     + break;
11059     + }
11060     + }
11061     +
11062     init_end:
11063     ssi->cr_own = cr_own;
11064     ssi->cr_mode = cr_mode;
11065     @@ -496,6 +531,13 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod,
11066     {
11067     struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
11068     struct device *dev = rsnd_priv_to_dev(priv);
11069     + int is_tdm, is_tdm_split;
11070     + int id = rsnd_mod_id(mod);
11071     + int i;
11072     + u32 sys_int_enable = 0;
11073     +
11074     + is_tdm = rsnd_runtime_is_tdm(io);
11075     + is_tdm_split = rsnd_runtime_is_tdm_split(io);
11076    
11077     if (!rsnd_ssi_is_run_mods(mod, io))
11078     return 0;
11079     @@ -517,6 +559,38 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod,
11080     ssi->wsr = 0;
11081     }
11082    
11083     + /* disable busif buffer over/under run interrupt. */
11084     + if (is_tdm || is_tdm_split) {
11085     + switch (id) {
11086     + case 0:
11087     + case 1:
11088     + case 2:
11089     + case 3:
11090     + case 4:
11091     + for (i = 0; i < 4; i++) {
11092     + sys_int_enable = rsnd_mod_read(mod,
11093     + SSI_SYS_INT_ENABLE(i * 2));
11094     + sys_int_enable &= ~(0xf << (id * 4));
11095     + rsnd_mod_write(mod,
11096     + SSI_SYS_INT_ENABLE(i * 2),
11097     + sys_int_enable);
11098     + }
11099     +
11100     + break;
11101     + case 9:
11102     + for (i = 0; i < 4; i++) {
11103     + sys_int_enable = rsnd_mod_read(mod,
11104     + SSI_SYS_INT_ENABLE((i * 2) + 1));
11105     + sys_int_enable &= ~(0xf << 4);
11106     + rsnd_mod_write(mod,
11107     + SSI_SYS_INT_ENABLE((i * 2) + 1),
11108     + sys_int_enable);
11109     + }
11110     +
11111     + break;
11112     + }
11113     + }
11114     +
11115     return 0;
11116     }
11117    
11118     @@ -622,6 +696,11 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
11119     int enable)
11120     {
11121     u32 val = 0;
11122     + int is_tdm, is_tdm_split;
11123     + int id = rsnd_mod_id(mod);
11124     +
11125     + is_tdm = rsnd_runtime_is_tdm(io);
11126     + is_tdm_split = rsnd_runtime_is_tdm_split(io);
11127    
11128     if (rsnd_is_gen1(priv))
11129     return 0;
11130     @@ -635,6 +714,19 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
11131     if (enable)
11132     val = rsnd_ssi_is_dma_mode(mod) ? 0x0e000000 : 0x0f000000;
11133    
11134     + if (is_tdm || is_tdm_split) {
11135     + switch (id) {
11136     + case 0:
11137     + case 1:
11138     + case 2:
11139     + case 3:
11140     + case 4:
11141     + case 9:
11142     + val |= 0x0000ff00;
11143     + break;
11144     + }
11145     + }
11146     +
11147     rsnd_mod_write(mod, SSI_INT_ENABLE, val);
11148    
11149     return 0;
11150     @@ -651,6 +743,12 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
11151     u32 status;
11152     bool elapsed = false;
11153     bool stop = false;
11154     + int id = rsnd_mod_id(mod);
11155     + int i;
11156     + int is_tdm, is_tdm_split;
11157     +
11158     + is_tdm = rsnd_runtime_is_tdm(io);
11159     + is_tdm_split = rsnd_runtime_is_tdm_split(io);
11160    
11161     spin_lock(&priv->lock);
11162    
11163     @@ -672,6 +770,53 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
11164     stop = true;
11165     }
11166    
11167     + status = 0;
11168     +
11169     + if (is_tdm || is_tdm_split) {
11170     + switch (id) {
11171     + case 0:
11172     + case 1:
11173     + case 2:
11174     + case 3:
11175     + case 4:
11176     + for (i = 0; i < 4; i++) {
11177     + status = rsnd_mod_read(mod,
11178     + SSI_SYS_STATUS(i * 2));
11179     + status &= 0xf << (id * 4);
11180     +
11181     + if (status) {
11182     + rsnd_dbg_irq_status(dev,
11183     + "%s err status : 0x%08x\n",
11184     + rsnd_mod_name(mod), status);
11185     + rsnd_mod_write(mod,
11186     + SSI_SYS_STATUS(i * 2),
11187     + 0xf << (id * 4));
11188     + stop = true;
11189     + break;
11190     + }
11191     + }
11192     + break;
11193     + case 9:
11194     + for (i = 0; i < 4; i++) {
11195     + status = rsnd_mod_read(mod,
11196     + SSI_SYS_STATUS((i * 2) + 1));
11197     + status &= 0xf << 4;
11198     +
11199     + if (status) {
11200     + rsnd_dbg_irq_status(dev,
11201     + "%s err status : 0x%08x\n",
11202     + rsnd_mod_name(mod), status);
11203     + rsnd_mod_write(mod,
11204     + SSI_SYS_STATUS((i * 2) + 1),
11205     + 0xf << 4);
11206     + stop = true;
11207     + break;
11208     + }
11209     + }
11210     + break;
11211     + }
11212     + }
11213     +
11214     rsnd_ssi_status_clear(mod);
11215     rsnd_ssi_interrupt_out:
11216     spin_unlock(&priv->lock);
11217     diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
11218     index 0215e2c94bf0..9df20768a8f2 100644
11219     --- a/sound/soc/soc-core.c
11220     +++ b/sound/soc/soc-core.c
11221     @@ -1895,9 +1895,25 @@ match:
11222     dai_link->platforms->name = component->name;
11223    
11224     /* convert non BE into BE */
11225     - dai_link->no_pcm = 1;
11226     - dai_link->dpcm_playback = 1;
11227     - dai_link->dpcm_capture = 1;
11228     + if (!dai_link->no_pcm) {
11229     + dai_link->no_pcm = 1;
11230     +
11231     + if (dai_link->dpcm_playback)
11232     + dev_warn(card->dev,
11233     + "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_playback=1\n",
11234     + dai_link->name);
11235     + if (dai_link->dpcm_capture)
11236     + dev_warn(card->dev,
11237     + "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_capture=1\n",
11238     + dai_link->name);
11239     +
11240     + /* convert normal link into DPCM one */
11241     + if (!(dai_link->dpcm_playback ||
11242     + dai_link->dpcm_capture)) {
11243     + dai_link->dpcm_playback = !dai_link->capture_only;
11244     + dai_link->dpcm_capture = !dai_link->playback_only;
11245     + }
11246     + }
11247    
11248     /* override any BE fixups */
11249     dai_link->be_hw_params_fixup =
11250     diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
11251     index 12aec140819a..2a6b84d2781e 100644
11252     --- a/sound/soc/sof/core.c
11253     +++ b/sound/soc/sof/core.c
11254     @@ -372,6 +372,7 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
11255     /* init the IPC */
11256     sdev->ipc = snd_sof_ipc_init(sdev);
11257     if (!sdev->ipc) {
11258     + ret = -ENOMEM;
11259     dev_err(sdev->dev, "error: failed to init DSP IPC %d\n", ret);
11260     goto ipc_err;
11261     }
11262     diff --git a/sound/soc/sof/imx/Kconfig b/sound/soc/sof/imx/Kconfig
11263     index 71f318bc2c74..b4f0426685c4 100644
11264     --- a/sound/soc/sof/imx/Kconfig
11265     +++ b/sound/soc/sof/imx/Kconfig
11266     @@ -14,7 +14,7 @@ if SND_SOC_SOF_IMX_TOPLEVEL
11267     config SND_SOC_SOF_IMX8_SUPPORT
11268     bool "SOF support for i.MX8"
11269     depends on IMX_SCU
11270     - depends on IMX_DSP
11271     + select IMX_DSP
11272     help
11273     This adds support for Sound Open Firmware for NXP i.MX8 platforms
11274     Say Y if you have such a device.
11275     diff --git a/sound/soc/sof/nocodec.c b/sound/soc/sof/nocodec.c
11276     index 3d128e5a132c..ea0fe9a09f3f 100644
11277     --- a/sound/soc/sof/nocodec.c
11278     +++ b/sound/soc/sof/nocodec.c
11279     @@ -52,8 +52,10 @@ static int sof_nocodec_bes_setup(struct device *dev,
11280     links[i].platforms->name = dev_name(dev);
11281     links[i].codecs->dai_name = "snd-soc-dummy-dai";
11282     links[i].codecs->name = "snd-soc-dummy";
11283     - links[i].dpcm_playback = 1;
11284     - links[i].dpcm_capture = 1;
11285     + if (ops->drv[i].playback.channels_min)
11286     + links[i].dpcm_playback = 1;
11287     + if (ops->drv[i].capture.channels_min)
11288     + links[i].dpcm_capture = 1;
11289     }
11290    
11291     card->dai_link = links;
11292     diff --git a/sound/soc/sof/pm.c b/sound/soc/sof/pm.c
11293     index 195af259e78e..128680b09c20 100644
11294     --- a/sound/soc/sof/pm.c
11295     +++ b/sound/soc/sof/pm.c
11296     @@ -266,7 +266,10 @@ static int sof_resume(struct device *dev, bool runtime_resume)
11297     int ret;
11298    
11299     /* do nothing if dsp resume callbacks are not set */
11300     - if (!sof_ops(sdev)->resume || !sof_ops(sdev)->runtime_resume)
11301     + if (!runtime_resume && !sof_ops(sdev)->resume)
11302     + return 0;
11303     +
11304     + if (runtime_resume && !sof_ops(sdev)->runtime_resume)
11305     return 0;
11306    
11307     /* DSP was never successfully started, nothing to resume */
11308     @@ -346,7 +349,10 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
11309     int ret;
11310    
11311     /* do nothing if dsp suspend callback is not set */
11312     - if (!sof_ops(sdev)->suspend)
11313     + if (!runtime_suspend && !sof_ops(sdev)->suspend)
11314     + return 0;
11315     +
11316     + if (runtime_suspend && !sof_ops(sdev)->runtime_suspend)
11317     return 0;
11318    
11319     if (sdev->fw_state != SOF_FW_BOOT_COMPLETE)
11320     diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c
11321     index 6211dfda2195..0fa01cacfec9 100644
11322     --- a/sound/soc/tegra/tegra_wm8903.c
11323     +++ b/sound/soc/tegra/tegra_wm8903.c
11324     @@ -159,6 +159,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
11325     struct snd_soc_component *component = codec_dai->component;
11326     struct snd_soc_card *card = rtd->card;
11327     struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
11328     + int shrt = 0;
11329    
11330     if (gpio_is_valid(machine->gpio_hp_det)) {
11331     tegra_wm8903_hp_jack_gpio.gpio = machine->gpio_hp_det;
11332     @@ -171,12 +172,15 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
11333     &tegra_wm8903_hp_jack_gpio);
11334     }
11335    
11336     + if (of_property_read_bool(card->dev->of_node, "nvidia,headset"))
11337     + shrt = SND_JACK_MICROPHONE;
11338     +
11339     snd_soc_card_jack_new(rtd->card, "Mic Jack", SND_JACK_MICROPHONE,
11340     &tegra_wm8903_mic_jack,
11341     tegra_wm8903_mic_jack_pins,
11342     ARRAY_SIZE(tegra_wm8903_mic_jack_pins));
11343     wm8903_mic_detect(component, &tegra_wm8903_mic_jack, SND_JACK_MICROPHONE,
11344     - 0);
11345     + shrt);
11346    
11347     snd_soc_dapm_force_enable_pin(&card->dapm, "MICBIAS");
11348    
11349     diff --git a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinci-mcasp.c
11350     index 7aa3c32e4a49..0541071f454b 100644
11351     --- a/sound/soc/ti/davinci-mcasp.c
11352     +++ b/sound/soc/ti/davinci-mcasp.c
11353     @@ -1875,8 +1875,10 @@ static int davinci_mcasp_get_dma_type(struct davinci_mcasp *mcasp)
11354     PTR_ERR(chan));
11355     return PTR_ERR(chan);
11356     }
11357     - if (WARN_ON(!chan->device || !chan->device->dev))
11358     + if (WARN_ON(!chan->device || !chan->device->dev)) {
11359     + dma_release_channel(chan);
11360     return -EINVAL;
11361     + }
11362    
11363     if (chan->device->dev->of_node)
11364     ret = of_property_read_string(chan->device->dev->of_node,
11365     diff --git a/sound/soc/ti/omap-mcbsp.c b/sound/soc/ti/omap-mcbsp.c
11366     index 26b503bbdb5f..3273b317fa3b 100644
11367     --- a/sound/soc/ti/omap-mcbsp.c
11368     +++ b/sound/soc/ti/omap-mcbsp.c
11369     @@ -686,7 +686,7 @@ static int omap_mcbsp_init(struct platform_device *pdev)
11370     mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp,
11371     SNDRV_PCM_STREAM_CAPTURE);
11372    
11373     - mcbsp->fclk = clk_get(&pdev->dev, "fck");
11374     + mcbsp->fclk = devm_clk_get(&pdev->dev, "fck");
11375     if (IS_ERR(mcbsp->fclk)) {
11376     ret = PTR_ERR(mcbsp->fclk);
11377     dev_err(mcbsp->dev, "unable to get fck: %d\n", ret);
11378     @@ -711,7 +711,7 @@ static int omap_mcbsp_init(struct platform_device *pdev)
11379     if (ret) {
11380     dev_err(mcbsp->dev,
11381     "Unable to create additional controls\n");
11382     - goto err_thres;
11383     + return ret;
11384     }
11385     }
11386    
11387     @@ -724,8 +724,6 @@ static int omap_mcbsp_init(struct platform_device *pdev)
11388     err_st:
11389     if (mcbsp->pdata->buffer_size)
11390     sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group);
11391     -err_thres:
11392     - clk_put(mcbsp->fclk);
11393     return ret;
11394     }
11395    
11396     @@ -1442,8 +1440,6 @@ static int asoc_mcbsp_remove(struct platform_device *pdev)
11397    
11398     omap_mcbsp_st_cleanup(pdev);
11399    
11400     - clk_put(mcbsp->fclk);
11401     -
11402     return 0;
11403     }
11404    
11405     diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
11406     index 2873e8e6f02b..cdae1190b930 100644
11407     --- a/sound/soc/ux500/mop500.c
11408     +++ b/sound/soc/ux500/mop500.c
11409     @@ -63,10 +63,11 @@ static void mop500_of_node_put(void)
11410     {
11411     int i;
11412    
11413     - for (i = 0; i < 2; i++) {
11414     + for (i = 0; i < 2; i++)
11415     of_node_put(mop500_dai_links[i].cpus->of_node);
11416     - of_node_put(mop500_dai_links[i].codecs->of_node);
11417     - }
11418     +
11419     + /* Both links use the same codec, which is refcounted only once */
11420     + of_node_put(mop500_dai_links[0].codecs->of_node);
11421     }
11422    
11423     static int mop500_of_probe(struct platform_device *pdev,
11424     @@ -81,7 +82,9 @@ static int mop500_of_probe(struct platform_device *pdev,
11425    
11426     if (!(msp_np[0] && msp_np[1] && codec_np)) {
11427     dev_err(&pdev->dev, "Phandle missing or invalid\n");
11428     - mop500_of_node_put();
11429     + for (i = 0; i < 2; i++)
11430     + of_node_put(msp_np[i]);
11431     + of_node_put(codec_np);
11432     return -EINVAL;
11433     }
11434    
11435     diff --git a/sound/usb/card.h b/sound/usb/card.h
11436     index 395403a2d33f..d6219fba9699 100644
11437     --- a/sound/usb/card.h
11438     +++ b/sound/usb/card.h
11439     @@ -84,6 +84,10 @@ struct snd_usb_endpoint {
11440     dma_addr_t sync_dma; /* DMA address of syncbuf */
11441    
11442     unsigned int pipe; /* the data i/o pipe */
11443     + unsigned int framesize[2]; /* small/large frame sizes in samples */
11444     + unsigned int sample_rem; /* remainder from division fs/fps */
11445     + unsigned int sample_accum; /* sample accumulator */
11446     + unsigned int fps; /* frames per second */
11447     unsigned int freqn; /* nominal sampling rate in fs/fps in Q16.16 format */
11448     unsigned int freqm; /* momentary sampling rate in fs/fps in Q16.16 format */
11449     int freqshift; /* how much to shift the feedback value to get Q16.16 */
11450     @@ -104,6 +108,7 @@ struct snd_usb_endpoint {
11451     int iface, altsetting;
11452     int skip_packets; /* quirks for devices to ignore the first n packets
11453     in a stream */
11454     + bool is_implicit_feedback; /* This endpoint is used as implicit feedback */
11455    
11456     spinlock_t lock;
11457     struct list_head list;
11458     diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
11459     index 4a9a2f6ef5a4..9bea7d3f99f8 100644
11460     --- a/sound/usb/endpoint.c
11461     +++ b/sound/usb/endpoint.c
11462     @@ -124,12 +124,12 @@ int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
11463    
11464     /*
11465     * For streaming based on information derived from sync endpoints,
11466     - * prepare_outbound_urb_sizes() will call next_packet_size() to
11467     + * prepare_outbound_urb_sizes() will call slave_next_packet_size() to
11468     * determine the number of samples to be sent in the next packet.
11469     *
11470     - * For implicit feedback, next_packet_size() is unused.
11471     + * For implicit feedback, slave_next_packet_size() is unused.
11472     */
11473     -int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
11474     +int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep)
11475     {
11476     unsigned long flags;
11477     int ret;
11478     @@ -146,6 +146,29 @@ int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
11479     return ret;
11480     }
11481    
11482     +/*
11483     + * For adaptive and synchronous endpoints, prepare_outbound_urb_sizes()
11484     + * will call next_packet_size() to determine the number of samples to be
11485     + * sent in the next packet.
11486     + */
11487     +int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
11488     +{
11489     + int ret;
11490     +
11491     + if (ep->fill_max)
11492     + return ep->maxframesize;
11493     +
11494     + ep->sample_accum += ep->sample_rem;
11495     + if (ep->sample_accum >= ep->fps) {
11496     + ep->sample_accum -= ep->fps;
11497     + ret = ep->framesize[1];
11498     + } else {
11499     + ret = ep->framesize[0];
11500     + }
11501     +
11502     + return ret;
11503     +}
11504     +
11505     static void retire_outbound_urb(struct snd_usb_endpoint *ep,
11506     struct snd_urb_ctx *urb_ctx)
11507     {
11508     @@ -190,6 +213,8 @@ static void prepare_silent_urb(struct snd_usb_endpoint *ep,
11509    
11510     if (ctx->packet_size[i])
11511     counts = ctx->packet_size[i];
11512     + else if (ep->sync_master)
11513     + counts = snd_usb_endpoint_slave_next_packet_size(ep);
11514     else
11515     counts = snd_usb_endpoint_next_packet_size(ep);
11516    
11517     @@ -321,17 +346,17 @@ static void queue_pending_output_urbs(struct snd_usb_endpoint *ep)
11518     ep->next_packet_read_pos %= MAX_URBS;
11519    
11520     /* take URB out of FIFO */
11521     - if (!list_empty(&ep->ready_playback_urbs))
11522     + if (!list_empty(&ep->ready_playback_urbs)) {
11523     ctx = list_first_entry(&ep->ready_playback_urbs,
11524     struct snd_urb_ctx, ready_list);
11525     + list_del_init(&ctx->ready_list);
11526     + }
11527     }
11528     spin_unlock_irqrestore(&ep->lock, flags);
11529    
11530     if (ctx == NULL)
11531     return;
11532    
11533     - list_del_init(&ctx->ready_list);
11534     -
11535     /* copy over the length information */
11536     for (i = 0; i < packet->packets; i++)
11537     ctx->packet_size[i] = packet->packet_size[i];
11538     @@ -497,6 +522,8 @@ struct snd_usb_endpoint *snd_usb_add_endpoint(struct snd_usb_audio *chip,
11539    
11540     list_add_tail(&ep->list, &chip->ep_list);
11541    
11542     + ep->is_implicit_feedback = 0;
11543     +
11544     __exit_unlock:
11545     mutex_unlock(&chip->mutex);
11546    
11547     @@ -596,6 +623,178 @@ static void release_urbs(struct snd_usb_endpoint *ep, int force)
11548     ep->nurbs = 0;
11549     }
11550    
11551     +/*
11552     + * Check data endpoint for format differences
11553     + */
11554     +static bool check_ep_params(struct snd_usb_endpoint *ep,
11555     + snd_pcm_format_t pcm_format,
11556     + unsigned int channels,
11557     + unsigned int period_bytes,
11558     + unsigned int frames_per_period,
11559     + unsigned int periods_per_buffer,
11560     + struct audioformat *fmt,
11561     + struct snd_usb_endpoint *sync_ep)
11562     +{
11563     + unsigned int maxsize, minsize, packs_per_ms, max_packs_per_urb;
11564     + unsigned int max_packs_per_period, urbs_per_period, urb_packs;
11565     + unsigned int max_urbs;
11566     + int frame_bits = snd_pcm_format_physical_width(pcm_format) * channels;
11567     + int tx_length_quirk = (ep->chip->tx_length_quirk &&
11568     + usb_pipeout(ep->pipe));
11569     + bool ret = 1;
11570     +
11571     + if (pcm_format == SNDRV_PCM_FORMAT_DSD_U16_LE && fmt->dsd_dop) {
11572     + /*
11573     + * When operating in DSD DOP mode, the size of a sample frame
11574     + * in hardware differs from the actual physical format width
11575     + * because we need to make room for the DOP markers.
11576     + */
11577     + frame_bits += channels << 3;
11578     + }
11579     +
11580     + ret = ret && (ep->datainterval == fmt->datainterval);
11581     + ret = ret && (ep->stride == frame_bits >> 3);
11582     +
11583     + switch (pcm_format) {
11584     + case SNDRV_PCM_FORMAT_U8:
11585     + ret = ret && (ep->silence_value == 0x80);
11586     + break;
11587     + case SNDRV_PCM_FORMAT_DSD_U8:
11588     + case SNDRV_PCM_FORMAT_DSD_U16_LE:
11589     + case SNDRV_PCM_FORMAT_DSD_U32_LE:
11590     + case SNDRV_PCM_FORMAT_DSD_U16_BE:
11591     + case SNDRV_PCM_FORMAT_DSD_U32_BE:
11592     + ret = ret && (ep->silence_value == 0x69);
11593     + break;
11594     + default:
11595     + ret = ret && (ep->silence_value == 0);
11596     + }
11597     +
11598     + /* assume max. frequency is 50% higher than nominal */
11599     + ret = ret && (ep->freqmax == ep->freqn + (ep->freqn >> 1));
11600     + /* Round up freqmax to nearest integer in order to calculate maximum
11601     + * packet size, which must represent a whole number of frames.
11602     + * This is accomplished by adding 0x0.ffff before converting the
11603     + * Q16.16 format into integer.
11604     + * In order to accurately calculate the maximum packet size when
11605     + * the data interval is more than 1 (i.e. ep->datainterval > 0),
11606     + * multiply by the data interval prior to rounding. For instance,
11607     + * a freqmax of 41 kHz will result in a max packet size of 6 (5.125)
11608     + * frames with a data interval of 1, but 11 (10.25) frames with a
11609     + * data interval of 2.
11610     + * (ep->freqmax << ep->datainterval overflows at 8.192 MHz for the
11611     + * maximum datainterval value of 3, at USB full speed, higher for
11612     + * USB high speed, noting that ep->freqmax is in units of
11613     + * frames per packet in Q16.16 format.)
11614     + */
11615     + maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) *
11616     + (frame_bits >> 3);
11617     + if (tx_length_quirk)
11618     + maxsize += sizeof(__le32); /* Space for length descriptor */
11619     + /* but wMaxPacketSize might reduce this */
11620     + if (ep->maxpacksize && ep->maxpacksize < maxsize) {
11621     + /* whatever fits into a max. size packet */
11622     + unsigned int data_maxsize = maxsize = ep->maxpacksize;
11623     +
11624     + if (tx_length_quirk)
11625     + /* Need to remove the length descriptor to calc freq */
11626     + data_maxsize -= sizeof(__le32);
11627     + ret = ret && (ep->freqmax == (data_maxsize / (frame_bits >> 3))
11628     + << (16 - ep->datainterval));
11629     + }
11630     +
11631     + if (ep->fill_max)
11632     + ret = ret && (ep->curpacksize == ep->maxpacksize);
11633     + else
11634     + ret = ret && (ep->curpacksize == maxsize);
11635     +
11636     + if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL) {
11637     + packs_per_ms = 8 >> ep->datainterval;
11638     + max_packs_per_urb = MAX_PACKS_HS;
11639     + } else {
11640     + packs_per_ms = 1;
11641     + max_packs_per_urb = MAX_PACKS;
11642     + }
11643     + if (sync_ep && !snd_usb_endpoint_implicit_feedback_sink(ep))
11644     + max_packs_per_urb = min(max_packs_per_urb,
11645     + 1U << sync_ep->syncinterval);
11646     + max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval);
11647     +
11648     + /*
11649     + * Capture endpoints need to use small URBs because there's no way
11650     + * to tell in advance where the next period will end, and we don't
11651     + * want the next URB to complete much after the period ends.
11652     + *
11653     + * Playback endpoints with implicit sync much use the same parameters
11654     + * as their corresponding capture endpoint.
11655     + */
11656     + if (usb_pipein(ep->pipe) ||
11657     + snd_usb_endpoint_implicit_feedback_sink(ep)) {
11658     +
11659     + urb_packs = packs_per_ms;
11660     + /*
11661     + * Wireless devices can poll at a max rate of once per 4ms.
11662     + * For dataintervals less than 5, increase the packet count to
11663     + * allow the host controller to use bursting to fill in the
11664     + * gaps.
11665     + */
11666     + if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) {
11667     + int interval = ep->datainterval;
11668     +
11669     + while (interval < 5) {
11670     + urb_packs <<= 1;
11671     + ++interval;
11672     + }
11673     + }
11674     + /* make capture URBs <= 1 ms and smaller than a period */
11675     + urb_packs = min(max_packs_per_urb, urb_packs);
11676     + while (urb_packs > 1 && urb_packs * maxsize >= period_bytes)
11677     + urb_packs >>= 1;
11678     + ret = ret && (ep->nurbs == MAX_URBS);
11679     +
11680     + /*
11681     + * Playback endpoints without implicit sync are adjusted so that
11682     + * a period fits as evenly as possible in the smallest number of
11683     + * URBs. The total number of URBs is adjusted to the size of the
11684     + * ALSA buffer, subject to the MAX_URBS and MAX_QUEUE limits.
11685     + */
11686     + } else {
11687     + /* determine how small a packet can be */
11688     + minsize = (ep->freqn >> (16 - ep->datainterval)) *
11689     + (frame_bits >> 3);
11690     + /* with sync from device, assume it can be 12% lower */
11691     + if (sync_ep)
11692     + minsize -= minsize >> 3;
11693     + minsize = max(minsize, 1u);
11694     +
11695     + /* how many packets will contain an entire ALSA period? */
11696     + max_packs_per_period = DIV_ROUND_UP(period_bytes, minsize);
11697     +
11698     + /* how many URBs will contain a period? */
11699     + urbs_per_period = DIV_ROUND_UP(max_packs_per_period,
11700     + max_packs_per_urb);
11701     + /* how many packets are needed in each URB? */
11702     + urb_packs = DIV_ROUND_UP(max_packs_per_period, urbs_per_period);
11703     +
11704     + /* limit the number of frames in a single URB */
11705     + ret = ret && (ep->max_urb_frames ==
11706     + DIV_ROUND_UP(frames_per_period, urbs_per_period));
11707     +
11708     + /* try to use enough URBs to contain an entire ALSA buffer */
11709     + max_urbs = min((unsigned) MAX_URBS,
11710     + MAX_QUEUE * packs_per_ms / urb_packs);
11711     + ret = ret && (ep->nurbs == min(max_urbs,
11712     + urbs_per_period * periods_per_buffer));
11713     + }
11714     +
11715     + ret = ret && (ep->datainterval == fmt->datainterval);
11716     + ret = ret && (ep->maxpacksize == fmt->maxpacksize);
11717     + ret = ret &&
11718     + (ep->fill_max == !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX));
11719     +
11720     + return ret;
11721     +}
11722     +
11723     /*
11724     * configure a data endpoint
11725     */
11726     @@ -861,10 +1060,23 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
11727     int err;
11728    
11729     if (ep->use_count != 0) {
11730     - usb_audio_warn(ep->chip,
11731     - "Unable to change format on ep #%x: already in use\n",
11732     - ep->ep_num);
11733     - return -EBUSY;
11734     + bool check = ep->is_implicit_feedback &&
11735     + check_ep_params(ep, pcm_format,
11736     + channels, period_bytes,
11737     + period_frames, buffer_periods,
11738     + fmt, sync_ep);
11739     +
11740     + if (!check) {
11741     + usb_audio_warn(ep->chip,
11742     + "Unable to change format on ep #%x: already in use\n",
11743     + ep->ep_num);
11744     + return -EBUSY;
11745     + }
11746     +
11747     + usb_audio_dbg(ep->chip,
11748     + "Ep #%x already in use as implicit feedback but format not changed\n",
11749     + ep->ep_num);
11750     + return 0;
11751     }
11752    
11753     /* release old buffers, if any */
11754     @@ -874,10 +1086,17 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
11755     ep->maxpacksize = fmt->maxpacksize;
11756     ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
11757    
11758     - if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL)
11759     + if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) {
11760     ep->freqn = get_usb_full_speed_rate(rate);
11761     - else
11762     + ep->fps = 1000;
11763     + } else {
11764     ep->freqn = get_usb_high_speed_rate(rate);
11765     + ep->fps = 8000;
11766     + }
11767     +
11768     + ep->sample_rem = rate % ep->fps;
11769     + ep->framesize[0] = rate / ep->fps;
11770     + ep->framesize[1] = (rate + (ep->fps - 1)) / ep->fps;
11771    
11772     /* calculate the frequency in 16.16 format */
11773     ep->freqm = ep->freqn;
11774     @@ -936,6 +1155,7 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
11775     ep->active_mask = 0;
11776     ep->unlink_mask = 0;
11777     ep->phase = 0;
11778     + ep->sample_accum = 0;
11779    
11780     snd_usb_endpoint_start_quirk(ep);
11781    
11782     diff --git a/sound/usb/endpoint.h b/sound/usb/endpoint.h
11783     index 63a39d4fa8d8..d23fa0a8c11b 100644
11784     --- a/sound/usb/endpoint.h
11785     +++ b/sound/usb/endpoint.h
11786     @@ -28,6 +28,7 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep);
11787     void snd_usb_endpoint_free(struct snd_usb_endpoint *ep);
11788    
11789     int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep);
11790     +int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep);
11791     int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
11792    
11793     void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
11794     diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
11795     index ad8f38380aa3..6c391e5fad2a 100644
11796     --- a/sound/usb/pcm.c
11797     +++ b/sound/usb/pcm.c
11798     @@ -386,6 +386,8 @@ add_sync_ep:
11799     if (!subs->sync_endpoint)
11800     return -EINVAL;
11801    
11802     + subs->sync_endpoint->is_implicit_feedback = 1;
11803     +
11804     subs->data_endpoint->sync_master = subs->sync_endpoint;
11805    
11806     return 1;
11807     @@ -484,12 +486,15 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
11808     implicit_fb ?
11809     SND_USB_ENDPOINT_TYPE_DATA :
11810     SND_USB_ENDPOINT_TYPE_SYNC);
11811     +
11812     if (!subs->sync_endpoint) {
11813     if (is_playback && attr == USB_ENDPOINT_SYNC_NONE)
11814     return 0;
11815     return -EINVAL;
11816     }
11817    
11818     + subs->sync_endpoint->is_implicit_feedback = implicit_fb;
11819     +
11820     subs->data_endpoint->sync_master = subs->sync_endpoint;
11821    
11822     return 0;
11823     @@ -1575,6 +1580,8 @@ static void prepare_playback_urb(struct snd_usb_substream *subs,
11824     for (i = 0; i < ctx->packets; i++) {
11825     if (ctx->packet_size[i])
11826     counts = ctx->packet_size[i];
11827     + else if (ep->sync_master)
11828     + counts = snd_usb_endpoint_slave_next_packet_size(ep);
11829     else
11830     counts = snd_usb_endpoint_next_packet_size(ep);
11831    
11832     diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c
11833     index 87f27e2664c5..d9e386b8f47e 100644
11834     --- a/tools/lib/bpf/btf_dump.c
11835     +++ b/tools/lib/bpf/btf_dump.c
11836     @@ -1141,6 +1141,20 @@ static void btf_dump_emit_mods(struct btf_dump *d, struct id_stack *decl_stack)
11837     }
11838     }
11839    
11840     +static void btf_dump_drop_mods(struct btf_dump *d, struct id_stack *decl_stack)
11841     +{
11842     + const struct btf_type *t;
11843     + __u32 id;
11844     +
11845     + while (decl_stack->cnt) {
11846     + id = decl_stack->ids[decl_stack->cnt - 1];
11847     + t = btf__type_by_id(d->btf, id);
11848     + if (!btf_is_mod(t))
11849     + return;
11850     + decl_stack->cnt--;
11851     + }
11852     +}
11853     +
11854     static void btf_dump_emit_name(const struct btf_dump *d,
11855     const char *name, bool last_was_ptr)
11856     {
11857     @@ -1239,14 +1253,7 @@ static void btf_dump_emit_type_chain(struct btf_dump *d,
11858     * a const/volatile modifier for array, so we are
11859     * going to silently skip them here.
11860     */
11861     - while (decls->cnt) {
11862     - next_id = decls->ids[decls->cnt - 1];
11863     - next_t = btf__type_by_id(d->btf, next_id);
11864     - if (btf_is_mod(next_t))
11865     - decls->cnt--;
11866     - else
11867     - break;
11868     - }
11869     + btf_dump_drop_mods(d, decls);
11870    
11871     if (decls->cnt == 0) {
11872     btf_dump_emit_name(d, fname, last_was_ptr);
11873     @@ -1274,7 +1281,15 @@ static void btf_dump_emit_type_chain(struct btf_dump *d,
11874     __u16 vlen = btf_vlen(t);
11875     int i;
11876    
11877     - btf_dump_emit_mods(d, decls);
11878     + /*
11879     + * GCC emits extra volatile qualifier for
11880     + * __attribute__((noreturn)) function pointers. Clang
11881     + * doesn't do it. It's a GCC quirk for backwards
11882     + * compatibility with code written for GCC <2.5. So,
11883     + * similarly to extra qualifiers for array, just drop
11884     + * them, instead of handling them.
11885     + */
11886     + btf_dump_drop_mods(d, decls);
11887     if (decls->cnt) {
11888     btf_dump_printf(d, " (");
11889     btf_dump_emit_type_chain(d, decls, fname, lvl);
11890     diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
11891     index 4d8db41b949a..d3c0b04e2e22 100644
11892     --- a/tools/perf/builtin-report.c
11893     +++ b/tools/perf/builtin-report.c
11894     @@ -462,8 +462,7 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report
11895     if (rep->time_str)
11896     ret += fprintf(fp, " (time slices: %s)", rep->time_str);
11897    
11898     - if (symbol_conf.show_ref_callgraph &&
11899     - strstr(evname, "call-graph=no")) {
11900     + if (symbol_conf.show_ref_callgraph && evname && strstr(evname, "call-graph=no")) {
11901     ret += fprintf(fp, ", show reference callgraph");
11902     }
11903    
11904     diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
11905     index ed3b0ac2f785..373e399e57d2 100644
11906     --- a/tools/perf/util/stat-display.c
11907     +++ b/tools/perf/util/stat-display.c
11908     @@ -661,7 +661,7 @@ static void print_aggr(struct perf_stat_config *config,
11909     int s;
11910     bool first;
11911    
11912     - if (!(config->aggr_map || config->aggr_get_id))
11913     + if (!config->aggr_map || !config->aggr_get_id)
11914     return;
11915    
11916     aggr_update_shadow(config, evlist);
11917     @@ -1140,7 +1140,7 @@ static void print_percore(struct perf_stat_config *config,
11918     int s;
11919     bool first = true;
11920    
11921     - if (!(config->aggr_map || config->aggr_get_id))
11922     + if (!config->aggr_map || !config->aggr_get_id)
11923     return;
11924    
11925     for (s = 0; s < config->aggr_map->nr; s++) {
11926     diff --git a/tools/testing/selftests/networking/timestamping/timestamping.c b/tools/testing/selftests/networking/timestamping/timestamping.c
11927     index aca3491174a1..f4bb4fef0f39 100644
11928     --- a/tools/testing/selftests/networking/timestamping/timestamping.c
11929     +++ b/tools/testing/selftests/networking/timestamping/timestamping.c
11930     @@ -313,10 +313,16 @@ int main(int argc, char **argv)
11931     int val;
11932     socklen_t len;
11933     struct timeval next;
11934     + size_t if_len;
11935    
11936     if (argc < 2)
11937     usage(0);
11938     interface = argv[1];
11939     + if_len = strlen(interface);
11940     + if (if_len >= IFNAMSIZ) {
11941     + printf("interface name exceeds IFNAMSIZ\n");
11942     + exit(1);
11943     + }
11944    
11945     for (i = 2; i < argc; i++) {
11946     if (!strcasecmp(argv[i], "SO_TIMESTAMP"))
11947     @@ -350,12 +356,12 @@ int main(int argc, char **argv)
11948     bail("socket");
11949    
11950     memset(&device, 0, sizeof(device));
11951     - strncpy(device.ifr_name, interface, sizeof(device.ifr_name));
11952     + memcpy(device.ifr_name, interface, if_len + 1);
11953     if (ioctl(sock, SIOCGIFADDR, &device) < 0)
11954     bail("getting interface IP address");
11955    
11956     memset(&hwtstamp, 0, sizeof(hwtstamp));
11957     - strncpy(hwtstamp.ifr_name, interface, sizeof(hwtstamp.ifr_name));
11958     + memcpy(hwtstamp.ifr_name, interface, if_len + 1);
11959     hwtstamp.ifr_data = (void *)&hwconfig;
11960     memset(&hwconfig, 0, sizeof(hwconfig));
11961     hwconfig.tx_type =
11962     diff --git a/tools/testing/selftests/ntb/ntb_test.sh b/tools/testing/selftests/ntb/ntb_test.sh
11963     index 9c60337317c6..020137b61407 100755
11964     --- a/tools/testing/selftests/ntb/ntb_test.sh
11965     +++ b/tools/testing/selftests/ntb/ntb_test.sh
11966     @@ -241,7 +241,7 @@ function get_files_count()
11967     split_remote $LOC
11968    
11969     if [[ "$REMOTE" == "" ]]; then
11970     - echo $(ls -1 "$LOC"/${NAME}* 2>/dev/null | wc -l)
11971     + echo $(ls -1 "$VPATH"/${NAME}* 2>/dev/null | wc -l)
11972     else
11973     echo $(ssh "$REMOTE" "ls -1 \"$VPATH\"/${NAME}* | \
11974     wc -l" 2> /dev/null)
11975     diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c
11976     index 480995bceefa..47191af46617 100644
11977     --- a/tools/testing/selftests/x86/protection_keys.c
11978     +++ b/tools/testing/selftests/x86/protection_keys.c
11979     @@ -24,6 +24,7 @@
11980     #define _GNU_SOURCE
11981     #include <errno.h>
11982     #include <linux/futex.h>
11983     +#include <time.h>
11984     #include <sys/time.h>
11985     #include <sys/syscall.h>
11986     #include <string.h>
11987     @@ -612,10 +613,10 @@ int alloc_random_pkey(void)
11988     int nr_alloced = 0;
11989     int random_index;
11990     memset(alloced_pkeys, 0, sizeof(alloced_pkeys));
11991     + srand((unsigned int)time(NULL));
11992    
11993     /* allocate every possible key and make a note of which ones we got */
11994     max_nr_pkey_allocs = NR_PKEYS;
11995     - max_nr_pkey_allocs = 1;
11996     for (i = 0; i < max_nr_pkey_allocs; i++) {
11997     int new_pkey = alloc_pkey();
11998     if (new_pkey < 0)