Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0259-5.4.160-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3637 - (hide annotations) (download)
Mon Oct 24 12:40:44 2022 UTC (18 months, 3 weeks ago) by niro
File size: 373034 byte(s)
-add missing
1 niro 3637 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
2     index dbb68067ba4ea..b11e1fd95ee5f 100644
3     --- a/Documentation/admin-guide/kernel-parameters.txt
4     +++ b/Documentation/admin-guide/kernel-parameters.txt
5     @@ -5480,6 +5480,13 @@
6     as generic guest with no PV drivers. Currently support
7     XEN HVM, KVM, HYPER_V and VMWARE guest.
8    
9     + xen.balloon_boot_timeout= [XEN]
10     + The time (in seconds) to wait before giving up to boot
11     + in case initial ballooning fails to free enough memory.
12     + Applies only when running as HVM or PVH guest and
13     + started with less memory configured than allowed at
14     + max. Default is 180.
15     +
16     xen.event_eoi_delay= [XEN]
17     How long to delay EOI handling in case of event
18     storms (jiffies). Default is 10.
19     diff --git a/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt b/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt
20     index 093edda0c8dfc..6cd83d920155f 100644
21     --- a/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt
22     +++ b/Documentation/devicetree/bindings/regulator/samsung,s5m8767.txt
23     @@ -13,6 +13,14 @@ common regulator binding documented in:
24    
25    
26     Required properties of the main device node (the parent!):
27     + - s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
28     + for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
29     +
30     + [1] If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
31     + property is specified, then all the eight voltage values for the
32     + 's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
33     +
34     +Optional properties of the main device node (the parent!):
35     - s5m8767,pmic-buck2-dvs-voltage: A set of 8 voltage values in micro-volt (uV)
36     units for buck2 when changing voltage using gpio dvs. Refer to [1] below
37     for additional information.
38     @@ -25,26 +33,13 @@ Required properties of the main device node (the parent!):
39     units for buck4 when changing voltage using gpio dvs. Refer to [1] below
40     for additional information.
41    
42     - - s5m8767,pmic-buck-ds-gpios: GPIO specifiers for three host gpio's used
43     - for selecting GPIO DVS lines. It is one-to-one mapped to dvs gpio lines.
44     -
45     - [1] If none of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
46     - property is specified, the 's5m8767,pmic-buck[2/3/4]-dvs-voltage'
47     - property should specify atleast one voltage level (which would be a
48     - safe operating voltage).
49     -
50     - If either of the 's5m8767,pmic-buck[2/3/4]-uses-gpio-dvs' optional
51     - property is specified, then all the eight voltage values for the
52     - 's5m8767,pmic-buck[2/3/4]-dvs-voltage' should be specified.
53     -
54     -Optional properties of the main device node (the parent!):
55     - s5m8767,pmic-buck2-uses-gpio-dvs: 'buck2' can be controlled by gpio dvs.
56     - s5m8767,pmic-buck3-uses-gpio-dvs: 'buck3' can be controlled by gpio dvs.
57     - s5m8767,pmic-buck4-uses-gpio-dvs: 'buck4' can be controlled by gpio dvs.
58    
59     Additional properties required if either of the optional properties are used:
60    
61     - - s5m8767,pmic-buck234-default-dvs-idx: Default voltage setting selected from
62     + - s5m8767,pmic-buck-default-dvs-idx: Default voltage setting selected from
63     the possible 8 options selectable by the dvs gpios. The value of this
64     property should be between 0 and 7. If not specified or if out of range, the
65     default value of this property is set to 0.
66     diff --git a/Makefile b/Makefile
67     index 602b5167dacd7..e938662dab289 100644
68     --- a/Makefile
69     +++ b/Makefile
70     @@ -1,7 +1,7 @@
71     # SPDX-License-Identifier: GPL-2.0
72     VERSION = 5
73     PATCHLEVEL = 4
74     -SUBLEVEL = 159
75     +SUBLEVEL = 160
76     EXTRAVERSION =
77     NAME = Kleptomaniac Octopus
78    
79     diff --git a/arch/arm/Makefile b/arch/arm/Makefile
80     index 1fc32b611f8a4..4f098edfbf202 100644
81     --- a/arch/arm/Makefile
82     +++ b/arch/arm/Makefile
83     @@ -66,15 +66,15 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra)
84     # Note that GCC does not numerically define an architecture version
85     # macro, but instead defines a whole series of macros which makes
86     # testing for a specific architecture or later rather impossible.
87     -arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
88     -arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
89     -arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
90     +arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m
91     +arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a
92     +arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6
93     # Only override the compiler option if ARMv6. The ARMv6K extensions are
94     # always available in ARMv7
95     ifeq ($(CONFIG_CPU_32v6),y)
96     -arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
97     +arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k
98     endif
99     -arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
100     +arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te
101     arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t
102     arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4
103     arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3m
104     @@ -88,7 +88,7 @@ tune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi
105     tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi
106     tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi
107     tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi
108     -tune-$(CONFIG_CPU_ARM946E) =$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
109     +tune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e
110     tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi
111     tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi
112     tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi
113     @@ -96,11 +96,11 @@ tune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi
114     tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi
115     tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110
116     tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100
117     -tune-$(CONFIG_CPU_XSCALE) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
118     -tune-$(CONFIG_CPU_XSC3) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
119     -tune-$(CONFIG_CPU_FEROCEON) =$(call cc-option,-mtune=marvell-f,-mtune=xscale)
120     -tune-$(CONFIG_CPU_V6) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
121     -tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
122     +tune-$(CONFIG_CPU_XSCALE) =-mtune=xscale
123     +tune-$(CONFIG_CPU_XSC3) =-mtune=xscale
124     +tune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale
125     +tune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s
126     +tune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s
127    
128     # Evaluate tune cc-option calls now
129     tune-y := $(tune-y)
130     diff --git a/arch/arm/boot/dts/at91-tse850-3.dts b/arch/arm/boot/dts/at91-tse850-3.dts
131     index 3ca97b47c69ce..7e5c598e7e68f 100644
132     --- a/arch/arm/boot/dts/at91-tse850-3.dts
133     +++ b/arch/arm/boot/dts/at91-tse850-3.dts
134     @@ -262,7 +262,7 @@
135     &macb1 {
136     status = "okay";
137    
138     - phy-mode = "rgmii";
139     + phy-mode = "rmii";
140    
141     #address-cells = <1>;
142     #size-cells = <0>;
143     diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi
144     index b6ef1a7ac8a4e..186b2af7743e3 100644
145     --- a/arch/arm/boot/dts/omap3-gta04.dtsi
146     +++ b/arch/arm/boot/dts/omap3-gta04.dtsi
147     @@ -515,7 +515,7 @@
148     compatible = "bosch,bma180";
149     reg = <0x41>;
150     pinctrl-names = "default";
151     - pintcrl-0 = <&bma180_pins>;
152     + pinctrl-0 = <&bma180_pins>;
153     interrupt-parent = <&gpio4>;
154     interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_115 */
155     };
156     diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi
157     index 369e58f64145d..9de4f17955e31 100644
158     --- a/arch/arm/boot/dts/qcom-msm8974.dtsi
159     +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi
160     @@ -1213,8 +1213,8 @@
161     #phy-cells = <0>;
162     qcom,dsi-phy-index = <0>;
163    
164     - clocks = <&mmcc MDSS_AHB_CLK>;
165     - clock-names = "iface";
166     + clocks = <&mmcc MDSS_AHB_CLK>, <&xo_board>;
167     + clock-names = "iface", "ref";
168     };
169     };
170     };
171     diff --git a/arch/arm/boot/dts/stm32mp157c.dtsi b/arch/arm/boot/dts/stm32mp157c.dtsi
172     index eca469a64a977..a687c024daa92 100644
173     --- a/arch/arm/boot/dts/stm32mp157c.dtsi
174     +++ b/arch/arm/boot/dts/stm32mp157c.dtsi
175     @@ -773,7 +773,7 @@
176     #sound-dai-cells = <0>;
177    
178     compatible = "st,stm32-sai-sub-a";
179     - reg = <0x4 0x1c>;
180     + reg = <0x4 0x20>;
181     clocks = <&rcc SAI1_K>;
182     clock-names = "sai_ck";
183     dmas = <&dmamux1 87 0x400 0x01>;
184     @@ -783,7 +783,7 @@
185     sai1b: audio-controller@4400a024 {
186     #sound-dai-cells = <0>;
187     compatible = "st,stm32-sai-sub-b";
188     - reg = <0x24 0x1c>;
189     + reg = <0x24 0x20>;
190     clocks = <&rcc SAI1_K>;
191     clock-names = "sai_ck";
192     dmas = <&dmamux1 88 0x400 0x01>;
193     @@ -804,7 +804,7 @@
194     sai2a: audio-controller@4400b004 {
195     #sound-dai-cells = <0>;
196     compatible = "st,stm32-sai-sub-a";
197     - reg = <0x4 0x1c>;
198     + reg = <0x4 0x20>;
199     clocks = <&rcc SAI2_K>;
200     clock-names = "sai_ck";
201     dmas = <&dmamux1 89 0x400 0x01>;
202     @@ -814,7 +814,7 @@
203     sai2b: audio-controller@4400b024 {
204     #sound-dai-cells = <0>;
205     compatible = "st,stm32-sai-sub-b";
206     - reg = <0x24 0x1c>;
207     + reg = <0x24 0x20>;
208     clocks = <&rcc SAI2_K>;
209     clock-names = "sai_ck";
210     dmas = <&dmamux1 90 0x400 0x01>;
211     @@ -835,7 +835,7 @@
212     sai3a: audio-controller@4400c004 {
213     #sound-dai-cells = <0>;
214     compatible = "st,stm32-sai-sub-a";
215     - reg = <0x04 0x1c>;
216     + reg = <0x04 0x20>;
217     clocks = <&rcc SAI3_K>;
218     clock-names = "sai_ck";
219     dmas = <&dmamux1 113 0x400 0x01>;
220     @@ -845,7 +845,7 @@
221     sai3b: audio-controller@4400c024 {
222     #sound-dai-cells = <0>;
223     compatible = "st,stm32-sai-sub-b";
224     - reg = <0x24 0x1c>;
225     + reg = <0x24 0x20>;
226     clocks = <&rcc SAI3_K>;
227     clock-names = "sai_ck";
228     dmas = <&dmamux1 114 0x400 0x01>;
229     @@ -1191,7 +1191,7 @@
230     sai4a: audio-controller@50027004 {
231     #sound-dai-cells = <0>;
232     compatible = "st,stm32-sai-sub-a";
233     - reg = <0x04 0x1c>;
234     + reg = <0x04 0x20>;
235     clocks = <&rcc SAI4_K>;
236     clock-names = "sai_ck";
237     dmas = <&dmamux1 99 0x400 0x01>;
238     @@ -1201,7 +1201,7 @@
239     sai4b: audio-controller@50027024 {
240     #sound-dai-cells = <0>;
241     compatible = "st,stm32-sai-sub-b";
242     - reg = <0x24 0x1c>;
243     + reg = <0x24 0x20>;
244     clocks = <&rcc SAI4_K>;
245     clock-names = "sai_ck";
246     dmas = <&dmamux1 100 0x400 0x01>;
247     diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-lime2.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-lime2.dts
248     index 9ba62774e89a1..488933b87ad5a 100644
249     --- a/arch/arm/boot/dts/sun7i-a20-olinuxino-lime2.dts
250     +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-lime2.dts
251     @@ -112,7 +112,7 @@
252     pinctrl-names = "default";
253     pinctrl-0 = <&gmac_rgmii_pins>;
254     phy-handle = <&phy1>;
255     - phy-mode = "rgmii";
256     + phy-mode = "rgmii-id";
257     status = "okay";
258     };
259    
260     diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
261     index 76ea4178a55cb..db798eac74315 100644
262     --- a/arch/arm/kernel/stacktrace.c
263     +++ b/arch/arm/kernel/stacktrace.c
264     @@ -54,8 +54,7 @@ int notrace unwind_frame(struct stackframe *frame)
265    
266     frame->sp = frame->fp;
267     frame->fp = *(unsigned long *)(fp);
268     - frame->pc = frame->lr;
269     - frame->lr = *(unsigned long *)(fp + 4);
270     + frame->pc = *(unsigned long *)(fp + 4);
271     #else
272     /* check current frame pointer is within bounds */
273     if (fp < low + 12 || fp > high - 4)
274     diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
275     index 0ab3a86b1f523..fc388eb60e0b7 100644
276     --- a/arch/arm/mm/Kconfig
277     +++ b/arch/arm/mm/Kconfig
278     @@ -752,7 +752,7 @@ config CPU_BIG_ENDIAN
279     config CPU_ENDIAN_BE8
280     bool
281     depends on CPU_BIG_ENDIAN
282     - default CPU_V6 || CPU_V6K || CPU_V7
283     + default CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
284     help
285     Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors.
286    
287     diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
288     index ee943ac325560..538d5da741b09 100644
289     --- a/arch/arm/mm/mmu.c
290     +++ b/arch/arm/mm/mmu.c
291     @@ -415,9 +415,9 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
292     FIXADDR_END);
293     BUG_ON(idx >= __end_of_fixed_addresses);
294    
295     - /* we only support device mappings until pgprot_kernel has been set */
296     + /* We support only device mappings before pgprot_kernel is set. */
297     if (WARN_ON(pgprot_val(prot) != pgprot_val(FIXMAP_PAGE_IO) &&
298     - pgprot_val(pgprot_kernel) == 0))
299     + pgprot_val(prot) && pgprot_val(pgprot_kernel) == 0))
300     return;
301    
302     if (pgprot_val(prot))
303     diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts b/arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts
304     index c9fa23a565624..b8d9e92197ac8 100644
305     --- a/arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts
306     +++ b/arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts
307     @@ -139,7 +139,7 @@
308     regulator-min-microvolt = <721000>;
309     regulator-max-microvolt = <1022000>;
310    
311     - vin-supply = <&dc_in>;
312     + pwm-supply = <&dc_in>;
313    
314     pwms = <&pwm_AO_cd 1 1250 0>;
315     pwm-dutycycle-range = <100 0>;
316     diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts b/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts
317     index 2a324f0136e3f..02ec6eda03b1c 100644
318     --- a/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts
319     +++ b/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts
320     @@ -139,7 +139,7 @@
321     regulator-min-microvolt = <721000>;
322     regulator-max-microvolt = <1022000>;
323    
324     - vin-supply = <&main_12v>;
325     + pwm-supply = <&main_12v>;
326    
327     pwms = <&pwm_AO_cd 1 1250 0>;
328     pwm-dutycycle-range = <100 0>;
329     diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts b/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
330     index c48125bf9d1e3..5209c44fda01a 100644
331     --- a/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
332     +++ b/arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts
333     @@ -139,7 +139,7 @@
334     regulator-min-microvolt = <721000>;
335     regulator-max-microvolt = <1022000>;
336    
337     - vin-supply = <&dc_in>;
338     + pwm-supply = <&dc_in>;
339    
340     pwms = <&pwm_AO_cd 1 1250 0>;
341     pwm-dutycycle-range = <100 0>;
342     diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
343     index 44ad744c4710d..6ddb6b8c1fad5 100644
344     --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi
345     +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi
346     @@ -555,7 +555,7 @@
347    
348     gpu: gpu@ff300000 {
349     compatible = "rockchip,rk3328-mali", "arm,mali-450";
350     - reg = <0x0 0xff300000 0x0 0x40000>;
351     + reg = <0x0 0xff300000 0x0 0x30000>;
352     interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
353     <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
354     <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
355     diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
356     index a92a187ec8919..3a057d4279007 100644
357     --- a/arch/arm64/include/asm/pgtable.h
358     +++ b/arch/arm64/include/asm/pgtable.h
359     @@ -54,9 +54,15 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
360     * page table entry, taking care of 52-bit addresses.
361     */
362     #ifdef CONFIG_ARM64_PA_BITS_52
363     -#define __pte_to_phys(pte) \
364     - ((pte_val(pte) & PTE_ADDR_LOW) | ((pte_val(pte) & PTE_ADDR_HIGH) << 36))
365     -#define __phys_to_pte_val(phys) (((phys) | ((phys) >> 36)) & PTE_ADDR_MASK)
366     +static inline phys_addr_t __pte_to_phys(pte_t pte)
367     +{
368     + return (pte_val(pte) & PTE_ADDR_LOW) |
369     + ((pte_val(pte) & PTE_ADDR_HIGH) << 36);
370     +}
371     +static inline pteval_t __phys_to_pte_val(phys_addr_t phys)
372     +{
373     + return (phys | (phys >> 36)) & PTE_ADDR_MASK;
374     +}
375     #else
376     #define __pte_to_phys(pte) (pte_val(pte) & PTE_ADDR_MASK)
377     #define __phys_to_pte_val(phys) (phys)
378     diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
379     index afc7d41347f73..a343677837c77 100644
380     --- a/arch/arm64/net/bpf_jit_comp.c
381     +++ b/arch/arm64/net/bpf_jit_comp.c
382     @@ -996,6 +996,11 @@ out:
383     return prog;
384     }
385    
386     +u64 bpf_jit_alloc_exec_limit(void)
387     +{
388     + return BPF_JIT_REGION_SIZE;
389     +}
390     +
391     void *bpf_jit_alloc_exec(unsigned long size)
392     {
393     return __vmalloc_node_range(size, PAGE_SIZE, BPF_JIT_REGION_START,
394     diff --git a/arch/ia64/Kconfig.debug b/arch/ia64/Kconfig.debug
395     index 40ca23bd228d6..2ce008e2d1644 100644
396     --- a/arch/ia64/Kconfig.debug
397     +++ b/arch/ia64/Kconfig.debug
398     @@ -39,7 +39,7 @@ config DISABLE_VHPT
399    
400     config IA64_DEBUG_CMPXCHG
401     bool "Turn on compare-and-exchange bug checking (slow!)"
402     - depends on DEBUG_KERNEL
403     + depends on DEBUG_KERNEL && PRINTK
404     help
405     Selecting this option turns on bug checking for the IA-64
406     compare-and-exchange instructions. This is slow! Itaniums
407     diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c
408     index b3dc39050c1ad..8a223d0e4918c 100644
409     --- a/arch/ia64/kernel/kprobes.c
410     +++ b/arch/ia64/kernel/kprobes.c
411     @@ -398,7 +398,8 @@ static void kretprobe_trampoline(void)
412    
413     int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
414     {
415     - regs->cr_iip = __kretprobe_trampoline_handler(regs, kretprobe_trampoline, NULL);
416     + regs->cr_iip = __kretprobe_trampoline_handler(regs,
417     + dereference_function_descriptor(kretprobe_trampoline), NULL);
418     /*
419     * By returning a non-zero value, we are telling
420     * kprobe_handler() that we don't want the post_handler
421     @@ -414,7 +415,7 @@ void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
422     ri->fp = NULL;
423    
424     /* Replace the return addr with trampoline addr */
425     - regs->b0 = ((struct fnptr *)kretprobe_trampoline)->ip;
426     + regs->b0 = (unsigned long)dereference_function_descriptor(kretprobe_trampoline);
427     }
428    
429     /* Check the instruction in the slot is break */
430     @@ -918,14 +919,14 @@ static struct kprobe trampoline_p = {
431     int __init arch_init_kprobes(void)
432     {
433     trampoline_p.addr =
434     - (kprobe_opcode_t *)((struct fnptr *)kretprobe_trampoline)->ip;
435     + dereference_function_descriptor(kretprobe_trampoline);
436     return register_kprobe(&trampoline_p);
437     }
438    
439     int __kprobes arch_trampoline_kprobe(struct kprobe *p)
440     {
441     if (p->addr ==
442     - (kprobe_opcode_t *)((struct fnptr *)kretprobe_trampoline)->ip)
443     + dereference_function_descriptor(kretprobe_trampoline))
444     return 1;
445    
446     return 0;
447     diff --git a/arch/m68k/Kconfig.machine b/arch/m68k/Kconfig.machine
448     index 1bbe0dd0c4fe5..b88a980f56f8a 100644
449     --- a/arch/m68k/Kconfig.machine
450     +++ b/arch/m68k/Kconfig.machine
451     @@ -190,6 +190,7 @@ config INIT_LCD
452     config MEMORY_RESERVE
453     int "Memory reservation (MiB)"
454     depends on (UCSIMM || UCDIMM)
455     + default 0
456     help
457     Reserve certain memory regions on 68x328 based boards.
458    
459     diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
460     index 2bfef67d52c63..041d34975ea2c 100644
461     --- a/arch/mips/Kconfig
462     +++ b/arch/mips/Kconfig
463     @@ -1393,6 +1393,7 @@ config CPU_LOONGSON3
464     select WEAK_REORDERING_BEYOND_LLSC
465     select MIPS_PGD_C0_CONTEXT
466     select MIPS_L1_CACHE_SHIFT_6
467     + select MIPS_FP_SUPPORT
468     select GPIOLIB
469     select SWIOTLB
470     help
471     diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h
472     index aeae2effa123d..23c67c0871b17 100644
473     --- a/arch/mips/include/asm/mips-cm.h
474     +++ b/arch/mips/include/asm/mips-cm.h
475     @@ -11,6 +11,7 @@
476     #ifndef __MIPS_ASM_MIPS_CM_H__
477     #define __MIPS_ASM_MIPS_CM_H__
478    
479     +#include <linux/bitfield.h>
480     #include <linux/bitops.h>
481     #include <linux/errno.h>
482    
483     @@ -153,8 +154,8 @@ GCR_ACCESSOR_RO(32, 0x030, rev)
484     #define CM_GCR_REV_MINOR GENMASK(7, 0)
485    
486     #define CM_ENCODE_REV(major, minor) \
487     - (((major) << __ffs(CM_GCR_REV_MAJOR)) | \
488     - ((minor) << __ffs(CM_GCR_REV_MINOR)))
489     + (FIELD_PREP(CM_GCR_REV_MAJOR, major) | \
490     + FIELD_PREP(CM_GCR_REV_MINOR, minor))
491    
492     #define CM_REV_CM2 CM_ENCODE_REV(6, 0)
493     #define CM_REV_CM2_5 CM_ENCODE_REV(7, 0)
494     @@ -362,10 +363,10 @@ static inline int mips_cm_revision(void)
495     static inline unsigned int mips_cm_max_vp_width(void)
496     {
497     extern int smp_num_siblings;
498     - uint32_t cfg;
499    
500     if (mips_cm_revision() >= CM_REV_CM3)
501     - return read_gcr_sys_config2() & CM_GCR_SYS_CONFIG2_MAXVPW;
502     + return FIELD_GET(CM_GCR_SYS_CONFIG2_MAXVPW,
503     + read_gcr_sys_config2());
504    
505     if (mips_cm_present()) {
506     /*
507     @@ -373,8 +374,7 @@ static inline unsigned int mips_cm_max_vp_width(void)
508     * number of VP(E)s, and if that ever changes then this will
509     * need revisiting.
510     */
511     - cfg = read_gcr_cl_config() & CM_GCR_Cx_CONFIG_PVPE;
512     - return (cfg >> __ffs(CM_GCR_Cx_CONFIG_PVPE)) + 1;
513     + return FIELD_GET(CM_GCR_Cx_CONFIG_PVPE, read_gcr_cl_config()) + 1;
514     }
515    
516     if (IS_ENABLED(CONFIG_SMP))
517     diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c
518     index a9eab83d9148d..611ef512c0b81 100644
519     --- a/arch/mips/kernel/mips-cm.c
520     +++ b/arch/mips/kernel/mips-cm.c
521     @@ -179,8 +179,7 @@ static void mips_cm_probe_l2sync(void)
522     phys_addr_t addr;
523    
524     /* L2-only sync was introduced with CM major revision 6 */
525     - major_rev = (read_gcr_rev() & CM_GCR_REV_MAJOR) >>
526     - __ffs(CM_GCR_REV_MAJOR);
527     + major_rev = FIELD_GET(CM_GCR_REV_MAJOR, read_gcr_rev());
528     if (major_rev < 6)
529     return;
530    
531     @@ -263,13 +262,13 @@ void mips_cm_lock_other(unsigned int cluster, unsigned int core,
532     preempt_disable();
533    
534     if (cm_rev >= CM_REV_CM3) {
535     - val = core << __ffs(CM3_GCR_Cx_OTHER_CORE);
536     - val |= vp << __ffs(CM3_GCR_Cx_OTHER_VP);
537     + val = FIELD_PREP(CM3_GCR_Cx_OTHER_CORE, core) |
538     + FIELD_PREP(CM3_GCR_Cx_OTHER_VP, vp);
539    
540     if (cm_rev >= CM_REV_CM3_5) {
541     val |= CM_GCR_Cx_OTHER_CLUSTER_EN;
542     - val |= cluster << __ffs(CM_GCR_Cx_OTHER_CLUSTER);
543     - val |= block << __ffs(CM_GCR_Cx_OTHER_BLOCK);
544     + val |= FIELD_PREP(CM_GCR_Cx_OTHER_CLUSTER, cluster);
545     + val |= FIELD_PREP(CM_GCR_Cx_OTHER_BLOCK, block);
546     } else {
547     WARN_ON(cluster != 0);
548     WARN_ON(block != CM_GCR_Cx_OTHER_BLOCK_LOCAL);
549     @@ -299,7 +298,7 @@ void mips_cm_lock_other(unsigned int cluster, unsigned int core,
550     spin_lock_irqsave(&per_cpu(cm_core_lock, curr_core),
551     per_cpu(cm_core_lock_flags, curr_core));
552    
553     - val = core << __ffs(CM_GCR_Cx_OTHER_CORENUM);
554     + val = FIELD_PREP(CM_GCR_Cx_OTHER_CORENUM, core);
555     }
556    
557     write_gcr_cl_other(val);
558     @@ -343,8 +342,8 @@ void mips_cm_error_report(void)
559     cm_other = read_gcr_error_mult();
560    
561     if (revision < CM_REV_CM3) { /* CM2 */
562     - cause = cm_error >> __ffs(CM_GCR_ERROR_CAUSE_ERRTYPE);
563     - ocause = cm_other >> __ffs(CM_GCR_ERROR_MULT_ERR2ND);
564     + cause = FIELD_GET(CM_GCR_ERROR_CAUSE_ERRTYPE, cm_error);
565     + ocause = FIELD_GET(CM_GCR_ERROR_MULT_ERR2ND, cm_other);
566    
567     if (!cause)
568     return;
569     @@ -386,8 +385,8 @@ void mips_cm_error_report(void)
570     ulong core_id_bits, vp_id_bits, cmd_bits, cmd_group_bits;
571     ulong cm3_cca_bits, mcp_bits, cm3_tr_bits, sched_bit;
572    
573     - cause = cm_error >> __ffs64(CM3_GCR_ERROR_CAUSE_ERRTYPE);
574     - ocause = cm_other >> __ffs(CM_GCR_ERROR_MULT_ERR2ND);
575     + cause = FIELD_GET(CM3_GCR_ERROR_CAUSE_ERRTYPE, cm_error);
576     + ocause = FIELD_GET(CM_GCR_ERROR_MULT_ERR2ND, cm_other);
577    
578     if (!cause)
579     return;
580     diff --git a/arch/mips/kernel/r2300_fpu.S b/arch/mips/kernel/r2300_fpu.S
581     index 12e58053544fc..cbf6db98cfb38 100644
582     --- a/arch/mips/kernel/r2300_fpu.S
583     +++ b/arch/mips/kernel/r2300_fpu.S
584     @@ -29,8 +29,8 @@
585     #define EX2(a,b) \
586     9: a,##b; \
587     .section __ex_table,"a"; \
588     - PTR 9b,bad_stack; \
589     - PTR 9b+4,bad_stack; \
590     + PTR 9b,fault; \
591     + PTR 9b+4,fault; \
592     .previous
593    
594     .set mips1
595     diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c
596     index 3f16f38230310..9a28e79f2e66e 100644
597     --- a/arch/mips/kernel/syscall.c
598     +++ b/arch/mips/kernel/syscall.c
599     @@ -239,12 +239,3 @@ SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op)
600     {
601     return -ENOSYS;
602     }
603     -
604     -/*
605     - * If we ever come here the user sp is bad. Zap the process right away.
606     - * Due to the bad stack signaling wouldn't work.
607     - */
608     -asmlinkage void bad_stack(void)
609     -{
610     - do_exit(SIGSEGV);
611     -}
612     diff --git a/arch/mips/lantiq/xway/dma.c b/arch/mips/lantiq/xway/dma.c
613     index aeb1b989cd4ee..e45077aecf83a 100644
614     --- a/arch/mips/lantiq/xway/dma.c
615     +++ b/arch/mips/lantiq/xway/dma.c
616     @@ -11,6 +11,7 @@
617     #include <linux/export.h>
618     #include <linux/spinlock.h>
619     #include <linux/clk.h>
620     +#include <linux/delay.h>
621     #include <linux/err.h>
622    
623     #include <lantiq_soc.h>
624     @@ -29,6 +30,7 @@
625     #define LTQ_DMA_PCTRL 0x44
626     #define LTQ_DMA_IRNEN 0xf4
627    
628     +#define DMA_ID_CHNR GENMASK(26, 20) /* channel number */
629     #define DMA_DESCPT BIT(3) /* descriptor complete irq */
630     #define DMA_TX BIT(8) /* TX channel direction */
631     #define DMA_CHAN_ON BIT(0) /* channel on / off bit */
632     @@ -39,7 +41,6 @@
633     #define DMA_POLL BIT(31) /* turn on channel polling */
634     #define DMA_CLK_DIV4 BIT(6) /* polling clock divider */
635     #define DMA_2W_BURST BIT(1) /* 2 word burst length */
636     -#define DMA_MAX_CHANNEL 20 /* the soc has 20 channels */
637     #define DMA_ETOP_ENDIANNESS (0xf << 8) /* endianness swap etop channels */
638     #define DMA_WEIGHT (BIT(17) | BIT(16)) /* default channel wheight */
639    
640     @@ -205,7 +206,7 @@ ltq_dma_init(struct platform_device *pdev)
641     {
642     struct clk *clk;
643     struct resource *res;
644     - unsigned id;
645     + unsigned int id, nchannels;
646     int i;
647    
648     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
649     @@ -221,21 +222,24 @@ ltq_dma_init(struct platform_device *pdev)
650     clk_enable(clk);
651     ltq_dma_w32_mask(0, DMA_RESET, LTQ_DMA_CTRL);
652    
653     + usleep_range(1, 10);
654     +
655     /* disable all interrupts */
656     ltq_dma_w32(0, LTQ_DMA_IRNEN);
657    
658     /* reset/configure each channel */
659     - for (i = 0; i < DMA_MAX_CHANNEL; i++) {
660     + id = ltq_dma_r32(LTQ_DMA_ID);
661     + nchannels = ((id & DMA_ID_CHNR) >> 20);
662     + for (i = 0; i < nchannels; i++) {
663     ltq_dma_w32(i, LTQ_DMA_CS);
664     ltq_dma_w32(DMA_CHAN_RST, LTQ_DMA_CCTRL);
665     ltq_dma_w32(DMA_POLL | DMA_CLK_DIV4, LTQ_DMA_CPOLL);
666     ltq_dma_w32_mask(DMA_CHAN_ON, 0, LTQ_DMA_CCTRL);
667     }
668    
669     - id = ltq_dma_r32(LTQ_DMA_ID);
670     dev_info(&pdev->dev,
671     "Init done - hw rev: %X, ports: %d, channels: %d\n",
672     - id & 0x1f, (id >> 16) & 0xf, id >> 20);
673     + id & 0x1f, (id >> 16) & 0xf, nchannels);
674    
675     return 0;
676     }
677     diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
678     index 873bf3434da94..7d14e9ae18fb1 100644
679     --- a/arch/parisc/kernel/entry.S
680     +++ b/arch/parisc/kernel/entry.S
681     @@ -1841,7 +1841,7 @@ syscall_restore:
682     LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
683    
684     /* Are we being ptraced? */
685     - ldw TASK_FLAGS(%r1),%r19
686     + LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19
687     ldi _TIF_SYSCALL_TRACE_MASK,%r2
688     and,COND(=) %r19,%r2,%r0
689     b,n syscall_restore_rfi
690     diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
691     index e202c37e56af3..9997465c11820 100644
692     --- a/arch/parisc/kernel/smp.c
693     +++ b/arch/parisc/kernel/smp.c
694     @@ -29,6 +29,7 @@
695     #include <linux/bitops.h>
696     #include <linux/ftrace.h>
697     #include <linux/cpu.h>
698     +#include <linux/kgdb.h>
699    
700     #include <linux/atomic.h>
701     #include <asm/current.h>
702     @@ -71,7 +72,10 @@ enum ipi_message_type {
703     IPI_CALL_FUNC,
704     IPI_CPU_START,
705     IPI_CPU_STOP,
706     - IPI_CPU_TEST
707     + IPI_CPU_TEST,
708     +#ifdef CONFIG_KGDB
709     + IPI_ENTER_KGDB,
710     +#endif
711     };
712    
713    
714     @@ -169,7 +173,12 @@ ipi_interrupt(int irq, void *dev_id)
715     case IPI_CPU_TEST:
716     smp_debug(100, KERN_DEBUG "CPU%d is alive!\n", this_cpu);
717     break;
718     -
719     +#ifdef CONFIG_KGDB
720     + case IPI_ENTER_KGDB:
721     + smp_debug(100, KERN_DEBUG "CPU%d ENTER_KGDB\n", this_cpu);
722     + kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs());
723     + break;
724     +#endif
725     default:
726     printk(KERN_CRIT "Unknown IPI num on CPU%d: %lu\n",
727     this_cpu, which);
728     @@ -225,6 +234,12 @@ send_IPI_allbutself(enum ipi_message_type op)
729     }
730     }
731    
732     +#ifdef CONFIG_KGDB
733     +void kgdb_roundup_cpus(void)
734     +{
735     + send_IPI_allbutself(IPI_ENTER_KGDB);
736     +}
737     +#endif
738    
739     inline void
740     smp_send_stop(void) { send_IPI_allbutself(IPI_CPU_STOP); }
741     diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c
742     index 87ae476d1c4f5..86a57fb0e6fae 100644
743     --- a/arch/parisc/kernel/unwind.c
744     +++ b/arch/parisc/kernel/unwind.c
745     @@ -21,6 +21,8 @@
746     #include <asm/ptrace.h>
747    
748     #include <asm/unwind.h>
749     +#include <asm/switch_to.h>
750     +#include <asm/sections.h>
751    
752     /* #define DEBUG 1 */
753     #ifdef DEBUG
754     @@ -203,6 +205,11 @@ int __init unwind_init(void)
755     return 0;
756     }
757    
758     +static bool pc_is_kernel_fn(unsigned long pc, void *fn)
759     +{
760     + return (unsigned long)dereference_kernel_function_descriptor(fn) == pc;
761     +}
762     +
763     static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size)
764     {
765     /*
766     @@ -221,7 +228,7 @@ static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int
767     extern void * const _call_on_stack;
768     #endif /* CONFIG_IRQSTACKS */
769    
770     - if (pc == (unsigned long) &handle_interruption) {
771     + if (pc_is_kernel_fn(pc, handle_interruption)) {
772     struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN);
773     dbg("Unwinding through handle_interruption()\n");
774     info->prev_sp = regs->gr[30];
775     @@ -229,13 +236,13 @@ static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int
776     return 1;
777     }
778    
779     - if (pc == (unsigned long) &ret_from_kernel_thread ||
780     - pc == (unsigned long) &syscall_exit) {
781     + if (pc_is_kernel_fn(pc, ret_from_kernel_thread) ||
782     + pc_is_kernel_fn(pc, syscall_exit)) {
783     info->prev_sp = info->prev_ip = 0;
784     return 1;
785     }
786    
787     - if (pc == (unsigned long) &intr_return) {
788     + if (pc_is_kernel_fn(pc, intr_return)) {
789     struct pt_regs *regs;
790    
791     dbg("Found intr_return()\n");
792     @@ -246,20 +253,20 @@ static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int
793     return 1;
794     }
795    
796     - if (pc == (unsigned long) &_switch_to_ret) {
797     + if (pc_is_kernel_fn(pc, _switch_to) ||
798     + pc_is_kernel_fn(pc, _switch_to_ret)) {
799     info->prev_sp = info->sp - CALLEE_SAVE_FRAME_SIZE;
800     info->prev_ip = *(unsigned long *)(info->prev_sp - RP_OFFSET);
801     return 1;
802     }
803    
804     #ifdef CONFIG_IRQSTACKS
805     - if (pc == (unsigned long) &_call_on_stack) {
806     + if (pc_is_kernel_fn(pc, _call_on_stack)) {
807     info->prev_sp = *(unsigned long *)(info->sp - FRAME_SIZE - REG_SZ);
808     info->prev_ip = *(unsigned long *)(info->sp - FRAME_SIZE - RP_OFFSET);
809     return 1;
810     }
811     #endif
812     -
813     return 0;
814     }
815    
816     diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
817     index 99cd24f2ea01b..164483b37d854 100644
818     --- a/arch/parisc/kernel/vmlinux.lds.S
819     +++ b/arch/parisc/kernel/vmlinux.lds.S
820     @@ -56,6 +56,8 @@ SECTIONS
821     {
822     . = KERNEL_BINARY_TEXT_START;
823    
824     + _stext = .; /* start of kernel text, includes init code & data */
825     +
826     __init_begin = .;
827     HEAD_TEXT_SECTION
828     MLONGCALL_DISCARD(INIT_TEXT_SECTION(8))
829     @@ -79,7 +81,6 @@ SECTIONS
830     /* freed after init ends here */
831    
832     _text = .; /* Text and read-only data */
833     - _stext = .;
834     MLONGCALL_KEEP(INIT_TEXT_SECTION(8))
835     .text ALIGN(PAGE_SIZE) : {
836     TEXT_TEXT
837     diff --git a/arch/parisc/mm/fixmap.c b/arch/parisc/mm/fixmap.c
838     index 474cd241c1509..02e19a32e6c5f 100644
839     --- a/arch/parisc/mm/fixmap.c
840     +++ b/arch/parisc/mm/fixmap.c
841     @@ -18,12 +18,9 @@ void notrace set_fixmap(enum fixed_addresses idx, phys_addr_t phys)
842     pte_t *pte;
843    
844     if (pmd_none(*pmd))
845     - pmd = pmd_alloc(NULL, pgd, vaddr);
846     -
847     - pte = pte_offset_kernel(pmd, vaddr);
848     - if (pte_none(*pte))
849     pte = pte_alloc_kernel(pmd, vaddr);
850    
851     + pte = pte_offset_kernel(pmd, vaddr);
852     set_pte_at(&init_mm, vaddr, pte, __mk_pte(phys, PAGE_KERNEL_RWX));
853     flush_tlb_kernel_range(vaddr, vaddr + PAGE_SIZE);
854     }
855     diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
856     index 3e54484797f62..d769d61cde7ca 100644
857     --- a/arch/parisc/mm/init.c
858     +++ b/arch/parisc/mm/init.c
859     @@ -892,9 +892,9 @@ void flush_tlb_all(void)
860     {
861     int do_recycle;
862    
863     - __inc_irq_stat(irq_tlb_count);
864     do_recycle = 0;
865     spin_lock(&sid_lock);
866     + __inc_irq_stat(irq_tlb_count);
867     if (dirty_space_ids > RECYCLE_THRESHOLD) {
868     BUG_ON(recycle_inuse); /* FIXME: Use a semaphore/wait queue here */
869     get_dirty_sids(&recycle_ndirty,recycle_dirty_array);
870     @@ -913,8 +913,8 @@ void flush_tlb_all(void)
871     #else
872     void flush_tlb_all(void)
873     {
874     - __inc_irq_stat(irq_tlb_count);
875     spin_lock(&sid_lock);
876     + __inc_irq_stat(irq_tlb_count);
877     flush_tlb_all_local(NULL);
878     recycle_sids();
879     spin_unlock(&sid_lock);
880     diff --git a/arch/powerpc/include/asm/code-patching.h b/arch/powerpc/include/asm/code-patching.h
881     index be0f7257b13c8..96ef54bc7d968 100644
882     --- a/arch/powerpc/include/asm/code-patching.h
883     +++ b/arch/powerpc/include/asm/code-patching.h
884     @@ -22,6 +22,7 @@
885     #define BRANCH_ABSOLUTE 0x2
886    
887     bool is_offset_in_branch_range(long offset);
888     +bool is_offset_in_cond_branch_range(long offset);
889     unsigned int create_branch(const unsigned int *addr,
890     unsigned long target, int flags);
891     unsigned int create_cond_branch(const unsigned int *addr,
892     diff --git a/arch/powerpc/include/asm/security_features.h b/arch/powerpc/include/asm/security_features.h
893     index e9e3f85134e54..316a9c8d1929e 100644
894     --- a/arch/powerpc/include/asm/security_features.h
895     +++ b/arch/powerpc/include/asm/security_features.h
896     @@ -39,6 +39,11 @@ static inline bool security_ftr_enabled(u64 feature)
897     return !!(powerpc_security_features & feature);
898     }
899    
900     +#ifdef CONFIG_PPC_BOOK3S_64
901     +enum stf_barrier_type stf_barrier_type_get(void);
902     +#else
903     +static inline enum stf_barrier_type stf_barrier_type_get(void) { return STF_BARRIER_NONE; }
904     +#endif
905    
906     // Features indicating support for Spectre/Meltdown mitigations
907    
908     diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
909     index 1740a66cea84d..ff022e7256934 100644
910     --- a/arch/powerpc/kernel/security.c
911     +++ b/arch/powerpc/kernel/security.c
912     @@ -256,6 +256,11 @@ static int __init handle_no_stf_barrier(char *p)
913    
914     early_param("no_stf_barrier", handle_no_stf_barrier);
915    
916     +enum stf_barrier_type stf_barrier_type_get(void)
917     +{
918     + return stf_enabled_flush_types;
919     +}
920     +
921     /* This is the generic flag used by other architectures */
922     static int __init handle_ssbd(char *p)
923     {
924     diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
925     index 3345f039a8769..a05f289e613ed 100644
926     --- a/arch/powerpc/lib/code-patching.c
927     +++ b/arch/powerpc/lib/code-patching.c
928     @@ -221,6 +221,11 @@ bool is_offset_in_branch_range(long offset)
929     return (offset >= -0x2000000 && offset <= 0x1fffffc && !(offset & 0x3));
930     }
931    
932     +bool is_offset_in_cond_branch_range(long offset)
933     +{
934     + return offset >= -0x8000 && offset <= 0x7fff && !(offset & 0x3);
935     +}
936     +
937     /*
938     * Helper to check if a given instruction is a conditional branch
939     * Derived from the conditional checks in analyse_instr()
940     @@ -274,7 +279,7 @@ unsigned int create_cond_branch(const unsigned int *addr,
941     offset = offset - (unsigned long)addr;
942    
943     /* Check we can represent the target in the instruction format */
944     - if (offset < -0x8000 || offset > 0x7FFF || offset & 0x3)
945     + if (!is_offset_in_cond_branch_range(offset))
946     return 0;
947    
948     /* Mask out the flags and target, so they don't step on each other. */
949     diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h
950     index 55d4377ccfae3..6d2a268528dfc 100644
951     --- a/arch/powerpc/net/bpf_jit.h
952     +++ b/arch/powerpc/net/bpf_jit.h
953     @@ -11,6 +11,7 @@
954     #ifndef __ASSEMBLY__
955    
956     #include <asm/types.h>
957     +#include <asm/code-patching.h>
958    
959     #ifdef PPC64_ELF_ABI_v1
960     #define FUNCTION_DESCR_SIZE 24
961     @@ -180,13 +181,26 @@
962     #define PPC_NEG(d, a) EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a))
963    
964     /* Long jump; (unconditional 'branch') */
965     -#define PPC_JMP(dest) EMIT(PPC_INST_BRANCH | \
966     - (((dest) - (ctx->idx * 4)) & 0x03fffffc))
967     +#define PPC_JMP(dest) \
968     + do { \
969     + long offset = (long)(dest) - (ctx->idx * 4); \
970     + if (!is_offset_in_branch_range(offset)) { \
971     + pr_err_ratelimited("Branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \
972     + return -ERANGE; \
973     + } \
974     + EMIT(PPC_INST_BRANCH | (offset & 0x03fffffc)); \
975     + } while (0)
976     /* "cond" here covers BO:BI fields. */
977     -#define PPC_BCC_SHORT(cond, dest) EMIT(PPC_INST_BRANCH_COND | \
978     - (((cond) & 0x3ff) << 16) | \
979     - (((dest) - (ctx->idx * 4)) & \
980     - 0xfffc))
981     +#define PPC_BCC_SHORT(cond, dest) \
982     + do { \
983     + long offset = (long)(dest) - (ctx->idx * 4); \
984     + if (!is_offset_in_cond_branch_range(offset)) { \
985     + pr_err_ratelimited("Conditional branch offset 0x%lx (@%u) out of range\n", offset, ctx->idx); \
986     + return -ERANGE; \
987     + } \
988     + EMIT(PPC_INST_BRANCH_COND | (((cond) & 0x3ff) << 16) | (offset & 0xfffc)); \
989     + } while (0)
990     +
991     /* Sign-extended 32-bit immediate load */
992     #define PPC_LI32(d, i) do { \
993     if ((int)(uintptr_t)(i) >= -32768 && \
994     @@ -225,11 +239,6 @@
995     #define PPC_FUNC_ADDR(d,i) do { PPC_LI32(d, i); } while(0)
996     #endif
997    
998     -static inline bool is_nearbranch(int offset)
999     -{
1000     - return (offset < 32768) && (offset >= -32768);
1001     -}
1002     -
1003     /*
1004     * The fly in the ointment of code size changing from pass to pass is
1005     * avoided by padding the short branch case with a NOP. If code size differs
1006     @@ -238,7 +247,7 @@ static inline bool is_nearbranch(int offset)
1007     * state.
1008     */
1009     #define PPC_BCC(cond, dest) do { \
1010     - if (is_nearbranch((dest) - (ctx->idx * 4))) { \
1011     + if (is_offset_in_cond_branch_range((long)(dest) - (ctx->idx * 4))) { \
1012     PPC_BCC_SHORT(cond, dest); \
1013     PPC_NOP(); \
1014     } else { \
1015     diff --git a/arch/powerpc/net/bpf_jit64.h b/arch/powerpc/net/bpf_jit64.h
1016     index cf3a7e337f025..68ddf3502ab03 100644
1017     --- a/arch/powerpc/net/bpf_jit64.h
1018     +++ b/arch/powerpc/net/bpf_jit64.h
1019     @@ -16,18 +16,18 @@
1020     * with our redzone usage.
1021     *
1022     * [ prev sp ] <-------------
1023     - * [ nv gpr save area ] 6*8 |
1024     + * [ nv gpr save area ] 5*8 |
1025     * [ tail_call_cnt ] 8 |
1026     - * [ local_tmp_var ] 8 |
1027     + * [ local_tmp_var ] 16 |
1028     * fp (r31) --> [ ebpf stack space ] upto 512 |
1029     * [ frame header ] 32/112 |
1030     * sp (r1) ---> [ stack pointer ] --------------
1031     */
1032    
1033     /* for gpr non volatile registers BPG_REG_6 to 10 */
1034     -#define BPF_PPC_STACK_SAVE (6*8)
1035     +#define BPF_PPC_STACK_SAVE (5*8)
1036     /* for bpf JIT code internal usage */
1037     -#define BPF_PPC_STACK_LOCALS 16
1038     +#define BPF_PPC_STACK_LOCALS 24
1039     /* stack frame excluding BPF stack, ensure this is quadword aligned */
1040     #define BPF_PPC_STACKFRAME (STACK_FRAME_MIN_SIZE + \
1041     BPF_PPC_STACK_LOCALS + BPF_PPC_STACK_SAVE)
1042     diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
1043     index 81e6279c9874f..687cd352648aa 100644
1044     --- a/arch/powerpc/net/bpf_jit_comp64.c
1045     +++ b/arch/powerpc/net/bpf_jit_comp64.c
1046     @@ -15,6 +15,7 @@
1047     #include <linux/if_vlan.h>
1048     #include <asm/kprobes.h>
1049     #include <linux/bpf.h>
1050     +#include <asm/security_features.h>
1051    
1052     #include "bpf_jit64.h"
1053    
1054     @@ -56,9 +57,9 @@ static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
1055     * [ prev sp ] <-------------
1056     * [ ... ] |
1057     * sp (r1) ---> [ stack pointer ] --------------
1058     - * [ nv gpr save area ] 6*8
1059     + * [ nv gpr save area ] 5*8
1060     * [ tail_call_cnt ] 8
1061     - * [ local_tmp_var ] 8
1062     + * [ local_tmp_var ] 16
1063     * [ unused red zone ] 208 bytes protected
1064     */
1065     static int bpf_jit_stack_local(struct codegen_context *ctx)
1066     @@ -66,12 +67,12 @@ static int bpf_jit_stack_local(struct codegen_context *ctx)
1067     if (bpf_has_stack_frame(ctx))
1068     return STACK_FRAME_MIN_SIZE + ctx->stack_size;
1069     else
1070     - return -(BPF_PPC_STACK_SAVE + 16);
1071     + return -(BPF_PPC_STACK_SAVE + 24);
1072     }
1073    
1074     static int bpf_jit_stack_tailcallcnt(struct codegen_context *ctx)
1075     {
1076     - return bpf_jit_stack_local(ctx) + 8;
1077     + return bpf_jit_stack_local(ctx) + 16;
1078     }
1079    
1080     static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)
1081     @@ -224,7 +225,7 @@ static void bpf_jit_emit_func_call_rel(u32 *image, struct codegen_context *ctx,
1082     PPC_BLRL();
1083     }
1084    
1085     -static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
1086     +static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
1087     {
1088     /*
1089     * By now, the eBPF program has already setup parameters in r3, r4 and r5
1090     @@ -285,14 +286,39 @@ static void bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32
1091     bpf_jit_emit_common_epilogue(image, ctx);
1092    
1093     PPC_BCTR();
1094     +
1095     /* out: */
1096     + return 0;
1097     }
1098    
1099     +/*
1100     + * We spill into the redzone always, even if the bpf program has its own stackframe.
1101     + * Offsets hardcoded based on BPF_PPC_STACK_SAVE -- see bpf_jit_stack_local()
1102     + */
1103     +void bpf_stf_barrier(void);
1104     +
1105     +asm (
1106     +" .global bpf_stf_barrier ;"
1107     +" bpf_stf_barrier: ;"
1108     +" std 21,-64(1) ;"
1109     +" std 22,-56(1) ;"
1110     +" sync ;"
1111     +" ld 21,-64(1) ;"
1112     +" ld 22,-56(1) ;"
1113     +" ori 31,31,0 ;"
1114     +" .rept 14 ;"
1115     +" b 1f ;"
1116     +" 1: ;"
1117     +" .endr ;"
1118     +" blr ;"
1119     +);
1120     +
1121     /* Assemble the body code between the prologue & epilogue */
1122     static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
1123     struct codegen_context *ctx,
1124     u32 *addrs, bool extra_pass)
1125     {
1126     + enum stf_barrier_type stf_barrier = stf_barrier_type_get();
1127     const struct bpf_insn *insn = fp->insnsi;
1128     int flen = fp->len;
1129     int i, ret;
1130     @@ -347,18 +373,25 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
1131     PPC_SUB(dst_reg, dst_reg, src_reg);
1132     goto bpf_alu32_trunc;
1133     case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
1134     - case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
1135     case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
1136     + if (!imm) {
1137     + goto bpf_alu32_trunc;
1138     + } else if (imm >= -32768 && imm < 32768) {
1139     + PPC_ADDI(dst_reg, dst_reg, IMM_L(imm));
1140     + } else {
1141     + PPC_LI32(b2p[TMP_REG_1], imm);
1142     + PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]);
1143     + }
1144     + goto bpf_alu32_trunc;
1145     + case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
1146     case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
1147     - if (BPF_OP(code) == BPF_SUB)
1148     - imm = -imm;
1149     - if (imm) {
1150     - if (imm >= -32768 && imm < 32768)
1151     - PPC_ADDI(dst_reg, dst_reg, IMM_L(imm));
1152     - else {
1153     - PPC_LI32(b2p[TMP_REG_1], imm);
1154     - PPC_ADD(dst_reg, dst_reg, b2p[TMP_REG_1]);
1155     - }
1156     + if (!imm) {
1157     + goto bpf_alu32_trunc;
1158     + } else if (imm > -32768 && imm <= 32768) {
1159     + PPC_ADDI(dst_reg, dst_reg, IMM_L(-imm));
1160     + } else {
1161     + PPC_LI32(b2p[TMP_REG_1], imm);
1162     + PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]);
1163     }
1164     goto bpf_alu32_trunc;
1165     case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
1166     @@ -654,6 +687,30 @@ emit_clear:
1167     * BPF_ST NOSPEC (speculation barrier)
1168     */
1169     case BPF_ST | BPF_NOSPEC:
1170     + if (!security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) ||
1171     + (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR) &&
1172     + (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV) || !cpu_has_feature(CPU_FTR_HVMODE))))
1173     + break;
1174     +
1175     + switch (stf_barrier) {
1176     + case STF_BARRIER_EIEIO:
1177     + EMIT(0x7c0006ac | 0x02000000);
1178     + break;
1179     + case STF_BARRIER_SYNC_ORI:
1180     + EMIT(PPC_INST_SYNC);
1181     + PPC_LD(b2p[TMP_REG_1], 13, 0);
1182     + PPC_ORI(31, 31, 0);
1183     + break;
1184     + case STF_BARRIER_FALLBACK:
1185     + EMIT(PPC_INST_MFLR | ___PPC_RT(b2p[TMP_REG_1]));
1186     + PPC_LI64(12, dereference_kernel_function_descriptor(bpf_stf_barrier));
1187     + PPC_MTCTR(12);
1188     + EMIT(PPC_INST_BCTR | 0x1);
1189     + PPC_MTLR(b2p[TMP_REG_1]);
1190     + break;
1191     + case STF_BARRIER_NONE:
1192     + break;
1193     + }
1194     break;
1195    
1196     /*
1197     @@ -1001,7 +1058,9 @@ cond_branch:
1198     */
1199     case BPF_JMP | BPF_TAIL_CALL:
1200     ctx->seen |= SEEN_TAILCALL;
1201     - bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
1202     + ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
1203     + if (ret < 0)
1204     + return ret;
1205     break;
1206    
1207     default:
1208     diff --git a/arch/powerpc/platforms/44x/fsp2.c b/arch/powerpc/platforms/44x/fsp2.c
1209     index b299e43f5ef94..823397c802def 100644
1210     --- a/arch/powerpc/platforms/44x/fsp2.c
1211     +++ b/arch/powerpc/platforms/44x/fsp2.c
1212     @@ -208,6 +208,7 @@ static void node_irq_request(const char *compat, irq_handler_t errirq_handler)
1213     if (irq == NO_IRQ) {
1214     pr_err("device tree node %pOFn is missing a interrupt",
1215     np);
1216     + of_node_put(np);
1217     return;
1218     }
1219    
1220     @@ -215,6 +216,7 @@ static void node_irq_request(const char *compat, irq_handler_t errirq_handler)
1221     if (rc) {
1222     pr_err("fsp_of_probe: request_irq failed: np=%pOF rc=%d",
1223     np, rc);
1224     + of_node_put(np);
1225     return;
1226     }
1227     }
1228     diff --git a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c
1229     index 7c0133f558d02..ffa8a7a6a2db7 100644
1230     --- a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c
1231     +++ b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c
1232     @@ -94,9 +94,8 @@ int __init mpc85xx_setup_pmc(void)
1233     pr_err("Could not map guts node address\n");
1234     return -ENOMEM;
1235     }
1236     + qoriq_pm_ops = &mpc85xx_pm_ops;
1237     }
1238    
1239     - qoriq_pm_ops = &mpc85xx_pm_ops;
1240     -
1241     return 0;
1242     }
1243     diff --git a/arch/powerpc/platforms/powernv/opal-prd.c b/arch/powerpc/platforms/powernv/opal-prd.c
1244     index 45f4223a790f2..6ebc906e07b0a 100644
1245     --- a/arch/powerpc/platforms/powernv/opal-prd.c
1246     +++ b/arch/powerpc/platforms/powernv/opal-prd.c
1247     @@ -372,6 +372,12 @@ static struct notifier_block opal_prd_event_nb = {
1248     .priority = 0,
1249     };
1250    
1251     +static struct notifier_block opal_prd_event_nb2 = {
1252     + .notifier_call = opal_prd_msg_notifier,
1253     + .next = NULL,
1254     + .priority = 0,
1255     +};
1256     +
1257     static int opal_prd_probe(struct platform_device *pdev)
1258     {
1259     int rc;
1260     @@ -393,9 +399,10 @@ static int opal_prd_probe(struct platform_device *pdev)
1261     return rc;
1262     }
1263    
1264     - rc = opal_message_notifier_register(OPAL_MSG_PRD2, &opal_prd_event_nb);
1265     + rc = opal_message_notifier_register(OPAL_MSG_PRD2, &opal_prd_event_nb2);
1266     if (rc) {
1267     pr_err("Couldn't register PRD2 event notifier\n");
1268     + opal_message_notifier_unregister(OPAL_MSG_PRD, &opal_prd_event_nb);
1269     return rc;
1270     }
1271    
1272     @@ -404,6 +411,8 @@ static int opal_prd_probe(struct platform_device *pdev)
1273     pr_err("failed to register miscdev\n");
1274     opal_message_notifier_unregister(OPAL_MSG_PRD,
1275     &opal_prd_event_nb);
1276     + opal_message_notifier_unregister(OPAL_MSG_PRD2,
1277     + &opal_prd_event_nb2);
1278     return rc;
1279     }
1280    
1281     @@ -414,6 +423,7 @@ static int opal_prd_remove(struct platform_device *pdev)
1282     {
1283     misc_deregister(&opal_prd_dev);
1284     opal_message_notifier_unregister(OPAL_MSG_PRD, &opal_prd_event_nb);
1285     + opal_message_notifier_unregister(OPAL_MSG_PRD2, &opal_prd_event_nb2);
1286     return 0;
1287     }
1288    
1289     diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
1290     index 560310e29e275..fa69610fe6b12 100644
1291     --- a/arch/s390/kvm/priv.c
1292     +++ b/arch/s390/kvm/priv.c
1293     @@ -398,6 +398,8 @@ static int handle_sske(struct kvm_vcpu *vcpu)
1294     up_read(&current->mm->mmap_sem);
1295     if (rc == -EFAULT)
1296     return kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
1297     + if (rc == -EAGAIN)
1298     + continue;
1299     if (rc < 0)
1300     return rc;
1301     start += PAGE_SIZE;
1302     diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c
1303     index 4fa7a562c6fc1..5e5a4e1f0e6cf 100644
1304     --- a/arch/s390/mm/gmap.c
1305     +++ b/arch/s390/mm/gmap.c
1306     @@ -684,9 +684,10 @@ void __gmap_zap(struct gmap *gmap, unsigned long gaddr)
1307     vmaddr |= gaddr & ~PMD_MASK;
1308     /* Get pointer to the page table entry */
1309     ptep = get_locked_pte(gmap->mm, vmaddr, &ptl);
1310     - if (likely(ptep))
1311     + if (likely(ptep)) {
1312     ptep_zap_unused(gmap->mm, vmaddr, ptep, 0);
1313     - pte_unmap_unlock(ptep, ptl);
1314     + pte_unmap_unlock(ptep, ptl);
1315     + }
1316     }
1317     }
1318     EXPORT_SYMBOL_GPL(__gmap_zap);
1319     diff --git a/arch/sh/kernel/cpu/fpu.c b/arch/sh/kernel/cpu/fpu.c
1320     index ae354a2931e7e..fd6db0ab19288 100644
1321     --- a/arch/sh/kernel/cpu/fpu.c
1322     +++ b/arch/sh/kernel/cpu/fpu.c
1323     @@ -62,18 +62,20 @@ void fpu_state_restore(struct pt_regs *regs)
1324     }
1325    
1326     if (!tsk_used_math(tsk)) {
1327     - local_irq_enable();
1328     + int ret;
1329     /*
1330     * does a slab alloc which can sleep
1331     */
1332     - if (init_fpu(tsk)) {
1333     + local_irq_enable();
1334     + ret = init_fpu(tsk);
1335     + local_irq_disable();
1336     + if (ret) {
1337     /*
1338     * ran out of memory!
1339     */
1340     - do_group_exit(SIGKILL);
1341     + force_sig(SIGKILL);
1342     return;
1343     }
1344     - local_irq_disable();
1345     }
1346    
1347     grab_fpu(regs);
1348     diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
1349     index 79583bac9ac4a..812db1ac8cb11 100644
1350     --- a/arch/x86/hyperv/hv_init.c
1351     +++ b/arch/x86/hyperv/hv_init.c
1352     @@ -155,7 +155,6 @@ void set_hv_tscchange_cb(void (*cb)(void))
1353     struct hv_reenlightenment_control re_ctrl = {
1354     .vector = HYPERV_REENLIGHTENMENT_VECTOR,
1355     .enabled = 1,
1356     - .target_vp = hv_vp_index[smp_processor_id()]
1357     };
1358     struct hv_tsc_emulation_control emu_ctrl = {.enabled = 1};
1359    
1360     @@ -169,8 +168,12 @@ void set_hv_tscchange_cb(void (*cb)(void))
1361     /* Make sure callback is registered before we write to MSRs */
1362     wmb();
1363    
1364     + re_ctrl.target_vp = hv_vp_index[get_cpu()];
1365     +
1366     wrmsrl(HV_X64_MSR_REENLIGHTENMENT_CONTROL, *((u64 *)&re_ctrl));
1367     wrmsrl(HV_X64_MSR_TSC_EMULATION_CONTROL, *((u64 *)&emu_ctrl));
1368     +
1369     + put_cpu();
1370     }
1371     EXPORT_SYMBOL_GPL(set_hv_tscchange_cb);
1372    
1373     diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h
1374     index 288b065955b72..9d0b479452720 100644
1375     --- a/arch/x86/include/asm/page_64_types.h
1376     +++ b/arch/x86/include/asm/page_64_types.h
1377     @@ -15,7 +15,7 @@
1378     #define THREAD_SIZE_ORDER (2 + KASAN_STACK_ORDER)
1379     #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
1380    
1381     -#define EXCEPTION_STACK_ORDER (0 + KASAN_STACK_ORDER)
1382     +#define EXCEPTION_STACK_ORDER (1 + KASAN_STACK_ORDER)
1383     #define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
1384    
1385     #define IRQ_STACK_ORDER (2 + KASAN_STACK_ORDER)
1386     diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
1387     index 753f3dfbc9c91..88cef978380bf 100644
1388     --- a/arch/x86/kernel/cpu/amd.c
1389     +++ b/arch/x86/kernel/cpu/amd.c
1390     @@ -987,6 +987,8 @@ static void init_amd(struct cpuinfo_x86 *c)
1391     if (cpu_has(c, X86_FEATURE_IRPERF) &&
1392     !cpu_has_amd_erratum(c, amd_erratum_1054))
1393     msr_set_bit(MSR_K7_HWCR, MSR_K7_HWCR_IRPERF_EN_BIT);
1394     +
1395     + check_null_seg_clears_base(c);
1396     }
1397    
1398     #ifdef CONFIG_X86_32
1399     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
1400     index f961a56e9da3f..4c85ca112a2a9 100644
1401     --- a/arch/x86/kernel/cpu/common.c
1402     +++ b/arch/x86/kernel/cpu/common.c
1403     @@ -1336,9 +1336,8 @@ void __init early_cpu_init(void)
1404     early_identify_cpu(&boot_cpu_data);
1405     }
1406    
1407     -static void detect_null_seg_behavior(struct cpuinfo_x86 *c)
1408     +static bool detect_null_seg_behavior(void)
1409     {
1410     -#ifdef CONFIG_X86_64
1411     /*
1412     * Empirically, writing zero to a segment selector on AMD does
1413     * not clear the base, whereas writing zero to a segment
1414     @@ -1359,10 +1358,43 @@ static void detect_null_seg_behavior(struct cpuinfo_x86 *c)
1415     wrmsrl(MSR_FS_BASE, 1);
1416     loadsegment(fs, 0);
1417     rdmsrl(MSR_FS_BASE, tmp);
1418     - if (tmp != 0)
1419     - set_cpu_bug(c, X86_BUG_NULL_SEG);
1420     wrmsrl(MSR_FS_BASE, old_base);
1421     -#endif
1422     + return tmp == 0;
1423     +}
1424     +
1425     +void check_null_seg_clears_base(struct cpuinfo_x86 *c)
1426     +{
1427     + /* BUG_NULL_SEG is only relevant with 64bit userspace */
1428     + if (!IS_ENABLED(CONFIG_X86_64))
1429     + return;
1430     +
1431     + /* Zen3 CPUs advertise Null Selector Clears Base in CPUID. */
1432     + if (c->extended_cpuid_level >= 0x80000021 &&
1433     + cpuid_eax(0x80000021) & BIT(6))
1434     + return;
1435     +
1436     + /*
1437     + * CPUID bit above wasn't set. If this kernel is still running
1438     + * as a HV guest, then the HV has decided not to advertize
1439     + * that CPUID bit for whatever reason. For example, one
1440     + * member of the migration pool might be vulnerable. Which
1441     + * means, the bug is present: set the BUG flag and return.
1442     + */
1443     + if (cpu_has(c, X86_FEATURE_HYPERVISOR)) {
1444     + set_cpu_bug(c, X86_BUG_NULL_SEG);
1445     + return;
1446     + }
1447     +
1448     + /*
1449     + * Zen2 CPUs also have this behaviour, but no CPUID bit.
1450     + * 0x18 is the respective family for Hygon.
1451     + */
1452     + if ((c->x86 == 0x17 || c->x86 == 0x18) &&
1453     + detect_null_seg_behavior())
1454     + return;
1455     +
1456     + /* All the remaining ones are affected */
1457     + set_cpu_bug(c, X86_BUG_NULL_SEG);
1458     }
1459    
1460     static void generic_identify(struct cpuinfo_x86 *c)
1461     @@ -1398,8 +1430,6 @@ static void generic_identify(struct cpuinfo_x86 *c)
1462    
1463     get_model_name(c); /* Default name */
1464    
1465     - detect_null_seg_behavior(c);
1466     -
1467     /*
1468     * ESPFIX is a strange bug. All real CPUs have it. Paravirt
1469     * systems that run Linux at CPL > 0 may or may not have the
1470     diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h
1471     index 9d033693519aa..4d04c127c4a79 100644
1472     --- a/arch/x86/kernel/cpu/cpu.h
1473     +++ b/arch/x86/kernel/cpu/cpu.h
1474     @@ -73,6 +73,7 @@ extern int detect_extended_topology_early(struct cpuinfo_x86 *c);
1475     extern int detect_extended_topology(struct cpuinfo_x86 *c);
1476     extern int detect_ht_early(struct cpuinfo_x86 *c);
1477     extern void detect_ht(struct cpuinfo_x86 *c);
1478     +extern void check_null_seg_clears_base(struct cpuinfo_x86 *c);
1479    
1480     unsigned int aperfmperf_get_khz(int cpu);
1481    
1482     diff --git a/arch/x86/kernel/cpu/hygon.c b/arch/x86/kernel/cpu/hygon.c
1483     index 62e9a982adaf9..b232bd0be78d6 100644
1484     --- a/arch/x86/kernel/cpu/hygon.c
1485     +++ b/arch/x86/kernel/cpu/hygon.c
1486     @@ -350,6 +350,8 @@ static void init_hygon(struct cpuinfo_x86 *c)
1487     /* Hygon CPUs don't reset SS attributes on SYSRET, Xen does. */
1488     if (!cpu_has(c, X86_FEATURE_XENPV))
1489     set_cpu_bug(c, X86_BUG_SYSRET_SS_ATTRS);
1490     +
1491     + check_null_seg_clears_base(c);
1492     }
1493    
1494     static void cpu_detect_tlb_hygon(struct cpuinfo_x86 *c)
1495     diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
1496     index 21efee32e2b12..7dfd0185767cc 100644
1497     --- a/arch/x86/kernel/irq.c
1498     +++ b/arch/x86/kernel/irq.c
1499     @@ -295,8 +295,10 @@ void kvm_set_posted_intr_wakeup_handler(void (*handler)(void))
1500     {
1501     if (handler)
1502     kvm_posted_intr_wakeup_handler = handler;
1503     - else
1504     + else {
1505     kvm_posted_intr_wakeup_handler = dummy_handler;
1506     + synchronize_rcu();
1507     + }
1508     }
1509     EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler);
1510    
1511     diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
1512     index e177848a36313..0f7c051984062 100644
1513     --- a/arch/x86/kvm/vmx/vmx.c
1514     +++ b/arch/x86/kvm/vmx/vmx.c
1515     @@ -785,15 +785,15 @@ void update_exception_bitmap(struct kvm_vcpu *vcpu)
1516     /*
1517     * Check if MSR is intercepted for currently loaded MSR bitmap.
1518     */
1519     -static bool msr_write_intercepted(struct kvm_vcpu *vcpu, u32 msr)
1520     +static bool msr_write_intercepted(struct vcpu_vmx *vmx, u32 msr)
1521     {
1522     unsigned long *msr_bitmap;
1523     int f = sizeof(unsigned long);
1524    
1525     - if (!cpu_has_vmx_msr_bitmap())
1526     + if (!(exec_controls_get(vmx) & CPU_BASED_USE_MSR_BITMAPS))
1527     return true;
1528    
1529     - msr_bitmap = to_vmx(vcpu)->loaded_vmcs->msr_bitmap;
1530     + msr_bitmap = vmx->loaded_vmcs->msr_bitmap;
1531    
1532     if (msr <= 0x1fff) {
1533     return !!test_bit(msr, msr_bitmap + 0x800 / f);
1534     @@ -6579,7 +6579,7 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
1535     * If the L02 MSR bitmap does not intercept the MSR, then we need to
1536     * save it.
1537     */
1538     - if (unlikely(!msr_write_intercepted(vcpu, MSR_IA32_SPEC_CTRL)))
1539     + if (unlikely(!msr_write_intercepted(vmx, MSR_IA32_SPEC_CTRL)))
1540     vmx->spec_ctrl = native_read_msr(MSR_IA32_SPEC_CTRL);
1541    
1542     x86_spec_ctrl_restore_host(vmx->spec_ctrl, 0);
1543     diff --git a/arch/x86/mm/mem_encrypt_identity.c b/arch/x86/mm/mem_encrypt_identity.c
1544     index 84cda5dc03870..ebc8e3af1c675 100644
1545     --- a/arch/x86/mm/mem_encrypt_identity.c
1546     +++ b/arch/x86/mm/mem_encrypt_identity.c
1547     @@ -27,6 +27,15 @@
1548     #undef CONFIG_PARAVIRT_XXL
1549     #undef CONFIG_PARAVIRT_SPINLOCKS
1550    
1551     +/*
1552     + * This code runs before CPU feature bits are set. By default, the
1553     + * pgtable_l5_enabled() function uses bit X86_FEATURE_LA57 to determine if
1554     + * 5-level paging is active, so that won't work here. USE_EARLY_PGTABLE_L5
1555     + * is provided to handle this situation and, instead, use a variable that
1556     + * has been set by the early boot code.
1557     + */
1558     +#define USE_EARLY_PGTABLE_L5
1559     +
1560     #include <linux/kernel.h>
1561     #include <linux/mm.h>
1562     #include <linux/mem_encrypt.h>
1563     diff --git a/block/blk-mq.c b/block/blk-mq.c
1564     index 0674f53c60528..84798d09ca464 100644
1565     --- a/block/blk-mq.c
1566     +++ b/block/blk-mq.c
1567     @@ -733,7 +733,6 @@ void blk_mq_requeue_request(struct request *rq, bool kick_requeue_list)
1568     /* this request will be re-inserted to io scheduler queue */
1569     blk_mq_sched_requeue_request(rq);
1570    
1571     - BUG_ON(!list_empty(&rq->queuelist));
1572     blk_mq_add_to_requeue_list(rq, true, kick_requeue_list);
1573     }
1574     EXPORT_SYMBOL(blk_mq_requeue_request);
1575     diff --git a/crypto/Kconfig b/crypto/Kconfig
1576     index b2cc0ad3792ad..ce60ec30e78df 100644
1577     --- a/crypto/Kconfig
1578     +++ b/crypto/Kconfig
1579     @@ -242,12 +242,12 @@ config CRYPTO_DH
1580    
1581     config CRYPTO_ECC
1582     tristate
1583     + select CRYPTO_RNG_DEFAULT
1584    
1585     config CRYPTO_ECDH
1586     tristate "ECDH algorithm"
1587     select CRYPTO_ECC
1588     select CRYPTO_KPP
1589     - select CRYPTO_RNG_DEFAULT
1590     help
1591     Generic implementation of the ECDH algorithm
1592    
1593     diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
1594     index a4f3b3f342c8d..276d2fd9e911c 100644
1595     --- a/crypto/pcrypt.c
1596     +++ b/crypto/pcrypt.c
1597     @@ -79,12 +79,14 @@ static void pcrypt_aead_enc(struct padata_priv *padata)
1598     {
1599     struct pcrypt_request *preq = pcrypt_padata_request(padata);
1600     struct aead_request *req = pcrypt_request_ctx(preq);
1601     + int ret;
1602    
1603     - padata->info = crypto_aead_encrypt(req);
1604     + ret = crypto_aead_encrypt(req);
1605    
1606     - if (padata->info == -EINPROGRESS)
1607     + if (ret == -EINPROGRESS)
1608     return;
1609    
1610     + padata->info = ret;
1611     padata_do_serial(padata);
1612     }
1613    
1614     @@ -124,12 +126,14 @@ static void pcrypt_aead_dec(struct padata_priv *padata)
1615     {
1616     struct pcrypt_request *preq = pcrypt_padata_request(padata);
1617     struct aead_request *req = pcrypt_request_ctx(preq);
1618     + int ret;
1619    
1620     - padata->info = crypto_aead_decrypt(req);
1621     + ret = crypto_aead_decrypt(req);
1622    
1623     - if (padata->info == -EINPROGRESS)
1624     + if (ret == -EINPROGRESS)
1625     return;
1626    
1627     + padata->info = ret;
1628     padata_do_serial(padata);
1629     }
1630    
1631     diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h
1632     index fd3beea934213..42c4bfd796f42 100644
1633     --- a/drivers/acpi/acpica/acglobal.h
1634     +++ b/drivers/acpi/acpica/acglobal.h
1635     @@ -220,6 +220,8 @@ extern struct acpi_bit_register_info
1636     acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
1637     ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a);
1638     ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b);
1639     +ACPI_GLOBAL(u8, acpi_gbl_sleep_type_a_s0);
1640     +ACPI_GLOBAL(u8, acpi_gbl_sleep_type_b_s0);
1641    
1642     /*****************************************************************************
1643     *
1644     diff --git a/drivers/acpi/acpica/hwesleep.c b/drivers/acpi/acpica/hwesleep.c
1645     index dee3affaca491..aa502ae3b6b31 100644
1646     --- a/drivers/acpi/acpica/hwesleep.c
1647     +++ b/drivers/acpi/acpica/hwesleep.c
1648     @@ -147,17 +147,13 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
1649    
1650     acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
1651     {
1652     - acpi_status status;
1653     u8 sleep_type_value;
1654    
1655     ACPI_FUNCTION_TRACE(hw_extended_wake_prep);
1656    
1657     - status = acpi_get_sleep_type_data(ACPI_STATE_S0,
1658     - &acpi_gbl_sleep_type_a,
1659     - &acpi_gbl_sleep_type_b);
1660     - if (ACPI_SUCCESS(status)) {
1661     + if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
1662     sleep_type_value =
1663     - ((acpi_gbl_sleep_type_a << ACPI_X_SLEEP_TYPE_POSITION) &
1664     + ((acpi_gbl_sleep_type_a_s0 << ACPI_X_SLEEP_TYPE_POSITION) &
1665     ACPI_X_SLEEP_TYPE_MASK);
1666    
1667     (void)acpi_write((u64)(sleep_type_value | ACPI_X_SLEEP_ENABLE),
1668     diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
1669     index b62db8ec446fa..5f7d63badbe9d 100644
1670     --- a/drivers/acpi/acpica/hwsleep.c
1671     +++ b/drivers/acpi/acpica/hwsleep.c
1672     @@ -179,7 +179,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
1673    
1674     acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
1675     {
1676     - acpi_status status;
1677     + acpi_status status = AE_OK;
1678     struct acpi_bit_register_info *sleep_type_reg_info;
1679     struct acpi_bit_register_info *sleep_enable_reg_info;
1680     u32 pm1a_control;
1681     @@ -192,10 +192,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
1682     * This is unclear from the ACPI Spec, but it is required
1683     * by some machines.
1684     */
1685     - status = acpi_get_sleep_type_data(ACPI_STATE_S0,
1686     - &acpi_gbl_sleep_type_a,
1687     - &acpi_gbl_sleep_type_b);
1688     - if (ACPI_SUCCESS(status)) {
1689     + if (acpi_gbl_sleep_type_a_s0 != ACPI_SLEEP_TYPE_INVALID) {
1690     sleep_type_reg_info =
1691     acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE);
1692     sleep_enable_reg_info =
1693     @@ -216,9 +213,9 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
1694    
1695     /* Insert the SLP_TYP bits */
1696    
1697     - pm1a_control |= (acpi_gbl_sleep_type_a <<
1698     + pm1a_control |= (acpi_gbl_sleep_type_a_s0 <<
1699     sleep_type_reg_info->bit_position);
1700     - pm1b_control |= (acpi_gbl_sleep_type_b <<
1701     + pm1b_control |= (acpi_gbl_sleep_type_b_s0 <<
1702     sleep_type_reg_info->bit_position);
1703    
1704     /* Write the control registers and ignore any errors */
1705     diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c
1706     index abbf9702aa7f2..79731efbe8fe2 100644
1707     --- a/drivers/acpi/acpica/hwxfsleep.c
1708     +++ b/drivers/acpi/acpica/hwxfsleep.c
1709     @@ -214,6 +214,13 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
1710     return_ACPI_STATUS(status);
1711     }
1712    
1713     + status = acpi_get_sleep_type_data(ACPI_STATE_S0,
1714     + &acpi_gbl_sleep_type_a_s0,
1715     + &acpi_gbl_sleep_type_b_s0);
1716     + if (ACPI_FAILURE(status)) {
1717     + acpi_gbl_sleep_type_a_s0 = ACPI_SLEEP_TYPE_INVALID;
1718     + }
1719     +
1720     /* Execute the _PTS method (Prepare To Sleep) */
1721    
1722     arg_list.count = 1;
1723     diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
1724     index 254a7d98b9d4c..6e96ed68b3379 100644
1725     --- a/drivers/acpi/battery.c
1726     +++ b/drivers/acpi/battery.c
1727     @@ -185,7 +185,7 @@ static int acpi_battery_is_charged(struct acpi_battery *battery)
1728     return 1;
1729    
1730     /* fallback to using design values for broken batteries */
1731     - if (battery->design_capacity == battery->capacity_now)
1732     + if (battery->design_capacity <= battery->capacity_now)
1733     return 1;
1734    
1735     /* we don't do any sort of metric based on percentages */
1736     diff --git a/drivers/acpi/pmic/intel_pmic.c b/drivers/acpi/pmic/intel_pmic.c
1737     index 452041398b347..36d5a5d50b2ff 100644
1738     --- a/drivers/acpi/pmic/intel_pmic.c
1739     +++ b/drivers/acpi/pmic/intel_pmic.c
1740     @@ -211,31 +211,36 @@ static acpi_status intel_pmic_regs_handler(u32 function,
1741     void *handler_context, void *region_context)
1742     {
1743     struct intel_pmic_opregion *opregion = region_context;
1744     - int result = 0;
1745     + int result = -EINVAL;
1746     +
1747     + if (function == ACPI_WRITE) {
1748     + switch (address) {
1749     + case 0:
1750     + return AE_OK;
1751     + case 1:
1752     + opregion->ctx.addr |= (*value64 & 0xff) << 8;
1753     + return AE_OK;
1754     + case 2:
1755     + opregion->ctx.addr |= *value64 & 0xff;
1756     + return AE_OK;
1757     + case 3:
1758     + opregion->ctx.val = *value64 & 0xff;
1759     + return AE_OK;
1760     + case 4:
1761     + if (*value64) {
1762     + result = regmap_write(opregion->regmap, opregion->ctx.addr,
1763     + opregion->ctx.val);
1764     + } else {
1765     + result = regmap_read(opregion->regmap, opregion->ctx.addr,
1766     + &opregion->ctx.val);
1767     + }
1768     + opregion->ctx.addr = 0;
1769     + }
1770     + }
1771    
1772     - switch (address) {
1773     - case 0:
1774     - return AE_OK;
1775     - case 1:
1776     - opregion->ctx.addr |= (*value64 & 0xff) << 8;
1777     - return AE_OK;
1778     - case 2:
1779     - opregion->ctx.addr |= *value64 & 0xff;
1780     + if (function == ACPI_READ && address == 3) {
1781     + *value64 = opregion->ctx.val;
1782     return AE_OK;
1783     - case 3:
1784     - opregion->ctx.val = *value64 & 0xff;
1785     - return AE_OK;
1786     - case 4:
1787     - if (*value64) {
1788     - result = regmap_write(opregion->regmap, opregion->ctx.addr,
1789     - opregion->ctx.val);
1790     - } else {
1791     - result = regmap_read(opregion->regmap, opregion->ctx.addr,
1792     - &opregion->ctx.val);
1793     - if (result == 0)
1794     - *value64 = opregion->ctx.val;
1795     - }
1796     - memset(&opregion->ctx, 0x00, sizeof(opregion->ctx));
1797     }
1798    
1799     if (result < 0) {
1800     diff --git a/drivers/android/binder.c b/drivers/android/binder.c
1801     index 2be6687c0148f..47f839bc0234f 100644
1802     --- a/drivers/android/binder.c
1803     +++ b/drivers/android/binder.c
1804     @@ -424,6 +424,9 @@ enum binder_deferred_state {
1805     * (invariant after initialized)
1806     * @tsk task_struct for group_leader of process
1807     * (invariant after initialized)
1808     + * @cred struct cred associated with the `struct file`
1809     + * in binder_open()
1810     + * (invariant after initialized)
1811     * @deferred_work_node: element for binder_deferred_list
1812     * (protected by binder_deferred_lock)
1813     * @deferred_work: bitmap of deferred work to perform
1814     @@ -469,6 +472,7 @@ struct binder_proc {
1815     struct list_head waiting_threads;
1816     int pid;
1817     struct task_struct *tsk;
1818     + const struct cred *cred;
1819     struct hlist_node deferred_work_node;
1820     int deferred_work;
1821     bool is_dead;
1822     @@ -2442,7 +2446,7 @@ static int binder_translate_binder(struct flat_binder_object *fp,
1823     ret = -EINVAL;
1824     goto done;
1825     }
1826     - if (security_binder_transfer_binder(proc->tsk, target_proc->tsk)) {
1827     + if (security_binder_transfer_binder(proc->cred, target_proc->cred)) {
1828     ret = -EPERM;
1829     goto done;
1830     }
1831     @@ -2488,7 +2492,7 @@ static int binder_translate_handle(struct flat_binder_object *fp,
1832     proc->pid, thread->pid, fp->handle);
1833     return -EINVAL;
1834     }
1835     - if (security_binder_transfer_binder(proc->tsk, target_proc->tsk)) {
1836     + if (security_binder_transfer_binder(proc->cred, target_proc->cred)) {
1837     ret = -EPERM;
1838     goto done;
1839     }
1840     @@ -2576,7 +2580,7 @@ static int binder_translate_fd(u32 fd, binder_size_t fd_offset,
1841     ret = -EBADF;
1842     goto err_fget;
1843     }
1844     - ret = security_binder_transfer_file(proc->tsk, target_proc->tsk, file);
1845     + ret = security_binder_transfer_file(proc->cred, target_proc->cred, file);
1846     if (ret < 0) {
1847     ret = -EPERM;
1848     goto err_security;
1849     @@ -2975,8 +2979,8 @@ static void binder_transaction(struct binder_proc *proc,
1850     return_error_line = __LINE__;
1851     goto err_invalid_target_handle;
1852     }
1853     - if (security_binder_transaction(proc->tsk,
1854     - target_proc->tsk) < 0) {
1855     + if (security_binder_transaction(proc->cred,
1856     + target_proc->cred) < 0) {
1857     return_error = BR_FAILED_REPLY;
1858     return_error_param = -EPERM;
1859     return_error_line = __LINE__;
1860     @@ -3091,7 +3095,7 @@ static void binder_transaction(struct binder_proc *proc,
1861     t->from = thread;
1862     else
1863     t->from = NULL;
1864     - t->sender_euid = task_euid(proc->tsk);
1865     + t->sender_euid = proc->cred->euid;
1866     t->to_proc = target_proc;
1867     t->to_thread = target_thread;
1868     t->code = tr->code;
1869     @@ -3102,7 +3106,7 @@ static void binder_transaction(struct binder_proc *proc,
1870     u32 secid;
1871     size_t added_size;
1872    
1873     - security_task_getsecid(proc->tsk, &secid);
1874     + security_cred_getsecid(proc->cred, &secid);
1875     ret = security_secid_to_secctx(secid, &secctx, &secctx_sz);
1876     if (ret) {
1877     return_error = BR_FAILED_REPLY;
1878     @@ -4707,6 +4711,7 @@ static void binder_free_proc(struct binder_proc *proc)
1879     }
1880     binder_alloc_deferred_release(&proc->alloc);
1881     put_task_struct(proc->tsk);
1882     + put_cred(proc->cred);
1883     binder_stats_deleted(BINDER_STAT_PROC);
1884     kfree(proc);
1885     }
1886     @@ -4917,7 +4922,7 @@ static int binder_ioctl_set_ctx_mgr(struct file *filp,
1887     ret = -EBUSY;
1888     goto out;
1889     }
1890     - ret = security_binder_set_context_mgr(proc->tsk);
1891     + ret = security_binder_set_context_mgr(proc->cred);
1892     if (ret < 0)
1893     goto out;
1894     if (uid_valid(context->binder_context_mgr_uid)) {
1895     @@ -5234,6 +5239,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
1896     spin_lock_init(&proc->outer_lock);
1897     get_task_struct(current->group_leader);
1898     proc->tsk = current->group_leader;
1899     + proc->cred = get_cred(filp->f_cred);
1900     INIT_LIST_HEAD(&proc->todo);
1901     proc->default_priority = task_nice(current);
1902     /* binderfs stashes devices in i_private */
1903     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
1904     index 7c6c05fd5dfc3..bed433fd9c700 100644
1905     --- a/drivers/ata/libata-core.c
1906     +++ b/drivers/ata/libata-core.c
1907     @@ -2057,7 +2057,7 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
1908    
1909     retry:
1910     ata_tf_init(dev, &tf);
1911     - if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) &&
1912     + if (ata_dma_enabled(dev) && ata_id_has_read_log_dma_ext(dev->id) &&
1913     !(dev->horkage & ATA_HORKAGE_NO_DMA_LOG)) {
1914     tf.command = ATA_CMD_READ_LOG_DMA_EXT;
1915     tf.protocol = ATA_PROT_DMA;
1916     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
1917     index 3bfd9da584734..c6a21a784ec65 100644
1918     --- a/drivers/ata/libata-eh.c
1919     +++ b/drivers/ata/libata-eh.c
1920     @@ -97,6 +97,12 @@ static const unsigned long ata_eh_identify_timeouts[] = {
1921     ULONG_MAX,
1922     };
1923    
1924     +static const unsigned long ata_eh_revalidate_timeouts[] = {
1925     + 15000, /* Some drives are slow to read log pages when waking-up */
1926     + 15000, /* combined time till here is enough even for media access */
1927     + ULONG_MAX,
1928     +};
1929     +
1930     static const unsigned long ata_eh_flush_timeouts[] = {
1931     15000, /* be generous with flush */
1932     15000, /* ditto */
1933     @@ -133,6 +139,8 @@ static const struct ata_eh_cmd_timeout_ent
1934     ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = {
1935     { .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI),
1936     .timeouts = ata_eh_identify_timeouts, },
1937     + { .commands = CMDS(ATA_CMD_READ_LOG_EXT, ATA_CMD_READ_LOG_DMA_EXT),
1938     + .timeouts = ata_eh_revalidate_timeouts, },
1939     { .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT),
1940     .timeouts = ata_eh_other_timeouts, },
1941     { .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT),
1942     diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
1943     index 33b887b389061..59109b410c67f 100644
1944     --- a/drivers/auxdisplay/ht16k33.c
1945     +++ b/drivers/auxdisplay/ht16k33.c
1946     @@ -219,6 +219,15 @@ static const struct backlight_ops ht16k33_bl_ops = {
1947     .check_fb = ht16k33_bl_check_fb,
1948     };
1949    
1950     +/*
1951     + * Blank events will be passed to the actual device handling the backlight when
1952     + * we return zero here.
1953     + */
1954     +static int ht16k33_blank(int blank, struct fb_info *info)
1955     +{
1956     + return 0;
1957     +}
1958     +
1959     static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
1960     {
1961     struct ht16k33_priv *priv = info->par;
1962     @@ -231,6 +240,7 @@ static struct fb_ops ht16k33_fb_ops = {
1963     .owner = THIS_MODULE,
1964     .fb_read = fb_sys_read,
1965     .fb_write = fb_sys_write,
1966     + .fb_blank = ht16k33_blank,
1967     .fb_fillrect = sys_fillrect,
1968     .fb_copyarea = sys_copyarea,
1969     .fb_imageblit = sys_imageblit,
1970     @@ -418,6 +428,33 @@ static int ht16k33_probe(struct i2c_client *client,
1971     if (err)
1972     return err;
1973    
1974     + /* Backlight */
1975     + memset(&bl_props, 0, sizeof(struct backlight_properties));
1976     + bl_props.type = BACKLIGHT_RAW;
1977     + bl_props.max_brightness = MAX_BRIGHTNESS;
1978     +
1979     + bl = devm_backlight_device_register(&client->dev, DRIVER_NAME"-bl",
1980     + &client->dev, priv,
1981     + &ht16k33_bl_ops, &bl_props);
1982     + if (IS_ERR(bl)) {
1983     + dev_err(&client->dev, "failed to register backlight\n");
1984     + return PTR_ERR(bl);
1985     + }
1986     +
1987     + err = of_property_read_u32(node, "default-brightness-level",
1988     + &dft_brightness);
1989     + if (err) {
1990     + dft_brightness = MAX_BRIGHTNESS;
1991     + } else if (dft_brightness > MAX_BRIGHTNESS) {
1992     + dev_warn(&client->dev,
1993     + "invalid default brightness level: %u, using %u\n",
1994     + dft_brightness, MAX_BRIGHTNESS);
1995     + dft_brightness = MAX_BRIGHTNESS;
1996     + }
1997     +
1998     + bl->props.brightness = dft_brightness;
1999     + ht16k33_bl_update_status(bl);
2000     +
2001     /* Framebuffer (2 bytes per column) */
2002     BUILD_BUG_ON(PAGE_SIZE < HT16K33_FB_SIZE);
2003     fbdev->buffer = (unsigned char *) get_zeroed_page(GFP_KERNEL);
2004     @@ -450,6 +487,7 @@ static int ht16k33_probe(struct i2c_client *client,
2005     fbdev->info->screen_size = HT16K33_FB_SIZE;
2006     fbdev->info->fix = ht16k33_fb_fix;
2007     fbdev->info->var = ht16k33_fb_var;
2008     + fbdev->info->bl_dev = bl;
2009     fbdev->info->pseudo_palette = NULL;
2010     fbdev->info->flags = FBINFO_FLAG_DEFAULT;
2011     fbdev->info->par = priv;
2012     @@ -462,34 +500,6 @@ static int ht16k33_probe(struct i2c_client *client,
2013     if (err)
2014     goto err_fbdev_unregister;
2015    
2016     - /* Backlight */
2017     - memset(&bl_props, 0, sizeof(struct backlight_properties));
2018     - bl_props.type = BACKLIGHT_RAW;
2019     - bl_props.max_brightness = MAX_BRIGHTNESS;
2020     -
2021     - bl = devm_backlight_device_register(&client->dev, DRIVER_NAME"-bl",
2022     - &client->dev, priv,
2023     - &ht16k33_bl_ops, &bl_props);
2024     - if (IS_ERR(bl)) {
2025     - dev_err(&client->dev, "failed to register backlight\n");
2026     - err = PTR_ERR(bl);
2027     - goto err_fbdev_unregister;
2028     - }
2029     -
2030     - err = of_property_read_u32(node, "default-brightness-level",
2031     - &dft_brightness);
2032     - if (err) {
2033     - dft_brightness = MAX_BRIGHTNESS;
2034     - } else if (dft_brightness > MAX_BRIGHTNESS) {
2035     - dev_warn(&client->dev,
2036     - "invalid default brightness level: %u, using %u\n",
2037     - dft_brightness, MAX_BRIGHTNESS);
2038     - dft_brightness = MAX_BRIGHTNESS;
2039     - }
2040     -
2041     - bl->props.brightness = dft_brightness;
2042     - ht16k33_bl_update_status(bl);
2043     -
2044     ht16k33_fb_queue(priv);
2045     return 0;
2046    
2047     diff --git a/drivers/auxdisplay/img-ascii-lcd.c b/drivers/auxdisplay/img-ascii-lcd.c
2048     index efb928e25aef3..9556d6827f005 100644
2049     --- a/drivers/auxdisplay/img-ascii-lcd.c
2050     +++ b/drivers/auxdisplay/img-ascii-lcd.c
2051     @@ -280,6 +280,16 @@ static int img_ascii_lcd_display(struct img_ascii_lcd_ctx *ctx,
2052     if (msg[count - 1] == '\n')
2053     count--;
2054    
2055     + if (!count) {
2056     + /* clear the LCD */
2057     + devm_kfree(&ctx->pdev->dev, ctx->message);
2058     + ctx->message = NULL;
2059     + ctx->message_len = 0;
2060     + memset(ctx->curr, ' ', ctx->cfg->num_chars);
2061     + ctx->cfg->update(ctx);
2062     + return 0;
2063     + }
2064     +
2065     new_msg = devm_kmalloc(&ctx->pdev->dev, count + 1, GFP_KERNEL);
2066     if (!new_msg)
2067     return -ENOMEM;
2068     diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c
2069     index bd7d3bb8b890b..ad4cf10749100 100644
2070     --- a/drivers/block/ataflop.c
2071     +++ b/drivers/block/ataflop.c
2072     @@ -653,9 +653,6 @@ static inline void copy_buffer(void *from, void *to)
2073     *p2++ = *p1++;
2074     }
2075    
2076     -
2077     -
2078     -
2079     /* General Interrupt Handling */
2080    
2081     static void (*FloppyIRQHandler)( int status ) = NULL;
2082     @@ -1225,6 +1222,7 @@ static void fd_rwsec_done1(int status)
2083     }
2084     else {
2085     /* all sectors finished */
2086     + finish_fdc();
2087     fd_end_request_cur(BLK_STS_OK);
2088     }
2089     return;
2090     @@ -1472,15 +1470,6 @@ static void setup_req_params( int drive )
2091     ReqTrack, ReqSector, (unsigned long)ReqData ));
2092     }
2093    
2094     -static void ataflop_commit_rqs(struct blk_mq_hw_ctx *hctx)
2095     -{
2096     - spin_lock_irq(&ataflop_lock);
2097     - atari_disable_irq(IRQ_MFP_FDC);
2098     - finish_fdc();
2099     - atari_enable_irq(IRQ_MFP_FDC);
2100     - spin_unlock_irq(&ataflop_lock);
2101     -}
2102     -
2103     static blk_status_t ataflop_queue_rq(struct blk_mq_hw_ctx *hctx,
2104     const struct blk_mq_queue_data *bd)
2105     {
2106     @@ -1488,6 +1477,8 @@ static blk_status_t ataflop_queue_rq(struct blk_mq_hw_ctx *hctx,
2107     int drive = floppy - unit;
2108     int type = floppy->type;
2109    
2110     + DPRINT(("Queue request: drive %d type %d last %d\n", drive, type, bd->last));
2111     +
2112     spin_lock_irq(&ataflop_lock);
2113     if (fd_request) {
2114     spin_unlock_irq(&ataflop_lock);
2115     @@ -1547,8 +1538,6 @@ static blk_status_t ataflop_queue_rq(struct blk_mq_hw_ctx *hctx,
2116     setup_req_params( drive );
2117     do_fd_action( drive );
2118    
2119     - if (bd->last)
2120     - finish_fdc();
2121     atari_enable_irq( IRQ_MFP_FDC );
2122    
2123     out:
2124     @@ -1958,7 +1947,6 @@ static const struct block_device_operations floppy_fops = {
2125    
2126     static const struct blk_mq_ops ataflop_mq_ops = {
2127     .queue_rq = ataflop_queue_rq,
2128     - .commit_rqs = ataflop_commit_rqs,
2129     };
2130    
2131     static struct kobject *floppy_find(dev_t dev, int *part, void *data)
2132     diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
2133     index 719c6b7741afa..1cc9b67e9bcaa 100644
2134     --- a/drivers/block/zram/zram_drv.c
2135     +++ b/drivers/block/zram/zram_drv.c
2136     @@ -901,7 +901,7 @@ static ssize_t read_block_state(struct file *file, char __user *buf,
2137     zram_test_flag(zram, index, ZRAM_HUGE) ? 'h' : '.',
2138     zram_test_flag(zram, index, ZRAM_IDLE) ? 'i' : '.');
2139    
2140     - if (count < copied) {
2141     + if (count <= copied) {
2142     zram_slot_unlock(zram, index);
2143     break;
2144     }
2145     diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c
2146     index 8a81fbca5c9d8..2beb2321825e3 100644
2147     --- a/drivers/bluetooth/btmtkuart.c
2148     +++ b/drivers/bluetooth/btmtkuart.c
2149     @@ -158,8 +158,10 @@ static int mtk_hci_wmt_sync(struct hci_dev *hdev,
2150     int err;
2151    
2152     hlen = sizeof(*hdr) + wmt_params->dlen;
2153     - if (hlen > 255)
2154     - return -EINVAL;
2155     + if (hlen > 255) {
2156     + err = -EINVAL;
2157     + goto err_free_skb;
2158     + }
2159    
2160     hdr = (struct mtk_wmt_hdr *)&wc;
2161     hdr->dir = 1;
2162     @@ -173,7 +175,7 @@ static int mtk_hci_wmt_sync(struct hci_dev *hdev,
2163     err = __hci_cmd_send(hdev, 0xfc6f, hlen, &wc);
2164     if (err < 0) {
2165     clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
2166     - return err;
2167     + goto err_free_skb;
2168     }
2169    
2170     /* The vendor specific WMT commands are all answered by a vendor
2171     @@ -190,13 +192,14 @@ static int mtk_hci_wmt_sync(struct hci_dev *hdev,
2172     if (err == -EINTR) {
2173     bt_dev_err(hdev, "Execution of wmt command interrupted");
2174     clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
2175     - return err;
2176     + goto err_free_skb;
2177     }
2178    
2179     if (err) {
2180     bt_dev_err(hdev, "Execution of wmt command timed out");
2181     clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
2182     - return -ETIMEDOUT;
2183     + err = -ETIMEDOUT;
2184     + goto err_free_skb;
2185     }
2186    
2187     /* Parse and handle the return WMT event */
2188     diff --git a/drivers/char/hw_random/mtk-rng.c b/drivers/char/hw_random/mtk-rng.c
2189     index e649be5a5f132..6670516fa194d 100644
2190     --- a/drivers/char/hw_random/mtk-rng.c
2191     +++ b/drivers/char/hw_random/mtk-rng.c
2192     @@ -173,8 +173,13 @@ static int mtk_rng_runtime_resume(struct device *dev)
2193     return mtk_rng_init(&priv->rng);
2194     }
2195    
2196     -static UNIVERSAL_DEV_PM_OPS(mtk_rng_pm_ops, mtk_rng_runtime_suspend,
2197     - mtk_rng_runtime_resume, NULL);
2198     +static const struct dev_pm_ops mtk_rng_pm_ops = {
2199     + SET_RUNTIME_PM_OPS(mtk_rng_runtime_suspend,
2200     + mtk_rng_runtime_resume, NULL)
2201     + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
2202     + pm_runtime_force_resume)
2203     +};
2204     +
2205     #define MTK_RNG_PM_OPS (&mtk_rng_pm_ops)
2206     #else /* CONFIG_PM */
2207     #define MTK_RNG_PM_OPS NULL
2208     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
2209     index ac656a6d5daf1..bd3c9fb029fa5 100644
2210     --- a/drivers/char/ipmi/ipmi_msghandler.c
2211     +++ b/drivers/char/ipmi/ipmi_msghandler.c
2212     @@ -4797,7 +4797,9 @@ static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0);
2213     static void free_smi_msg(struct ipmi_smi_msg *msg)
2214     {
2215     atomic_dec(&smi_msg_inuse_count);
2216     - kfree(msg);
2217     + /* Try to keep as much stuff out of the panic path as possible. */
2218     + if (!oops_in_progress)
2219     + kfree(msg);
2220     }
2221    
2222     struct ipmi_smi_msg *ipmi_alloc_smi_msg(void)
2223     @@ -4816,7 +4818,9 @@ EXPORT_SYMBOL(ipmi_alloc_smi_msg);
2224     static void free_recv_msg(struct ipmi_recv_msg *msg)
2225     {
2226     atomic_dec(&recv_msg_inuse_count);
2227     - kfree(msg);
2228     + /* Try to keep as much stuff out of the panic path as possible. */
2229     + if (!oops_in_progress)
2230     + kfree(msg);
2231     }
2232    
2233     static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void)
2234     @@ -4834,7 +4838,7 @@ static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void)
2235    
2236     void ipmi_free_recv_msg(struct ipmi_recv_msg *msg)
2237     {
2238     - if (msg->user)
2239     + if (msg->user && !oops_in_progress)
2240     kref_put(&msg->user->refcount, free_user);
2241     msg->done(msg);
2242     }
2243     diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
2244     index ae06e5402e9d5..72ad7fff64a7a 100644
2245     --- a/drivers/char/ipmi/ipmi_watchdog.c
2246     +++ b/drivers/char/ipmi/ipmi_watchdog.c
2247     @@ -337,13 +337,17 @@ static atomic_t msg_tofree = ATOMIC_INIT(0);
2248     static DECLARE_COMPLETION(msg_wait);
2249     static void msg_free_smi(struct ipmi_smi_msg *msg)
2250     {
2251     - if (atomic_dec_and_test(&msg_tofree))
2252     - complete(&msg_wait);
2253     + if (atomic_dec_and_test(&msg_tofree)) {
2254     + if (!oops_in_progress)
2255     + complete(&msg_wait);
2256     + }
2257     }
2258     static void msg_free_recv(struct ipmi_recv_msg *msg)
2259     {
2260     - if (atomic_dec_and_test(&msg_tofree))
2261     - complete(&msg_wait);
2262     + if (atomic_dec_and_test(&msg_tofree)) {
2263     + if (!oops_in_progress)
2264     + complete(&msg_wait);
2265     + }
2266     }
2267     static struct ipmi_smi_msg smi_msg = {
2268     .done = msg_free_smi
2269     @@ -429,8 +433,10 @@ static int _ipmi_set_timeout(int do_heartbeat)
2270     rv = __ipmi_set_timeout(&smi_msg,
2271     &recv_msg,
2272     &send_heartbeat_now);
2273     - if (rv)
2274     + if (rv) {
2275     + atomic_set(&msg_tofree, 0);
2276     return rv;
2277     + }
2278    
2279     wait_for_completion(&msg_wait);
2280    
2281     @@ -575,6 +581,7 @@ restart:
2282     &recv_msg,
2283     1);
2284     if (rv) {
2285     + atomic_set(&msg_tofree, 0);
2286     pr_warn("heartbeat send failure: %d\n", rv);
2287     return rv;
2288     }
2289     diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
2290     index 784b8b3cb903f..97e916856cf3e 100644
2291     --- a/drivers/char/tpm/tpm2-space.c
2292     +++ b/drivers/char/tpm/tpm2-space.c
2293     @@ -455,6 +455,9 @@ static int tpm2_map_response_body(struct tpm_chip *chip, u32 cc, u8 *rsp,
2294     if (be32_to_cpu(data->capability) != TPM2_CAP_HANDLES)
2295     return 0;
2296    
2297     + if (be32_to_cpu(data->count) > (UINT_MAX - TPM_HEADER_SIZE - 9) / 4)
2298     + return -EFAULT;
2299     +
2300     if (len != TPM_HEADER_SIZE + 9 + 4 * be32_to_cpu(data->count))
2301     return -EFAULT;
2302    
2303     diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
2304     index b71515acdec1f..976ca41e9157e 100644
2305     --- a/drivers/clk/at91/pmc.c
2306     +++ b/drivers/clk/at91/pmc.c
2307     @@ -275,6 +275,11 @@ static int __init pmc_register_ops(void)
2308    
2309     np = of_find_matching_node(NULL, sama5d2_pmc_dt_ids);
2310    
2311     + if (!of_device_is_available(np)) {
2312     + of_node_put(np);
2313     + return -ENODEV;
2314     + }
2315     +
2316     pmcreg = device_node_to_regmap(np);
2317     if (IS_ERR(pmcreg))
2318     return PTR_ERR(pmcreg);
2319     diff --git a/drivers/clk/mvebu/ap-cpu-clk.c b/drivers/clk/mvebu/ap-cpu-clk.c
2320     index af5e5acad3706..bde4a7d6a1d33 100644
2321     --- a/drivers/clk/mvebu/ap-cpu-clk.c
2322     +++ b/drivers/clk/mvebu/ap-cpu-clk.c
2323     @@ -256,12 +256,15 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
2324     int cpu, err;
2325    
2326     err = of_property_read_u32(dn, "reg", &cpu);
2327     - if (WARN_ON(err))
2328     + if (WARN_ON(err)) {
2329     + of_node_put(dn);
2330     return err;
2331     + }
2332    
2333     /* If cpu2 or cpu3 is enabled */
2334     if (cpu & APN806_CLUSTER_NUM_MASK) {
2335     nclusters = 2;
2336     + of_node_put(dn);
2337     break;
2338     }
2339     }
2340     @@ -288,8 +291,10 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
2341     int cpu, err;
2342    
2343     err = of_property_read_u32(dn, "reg", &cpu);
2344     - if (WARN_ON(err))
2345     + if (WARN_ON(err)) {
2346     + of_node_put(dn);
2347     return err;
2348     + }
2349    
2350     cluster_index = cpu & APN806_CLUSTER_NUM_MASK;
2351     cluster_index >>= APN806_CLUSTER_NUM_OFFSET;
2352     @@ -301,6 +306,7 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
2353     parent = of_clk_get(np, cluster_index);
2354     if (IS_ERR(parent)) {
2355     dev_err(dev, "Could not get the clock parent\n");
2356     + of_node_put(dn);
2357     return -EINVAL;
2358     }
2359     parent_name = __clk_get_name(parent);
2360     @@ -319,8 +325,10 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
2361     init.parent_names = &parent_name;
2362    
2363     ret = devm_clk_hw_register(dev, &ap_cpu_clk[cluster_index].hw);
2364     - if (ret)
2365     + if (ret) {
2366     + of_node_put(dn);
2367     return ret;
2368     + }
2369     ap_cpu_data->hws[cluster_index] = &ap_cpu_clk[cluster_index].hw;
2370     }
2371    
2372     diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
2373     index 3bb5625504e2f..9bfe4c5af87e3 100644
2374     --- a/drivers/clocksource/Kconfig
2375     +++ b/drivers/clocksource/Kconfig
2376     @@ -24,6 +24,7 @@ config I8253_LOCK
2377    
2378     config OMAP_DM_TIMER
2379     bool
2380     + select TIMER_OF
2381    
2382     config CLKBLD_I8253
2383     def_bool y if CLKSRC_I8253 || CLKEVT_I8253 || I8253_LOCK
2384     diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
2385     index f8747322b3c70..e591f56f98c03 100644
2386     --- a/drivers/cpuidle/sysfs.c
2387     +++ b/drivers/cpuidle/sysfs.c
2388     @@ -481,6 +481,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device)
2389     &kdev->kobj, "state%d", i);
2390     if (ret) {
2391     kobject_put(&kobj->kobj);
2392     + kfree(kobj);
2393     goto error_state;
2394     }
2395     cpuidle_add_s2idle_attr_group(kobj);
2396     @@ -612,6 +613,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev)
2397     &kdev->kobj, "driver");
2398     if (ret) {
2399     kobject_put(&kdrv->kobj);
2400     + kfree(kdrv);
2401     return ret;
2402     }
2403    
2404     @@ -698,7 +700,6 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
2405     if (!kdev)
2406     return -ENOMEM;
2407     kdev->dev = dev;
2408     - dev->kobj_dev = kdev;
2409    
2410     init_completion(&kdev->kobj_unregister);
2411    
2412     @@ -706,9 +707,11 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
2413     "cpuidle");
2414     if (error) {
2415     kobject_put(&kdev->kobj);
2416     + kfree(kdev);
2417     return error;
2418     }
2419    
2420     + dev->kobj_dev = kdev;
2421     kobject_uevent(&kdev->kobj, KOBJ_ADD);
2422    
2423     return 0;
2424     diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c
2425     index 83f96d4f86e03..30e3f41ed8721 100644
2426     --- a/drivers/crypto/caam/caampkc.c
2427     +++ b/drivers/crypto/caam/caampkc.c
2428     @@ -1087,16 +1087,27 @@ static struct caam_akcipher_alg caam_rsa = {
2429     int caam_pkc_init(struct device *ctrldev)
2430     {
2431     struct caam_drv_private *priv = dev_get_drvdata(ctrldev);
2432     - u32 pk_inst;
2433     + u32 pk_inst, pkha;
2434     int err;
2435     init_done = false;
2436    
2437     /* Determine public key hardware accelerator presence. */
2438     - if (priv->era < 10)
2439     + if (priv->era < 10) {
2440     pk_inst = (rd_reg32(&priv->ctrl->perfmon.cha_num_ls) &
2441     CHA_ID_LS_PK_MASK) >> CHA_ID_LS_PK_SHIFT;
2442     - else
2443     - pk_inst = rd_reg32(&priv->ctrl->vreg.pkha) & CHA_VER_NUM_MASK;
2444     + } else {
2445     + pkha = rd_reg32(&priv->ctrl->vreg.pkha);
2446     + pk_inst = pkha & CHA_VER_NUM_MASK;
2447     +
2448     + /*
2449     + * Newer CAAMs support partially disabled functionality. If this is the
2450     + * case, the number is non-zero, but this bit is set to indicate that
2451     + * no encryption or decryption is supported. Only signing and verifying
2452     + * is supported.
2453     + */
2454     + if (pkha & CHA_VER_MISC_PKHA_NO_CRYPT)
2455     + pk_inst = 0;
2456     + }
2457    
2458     /* Do not register algorithms if PKHA is not present. */
2459     if (!pk_inst)
2460     diff --git a/drivers/crypto/caam/regs.h b/drivers/crypto/caam/regs.h
2461     index 05127b70527d7..43975f01465d2 100644
2462     --- a/drivers/crypto/caam/regs.h
2463     +++ b/drivers/crypto/caam/regs.h
2464     @@ -317,6 +317,9 @@ struct version_regs {
2465     /* CHA Miscellaneous Information - AESA_MISC specific */
2466     #define CHA_VER_MISC_AES_GCM BIT(1 + CHA_VER_MISC_SHIFT)
2467    
2468     +/* CHA Miscellaneous Information - PKHA_MISC specific */
2469     +#define CHA_VER_MISC_PKHA_NO_CRYPT BIT(7 + CHA_VER_MISC_SHIFT)
2470     +
2471     /*
2472     * caam_perfmon - Performance Monitor/Secure Memory Status/
2473     * CAAM Global Status/Component Version IDs
2474     diff --git a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
2475     index c64481160b711..180016e157771 100644
2476     --- a/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
2477     +++ b/drivers/crypto/qat/qat_common/adf_pf2vf_msg.c
2478     @@ -195,6 +195,13 @@ static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)
2479     val = ADF_CSR_RD(pmisc_bar_addr, pf2vf_offset);
2480     } while ((val & int_bit) && (count++ < ADF_IOV_MSG_ACK_MAX_RETRY));
2481    
2482     + if (val != msg) {
2483     + dev_dbg(&GET_DEV(accel_dev),
2484     + "Collision - PFVF CSR overwritten by remote function\n");
2485     + ret = -EIO;
2486     + goto out;
2487     + }
2488     +
2489     if (val & int_bit) {
2490     dev_dbg(&GET_DEV(accel_dev), "ACK not received from remote\n");
2491     val &= ~int_bit;
2492     @@ -243,6 +250,11 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
2493    
2494     /* Read message from the VF */
2495     msg = ADF_CSR_RD(pmisc_addr, hw_data->get_pf2vf_offset(vf_nr));
2496     + if (!(msg & ADF_VF2PF_INT)) {
2497     + dev_info(&GET_DEV(accel_dev),
2498     + "Spurious VF2PF interrupt, msg %X. Ignored\n", msg);
2499     + goto out;
2500     + }
2501    
2502     /* To ACK, clear the VF2PFINT bit */
2503     msg &= ~ADF_VF2PF_INT;
2504     @@ -326,6 +338,7 @@ void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
2505     if (resp && adf_iov_putmsg(accel_dev, resp, vf_nr))
2506     dev_err(&GET_DEV(accel_dev), "Failed to send response to VF\n");
2507    
2508     +out:
2509     /* re-enable interrupt on PF from this VF */
2510     adf_enable_vf2pf_interrupts(accel_dev, (1 << vf_nr));
2511     return;
2512     diff --git a/drivers/crypto/qat/qat_common/adf_vf_isr.c b/drivers/crypto/qat/qat_common/adf_vf_isr.c
2513     index ef90902c8200d..86274e3c6781d 100644
2514     --- a/drivers/crypto/qat/qat_common/adf_vf_isr.c
2515     +++ b/drivers/crypto/qat/qat_common/adf_vf_isr.c
2516     @@ -123,6 +123,11 @@ static void adf_pf2vf_bh_handler(void *data)
2517    
2518     /* Read the message from PF */
2519     msg = ADF_CSR_RD(pmisc_bar_addr, hw_data->get_pf2vf_offset(0));
2520     + if (!(msg & ADF_PF2VF_INT)) {
2521     + dev_info(&GET_DEV(accel_dev),
2522     + "Spurious PF2VF interrupt, msg %X. Ignored\n", msg);
2523     + goto out;
2524     + }
2525    
2526     if (!(msg & ADF_PF2VF_MSGORIGIN_SYSTEM))
2527     /* Ignore legacy non-system (non-kernel) PF2VF messages */
2528     @@ -171,6 +176,7 @@ static void adf_pf2vf_bh_handler(void *data)
2529     msg &= ~ADF_PF2VF_INT;
2530     ADF_CSR_WR(pmisc_bar_addr, hw_data->get_pf2vf_offset(0), msg);
2531    
2532     +out:
2533     /* Re-enable PF2VF interrupts */
2534     adf_enable_pf2vf_interrupts(accel_dev);
2535     return;
2536     diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
2537     index 010f1bb20dada..86a13b738c2de 100644
2538     --- a/drivers/crypto/s5p-sss.c
2539     +++ b/drivers/crypto/s5p-sss.c
2540     @@ -2208,6 +2208,8 @@ static int s5p_aes_probe(struct platform_device *pdev)
2541    
2542     variant = find_s5p_sss_version(pdev);
2543     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2544     + if (!res)
2545     + return -EINVAL;
2546    
2547     /*
2548     * Note: HASH and PRNG uses the same registers in secss, avoid
2549     diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
2550     index 758de0e9b2ddc..16bbc9bc9e6d1 100644
2551     --- a/drivers/dma-buf/dma-buf.c
2552     +++ b/drivers/dma-buf/dma-buf.c
2553     @@ -79,6 +79,7 @@ static void dma_buf_release(struct dentry *dentry)
2554     if (dmabuf->resv == (struct dma_resv *)&dmabuf[1])
2555     dma_resv_fini(dmabuf->resv);
2556    
2557     + WARN_ON(!list_empty(&dmabuf->attachments));
2558     module_put(dmabuf->owner);
2559     kfree(dmabuf->name);
2560     kfree(dmabuf);
2561     diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
2562     index b58ac720d9a12..6f1e97ba3e786 100644
2563     --- a/drivers/dma/at_xdmac.c
2564     +++ b/drivers/dma/at_xdmac.c
2565     @@ -145,7 +145,7 @@
2566     #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */
2567     #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23)
2568     #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23)
2569     -#define AT_XDMAC_CC_PERID(i) (0x7f & (i) << 24) /* Channel Peripheral Identifier */
2570     +#define AT_XDMAC_CC_PERID(i) ((0x7f & (i)) << 24) /* Channel Peripheral Identifier */
2571     #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */
2572     #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */
2573     #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */
2574     diff --git a/drivers/dma/dmaengine.h b/drivers/dma/dmaengine.h
2575     index 501c0b063f852..302f13efd35d9 100644
2576     --- a/drivers/dma/dmaengine.h
2577     +++ b/drivers/dma/dmaengine.h
2578     @@ -168,7 +168,7 @@ dmaengine_desc_get_callback_invoke(struct dma_async_tx_descriptor *tx,
2579     static inline bool
2580     dmaengine_desc_callback_valid(struct dmaengine_desc_callback *cb)
2581     {
2582     - return (cb->callback) ? true : false;
2583     + return cb->callback || cb->callback_result;
2584     }
2585    
2586     #endif
2587     diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
2588     index aed0f26c9af5d..ac4a5015c146b 100644
2589     --- a/drivers/edac/amd64_edac.c
2590     +++ b/drivers/edac/amd64_edac.c
2591     @@ -797,12 +797,14 @@ static void debug_dump_dramcfg_low(struct amd64_pvt *pvt, u32 dclr, int chan)
2592     #define CS_ODD_PRIMARY BIT(1)
2593     #define CS_EVEN_SECONDARY BIT(2)
2594     #define CS_ODD_SECONDARY BIT(3)
2595     +#define CS_3R_INTERLEAVE BIT(4)
2596    
2597     #define CS_EVEN (CS_EVEN_PRIMARY | CS_EVEN_SECONDARY)
2598     #define CS_ODD (CS_ODD_PRIMARY | CS_ODD_SECONDARY)
2599    
2600     static int f17_get_cs_mode(int dimm, u8 ctrl, struct amd64_pvt *pvt)
2601     {
2602     + u8 base, count = 0;
2603     int cs_mode = 0;
2604    
2605     if (csrow_enabled(2 * dimm, ctrl, pvt))
2606     @@ -815,6 +817,20 @@ static int f17_get_cs_mode(int dimm, u8 ctrl, struct amd64_pvt *pvt)
2607     if (csrow_sec_enabled(2 * dimm + 1, ctrl, pvt))
2608     cs_mode |= CS_ODD_SECONDARY;
2609    
2610     + /*
2611     + * 3 Rank inteleaving support.
2612     + * There should be only three bases enabled and their two masks should
2613     + * be equal.
2614     + */
2615     + for_each_chip_select(base, ctrl, pvt)
2616     + count += csrow_enabled(base, ctrl, pvt);
2617     +
2618     + if (count == 3 &&
2619     + pvt->csels[ctrl].csmasks[0] == pvt->csels[ctrl].csmasks[1]) {
2620     + edac_dbg(1, "3R interleaving in use.\n");
2621     + cs_mode |= CS_3R_INTERLEAVE;
2622     + }
2623     +
2624     return cs_mode;
2625     }
2626    
2627     @@ -1623,10 +1639,14 @@ static int f17_addr_mask_to_cs_size(struct amd64_pvt *pvt, u8 umc,
2628     *
2629     * The MSB is the number of bits in the full mask because BIT[0] is
2630     * always 0.
2631     + *
2632     + * In the special 3 Rank interleaving case, a single bit is flipped
2633     + * without swapping with the most significant bit. This can be handled
2634     + * by keeping the MSB where it is and ignoring the single zero bit.
2635     */
2636     msb = fls(addr_mask_orig) - 1;
2637     weight = hweight_long(addr_mask_orig);
2638     - num_zero_bits = msb - weight;
2639     + num_zero_bits = msb - weight - !!(cs_mode & CS_3R_INTERLEAVE);
2640    
2641     /* Take the number of zero bits off from the top of the mask. */
2642     addr_mask_deinterleaved = GENMASK_ULL(msb - num_zero_bits, 1);
2643     diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
2644     index d39f5bfb8bd92..b0b280eef1d00 100644
2645     --- a/drivers/edac/sb_edac.c
2646     +++ b/drivers/edac/sb_edac.c
2647     @@ -1055,7 +1055,7 @@ static u64 haswell_get_tohm(struct sbridge_pvt *pvt)
2648     pci_read_config_dword(pvt->info.pci_vtd, HASWELL_TOHM_1, &reg);
2649     rc = ((reg << 6) | rc) << 26;
2650    
2651     - return rc | 0x1ffffff;
2652     + return rc | 0x3ffffff;
2653     }
2654    
2655     static u64 knl_get_tolm(struct sbridge_pvt *pvt)
2656     diff --git a/drivers/firmware/psci/psci_checker.c b/drivers/firmware/psci/psci_checker.c
2657     index 03eb798ad3ed9..250b7232f9816 100644
2658     --- a/drivers/firmware/psci/psci_checker.c
2659     +++ b/drivers/firmware/psci/psci_checker.c
2660     @@ -155,7 +155,7 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups)
2661     if (!alloc_cpumask_var(&tmp, GFP_KERNEL))
2662     return -ENOMEM;
2663    
2664     - cpu_groups = kcalloc(nb_available_cpus, sizeof(cpu_groups),
2665     + cpu_groups = kcalloc(nb_available_cpus, sizeof(*cpu_groups),
2666     GFP_KERNEL);
2667     if (!cpu_groups) {
2668     free_cpumask_var(tmp);
2669     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
2670     index 85b0515c0fdcf..e0d2f79571ef5 100644
2671     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
2672     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
2673     @@ -61,7 +61,7 @@ static void amdgpu_bo_list_free(struct kref *ref)
2674    
2675     int amdgpu_bo_list_create(struct amdgpu_device *adev, struct drm_file *filp,
2676     struct drm_amdgpu_bo_list_entry *info,
2677     - unsigned num_entries, struct amdgpu_bo_list **result)
2678     + size_t num_entries, struct amdgpu_bo_list **result)
2679     {
2680     unsigned last_entry = 0, first_userptr = num_entries;
2681     struct amdgpu_bo_list_entry *array;
2682     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
2683     index a130e766cbdbe..529d52a204cf4 100644
2684     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
2685     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
2686     @@ -60,7 +60,7 @@ int amdgpu_bo_create_list_entry_array(struct drm_amdgpu_bo_list_in *in,
2687     int amdgpu_bo_list_create(struct amdgpu_device *adev,
2688     struct drm_file *filp,
2689     struct drm_amdgpu_bo_list_entry *info,
2690     - unsigned num_entries,
2691     + size_t num_entries,
2692     struct amdgpu_bo_list **list);
2693    
2694     static inline struct amdgpu_bo_list_entry *
2695     diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
2696     index 9fb1765e92d15..e9f5de35f7953 100644
2697     --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
2698     +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
2699     @@ -863,12 +863,12 @@ static int gmc_v6_0_sw_init(void *handle)
2700    
2701     adev->gmc.mc_mask = 0xffffffffffULL;
2702    
2703     - r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44));
2704     + r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40));
2705     if (r) {
2706     dev_warn(adev->dev, "amdgpu: No suitable DMA available.\n");
2707     return r;
2708     }
2709     - adev->need_swiotlb = drm_need_swiotlb(44);
2710     + adev->need_swiotlb = drm_need_swiotlb(40);
2711    
2712     r = gmc_v6_0_init_microcode(adev);
2713     if (r) {
2714     diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c
2715     index f6bdec7fa9253..a950d5db211c5 100644
2716     --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
2717     +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
2718     @@ -109,6 +109,12 @@ static const struct drm_dmi_panel_orientation_data lcd1200x1920_rightside_up = {
2719     .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
2720     };
2721    
2722     +static const struct drm_dmi_panel_orientation_data lcd1280x1920_rightside_up = {
2723     + .width = 1280,
2724     + .height = 1920,
2725     + .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
2726     +};
2727     +
2728     static const struct dmi_system_id orientation_data[] = {
2729     { /* Acer One 10 (S1003) */
2730     .matches = {
2731     @@ -134,6 +140,12 @@ static const struct dmi_system_id orientation_data[] = {
2732     DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"),
2733     },
2734     .driver_data = (void *)&lcd800x1280_rightside_up,
2735     + }, { /* AYA NEO 2021 */
2736     + .matches = {
2737     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYADEVICE"),
2738     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AYA NEO 2021"),
2739     + },
2740     + .driver_data = (void *)&lcd800x1280_rightside_up,
2741     }, { /* GPD MicroPC (generic strings, also match on bios date) */
2742     .matches = {
2743     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
2744     @@ -185,6 +197,12 @@ static const struct dmi_system_id orientation_data[] = {
2745     DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
2746     },
2747     .driver_data = (void *)&gpd_win2,
2748     + }, { /* GPD Win 3 */
2749     + .matches = {
2750     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"),
2751     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1618-03")
2752     + },
2753     + .driver_data = (void *)&lcd720x1280_rightside_up,
2754     }, { /* I.T.Works TW891 */
2755     .matches = {
2756     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
2757     @@ -193,6 +211,13 @@ static const struct dmi_system_id orientation_data[] = {
2758     DMI_EXACT_MATCH(DMI_BOARD_NAME, "TW891"),
2759     },
2760     .driver_data = (void *)&itworks_tw891,
2761     + }, { /* KD Kurio Smart C15200 2-in-1 */
2762     + .matches = {
2763     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "KD Interactive"),
2764     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Kurio Smart"),
2765     + DMI_EXACT_MATCH(DMI_BOARD_NAME, "KDM960BCP"),
2766     + },
2767     + .driver_data = (void *)&lcd800x1280_rightside_up,
2768     }, { /*
2769     * Lenovo Ideapad Miix 310 laptop, only some production batches
2770     * have a portrait screen, the resolution checks makes the quirk
2771     @@ -211,10 +236,15 @@ static const struct dmi_system_id orientation_data[] = {
2772     DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"),
2773     },
2774     .driver_data = (void *)&lcd800x1280_rightside_up,
2775     - }, { /* Lenovo Ideapad D330 */
2776     + }, { /* Lenovo Ideapad D330-10IGM (HD) */
2777     + .matches = {
2778     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"),
2779     + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad D330-10IGM"),
2780     + },
2781     + .driver_data = (void *)&lcd800x1280_rightside_up,
2782     + }, { /* Lenovo Ideapad D330-10IGM (FHD) */
2783     .matches = {
2784     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"),
2785     - DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "81H3"),
2786     DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad D330-10IGM"),
2787     },
2788     .driver_data = (void *)&lcd1200x1920_rightside_up,
2789     @@ -225,6 +255,19 @@ static const struct dmi_system_id orientation_data[] = {
2790     DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Default string"),
2791     },
2792     .driver_data = (void *)&onegx1_pro,
2793     + }, { /* Samsung GalaxyBook 10.6 */
2794     + .matches = {
2795     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
2796     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Galaxy Book 10.6"),
2797     + },
2798     + .driver_data = (void *)&lcd1280x1920_rightside_up,
2799     + }, { /* Valve Steam Deck */
2800     + .matches = {
2801     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Valve"),
2802     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Jupiter"),
2803     + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"),
2804     + },
2805     + .driver_data = (void *)&lcd800x1280_rightside_up,
2806     }, { /* VIOS LTH17 */
2807     .matches = {
2808     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VIOS"),
2809     diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
2810     index 3aae7ea522f23..c3f2292dc93d5 100644
2811     --- a/drivers/gpu/drm/drm_plane_helper.c
2812     +++ b/drivers/gpu/drm/drm_plane_helper.c
2813     @@ -123,7 +123,6 @@ static int drm_plane_helper_check_update(struct drm_plane *plane,
2814     .crtc_w = drm_rect_width(dst),
2815     .crtc_h = drm_rect_height(dst),
2816     .rotation = rotation,
2817     - .visible = *visible,
2818     };
2819     struct drm_crtc_state crtc_state = {
2820     .crtc = crtc,
2821     diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
2822     index 4f8b813aab810..8256f06218d0f 100644
2823     --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
2824     +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
2825     @@ -137,11 +137,13 @@ static int _sspp_subblk_offset(struct dpu_hw_pipe *ctx,
2826     u32 *idx)
2827     {
2828     int rc = 0;
2829     - const struct dpu_sspp_sub_blks *sblk = ctx->cap->sblk;
2830     + const struct dpu_sspp_sub_blks *sblk;
2831    
2832     - if (!ctx)
2833     + if (!ctx || !ctx->cap || !ctx->cap->sblk)
2834     return -EINVAL;
2835    
2836     + sblk = ctx->cap->sblk;
2837     +
2838     switch (s_id) {
2839     case DPU_SSPP_SRC:
2840     *idx = sblk->src_blk.base;
2841     @@ -404,7 +406,7 @@ static void _dpu_hw_sspp_setup_scaler3(struct dpu_hw_pipe *ctx,
2842    
2843     (void)pe;
2844     if (_sspp_subblk_offset(ctx, DPU_SSPP_SCALER_QSEED3, &idx) || !sspp
2845     - || !scaler3_cfg || !ctx || !ctx->cap || !ctx->cap->sblk)
2846     + || !scaler3_cfg)
2847     return;
2848    
2849     dpu_hw_setup_scaler3(&ctx->hw, scaler3_cfg, idx,
2850     diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
2851     index d92a0ffe2a767..8e6a4d5f3a405 100644
2852     --- a/drivers/gpu/drm/msm/msm_gem.c
2853     +++ b/drivers/gpu/drm/msm/msm_gem.c
2854     @@ -1036,7 +1036,7 @@ static struct drm_gem_object *_msm_gem_new(struct drm_device *dev,
2855    
2856     ret = msm_gem_new_impl(dev, size, flags, &obj);
2857     if (ret)
2858     - goto fail;
2859     + return ERR_PTR(ret);
2860    
2861     msm_obj = to_msm_bo(obj);
2862    
2863     @@ -1124,7 +1124,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
2864    
2865     ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj);
2866     if (ret)
2867     - goto fail;
2868     + return ERR_PTR(ret);
2869    
2870     drm_gem_private_object_init(dev, obj, size);
2871    
2872     diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c
2873     index 19c092d75266b..1609a85429cef 100644
2874     --- a/drivers/gpu/drm/v3d/v3d_gem.c
2875     +++ b/drivers/gpu/drm/v3d/v3d_gem.c
2876     @@ -195,8 +195,8 @@ v3d_clean_caches(struct v3d_dev *v3d)
2877    
2878     V3D_CORE_WRITE(core, V3D_CTL_L2TCACTL, V3D_L2TCACTL_TMUWCF);
2879     if (wait_for(!(V3D_CORE_READ(core, V3D_CTL_L2TCACTL) &
2880     - V3D_L2TCACTL_L2TFLS), 100)) {
2881     - DRM_ERROR("Timeout waiting for L1T write combiner flush\n");
2882     + V3D_L2TCACTL_TMUWCF), 100)) {
2883     + DRM_ERROR("Timeout waiting for TMU write combiner flush\n");
2884     }
2885    
2886     mutex_lock(&v3d->cache_clean_lock);
2887     diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
2888     index bb46e7a0f1b5d..0ca996e6fd5cb 100644
2889     --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
2890     +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
2891     @@ -80,9 +80,7 @@ virtio_gpu_get_vbuf(struct virtio_gpu_device *vgdev,
2892     {
2893     struct virtio_gpu_vbuffer *vbuf;
2894    
2895     - vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL);
2896     - if (!vbuf)
2897     - return ERR_PTR(-ENOMEM);
2898     + vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL | __GFP_NOFAIL);
2899    
2900     BUG_ON(size > MAX_INLINE_CMD_SIZE);
2901     vbuf->buf = (void *)vbuf + sizeof(*vbuf);
2902     @@ -142,10 +140,6 @@ static void *virtio_gpu_alloc_cmd_resp(struct virtio_gpu_device *vgdev,
2903    
2904     vbuf = virtio_gpu_get_vbuf(vgdev, cmd_size,
2905     resp_size, resp_buf, cb);
2906     - if (IS_ERR(vbuf)) {
2907     - *vbuffer_p = NULL;
2908     - return ERR_CAST(vbuf);
2909     - }
2910     *vbuffer_p = vbuf;
2911     return (struct virtio_gpu_command *)vbuf->buf;
2912     }
2913     diff --git a/drivers/hid/hid-u2fzero.c b/drivers/hid/hid-u2fzero.c
2914     index d70cd3d7f583b..67ae2b18e33ac 100644
2915     --- a/drivers/hid/hid-u2fzero.c
2916     +++ b/drivers/hid/hid-u2fzero.c
2917     @@ -132,7 +132,7 @@ static int u2fzero_recv(struct u2fzero_device *dev,
2918    
2919     ret = (wait_for_completion_timeout(
2920     &ctx.done, msecs_to_jiffies(USB_CTRL_SET_TIMEOUT)));
2921     - if (ret < 0) {
2922     + if (ret == 0) {
2923     usb_kill_urb(dev->urb);
2924     hid_err(hdev, "urb submission timed out");
2925     } else {
2926     @@ -191,6 +191,8 @@ static int u2fzero_rng_read(struct hwrng *rng, void *data,
2927     struct u2f_hid_msg resp;
2928     int ret;
2929     size_t actual_length;
2930     + /* valid packets must have a correct header */
2931     + int min_length = offsetof(struct u2f_hid_msg, init.data);
2932    
2933     if (!dev->present) {
2934     hid_dbg(dev->hdev, "device not present");
2935     @@ -200,12 +202,12 @@ static int u2fzero_rng_read(struct hwrng *rng, void *data,
2936     ret = u2fzero_recv(dev, &req, &resp);
2937    
2938     /* ignore errors or packets without data */
2939     - if (ret < offsetof(struct u2f_hid_msg, init.data))
2940     + if (ret < min_length)
2941     return 0;
2942    
2943     /* only take the minimum amount of data it is safe to take */
2944     - actual_length = min3((size_t)ret - offsetof(struct u2f_hid_msg,
2945     - init.data), U2F_HID_MSG_LEN(resp), max);
2946     + actual_length = min3((size_t)ret - min_length,
2947     + U2F_HID_MSG_LEN(resp), max);
2948    
2949     memcpy(data, resp.init.data, actual_length);
2950    
2951     diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
2952     index cabcb66e7c5ef..356382a340b2c 100644
2953     --- a/drivers/hv/hyperv_vmbus.h
2954     +++ b/drivers/hv/hyperv_vmbus.h
2955     @@ -13,6 +13,7 @@
2956     #define _HYPERV_VMBUS_H
2957    
2958     #include <linux/list.h>
2959     +#include <linux/bitops.h>
2960     #include <asm/sync_bitops.h>
2961     #include <asm/hyperv-tlfs.h>
2962     #include <linux/atomic.h>
2963     diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
2964     index d018b20089ecd..a2175394cd253 100644
2965     --- a/drivers/hwmon/hwmon.c
2966     +++ b/drivers/hwmon/hwmon.c
2967     @@ -645,8 +645,10 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
2968     dev_set_drvdata(hdev, drvdata);
2969     dev_set_name(hdev, HWMON_ID_FORMAT, id);
2970     err = device_register(hdev);
2971     - if (err)
2972     - goto free_hwmon;
2973     + if (err) {
2974     + put_device(hdev);
2975     + goto ida_remove;
2976     + }
2977    
2978     if (dev && dev->of_node && chip && chip->ops->read &&
2979     chip->info[0]->type == hwmon_chip &&
2980     diff --git a/drivers/hwmon/pmbus/lm25066.c b/drivers/hwmon/pmbus/lm25066.c
2981     index 05fce86f1f817..41c4bbb9c0572 100644
2982     --- a/drivers/hwmon/pmbus/lm25066.c
2983     +++ b/drivers/hwmon/pmbus/lm25066.c
2984     @@ -51,26 +51,31 @@ struct __coeff {
2985     #define PSC_CURRENT_IN_L (PSC_NUM_CLASSES)
2986     #define PSC_POWER_L (PSC_NUM_CLASSES + 1)
2987    
2988     -static struct __coeff lm25066_coeff[6][PSC_NUM_CLASSES + 2] = {
2989     +static struct __coeff lm25066_coeff[][PSC_NUM_CLASSES + 2] = {
2990     [lm25056] = {
2991     [PSC_VOLTAGE_IN] = {
2992     .m = 16296,
2993     + .b = 1343,
2994     .R = -2,
2995     },
2996     [PSC_CURRENT_IN] = {
2997     .m = 13797,
2998     + .b = -1833,
2999     .R = -2,
3000     },
3001     [PSC_CURRENT_IN_L] = {
3002     .m = 6726,
3003     + .b = -537,
3004     .R = -2,
3005     },
3006     [PSC_POWER] = {
3007     .m = 5501,
3008     + .b = -2908,
3009     .R = -3,
3010     },
3011     [PSC_POWER_L] = {
3012     .m = 26882,
3013     + .b = -5646,
3014     .R = -4,
3015     },
3016     [PSC_TEMPERATURE] = {
3017     @@ -82,26 +87,32 @@ static struct __coeff lm25066_coeff[6][PSC_NUM_CLASSES + 2] = {
3018     [lm25066] = {
3019     [PSC_VOLTAGE_IN] = {
3020     .m = 22070,
3021     + .b = -1800,
3022     .R = -2,
3023     },
3024     [PSC_VOLTAGE_OUT] = {
3025     .m = 22070,
3026     + .b = -1800,
3027     .R = -2,
3028     },
3029     [PSC_CURRENT_IN] = {
3030     .m = 13661,
3031     + .b = -5200,
3032     .R = -2,
3033     },
3034     [PSC_CURRENT_IN_L] = {
3035     .m = 6852,
3036     + .b = -3100,
3037     .R = -2,
3038     },
3039     [PSC_POWER] = {
3040     .m = 736,
3041     + .b = -3300,
3042     .R = -2,
3043     },
3044     [PSC_POWER_L] = {
3045     .m = 369,
3046     + .b = -1900,
3047     .R = -2,
3048     },
3049     [PSC_TEMPERATURE] = {
3050     @@ -111,26 +122,32 @@ static struct __coeff lm25066_coeff[6][PSC_NUM_CLASSES + 2] = {
3051     [lm5064] = {
3052     [PSC_VOLTAGE_IN] = {
3053     .m = 4611,
3054     + .b = -642,
3055     .R = -2,
3056     },
3057     [PSC_VOLTAGE_OUT] = {
3058     .m = 4621,
3059     + .b = 423,
3060     .R = -2,
3061     },
3062     [PSC_CURRENT_IN] = {
3063     .m = 10742,
3064     + .b = 1552,
3065     .R = -2,
3066     },
3067     [PSC_CURRENT_IN_L] = {
3068     .m = 5456,
3069     + .b = 2118,
3070     .R = -2,
3071     },
3072     [PSC_POWER] = {
3073     .m = 1204,
3074     + .b = 8524,
3075     .R = -3,
3076     },
3077     [PSC_POWER_L] = {
3078     .m = 612,
3079     + .b = 11202,
3080     .R = -3,
3081     },
3082     [PSC_TEMPERATURE] = {
3083     @@ -140,26 +157,32 @@ static struct __coeff lm25066_coeff[6][PSC_NUM_CLASSES + 2] = {
3084     [lm5066] = {
3085     [PSC_VOLTAGE_IN] = {
3086     .m = 4587,
3087     + .b = -1200,
3088     .R = -2,
3089     },
3090     [PSC_VOLTAGE_OUT] = {
3091     .m = 4587,
3092     + .b = -2400,
3093     .R = -2,
3094     },
3095     [PSC_CURRENT_IN] = {
3096     .m = 10753,
3097     + .b = -1200,
3098     .R = -2,
3099     },
3100     [PSC_CURRENT_IN_L] = {
3101     .m = 5405,
3102     + .b = -600,
3103     .R = -2,
3104     },
3105     [PSC_POWER] = {
3106     .m = 1204,
3107     + .b = -6000,
3108     .R = -3,
3109     },
3110     [PSC_POWER_L] = {
3111     .m = 605,
3112     + .b = -8000,
3113     .R = -3,
3114     },
3115     [PSC_TEMPERATURE] = {
3116     diff --git a/drivers/i2c/busses/i2c-xlr.c b/drivers/i2c/busses/i2c-xlr.c
3117     index 34cd4b3085402..dda6cb848405b 100644
3118     --- a/drivers/i2c/busses/i2c-xlr.c
3119     +++ b/drivers/i2c/busses/i2c-xlr.c
3120     @@ -433,11 +433,15 @@ static int xlr_i2c_probe(struct platform_device *pdev)
3121     i2c_set_adapdata(&priv->adap, priv);
3122     ret = i2c_add_numbered_adapter(&priv->adap);
3123     if (ret < 0)
3124     - return ret;
3125     + goto err_unprepare_clk;
3126    
3127     platform_set_drvdata(pdev, priv);
3128     dev_info(&priv->adap.dev, "Added I2C Bus.\n");
3129     return 0;
3130     +
3131     +err_unprepare_clk:
3132     + clk_unprepare(clk);
3133     + return ret;
3134     }
3135    
3136     static int xlr_i2c_remove(struct platform_device *pdev)
3137     diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c
3138     index 61c670f7fc5f1..1f55cd8abb558 100644
3139     --- a/drivers/iio/dac/ad5446.c
3140     +++ b/drivers/iio/dac/ad5446.c
3141     @@ -527,8 +527,15 @@ static int ad5622_write(struct ad5446_state *st, unsigned val)
3142     {
3143     struct i2c_client *client = to_i2c_client(st->dev);
3144     __be16 data = cpu_to_be16(val);
3145     + int ret;
3146     +
3147     + ret = i2c_master_send(client, (char *)&data, sizeof(data));
3148     + if (ret < 0)
3149     + return ret;
3150     + if (ret != sizeof(data))
3151     + return -EIO;
3152    
3153     - return i2c_master_send(client, (char *)&data, sizeof(data));
3154     + return 0;
3155     }
3156    
3157     /**
3158     diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
3159     index 4d07d22bfa7b1..5fc5ab7813c0f 100644
3160     --- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
3161     +++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
3162     @@ -642,12 +642,13 @@ int bnxt_qplib_query_srq(struct bnxt_qplib_res *res,
3163     int rc = 0;
3164    
3165     RCFW_CMD_PREP(req, QUERY_SRQ, cmd_flags);
3166     - req.srq_cid = cpu_to_le32(srq->id);
3167    
3168     /* Configure the request */
3169     sbuf = bnxt_qplib_rcfw_alloc_sbuf(rcfw, sizeof(*sb));
3170     if (!sbuf)
3171     return -ENOMEM;
3172     + req.resp_size = sizeof(*sb) / BNXT_QPLIB_CMDQE_UNITS;
3173     + req.srq_cid = cpu_to_le32(srq->id);
3174     sb = sbuf->sb;
3175     rc = bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
3176     (void *)sbuf, 0);
3177     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
3178     index 17ce928e41bde..bca5358f3ef29 100644
3179     --- a/drivers/infiniband/hw/mlx4/qp.c
3180     +++ b/drivers/infiniband/hw/mlx4/qp.c
3181     @@ -1149,8 +1149,10 @@ static int create_qp_common(struct ib_pd *pd, struct ib_qp_init_attr *init_attr,
3182     if (dev->steering_support ==
3183     MLX4_STEERING_MODE_DEVICE_MANAGED)
3184     qp->flags |= MLX4_IB_QP_NETIF;
3185     - else
3186     + else {
3187     + err = -EINVAL;
3188     goto err;
3189     + }
3190     }
3191    
3192     err = set_kernel_sq_size(dev, &init_attr->cap, qp_type, qp);
3193     diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
3194     index 4408d33646647..717f174647647 100644
3195     --- a/drivers/infiniband/hw/qedr/verbs.c
3196     +++ b/drivers/infiniband/hw/qedr/verbs.c
3197     @@ -2383,15 +2383,18 @@ int qedr_query_qp(struct ib_qp *ibqp,
3198     int rc = 0;
3199    
3200     memset(&params, 0, sizeof(params));
3201     -
3202     - rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, &params);
3203     - if (rc)
3204     - goto err;
3205     -
3206     memset(qp_attr, 0, sizeof(*qp_attr));
3207     memset(qp_init_attr, 0, sizeof(*qp_init_attr));
3208    
3209     - qp_attr->qp_state = qedr_get_ibqp_state(params.state);
3210     + if (qp->qp_type != IB_QPT_GSI) {
3211     + rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, &params);
3212     + if (rc)
3213     + goto err;
3214     + qp_attr->qp_state = qedr_get_ibqp_state(params.state);
3215     + } else {
3216     + qp_attr->qp_state = qedr_get_ibqp_state(QED_ROCE_QP_STATE_RTS);
3217     + }
3218     +
3219     qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state);
3220     qp_attr->path_mtu = ib_mtu_int_to_enum(params.mtu);
3221     qp_attr->path_mig_state = IB_MIG_MIGRATED;
3222     diff --git a/drivers/infiniband/sw/rxe/rxe_param.h b/drivers/infiniband/sw/rxe/rxe_param.h
3223     index fe52073867006..8d3f6d93dfb8d 100644
3224     --- a/drivers/infiniband/sw/rxe/rxe_param.h
3225     +++ b/drivers/infiniband/sw/rxe/rxe_param.h
3226     @@ -140,7 +140,7 @@ enum rxe_device_param {
3227     /* default/initial rxe port parameters */
3228     enum rxe_port_param {
3229     RXE_PORT_GID_TBL_LEN = 1024,
3230     - RXE_PORT_PORT_CAP_FLAGS = RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP,
3231     + RXE_PORT_PORT_CAP_FLAGS = IB_PORT_CM_SUP,
3232     RXE_PORT_MAX_MSG_SZ = 0x800000,
3233     RXE_PORT_BAD_PKEY_CNTR = 0,
3234     RXE_PORT_QKEY_VIOL_CNTR = 0,
3235     diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c
3236     index 6c554c11a7ac3..ea58805c480fa 100644
3237     --- a/drivers/input/joystick/iforce/iforce-usb.c
3238     +++ b/drivers/input/joystick/iforce/iforce-usb.c
3239     @@ -92,7 +92,7 @@ static int iforce_usb_get_id(struct iforce *iforce, u8 id,
3240     id,
3241     USB_TYPE_VENDOR | USB_DIR_IN |
3242     USB_RECIP_INTERFACE,
3243     - 0, 0, buf, IFORCE_MAX_LENGTH, HZ);
3244     + 0, 0, buf, IFORCE_MAX_LENGTH, 1000);
3245     if (status < 0) {
3246     dev_err(&iforce_usb->intf->dev,
3247     "usb_submit_urb failed: %d\n", status);
3248     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
3249     index 053fe2da1e08f..0b5ed963cb0e1 100644
3250     --- a/drivers/input/mouse/elantech.c
3251     +++ b/drivers/input/mouse/elantech.c
3252     @@ -517,6 +517,19 @@ static void elantech_report_trackpoint(struct psmouse *psmouse,
3253     case 0x16008020U:
3254     case 0x26800010U:
3255     case 0x36808000U:
3256     +
3257     + /*
3258     + * This firmware misreport coordinates for trackpoint
3259     + * occasionally. Discard packets outside of [-127, 127] range
3260     + * to prevent cursor jumps.
3261     + */
3262     + if (packet[4] == 0x80 || packet[5] == 0x80 ||
3263     + packet[1] >> 7 == packet[4] >> 7 ||
3264     + packet[2] >> 7 == packet[5] >> 7) {
3265     + elantech_debug("discarding packet [%6ph]\n", packet);
3266     + break;
3267     +
3268     + }
3269     x = packet[4] - (int)((packet[1]^0x80) << 1);
3270     y = (int)((packet[2]^0x80) << 1) - packet[5];
3271    
3272     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
3273     index 23442a144b834..202e43a6ffae2 100644
3274     --- a/drivers/input/serio/i8042-x86ia64io.h
3275     +++ b/drivers/input/serio/i8042-x86ia64io.h
3276     @@ -272,6 +272,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
3277     DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
3278     },
3279     },
3280     + {
3281     + /* Fujitsu Lifebook T725 laptop */
3282     + .matches = {
3283     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
3284     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
3285     + },
3286     + },
3287     {
3288     /* Fujitsu Lifebook U745 */
3289     .matches = {
3290     @@ -840,6 +847,13 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
3291     DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
3292     },
3293     },
3294     + {
3295     + /* Fujitsu Lifebook T725 laptop */
3296     + .matches = {
3297     + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
3298     + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T725"),
3299     + },
3300     + },
3301     {
3302     /* Fujitsu U574 laptop */
3303     /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
3304     diff --git a/drivers/irqchip/irq-bcm6345-l1.c b/drivers/irqchip/irq-bcm6345-l1.c
3305     index e3483789f4df3..1bd0621c4ce2a 100644
3306     --- a/drivers/irqchip/irq-bcm6345-l1.c
3307     +++ b/drivers/irqchip/irq-bcm6345-l1.c
3308     @@ -140,7 +140,7 @@ static void bcm6345_l1_irq_handle(struct irq_desc *desc)
3309     for_each_set_bit(hwirq, &pending, IRQS_PER_WORD) {
3310     irq = irq_linear_revmap(intc->domain, base + hwirq);
3311     if (irq)
3312     - do_IRQ(irq);
3313     + generic_handle_irq(irq);
3314     else
3315     spurious_interrupt();
3316     }
3317     diff --git a/drivers/irqchip/irq-s3c24xx.c b/drivers/irqchip/irq-s3c24xx.c
3318     index d2031fecc3861..5e97ae54782d6 100644
3319     --- a/drivers/irqchip/irq-s3c24xx.c
3320     +++ b/drivers/irqchip/irq-s3c24xx.c
3321     @@ -359,11 +359,25 @@ static inline int s3c24xx_handle_intc(struct s3c_irq_intc *intc,
3322     asmlinkage void __exception_irq_entry s3c24xx_handle_irq(struct pt_regs *regs)
3323     {
3324     do {
3325     - if (likely(s3c_intc[0]))
3326     - if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))
3327     - continue;
3328     + /*
3329     + * For platform based machines, neither ERR nor NULL can happen here.
3330     + * The s3c24xx_handle_irq() will be set as IRQ handler iff this succeeds:
3331     + *
3332     + * s3c_intc[0] = s3c24xx_init_intc()
3333     + *
3334     + * If this fails, the next calls to s3c24xx_init_intc() won't be executed.
3335     + *
3336     + * For DT machine, s3c_init_intc_of() could set the IRQ handler without
3337     + * setting s3c_intc[0] only if it was called with num_ctrl=0. There is no
3338     + * such code path, so again the s3c_intc[0] will have a valid pointer if
3339     + * set_handle_irq() is called.
3340     + *
3341     + * Therefore in s3c24xx_handle_irq(), the s3c_intc[0] is always something.
3342     + */
3343     + if (s3c24xx_handle_intc(s3c_intc[0], regs, 0))
3344     + continue;
3345    
3346     - if (s3c_intc[2])
3347     + if (!IS_ERR_OR_NULL(s3c_intc[2]))
3348     if (s3c24xx_handle_intc(s3c_intc[2], regs, 64))
3349     continue;
3350    
3351     diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive-plic.c
3352     index 7d0a12fe2714a..7cd7b140dfe97 100644
3353     --- a/drivers/irqchip/irq-sifive-plic.c
3354     +++ b/drivers/irqchip/irq-sifive-plic.c
3355     @@ -138,7 +138,13 @@ static void plic_irq_eoi(struct irq_data *d)
3356     {
3357     struct plic_handler *handler = this_cpu_ptr(&plic_handlers);
3358    
3359     - writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
3360     + if (irqd_irq_masked(d)) {
3361     + plic_irq_unmask(d);
3362     + writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
3363     + plic_irq_mask(d);
3364     + } else {
3365     + writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
3366     + }
3367     }
3368    
3369     static struct irq_chip plic_chip = {
3370     diff --git a/drivers/media/dvb-frontends/mn88443x.c b/drivers/media/dvb-frontends/mn88443x.c
3371     index e4528784f8477..fff212c0bf3b5 100644
3372     --- a/drivers/media/dvb-frontends/mn88443x.c
3373     +++ b/drivers/media/dvb-frontends/mn88443x.c
3374     @@ -204,11 +204,18 @@ struct mn88443x_priv {
3375     struct regmap *regmap_t;
3376     };
3377    
3378     -static void mn88443x_cmn_power_on(struct mn88443x_priv *chip)
3379     +static int mn88443x_cmn_power_on(struct mn88443x_priv *chip)
3380     {
3381     + struct device *dev = &chip->client_s->dev;
3382     struct regmap *r_t = chip->regmap_t;
3383     + int ret;
3384    
3385     - clk_prepare_enable(chip->mclk);
3386     + ret = clk_prepare_enable(chip->mclk);
3387     + if (ret) {
3388     + dev_err(dev, "Failed to prepare and enable mclk: %d\n",
3389     + ret);
3390     + return ret;
3391     + }
3392    
3393     gpiod_set_value_cansleep(chip->reset_gpio, 1);
3394     usleep_range(100, 1000);
3395     @@ -222,6 +229,8 @@ static void mn88443x_cmn_power_on(struct mn88443x_priv *chip)
3396     } else {
3397     regmap_write(r_t, HIZSET3, 0x8f);
3398     }
3399     +
3400     + return 0;
3401     }
3402    
3403     static void mn88443x_cmn_power_off(struct mn88443x_priv *chip)
3404     @@ -738,7 +747,10 @@ static int mn88443x_probe(struct i2c_client *client,
3405     chip->fe.demodulator_priv = chip;
3406     i2c_set_clientdata(client, chip);
3407    
3408     - mn88443x_cmn_power_on(chip);
3409     + ret = mn88443x_cmn_power_on(chip);
3410     + if (ret)
3411     + goto err_i2c_t;
3412     +
3413     mn88443x_s_sleep(chip);
3414     mn88443x_t_sleep(chip);
3415    
3416     diff --git a/drivers/media/i2c/ir-kbd-i2c.c b/drivers/media/i2c/ir-kbd-i2c.c
3417     index 92376592455ee..56674173524fd 100644
3418     --- a/drivers/media/i2c/ir-kbd-i2c.c
3419     +++ b/drivers/media/i2c/ir-kbd-i2c.c
3420     @@ -791,6 +791,7 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
3421     rc_proto = RC_PROTO_BIT_RC5 | RC_PROTO_BIT_RC6_MCE |
3422     RC_PROTO_BIT_RC6_6A_32;
3423     ir_codes = RC_MAP_HAUPPAUGE;
3424     + ir->polling_interval = 125;
3425     probe_tx = true;
3426     break;
3427     }
3428     diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
3429     index dc23b9ed510a4..18440c5104ad9 100644
3430     --- a/drivers/media/i2c/mt9p031.c
3431     +++ b/drivers/media/i2c/mt9p031.c
3432     @@ -78,7 +78,9 @@
3433     #define MT9P031_PIXEL_CLOCK_INVERT (1 << 15)
3434     #define MT9P031_PIXEL_CLOCK_SHIFT(n) ((n) << 8)
3435     #define MT9P031_PIXEL_CLOCK_DIVIDE(n) ((n) << 0)
3436     -#define MT9P031_FRAME_RESTART 0x0b
3437     +#define MT9P031_RESTART 0x0b
3438     +#define MT9P031_FRAME_PAUSE_RESTART (1 << 1)
3439     +#define MT9P031_FRAME_RESTART (1 << 0)
3440     #define MT9P031_SHUTTER_DELAY 0x0c
3441     #define MT9P031_RST 0x0d
3442     #define MT9P031_RST_ENABLE 1
3443     @@ -445,9 +447,23 @@ static int mt9p031_set_params(struct mt9p031 *mt9p031)
3444     static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable)
3445     {
3446     struct mt9p031 *mt9p031 = to_mt9p031(subdev);
3447     + struct i2c_client *client = v4l2_get_subdevdata(subdev);
3448     + int val;
3449     int ret;
3450    
3451     if (!enable) {
3452     + /* enable pause restart */
3453     + val = MT9P031_FRAME_PAUSE_RESTART;
3454     + ret = mt9p031_write(client, MT9P031_RESTART, val);
3455     + if (ret < 0)
3456     + return ret;
3457     +
3458     + /* enable restart + keep pause restart set */
3459     + val |= MT9P031_FRAME_RESTART;
3460     + ret = mt9p031_write(client, MT9P031_RESTART, val);
3461     + if (ret < 0)
3462     + return ret;
3463     +
3464     /* Stop sensor readout */
3465     ret = mt9p031_set_output_control(mt9p031,
3466     MT9P031_OUTPUT_CONTROL_CEN, 0);
3467     @@ -467,6 +483,16 @@ static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable)
3468     if (ret < 0)
3469     return ret;
3470    
3471     + /*
3472     + * - clear pause restart
3473     + * - don't clear restart as clearing restart manually can cause
3474     + * undefined behavior
3475     + */
3476     + val = MT9P031_FRAME_RESTART;
3477     + ret = mt9p031_write(client, MT9P031_RESTART, val);
3478     + if (ret < 0)
3479     + return ret;
3480     +
3481     return mt9p031_pll_enable(mt9p031);
3482     }
3483    
3484     diff --git a/drivers/media/i2c/tda1997x.c b/drivers/media/i2c/tda1997x.c
3485     index 18a2027ba1450..5faffedb0feba 100644
3486     --- a/drivers/media/i2c/tda1997x.c
3487     +++ b/drivers/media/i2c/tda1997x.c
3488     @@ -1247,13 +1247,13 @@ tda1997x_parse_infoframe(struct tda1997x_state *state, u16 addr)
3489     {
3490     struct v4l2_subdev *sd = &state->sd;
3491     union hdmi_infoframe frame;
3492     - u8 buffer[40];
3493     + u8 buffer[40] = { 0 };
3494     u8 reg;
3495     int len, err;
3496    
3497     /* read data */
3498     len = io_readn(sd, addr, sizeof(buffer), buffer);
3499     - err = hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer));
3500     + err = hdmi_infoframe_unpack(&frame, buffer, len);
3501     if (err) {
3502     v4l_err(state->client,
3503     "failed parsing %d byte infoframe: 0x%04x/0x%02x\n",
3504     @@ -1927,13 +1927,13 @@ static int tda1997x_log_infoframe(struct v4l2_subdev *sd, int addr)
3505     {
3506     struct tda1997x_state *state = to_state(sd);
3507     union hdmi_infoframe frame;
3508     - u8 buffer[40];
3509     + u8 buffer[40] = { 0 };
3510     int len, err;
3511    
3512     /* read data */
3513     len = io_readn(sd, addr, sizeof(buffer), buffer);
3514     v4l2_dbg(1, debug, sd, "infoframe: addr=%d len=%d\n", addr, len);
3515     - err = hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer));
3516     + err = hdmi_infoframe_unpack(&frame, buffer, len);
3517     if (err) {
3518     v4l_err(state->client,
3519     "failed parsing %d byte infoframe: 0x%04x/0x%02x\n",
3520     diff --git a/drivers/media/pci/cx23885/cx23885-alsa.c b/drivers/media/pci/cx23885/cx23885-alsa.c
3521     index a8e980c6dacb9..50772c2611cad 100644
3522     --- a/drivers/media/pci/cx23885/cx23885-alsa.c
3523     +++ b/drivers/media/pci/cx23885/cx23885-alsa.c
3524     @@ -550,7 +550,7 @@ struct cx23885_audio_dev *cx23885_audio_register(struct cx23885_dev *dev)
3525     SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
3526     THIS_MODULE, sizeof(struct cx23885_audio_dev), &card);
3527     if (err < 0)
3528     - goto error;
3529     + goto error_msg;
3530    
3531     chip = (struct cx23885_audio_dev *) card->private_data;
3532     chip->dev = dev;
3533     @@ -576,6 +576,7 @@ struct cx23885_audio_dev *cx23885_audio_register(struct cx23885_dev *dev)
3534    
3535     error:
3536     snd_card_free(card);
3537     +error_msg:
3538     pr_err("%s(): Failed to register analog audio adapter\n",
3539     __func__);
3540    
3541     diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
3542     index 80a7c41baa901..eb5621c9ebf85 100644
3543     --- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
3544     +++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c
3545     @@ -258,19 +258,24 @@ static irqreturn_t netup_unidvb_isr(int irq, void *dev_id)
3546     if ((reg40 & AVL_IRQ_ASSERTED) != 0) {
3547     /* IRQ is being signaled */
3548     reg_isr = readw(ndev->bmmio0 + REG_ISR);
3549     - if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) {
3550     - iret = netup_i2c_interrupt(&ndev->i2c[0]);
3551     - } else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) {
3552     - iret = netup_i2c_interrupt(&ndev->i2c[1]);
3553     - } else if (reg_isr & NETUP_UNIDVB_IRQ_SPI) {
3554     + if (reg_isr & NETUP_UNIDVB_IRQ_SPI)
3555     iret = netup_spi_interrupt(ndev->spi);
3556     - } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) {
3557     - iret = netup_dma_interrupt(&ndev->dma[0]);
3558     - } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) {
3559     - iret = netup_dma_interrupt(&ndev->dma[1]);
3560     - } else if (reg_isr & NETUP_UNIDVB_IRQ_CI) {
3561     - iret = netup_ci_interrupt(ndev);
3562     + else if (!ndev->old_fw) {
3563     + if (reg_isr & NETUP_UNIDVB_IRQ_I2C0) {
3564     + iret = netup_i2c_interrupt(&ndev->i2c[0]);
3565     + } else if (reg_isr & NETUP_UNIDVB_IRQ_I2C1) {
3566     + iret = netup_i2c_interrupt(&ndev->i2c[1]);
3567     + } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA1) {
3568     + iret = netup_dma_interrupt(&ndev->dma[0]);
3569     + } else if (reg_isr & NETUP_UNIDVB_IRQ_DMA2) {
3570     + iret = netup_dma_interrupt(&ndev->dma[1]);
3571     + } else if (reg_isr & NETUP_UNIDVB_IRQ_CI) {
3572     + iret = netup_ci_interrupt(ndev);
3573     + } else {
3574     + goto err;
3575     + }
3576     } else {
3577     +err:
3578     dev_err(&pci_dev->dev,
3579     "%s(): unknown interrupt 0x%x\n",
3580     __func__, reg_isr);
3581     diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c
3582     index cc2ff40d060d1..acf64723f9381 100644
3583     --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c
3584     +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c
3585     @@ -809,7 +809,8 @@ static int mtk_vpu_probe(struct platform_device *pdev)
3586     vpu->wdt.wq = create_singlethread_workqueue("vpu_wdt");
3587     if (!vpu->wdt.wq) {
3588     dev_err(dev, "initialize wdt workqueue failed\n");
3589     - return -ENOMEM;
3590     + ret = -ENOMEM;
3591     + goto clk_unprepare;
3592     }
3593     INIT_WORK(&vpu->wdt.ws, vpu_wdt_reset_func);
3594     mutex_init(&vpu->vpu_mutex);
3595     @@ -908,6 +909,8 @@ disable_vpu_clk:
3596     vpu_clock_disable(vpu);
3597     workqueue_destroy:
3598     destroy_workqueue(vpu->wdt.wq);
3599     +clk_unprepare:
3600     + clk_unprepare(vpu->clk);
3601    
3602     return ret;
3603     }
3604     diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c
3605     index d27eccfa57cae..e01f22bf826d4 100644
3606     --- a/drivers/media/platform/rcar-vin/rcar-csi2.c
3607     +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c
3608     @@ -488,6 +488,8 @@ static int rcsi2_start_receiver(struct rcar_csi2 *priv)
3609    
3610     /* Code is validated in set_fmt. */
3611     format = rcsi2_code_to_fmt(priv->mf.code);
3612     + if (!format)
3613     + return -EINVAL;
3614    
3615     /*
3616     * Enable all supported CSI-2 channels with virtual channel and
3617     diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c
3618     index b776f83e395e0..9faecd049002f 100644
3619     --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
3620     +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
3621     @@ -1279,11 +1279,15 @@ static int s5p_mfc_probe(struct platform_device *pdev)
3622     spin_lock_init(&dev->condlock);
3623     dev->plat_dev = pdev;
3624     if (!dev->plat_dev) {
3625     - dev_err(&pdev->dev, "No platform data specified\n");
3626     + mfc_err("No platform data specified\n");
3627     return -ENODEV;
3628     }
3629    
3630     dev->variant = of_device_get_match_data(&pdev->dev);
3631     + if (!dev->variant) {
3632     + dev_err(&pdev->dev, "Failed to get device MFC hardware variant information\n");
3633     + return -ENOENT;
3634     + }
3635    
3636     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3637     dev->regs_base = devm_ioremap_resource(&pdev->dev, res);
3638     diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c
3639     index d41475f56ab54..72798aae7a628 100644
3640     --- a/drivers/media/platform/stm32/stm32-dcmi.c
3641     +++ b/drivers/media/platform/stm32/stm32-dcmi.c
3642     @@ -135,6 +135,7 @@ struct stm32_dcmi {
3643     int sequence;
3644     struct list_head buffers;
3645     struct dcmi_buf *active;
3646     + int irq;
3647    
3648     struct v4l2_device v4l2_dev;
3649     struct video_device *vdev;
3650     @@ -1720,6 +1721,14 @@ static int dcmi_graph_notify_complete(struct v4l2_async_notifier *notifier)
3651     return ret;
3652     }
3653    
3654     + ret = devm_request_threaded_irq(dcmi->dev, dcmi->irq, dcmi_irq_callback,
3655     + dcmi_irq_thread, IRQF_ONESHOT,
3656     + dev_name(dcmi->dev), dcmi);
3657     + if (ret) {
3658     + dev_err(dcmi->dev, "Unable to request irq %d\n", dcmi->irq);
3659     + return ret;
3660     + }
3661     +
3662     return 0;
3663     }
3664    
3665     @@ -1881,6 +1890,8 @@ static int dcmi_probe(struct platform_device *pdev)
3666     if (irq <= 0)
3667     return irq ? irq : -ENXIO;
3668    
3669     + dcmi->irq = irq;
3670     +
3671     dcmi->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3672     if (!dcmi->res) {
3673     dev_err(&pdev->dev, "Could not get resource\n");
3674     @@ -1893,14 +1904,6 @@ static int dcmi_probe(struct platform_device *pdev)
3675     return PTR_ERR(dcmi->regs);
3676     }
3677    
3678     - ret = devm_request_threaded_irq(&pdev->dev, irq, dcmi_irq_callback,
3679     - dcmi_irq_thread, IRQF_ONESHOT,
3680     - dev_name(&pdev->dev), dcmi);
3681     - if (ret) {
3682     - dev_err(&pdev->dev, "Unable to request irq %d\n", irq);
3683     - return ret;
3684     - }
3685     -
3686     mclk = devm_clk_get(&pdev->dev, "mclk");
3687     if (IS_ERR(mclk)) {
3688     if (PTR_ERR(mclk) != -EPROBE_DEFER)
3689     diff --git a/drivers/media/radio/radio-wl1273.c b/drivers/media/radio/radio-wl1273.c
3690     index 1123768731676..484046471c03f 100644
3691     --- a/drivers/media/radio/radio-wl1273.c
3692     +++ b/drivers/media/radio/radio-wl1273.c
3693     @@ -1279,7 +1279,7 @@ static int wl1273_fm_vidioc_querycap(struct file *file, void *priv,
3694    
3695     strscpy(capability->driver, WL1273_FM_DRIVER_NAME,
3696     sizeof(capability->driver));
3697     - strscpy(capability->card, "Texas Instruments Wl1273 FM Radio",
3698     + strscpy(capability->card, "TI Wl1273 FM Radio",
3699     sizeof(capability->card));
3700     strscpy(capability->bus_info, radio->bus_type,
3701     sizeof(capability->bus_info));
3702     diff --git a/drivers/media/radio/si470x/radio-si470x-i2c.c b/drivers/media/radio/si470x/radio-si470x-i2c.c
3703     index f491420d7b538..a972c0705ac79 100644
3704     --- a/drivers/media/radio/si470x/radio-si470x-i2c.c
3705     +++ b/drivers/media/radio/si470x/radio-si470x-i2c.c
3706     @@ -11,7 +11,7 @@
3707    
3708     /* driver definitions */
3709     #define DRIVER_AUTHOR "Joonyoung Shim <jy0922.shim@samsung.com>";
3710     -#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver"
3711     +#define DRIVER_CARD "Silicon Labs Si470x FM Radio"
3712     #define DRIVER_DESC "I2C radio driver for Si470x FM Radio Receivers"
3713     #define DRIVER_VERSION "1.0.2"
3714    
3715     diff --git a/drivers/media/radio/si470x/radio-si470x-usb.c b/drivers/media/radio/si470x/radio-si470x-usb.c
3716     index fedff68d8c496..3f8634a465730 100644
3717     --- a/drivers/media/radio/si470x/radio-si470x-usb.c
3718     +++ b/drivers/media/radio/si470x/radio-si470x-usb.c
3719     @@ -16,7 +16,7 @@
3720    
3721     /* driver definitions */
3722     #define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>"
3723     -#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver"
3724     +#define DRIVER_CARD "Silicon Labs Si470x FM Radio"
3725     #define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers"
3726     #define DRIVER_VERSION "1.0.10"
3727    
3728     diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
3729     index 4b8aee390518d..742b7f41b75f8 100644
3730     --- a/drivers/media/rc/ite-cir.c
3731     +++ b/drivers/media/rc/ite-cir.c
3732     @@ -283,7 +283,7 @@ static irqreturn_t ite_cir_isr(int irq, void *data)
3733     }
3734    
3735     /* check for the receive interrupt */
3736     - if (iflags & ITE_IRQ_RX_FIFO) {
3737     + if (iflags & (ITE_IRQ_RX_FIFO | ITE_IRQ_RX_FIFO_OVERRUN)) {
3738     /* read the FIFO bytes */
3739     rx_bytes =
3740     dev->params.get_rx_bytes(dev, rx_buf,
3741     diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
3742     index c68e52c17ae13..31e56f4f34791 100644
3743     --- a/drivers/media/rc/mceusb.c
3744     +++ b/drivers/media/rc/mceusb.c
3745     @@ -1386,6 +1386,7 @@ static void mceusb_dev_recv(struct urb *urb)
3746     case -ECONNRESET:
3747     case -ENOENT:
3748     case -EILSEQ:
3749     + case -EPROTO:
3750     case -ESHUTDOWN:
3751     usb_unlink_urb(urb);
3752     return;
3753     diff --git a/drivers/media/spi/cxd2880-spi.c b/drivers/media/spi/cxd2880-spi.c
3754     index 93194f03764d2..11273be702b6e 100644
3755     --- a/drivers/media/spi/cxd2880-spi.c
3756     +++ b/drivers/media/spi/cxd2880-spi.c
3757     @@ -618,7 +618,7 @@ fail_frontend:
3758     fail_attach:
3759     dvb_unregister_adapter(&dvb_spi->adapter);
3760     fail_adapter:
3761     - if (!dvb_spi->vcc_supply)
3762     + if (dvb_spi->vcc_supply)
3763     regulator_disable(dvb_spi->vcc_supply);
3764     fail_regulator:
3765     kfree(dvb_spi);
3766     diff --git a/drivers/media/usb/dvb-usb/az6027.c b/drivers/media/usb/dvb-usb/az6027.c
3767     index 8de18da0c4bd1..5aa9c501ed9c9 100644
3768     --- a/drivers/media/usb/dvb-usb/az6027.c
3769     +++ b/drivers/media/usb/dvb-usb/az6027.c
3770     @@ -391,6 +391,7 @@ static struct rc_map_table rc_map_az6027_table[] = {
3771     /* remote control stuff (does not work with my box) */
3772     static int az6027_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
3773     {
3774     + *state = REMOTE_NO_KEY_PRESSED;
3775     return 0;
3776     }
3777    
3778     diff --git a/drivers/media/usb/dvb-usb/dibusb-common.c b/drivers/media/usb/dvb-usb/dibusb-common.c
3779     index 59ce2dec11e98..9c1ebea68b544 100644
3780     --- a/drivers/media/usb/dvb-usb/dibusb-common.c
3781     +++ b/drivers/media/usb/dvb-usb/dibusb-common.c
3782     @@ -223,7 +223,7 @@ int dibusb_read_eeprom_byte(struct dvb_usb_device *d, u8 offs, u8 *val)
3783     u8 *buf;
3784     int rc;
3785    
3786     - buf = kmalloc(2, GFP_KERNEL);
3787     + buf = kzalloc(2, GFP_KERNEL);
3788     if (!buf)
3789     return -ENOMEM;
3790    
3791     diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
3792     index 5983e72a0622c..3e96b4b711d75 100644
3793     --- a/drivers/media/usb/em28xx/em28xx-cards.c
3794     +++ b/drivers/media/usb/em28xx/em28xx-cards.c
3795     @@ -4029,8 +4029,11 @@ static void em28xx_usb_disconnect(struct usb_interface *intf)
3796    
3797     em28xx_close_extension(dev);
3798    
3799     - if (dev->dev_next)
3800     + if (dev->dev_next) {
3801     + em28xx_close_extension(dev->dev_next);
3802     em28xx_release_resources(dev->dev_next);
3803     + }
3804     +
3805     em28xx_release_resources(dev);
3806    
3807     if (dev->dev_next) {
3808     diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
3809     index 3daa64bb1e1d9..af9216278024f 100644
3810     --- a/drivers/media/usb/em28xx/em28xx-core.c
3811     +++ b/drivers/media/usb/em28xx/em28xx-core.c
3812     @@ -1152,8 +1152,9 @@ int em28xx_suspend_extension(struct em28xx *dev)
3813     dev_info(&dev->intf->dev, "Suspending extensions\n");
3814     mutex_lock(&em28xx_devlist_mutex);
3815     list_for_each_entry(ops, &em28xx_extension_devlist, next) {
3816     - if (ops->suspend)
3817     - ops->suspend(dev);
3818     + if (!ops->suspend)
3819     + continue;
3820     + ops->suspend(dev);
3821     if (dev->dev_next)
3822     ops->suspend(dev->dev_next);
3823     }
3824     diff --git a/drivers/media/usb/tm6000/tm6000-video.c b/drivers/media/usb/tm6000/tm6000-video.c
3825     index c46cbcfafab3f..8874b0b922eee 100644
3826     --- a/drivers/media/usb/tm6000/tm6000-video.c
3827     +++ b/drivers/media/usb/tm6000/tm6000-video.c
3828     @@ -854,8 +854,7 @@ static int vidioc_querycap(struct file *file, void *priv,
3829     struct tm6000_core *dev = ((struct tm6000_fh *)priv)->dev;
3830    
3831     strscpy(cap->driver, "tm6000", sizeof(cap->driver));
3832     - strscpy(cap->card, "Trident TVMaster TM5600/6000/6010",
3833     - sizeof(cap->card));
3834     + strscpy(cap->card, "Trident TM5600/6000/6010", sizeof(cap->card));
3835     usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
3836     cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE |
3837     V4L2_CAP_DEVICE_CAPS;
3838     diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
3839     index 40ca1d4e03483..378cfc46fc195 100644
3840     --- a/drivers/media/usb/uvc/uvc_driver.c
3841     +++ b/drivers/media/usb/uvc/uvc_driver.c
3842     @@ -1972,6 +1972,7 @@ int uvc_register_video_device(struct uvc_device *dev,
3843     const struct v4l2_file_operations *fops,
3844     const struct v4l2_ioctl_ops *ioctl_ops)
3845     {
3846     + const char *name;
3847     int ret;
3848    
3849     /* Initialize the video buffers queue. */
3850     @@ -2000,16 +2001,20 @@ int uvc_register_video_device(struct uvc_device *dev,
3851     case V4L2_BUF_TYPE_VIDEO_CAPTURE:
3852     default:
3853     vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
3854     + name = "Video Capture";
3855     break;
3856     case V4L2_BUF_TYPE_VIDEO_OUTPUT:
3857     vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
3858     + name = "Video Output";
3859     break;
3860     case V4L2_BUF_TYPE_META_CAPTURE:
3861     vdev->device_caps = V4L2_CAP_META_CAPTURE | V4L2_CAP_STREAMING;
3862     + name = "Metadata";
3863     break;
3864     }
3865    
3866     - strscpy(vdev->name, dev->name, sizeof(vdev->name));
3867     + snprintf(vdev->name, sizeof(vdev->name), "%s %u", name,
3868     + stream->header.bTerminalLink);
3869    
3870     /*
3871     * Set the driver data before calling video_register_device, otherwise
3872     diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
3873     index db7f8f8ee2f9f..3126ee9e965c9 100644
3874     --- a/drivers/media/usb/uvc/uvc_v4l2.c
3875     +++ b/drivers/media/usb/uvc/uvc_v4l2.c
3876     @@ -467,10 +467,13 @@ static int uvc_v4l2_set_streamparm(struct uvc_streaming *stream,
3877     uvc_simplify_fraction(&timeperframe.numerator,
3878     &timeperframe.denominator, 8, 333);
3879    
3880     - if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
3881     + if (parm->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
3882     parm->parm.capture.timeperframe = timeperframe;
3883     - else
3884     + parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
3885     + } else {
3886     parm->parm.output.timeperframe = timeperframe;
3887     + parm->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
3888     + }
3889    
3890     return 0;
3891     }
3892     diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
3893     index 5d095b2a03464..96b85d66e7a87 100644
3894     --- a/drivers/media/usb/uvc/uvc_video.c
3895     +++ b/drivers/media/usb/uvc/uvc_video.c
3896     @@ -112,6 +112,11 @@ int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
3897     case 5: /* Invalid unit */
3898     case 6: /* Invalid control */
3899     case 7: /* Invalid Request */
3900     + /*
3901     + * The firmware has not properly implemented
3902     + * the control or there has been a HW error.
3903     + */
3904     + return -EIO;
3905     case 8: /* Invalid value within range */
3906     return -EINVAL;
3907     default: /* reserved or unknown */
3908     diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
3909     index 24db33f803c06..98633fa5d46fd 100644
3910     --- a/drivers/media/v4l2-core/v4l2-ioctl.c
3911     +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
3912     @@ -902,7 +902,7 @@ static void v4l_print_default(const void *arg, bool write_only)
3913     pr_cont("driver-specific ioctl\n");
3914     }
3915    
3916     -static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv)
3917     +static bool check_ext_ctrls(struct v4l2_ext_controls *c, unsigned long ioctl)
3918     {
3919     __u32 i;
3920    
3921     @@ -911,23 +911,41 @@ static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv)
3922     for (i = 0; i < c->count; i++)
3923     c->controls[i].reserved2[0] = 0;
3924    
3925     - /* V4L2_CID_PRIVATE_BASE cannot be used as control class
3926     - when using extended controls.
3927     - Only when passed in through VIDIOC_G_CTRL and VIDIOC_S_CTRL
3928     - is it allowed for backwards compatibility.
3929     - */
3930     - if (!allow_priv && c->which == V4L2_CID_PRIVATE_BASE)
3931     - return 0;
3932     - if (!c->which)
3933     - return 1;
3934     + switch (c->which) {
3935     + case V4L2_CID_PRIVATE_BASE:
3936     + /*
3937     + * V4L2_CID_PRIVATE_BASE cannot be used as control class
3938     + * when using extended controls.
3939     + * Only when passed in through VIDIOC_G_CTRL and VIDIOC_S_CTRL
3940     + * is it allowed for backwards compatibility.
3941     + */
3942     + if (ioctl == VIDIOC_G_CTRL || ioctl == VIDIOC_S_CTRL)
3943     + return false;
3944     + break;
3945     + case V4L2_CTRL_WHICH_DEF_VAL:
3946     + /* Default value cannot be changed */
3947     + if (ioctl == VIDIOC_S_EXT_CTRLS ||
3948     + ioctl == VIDIOC_TRY_EXT_CTRLS) {
3949     + c->error_idx = c->count;
3950     + return false;
3951     + }
3952     + return true;
3953     + case V4L2_CTRL_WHICH_CUR_VAL:
3954     + return true;
3955     + case V4L2_CTRL_WHICH_REQUEST_VAL:
3956     + c->error_idx = c->count;
3957     + return false;
3958     + }
3959     +
3960     /* Check that all controls are from the same control class. */
3961     for (i = 0; i < c->count; i++) {
3962     if (V4L2_CTRL_ID2WHICH(c->controls[i].id) != c->which) {
3963     - c->error_idx = i;
3964     - return 0;
3965     + c->error_idx = ioctl == VIDIOC_TRY_EXT_CTRLS ? i :
3966     + c->count;
3967     + return false;
3968     }
3969     }
3970     - return 1;
3971     + return true;
3972     }
3973    
3974     static int check_fmt(struct file *file, enum v4l2_buf_type type)
3975     @@ -2145,7 +2163,7 @@ static int v4l_g_ctrl(const struct v4l2_ioctl_ops *ops,
3976     ctrls.controls = &ctrl;
3977     ctrl.id = p->id;
3978     ctrl.value = p->value;
3979     - if (check_ext_ctrls(&ctrls, 1)) {
3980     + if (check_ext_ctrls(&ctrls, VIDIOC_G_CTRL)) {
3981     int ret = ops->vidioc_g_ext_ctrls(file, fh, &ctrls);
3982    
3983     if (ret == 0)
3984     @@ -2179,7 +2197,7 @@ static int v4l_s_ctrl(const struct v4l2_ioctl_ops *ops,
3985     ctrls.controls = &ctrl;
3986     ctrl.id = p->id;
3987     ctrl.value = p->value;
3988     - if (check_ext_ctrls(&ctrls, 1))
3989     + if (check_ext_ctrls(&ctrls, VIDIOC_S_CTRL))
3990     return ops->vidioc_s_ext_ctrls(file, fh, &ctrls);
3991     return -EINVAL;
3992     }
3993     @@ -2201,8 +2219,8 @@ static int v4l_g_ext_ctrls(const struct v4l2_ioctl_ops *ops,
3994     vfd, vfd->v4l2_dev->mdev, p);
3995     if (ops->vidioc_g_ext_ctrls == NULL)
3996     return -ENOTTY;
3997     - return check_ext_ctrls(p, 0) ? ops->vidioc_g_ext_ctrls(file, fh, p) :
3998     - -EINVAL;
3999     + return check_ext_ctrls(p, VIDIOC_G_EXT_CTRLS) ?
4000     + ops->vidioc_g_ext_ctrls(file, fh, p) : -EINVAL;
4001     }
4002    
4003     static int v4l_s_ext_ctrls(const struct v4l2_ioctl_ops *ops,
4004     @@ -2222,8 +2240,8 @@ static int v4l_s_ext_ctrls(const struct v4l2_ioctl_ops *ops,
4005     vfd, vfd->v4l2_dev->mdev, p);
4006     if (ops->vidioc_s_ext_ctrls == NULL)
4007     return -ENOTTY;
4008     - return check_ext_ctrls(p, 0) ? ops->vidioc_s_ext_ctrls(file, fh, p) :
4009     - -EINVAL;
4010     + return check_ext_ctrls(p, VIDIOC_S_EXT_CTRLS) ?
4011     + ops->vidioc_s_ext_ctrls(file, fh, p) : -EINVAL;
4012     }
4013    
4014     static int v4l_try_ext_ctrls(const struct v4l2_ioctl_ops *ops,
4015     @@ -2243,8 +2261,8 @@ static int v4l_try_ext_ctrls(const struct v4l2_ioctl_ops *ops,
4016     vfd, vfd->v4l2_dev->mdev, p);
4017     if (ops->vidioc_try_ext_ctrls == NULL)
4018     return -ENOTTY;
4019     - return check_ext_ctrls(p, 0) ? ops->vidioc_try_ext_ctrls(file, fh, p) :
4020     - -EINVAL;
4021     + return check_ext_ctrls(p, VIDIOC_TRY_EXT_CTRLS) ?
4022     + ops->vidioc_try_ext_ctrls(file, fh, p) : -EINVAL;
4023     }
4024    
4025     /*
4026     diff --git a/drivers/memory/fsl_ifc.c b/drivers/memory/fsl_ifc.c
4027     index 2790258346070..84fa32f288c80 100644
4028     --- a/drivers/memory/fsl_ifc.c
4029     +++ b/drivers/memory/fsl_ifc.c
4030     @@ -263,7 +263,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
4031    
4032     ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev);
4033     if (ret < 0)
4034     - goto err;
4035     + goto err_unmap_nandirq;
4036    
4037     init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait);
4038    
4039     @@ -272,7 +272,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
4040     if (ret != 0) {
4041     dev_err(&dev->dev, "failed to install irq (%d)\n",
4042     fsl_ifc_ctrl_dev->irq);
4043     - goto err_irq;
4044     + goto err_unmap_nandirq;
4045     }
4046    
4047     if (fsl_ifc_ctrl_dev->nand_irq) {
4048     @@ -281,17 +281,16 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
4049     if (ret != 0) {
4050     dev_err(&dev->dev, "failed to install irq (%d)\n",
4051     fsl_ifc_ctrl_dev->nand_irq);
4052     - goto err_nandirq;
4053     + goto err_free_irq;
4054     }
4055     }
4056    
4057     return 0;
4058    
4059     -err_nandirq:
4060     - free_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_ctrl_dev);
4061     - irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq);
4062     -err_irq:
4063     +err_free_irq:
4064     free_irq(fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev);
4065     +err_unmap_nandirq:
4066     + irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq);
4067     irq_dispose_mapping(fsl_ifc_ctrl_dev->irq);
4068     err:
4069     iounmap(fsl_ifc_ctrl_dev->gregs);
4070     diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c
4071     index d9ee8e3dc72da..55907e4c36b18 100644
4072     --- a/drivers/memstick/core/ms_block.c
4073     +++ b/drivers/memstick/core/ms_block.c
4074     @@ -1727,7 +1727,7 @@ static int msb_init_card(struct memstick_dev *card)
4075     msb->pages_in_block = boot_block->attr.block_size * 2;
4076     msb->block_size = msb->page_size * msb->pages_in_block;
4077    
4078     - if (msb->page_size > PAGE_SIZE) {
4079     + if ((size_t)msb->page_size > PAGE_SIZE) {
4080     /* this isn't supported by linux at all, anyway*/
4081     dbg("device page %d size isn't supported", msb->page_size);
4082     return -EINVAL;
4083     diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c
4084     index 64fff6abe60e8..74d6686b35f77 100644
4085     --- a/drivers/memstick/host/jmb38x_ms.c
4086     +++ b/drivers/memstick/host/jmb38x_ms.c
4087     @@ -899,7 +899,7 @@ static struct memstick_host *jmb38x_ms_alloc_host(struct jmb38x_ms *jm, int cnt)
4088    
4089     iounmap(host->addr);
4090     err_out_free:
4091     - kfree(msh);
4092     + memstick_free_host(msh);
4093     return NULL;
4094     }
4095    
4096     diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c
4097     index d2ef46337191c..eaa2a94d18be4 100644
4098     --- a/drivers/memstick/host/r592.c
4099     +++ b/drivers/memstick/host/r592.c
4100     @@ -837,15 +837,15 @@ static void r592_remove(struct pci_dev *pdev)
4101     }
4102     memstick_remove_host(dev->host);
4103    
4104     + if (dev->dummy_dma_page)
4105     + dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page,
4106     + dev->dummy_dma_page_physical_address);
4107     +
4108     free_irq(dev->irq, dev);
4109     iounmap(dev->mmio);
4110     pci_release_regions(pdev);
4111     pci_disable_device(pdev);
4112     memstick_free_host(dev->host);
4113     -
4114     - if (dev->dummy_dma_page)
4115     - dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page,
4116     - dev->dummy_dma_page_physical_address);
4117     }
4118    
4119     #ifdef CONFIG_PM_SLEEP
4120     diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
4121     index 49ea02c467bf1..1b4a40d910cfb 100644
4122     --- a/drivers/mmc/host/Kconfig
4123     +++ b/drivers/mmc/host/Kconfig
4124     @@ -449,7 +449,7 @@ config MMC_OMAP_HS
4125    
4126     config MMC_WBSD
4127     tristate "Winbond W83L51xD SD/MMC Card Interface support"
4128     - depends on ISA_DMA_API
4129     + depends on ISA_DMA_API && !M68K
4130     help
4131     This selects the Winbond(R) W83L51xD Secure digital and
4132     Multimedia card Interface.
4133     diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
4134     index 7b280cb363271..ba37be8e423c2 100644
4135     --- a/drivers/mmc/host/dw_mmc.c
4136     +++ b/drivers/mmc/host/dw_mmc.c
4137     @@ -2013,7 +2013,8 @@ static void dw_mci_tasklet_func(unsigned long priv)
4138     * delayed. Allowing the transfer to take place
4139     * avoids races and keeps things simple.
4140     */
4141     - if (err != -ETIMEDOUT) {
4142     + if (err != -ETIMEDOUT &&
4143     + host->dir_status == DW_MCI_RECV_STATUS) {
4144     state = STATE_SENDING_DATA;
4145     continue;
4146     }
4147     diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
4148     index 52054931c3507..3a90037254a4d 100644
4149     --- a/drivers/mmc/host/mxs-mmc.c
4150     +++ b/drivers/mmc/host/mxs-mmc.c
4151     @@ -565,6 +565,11 @@ static const struct of_device_id mxs_mmc_dt_ids[] = {
4152     };
4153     MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids);
4154    
4155     +static void mxs_mmc_regulator_disable(void *regulator)
4156     +{
4157     + regulator_disable(regulator);
4158     +}
4159     +
4160     static int mxs_mmc_probe(struct platform_device *pdev)
4161     {
4162     const struct of_device_id *of_id =
4163     @@ -606,6 +611,11 @@ static int mxs_mmc_probe(struct platform_device *pdev)
4164     "Failed to enable vmmc regulator: %d\n", ret);
4165     goto out_mmc_free;
4166     }
4167     +
4168     + ret = devm_add_action_or_reset(&pdev->dev, mxs_mmc_regulator_disable,
4169     + reg_vmmc);
4170     + if (ret)
4171     + goto out_mmc_free;
4172     }
4173    
4174     ssp->clk = devm_clk_get(&pdev->dev, NULL);
4175     diff --git a/drivers/mmc/host/sdhci-omap.c b/drivers/mmc/host/sdhci-omap.c
4176     index d3135249b2e40..346ca41b28f8b 100644
4177     --- a/drivers/mmc/host/sdhci-omap.c
4178     +++ b/drivers/mmc/host/sdhci-omap.c
4179     @@ -675,7 +675,8 @@ static void sdhci_omap_set_power(struct sdhci_host *host, unsigned char mode,
4180     {
4181     struct mmc_host *mmc = host->mmc;
4182    
4183     - mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
4184     + if (!IS_ERR(mmc->supply.vmmc))
4185     + mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
4186     }
4187    
4188     static int sdhci_omap_enable_dma(struct sdhci_host *host)
4189     diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
4190     index 32a76b8feaa5d..ac5d3b6db9b84 100644
4191     --- a/drivers/mtd/mtdcore.c
4192     +++ b/drivers/mtd/mtdcore.c
4193     @@ -727,8 +727,6 @@ int del_mtd_device(struct mtd_info *mtd)
4194    
4195     mutex_lock(&mtd_table_mutex);
4196    
4197     - debugfs_remove_recursive(mtd->dbg.dfs_dir);
4198     -
4199     if (idr_find(&mtd_idr, mtd->index) != mtd) {
4200     ret = -ENODEV;
4201     goto out_error;
4202     @@ -744,6 +742,8 @@ int del_mtd_device(struct mtd_info *mtd)
4203     mtd->index, mtd->name, mtd->usecount);
4204     ret = -EBUSY;
4205     } else {
4206     + debugfs_remove_recursive(mtd->dbg.dfs_dir);
4207     +
4208     /* Try to remove the NVMEM provider */
4209     if (mtd->nvmem)
4210     nvmem_unregister(mtd->nvmem);
4211     diff --git a/drivers/mtd/spi-nor/hisi-sfc.c b/drivers/mtd/spi-nor/hisi-sfc.c
4212     index 8fcc48056a8bc..569cfd473c87b 100644
4213     --- a/drivers/mtd/spi-nor/hisi-sfc.c
4214     +++ b/drivers/mtd/spi-nor/hisi-sfc.c
4215     @@ -474,7 +474,6 @@ static int hisi_spi_nor_remove(struct platform_device *pdev)
4216    
4217     hisi_spi_nor_unregister_all(host);
4218     mutex_destroy(&host->lock);
4219     - clk_disable_unprepare(host->clk);
4220     return 0;
4221     }
4222    
4223     diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
4224     index fd07561da0348..6a6cdd0bb2585 100644
4225     --- a/drivers/net/bonding/bond_sysfs_slave.c
4226     +++ b/drivers/net/bonding/bond_sysfs_slave.c
4227     @@ -108,15 +108,15 @@ static ssize_t ad_partner_oper_port_state_show(struct slave *slave, char *buf)
4228     }
4229     static SLAVE_ATTR_RO(ad_partner_oper_port_state);
4230    
4231     -static const struct slave_attribute *slave_attrs[] = {
4232     - &slave_attr_state,
4233     - &slave_attr_mii_status,
4234     - &slave_attr_link_failure_count,
4235     - &slave_attr_perm_hwaddr,
4236     - &slave_attr_queue_id,
4237     - &slave_attr_ad_aggregator_id,
4238     - &slave_attr_ad_actor_oper_port_state,
4239     - &slave_attr_ad_partner_oper_port_state,
4240     +static const struct attribute *slave_attrs[] = {
4241     + &slave_attr_state.attr,
4242     + &slave_attr_mii_status.attr,
4243     + &slave_attr_link_failure_count.attr,
4244     + &slave_attr_perm_hwaddr.attr,
4245     + &slave_attr_queue_id.attr,
4246     + &slave_attr_ad_aggregator_id.attr,
4247     + &slave_attr_ad_actor_oper_port_state.attr,
4248     + &slave_attr_ad_partner_oper_port_state.attr,
4249     NULL
4250     };
4251    
4252     @@ -137,24 +137,10 @@ const struct sysfs_ops slave_sysfs_ops = {
4253    
4254     int bond_sysfs_slave_add(struct slave *slave)
4255     {
4256     - const struct slave_attribute **a;
4257     - int err;
4258     -
4259     - for (a = slave_attrs; *a; ++a) {
4260     - err = sysfs_create_file(&slave->kobj, &((*a)->attr));
4261     - if (err) {
4262     - kobject_put(&slave->kobj);
4263     - return err;
4264     - }
4265     - }
4266     -
4267     - return 0;
4268     + return sysfs_create_files(&slave->kobj, slave_attrs);
4269     }
4270    
4271     void bond_sysfs_slave_del(struct slave *slave)
4272     {
4273     - const struct slave_attribute **a;
4274     -
4275     - for (a = slave_attrs; *a; ++a)
4276     - sysfs_remove_file(&slave->kobj, &((*a)->attr));
4277     + sysfs_remove_files(&slave->kobj, slave_attrs);
4278     }
4279     diff --git a/drivers/net/dsa/rtl8366rb.c b/drivers/net/dsa/rtl8366rb.c
4280     index 7f731bf369980..d047004360615 100644
4281     --- a/drivers/net/dsa/rtl8366rb.c
4282     +++ b/drivers/net/dsa/rtl8366rb.c
4283     @@ -1264,7 +1264,7 @@ static int rtl8366rb_set_mc_index(struct realtek_smi *smi, int port, int index)
4284    
4285     static bool rtl8366rb_is_vlan_valid(struct realtek_smi *smi, unsigned int vlan)
4286     {
4287     - unsigned int max = RTL8366RB_NUM_VLANS;
4288     + unsigned int max = RTL8366RB_NUM_VLANS - 1;
4289    
4290     if (smi->vlan4k_enabled)
4291     max = RTL8366RB_NUM_VIDS - 1;
4292     diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
4293     index b2cd3bdba9f89..533b8519ec352 100644
4294     --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
4295     +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
4296     @@ -1331,6 +1331,10 @@
4297     #define MDIO_VEND2_PMA_CDR_CONTROL 0x8056
4298     #endif
4299    
4300     +#ifndef MDIO_VEND2_PMA_MISC_CTRL0
4301     +#define MDIO_VEND2_PMA_MISC_CTRL0 0x8090
4302     +#endif
4303     +
4304     #ifndef MDIO_CTRL1_SPEED1G
4305     #define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100)
4306     #endif
4307     @@ -1389,6 +1393,10 @@
4308     #define XGBE_PMA_RX_RST_0_RESET_ON 0x10
4309     #define XGBE_PMA_RX_RST_0_RESET_OFF 0x00
4310    
4311     +#define XGBE_PMA_PLL_CTRL_MASK BIT(15)
4312     +#define XGBE_PMA_PLL_CTRL_ENABLE BIT(15)
4313     +#define XGBE_PMA_PLL_CTRL_DISABLE 0x0000
4314     +
4315     /* Bit setting and getting macros
4316     * The get macro will extract the current bit field value from within
4317     * the variable
4318     diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
4319     index d6f6afb67bcc6..0b325ae875b52 100644
4320     --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
4321     +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
4322     @@ -1972,12 +1972,26 @@ static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata)
4323     }
4324     }
4325    
4326     +static void xgbe_phy_pll_ctrl(struct xgbe_prv_data *pdata, bool enable)
4327     +{
4328     + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_MISC_CTRL0,
4329     + XGBE_PMA_PLL_CTRL_MASK,
4330     + enable ? XGBE_PMA_PLL_CTRL_ENABLE
4331     + : XGBE_PMA_PLL_CTRL_DISABLE);
4332     +
4333     + /* Wait for command to complete */
4334     + usleep_range(100, 200);
4335     +}
4336     +
4337     static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
4338     unsigned int cmd, unsigned int sub_cmd)
4339     {
4340     unsigned int s0 = 0;
4341     unsigned int wait;
4342    
4343     + /* Disable PLL re-initialization during FW command processing */
4344     + xgbe_phy_pll_ctrl(pdata, false);
4345     +
4346     /* Log if a previous command did not complete */
4347     if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) {
4348     netif_dbg(pdata, link, pdata->netdev,
4349     @@ -1998,7 +2012,7 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
4350     wait = XGBE_RATECHANGE_COUNT;
4351     while (wait--) {
4352     if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
4353     - return;
4354     + goto reenable_pll;
4355    
4356     usleep_range(1000, 2000);
4357     }
4358     @@ -2008,6 +2022,10 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
4359    
4360     /* Reset on error */
4361     xgbe_phy_rx_reset(pdata);
4362     +
4363     +reenable_pll:
4364     + /* Enable PLL re-initialization */
4365     + xgbe_phy_pll_ctrl(pdata, true);
4366     }
4367    
4368     static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
4369     diff --git a/drivers/net/ethernet/cavium/thunder/nic_main.c b/drivers/net/ethernet/cavium/thunder/nic_main.c
4370     index 9361f964bb9b2..816453a4f8d6c 100644
4371     --- a/drivers/net/ethernet/cavium/thunder/nic_main.c
4372     +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c
4373     @@ -1193,7 +1193,7 @@ static int nic_register_interrupts(struct nicpf *nic)
4374     dev_err(&nic->pdev->dev,
4375     "Request for #%d msix vectors failed, returned %d\n",
4376     nic->num_vec, ret);
4377     - return 1;
4378     + return ret;
4379     }
4380    
4381     /* Register mailbox interrupt handler */
4382     diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
4383     index 5c45c0c6dd234..27ea528ef4484 100644
4384     --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
4385     +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
4386     @@ -1226,7 +1226,7 @@ static int nicvf_register_misc_interrupt(struct nicvf *nic)
4387     if (ret < 0) {
4388     netdev_err(nic->netdev,
4389     "Req for #%d msix vectors failed\n", nic->num_vec);
4390     - return 1;
4391     + return ret;
4392     }
4393    
4394     sprintf(nic->irq_name[irq], "%s Mbox", "NICVF");
4395     @@ -1245,7 +1245,7 @@ static int nicvf_register_misc_interrupt(struct nicvf *nic)
4396     if (!nicvf_check_pf_ready(nic)) {
4397     nicvf_disable_intr(nic, NICVF_INTR_MBOX, 0);
4398     nicvf_unregister_interrupts(nic);
4399     - return 1;
4400     + return -EIO;
4401     }
4402    
4403     return 0;
4404     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
4405     index f537be9cb3155..5ba30b8eb1e11 100644
4406     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
4407     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
4408     @@ -1466,12 +1466,15 @@ static int cxgb4_get_module_info(struct net_device *dev,
4409     if (ret)
4410     return ret;
4411    
4412     - if (!sff8472_comp || (sff_diag_type & 4)) {
4413     + if (!sff8472_comp || (sff_diag_type & SFP_DIAG_ADDRMODE)) {
4414     modinfo->type = ETH_MODULE_SFF_8079;
4415     modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
4416     } else {
4417     modinfo->type = ETH_MODULE_SFF_8472;
4418     - modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
4419     + if (sff_diag_type & SFP_DIAG_IMPLEMENTED)
4420     + modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
4421     + else
4422     + modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN / 2;
4423     }
4424     break;
4425    
4426     diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.h b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.h
4427     index 002fc62ea7262..63bc956d20376 100644
4428     --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.h
4429     +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.h
4430     @@ -293,6 +293,8 @@ enum {
4431     #define I2C_PAGE_SIZE 0x100
4432     #define SFP_DIAG_TYPE_ADDR 0x5c
4433     #define SFP_DIAG_TYPE_LEN 0x1
4434     +#define SFP_DIAG_ADDRMODE BIT(2)
4435     +#define SFP_DIAG_IMPLEMENTED BIT(6)
4436     #define SFF_8472_COMP_ADDR 0x5e
4437     #define SFF_8472_COMP_LEN 0x1
4438     #define SFF_REV_ADDR 0x1
4439     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
4440     index 9076605403a74..bb22d91f6e53e 100644
4441     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
4442     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
4443     @@ -124,7 +124,7 @@ static int hclge_ets_validate(struct hclge_dev *hdev, struct ieee_ets *ets,
4444     if (ret)
4445     return ret;
4446    
4447     - for (i = 0; i < hdev->tc_max; i++) {
4448     + for (i = 0; i < HNAE3_MAX_TC; i++) {
4449     switch (ets->tc_tsa[i]) {
4450     case IEEE_8021QAZ_TSA_STRICT:
4451     if (hdev->tm_info.tc_info[i].tc_sch_mode !=
4452     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
4453     index d98f0e2ec7aa3..8448607742a6b 100644
4454     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
4455     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
4456     @@ -974,7 +974,6 @@ static int hclge_tm_pri_tc_base_dwrr_cfg(struct hclge_dev *hdev)
4457    
4458     static int hclge_tm_ets_tc_dwrr_cfg(struct hclge_dev *hdev)
4459     {
4460     -#define DEFAULT_TC_WEIGHT 1
4461     #define DEFAULT_TC_OFFSET 14
4462    
4463     struct hclge_ets_tc_weight_cmd *ets_weight;
4464     @@ -987,13 +986,7 @@ static int hclge_tm_ets_tc_dwrr_cfg(struct hclge_dev *hdev)
4465     for (i = 0; i < HNAE3_MAX_TC; i++) {
4466     struct hclge_pg_info *pg_info;
4467    
4468     - ets_weight->tc_weight[i] = DEFAULT_TC_WEIGHT;
4469     -
4470     - if (!(hdev->hw_tc_map & BIT(i)))
4471     - continue;
4472     -
4473     - pg_info =
4474     - &hdev->tm_info.pg_info[hdev->tm_info.tc_info[i].pgid];
4475     + pg_info = &hdev->tm_info.pg_info[hdev->tm_info.tc_info[i].pgid];
4476     ets_weight->tc_weight[i] = pg_info->tc_dwrr[i];
4477     }
4478    
4479     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
4480     index cfe7229593ead..9adfc0a7ab823 100644
4481     --- a/drivers/net/ethernet/ibm/ibmvnic.c
4482     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
4483     @@ -1462,8 +1462,6 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
4484     netdev_tx_t ret = NETDEV_TX_OK;
4485    
4486     if (test_bit(0, &adapter->resetting)) {
4487     - if (!netif_subqueue_stopped(netdev, skb))
4488     - netif_stop_subqueue(netdev, queue_num);
4489     dev_kfree_skb_any(skb);
4490    
4491     tx_send_failed++;
4492     @@ -4936,6 +4934,9 @@ static int init_crq_queue(struct ibmvnic_adapter *adapter)
4493     crq->cur = 0;
4494     spin_lock_init(&crq->lock);
4495    
4496     + /* process any CRQs that were queued before we enabled interrupts */
4497     + tasklet_schedule(&adapter->tasklet);
4498     +
4499     return retrc;
4500    
4501     req_irq_failed:
4502     diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c
4503     index 8f732771d3fad..bd2966eb6b7d3 100644
4504     --- a/drivers/net/ethernet/netronome/nfp/bpf/main.c
4505     +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c
4506     @@ -182,15 +182,21 @@ static int
4507     nfp_bpf_check_mtu(struct nfp_app *app, struct net_device *netdev, int new_mtu)
4508     {
4509     struct nfp_net *nn = netdev_priv(netdev);
4510     - unsigned int max_mtu;
4511     + struct nfp_bpf_vnic *bv;
4512     + struct bpf_prog *prog;
4513    
4514     if (~nn->dp.ctrl & NFP_NET_CFG_CTRL_BPF)
4515     return 0;
4516    
4517     - max_mtu = nn_readb(nn, NFP_NET_CFG_BPF_INL_MTU) * 64 - 32;
4518     - if (new_mtu > max_mtu) {
4519     - nn_info(nn, "BPF offload active, MTU over %u not supported\n",
4520     - max_mtu);
4521     + if (nn->xdp_hw.prog) {
4522     + prog = nn->xdp_hw.prog;
4523     + } else {
4524     + bv = nn->app_priv;
4525     + prog = bv->tc_prog;
4526     + }
4527     +
4528     + if (nfp_bpf_offload_check_mtu(nn, prog, new_mtu)) {
4529     + nn_info(nn, "BPF offload active, potential packet access beyond hardware packet boundary");
4530     return -EBUSY;
4531     }
4532     return 0;
4533     diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.h b/drivers/net/ethernet/netronome/nfp/bpf/main.h
4534     index fac9c6f9e197b..c74620fcc539c 100644
4535     --- a/drivers/net/ethernet/netronome/nfp/bpf/main.h
4536     +++ b/drivers/net/ethernet/netronome/nfp/bpf/main.h
4537     @@ -560,6 +560,8 @@ bool nfp_is_subprog_start(struct nfp_insn_meta *meta);
4538     void nfp_bpf_jit_prepare(struct nfp_prog *nfp_prog);
4539     int nfp_bpf_jit(struct nfp_prog *prog);
4540     bool nfp_bpf_supported_opcode(u8 code);
4541     +bool nfp_bpf_offload_check_mtu(struct nfp_net *nn, struct bpf_prog *prog,
4542     + unsigned int mtu);
4543    
4544     int nfp_verify_insn(struct bpf_verifier_env *env, int insn_idx,
4545     int prev_insn_idx);
4546     diff --git a/drivers/net/ethernet/netronome/nfp/bpf/offload.c b/drivers/net/ethernet/netronome/nfp/bpf/offload.c
4547     index 88fab6a82acff..7ff388ecc7e3a 100644
4548     --- a/drivers/net/ethernet/netronome/nfp/bpf/offload.c
4549     +++ b/drivers/net/ethernet/netronome/nfp/bpf/offload.c
4550     @@ -477,19 +477,28 @@ int nfp_bpf_event_output(struct nfp_app_bpf *bpf, const void *data,
4551     return 0;
4552     }
4553    
4554     +bool nfp_bpf_offload_check_mtu(struct nfp_net *nn, struct bpf_prog *prog,
4555     + unsigned int mtu)
4556     +{
4557     + unsigned int fw_mtu, pkt_off;
4558     +
4559     + fw_mtu = nn_readb(nn, NFP_NET_CFG_BPF_INL_MTU) * 64 - 32;
4560     + pkt_off = min(prog->aux->max_pkt_offset, mtu);
4561     +
4562     + return fw_mtu < pkt_off;
4563     +}
4564     +
4565     static int
4566     nfp_net_bpf_load(struct nfp_net *nn, struct bpf_prog *prog,
4567     struct netlink_ext_ack *extack)
4568     {
4569     struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv;
4570     - unsigned int fw_mtu, pkt_off, max_stack, max_prog_len;
4571     + unsigned int max_stack, max_prog_len;
4572     dma_addr_t dma_addr;
4573     void *img;
4574     int err;
4575    
4576     - fw_mtu = nn_readb(nn, NFP_NET_CFG_BPF_INL_MTU) * 64 - 32;
4577     - pkt_off = min(prog->aux->max_pkt_offset, nn->dp.netdev->mtu);
4578     - if (fw_mtu < pkt_off) {
4579     + if (nfp_bpf_offload_check_mtu(nn, prog, nn->dp.netdev->mtu)) {
4580     NL_SET_ERR_MSG_MOD(extack, "BPF offload not supported with potential packet access beyond HW packet split boundary");
4581     return -EOPNOTSUPP;
4582     }
4583     diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
4584     index 623d86e5e970f..8d2b184ff5758 100644
4585     --- a/drivers/net/ethernet/realtek/r8169_main.c
4586     +++ b/drivers/net/ethernet/realtek/r8169_main.c
4587     @@ -212,6 +212,7 @@ static const struct pci_device_id rtl8169_pci_tbl[] = {
4588     { PCI_VDEVICE(REALTEK, 0x8129) },
4589     { PCI_VDEVICE(REALTEK, 0x8136), RTL_CFG_NO_GBIT },
4590     { PCI_VDEVICE(REALTEK, 0x8161) },
4591     + { PCI_VDEVICE(REALTEK, 0x8162) },
4592     { PCI_VDEVICE(REALTEK, 0x8167) },
4593     { PCI_VDEVICE(REALTEK, 0x8168) },
4594     { PCI_VDEVICE(NCUBE, 0x8168) },
4595     diff --git a/drivers/net/ethernet/sfc/ptp.c b/drivers/net/ethernet/sfc/ptp.c
4596     index 59b4f16896a81..1fa1b71dbfa11 100644
4597     --- a/drivers/net/ethernet/sfc/ptp.c
4598     +++ b/drivers/net/ethernet/sfc/ptp.c
4599     @@ -648,7 +648,7 @@ static int efx_ptp_get_attributes(struct efx_nic *efx)
4600     } else if (rc == -EINVAL) {
4601     fmt = MC_CMD_PTP_OUT_GET_ATTRIBUTES_SECONDS_NANOSECONDS;
4602     } else if (rc == -EPERM) {
4603     - netif_info(efx, probe, efx->net_dev, "no PTP support\n");
4604     + pci_info(efx->pci_dev, "no PTP support\n");
4605     return rc;
4606     } else {
4607     efx_mcdi_display_error(efx, MC_CMD_PTP, sizeof(inbuf),
4608     @@ -824,7 +824,7 @@ static int efx_ptp_disable(struct efx_nic *efx)
4609     * should only have been called during probe.
4610     */
4611     if (rc == -ENOSYS || rc == -EPERM)
4612     - netif_info(efx, probe, efx->net_dev, "no PTP support\n");
4613     + pci_info(efx->pci_dev, "no PTP support\n");
4614     else if (rc)
4615     efx_mcdi_display_error(efx, MC_CMD_PTP,
4616     MC_CMD_PTP_IN_DISABLE_LEN,
4617     diff --git a/drivers/net/ethernet/sfc/siena_sriov.c b/drivers/net/ethernet/sfc/siena_sriov.c
4618     index dfbdf05dcf794..68f092881d137 100644
4619     --- a/drivers/net/ethernet/sfc/siena_sriov.c
4620     +++ b/drivers/net/ethernet/sfc/siena_sriov.c
4621     @@ -1056,7 +1056,7 @@ void efx_siena_sriov_probe(struct efx_nic *efx)
4622     return;
4623    
4624     if (efx_siena_sriov_cmd(efx, false, &efx->vi_scale, &count)) {
4625     - netif_info(efx, probe, efx->net_dev, "no SR-IOV VFs probed\n");
4626     + pci_info(efx->pci_dev, "no SR-IOV VFs probed\n");
4627     return;
4628     }
4629     if (count > 0 && count > max_vfs)
4630     diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
4631     index 6869c5c74b9f7..fac59032bf83a 100644
4632     --- a/drivers/net/ethernet/ti/davinci_emac.c
4633     +++ b/drivers/net/ethernet/ti/davinci_emac.c
4634     @@ -412,8 +412,20 @@ static int emac_set_coalesce(struct net_device *ndev,
4635     u32 int_ctrl, num_interrupts = 0;
4636     u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
4637    
4638     - if (!coal->rx_coalesce_usecs)
4639     - return -EINVAL;
4640     + if (!coal->rx_coalesce_usecs) {
4641     + priv->coal_intvl = 0;
4642     +
4643     + switch (priv->version) {
4644     + case EMAC_VERSION_2:
4645     + emac_ctrl_write(EMAC_DM646X_CMINTCTRL, 0);
4646     + break;
4647     + default:
4648     + emac_ctrl_write(EMAC_CTRL_EWINTTCNT, 0);
4649     + break;
4650     + }
4651     +
4652     + return 0;
4653     + }
4654    
4655     coal_intvl = coal->rx_coalesce_usecs;
4656    
4657     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
4658     index f95bd1b0fb965..0b61d80ea3f8c 100644
4659     --- a/drivers/net/phy/micrel.c
4660     +++ b/drivers/net/phy/micrel.c
4661     @@ -1040,8 +1040,9 @@ static struct phy_driver ksphy_driver[] = {
4662     .get_sset_count = kszphy_get_sset_count,
4663     .get_strings = kszphy_get_strings,
4664     .get_stats = kszphy_get_stats,
4665     - .suspend = genphy_suspend,
4666     - .resume = genphy_resume,
4667     + /* No suspend/resume callbacks because of errata DS80000700A,
4668     + * receiver error following software power down.
4669     + */
4670     }, {
4671     .phy_id = PHY_ID_KSZ8041RNLI,
4672     .phy_id_mask = MICREL_PHY_ID_MASK,
4673     diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
4674     index bf5bbb565cf5e..7be43a1eaefda 100644
4675     --- a/drivers/net/phy/phylink.c
4676     +++ b/drivers/net/phy/phylink.c
4677     @@ -1331,7 +1331,7 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
4678     return -EOPNOTSUPP;
4679    
4680     if (!phylink_test(pl->supported, Asym_Pause) &&
4681     - !pause->autoneg && pause->rx_pause != pause->tx_pause)
4682     + pause->rx_pause != pause->tx_pause)
4683     return -EINVAL;
4684    
4685     config->pause &= ~(MLO_PAUSE_AN | MLO_PAUSE_TXRX_MASK);
4686     diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
4687     index a06e6ab453f50..cf090f88dac03 100644
4688     --- a/drivers/net/vmxnet3/vmxnet3_drv.c
4689     +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
4690     @@ -3634,7 +3634,6 @@ vmxnet3_suspend(struct device *device)
4691     vmxnet3_free_intr_resources(adapter);
4692    
4693     netif_device_detach(netdev);
4694     - netif_tx_stop_all_queues(netdev);
4695    
4696     /* Create wake-up filters. */
4697     pmConf = adapter->pm_conf;
4698     diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
4699     index f08ed52d51f3f..f436b8c130611 100644
4700     --- a/drivers/net/vrf.c
4701     +++ b/drivers/net/vrf.c
4702     @@ -33,6 +33,7 @@
4703     #include <net/l3mdev.h>
4704     #include <net/fib_rules.h>
4705     #include <net/netns/generic.h>
4706     +#include <net/netfilter/nf_conntrack.h>
4707    
4708     #define DRV_NAME "vrf"
4709     #define DRV_VERSION "1.0"
4710     @@ -147,12 +148,26 @@ static int vrf_local_xmit(struct sk_buff *skb, struct net_device *dev,
4711     return NETDEV_TX_OK;
4712     }
4713    
4714     +static void vrf_nf_set_untracked(struct sk_buff *skb)
4715     +{
4716     + if (skb_get_nfct(skb) == 0)
4717     + nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
4718     +}
4719     +
4720     +static void vrf_nf_reset_ct(struct sk_buff *skb)
4721     +{
4722     + if (skb_get_nfct(skb) == IP_CT_UNTRACKED)
4723     + nf_reset_ct(skb);
4724     +}
4725     +
4726     #if IS_ENABLED(CONFIG_IPV6)
4727     static int vrf_ip6_local_out(struct net *net, struct sock *sk,
4728     struct sk_buff *skb)
4729     {
4730     int err;
4731    
4732     + vrf_nf_reset_ct(skb);
4733     +
4734     err = nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, net,
4735     sk, skb, NULL, skb_dst(skb)->dev, dst_output);
4736    
4737     @@ -232,6 +247,8 @@ static int vrf_ip_local_out(struct net *net, struct sock *sk,
4738     {
4739     int err;
4740    
4741     + vrf_nf_reset_ct(skb);
4742     +
4743     err = nf_hook(NFPROTO_IPV4, NF_INET_LOCAL_OUT, net, sk,
4744     skb, NULL, skb_dst(skb)->dev, dst_output);
4745     if (likely(err == 1))
4746     @@ -351,8 +368,7 @@ static void vrf_finish_direct(struct sk_buff *skb)
4747     skb_pull(skb, ETH_HLEN);
4748     }
4749    
4750     - /* reset skb device */
4751     - nf_reset_ct(skb);
4752     + vrf_nf_reset_ct(skb);
4753     }
4754    
4755     #if IS_ENABLED(CONFIG_IPV6)
4756     @@ -366,7 +382,7 @@ static int vrf_finish_output6(struct net *net, struct sock *sk,
4757     struct neighbour *neigh;
4758     int ret;
4759    
4760     - nf_reset_ct(skb);
4761     + vrf_nf_reset_ct(skb);
4762    
4763     skb->protocol = htons(ETH_P_IPV6);
4764     skb->dev = dev;
4765     @@ -477,6 +493,8 @@ static struct sk_buff *vrf_ip6_out_direct(struct net_device *vrf_dev,
4766    
4767     skb->dev = vrf_dev;
4768    
4769     + vrf_nf_set_untracked(skb);
4770     +
4771     err = nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, net, sk,
4772     skb, NULL, vrf_dev, vrf_ip6_out_direct_finish);
4773    
4774     @@ -584,7 +602,7 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
4775     bool is_v6gw = false;
4776     int ret = -EINVAL;
4777    
4778     - nf_reset_ct(skb);
4779     + vrf_nf_reset_ct(skb);
4780    
4781     /* Be paranoid, rather than too clever. */
4782     if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) {
4783     @@ -712,6 +730,8 @@ static struct sk_buff *vrf_ip_out_direct(struct net_device *vrf_dev,
4784    
4785     skb->dev = vrf_dev;
4786    
4787     + vrf_nf_set_untracked(skb);
4788     +
4789     err = nf_hook(NFPROTO_IPV4, NF_INET_LOCAL_OUT, net, sk,
4790     skb, NULL, vrf_dev, vrf_ip_out_direct_finish);
4791    
4792     diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
4793     index 20e248fd43642..3026eb54a7f23 100644
4794     --- a/drivers/net/wireless/ath/ath10k/mac.c
4795     +++ b/drivers/net/wireless/ath/ath10k/mac.c
4796     @@ -985,8 +985,12 @@ static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
4797     ath10k_mac_vif_beacon_free(arvif);
4798    
4799     if (arvif->beacon_buf) {
4800     - dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4801     - arvif->beacon_buf, arvif->beacon_paddr);
4802     + if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL)
4803     + kfree(arvif->beacon_buf);
4804     + else
4805     + dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4806     + arvif->beacon_buf,
4807     + arvif->beacon_paddr);
4808     arvif->beacon_buf = NULL;
4809     }
4810     }
4811     @@ -1040,7 +1044,7 @@ static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
4812     arg.channel.min_power = 0;
4813     arg.channel.max_power = channel->max_power * 2;
4814     arg.channel.max_reg_power = channel->max_reg_power * 2;
4815     - arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
4816     + arg.channel.max_antenna_gain = channel->max_antenna_gain;
4817    
4818     reinit_completion(&ar->vdev_setup_done);
4819     reinit_completion(&ar->vdev_delete_done);
4820     @@ -1486,7 +1490,7 @@ static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
4821     arg.channel.min_power = 0;
4822     arg.channel.max_power = chandef->chan->max_power * 2;
4823     arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
4824     - arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
4825     + arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain;
4826    
4827     if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4828     arg.ssid = arvif->u.ap.ssid;
4829     @@ -3145,7 +3149,7 @@ static int ath10k_update_channel_list(struct ath10k *ar)
4830     ch->min_power = 0;
4831     ch->max_power = channel->max_power * 2;
4832     ch->max_reg_power = channel->max_reg_power * 2;
4833     - ch->max_antenna_gain = channel->max_antenna_gain * 2;
4834     + ch->max_antenna_gain = channel->max_antenna_gain;
4835     ch->reg_class_id = 0; /* FIXME */
4836    
4837     /* FIXME: why use only legacy modes, why not any
4838     @@ -5251,10 +5255,25 @@ static int ath10k_add_interface(struct ieee80211_hw *hw,
4839     if (vif->type == NL80211_IFTYPE_ADHOC ||
4840     vif->type == NL80211_IFTYPE_MESH_POINT ||
4841     vif->type == NL80211_IFTYPE_AP) {
4842     - arvif->beacon_buf = dma_alloc_coherent(ar->dev,
4843     - IEEE80211_MAX_FRAME_LEN,
4844     - &arvif->beacon_paddr,
4845     - GFP_ATOMIC);
4846     + if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL) {
4847     + arvif->beacon_buf = kmalloc(IEEE80211_MAX_FRAME_LEN,
4848     + GFP_KERNEL);
4849     +
4850     + /* Using a kernel pointer in place of a dma_addr_t
4851     + * token can lead to undefined behavior if that
4852     + * makes it into cache management functions. Use a
4853     + * known-invalid address token instead, which
4854     + * avoids the warning and makes it easier to catch
4855     + * bugs if it does end up getting used.
4856     + */
4857     + arvif->beacon_paddr = DMA_MAPPING_ERROR;
4858     + } else {
4859     + arvif->beacon_buf =
4860     + dma_alloc_coherent(ar->dev,
4861     + IEEE80211_MAX_FRAME_LEN,
4862     + &arvif->beacon_paddr,
4863     + GFP_ATOMIC);
4864     + }
4865     if (!arvif->beacon_buf) {
4866     ret = -ENOMEM;
4867     ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4868     @@ -5469,8 +5488,12 @@ err_vdev_delete:
4869    
4870     err:
4871     if (arvif->beacon_buf) {
4872     - dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4873     - arvif->beacon_buf, arvif->beacon_paddr);
4874     + if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL)
4875     + kfree(arvif->beacon_buf);
4876     + else
4877     + dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4878     + arvif->beacon_buf,
4879     + arvif->beacon_paddr);
4880     arvif->beacon_buf = NULL;
4881     }
4882    
4883     diff --git a/drivers/net/wireless/ath/ath10k/usb.c b/drivers/net/wireless/ath/ath10k/usb.c
4884     index 05c0d5e92475e..326e1dc4c6734 100644
4885     --- a/drivers/net/wireless/ath/ath10k/usb.c
4886     +++ b/drivers/net/wireless/ath/ath10k/usb.c
4887     @@ -525,7 +525,7 @@ static int ath10k_usb_submit_ctrl_in(struct ath10k *ar,
4888     req,
4889     USB_DIR_IN | USB_TYPE_VENDOR |
4890     USB_RECIP_DEVICE, value, index, buf,
4891     - size, 2 * HZ);
4892     + size, 2000);
4893    
4894     if (ret < 0) {
4895     ath10k_warn(ar, "Failed to read usb control message: %d\n",
4896     @@ -865,6 +865,11 @@ static int ath10k_usb_setup_pipe_resources(struct ath10k *ar,
4897     le16_to_cpu(endpoint->wMaxPacketSize),
4898     endpoint->bInterval);
4899     }
4900     +
4901     + /* Ignore broken descriptors. */
4902     + if (usb_endpoint_maxp(endpoint) == 0)
4903     + continue;
4904     +
4905     urbcount = 0;
4906    
4907     pipe_num =
4908     diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
4909     index 91604a14a8f46..796bd93c599b1 100644
4910     --- a/drivers/net/wireless/ath/ath10k/wmi.c
4911     +++ b/drivers/net/wireless/ath/ath10k/wmi.c
4912     @@ -2541,6 +2541,10 @@ int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb)
4913     if (ieee80211_is_beacon(hdr->frame_control))
4914     ath10k_mac_handle_beacon(ar, skb);
4915    
4916     + if (ieee80211_is_beacon(hdr->frame_control) ||
4917     + ieee80211_is_probe_resp(hdr->frame_control))
4918     + status->boottime_ns = ktime_get_boottime_ns();
4919     +
4920     ath10k_dbg(ar, ATH10K_DBG_MGMT,
4921     "event mgmt rx skb %pK len %d ftype %02x stype %02x\n",
4922     skb, skb->len,
4923     diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
4924     index 761bc4a7064df..de22396d085ce 100644
4925     --- a/drivers/net/wireless/ath/ath10k/wmi.h
4926     +++ b/drivers/net/wireless/ath/ath10k/wmi.h
4927     @@ -2045,7 +2045,9 @@ struct wmi_channel {
4928     union {
4929     __le32 reginfo1;
4930     struct {
4931     + /* note: power unit is 1 dBm */
4932     u8 antenna_max;
4933     + /* note: power unit is 0.5 dBm */
4934     u8 max_tx_power;
4935     } __packed;
4936     } __packed;
4937     @@ -2065,6 +2067,7 @@ struct wmi_channel_arg {
4938     u32 min_power;
4939     u32 max_power;
4940     u32 max_reg_power;
4941     + /* note: power unit is 1 dBm */
4942     u32 max_antenna_gain;
4943     u32 reg_class_id;
4944     enum wmi_phy_mode mode;
4945     diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
4946     index 53b66e9434c99..8b24964304b1f 100644
4947     --- a/drivers/net/wireless/ath/ath6kl/usb.c
4948     +++ b/drivers/net/wireless/ath/ath6kl/usb.c
4949     @@ -340,6 +340,11 @@ static int ath6kl_usb_setup_pipe_resources(struct ath6kl_usb *ar_usb)
4950     le16_to_cpu(endpoint->wMaxPacketSize),
4951     endpoint->bInterval);
4952     }
4953     +
4954     + /* Ignore broken descriptors. */
4955     + if (usb_endpoint_maxp(endpoint) == 0)
4956     + continue;
4957     +
4958     urbcount = 0;
4959    
4960     pipe_num =
4961     @@ -907,7 +912,7 @@ static int ath6kl_usb_submit_ctrl_in(struct ath6kl_usb *ar_usb,
4962     req,
4963     USB_DIR_IN | USB_TYPE_VENDOR |
4964     USB_RECIP_DEVICE, value, index, buf,
4965     - size, 2 * HZ);
4966     + size, 2000);
4967    
4968     if (ret < 0) {
4969     ath6kl_warn("Failed to read usb control message: %d\n", ret);
4970     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
4971     index 28ccdcb197de2..ec13bd8d5487d 100644
4972     --- a/drivers/net/wireless/ath/ath9k/main.c
4973     +++ b/drivers/net/wireless/ath/ath9k/main.c
4974     @@ -530,8 +530,10 @@ irqreturn_t ath_isr(int irq, void *dev)
4975     ath9k_debug_sync_cause(sc, sync_cause);
4976     status &= ah->imask; /* discard unasked-for bits */
4977    
4978     - if (test_bit(ATH_OP_HW_RESET, &common->op_flags))
4979     + if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) {
4980     + ath9k_hw_kill_interrupts(sc->sc_ah);
4981     return IRQ_HANDLED;
4982     + }
4983    
4984     /*
4985     * If there are no status bits set, then this interrupt was not
4986     diff --git a/drivers/net/wireless/ath/dfs_pattern_detector.c b/drivers/net/wireless/ath/dfs_pattern_detector.c
4987     index a274eb0d19688..a0ad6e48a35b4 100644
4988     --- a/drivers/net/wireless/ath/dfs_pattern_detector.c
4989     +++ b/drivers/net/wireless/ath/dfs_pattern_detector.c
4990     @@ -182,10 +182,12 @@ static void channel_detector_exit(struct dfs_pattern_detector *dpd,
4991     if (cd == NULL)
4992     return;
4993     list_del(&cd->head);
4994     - for (i = 0; i < dpd->num_radar_types; i++) {
4995     - struct pri_detector *de = cd->detectors[i];
4996     - if (de != NULL)
4997     - de->exit(de);
4998     + if (cd->detectors) {
4999     + for (i = 0; i < dpd->num_radar_types; i++) {
5000     + struct pri_detector *de = cd->detectors[i];
5001     + if (de != NULL)
5002     + de->exit(de);
5003     + }
5004     }
5005     kfree(cd->detectors);
5006     kfree(cd);
5007     diff --git a/drivers/net/wireless/ath/wcn36xx/dxe.c b/drivers/net/wireless/ath/wcn36xx/dxe.c
5008     index bab30f7a443ce..4da25e84793b7 100644
5009     --- a/drivers/net/wireless/ath/wcn36xx/dxe.c
5010     +++ b/drivers/net/wireless/ath/wcn36xx/dxe.c
5011     @@ -563,6 +563,10 @@ static int wcn36xx_rx_handle_packets(struct wcn36xx *wcn,
5012     dxe = ctl->desc;
5013    
5014     while (!(READ_ONCE(dxe->ctrl) & WCN36xx_DXE_CTRL_VLD)) {
5015     + /* do not read until we own DMA descriptor */
5016     + dma_rmb();
5017     +
5018     + /* read/modify DMA descriptor */
5019     skb = ctl->skb;
5020     dma_addr = dxe->dst_addr_l;
5021     ret = wcn36xx_dxe_fill_skb(wcn->dev, ctl, GFP_ATOMIC);
5022     @@ -573,9 +577,15 @@ static int wcn36xx_rx_handle_packets(struct wcn36xx *wcn,
5023     dma_unmap_single(wcn->dev, dma_addr, WCN36XX_PKT_SIZE,
5024     DMA_FROM_DEVICE);
5025     wcn36xx_rx_skb(wcn, skb);
5026     - } /* else keep old skb not submitted and use it for rx DMA */
5027     + }
5028     + /* else keep old skb not submitted and reuse it for rx DMA
5029     + * (dropping the packet that it contained)
5030     + */
5031    
5032     + /* flush descriptor changes before re-marking as valid */
5033     + dma_wmb();
5034     dxe->ctrl = ctrl;
5035     +
5036     ctl = ctl->next;
5037     dxe = ctl->desc;
5038     }
5039     diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
5040     index 556ba3c6c5d8e..eb5d08bf25032 100644
5041     --- a/drivers/net/wireless/ath/wcn36xx/main.c
5042     +++ b/drivers/net/wireless/ath/wcn36xx/main.c
5043     @@ -134,7 +134,9 @@ static struct ieee80211_supported_band wcn_band_2ghz = {
5044     .cap = IEEE80211_HT_CAP_GRN_FLD |
5045     IEEE80211_HT_CAP_SGI_20 |
5046     IEEE80211_HT_CAP_DSSSCCK40 |
5047     - IEEE80211_HT_CAP_LSIG_TXOP_PROT,
5048     + IEEE80211_HT_CAP_LSIG_TXOP_PROT |
5049     + IEEE80211_HT_CAP_SGI_40 |
5050     + IEEE80211_HT_CAP_SUP_WIDTH_20_40,
5051     .ht_supported = true,
5052     .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K,
5053     .ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
5054     diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
5055     index 523550f94a3f0..a7532028bf9db 100644
5056     --- a/drivers/net/wireless/ath/wcn36xx/smd.c
5057     +++ b/drivers/net/wireless/ath/wcn36xx/smd.c
5058     @@ -2340,30 +2340,52 @@ static int wcn36xx_smd_delete_sta_context_ind(struct wcn36xx *wcn,
5059     size_t len)
5060     {
5061     struct wcn36xx_hal_delete_sta_context_ind_msg *rsp = buf;
5062     - struct wcn36xx_vif *tmp;
5063     + struct wcn36xx_vif *vif_priv;
5064     + struct ieee80211_vif *vif;
5065     + struct ieee80211_bss_conf *bss_conf;
5066     struct ieee80211_sta *sta;
5067     + bool found = false;
5068    
5069     if (len != sizeof(*rsp)) {
5070     wcn36xx_warn("Corrupted delete sta indication\n");
5071     return -EIO;
5072     }
5073    
5074     - wcn36xx_dbg(WCN36XX_DBG_HAL, "delete station indication %pM index %d\n",
5075     - rsp->addr2, rsp->sta_id);
5076     + wcn36xx_dbg(WCN36XX_DBG_HAL,
5077     + "delete station indication %pM index %d reason %d\n",
5078     + rsp->addr2, rsp->sta_id, rsp->reason_code);
5079    
5080     - list_for_each_entry(tmp, &wcn->vif_list, list) {
5081     + list_for_each_entry(vif_priv, &wcn->vif_list, list) {
5082     rcu_read_lock();
5083     - sta = ieee80211_find_sta(wcn36xx_priv_to_vif(tmp), rsp->addr2);
5084     - if (sta)
5085     - ieee80211_report_low_ack(sta, 0);
5086     + vif = wcn36xx_priv_to_vif(vif_priv);
5087     +
5088     + if (vif->type == NL80211_IFTYPE_STATION) {
5089     + /* We could call ieee80211_find_sta too, but checking
5090     + * bss_conf is clearer.
5091     + */
5092     + bss_conf = &vif->bss_conf;
5093     + if (vif_priv->sta_assoc &&
5094     + !memcmp(bss_conf->bssid, rsp->addr2, ETH_ALEN)) {
5095     + found = true;
5096     + wcn36xx_dbg(WCN36XX_DBG_HAL,
5097     + "connection loss bss_index %d\n",
5098     + vif_priv->bss_index);
5099     + ieee80211_connection_loss(vif);
5100     + }
5101     + } else {
5102     + sta = ieee80211_find_sta(vif, rsp->addr2);
5103     + if (sta) {
5104     + found = true;
5105     + ieee80211_report_low_ack(sta, 0);
5106     + }
5107     + }
5108     +
5109     rcu_read_unlock();
5110     - if (sta)
5111     + if (found)
5112     return 0;
5113     }
5114    
5115     - wcn36xx_warn("STA with addr %pM and index %d not found\n",
5116     - rsp->addr2,
5117     - rsp->sta_id);
5118     + wcn36xx_warn("BSS or STA with addr %pM not found\n", rsp->addr2);
5119     return -ENOENT;
5120     }
5121    
5122     diff --git a/drivers/net/wireless/broadcom/b43/phy_g.c b/drivers/net/wireless/broadcom/b43/phy_g.c
5123     index 1e022ec733a37..8b8fdb4965bde 100644
5124     --- a/drivers/net/wireless/broadcom/b43/phy_g.c
5125     +++ b/drivers/net/wireless/broadcom/b43/phy_g.c
5126     @@ -2297,7 +2297,7 @@ static u8 b43_gphy_aci_scan(struct b43_wldev *dev)
5127     b43_phy_mask(dev, B43_PHY_G_CRS, 0x7FFF);
5128     b43_set_all_gains(dev, 3, 8, 1);
5129    
5130     - start = (channel - 5 > 0) ? channel - 5 : 1;
5131     + start = (channel > 5) ? channel - 5 : 1;
5132     end = (channel + 5 < 14) ? channel + 5 : 13;
5133    
5134     for (i = start; i <= end; i++) {
5135     diff --git a/drivers/net/wireless/broadcom/b43legacy/radio.c b/drivers/net/wireless/broadcom/b43legacy/radio.c
5136     index da40d1ca8723d..e4dce76a4481d 100644
5137     --- a/drivers/net/wireless/broadcom/b43legacy/radio.c
5138     +++ b/drivers/net/wireless/broadcom/b43legacy/radio.c
5139     @@ -283,7 +283,7 @@ u8 b43legacy_radio_aci_scan(struct b43legacy_wldev *dev)
5140     & 0x7FFF);
5141     b43legacy_set_all_gains(dev, 3, 8, 1);
5142    
5143     - start = (channel - 5 > 0) ? channel - 5 : 1;
5144     + start = (channel > 5) ? channel - 5 : 1;
5145     end = (channel + 5 < 14) ? channel + 5 : 13;
5146    
5147     for (i = start; i <= end; i++) {
5148     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c
5149     index 6d5188b78f2de..0af452dca7664 100644
5150     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c
5151     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c
5152     @@ -75,6 +75,16 @@ static const struct dmi_system_id dmi_platform_data[] = {
5153     },
5154     .driver_data = (void *)&acepc_t8_data,
5155     },
5156     + {
5157     + /* Cyberbook T116 rugged tablet */
5158     + .matches = {
5159     + DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"),
5160     + DMI_EXACT_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
5161     + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "20170531"),
5162     + },
5163     + /* The factory image nvram file is identical to the ACEPC T8 one */
5164     + .driver_data = (void *)&acepc_t8_data,
5165     + },
5166     {
5167     /* Match for the GPDwin which unfortunately uses somewhat
5168     * generic dmi strings, which is why we test for 4 strings.
5169     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
5170     index 8686107da1168..a637d7fb4b261 100644
5171     --- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
5172     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
5173     @@ -758,6 +758,9 @@ bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm)
5174    
5175     lockdep_assert_held(&mvm->mutex);
5176    
5177     + if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM)
5178     + return false;
5179     +
5180     if (num_of_ant(iwl_mvm_get_valid_rx_ant(mvm)) == 1)
5181     return false;
5182    
5183     diff --git a/drivers/net/wireless/marvell/libertas/if_usb.c b/drivers/net/wireless/marvell/libertas/if_usb.c
5184     index 20436a289d5cd..5d6dc1dd050d4 100644
5185     --- a/drivers/net/wireless/marvell/libertas/if_usb.c
5186     +++ b/drivers/net/wireless/marvell/libertas/if_usb.c
5187     @@ -292,6 +292,7 @@ err_add_card:
5188     if_usb_reset_device(cardp);
5189     dealloc:
5190     if_usb_free(cardp);
5191     + kfree(cardp);
5192    
5193     error:
5194     return r;
5195     @@ -316,6 +317,7 @@ static void if_usb_disconnect(struct usb_interface *intf)
5196    
5197     /* Unlink and free urb */
5198     if_usb_free(cardp);
5199     + kfree(cardp);
5200    
5201     usb_set_intfdata(intf, NULL);
5202     usb_put_dev(interface_to_usbdev(intf));
5203     diff --git a/drivers/net/wireless/marvell/libertas_tf/if_usb.c b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
5204     index bedc092150884..b30bcb28503ae 100644
5205     --- a/drivers/net/wireless/marvell/libertas_tf/if_usb.c
5206     +++ b/drivers/net/wireless/marvell/libertas_tf/if_usb.c
5207     @@ -230,6 +230,7 @@ static int if_usb_probe(struct usb_interface *intf,
5208    
5209     dealloc:
5210     if_usb_free(cardp);
5211     + kfree(cardp);
5212     error:
5213     lbtf_deb_leave(LBTF_DEB_MAIN);
5214     return -ENOMEM;
5215     @@ -254,6 +255,7 @@ static void if_usb_disconnect(struct usb_interface *intf)
5216    
5217     /* Unlink and free urb */
5218     if_usb_free(cardp);
5219     + kfree(cardp);
5220    
5221     usb_set_intfdata(intf, NULL);
5222     usb_put_dev(interface_to_usbdev(intf));
5223     diff --git a/drivers/net/wireless/marvell/mwifiex/11n.c b/drivers/net/wireless/marvell/mwifiex/11n.c
5224     index e435f801bc912..acbef9f1a83b6 100644
5225     --- a/drivers/net/wireless/marvell/mwifiex/11n.c
5226     +++ b/drivers/net/wireless/marvell/mwifiex/11n.c
5227     @@ -657,14 +657,15 @@ int mwifiex_send_delba(struct mwifiex_private *priv, int tid, u8 *peer_mac,
5228     uint16_t del_ba_param_set;
5229    
5230     memset(&delba, 0, sizeof(delba));
5231     - delba.del_ba_param_set = cpu_to_le16(tid << DELBA_TID_POS);
5232    
5233     - del_ba_param_set = le16_to_cpu(delba.del_ba_param_set);
5234     + del_ba_param_set = tid << DELBA_TID_POS;
5235     +
5236     if (initiator)
5237     del_ba_param_set |= IEEE80211_DELBA_PARAM_INITIATOR_MASK;
5238     else
5239     del_ba_param_set &= ~IEEE80211_DELBA_PARAM_INITIATOR_MASK;
5240    
5241     + delba.del_ba_param_set = cpu_to_le16(del_ba_param_set);
5242     memcpy(&delba.peer_mac_addr, peer_mac, ETH_ALEN);
5243    
5244     /* We don't wait for the response of this command */
5245     diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
5246     index 9e6dc289ec3e8..1599ae74b066b 100644
5247     --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
5248     +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
5249     @@ -912,16 +912,20 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv,
5250     switch (type) {
5251     case NL80211_IFTYPE_STATION:
5252     case NL80211_IFTYPE_ADHOC:
5253     - priv->bss_role = MWIFIEX_BSS_ROLE_STA;
5254     + priv->bss_role = MWIFIEX_BSS_ROLE_STA;
5255     + priv->bss_type = MWIFIEX_BSS_TYPE_STA;
5256     break;
5257     case NL80211_IFTYPE_P2P_CLIENT:
5258     - priv->bss_role = MWIFIEX_BSS_ROLE_STA;
5259     + priv->bss_role = MWIFIEX_BSS_ROLE_STA;
5260     + priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
5261     break;
5262     case NL80211_IFTYPE_P2P_GO:
5263     - priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
5264     + priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
5265     + priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
5266     break;
5267     case NL80211_IFTYPE_AP:
5268     priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
5269     + priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
5270     break;
5271     default:
5272     mwifiex_dbg(adapter, ERROR,
5273     @@ -1233,29 +1237,15 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
5274     break;
5275     case NL80211_IFTYPE_P2P_CLIENT:
5276     case NL80211_IFTYPE_P2P_GO:
5277     + if (mwifiex_cfg80211_deinit_p2p(priv))
5278     + return -EFAULT;
5279     +
5280     switch (type) {
5281     - case NL80211_IFTYPE_STATION:
5282     - if (mwifiex_cfg80211_deinit_p2p(priv))
5283     - return -EFAULT;
5284     - priv->adapter->curr_iface_comb.p2p_intf--;
5285     - priv->adapter->curr_iface_comb.sta_intf++;
5286     - dev->ieee80211_ptr->iftype = type;
5287     - if (mwifiex_deinit_priv_params(priv))
5288     - return -1;
5289     - if (mwifiex_init_new_priv_params(priv, dev, type))
5290     - return -1;
5291     - if (mwifiex_sta_init_cmd(priv, false, false))
5292     - return -1;
5293     - break;
5294     case NL80211_IFTYPE_ADHOC:
5295     - if (mwifiex_cfg80211_deinit_p2p(priv))
5296     - return -EFAULT;
5297     + case NL80211_IFTYPE_STATION:
5298     return mwifiex_change_vif_to_sta_adhoc(dev, curr_iftype,
5299     type, params);
5300     - break;
5301     case NL80211_IFTYPE_AP:
5302     - if (mwifiex_cfg80211_deinit_p2p(priv))
5303     - return -EFAULT;
5304     return mwifiex_change_vif_to_ap(dev, curr_iftype, type,
5305     params);
5306     case NL80211_IFTYPE_UNSPECIFIED:
5307     diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
5308     index bc46a0aa06eb7..b316e34917958 100644
5309     --- a/drivers/net/wireless/marvell/mwifiex/pcie.c
5310     +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
5311     @@ -1326,6 +1326,14 @@ mwifiex_pcie_send_data(struct mwifiex_adapter *adapter, struct sk_buff *skb,
5312     ret = -1;
5313     goto done_unmap;
5314     }
5315     +
5316     + /* The firmware (latest version 15.68.19.p21) of the 88W8897 PCIe+USB card
5317     + * seems to crash randomly after setting the TX ring write pointer when
5318     + * ASPM powersaving is enabled. A workaround seems to be keeping the bus
5319     + * busy by reading a random register afterwards.
5320     + */
5321     + mwifiex_read_reg(adapter, PCI_VENDOR_ID, &rx_val);
5322     +
5323     if ((mwifiex_pcie_txbd_not_full(card)) &&
5324     tx_param->next_pkt_len) {
5325     /* have more packets and TxBD still can hold more */
5326     diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c
5327     index 528107d70c1cb..cb8a9ad40cfe9 100644
5328     --- a/drivers/net/wireless/marvell/mwifiex/usb.c
5329     +++ b/drivers/net/wireless/marvell/mwifiex/usb.c
5330     @@ -505,6 +505,22 @@ static int mwifiex_usb_probe(struct usb_interface *intf,
5331     }
5332     }
5333    
5334     + switch (card->usb_boot_state) {
5335     + case USB8XXX_FW_DNLD:
5336     + /* Reject broken descriptors. */
5337     + if (!card->rx_cmd_ep || !card->tx_cmd_ep)
5338     + return -ENODEV;
5339     + if (card->bulk_out_maxpktsize == 0)
5340     + return -ENODEV;
5341     + break;
5342     + case USB8XXX_FW_READY:
5343     + /* Assume the driver can handle missing endpoints for now. */
5344     + break;
5345     + default:
5346     + WARN_ON(1);
5347     + return -ENODEV;
5348     + }
5349     +
5350     usb_set_intfdata(intf, card);
5351    
5352     ret = mwifiex_add_card(card, &card->fw_done, &usb_ops,
5353     diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
5354     index 1b76b24191866..14ac2384218df 100644
5355     --- a/drivers/net/wireless/marvell/mwl8k.c
5356     +++ b/drivers/net/wireless/marvell/mwl8k.c
5357     @@ -5796,8 +5796,8 @@ static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
5358     fail:
5359     priv->fw_state = FW_STATE_ERROR;
5360     complete(&priv->firmware_loading_complete);
5361     - device_release_driver(&priv->pdev->dev);
5362     mwl8k_release_firmware(priv);
5363     + device_release_driver(&priv->pdev->dev);
5364     }
5365    
5366     #define MAX_RESTART_ATTEMPTS 1
5367     diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
5368     index abacb4ea7179d..5c12cd7fce940 100644
5369     --- a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
5370     +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
5371     @@ -154,7 +154,7 @@ void mt76x02_mac_wcid_set_drop(struct mt76x02_dev *dev, u8 idx, bool drop)
5372     mt76_wr(dev, MT_WCID_DROP(idx), (val & ~bit) | (bit * drop));
5373     }
5374    
5375     -static __le16
5376     +static u16
5377     mt76x02_mac_tx_rate_val(struct mt76x02_dev *dev,
5378     const struct ieee80211_tx_rate *rate, u8 *nss_val)
5379     {
5380     @@ -200,14 +200,14 @@ mt76x02_mac_tx_rate_val(struct mt76x02_dev *dev,
5381     rateval |= MT_RXWI_RATE_SGI;
5382    
5383     *nss_val = nss;
5384     - return cpu_to_le16(rateval);
5385     + return rateval;
5386     }
5387    
5388     void mt76x02_mac_wcid_set_rate(struct mt76x02_dev *dev, struct mt76_wcid *wcid,
5389     const struct ieee80211_tx_rate *rate)
5390     {
5391     s8 max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, rate);
5392     - __le16 rateval;
5393     + u16 rateval;
5394     u32 tx_info;
5395     s8 nss;
5396    
5397     @@ -320,7 +320,7 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
5398     struct ieee80211_key_conf *key = info->control.hw_key;
5399     u32 wcid_tx_info;
5400     u16 rate_ht_mask = FIELD_PREP(MT_RXWI_RATE_PHY, BIT(1) | BIT(2));
5401     - u16 txwi_flags = 0;
5402     + u16 txwi_flags = 0, rateval;
5403     u8 nss;
5404     s8 txpwr_adj, max_txpwr_adj;
5405     u8 ccmp_pn[8], nstreams = dev->mt76.chainmask & 0xf;
5406     @@ -356,14 +356,15 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
5407    
5408     if (wcid && (rate->idx < 0 || !rate->count)) {
5409     wcid_tx_info = wcid->tx_info;
5410     - txwi->rate = FIELD_GET(MT_WCID_TX_INFO_RATE, wcid_tx_info);
5411     + rateval = FIELD_GET(MT_WCID_TX_INFO_RATE, wcid_tx_info);
5412     max_txpwr_adj = FIELD_GET(MT_WCID_TX_INFO_TXPWR_ADJ,
5413     wcid_tx_info);
5414     nss = FIELD_GET(MT_WCID_TX_INFO_NSS, wcid_tx_info);
5415     } else {
5416     - txwi->rate = mt76x02_mac_tx_rate_val(dev, rate, &nss);
5417     + rateval = mt76x02_mac_tx_rate_val(dev, rate, &nss);
5418     max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, rate);
5419     }
5420     + txwi->rate = cpu_to_le16(rateval);
5421    
5422     txpwr_adj = mt76x02_tx_get_txpwr_adj(dev, dev->mt76.txpower_conf,
5423     max_txpwr_adj);
5424     diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c
5425     index b2616d61b66d8..843e3f41a2bc3 100644
5426     --- a/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c
5427     +++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/rtl8225.c
5428     @@ -28,7 +28,7 @@ u8 rtl818x_ioread8_idx(struct rtl8187_priv *priv,
5429     usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
5430     RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
5431     (unsigned long)addr, idx & 0x03,
5432     - &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
5433     + &priv->io_dmabuf->bits8, sizeof(val), 500);
5434    
5435     val = priv->io_dmabuf->bits8;
5436     mutex_unlock(&priv->io_mutex);
5437     @@ -45,7 +45,7 @@ u16 rtl818x_ioread16_idx(struct rtl8187_priv *priv,
5438     usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
5439     RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
5440     (unsigned long)addr, idx & 0x03,
5441     - &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
5442     + &priv->io_dmabuf->bits16, sizeof(val), 500);
5443    
5444     val = priv->io_dmabuf->bits16;
5445     mutex_unlock(&priv->io_mutex);
5446     @@ -62,7 +62,7 @@ u32 rtl818x_ioread32_idx(struct rtl8187_priv *priv,
5447     usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
5448     RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
5449     (unsigned long)addr, idx & 0x03,
5450     - &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
5451     + &priv->io_dmabuf->bits32, sizeof(val), 500);
5452    
5453     val = priv->io_dmabuf->bits32;
5454     mutex_unlock(&priv->io_mutex);
5455     @@ -79,7 +79,7 @@ void rtl818x_iowrite8_idx(struct rtl8187_priv *priv,
5456     usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
5457     RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
5458     (unsigned long)addr, idx & 0x03,
5459     - &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
5460     + &priv->io_dmabuf->bits8, sizeof(val), 500);
5461    
5462     mutex_unlock(&priv->io_mutex);
5463     }
5464     @@ -93,7 +93,7 @@ void rtl818x_iowrite16_idx(struct rtl8187_priv *priv,
5465     usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
5466     RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
5467     (unsigned long)addr, idx & 0x03,
5468     - &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
5469     + &priv->io_dmabuf->bits16, sizeof(val), 500);
5470    
5471     mutex_unlock(&priv->io_mutex);
5472     }
5473     @@ -107,7 +107,7 @@ void rtl818x_iowrite32_idx(struct rtl8187_priv *priv,
5474     usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
5475     RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
5476     (unsigned long)addr, idx & 0x03,
5477     - &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
5478     + &priv->io_dmabuf->bits32, sizeof(val), 500);
5479    
5480     mutex_unlock(&priv->io_mutex);
5481     }
5482     @@ -183,7 +183,7 @@ static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data)
5483     usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
5484     RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
5485     addr, 0x8225, &priv->io_dmabuf->bits16, sizeof(data),
5486     - HZ / 2);
5487     + 500);
5488    
5489     mutex_unlock(&priv->io_mutex);
5490    
5491     diff --git a/drivers/net/wireless/rsi/rsi_91x_core.c b/drivers/net/wireless/rsi/rsi_91x_core.c
5492     index 3644d7d994638..c6c29034b2ead 100644
5493     --- a/drivers/net/wireless/rsi/rsi_91x_core.c
5494     +++ b/drivers/net/wireless/rsi/rsi_91x_core.c
5495     @@ -400,6 +400,8 @@ void rsi_core_xmit(struct rsi_common *common, struct sk_buff *skb)
5496    
5497     info = IEEE80211_SKB_CB(skb);
5498     tx_params = (struct skb_info *)info->driver_data;
5499     + /* info->driver_data and info->control part of union so make copy */
5500     + tx_params->have_key = !!info->control.hw_key;
5501     wh = (struct ieee80211_hdr *)&skb->data[0];
5502     tx_params->sta_id = 0;
5503    
5504     diff --git a/drivers/net/wireless/rsi/rsi_91x_hal.c b/drivers/net/wireless/rsi/rsi_91x_hal.c
5505     index 5e6c5d13319d5..7d0b44fd56901 100644
5506     --- a/drivers/net/wireless/rsi/rsi_91x_hal.c
5507     +++ b/drivers/net/wireless/rsi/rsi_91x_hal.c
5508     @@ -203,7 +203,7 @@ int rsi_prepare_data_desc(struct rsi_common *common, struct sk_buff *skb)
5509     wh->frame_control |= cpu_to_le16(RSI_SET_PS_ENABLE);
5510    
5511     if ((!(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT)) &&
5512     - info->control.hw_key) {
5513     + tx_params->have_key) {
5514     if (rsi_is_cipher_wep(common))
5515     ieee80211_size += 4;
5516     else
5517     @@ -214,15 +214,17 @@ int rsi_prepare_data_desc(struct rsi_common *common, struct sk_buff *skb)
5518     RSI_WIFI_DATA_Q);
5519     data_desc->header_len = ieee80211_size;
5520    
5521     - if (common->min_rate != RSI_RATE_AUTO) {
5522     + if (common->rate_config[common->band].fixed_enabled) {
5523     /* Send fixed rate */
5524     + u16 fixed_rate = common->rate_config[common->band].fixed_hw_rate;
5525     +
5526     data_desc->frame_info = cpu_to_le16(RATE_INFO_ENABLE);
5527     - data_desc->rate_info = cpu_to_le16(common->min_rate);
5528     + data_desc->rate_info = cpu_to_le16(fixed_rate);
5529    
5530     if (conf_is_ht40(&common->priv->hw->conf))
5531     data_desc->bbp_info = cpu_to_le16(FULL40M_ENABLE);
5532    
5533     - if ((common->vif_info[0].sgi) && (common->min_rate & 0x100)) {
5534     + if (common->vif_info[0].sgi && (fixed_rate & 0x100)) {
5535     /* Only MCS rates */
5536     data_desc->rate_info |=
5537     cpu_to_le16(ENABLE_SHORTGI_RATE);
5538     diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
5539     index ca1e609f637e4..1279339a4b59b 100644
5540     --- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c
5541     +++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
5542     @@ -510,7 +510,6 @@ static int rsi_mac80211_add_interface(struct ieee80211_hw *hw,
5543     if ((vif->type == NL80211_IFTYPE_AP) ||
5544     (vif->type == NL80211_IFTYPE_P2P_GO)) {
5545     rsi_send_rx_filter_frame(common, DISALLOW_BEACONS);
5546     - common->min_rate = RSI_RATE_AUTO;
5547     for (i = 0; i < common->max_stations; i++)
5548     common->stations[i].sta = NULL;
5549     }
5550     @@ -1211,20 +1210,32 @@ static int rsi_mac80211_set_rate_mask(struct ieee80211_hw *hw,
5551     struct ieee80211_vif *vif,
5552     const struct cfg80211_bitrate_mask *mask)
5553     {
5554     + const unsigned int mcs_offset = ARRAY_SIZE(rsi_rates);
5555     struct rsi_hw *adapter = hw->priv;
5556     struct rsi_common *common = adapter->priv;
5557     - enum nl80211_band band = hw->conf.chandef.chan->band;
5558     + int i;
5559    
5560     mutex_lock(&common->mutex);
5561     - common->fixedrate_mask[band] = 0;
5562    
5563     - if (mask->control[band].legacy == 0xfff) {
5564     - common->fixedrate_mask[band] =
5565     - (mask->control[band].ht_mcs[0] << 12);
5566     - } else {
5567     - common->fixedrate_mask[band] =
5568     - mask->control[band].legacy;
5569     + for (i = 0; i < ARRAY_SIZE(common->rate_config); i++) {
5570     + struct rsi_rate_config *cfg = &common->rate_config[i];
5571     + u32 bm;
5572     +
5573     + bm = mask->control[i].legacy | (mask->control[i].ht_mcs[0] << mcs_offset);
5574     + if (hweight32(bm) == 1) { /* single rate */
5575     + int rate_index = ffs(bm) - 1;
5576     +
5577     + if (rate_index < mcs_offset)
5578     + cfg->fixed_hw_rate = rsi_rates[rate_index].hw_value;
5579     + else
5580     + cfg->fixed_hw_rate = rsi_mcsrates[rate_index - mcs_offset];
5581     + cfg->fixed_enabled = true;
5582     + } else {
5583     + cfg->configured_mask = bm;
5584     + cfg->fixed_enabled = false;
5585     + }
5586     }
5587     +
5588     mutex_unlock(&common->mutex);
5589    
5590     return 0;
5591     @@ -1360,46 +1371,6 @@ void rsi_indicate_pkt_to_os(struct rsi_common *common,
5592     ieee80211_rx_irqsafe(hw, skb);
5593     }
5594    
5595     -static void rsi_set_min_rate(struct ieee80211_hw *hw,
5596     - struct ieee80211_sta *sta,
5597     - struct rsi_common *common)
5598     -{
5599     - u8 band = hw->conf.chandef.chan->band;
5600     - u8 ii;
5601     - u32 rate_bitmap;
5602     - bool matched = false;
5603     -
5604     - common->bitrate_mask[band] = sta->supp_rates[band];
5605     -
5606     - rate_bitmap = (common->fixedrate_mask[band] & sta->supp_rates[band]);
5607     -
5608     - if (rate_bitmap & 0xfff) {
5609     - /* Find out the min rate */
5610     - for (ii = 0; ii < ARRAY_SIZE(rsi_rates); ii++) {
5611     - if (rate_bitmap & BIT(ii)) {
5612     - common->min_rate = rsi_rates[ii].hw_value;
5613     - matched = true;
5614     - break;
5615     - }
5616     - }
5617     - }
5618     -
5619     - common->vif_info[0].is_ht = sta->ht_cap.ht_supported;
5620     -
5621     - if ((common->vif_info[0].is_ht) && (rate_bitmap >> 12)) {
5622     - for (ii = 0; ii < ARRAY_SIZE(rsi_mcsrates); ii++) {
5623     - if ((rate_bitmap >> 12) & BIT(ii)) {
5624     - common->min_rate = rsi_mcsrates[ii];
5625     - matched = true;
5626     - break;
5627     - }
5628     - }
5629     - }
5630     -
5631     - if (!matched)
5632     - common->min_rate = 0xffff;
5633     -}
5634     -
5635     /**
5636     * rsi_mac80211_sta_add() - This function notifies driver about a peer getting
5637     * connected.
5638     @@ -1498,9 +1469,9 @@ static int rsi_mac80211_sta_add(struct ieee80211_hw *hw,
5639    
5640     if ((vif->type == NL80211_IFTYPE_STATION) ||
5641     (vif->type == NL80211_IFTYPE_P2P_CLIENT)) {
5642     - rsi_set_min_rate(hw, sta, common);
5643     + common->bitrate_mask[common->band] = sta->supp_rates[common->band];
5644     + common->vif_info[0].is_ht = sta->ht_cap.ht_supported;
5645     if (sta->ht_cap.ht_supported) {
5646     - common->vif_info[0].is_ht = true;
5647     common->bitrate_mask[NL80211_BAND_2GHZ] =
5648     sta->supp_rates[NL80211_BAND_2GHZ];
5649     if ((sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ||
5650     @@ -1574,7 +1545,6 @@ static int rsi_mac80211_sta_remove(struct ieee80211_hw *hw,
5651     bss->qos = sta->wme;
5652     common->bitrate_mask[NL80211_BAND_2GHZ] = 0;
5653     common->bitrate_mask[NL80211_BAND_5GHZ] = 0;
5654     - common->min_rate = 0xffff;
5655     common->vif_info[0].is_ht = false;
5656     common->vif_info[0].sgi = false;
5657     common->vif_info[0].seq_start = 0;
5658     diff --git a/drivers/net/wireless/rsi/rsi_91x_main.c b/drivers/net/wireless/rsi/rsi_91x_main.c
5659     index 29d83049c5f56..441fda71f6289 100644
5660     --- a/drivers/net/wireless/rsi/rsi_91x_main.c
5661     +++ b/drivers/net/wireless/rsi/rsi_91x_main.c
5662     @@ -210,9 +210,10 @@ int rsi_read_pkt(struct rsi_common *common, u8 *rx_pkt, s32 rcv_pkt_len)
5663     bt_pkt_type = frame_desc[offset + BT_RX_PKT_TYPE_OFST];
5664     if (bt_pkt_type == BT_CARD_READY_IND) {
5665     rsi_dbg(INFO_ZONE, "BT Card ready recvd\n");
5666     - if (rsi_bt_ops.attach(common, &g_proto_ops))
5667     - rsi_dbg(ERR_ZONE,
5668     - "Failed to attach BT module\n");
5669     + if (common->fsm_state == FSM_MAC_INIT_DONE)
5670     + rsi_attach_bt(common);
5671     + else
5672     + common->bt_defer_attach = true;
5673     } else {
5674     if (common->bt_adapter)
5675     rsi_bt_ops.recv_pkt(common->bt_adapter,
5676     @@ -277,6 +278,15 @@ void rsi_set_bt_context(void *priv, void *bt_context)
5677     }
5678     #endif
5679    
5680     +void rsi_attach_bt(struct rsi_common *common)
5681     +{
5682     +#ifdef CONFIG_RSI_COEX
5683     + if (rsi_bt_ops.attach(common, &g_proto_ops))
5684     + rsi_dbg(ERR_ZONE,
5685     + "Failed to attach BT module\n");
5686     +#endif
5687     +}
5688     +
5689     /**
5690     * rsi_91x_init() - This function initializes os interface operations.
5691     * @void: Void.
5692     @@ -358,6 +368,7 @@ struct rsi_hw *rsi_91x_init(u16 oper_mode)
5693     if (common->coex_mode > 1) {
5694     if (rsi_coex_attach(common)) {
5695     rsi_dbg(ERR_ZONE, "Failed to init coex module\n");
5696     + rsi_kill_thread(&common->tx_thread);
5697     goto err;
5698     }
5699     }
5700     diff --git a/drivers/net/wireless/rsi/rsi_91x_mgmt.c b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
5701     index ed67f65986775..0c0e4c08be8aa 100644
5702     --- a/drivers/net/wireless/rsi/rsi_91x_mgmt.c
5703     +++ b/drivers/net/wireless/rsi/rsi_91x_mgmt.c
5704     @@ -276,7 +276,7 @@ static void rsi_set_default_parameters(struct rsi_common *common)
5705     common->channel_width = BW_20MHZ;
5706     common->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
5707     common->channel = 1;
5708     - common->min_rate = 0xffff;
5709     + memset(&common->rate_config, 0, sizeof(common->rate_config));
5710     common->fsm_state = FSM_CARD_NOT_READY;
5711     common->iface_down = true;
5712     common->endpoint = EP_2GHZ_20MHZ;
5713     @@ -1304,7 +1304,7 @@ static int rsi_send_auto_rate_request(struct rsi_common *common,
5714     u8 band = hw->conf.chandef.chan->band;
5715     u8 num_supported_rates = 0;
5716     u8 rate_table_offset, rate_offset = 0;
5717     - u32 rate_bitmap;
5718     + u32 rate_bitmap, configured_rates;
5719     u16 *selected_rates, min_rate;
5720     bool is_ht = false, is_sgi = false;
5721     u16 frame_len = sizeof(struct rsi_auto_rate);
5722     @@ -1354,6 +1354,10 @@ static int rsi_send_auto_rate_request(struct rsi_common *common,
5723     is_sgi = true;
5724     }
5725    
5726     + /* Limit to any rates administratively configured by cfg80211 */
5727     + configured_rates = common->rate_config[band].configured_mask ?: 0xffffffff;
5728     + rate_bitmap &= configured_rates;
5729     +
5730     if (band == NL80211_BAND_2GHZ) {
5731     if ((rate_bitmap == 0) && (is_ht))
5732     min_rate = RSI_RATE_MCS0;
5733     @@ -1379,10 +1383,13 @@ static int rsi_send_auto_rate_request(struct rsi_common *common,
5734     num_supported_rates = jj;
5735    
5736     if (is_ht) {
5737     - for (ii = 0; ii < ARRAY_SIZE(mcs); ii++)
5738     - selected_rates[jj++] = mcs[ii];
5739     - num_supported_rates += ARRAY_SIZE(mcs);
5740     - rate_offset += ARRAY_SIZE(mcs);
5741     + for (ii = 0; ii < ARRAY_SIZE(mcs); ii++) {
5742     + if (configured_rates & BIT(ii + ARRAY_SIZE(rsi_rates))) {
5743     + selected_rates[jj++] = mcs[ii];
5744     + num_supported_rates++;
5745     + rate_offset++;
5746     + }
5747     + }
5748     }
5749    
5750     sort(selected_rates, jj, sizeof(u16), &rsi_compare, NULL);
5751     @@ -1467,7 +1474,7 @@ void rsi_inform_bss_status(struct rsi_common *common,
5752     qos_enable,
5753     aid, sta_id,
5754     vif);
5755     - if (common->min_rate == 0xffff)
5756     + if (!common->rate_config[common->band].fixed_enabled)
5757     rsi_send_auto_rate_request(common, sta, sta_id, vif);
5758     if (opmode == RSI_OPMODE_STA &&
5759     !(assoc_cap & WLAN_CAPABILITY_PRIVACY) &&
5760     @@ -2056,6 +2063,9 @@ static int rsi_handle_ta_confirm_type(struct rsi_common *common,
5761     if (common->reinit_hw) {
5762     complete(&common->wlan_init_completion);
5763     } else {
5764     + if (common->bt_defer_attach)
5765     + rsi_attach_bt(common);
5766     +
5767     return rsi_mac80211_attach(common);
5768     }
5769     }
5770     diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio.c b/drivers/net/wireless/rsi/rsi_91x_sdio.c
5771     index d51ec7104fb7c..4fe837090cdae 100644
5772     --- a/drivers/net/wireless/rsi/rsi_91x_sdio.c
5773     +++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c
5774     @@ -24,10 +24,7 @@
5775     /* Default operating mode is wlan STA + BT */
5776     static u16 dev_oper_mode = DEV_OPMODE_STA_BT_DUAL;
5777     module_param(dev_oper_mode, ushort, 0444);
5778     -MODULE_PARM_DESC(dev_oper_mode,
5779     - "1[Wi-Fi], 4[BT], 8[BT LE], 5[Wi-Fi STA + BT classic]\n"
5780     - "9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n"
5781     - "6[AP + BT classic], 14[AP + BT classic + BT LE]");
5782     +MODULE_PARM_DESC(dev_oper_mode, DEV_OPMODE_PARAM_DESC);
5783    
5784     /**
5785     * rsi_sdio_set_cmd52_arg() - This function prepares cmd 52 read/write arg.
5786     diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c b/drivers/net/wireless/rsi/rsi_91x_usb.c
5787     index 1e5a2a0cc6700..68ce3d2bc5357 100644
5788     --- a/drivers/net/wireless/rsi/rsi_91x_usb.c
5789     +++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
5790     @@ -25,10 +25,7 @@
5791     /* Default operating mode is wlan STA + BT */
5792     static u16 dev_oper_mode = DEV_OPMODE_STA_BT_DUAL;
5793     module_param(dev_oper_mode, ushort, 0444);
5794     -MODULE_PARM_DESC(dev_oper_mode,
5795     - "1[Wi-Fi], 4[BT], 8[BT LE], 5[Wi-Fi STA + BT classic]\n"
5796     - "9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n"
5797     - "6[AP + BT classic], 14[AP + BT classic + BT LE]");
5798     +MODULE_PARM_DESC(dev_oper_mode, DEV_OPMODE_PARAM_DESC);
5799    
5800     static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num, gfp_t flags);
5801    
5802     diff --git a/drivers/net/wireless/rsi/rsi_hal.h b/drivers/net/wireless/rsi/rsi_hal.h
5803     index 46e36df9e8e3c..a2fbec1cec4c3 100644
5804     --- a/drivers/net/wireless/rsi/rsi_hal.h
5805     +++ b/drivers/net/wireless/rsi/rsi_hal.h
5806     @@ -28,6 +28,17 @@
5807     #define DEV_OPMODE_AP_BT 6
5808     #define DEV_OPMODE_AP_BT_DUAL 14
5809    
5810     +#define DEV_OPMODE_PARAM_DESC \
5811     + __stringify(DEV_OPMODE_WIFI_ALONE) "[Wi-Fi alone], " \
5812     + __stringify(DEV_OPMODE_BT_ALONE) "[BT classic alone], " \
5813     + __stringify(DEV_OPMODE_BT_LE_ALONE) "[BT LE alone], " \
5814     + __stringify(DEV_OPMODE_BT_DUAL) "[BT classic + BT LE alone], " \
5815     + __stringify(DEV_OPMODE_STA_BT) "[Wi-Fi STA + BT classic], " \
5816     + __stringify(DEV_OPMODE_STA_BT_LE) "[Wi-Fi STA + BT LE], " \
5817     + __stringify(DEV_OPMODE_STA_BT_DUAL) "[Wi-Fi STA + BT classic + BT LE], " \
5818     + __stringify(DEV_OPMODE_AP_BT) "[Wi-Fi AP + BT classic], " \
5819     + __stringify(DEV_OPMODE_AP_BT_DUAL) "[Wi-Fi AP + BT classic + BT LE]"
5820     +
5821     #define FLASH_WRITE_CHUNK_SIZE (4 * 1024)
5822     #define FLASH_SECTOR_SIZE (4 * 1024)
5823    
5824     diff --git a/drivers/net/wireless/rsi/rsi_main.h b/drivers/net/wireless/rsi/rsi_main.h
5825     index b3e25bc28682c..de595025c0197 100644
5826     --- a/drivers/net/wireless/rsi/rsi_main.h
5827     +++ b/drivers/net/wireless/rsi/rsi_main.h
5828     @@ -61,6 +61,7 @@ enum RSI_FSM_STATES {
5829     extern u32 rsi_zone_enabled;
5830     extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
5831    
5832     +#define RSI_MAX_BANDS 2
5833     #define RSI_MAX_VIFS 3
5834     #define NUM_EDCA_QUEUES 4
5835     #define IEEE80211_ADDR_LEN 6
5836     @@ -139,6 +140,7 @@ struct skb_info {
5837     u8 internal_hdr_size;
5838     struct ieee80211_vif *vif;
5839     u8 vap_id;
5840     + bool have_key;
5841     };
5842    
5843     enum edca_queue {
5844     @@ -229,6 +231,12 @@ struct rsi_9116_features {
5845     u32 ps_options;
5846     };
5847    
5848     +struct rsi_rate_config {
5849     + u32 configured_mask; /* configured by mac80211 bits 0-11=legacy 12+ mcs */
5850     + u16 fixed_hw_rate;
5851     + bool fixed_enabled;
5852     +};
5853     +
5854     struct rsi_common {
5855     struct rsi_hw *priv;
5856     struct vif_priv vif_info[RSI_MAX_VIFS];
5857     @@ -254,8 +262,8 @@ struct rsi_common {
5858     u8 channel_width;
5859    
5860     u16 rts_threshold;
5861     - u16 bitrate_mask[2];
5862     - u32 fixedrate_mask[2];
5863     + u32 bitrate_mask[RSI_MAX_BANDS];
5864     + struct rsi_rate_config rate_config[RSI_MAX_BANDS];
5865    
5866     u8 rf_reset;
5867     struct transmit_q_stats tx_stats;
5868     @@ -276,7 +284,6 @@ struct rsi_common {
5869     u8 mac_id;
5870     u8 radio_id;
5871     u16 rate_pwr[20];
5872     - u16 min_rate;
5873    
5874     /* WMM algo related */
5875     u8 selected_qnum;
5876     @@ -320,6 +327,7 @@ struct rsi_common {
5877     struct ieee80211_vif *roc_vif;
5878    
5879     bool eapol4_confirm;
5880     + bool bt_defer_attach;
5881     void *bt_adapter;
5882    
5883     struct cfg80211_scan_request *hwscan;
5884     @@ -401,5 +409,6 @@ struct rsi_host_intf_ops {
5885    
5886     enum rsi_host_intf rsi_get_host_intf(void *priv);
5887     void rsi_set_bt_context(void *priv, void *bt_context);
5888     +void rsi_attach_bt(struct rsi_common *common);
5889    
5890     #endif
5891     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
5892     index 88280057e0321..7d389c2cc9026 100644
5893     --- a/drivers/net/xen-netfront.c
5894     +++ b/drivers/net/xen-netfront.c
5895     @@ -1439,6 +1439,10 @@ static int netfront_resume(struct xenbus_device *dev)
5896    
5897     dev_dbg(&dev->dev, "%s\n", dev->nodename);
5898    
5899     + netif_tx_lock_bh(info->netdev);
5900     + netif_device_detach(info->netdev);
5901     + netif_tx_unlock_bh(info->netdev);
5902     +
5903     xennet_disconnect_backend(info);
5904     return 0;
5905     }
5906     @@ -1987,6 +1991,10 @@ static int xennet_connect(struct net_device *dev)
5907     * domain a kick because we've probably just requeued some
5908     * packets.
5909     */
5910     + netif_tx_lock_bh(np->netdev);
5911     + netif_device_attach(np->netdev);
5912     + netif_tx_unlock_bh(np->netdev);
5913     +
5914     netif_carrier_on(np->netdev);
5915     for (j = 0; j < num_queues; ++j) {
5916     queue = &np->queues[j];
5917     diff --git a/drivers/nfc/pn533/pn533.c b/drivers/nfc/pn533/pn533.c
5918     index 3ea38ce86cc9f..807b7b37d9dce 100644
5919     --- a/drivers/nfc/pn533/pn533.c
5920     +++ b/drivers/nfc/pn533/pn533.c
5921     @@ -2072,7 +2072,7 @@ static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb)
5922     frag = pn533_alloc_skb(dev, frag_size);
5923     if (!frag) {
5924     skb_queue_purge(&dev->fragment_skb);
5925     - break;
5926     + return -ENOMEM;
5927     }
5928    
5929     if (!dev->tgt_mode) {
5930     @@ -2143,7 +2143,7 @@ static int pn533_transceive(struct nfc_dev *nfc_dev,
5931     /* jumbo frame ? */
5932     if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
5933     rc = pn533_fill_fragment_skbs(dev, skb);
5934     - if (rc <= 0)
5935     + if (rc < 0)
5936     goto error;
5937    
5938     skb = skb_dequeue(&dev->fragment_skb);
5939     @@ -2215,7 +2215,7 @@ static int pn533_tm_send(struct nfc_dev *nfc_dev, struct sk_buff *skb)
5940     /* let's split in multiple chunks if size's too big */
5941     if (skb->len > PN533_CMD_DATAEXCH_DATA_MAXLEN) {
5942     rc = pn533_fill_fragment_skbs(dev, skb);
5943     - if (rc <= 0)
5944     + if (rc < 0)
5945     goto error;
5946    
5947     /* get the first skb */
5948     diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
5949     index 016a67fd41989..9f01af2f03e68 100644
5950     --- a/drivers/nvme/host/multipath.c
5951     +++ b/drivers/nvme/host/multipath.c
5952     @@ -156,13 +156,12 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl)
5953     {
5954     struct nvme_ns *ns;
5955    
5956     - mutex_lock(&ctrl->scan_lock);
5957     down_read(&ctrl->namespaces_rwsem);
5958     - list_for_each_entry(ns, &ctrl->namespaces, list)
5959     - if (nvme_mpath_clear_current_path(ns))
5960     - kblockd_schedule_work(&ns->head->requeue_work);
5961     + list_for_each_entry(ns, &ctrl->namespaces, list) {
5962     + nvme_mpath_clear_current_path(ns);
5963     + kblockd_schedule_work(&ns->head->requeue_work);
5964     + }
5965     up_read(&ctrl->namespaces_rwsem);
5966     - mutex_unlock(&ctrl->scan_lock);
5967     }
5968    
5969     static bool nvme_path_is_disabled(struct nvme_ns *ns)
5970     diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
5971     index dcc3d2393605e..08a23bb4b8b57 100644
5972     --- a/drivers/nvme/host/rdma.c
5973     +++ b/drivers/nvme/host/rdma.c
5974     @@ -1019,11 +1019,13 @@ static int nvme_rdma_setup_ctrl(struct nvme_rdma_ctrl *ctrl, bool new)
5975     return ret;
5976    
5977     if (ctrl->ctrl.icdoff) {
5978     + ret = -EOPNOTSUPP;
5979     dev_err(ctrl->ctrl.device, "icdoff is not supported!\n");
5980     goto destroy_admin;
5981     }
5982    
5983     if (!(ctrl->ctrl.sgls & (1 << 2))) {
5984     + ret = -EOPNOTSUPP;
5985     dev_err(ctrl->ctrl.device,
5986     "Mandatory keyed sgls are not supported!\n");
5987     goto destroy_admin;
5988     diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
5989     index 98613a45bd3b4..baf8a3e4ed12a 100644
5990     --- a/drivers/nvme/target/configfs.c
5991     +++ b/drivers/nvme/target/configfs.c
5992     @@ -1148,6 +1148,8 @@ static void nvmet_port_release(struct config_item *item)
5993     {
5994     struct nvmet_port *port = to_nvmet_port(item);
5995    
5996     + /* Let inflight controllers teardown complete */
5997     + flush_scheduled_work();
5998     list_del(&port->global_entry);
5999    
6000     kfree(port->ana_state);
6001     diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
6002     index 2f4e512bd449f..fac1985870765 100644
6003     --- a/drivers/nvme/target/tcp.c
6004     +++ b/drivers/nvme/target/tcp.c
6005     @@ -1020,7 +1020,7 @@ recv:
6006     }
6007    
6008     if (queue->hdr_digest &&
6009     - nvmet_tcp_verify_hdgst(queue, &queue->pdu, queue->offset)) {
6010     + nvmet_tcp_verify_hdgst(queue, &queue->pdu, hdr->hlen)) {
6011     nvmet_tcp_fatal_error(queue); /* fatal */
6012     return -EPROTO;
6013     }
6014     @@ -1343,6 +1343,7 @@ static void nvmet_tcp_uninit_data_in_cmds(struct nvmet_tcp_queue *queue)
6015    
6016     static void nvmet_tcp_release_queue_work(struct work_struct *w)
6017     {
6018     + struct page *page;
6019     struct nvmet_tcp_queue *queue =
6020     container_of(w, struct nvmet_tcp_queue, release_work);
6021    
6022     @@ -1362,6 +1363,8 @@ static void nvmet_tcp_release_queue_work(struct work_struct *w)
6023     nvmet_tcp_free_crypto(queue);
6024     ida_simple_remove(&nvmet_tcp_queue_ida, queue->idx);
6025    
6026     + page = virt_to_head_page(queue->pf_cache.va);
6027     + __page_frag_cache_drain(page, queue->pf_cache.pagecnt_bias);
6028     kfree(queue);
6029     }
6030    
6031     @@ -1664,6 +1667,17 @@ err_port:
6032     return ret;
6033     }
6034    
6035     +static void nvmet_tcp_destroy_port_queues(struct nvmet_tcp_port *port)
6036     +{
6037     + struct nvmet_tcp_queue *queue;
6038     +
6039     + mutex_lock(&nvmet_tcp_queue_mutex);
6040     + list_for_each_entry(queue, &nvmet_tcp_queue_list, queue_list)
6041     + if (queue->port == port)
6042     + kernel_sock_shutdown(queue->sock, SHUT_RDWR);
6043     + mutex_unlock(&nvmet_tcp_queue_mutex);
6044     +}
6045     +
6046     static void nvmet_tcp_remove_port(struct nvmet_port *nport)
6047     {
6048     struct nvmet_tcp_port *port = nport->priv;
6049     @@ -1673,6 +1687,11 @@ static void nvmet_tcp_remove_port(struct nvmet_port *nport)
6050     port->sock->sk->sk_user_data = NULL;
6051     write_unlock_bh(&port->sock->sk->sk_callback_lock);
6052     cancel_work_sync(&port->accept_work);
6053     + /*
6054     + * Destroy the remaining queues, which are not belong to any
6055     + * controller yet.
6056     + */
6057     + nvmet_tcp_destroy_port_queues(port);
6058    
6059     sock_release(port->sock);
6060     kfree(port);
6061     diff --git a/drivers/opp/of.c b/drivers/opp/of.c
6062     index 30cc407c8f93f..ba30694508153 100644
6063     --- a/drivers/opp/of.c
6064     +++ b/drivers/opp/of.c
6065     @@ -639,7 +639,7 @@ free_required_opps:
6066     free_opp:
6067     _opp_free(new_opp);
6068    
6069     - return ERR_PTR(ret);
6070     + return ret ? ERR_PTR(ret) : NULL;
6071     }
6072    
6073     /* Initializes OPP tables based on new bindings */
6074     diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
6075     index 18753fd218a31..45794ba643d40 100644
6076     --- a/drivers/pci/controller/pci-aardvark.c
6077     +++ b/drivers/pci/controller/pci-aardvark.c
6078     @@ -108,26 +108,69 @@
6079     #define PCIE_ISR0_MSI_INT_PENDING BIT(24)
6080     #define PCIE_ISR0_INTX_ASSERT(val) BIT(16 + (val))
6081     #define PCIE_ISR0_INTX_DEASSERT(val) BIT(20 + (val))
6082     -#define PCIE_ISR0_ALL_MASK GENMASK(26, 0)
6083     +#define PCIE_ISR0_ALL_MASK GENMASK(31, 0)
6084     #define PCIE_ISR1_REG (CONTROL_BASE_ADDR + 0x48)
6085     #define PCIE_ISR1_MASK_REG (CONTROL_BASE_ADDR + 0x4C)
6086     #define PCIE_ISR1_POWER_STATE_CHANGE BIT(4)
6087     #define PCIE_ISR1_FLUSH BIT(5)
6088     #define PCIE_ISR1_INTX_ASSERT(val) BIT(8 + (val))
6089     -#define PCIE_ISR1_ALL_MASK GENMASK(11, 4)
6090     +#define PCIE_ISR1_ALL_MASK GENMASK(31, 0)
6091     #define PCIE_MSI_ADDR_LOW_REG (CONTROL_BASE_ADDR + 0x50)
6092     #define PCIE_MSI_ADDR_HIGH_REG (CONTROL_BASE_ADDR + 0x54)
6093     #define PCIE_MSI_STATUS_REG (CONTROL_BASE_ADDR + 0x58)
6094     #define PCIE_MSI_MASK_REG (CONTROL_BASE_ADDR + 0x5C)
6095     #define PCIE_MSI_PAYLOAD_REG (CONTROL_BASE_ADDR + 0x9C)
6096     +#define PCIE_MSI_DATA_MASK GENMASK(15, 0)
6097    
6098     /* LMI registers base address and register offsets */
6099     #define LMI_BASE_ADDR 0x6000
6100     #define CFG_REG (LMI_BASE_ADDR + 0x0)
6101     #define LTSSM_SHIFT 24
6102     #define LTSSM_MASK 0x3f
6103     -#define LTSSM_L0 0x10
6104     #define RC_BAR_CONFIG 0x300
6105     +
6106     +/* LTSSM values in CFG_REG */
6107     +enum {
6108     + LTSSM_DETECT_QUIET = 0x0,
6109     + LTSSM_DETECT_ACTIVE = 0x1,
6110     + LTSSM_POLLING_ACTIVE = 0x2,
6111     + LTSSM_POLLING_COMPLIANCE = 0x3,
6112     + LTSSM_POLLING_CONFIGURATION = 0x4,
6113     + LTSSM_CONFIG_LINKWIDTH_START = 0x5,
6114     + LTSSM_CONFIG_LINKWIDTH_ACCEPT = 0x6,
6115     + LTSSM_CONFIG_LANENUM_ACCEPT = 0x7,
6116     + LTSSM_CONFIG_LANENUM_WAIT = 0x8,
6117     + LTSSM_CONFIG_COMPLETE = 0x9,
6118     + LTSSM_CONFIG_IDLE = 0xa,
6119     + LTSSM_RECOVERY_RCVR_LOCK = 0xb,
6120     + LTSSM_RECOVERY_SPEED = 0xc,
6121     + LTSSM_RECOVERY_RCVR_CFG = 0xd,
6122     + LTSSM_RECOVERY_IDLE = 0xe,
6123     + LTSSM_L0 = 0x10,
6124     + LTSSM_RX_L0S_ENTRY = 0x11,
6125     + LTSSM_RX_L0S_IDLE = 0x12,
6126     + LTSSM_RX_L0S_FTS = 0x13,
6127     + LTSSM_TX_L0S_ENTRY = 0x14,
6128     + LTSSM_TX_L0S_IDLE = 0x15,
6129     + LTSSM_TX_L0S_FTS = 0x16,
6130     + LTSSM_L1_ENTRY = 0x17,
6131     + LTSSM_L1_IDLE = 0x18,
6132     + LTSSM_L2_IDLE = 0x19,
6133     + LTSSM_L2_TRANSMIT_WAKE = 0x1a,
6134     + LTSSM_DISABLED = 0x20,
6135     + LTSSM_LOOPBACK_ENTRY_MASTER = 0x21,
6136     + LTSSM_LOOPBACK_ACTIVE_MASTER = 0x22,
6137     + LTSSM_LOOPBACK_EXIT_MASTER = 0x23,
6138     + LTSSM_LOOPBACK_ENTRY_SLAVE = 0x24,
6139     + LTSSM_LOOPBACK_ACTIVE_SLAVE = 0x25,
6140     + LTSSM_LOOPBACK_EXIT_SLAVE = 0x26,
6141     + LTSSM_HOT_RESET = 0x27,
6142     + LTSSM_RECOVERY_EQUALIZATION_PHASE0 = 0x28,
6143     + LTSSM_RECOVERY_EQUALIZATION_PHASE1 = 0x29,
6144     + LTSSM_RECOVERY_EQUALIZATION_PHASE2 = 0x2a,
6145     + LTSSM_RECOVERY_EQUALIZATION_PHASE3 = 0x2b,
6146     +};
6147     +
6148     #define VENDOR_ID_REG (LMI_BASE_ADDR + 0x44)
6149    
6150     /* PCIe core controller registers */
6151     @@ -160,7 +203,7 @@
6152     #define PCIE_IRQ_MSI_INT2_DET BIT(21)
6153     #define PCIE_IRQ_RC_DBELL_DET BIT(22)
6154     #define PCIE_IRQ_EP_STATUS BIT(23)
6155     -#define PCIE_IRQ_ALL_MASK 0xfff0fb
6156     +#define PCIE_IRQ_ALL_MASK GENMASK(31, 0)
6157     #define PCIE_IRQ_ENABLE_INTS_MASK PCIE_IRQ_CORE_INT
6158    
6159     /* Transaction types */
6160     @@ -219,13 +262,49 @@ static inline u32 advk_readl(struct advk_pcie *pcie, u64 reg)
6161     return readl(pcie->base + reg);
6162     }
6163    
6164     -static int advk_pcie_link_up(struct advk_pcie *pcie)
6165     +static u8 advk_pcie_ltssm_state(struct advk_pcie *pcie)
6166     {
6167     - u32 val, ltssm_state;
6168     + u32 val;
6169     + u8 ltssm_state;
6170    
6171     val = advk_readl(pcie, CFG_REG);
6172     ltssm_state = (val >> LTSSM_SHIFT) & LTSSM_MASK;
6173     - return ltssm_state >= LTSSM_L0;
6174     + return ltssm_state;
6175     +}
6176     +
6177     +static inline bool advk_pcie_link_up(struct advk_pcie *pcie)
6178     +{
6179     + /* check if LTSSM is in normal operation - some L* state */
6180     + u8 ltssm_state = advk_pcie_ltssm_state(pcie);
6181     + return ltssm_state >= LTSSM_L0 && ltssm_state < LTSSM_DISABLED;
6182     +}
6183     +
6184     +static inline bool advk_pcie_link_active(struct advk_pcie *pcie)
6185     +{
6186     + /*
6187     + * According to PCIe Base specification 3.0, Table 4-14: Link
6188     + * Status Mapped to the LTSSM, and 4.2.6.3.6 Configuration.Idle
6189     + * is Link Up mapped to LTSSM Configuration.Idle, Recovery, L0,
6190     + * L0s, L1 and L2 states. And according to 3.2.1. Data Link
6191     + * Control and Management State Machine Rules is DL Up status
6192     + * reported in DL Active state.
6193     + */
6194     + u8 ltssm_state = advk_pcie_ltssm_state(pcie);
6195     + return ltssm_state >= LTSSM_CONFIG_IDLE && ltssm_state < LTSSM_DISABLED;
6196     +}
6197     +
6198     +static inline bool advk_pcie_link_training(struct advk_pcie *pcie)
6199     +{
6200     + /*
6201     + * According to PCIe Base specification 3.0, Table 4-14: Link
6202     + * Status Mapped to the LTSSM is Link Training mapped to LTSSM
6203     + * Configuration and Recovery states.
6204     + */
6205     + u8 ltssm_state = advk_pcie_ltssm_state(pcie);
6206     + return ((ltssm_state >= LTSSM_CONFIG_LINKWIDTH_START &&
6207     + ltssm_state < LTSSM_L0) ||
6208     + (ltssm_state >= LTSSM_RECOVERY_EQUALIZATION_PHASE0 &&
6209     + ltssm_state <= LTSSM_RECOVERY_EQUALIZATION_PHASE3));
6210     }
6211    
6212     static int advk_pcie_wait_for_link(struct advk_pcie *pcie)
6213     @@ -252,7 +331,7 @@ static void advk_pcie_wait_for_retrain(struct advk_pcie *pcie)
6214     size_t retries;
6215    
6216     for (retries = 0; retries < RETRAIN_WAIT_MAX_RETRIES; ++retries) {
6217     - if (!advk_pcie_link_up(pcie))
6218     + if (advk_pcie_link_training(pcie))
6219     break;
6220     udelay(RETRAIN_WAIT_USLEEP_US);
6221     }
6222     @@ -460,7 +539,7 @@ static int advk_pcie_check_pio_status(struct advk_pcie *pcie, bool allow_crs, u3
6223     else
6224     str_posted = "Posted";
6225    
6226     - dev_err(dev, "%s PIO Response Status: %s, %#x @ %#x\n",
6227     + dev_dbg(dev, "%s PIO Response Status: %s, %#x @ %#x\n",
6228     str_posted, strcomp_status, reg, advk_readl(pcie, PIO_ADDR_LS));
6229    
6230     return -EFAULT;
6231     @@ -501,6 +580,7 @@ advk_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
6232     case PCI_EXP_RTCTL: {
6233     u32 val = advk_readl(pcie, PCIE_ISR0_MASK_REG);
6234     *value = (val & PCIE_MSG_PM_PME_MASK) ? 0 : PCI_EXP_RTCTL_PMEIE;
6235     + *value |= le16_to_cpu(bridge->pcie_conf.rootctl) & PCI_EXP_RTCTL_CRSSVE;
6236     *value |= PCI_EXP_RTCAP_CRSVIS << 16;
6237     return PCI_BRIDGE_EMUL_HANDLED;
6238     }
6239     @@ -512,12 +592,26 @@ advk_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
6240     return PCI_BRIDGE_EMUL_HANDLED;
6241     }
6242    
6243     + case PCI_EXP_LNKCAP: {
6244     + u32 val = advk_readl(pcie, PCIE_CORE_PCIEXP_CAP + reg);
6245     + /*
6246     + * PCI_EXP_LNKCAP_DLLLARC bit is hardwired in aardvark HW to 0.
6247     + * But support for PCI_EXP_LNKSTA_DLLLA is emulated via ltssm
6248     + * state so explicitly enable PCI_EXP_LNKCAP_DLLLARC flag.
6249     + */
6250     + val |= PCI_EXP_LNKCAP_DLLLARC;
6251     + *value = val;
6252     + return PCI_BRIDGE_EMUL_HANDLED;
6253     + }
6254     +
6255     case PCI_EXP_LNKCTL: {
6256     /* u32 contains both PCI_EXP_LNKCTL and PCI_EXP_LNKSTA */
6257     u32 val = advk_readl(pcie, PCIE_CORE_PCIEXP_CAP + reg) &
6258     ~(PCI_EXP_LNKSTA_LT << 16);
6259     - if (!advk_pcie_link_up(pcie))
6260     + if (advk_pcie_link_training(pcie))
6261     val |= (PCI_EXP_LNKSTA_LT << 16);
6262     + if (advk_pcie_link_active(pcie))
6263     + val |= (PCI_EXP_LNKSTA_DLLLA << 16);
6264     *value = val;
6265     return PCI_BRIDGE_EMUL_HANDLED;
6266     }
6267     @@ -525,7 +619,6 @@ advk_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
6268     case PCI_CAP_LIST_ID:
6269     case PCI_EXP_DEVCAP:
6270     case PCI_EXP_DEVCTL:
6271     - case PCI_EXP_LNKCAP:
6272     *value = advk_readl(pcie, PCIE_CORE_PCIEXP_CAP + reg);
6273     return PCI_BRIDGE_EMUL_HANDLED;
6274     default:
6275     @@ -851,7 +944,7 @@ static int advk_msi_irq_domain_alloc(struct irq_domain *domain,
6276     domain->host_data, handle_simple_irq,
6277     NULL, NULL);
6278    
6279     - return hwirq;
6280     + return 0;
6281     }
6282    
6283     static void advk_msi_irq_domain_free(struct irq_domain *domain,
6284     @@ -1032,8 +1125,12 @@ static void advk_pcie_handle_msi(struct advk_pcie *pcie)
6285     if (!(BIT(msi_idx) & msi_status))
6286     continue;
6287    
6288     + /*
6289     + * msi_idx contains bits [4:0] of the msi_data and msi_data
6290     + * contains 16bit MSI interrupt number
6291     + */
6292     advk_writel(pcie, BIT(msi_idx), PCIE_MSI_STATUS_REG);
6293     - msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & 0xFF;
6294     + msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & PCIE_MSI_DATA_MASK;
6295     generic_handle_irq(msi_data);
6296     }
6297    
6298     @@ -1055,12 +1152,6 @@ static void advk_pcie_handle_int(struct advk_pcie *pcie)
6299     isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
6300     isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK);
6301    
6302     - if (!isr0_status && !isr1_status) {
6303     - advk_writel(pcie, isr0_val, PCIE_ISR0_REG);
6304     - advk_writel(pcie, isr1_val, PCIE_ISR1_REG);
6305     - return;
6306     - }
6307     -
6308     /* Process MSI interrupts */
6309     if (isr0_status & PCIE_ISR0_MSI_INT_PENDING)
6310     advk_pcie_handle_msi(pcie);
6311     diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c
6312     index 06c800595e036..b3d63e319bb39 100644
6313     --- a/drivers/pci/pci-bridge-emul.c
6314     +++ b/drivers/pci/pci-bridge-emul.c
6315     @@ -432,8 +432,21 @@ int pci_bridge_emul_conf_write(struct pci_bridge_emul *bridge, int where,
6316     /* Clear the W1C bits */
6317     new &= ~((value << shift) & (behavior[reg / 4].w1c & mask));
6318    
6319     + /* Save the new value with the cleared W1C bits into the cfgspace */
6320     cfgspace[reg / 4] = cpu_to_le32(new);
6321    
6322     + /*
6323     + * Clear the W1C bits not specified by the write mask, so that the
6324     + * write_op() does not clear them.
6325     + */
6326     + new &= ~(behavior[reg / 4].w1c & ~mask);
6327     +
6328     + /*
6329     + * Set the W1C bits specified by the write mask, so that write_op()
6330     + * knows about that they are to be cleared.
6331     + */
6332     + new |= (value << shift) & (behavior[reg / 4].w1c & mask);
6333     +
6334     if (write_op)
6335     write_op(bridge, reg, old, new, mask);
6336    
6337     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
6338     index 686298c0f6cda..fb7c5518447da 100644
6339     --- a/drivers/pci/quirks.c
6340     +++ b/drivers/pci/quirks.c
6341     @@ -3584,6 +3584,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0032, quirk_no_bus_reset);
6342     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset);
6343     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0033, quirk_no_bus_reset);
6344     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x0034, quirk_no_bus_reset);
6345     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003e, quirk_no_bus_reset);
6346    
6347     /*
6348     * Root port on some Cavium CN8xxx chips do not successfully complete a bus
6349     diff --git a/drivers/phy/qualcomm/phy-qcom-qusb2.c b/drivers/phy/qualcomm/phy-qcom-qusb2.c
6350     index bf94a52d30871..946e9b05f0ae6 100644
6351     --- a/drivers/phy/qualcomm/phy-qcom-qusb2.c
6352     +++ b/drivers/phy/qualcomm/phy-qcom-qusb2.c
6353     @@ -432,7 +432,7 @@ static void qusb2_phy_set_tune2_param(struct qusb2_phy *qphy)
6354     {
6355     struct device *dev = &qphy->phy->dev;
6356     const struct qusb2_phy_cfg *cfg = qphy->cfg;
6357     - u8 *val;
6358     + u8 *val, hstx_trim;
6359    
6360     /* efuse register is optional */
6361     if (!qphy->cell)
6362     @@ -446,7 +446,13 @@ static void qusb2_phy_set_tune2_param(struct qusb2_phy *qphy)
6363     * set while configuring the phy.
6364     */
6365     val = nvmem_cell_read(qphy->cell, NULL);
6366     - if (IS_ERR(val) || !val[0]) {
6367     + if (IS_ERR(val)) {
6368     + dev_dbg(dev, "failed to read a valid hs-tx trim value\n");
6369     + return;
6370     + }
6371     + hstx_trim = val[0];
6372     + kfree(val);
6373     + if (!hstx_trim) {
6374     dev_dbg(dev, "failed to read a valid hs-tx trim value\n");
6375     return;
6376     }
6377     @@ -454,12 +460,10 @@ static void qusb2_phy_set_tune2_param(struct qusb2_phy *qphy)
6378     /* Fused TUNE1/2 value is the higher nibble only */
6379     if (cfg->update_tune1_with_efuse)
6380     qusb2_write_mask(qphy->base, cfg->regs[QUSB2PHY_PORT_TUNE1],
6381     - val[0] << HSTX_TRIM_SHIFT,
6382     - HSTX_TRIM_MASK);
6383     + hstx_trim << HSTX_TRIM_SHIFT, HSTX_TRIM_MASK);
6384     else
6385     qusb2_write_mask(qphy->base, cfg->regs[QUSB2PHY_PORT_TUNE2],
6386     - val[0] << HSTX_TRIM_SHIFT,
6387     - HSTX_TRIM_MASK);
6388     + hstx_trim << HSTX_TRIM_SHIFT, HSTX_TRIM_MASK);
6389     }
6390    
6391     static int qusb2_phy_set_mode(struct phy *phy,
6392     diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
6393     index 6381745e3bb18..9ebeef2ac7b18 100644
6394     --- a/drivers/pinctrl/core.c
6395     +++ b/drivers/pinctrl/core.c
6396     @@ -2055,6 +2055,8 @@ int pinctrl_enable(struct pinctrl_dev *pctldev)
6397     if (error) {
6398     dev_err(pctldev->dev, "could not claim hogs: %i\n",
6399     error);
6400     + pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
6401     + pctldev->desc->npins);
6402     mutex_destroy(&pctldev->mutex);
6403     kfree(pctldev);
6404    
6405     diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
6406     index f027609fdab6d..3028d9f1ac59c 100644
6407     --- a/drivers/platform/x86/thinkpad_acpi.c
6408     +++ b/drivers/platform/x86/thinkpad_acpi.c
6409     @@ -9086,7 +9086,7 @@ static int fan_write_cmd_level(const char *cmd, int *rc)
6410    
6411     if (strlencmp(cmd, "level auto") == 0)
6412     level = TP_EC_FAN_AUTO;
6413     - else if ((strlencmp(cmd, "level disengaged") == 0) |
6414     + else if ((strlencmp(cmd, "level disengaged") == 0) ||
6415     (strlencmp(cmd, "level full-speed") == 0))
6416     level = TP_EC_FAN_FULLSPEED;
6417     else if (sscanf(cmd, "level %d", &level) != 1)
6418     diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
6419     index 59e9aa0f96436..cb029126a68c6 100644
6420     --- a/drivers/platform/x86/wmi.c
6421     +++ b/drivers/platform/x86/wmi.c
6422     @@ -353,7 +353,14 @@ static acpi_status __query_block(struct wmi_block *wblock, u8 instance,
6423     * the WQxx method failed - we should disable collection anyway.
6424     */
6425     if ((block->flags & ACPI_WMI_EXPENSIVE) && ACPI_SUCCESS(wc_status)) {
6426     - status = acpi_execute_simple_method(handle, wc_method, 0);
6427     + /*
6428     + * Ignore whether this WCxx call succeeds or not since
6429     + * the previously executed WQxx method call might have
6430     + * succeeded, and returning the failing status code
6431     + * of this call would throw away the result of the WQxx
6432     + * call, potentially leaking memory.
6433     + */
6434     + acpi_execute_simple_method(handle, wc_method, 0);
6435     }
6436    
6437     return status;
6438     diff --git a/drivers/power/supply/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c
6439     index 2677c38a8a424..34229c1f43e31 100644
6440     --- a/drivers/power/supply/bq27xxx_battery_i2c.c
6441     +++ b/drivers/power/supply/bq27xxx_battery_i2c.c
6442     @@ -195,7 +195,8 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client,
6443     dev_err(&client->dev,
6444     "Unable to register IRQ %d error %d\n",
6445     client->irq, ret);
6446     - return ret;
6447     + bq27xxx_battery_teardown(di);
6448     + goto err_failed;
6449     }
6450     }
6451    
6452     diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
6453     index f8f8207a1895e..170639a1e734a 100644
6454     --- a/drivers/power/supply/max17042_battery.c
6455     +++ b/drivers/power/supply/max17042_battery.c
6456     @@ -312,7 +312,10 @@ static int max17042_get_property(struct power_supply *psy,
6457     val->intval = data * 625 / 8;
6458     break;
6459     case POWER_SUPPLY_PROP_CAPACITY:
6460     - ret = regmap_read(map, MAX17042_RepSOC, &data);
6461     + if (chip->pdata->enable_current_sense)
6462     + ret = regmap_read(map, MAX17042_RepSOC, &data);
6463     + else
6464     + ret = regmap_read(map, MAX17042_VFSOC, &data);
6465     if (ret < 0)
6466     return ret;
6467    
6468     @@ -834,7 +837,8 @@ static void max17042_set_soc_threshold(struct max17042_chip *chip, u16 off)
6469     regmap_read(map, MAX17042_RepSOC, &soc);
6470     soc >>= 8;
6471     soc_tr = (soc + off) << 8;
6472     - soc_tr |= (soc - off);
6473     + if (off < soc)
6474     + soc_tr |= soc - off;
6475     regmap_write(map, MAX17042_SALRT_Th, soc_tr);
6476     }
6477    
6478     diff --git a/drivers/power/supply/rt5033_battery.c b/drivers/power/supply/rt5033_battery.c
6479     index 6609f8cb8ca01..ef53891b88bbc 100644
6480     --- a/drivers/power/supply/rt5033_battery.c
6481     +++ b/drivers/power/supply/rt5033_battery.c
6482     @@ -60,7 +60,7 @@ static int rt5033_battery_get_watt_prop(struct i2c_client *client,
6483     regmap_read(battery->regmap, regh, &msb);
6484     regmap_read(battery->regmap, regl, &lsb);
6485    
6486     - ret = ((msb << 4) + (lsb >> 4)) * 1250 / 1000;
6487     + ret = ((msb << 4) + (lsb >> 4)) * 1250;
6488    
6489     return ret;
6490     }
6491     diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c
6492     index 5276f8442f3c6..1e9f03a2ea1cc 100644
6493     --- a/drivers/regulator/s5m8767.c
6494     +++ b/drivers/regulator/s5m8767.c
6495     @@ -851,18 +851,15 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
6496     /* DS4 GPIO */
6497     gpio_direction_output(pdata->buck_ds[2], 0x0);
6498    
6499     - if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs ||
6500     - pdata->buck4_gpiodvs) {
6501     - regmap_update_bits(s5m8767->iodev->regmap_pmic,
6502     - S5M8767_REG_BUCK2CTRL, 1 << 1,
6503     - (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1));
6504     - regmap_update_bits(s5m8767->iodev->regmap_pmic,
6505     - S5M8767_REG_BUCK3CTRL, 1 << 1,
6506     - (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1));
6507     - regmap_update_bits(s5m8767->iodev->regmap_pmic,
6508     - S5M8767_REG_BUCK4CTRL, 1 << 1,
6509     - (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1));
6510     - }
6511     + regmap_update_bits(s5m8767->iodev->regmap_pmic,
6512     + S5M8767_REG_BUCK2CTRL, 1 << 1,
6513     + (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1));
6514     + regmap_update_bits(s5m8767->iodev->regmap_pmic,
6515     + S5M8767_REG_BUCK3CTRL, 1 << 1,
6516     + (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1));
6517     + regmap_update_bits(s5m8767->iodev->regmap_pmic,
6518     + S5M8767_REG_BUCK4CTRL, 1 << 1,
6519     + (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1));
6520    
6521     /* Initialize GPIO DVS registers */
6522     for (i = 0; i < 8; i++) {
6523     diff --git a/drivers/reset/reset-socfpga.c b/drivers/reset/reset-socfpga.c
6524     index 96953992c2bb5..1c5236a69dc49 100644
6525     --- a/drivers/reset/reset-socfpga.c
6526     +++ b/drivers/reset/reset-socfpga.c
6527     @@ -86,3 +86,29 @@ void __init socfpga_reset_init(void)
6528     for_each_matching_node(np, socfpga_early_reset_dt_ids)
6529     a10_reset_init(np);
6530     }
6531     +
6532     +/*
6533     + * The early driver is problematic, because it doesn't register
6534     + * itself as a driver. This causes certain device links to prevent
6535     + * consumer devices from probing. The hacky solution is to register
6536     + * an empty driver, whose only job is to attach itself to the reset
6537     + * manager and call probe.
6538     + */
6539     +static const struct of_device_id socfpga_reset_dt_ids[] = {
6540     + { .compatible = "altr,rst-mgr", },
6541     + { /* sentinel */ },
6542     +};
6543     +
6544     +static int reset_simple_probe(struct platform_device *pdev)
6545     +{
6546     + return 0;
6547     +}
6548     +
6549     +static struct platform_driver reset_socfpga_driver = {
6550     + .probe = reset_simple_probe,
6551     + .driver = {
6552     + .name = "socfpga-reset",
6553     + .of_match_table = socfpga_reset_dt_ids,
6554     + },
6555     +};
6556     +builtin_platform_driver(reset_socfpga_driver);
6557     diff --git a/drivers/s390/char/tape_std.c b/drivers/s390/char/tape_std.c
6558     index 1f5fab617b679..f7e75d9fedf61 100644
6559     --- a/drivers/s390/char/tape_std.c
6560     +++ b/drivers/s390/char/tape_std.c
6561     @@ -53,7 +53,6 @@ int
6562     tape_std_assign(struct tape_device *device)
6563     {
6564     int rc;
6565     - struct timer_list timeout;
6566     struct tape_request *request;
6567    
6568     request = tape_alloc_request(2, 11);
6569     @@ -70,7 +69,7 @@ tape_std_assign(struct tape_device *device)
6570     * So we set up a timeout for this call.
6571     */
6572     timer_setup(&request->timer, tape_std_assign_timeout, 0);
6573     - mod_timer(&timeout, jiffies + 2 * HZ);
6574     + mod_timer(&request->timer, jiffies + msecs_to_jiffies(2000));
6575    
6576     rc = tape_do_io_interruptible(device, request);
6577    
6578     diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
6579     index 7950ac59b1744..ad447437a27c5 100644
6580     --- a/drivers/s390/cio/css.c
6581     +++ b/drivers/s390/cio/css.c
6582     @@ -433,8 +433,8 @@ static ssize_t dev_busid_show(struct device *dev,
6583     struct subchannel *sch = to_subchannel(dev);
6584     struct pmcw *pmcw = &sch->schib.pmcw;
6585    
6586     - if ((pmcw->st == SUBCHANNEL_TYPE_IO ||
6587     - pmcw->st == SUBCHANNEL_TYPE_MSG) && pmcw->dnv)
6588     + if ((pmcw->st == SUBCHANNEL_TYPE_IO && pmcw->dnv) ||
6589     + (pmcw->st == SUBCHANNEL_TYPE_MSG && pmcw->w))
6590     return sysfs_emit(buf, "0.%x.%04x\n", sch->schid.ssid,
6591     pmcw->dev);
6592     else
6593     diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c
6594     index ccecf6b9504e8..5a411595347b5 100644
6595     --- a/drivers/s390/cio/device_ops.c
6596     +++ b/drivers/s390/cio/device_ops.c
6597     @@ -717,13 +717,23 @@ EXPORT_SYMBOL_GPL(ccw_device_get_schid);
6598     */
6599     void *ccw_device_dma_zalloc(struct ccw_device *cdev, size_t size)
6600     {
6601     - return cio_gp_dma_zalloc(cdev->private->dma_pool, &cdev->dev, size);
6602     + void *addr;
6603     +
6604     + if (!get_device(&cdev->dev))
6605     + return NULL;
6606     + addr = cio_gp_dma_zalloc(cdev->private->dma_pool, &cdev->dev, size);
6607     + if (IS_ERR_OR_NULL(addr))
6608     + put_device(&cdev->dev);
6609     + return addr;
6610     }
6611     EXPORT_SYMBOL(ccw_device_dma_zalloc);
6612    
6613     void ccw_device_dma_free(struct ccw_device *cdev, void *cpu_addr, size_t size)
6614     {
6615     + if (!cpu_addr)
6616     + return;
6617     cio_gp_dma_free(cdev->private->dma_pool, cpu_addr, size);
6618     + put_device(&cdev->dev);
6619     }
6620     EXPORT_SYMBOL(ccw_device_dma_free);
6621    
6622     diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c
6623     index 23cbe4cda760e..c3bf590f5d685 100644
6624     --- a/drivers/scsi/csiostor/csio_lnode.c
6625     +++ b/drivers/scsi/csiostor/csio_lnode.c
6626     @@ -619,7 +619,7 @@ csio_ln_vnp_read_cbfn(struct csio_hw *hw, struct csio_mb *mbp)
6627     struct fc_els_csp *csp;
6628     struct fc_els_cssp *clsp;
6629     enum fw_retval retval;
6630     - __be32 nport_id;
6631     + __be32 nport_id = 0;
6632    
6633     retval = FW_CMD_RETVAL_G(ntohl(rsp->alloc_to_len16));
6634     if (retval != FW_SUCCESS) {
6635     diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
6636     index 13fbb2eab842e..5fb06930912a0 100644
6637     --- a/drivers/scsi/dc395x.c
6638     +++ b/drivers/scsi/dc395x.c
6639     @@ -4698,6 +4698,7 @@ static int dc395x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
6640     /* initialise the adapter and everything we need */
6641     if (adapter_init(acb, io_port_base, io_port_len, irq)) {
6642     dprintkl(KERN_INFO, "adapter init failed\n");
6643     + acb = NULL;
6644     goto fail;
6645     }
6646    
6647     diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
6648     index 580d30cd5c35c..8f85ca0112961 100644
6649     --- a/drivers/scsi/qla2xxx/qla_attr.c
6650     +++ b/drivers/scsi/qla2xxx/qla_attr.c
6651     @@ -1759,6 +1759,18 @@ qla2x00_port_speed_store(struct device *dev, struct device_attribute *attr,
6652     return strlen(buf);
6653     }
6654    
6655     +static const struct {
6656     + u16 rate;
6657     + char *str;
6658     +} port_speed_str[] = {
6659     + { PORT_SPEED_4GB, "4" },
6660     + { PORT_SPEED_8GB, "8" },
6661     + { PORT_SPEED_16GB, "16" },
6662     + { PORT_SPEED_32GB, "32" },
6663     + { PORT_SPEED_64GB, "64" },
6664     + { PORT_SPEED_10GB, "10" },
6665     +};
6666     +
6667     static ssize_t
6668     qla2x00_port_speed_show(struct device *dev, struct device_attribute *attr,
6669     char *buf)
6670     @@ -1766,7 +1778,8 @@ qla2x00_port_speed_show(struct device *dev, struct device_attribute *attr,
6671     struct scsi_qla_host *vha = shost_priv(dev_to_shost(dev));
6672     struct qla_hw_data *ha = vha->hw;
6673     ssize_t rval;
6674     - char *spd[7] = {"0", "0", "0", "4", "8", "16", "32"};
6675     + u16 i;
6676     + char *speed = "Unknown";
6677    
6678     rval = qla2x00_get_data_rate(vha);
6679     if (rval != QLA_SUCCESS) {
6680     @@ -1775,7 +1788,14 @@ qla2x00_port_speed_show(struct device *dev, struct device_attribute *attr,
6681     return -EINVAL;
6682     }
6683    
6684     - return scnprintf(buf, PAGE_SIZE, "%s\n", spd[ha->link_data_rate]);
6685     + for (i = 0; i < ARRAY_SIZE(port_speed_str); i++) {
6686     + if (port_speed_str[i].rate != ha->link_data_rate)
6687     + continue;
6688     + speed = port_speed_str[i].str;
6689     + break;
6690     + }
6691     +
6692     + return scnprintf(buf, PAGE_SIZE, "%s\n", speed);
6693     }
6694    
6695     /* ----- */
6696     diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
6697     index 7aa233771ec86..1a98e37c9be22 100644
6698     --- a/drivers/scsi/qla2xxx/qla_gbl.h
6699     +++ b/drivers/scsi/qla2xxx/qla_gbl.h
6700     @@ -156,7 +156,6 @@ extern int ql2xasynctmfenable;
6701     extern int ql2xgffidenable;
6702     extern int ql2xenabledif;
6703     extern int ql2xenablehba_err_chk;
6704     -extern int ql2xtargetreset;
6705     extern int ql2xdontresethba;
6706     extern uint64_t ql2xmaxlun;
6707     extern int ql2xmdcapmask;
6708     @@ -770,7 +769,6 @@ extern void qlafx00_abort_iocb(srb_t *, struct abort_iocb_entry_fx00 *);
6709     extern void qlafx00_fxdisc_iocb(srb_t *, struct fxdisc_entry_fx00 *);
6710     extern void qlafx00_timer_routine(scsi_qla_host_t *);
6711     extern int qlafx00_rescan_isp(scsi_qla_host_t *);
6712     -extern int qlafx00_loop_reset(scsi_qla_host_t *vha);
6713    
6714     /* qla82xx related functions */
6715    
6716     diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
6717     index 5dae7ac0d3efe..37c1f27a76cf6 100644
6718     --- a/drivers/scsi/qla2xxx/qla_init.c
6719     +++ b/drivers/scsi/qla2xxx/qla_init.c
6720     @@ -978,8 +978,6 @@ static void qla24xx_async_gnl_sp_done(srb_t *sp, int res)
6721     sp->name, res, sp->u.iocb_cmd.u.mbx.in_mb[1],
6722     sp->u.iocb_cmd.u.mbx.in_mb[2]);
6723    
6724     - if (res == QLA_FUNCTION_TIMEOUT)
6725     - return;
6726    
6727     sp->fcport->flags &= ~(FCF_ASYNC_SENT|FCF_ASYNC_ACTIVE);
6728     memset(&ea, 0, sizeof(ea));
6729     @@ -1017,8 +1015,8 @@ static void qla24xx_async_gnl_sp_done(srb_t *sp, int res)
6730     spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
6731    
6732     list_for_each_entry_safe(fcport, tf, &h, gnl_entry) {
6733     - list_del_init(&fcport->gnl_entry);
6734     spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
6735     + list_del_init(&fcport->gnl_entry);
6736     fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
6737     spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
6738     ea.fcport = fcport;
6739     diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c
6740     index 605b59c76c901..badd09c5dd429 100644
6741     --- a/drivers/scsi/qla2xxx/qla_mr.c
6742     +++ b/drivers/scsi/qla2xxx/qla_mr.c
6743     @@ -740,29 +740,6 @@ qlafx00_lun_reset(fc_port_t *fcport, uint64_t l, int tag)
6744     return qla2x00_async_tm_cmd(fcport, TCF_LUN_RESET, l, tag);
6745     }
6746    
6747     -int
6748     -qlafx00_loop_reset(scsi_qla_host_t *vha)
6749     -{
6750     - int ret;
6751     - struct fc_port *fcport;
6752     - struct qla_hw_data *ha = vha->hw;
6753     -
6754     - if (ql2xtargetreset) {
6755     - list_for_each_entry(fcport, &vha->vp_fcports, list) {
6756     - if (fcport->port_type != FCT_TARGET)
6757     - continue;
6758     -
6759     - ret = ha->isp_ops->target_reset(fcport, 0, 0);
6760     - if (ret != QLA_SUCCESS) {
6761     - ql_dbg(ql_dbg_taskm, vha, 0x803d,
6762     - "Bus Reset failed: Reset=%d "
6763     - "d_id=%x.\n", ret, fcport->d_id.b24);
6764     - }
6765     - }
6766     - }
6767     - return QLA_SUCCESS;
6768     -}
6769     -
6770     int
6771     qlafx00_iospace_config(struct qla_hw_data *ha)
6772     {
6773     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
6774     index 28cbefe715e59..c1d4c964b0dd4 100644
6775     --- a/drivers/scsi/qla2xxx/qla_os.c
6776     +++ b/drivers/scsi/qla2xxx/qla_os.c
6777     @@ -191,12 +191,6 @@ MODULE_PARM_DESC(ql2xdbwr,
6778     " 0 -- Regular doorbell.\n"
6779     " 1 -- CAMRAM doorbell (faster).\n");
6780    
6781     -int ql2xtargetreset = 1;
6782     -module_param(ql2xtargetreset, int, S_IRUGO);
6783     -MODULE_PARM_DESC(ql2xtargetreset,
6784     - "Enable target reset."
6785     - "Default is 1 - use hw defaults.");
6786     -
6787     int ql2xgffidenable;
6788     module_param(ql2xgffidenable, int, S_IRUGO);
6789     MODULE_PARM_DESC(ql2xgffidenable,
6790     @@ -1229,6 +1223,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
6791     uint32_t ratov_j;
6792     struct qla_qpair *qpair;
6793     unsigned long flags;
6794     + int fast_fail_status = SUCCESS;
6795    
6796     if (qla2x00_isp_reg_stat(ha)) {
6797     ql_log(ql_log_info, vha, 0x8042,
6798     @@ -1236,15 +1231,16 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
6799     return FAILED;
6800     }
6801    
6802     + /* Save any FAST_IO_FAIL value to return later if abort succeeds */
6803     ret = fc_block_scsi_eh(cmd);
6804     if (ret != 0)
6805     - return ret;
6806     + fast_fail_status = ret;
6807    
6808     sp = scsi_cmd_priv(cmd);
6809     qpair = sp->qpair;
6810    
6811     if ((sp->fcport && sp->fcport->deleted) || !qpair)
6812     - return SUCCESS;
6813     + return fast_fail_status != SUCCESS ? fast_fail_status : FAILED;
6814    
6815     spin_lock_irqsave(qpair->qp_lock_ptr, flags);
6816     if (sp->completed) {
6817     @@ -1290,7 +1286,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
6818     __func__, ha->r_a_tov/10);
6819     ret = FAILED;
6820     } else {
6821     - ret = SUCCESS;
6822     + ret = fast_fail_status;
6823     }
6824     break;
6825     default:
6826     @@ -1636,27 +1632,10 @@ int
6827     qla2x00_loop_reset(scsi_qla_host_t *vha)
6828     {
6829     int ret;
6830     - struct fc_port *fcport;
6831     struct qla_hw_data *ha = vha->hw;
6832    
6833     - if (IS_QLAFX00(ha)) {
6834     - return qlafx00_loop_reset(vha);
6835     - }
6836     -
6837     - if (ql2xtargetreset == 1 && ha->flags.enable_target_reset) {
6838     - list_for_each_entry(fcport, &vha->vp_fcports, list) {
6839     - if (fcport->port_type != FCT_TARGET)
6840     - continue;
6841     -
6842     - ret = ha->isp_ops->target_reset(fcport, 0, 0);
6843     - if (ret != QLA_SUCCESS) {
6844     - ql_dbg(ql_dbg_taskm, vha, 0x802c,
6845     - "Bus Reset failed: Reset=%d "
6846     - "d_id=%x.\n", ret, fcport->d_id.b24);
6847     - }
6848     - }
6849     - }
6850     -
6851     + if (IS_QLAFX00(ha))
6852     + return QLA_SUCCESS;
6853    
6854     if (ha->flags.enable_lip_full_login && !IS_CNA_CAPABLE(ha)) {
6855     atomic_set(&vha->loop_state, LOOP_DOWN);
6856     @@ -4064,7 +4043,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
6857     ql_dbg_pci(ql_dbg_init, ha->pdev,
6858     0xe0ee, "%s: failed alloc dsd\n",
6859     __func__);
6860     - return 1;
6861     + return -ENOMEM;
6862     }
6863     ha->dif_bundle_kallocs++;
6864    
6865     diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
6866     index 57068e2faef54..0111c543f0e64 100644
6867     --- a/drivers/scsi/qla2xxx/qla_target.c
6868     +++ b/drivers/scsi/qla2xxx/qla_target.c
6869     @@ -3251,8 +3251,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
6870     "RESET-RSP online/active/old-count/new-count = %d/%d/%d/%d.\n",
6871     vha->flags.online, qla2x00_reset_active(vha),
6872     cmd->reset_count, qpair->chip_reset);
6873     - spin_unlock_irqrestore(qpair->qp_lock_ptr, flags);
6874     - return 0;
6875     + goto out_unmap_unlock;
6876     }
6877    
6878     /* Does F/W have an IOCBs for this request */
6879     @@ -3375,10 +3374,6 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd)
6880     prm.sg = NULL;
6881     prm.req_cnt = 1;
6882    
6883     - /* Calculate number of entries and segments required */
6884     - if (qlt_pci_map_calc_cnt(&prm) != 0)
6885     - return -EAGAIN;
6886     -
6887     if (!qpair->fw_started || (cmd->reset_count != qpair->chip_reset) ||
6888     (cmd->sess && cmd->sess->deleted)) {
6889     /*
6890     @@ -3396,6 +3391,10 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd)
6891     return 0;
6892     }
6893    
6894     + /* Calculate number of entries and segments required */
6895     + if (qlt_pci_map_calc_cnt(&prm) != 0)
6896     + return -EAGAIN;
6897     +
6898     spin_lock_irqsave(qpair->qp_lock_ptr, flags);
6899     /* Does F/W have an IOCBs for this request */
6900     res = qlt_check_reserve_free_req(qpair, prm.req_cnt);
6901     @@ -3800,9 +3799,6 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd)
6902    
6903     BUG_ON(cmd->cmd_in_wq);
6904    
6905     - if (cmd->sg_mapped)
6906     - qlt_unmap_sg(cmd->vha, cmd);
6907     -
6908     if (!cmd->q_full)
6909     qlt_decr_num_pend_cmds(cmd->vha);
6910    
6911     diff --git a/drivers/soc/fsl/dpaa2-console.c b/drivers/soc/fsl/dpaa2-console.c
6912     index 27243f706f376..53917410f2bdb 100644
6913     --- a/drivers/soc/fsl/dpaa2-console.c
6914     +++ b/drivers/soc/fsl/dpaa2-console.c
6915     @@ -231,6 +231,7 @@ static ssize_t dpaa2_console_read(struct file *fp, char __user *buf,
6916     cd->cur_ptr += bytes;
6917     written += bytes;
6918    
6919     + kfree(kbuf);
6920     return written;
6921    
6922     err_free_buf:
6923     diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
6924     index 0447afa970f5e..ab75f41e9c0c9 100644
6925     --- a/drivers/soc/tegra/pmc.c
6926     +++ b/drivers/soc/tegra/pmc.c
6927     @@ -591,7 +591,7 @@ static int tegra_powergate_power_up(struct tegra_powergate *pg,
6928    
6929     err = reset_control_deassert(pg->reset);
6930     if (err)
6931     - goto powergate_off;
6932     + goto disable_clks;
6933    
6934     usleep_range(10, 20);
6935    
6936     diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
6937     index 8a4be34bccfd2..8a1176efa4c85 100644
6938     --- a/drivers/spi/spi-bcm-qspi.c
6939     +++ b/drivers/spi/spi-bcm-qspi.c
6940     @@ -1300,7 +1300,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
6941     &qspi->dev_ids[val]);
6942     if (ret < 0) {
6943     dev_err(&pdev->dev, "IRQ %s not found\n", name);
6944     - goto qspi_probe_err;
6945     + goto qspi_unprepare_err;
6946     }
6947    
6948     qspi->dev_ids[val].dev = qspi;
6949     @@ -1315,7 +1315,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
6950     if (!num_ints) {
6951     dev_err(&pdev->dev, "no IRQs registered, cannot init driver\n");
6952     ret = -EINVAL;
6953     - goto qspi_probe_err;
6954     + goto qspi_unprepare_err;
6955     }
6956    
6957     /*
6958     @@ -1359,6 +1359,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
6959    
6960     qspi_reg_err:
6961     bcm_qspi_hw_uninit(qspi);
6962     +qspi_unprepare_err:
6963     clk_disable_unprepare(qspi->clk);
6964     qspi_probe_err:
6965     kfree(qspi->dev_ids);
6966     diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
6967     index 7fedea67159c5..8523bb4f6a62e 100644
6968     --- a/drivers/spi/spi-pl022.c
6969     +++ b/drivers/spi/spi-pl022.c
6970     @@ -1720,12 +1720,13 @@ static int verify_controller_parameters(struct pl022 *pl022,
6971     return -EINVAL;
6972     }
6973     } else {
6974     - if (chip_info->duplex != SSP_MICROWIRE_CHANNEL_FULL_DUPLEX)
6975     + if (chip_info->duplex != SSP_MICROWIRE_CHANNEL_FULL_DUPLEX) {
6976     dev_err(&pl022->adev->dev,
6977     "Microwire half duplex mode requested,"
6978     " but this is only available in the"
6979     " ST version of PL022\n");
6980     - return -EINVAL;
6981     + return -EINVAL;
6982     + }
6983     }
6984     }
6985     return 0;
6986     diff --git a/drivers/staging/ks7010/Kconfig b/drivers/staging/ks7010/Kconfig
6987     index 0987fdc2f70db..8ea6c09286798 100644
6988     --- a/drivers/staging/ks7010/Kconfig
6989     +++ b/drivers/staging/ks7010/Kconfig
6990     @@ -5,6 +5,9 @@ config KS7010
6991     select WIRELESS_EXT
6992     select WEXT_PRIV
6993     select FW_LOADER
6994     + select CRYPTO
6995     + select CRYPTO_HASH
6996     + select CRYPTO_MICHAEL_MIC
6997     help
6998     This is a driver for KeyStream KS7010 based SDIO WIFI cards. It is
6999     found on at least later Spectec SDW-821 (FCC-ID "S2Y-WLAN-11G-K" only,
7000     diff --git a/drivers/staging/media/imx/imx-media-dev-common.c b/drivers/staging/media/imx/imx-media-dev-common.c
7001     index 66b505f7e8dff..137e414cda186 100644
7002     --- a/drivers/staging/media/imx/imx-media-dev-common.c
7003     +++ b/drivers/staging/media/imx/imx-media-dev-common.c
7004     @@ -373,6 +373,8 @@ struct imx_media_dev *imx_media_dev_init(struct device *dev,
7005     imxmd->v4l2_dev.notify = imx_media_notify;
7006     strscpy(imxmd->v4l2_dev.name, "imx-media",
7007     sizeof(imxmd->v4l2_dev.name));
7008     + snprintf(imxmd->md.bus_info, sizeof(imxmd->md.bus_info),
7009     + "platform:%s", dev_name(imxmd->md.dev));
7010    
7011     media_device_init(&imxmd->md);
7012    
7013     diff --git a/drivers/staging/media/ipu3/ipu3-v4l2.c b/drivers/staging/media/ipu3/ipu3-v4l2.c
7014     index 908ae74aa970d..53239ea67fe48 100644
7015     --- a/drivers/staging/media/ipu3/ipu3-v4l2.c
7016     +++ b/drivers/staging/media/ipu3/ipu3-v4l2.c
7017     @@ -594,11 +594,12 @@ static const struct imgu_fmt *find_format(struct v4l2_format *f, u32 type)
7018     static int imgu_vidioc_querycap(struct file *file, void *fh,
7019     struct v4l2_capability *cap)
7020     {
7021     - struct imgu_video_device *node = file_to_intel_imgu_node(file);
7022     + struct imgu_device *imgu = video_drvdata(file);
7023    
7024     strscpy(cap->driver, IMGU_NAME, sizeof(cap->driver));
7025     strscpy(cap->card, IMGU_NAME, sizeof(cap->card));
7026     - snprintf(cap->bus_info, sizeof(cap->bus_info), "PCI:%s", node->name);
7027     + snprintf(cap->bus_info, sizeof(cap->bus_info), "PCI:%s",
7028     + pci_name(imgu->pci_dev));
7029    
7030     return 0;
7031     }
7032     @@ -695,7 +696,7 @@ static int imgu_fmt(struct imgu_device *imgu, unsigned int pipe, int node,
7033    
7034     /* CSS expects some format on OUT queue */
7035     if (i != IPU3_CSS_QUEUE_OUT &&
7036     - !imgu_pipe->nodes[inode].enabled) {
7037     + !imgu_pipe->nodes[inode].enabled && !try) {
7038     fmts[i] = NULL;
7039     continue;
7040     }
7041     diff --git a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
7042     index c3cd6f389a989..2a369fdaf0cbb 100644
7043     --- a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
7044     +++ b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
7045     @@ -97,8 +97,7 @@ static void cfg_scan_result(enum scan_event scan_event,
7046     info->frame_len,
7047     (s32)info->rssi * 100,
7048     GFP_KERNEL);
7049     - if (!bss)
7050     - cfg80211_put_bss(wiphy, bss);
7051     + cfg80211_put_bss(wiphy, bss);
7052     } else if (scan_event == SCAN_EVENT_DONE) {
7053     mutex_lock(&priv->scan_req_lock);
7054    
7055     diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
7056     index 51a7d3b19b394..381c5117aec1b 100644
7057     --- a/drivers/tty/serial/8250/8250_dw.c
7058     +++ b/drivers/tty/serial/8250/8250_dw.c
7059     @@ -660,7 +660,7 @@ static struct platform_driver dw8250_platform_driver = {
7060     .name = "dw-apb-uart",
7061     .pm = &dw8250_pm_ops,
7062     .of_match_table = dw8250_of_match,
7063     - .acpi_match_table = ACPI_PTR(dw8250_acpi_match),
7064     + .acpi_match_table = dw8250_acpi_match,
7065     },
7066     .probe = dw8250_probe,
7067     .remove = dw8250_remove,
7068     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
7069     index fa3bd8a97b244..38ee13bbcab81 100644
7070     --- a/drivers/tty/serial/serial_core.c
7071     +++ b/drivers/tty/serial/serial_core.c
7072     @@ -220,7 +220,11 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
7073     if (retval == 0) {
7074     if (uart_console(uport) && uport->cons->cflag) {
7075     tty->termios.c_cflag = uport->cons->cflag;
7076     + tty->termios.c_ispeed = uport->cons->ispeed;
7077     + tty->termios.c_ospeed = uport->cons->ospeed;
7078     uport->cons->cflag = 0;
7079     + uport->cons->ispeed = 0;
7080     + uport->cons->ospeed = 0;
7081     }
7082     /*
7083     * Initialise the hardware port settings.
7084     @@ -288,8 +292,11 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
7085     /*
7086     * Turn off DTR and RTS early.
7087     */
7088     - if (uport && uart_console(uport) && tty)
7089     + if (uport && uart_console(uport) && tty) {
7090     uport->cons->cflag = tty->termios.c_cflag;
7091     + uport->cons->ispeed = tty->termios.c_ispeed;
7092     + uport->cons->ospeed = tty->termios.c_ospeed;
7093     + }
7094    
7095     if (!tty || C_HUPCL(tty))
7096     uart_port_dtr_rts(uport, 0);
7097     @@ -2110,8 +2117,11 @@ uart_set_options(struct uart_port *port, struct console *co,
7098     * Allow the setting of the UART parameters with a NULL console
7099     * too:
7100     */
7101     - if (co)
7102     + if (co) {
7103     co->cflag = termios.c_cflag;
7104     + co->ispeed = termios.c_ispeed;
7105     + co->ospeed = termios.c_ospeed;
7106     + }
7107    
7108     return 0;
7109     }
7110     @@ -2245,6 +2255,8 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
7111     */
7112     memset(&termios, 0, sizeof(struct ktermios));
7113     termios.c_cflag = uport->cons->cflag;
7114     + termios.c_ispeed = uport->cons->ispeed;
7115     + termios.c_ospeed = uport->cons->ospeed;
7116    
7117     /*
7118     * If that's unset, use the tty termios setting.
7119     diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
7120     index 9359c80fbb9f5..a1409251fbcc3 100644
7121     --- a/drivers/tty/serial/xilinx_uartps.c
7122     +++ b/drivers/tty/serial/xilinx_uartps.c
7123     @@ -595,9 +595,10 @@ static void cdns_uart_start_tx(struct uart_port *port)
7124     if (uart_circ_empty(&port->state->xmit))
7125     return;
7126    
7127     + writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR);
7128     +
7129     cdns_uart_handle_tx(port);
7130    
7131     - writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR);
7132     /* Enable the TX Empty interrupt */
7133     writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_IER);
7134     }
7135     diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
7136     index b7da2a273c451..74cdc7ef476ae 100644
7137     --- a/drivers/usb/chipidea/core.c
7138     +++ b/drivers/usb/chipidea/core.c
7139     @@ -534,7 +534,7 @@ int hw_device_reset(struct ci_hdrc *ci)
7140     return 0;
7141     }
7142    
7143     -static irqreturn_t ci_irq(int irq, void *data)
7144     +static irqreturn_t ci_irq_handler(int irq, void *data)
7145     {
7146     struct ci_hdrc *ci = data;
7147     irqreturn_t ret = IRQ_NONE;
7148     @@ -587,6 +587,15 @@ static irqreturn_t ci_irq(int irq, void *data)
7149     return ret;
7150     }
7151    
7152     +static void ci_irq(struct ci_hdrc *ci)
7153     +{
7154     + unsigned long flags;
7155     +
7156     + local_irq_save(flags);
7157     + ci_irq_handler(ci->irq, ci);
7158     + local_irq_restore(flags);
7159     +}
7160     +
7161     static int ci_cable_notifier(struct notifier_block *nb, unsigned long event,
7162     void *ptr)
7163     {
7164     @@ -596,7 +605,7 @@ static int ci_cable_notifier(struct notifier_block *nb, unsigned long event,
7165     cbl->connected = event;
7166     cbl->changed = true;
7167    
7168     - ci_irq(ci->irq, ci);
7169     + ci_irq(ci);
7170     return NOTIFY_DONE;
7171     }
7172    
7173     @@ -634,7 +643,7 @@ static int ci_usb_role_switch_set(struct device *dev, enum usb_role role)
7174     if (cable) {
7175     cable->changed = true;
7176     cable->connected = false;
7177     - ci_irq(ci->irq, ci);
7178     + ci_irq(ci);
7179     spin_unlock_irqrestore(&ci->lock, flags);
7180     if (ci->wq && role != USB_ROLE_NONE)
7181     flush_workqueue(ci->wq);
7182     @@ -652,7 +661,7 @@ static int ci_usb_role_switch_set(struct device *dev, enum usb_role role)
7183     if (cable) {
7184     cable->changed = true;
7185     cable->connected = true;
7186     - ci_irq(ci->irq, ci);
7187     + ci_irq(ci);
7188     }
7189     spin_unlock_irqrestore(&ci->lock, flags);
7190     pm_runtime_put_sync(ci->dev);
7191     @@ -1156,7 +1165,7 @@ static int ci_hdrc_probe(struct platform_device *pdev)
7192     }
7193     }
7194    
7195     - ret = devm_request_irq(dev, ci->irq, ci_irq, IRQF_SHARED,
7196     + ret = devm_request_irq(dev, ci->irq, ci_irq_handler, IRQF_SHARED,
7197     ci->platdata->name, ci);
7198     if (ret)
7199     goto stop;
7200     @@ -1277,11 +1286,11 @@ static void ci_extcon_wakeup_int(struct ci_hdrc *ci)
7201    
7202     if (!IS_ERR(cable_id->edev) && ci->is_otg &&
7203     (otgsc & OTGSC_IDIE) && (otgsc & OTGSC_IDIS))
7204     - ci_irq(ci->irq, ci);
7205     + ci_irq(ci);
7206    
7207     if (!IS_ERR(cable_vbus->edev) && ci->is_otg &&
7208     (otgsc & OTGSC_BSVIE) && (otgsc & OTGSC_BSVIS))
7209     - ci_irq(ci->irq, ci);
7210     + ci_irq(ci);
7211     }
7212    
7213     static int ci_controller_resume(struct device *dev)
7214     diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
7215     index 5b27d289443fe..3912cc805f3af 100644
7216     --- a/drivers/usb/gadget/legacy/hid.c
7217     +++ b/drivers/usb/gadget/legacy/hid.c
7218     @@ -99,8 +99,10 @@ static int do_config(struct usb_configuration *c)
7219    
7220     list_for_each_entry(e, &hidg_func_list, node) {
7221     e->f = usb_get_function(e->fi);
7222     - if (IS_ERR(e->f))
7223     + if (IS_ERR(e->f)) {
7224     + status = PTR_ERR(e->f);
7225     goto put;
7226     + }
7227     status = usb_add_function(c, e->f);
7228     if (status < 0) {
7229     usb_put_function(e->f);
7230     diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
7231     index 6358d4e0653ed..9a4260927ce31 100644
7232     --- a/drivers/usb/host/xhci-hub.c
7233     +++ b/drivers/usb/host/xhci-hub.c
7234     @@ -171,7 +171,6 @@ static void xhci_common_hub_descriptor(struct xhci_hcd *xhci,
7235     {
7236     u16 temp;
7237    
7238     - desc->bPwrOn2PwrGood = 10; /* xhci section 5.4.9 says 20ms max */
7239     desc->bHubContrCurrent = 0;
7240    
7241     desc->bNbrPorts = ports;
7242     @@ -206,6 +205,7 @@ static void xhci_usb2_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
7243     desc->bDescriptorType = USB_DT_HUB;
7244     temp = 1 + (ports / 8);
7245     desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * temp;
7246     + desc->bPwrOn2PwrGood = 10; /* xhci section 5.4.8 says 20ms */
7247    
7248     /* The Device Removable bits are reported on a byte granularity.
7249     * If the port doesn't exist within that byte, the bit is set to 0.
7250     @@ -258,6 +258,7 @@ static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
7251     xhci_common_hub_descriptor(xhci, desc, ports);
7252     desc->bDescriptorType = USB_DT_SS_HUB;
7253     desc->bDescLength = USB_DT_SS_HUB_SIZE;
7254     + desc->bPwrOn2PwrGood = 50; /* usb 3.1 may fail if less than 100ms */
7255    
7256     /* header decode latency should be zero for roothubs,
7257     * see section 4.23.5.2.
7258     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
7259     index ae8fa4ff05ee3..beee3543950fe 100644
7260     --- a/drivers/usb/host/xhci-pci.c
7261     +++ b/drivers/usb/host/xhci-pci.c
7262     @@ -59,6 +59,13 @@
7263     #define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
7264     #define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
7265     #define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc
7266     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_1 0x161a
7267     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_2 0x161b
7268     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 0x161d
7269     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 0x161e
7270     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 0x15d6
7271     +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 0x15d7
7272     +
7273     #define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042
7274     #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142
7275     #define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242
7276     @@ -290,6 +297,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
7277     pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4))
7278     xhci->quirks |= XHCI_NO_SOFT_RETRY;
7279    
7280     + if (pdev->vendor == PCI_VENDOR_ID_AMD &&
7281     + (pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_1 ||
7282     + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_2 ||
7283     + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 ||
7284     + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 ||
7285     + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 ||
7286     + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6))
7287     + xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
7288     +
7289     if (xhci->quirks & XHCI_RESET_ON_RESUME)
7290     xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
7291     "QUIRK: Resetting on resume");
7292     diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
7293     index 103c69c692bad..888defdea546f 100644
7294     --- a/drivers/usb/misc/iowarrior.c
7295     +++ b/drivers/usb/misc/iowarrior.c
7296     @@ -99,10 +99,6 @@ struct iowarrior {
7297     /* globals */
7298     /*--------------*/
7299    
7300     -/*
7301     - * USB spec identifies 5 second timeouts.
7302     - */
7303     -#define GET_TIMEOUT 5
7304     #define USB_REQ_GET_REPORT 0x01
7305     //#if 0
7306     static int usb_get_report(struct usb_device *dev,
7307     @@ -114,7 +110,7 @@ static int usb_get_report(struct usb_device *dev,
7308     USB_DIR_IN | USB_TYPE_CLASS |
7309     USB_RECIP_INTERFACE, (type << 8) + id,
7310     inter->desc.bInterfaceNumber, buf, size,
7311     - GET_TIMEOUT*HZ);
7312     + USB_CTRL_GET_TIMEOUT);
7313     }
7314     //#endif
7315    
7316     @@ -129,7 +125,7 @@ static int usb_set_report(struct usb_interface *intf, unsigned char type,
7317     USB_TYPE_CLASS | USB_RECIP_INTERFACE,
7318     (type << 8) + id,
7319     intf->cur_altsetting->desc.bInterfaceNumber, buf,
7320     - size, HZ);
7321     + size, 1000);
7322     }
7323    
7324     /*---------------------*/
7325     diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
7326     index aa3dbce22cfbe..451759f38b573 100644
7327     --- a/drivers/usb/serial/keyspan.c
7328     +++ b/drivers/usb/serial/keyspan.c
7329     @@ -2910,22 +2910,22 @@ static int keyspan_port_probe(struct usb_serial_port *port)
7330     for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) {
7331     p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL);
7332     if (!p_priv->in_buffer[i])
7333     - goto err_in_buffer;
7334     + goto err_free_in_buffer;
7335     }
7336    
7337     for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) {
7338     p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL);
7339     if (!p_priv->out_buffer[i])
7340     - goto err_out_buffer;
7341     + goto err_free_out_buffer;
7342     }
7343    
7344     p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL);
7345     if (!p_priv->inack_buffer)
7346     - goto err_inack_buffer;
7347     + goto err_free_out_buffer;
7348    
7349     p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL);
7350     if (!p_priv->outcont_buffer)
7351     - goto err_outcont_buffer;
7352     + goto err_free_inack_buffer;
7353    
7354     p_priv->device_details = d_details;
7355    
7356     @@ -2971,15 +2971,14 @@ static int keyspan_port_probe(struct usb_serial_port *port)
7357    
7358     return 0;
7359    
7360     -err_outcont_buffer:
7361     +err_free_inack_buffer:
7362     kfree(p_priv->inack_buffer);
7363     -err_inack_buffer:
7364     +err_free_out_buffer:
7365     for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i)
7366     kfree(p_priv->out_buffer[i]);
7367     -err_out_buffer:
7368     +err_free_in_buffer:
7369     for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i)
7370     kfree(p_priv->in_buffer[i]);
7371     -err_in_buffer:
7372     kfree(p_priv);
7373    
7374     return -ENOMEM;
7375     diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
7376     index cac3e35d76308..813a264a1b119 100644
7377     --- a/drivers/video/backlight/backlight.c
7378     +++ b/drivers/video/backlight/backlight.c
7379     @@ -630,12 +630,6 @@ struct backlight_device *of_find_backlight(struct device *dev)
7380     of_node_put(np);
7381     if (!bd)
7382     return ERR_PTR(-EPROBE_DEFER);
7383     - /*
7384     - * Note: gpio_backlight uses brightness as
7385     - * power state during probe
7386     - */
7387     - if (!bd->props.brightness)
7388     - bd->props.brightness = bd->props.max_brightness;
7389     }
7390     }
7391    
7392     diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c
7393     index f4dc320dcafe2..80fdd3ee0565f 100644
7394     --- a/drivers/video/fbdev/chipsfb.c
7395     +++ b/drivers/video/fbdev/chipsfb.c
7396     @@ -331,7 +331,7 @@ static const struct fb_var_screeninfo chipsfb_var = {
7397    
7398     static void init_chips(struct fb_info *p, unsigned long addr)
7399     {
7400     - memset(p->screen_base, 0, 0x100000);
7401     + fb_memset(p->screen_base, 0, 0x100000);
7402    
7403     p->fix = chipsfb_fix;
7404     p->fix.smem_start = addr;
7405     diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
7406     index 1aa42e879e633..3fabd4177b0ee 100644
7407     --- a/drivers/watchdog/Kconfig
7408     +++ b/drivers/watchdog/Kconfig
7409     @@ -1682,7 +1682,7 @@ config SIBYTE_WDOG
7410    
7411     config AR7_WDT
7412     tristate "TI AR7 Watchdog Timer"
7413     - depends on AR7 || (MIPS && COMPILE_TEST)
7414     + depends on AR7 || (MIPS && 32BIT && COMPILE_TEST)
7415     help
7416     Hardware driver for the TI AR7 Watchdog Timer.
7417    
7418     diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c
7419     index 893cef70c1599..aa57498009c34 100644
7420     --- a/drivers/watchdog/f71808e_wdt.c
7421     +++ b/drivers/watchdog/f71808e_wdt.c
7422     @@ -228,15 +228,17 @@ static int watchdog_set_timeout(int timeout)
7423    
7424     mutex_lock(&watchdog.lock);
7425    
7426     - watchdog.timeout = timeout;
7427     if (timeout > 0xff) {
7428     watchdog.timer_val = DIV_ROUND_UP(timeout, 60);
7429     watchdog.minutes_mode = true;
7430     + timeout = watchdog.timer_val * 60;
7431     } else {
7432     watchdog.timer_val = timeout;
7433     watchdog.minutes_mode = false;
7434     }
7435    
7436     + watchdog.timeout = timeout;
7437     +
7438     mutex_unlock(&watchdog.lock);
7439    
7440     return 0;
7441     diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
7442     index 9b91882fe3c41..6d7ccbc0b666c 100644
7443     --- a/drivers/watchdog/omap_wdt.c
7444     +++ b/drivers/watchdog/omap_wdt.c
7445     @@ -268,8 +268,12 @@ static int omap_wdt_probe(struct platform_device *pdev)
7446     wdev->wdog.bootstatus = WDIOF_CARDRESET;
7447     }
7448    
7449     - if (!early_enable)
7450     + if (early_enable) {
7451     + omap_wdt_start(&wdev->wdog);
7452     + set_bit(WDOG_HW_RUNNING, &wdev->wdog.status);
7453     + } else {
7454     omap_wdt_disable(wdev);
7455     + }
7456    
7457     ret = watchdog_register_device(&wdev->wdog);
7458     if (ret) {
7459     diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
7460     index 07f362c63ae90..39bbb127852f9 100644
7461     --- a/drivers/xen/balloon.c
7462     +++ b/drivers/xen/balloon.c
7463     @@ -58,6 +58,7 @@
7464     #include <linux/percpu-defs.h>
7465     #include <linux/slab.h>
7466     #include <linux/sysctl.h>
7467     +#include <linux/moduleparam.h>
7468    
7469     #include <asm/page.h>
7470     #include <asm/pgalloc.h>
7471     @@ -75,6 +76,12 @@
7472     #include <xen/page.h>
7473     #include <xen/mem-reservation.h>
7474    
7475     +#undef MODULE_PARAM_PREFIX
7476     +#define MODULE_PARAM_PREFIX "xen."
7477     +
7478     +static uint __read_mostly balloon_boot_timeout = 180;
7479     +module_param(balloon_boot_timeout, uint, 0444);
7480     +
7481     static int xen_hotplug_unpopulated;
7482    
7483     #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
7484     @@ -127,12 +134,12 @@ static struct ctl_table xen_root[] = {
7485     * BP_ECANCELED: error, balloon operation canceled.
7486     */
7487    
7488     -enum bp_state {
7489     +static enum bp_state {
7490     BP_DONE,
7491     BP_WAIT,
7492     BP_EAGAIN,
7493     BP_ECANCELED
7494     -};
7495     +} balloon_state = BP_DONE;
7496    
7497     /* Main waiting point for xen-balloon thread. */
7498     static DECLARE_WAIT_QUEUE_HEAD(balloon_thread_wq);
7499     @@ -201,18 +208,15 @@ static struct page *balloon_next_page(struct page *page)
7500     return list_entry(next, struct page, lru);
7501     }
7502    
7503     -static enum bp_state update_schedule(enum bp_state state)
7504     +static void update_schedule(void)
7505     {
7506     - if (state == BP_WAIT)
7507     - return BP_WAIT;
7508     -
7509     - if (state == BP_ECANCELED)
7510     - return BP_ECANCELED;
7511     + if (balloon_state == BP_WAIT || balloon_state == BP_ECANCELED)
7512     + return;
7513    
7514     - if (state == BP_DONE) {
7515     + if (balloon_state == BP_DONE) {
7516     balloon_stats.schedule_delay = 1;
7517     balloon_stats.retry_count = 1;
7518     - return BP_DONE;
7519     + return;
7520     }
7521    
7522     ++balloon_stats.retry_count;
7523     @@ -221,7 +225,8 @@ static enum bp_state update_schedule(enum bp_state state)
7524     balloon_stats.retry_count > balloon_stats.max_retry_count) {
7525     balloon_stats.schedule_delay = 1;
7526     balloon_stats.retry_count = 1;
7527     - return BP_ECANCELED;
7528     + balloon_state = BP_ECANCELED;
7529     + return;
7530     }
7531    
7532     balloon_stats.schedule_delay <<= 1;
7533     @@ -229,7 +234,7 @@ static enum bp_state update_schedule(enum bp_state state)
7534     if (balloon_stats.schedule_delay > balloon_stats.max_schedule_delay)
7535     balloon_stats.schedule_delay = balloon_stats.max_schedule_delay;
7536    
7537     - return BP_EAGAIN;
7538     + balloon_state = BP_EAGAIN;
7539     }
7540    
7541     #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
7542     @@ -511,9 +516,9 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
7543     * Stop waiting if either state is BP_DONE and ballooning action is
7544     * needed, or if the credit has changed while state is not BP_DONE.
7545     */
7546     -static bool balloon_thread_cond(enum bp_state state, long credit)
7547     +static bool balloon_thread_cond(long credit)
7548     {
7549     - if (state == BP_DONE)
7550     + if (balloon_state == BP_DONE)
7551     credit = 0;
7552    
7553     return current_credit() != credit || kthread_should_stop();
7554     @@ -527,13 +532,12 @@ static bool balloon_thread_cond(enum bp_state state, long credit)
7555     */
7556     static int balloon_thread(void *unused)
7557     {
7558     - enum bp_state state = BP_DONE;
7559     long credit;
7560     unsigned long timeout;
7561    
7562     set_freezable();
7563     for (;;) {
7564     - switch (state) {
7565     + switch (balloon_state) {
7566     case BP_DONE:
7567     case BP_ECANCELED:
7568     timeout = 3600 * HZ;
7569     @@ -549,7 +553,7 @@ static int balloon_thread(void *unused)
7570     credit = current_credit();
7571    
7572     wait_event_freezable_timeout(balloon_thread_wq,
7573     - balloon_thread_cond(state, credit), timeout);
7574     + balloon_thread_cond(credit), timeout);
7575    
7576     if (kthread_should_stop())
7577     return 0;
7578     @@ -560,22 +564,23 @@ static int balloon_thread(void *unused)
7579    
7580     if (credit > 0) {
7581     if (balloon_is_inflated())
7582     - state = increase_reservation(credit);
7583     + balloon_state = increase_reservation(credit);
7584     else
7585     - state = reserve_additional_memory();
7586     + balloon_state = reserve_additional_memory();
7587     }
7588    
7589     if (credit < 0) {
7590     long n_pages;
7591    
7592     n_pages = min(-credit, si_mem_available());
7593     - state = decrease_reservation(n_pages, GFP_BALLOON);
7594     - if (state == BP_DONE && n_pages != -credit &&
7595     + balloon_state = decrease_reservation(n_pages,
7596     + GFP_BALLOON);
7597     + if (balloon_state == BP_DONE && n_pages != -credit &&
7598     n_pages < totalreserve_pages)
7599     - state = BP_EAGAIN;
7600     + balloon_state = BP_EAGAIN;
7601     }
7602    
7603     - state = update_schedule(state);
7604     + update_schedule();
7605    
7606     mutex_unlock(&balloon_mutex);
7607    
7608     @@ -782,3 +787,38 @@ static int __init balloon_init(void)
7609     return 0;
7610     }
7611     subsys_initcall(balloon_init);
7612     +
7613     +static int __init balloon_wait_finish(void)
7614     +{
7615     + long credit, last_credit = 0;
7616     + unsigned long last_changed = 0;
7617     +
7618     + if (!xen_domain())
7619     + return -ENODEV;
7620     +
7621     + /* PV guests don't need to wait. */
7622     + if (xen_pv_domain() || !current_credit())
7623     + return 0;
7624     +
7625     + pr_notice("Waiting for initial ballooning down having finished.\n");
7626     +
7627     + while ((credit = current_credit()) < 0) {
7628     + if (credit != last_credit) {
7629     + last_changed = jiffies;
7630     + last_credit = credit;
7631     + }
7632     + if (balloon_state == BP_ECANCELED) {
7633     + pr_warn_once("Initial ballooning failed, %ld pages need to be freed.\n",
7634     + -credit);
7635     + if (jiffies - last_changed >= HZ * balloon_boot_timeout)
7636     + panic("Initial ballooning failed!\n");
7637     + }
7638     +
7639     + schedule_timeout_interruptible(HZ / 10);
7640     + }
7641     +
7642     + pr_notice("Initial ballooning down finished.\n");
7643     +
7644     + return 0;
7645     +}
7646     +late_initcall_sync(balloon_wait_finish);
7647     diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c
7648     index e5694133ebe57..42f0f64fcba47 100644
7649     --- a/drivers/xen/xen-pciback/conf_space_capability.c
7650     +++ b/drivers/xen/xen-pciback/conf_space_capability.c
7651     @@ -160,7 +160,7 @@ static void *pm_ctrl_init(struct pci_dev *dev, int offset)
7652     }
7653    
7654     out:
7655     - return ERR_PTR(err);
7656     + return err ? ERR_PTR(err) : NULL;
7657     }
7658    
7659     static const struct config_field caplist_pm[] = {
7660     diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
7661     index 946ae198b3449..1499531bc1511 100644
7662     --- a/fs/btrfs/disk-io.c
7663     +++ b/fs/btrfs/disk-io.c
7664     @@ -3145,7 +3145,8 @@ retry_root_backup:
7665     goto fail_sysfs;
7666     }
7667    
7668     - if (!sb_rdonly(sb) && !btrfs_check_rw_degradable(fs_info, NULL)) {
7669     + if (!sb_rdonly(sb) && fs_info->fs_devices->missing_devices &&
7670     + !btrfs_check_rw_degradable(fs_info, NULL)) {
7671     btrfs_warn(fs_info,
7672     "writable mount is not allowed due to too many missing devices");
7673     goto fail_sysfs;
7674     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
7675     index f342055699870..7bc4477d7ee7d 100644
7676     --- a/fs/btrfs/tree-log.c
7677     +++ b/fs/btrfs/tree-log.c
7678     @@ -2490,7 +2490,9 @@ again:
7679     else {
7680     ret = find_dir_range(log, path, dirid, key_type,
7681     &range_start, &range_end);
7682     - if (ret != 0)
7683     + if (ret < 0)
7684     + goto out;
7685     + else if (ret > 0)
7686     break;
7687     }
7688    
7689     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
7690     index f302bbb93f32c..344d18de1f08c 100644
7691     --- a/fs/btrfs/volumes.c
7692     +++ b/fs/btrfs/volumes.c
7693     @@ -1315,8 +1315,10 @@ static void btrfs_close_one_device(struct btrfs_device *device)
7694     if (device->devid == BTRFS_DEV_REPLACE_DEVID)
7695     clear_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
7696    
7697     - if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state))
7698     + if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) {
7699     + clear_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state);
7700     fs_devices->missing_devices--;
7701     + }
7702    
7703     btrfs_close_bdev(device);
7704    
7705     @@ -2160,8 +2162,11 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
7706     u64 num_devices;
7707     int ret = 0;
7708    
7709     - mutex_lock(&uuid_mutex);
7710     -
7711     + /*
7712     + * The device list in fs_devices is accessed without locks (neither
7713     + * uuid_mutex nor device_list_mutex) as it won't change on a mounted
7714     + * filesystem and another device rm cannot run.
7715     + */
7716     num_devices = btrfs_num_devices(fs_info);
7717    
7718     ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1);
7719     @@ -2205,11 +2210,9 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
7720     mutex_unlock(&fs_info->chunk_mutex);
7721     }
7722    
7723     - mutex_unlock(&uuid_mutex);
7724     ret = btrfs_shrink_device(device, 0);
7725     if (!ret)
7726     btrfs_reada_remove_dev(device);
7727     - mutex_lock(&uuid_mutex);
7728     if (ret)
7729     goto error_undo;
7730    
7731     @@ -2291,7 +2294,6 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
7732     }
7733    
7734     out:
7735     - mutex_unlock(&uuid_mutex);
7736     return ret;
7737    
7738     error_undo:
7739     diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
7740     index 502bd491336a8..2383d52b1f424 100644
7741     --- a/fs/f2fs/inode.c
7742     +++ b/fs/f2fs/inode.c
7743     @@ -455,7 +455,7 @@ make_now:
7744     inode->i_op = &f2fs_dir_inode_operations;
7745     inode->i_fop = &f2fs_dir_operations;
7746     inode->i_mapping->a_ops = &f2fs_dblock_aops;
7747     - inode_nohighmem(inode);
7748     + mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
7749     } else if (S_ISLNK(inode->i_mode)) {
7750     if (file_is_encrypt(inode))
7751     inode->i_op = &f2fs_encrypted_symlink_inode_operations;
7752     diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
7753     index 81a18ba18e301..ed95c27e93026 100644
7754     --- a/fs/f2fs/namei.c
7755     +++ b/fs/f2fs/namei.c
7756     @@ -679,7 +679,7 @@ static int f2fs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
7757     inode->i_op = &f2fs_dir_inode_operations;
7758     inode->i_fop = &f2fs_dir_operations;
7759     inode->i_mapping->a_ops = &f2fs_dblock_aops;
7760     - inode_nohighmem(inode);
7761     + mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
7762    
7763     set_inode_flag(inode, FI_INC_LINK);
7764     f2fs_lock_op(sbi);
7765     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
7766     index 7205a89fbb5f3..fa4d2aba5a701 100644
7767     --- a/fs/fuse/dev.c
7768     +++ b/fs/fuse/dev.c
7769     @@ -839,6 +839,12 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)
7770     goto out_put_old;
7771     }
7772    
7773     + /*
7774     + * Release while we have extra ref on stolen page. Otherwise
7775     + * anon_pipe_buf_release() might think the page can be reused.
7776     + */
7777     + pipe_buf_release(cs->pipe, buf);
7778     +
7779     get_page(newpage);
7780    
7781     if (!(buf->flags & PIPE_BUF_FLAG_LRU))
7782     @@ -2027,8 +2033,12 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
7783    
7784     pipe_lock(pipe);
7785     out_free:
7786     - for (idx = 0; idx < nbuf; idx++)
7787     - pipe_buf_release(pipe, &bufs[idx]);
7788     + for (idx = 0; idx < nbuf; idx++) {
7789     + struct pipe_buffer *buf = &bufs[idx];
7790     +
7791     + if (buf->ops)
7792     + pipe_buf_release(pipe, buf);
7793     + }
7794     pipe_unlock(pipe);
7795    
7796     kvfree(bufs);
7797     diff --git a/fs/jfs/jfs_mount.c b/fs/jfs/jfs_mount.c
7798     index 616de103dccc5..d41733540df91 100644
7799     --- a/fs/jfs/jfs_mount.c
7800     +++ b/fs/jfs/jfs_mount.c
7801     @@ -80,14 +80,14 @@ int jfs_mount(struct super_block *sb)
7802     * (initialize mount inode from the superblock)
7803     */
7804     if ((rc = chkSuper(sb))) {
7805     - goto errout20;
7806     + goto out;
7807     }
7808    
7809     ipaimap = diReadSpecial(sb, AGGREGATE_I, 0);
7810     if (ipaimap == NULL) {
7811     jfs_err("jfs_mount: Failed to read AGGREGATE_I");
7812     rc = -EIO;
7813     - goto errout20;
7814     + goto out;
7815     }
7816     sbi->ipaimap = ipaimap;
7817    
7818     @@ -98,7 +98,7 @@ int jfs_mount(struct super_block *sb)
7819     */
7820     if ((rc = diMount(ipaimap))) {
7821     jfs_err("jfs_mount: diMount(ipaimap) failed w/rc = %d", rc);
7822     - goto errout21;
7823     + goto err_ipaimap;
7824     }
7825    
7826     /*
7827     @@ -107,7 +107,7 @@ int jfs_mount(struct super_block *sb)
7828     ipbmap = diReadSpecial(sb, BMAP_I, 0);
7829     if (ipbmap == NULL) {
7830     rc = -EIO;
7831     - goto errout22;
7832     + goto err_umount_ipaimap;
7833     }
7834    
7835     jfs_info("jfs_mount: ipbmap:0x%p", ipbmap);
7836     @@ -119,7 +119,7 @@ int jfs_mount(struct super_block *sb)
7837     */
7838     if ((rc = dbMount(ipbmap))) {
7839     jfs_err("jfs_mount: dbMount failed w/rc = %d", rc);
7840     - goto errout22;
7841     + goto err_ipbmap;
7842     }
7843    
7844     /*
7845     @@ -138,7 +138,7 @@ int jfs_mount(struct super_block *sb)
7846     if (!ipaimap2) {
7847     jfs_err("jfs_mount: Failed to read AGGREGATE_I");
7848     rc = -EIO;
7849     - goto errout35;
7850     + goto err_umount_ipbmap;
7851     }
7852     sbi->ipaimap2 = ipaimap2;
7853    
7854     @@ -150,7 +150,7 @@ int jfs_mount(struct super_block *sb)
7855     if ((rc = diMount(ipaimap2))) {
7856     jfs_err("jfs_mount: diMount(ipaimap2) failed, rc = %d",
7857     rc);
7858     - goto errout35;
7859     + goto err_ipaimap2;
7860     }
7861     } else
7862     /* Secondary aggregate inode table is not valid */
7863     @@ -167,7 +167,7 @@ int jfs_mount(struct super_block *sb)
7864     jfs_err("jfs_mount: Failed to read FILESYSTEM_I");
7865     /* open fileset secondary inode allocation map */
7866     rc = -EIO;
7867     - goto errout40;
7868     + goto err_umount_ipaimap2;
7869     }
7870     jfs_info("jfs_mount: ipimap:0x%p", ipimap);
7871    
7872     @@ -177,41 +177,34 @@ int jfs_mount(struct super_block *sb)
7873     /* initialize fileset inode allocation map */
7874     if ((rc = diMount(ipimap))) {
7875     jfs_err("jfs_mount: diMount failed w/rc = %d", rc);
7876     - goto errout41;
7877     + goto err_ipimap;
7878     }
7879    
7880     - goto out;
7881     + return rc;
7882    
7883     /*
7884     * unwind on error
7885     */
7886     - errout41: /* close fileset inode allocation map inode */
7887     +err_ipimap:
7888     + /* close fileset inode allocation map inode */
7889     diFreeSpecial(ipimap);
7890     -
7891     - errout40: /* fileset closed */
7892     -
7893     +err_umount_ipaimap2:
7894     /* close secondary aggregate inode allocation map */
7895     - if (ipaimap2) {
7896     + if (ipaimap2)
7897     diUnmount(ipaimap2, 1);
7898     +err_ipaimap2:
7899     + /* close aggregate inodes */
7900     + if (ipaimap2)
7901     diFreeSpecial(ipaimap2);
7902     - }
7903     -
7904     - errout35:
7905     -
7906     - /* close aggregate block allocation map */
7907     +err_umount_ipbmap: /* close aggregate block allocation map */
7908     dbUnmount(ipbmap, 1);
7909     +err_ipbmap: /* close aggregate inodes */
7910     diFreeSpecial(ipbmap);
7911     -
7912     - errout22: /* close aggregate inode allocation map */
7913     -
7914     +err_umount_ipaimap: /* close aggregate inode allocation map */
7915     diUnmount(ipaimap, 1);
7916     -
7917     - errout21: /* close aggregate inodes */
7918     +err_ipaimap: /* close aggregate inodes */
7919     diFreeSpecial(ipaimap);
7920     - errout20: /* aggregate closed */
7921     -
7922     - out:
7923     -
7924     +out:
7925     if (rc)
7926     jfs_err("Mount JFS Failure: %d", rc);
7927    
7928     diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
7929     index 3eda40a320a53..1f12297109b41 100644
7930     --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
7931     +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
7932     @@ -378,10 +378,10 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg,
7933     goto noconnect;
7934    
7935     ds = mirror->mirror_ds->ds;
7936     + if (READ_ONCE(ds->ds_clp))
7937     + goto out;
7938     /* matching smp_wmb() in _nfs4_pnfs_v3/4_ds_connect */
7939     smp_rmb();
7940     - if (ds->ds_clp)
7941     - goto out;
7942    
7943     /* FIXME: For now we assume the server sent only one version of NFS
7944     * to use for the DS.
7945     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
7946     index 5ecaf7b6b0fa1..fb3d1532f11dd 100644
7947     --- a/fs/nfs/nfs4proc.c
7948     +++ b/fs/nfs/nfs4proc.c
7949     @@ -1549,15 +1549,16 @@ static bool nfs_stateid_is_sequential(struct nfs4_state *state,
7950     {
7951     if (test_bit(NFS_OPEN_STATE, &state->flags)) {
7952     /* The common case - we're updating to a new sequence number */
7953     - if (nfs4_stateid_match_other(stateid, &state->open_stateid) &&
7954     - nfs4_stateid_is_next(&state->open_stateid, stateid)) {
7955     - return true;
7956     + if (nfs4_stateid_match_other(stateid, &state->open_stateid)) {
7957     + if (nfs4_stateid_is_next(&state->open_stateid, stateid))
7958     + return true;
7959     + return false;
7960     }
7961     - } else {
7962     - /* This is the first OPEN in this generation */
7963     - if (stateid->seqid == cpu_to_be32(1))
7964     - return true;
7965     + /* The server returned a new stateid */
7966     }
7967     + /* This is the first OPEN in this generation */
7968     + if (stateid->seqid == cpu_to_be32(1))
7969     + return true;
7970     return false;
7971     }
7972    
7973     diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
7974     index 249cf9037dbd7..aff44a7b98f86 100644
7975     --- a/fs/nfs/pnfs_nfs.c
7976     +++ b/fs/nfs/pnfs_nfs.c
7977     @@ -641,7 +641,7 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv,
7978     }
7979    
7980     smp_wmb();
7981     - ds->ds_clp = clp;
7982     + WRITE_ONCE(ds->ds_clp, clp);
7983     dprintk("%s [new] addr: %s\n", __func__, ds->ds_remotestr);
7984     out:
7985     return status;
7986     @@ -714,7 +714,7 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
7987     }
7988    
7989     smp_wmb();
7990     - ds->ds_clp = clp;
7991     + WRITE_ONCE(ds->ds_clp, clp);
7992     dprintk("%s [new] addr: %s\n", __func__, ds->ds_remotestr);
7993     out:
7994     return status;
7995     diff --git a/fs/nfs/write.c b/fs/nfs/write.c
7996     index 613c3ef23e07b..30d8e7bc1cef3 100644
7997     --- a/fs/nfs/write.c
7998     +++ b/fs/nfs/write.c
7999     @@ -1050,25 +1050,11 @@ nfs_scan_commit_list(struct list_head *src, struct list_head *dst,
8000     struct nfs_page *req, *tmp;
8001     int ret = 0;
8002    
8003     -restart:
8004     list_for_each_entry_safe(req, tmp, src, wb_list) {
8005     kref_get(&req->wb_kref);
8006     if (!nfs_lock_request(req)) {
8007     - int status;
8008     -
8009     - /* Prevent deadlock with nfs_lock_and_join_requests */
8010     - if (!list_empty(dst)) {
8011     - nfs_release_request(req);
8012     - continue;
8013     - }
8014     - /* Ensure we make progress to prevent livelock */
8015     - mutex_unlock(&NFS_I(cinfo->inode)->commit_mutex);
8016     - status = nfs_wait_on_request(req);
8017     nfs_release_request(req);
8018     - mutex_lock(&NFS_I(cinfo->inode)->commit_mutex);
8019     - if (status < 0)
8020     - break;
8021     - goto restart;
8022     + continue;
8023     }
8024     nfs_request_remove_commit_list(req, cinfo);
8025     clear_bit(PG_COMMIT_TO_DS, &req->wb_flags);
8026     @@ -1935,6 +1921,7 @@ static int __nfs_commit_inode(struct inode *inode, int how,
8027     int may_wait = how & FLUSH_SYNC;
8028     int ret, nscan;
8029    
8030     + how &= ~FLUSH_SYNC;
8031     nfs_init_cinfo_from_inode(&cinfo, inode);
8032     nfs_commit_begin(cinfo.mds);
8033     for (;;) {
8034     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
8035     index 58d4546a208e6..c30747bdfb127 100644
8036     --- a/fs/ocfs2/file.c
8037     +++ b/fs/ocfs2/file.c
8038     @@ -478,10 +478,11 @@ int ocfs2_truncate_file(struct inode *inode,
8039     * greater than page size, so we have to truncate them
8040     * anyway.
8041     */
8042     - unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1);
8043     - truncate_inode_pages(inode->i_mapping, new_i_size);
8044    
8045     if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
8046     + unmap_mapping_range(inode->i_mapping,
8047     + new_i_size + PAGE_SIZE - 1, 0, 1);
8048     + truncate_inode_pages(inode->i_mapping, new_i_size);
8049     status = ocfs2_truncate_inline(inode, di_bh, new_i_size,
8050     i_size_read(inode), 1);
8051     if (status)
8052     @@ -500,6 +501,9 @@ int ocfs2_truncate_file(struct inode *inode,
8053     goto bail_unlock_sem;
8054     }
8055    
8056     + unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1);
8057     + truncate_inode_pages(inode->i_mapping, new_i_size);
8058     +
8059     status = ocfs2_commit_truncate(osb, inode, di_bh);
8060     if (status < 0) {
8061     mlog_errno(status);
8062     diff --git a/fs/orangefs/dcache.c b/fs/orangefs/dcache.c
8063     index fe484cf93e5cd..8bbe9486e3a62 100644
8064     --- a/fs/orangefs/dcache.c
8065     +++ b/fs/orangefs/dcache.c
8066     @@ -26,8 +26,10 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
8067     gossip_debug(GOSSIP_DCACHE_DEBUG, "%s: attempting lookup.\n", __func__);
8068    
8069     new_op = op_alloc(ORANGEFS_VFS_OP_LOOKUP);
8070     - if (!new_op)
8071     + if (!new_op) {
8072     + ret = -ENOMEM;
8073     goto out_put_parent;
8074     + }
8075    
8076     new_op->upcall.req.lookup.sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW;
8077     new_op->upcall.req.lookup.parent_refn = parent->refn;
8078     diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
8079     index 81c9eab8529b6..6bf5fb12395ac 100644
8080     --- a/fs/overlayfs/file.c
8081     +++ b/fs/overlayfs/file.c
8082     @@ -296,6 +296,51 @@ out_unlock:
8083     return ret;
8084     }
8085    
8086     +/*
8087     + * Calling iter_file_splice_write() directly from overlay's f_op may deadlock
8088     + * due to lock order inversion between pipe->mutex in iter_file_splice_write()
8089     + * and file_start_write(real.file) in ovl_write_iter().
8090     + *
8091     + * So do everything ovl_write_iter() does and call iter_file_splice_write() on
8092     + * the real file.
8093     + */
8094     +static ssize_t ovl_splice_write(struct pipe_inode_info *pipe, struct file *out,
8095     + loff_t *ppos, size_t len, unsigned int flags)
8096     +{
8097     + struct fd real;
8098     + const struct cred *old_cred;
8099     + struct inode *inode = file_inode(out);
8100     + struct inode *realinode = ovl_inode_real(inode);
8101     + ssize_t ret;
8102     +
8103     + inode_lock(inode);
8104     + /* Update mode */
8105     + ovl_copyattr(realinode, inode);
8106     + ret = file_remove_privs(out);
8107     + if (ret)
8108     + goto out_unlock;
8109     +
8110     + ret = ovl_real_fdget(out, &real);
8111     + if (ret)
8112     + goto out_unlock;
8113     +
8114     + old_cred = ovl_override_creds(inode->i_sb);
8115     + file_start_write(real.file);
8116     +
8117     + ret = iter_file_splice_write(pipe, real.file, ppos, len, flags);
8118     +
8119     + file_end_write(real.file);
8120     + /* Update size */
8121     + ovl_copyattr(realinode, inode);
8122     + revert_creds(old_cred);
8123     + fdput(real);
8124     +
8125     +out_unlock:
8126     + inode_unlock(inode);
8127     +
8128     + return ret;
8129     +}
8130     +
8131     static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync)
8132     {
8133     struct fd real;
8134     @@ -653,7 +698,7 @@ const struct file_operations ovl_file_operations = {
8135     .unlocked_ioctl = ovl_ioctl,
8136     .compat_ioctl = ovl_compat_ioctl,
8137     .splice_read = generic_file_splice_read,
8138     - .splice_write = iter_file_splice_write,
8139     + .splice_write = ovl_splice_write,
8140    
8141     .copy_file_range = ovl_copy_file_range,
8142     .remap_file_range = ovl_remap_file_range,
8143     diff --git a/fs/quota/quota_tree.c b/fs/quota/quota_tree.c
8144     index c5562c871c8be..1a188fbdf34e5 100644
8145     --- a/fs/quota/quota_tree.c
8146     +++ b/fs/quota/quota_tree.c
8147     @@ -423,6 +423,7 @@ static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot,
8148     quota_error(dquot->dq_sb, "Quota structure has offset to "
8149     "other block (%u) than it should (%u)", blk,
8150     (uint)(dquot->dq_off >> info->dqi_blocksize_bits));
8151     + ret = -EIO;
8152     goto out_buf;
8153     }
8154     ret = read_blk(info, blk, buf);
8155     @@ -488,6 +489,13 @@ static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
8156     goto out_buf;
8157     }
8158     newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
8159     + if (newblk < QT_TREEOFF || newblk >= info->dqi_blocks) {
8160     + quota_error(dquot->dq_sb, "Getting block too big (%u >= %u)",
8161     + newblk, info->dqi_blocks);
8162     + ret = -EUCLEAN;
8163     + goto out_buf;
8164     + }
8165     +
8166     if (depth == info->dqi_qtree_depth - 1) {
8167     ret = free_dqentry(info, dquot, newblk);
8168     newblk = 0;
8169     @@ -587,6 +595,13 @@ static loff_t find_tree_dqentry(struct qtree_mem_dqinfo *info,
8170     blk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
8171     if (!blk) /* No reference? */
8172     goto out_buf;
8173     + if (blk < QT_TREEOFF || blk >= info->dqi_blocks) {
8174     + quota_error(dquot->dq_sb, "Getting block too big (%u >= %u)",
8175     + blk, info->dqi_blocks);
8176     + ret = -EUCLEAN;
8177     + goto out_buf;
8178     + }
8179     +
8180     if (depth < info->dqi_qtree_depth - 1)
8181     ret = find_tree_dqentry(info, dquot, blk, depth+1);
8182     else
8183     diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
8184     index 0caa151cae4ee..efe078fe5d4a9 100644
8185     --- a/fs/tracefs/inode.c
8186     +++ b/fs/tracefs/inode.c
8187     @@ -427,7 +427,8 @@ static struct dentry *__create_dir(const char *name, struct dentry *parent,
8188     if (unlikely(!inode))
8189     return failed_creating(dentry);
8190    
8191     - inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
8192     + /* Do not set bits for OTH */
8193     + inode->i_mode = S_IFDIR | S_IRWXU | S_IRUSR| S_IRGRP | S_IXUSR | S_IXGRP;
8194     inode->i_op = ops;
8195     inode->i_fop = &simple_dir_operations;
8196    
8197     diff --git a/include/linux/console.h b/include/linux/console.h
8198     index d09951d5a94e4..d1d03c9c7a512 100644
8199     --- a/include/linux/console.h
8200     +++ b/include/linux/console.h
8201     @@ -153,6 +153,8 @@ struct console {
8202     short flags;
8203     short index;
8204     int cflag;
8205     + uint ispeed;
8206     + uint ospeed;
8207     void *data;
8208     struct console *next;
8209     };
8210     diff --git a/include/linux/filter.h b/include/linux/filter.h
8211     index c4f89340f4986..440014875acf4 100644
8212     --- a/include/linux/filter.h
8213     +++ b/include/linux/filter.h
8214     @@ -952,6 +952,7 @@ extern int bpf_jit_enable;
8215     extern int bpf_jit_harden;
8216     extern int bpf_jit_kallsyms;
8217     extern long bpf_jit_limit;
8218     +extern long bpf_jit_limit_max;
8219    
8220     typedef void (*bpf_jit_fill_hole_t)(void *area, unsigned int size);
8221    
8222     diff --git a/include/linux/libata.h b/include/linux/libata.h
8223     index 3d5adbaf8214f..2e448d65a04c7 100644
8224     --- a/include/linux/libata.h
8225     +++ b/include/linux/libata.h
8226     @@ -391,7 +391,7 @@ enum {
8227     /* This should match the actual table size of
8228     * ata_eh_cmd_timeout_table in libata-eh.c.
8229     */
8230     - ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6,
8231     + ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 7,
8232    
8233     /* Horkage types. May be set by libata or controller on drives
8234     (some horkage may be drive/controller pair dependent */
8235     diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
8236     index a3763247547c3..a21dc5413653e 100644
8237     --- a/include/linux/lsm_hooks.h
8238     +++ b/include/linux/lsm_hooks.h
8239     @@ -1241,22 +1241,22 @@
8240     *
8241     * @binder_set_context_mgr:
8242     * Check whether @mgr is allowed to be the binder context manager.
8243     - * @mgr contains the task_struct for the task being registered.
8244     + * @mgr contains the struct cred for the current binder process.
8245     * Return 0 if permission is granted.
8246     * @binder_transaction:
8247     * Check whether @from is allowed to invoke a binder transaction call
8248     * to @to.
8249     - * @from contains the task_struct for the sending task.
8250     - * @to contains the task_struct for the receiving task.
8251     + * @from contains the struct cred for the sending process.
8252     + * @to contains the struct cred for the receiving process.
8253     * @binder_transfer_binder:
8254     * Check whether @from is allowed to transfer a binder reference to @to.
8255     - * @from contains the task_struct for the sending task.
8256     - * @to contains the task_struct for the receiving task.
8257     + * @from contains the struct cred for the sending process.
8258     + * @to contains the struct cred for the receiving process.
8259     * @binder_transfer_file:
8260     * Check whether @from is allowed to transfer @file to @to.
8261     - * @from contains the task_struct for the sending task.
8262     + * @from contains the struct cred for the sending process.
8263     * @file contains the struct file being transferred.
8264     - * @to contains the task_struct for the receiving task.
8265     + * @to contains the struct cred for the receiving process.
8266     *
8267     * @ptrace_access_check:
8268     * Check permission before allowing the current process to trace the
8269     @@ -1456,13 +1456,13 @@
8270     * @what: kernel feature being accessed
8271     */
8272     union security_list_options {
8273     - int (*binder_set_context_mgr)(struct task_struct *mgr);
8274     - int (*binder_transaction)(struct task_struct *from,
8275     - struct task_struct *to);
8276     - int (*binder_transfer_binder)(struct task_struct *from,
8277     - struct task_struct *to);
8278     - int (*binder_transfer_file)(struct task_struct *from,
8279     - struct task_struct *to,
8280     + int (*binder_set_context_mgr)(const struct cred *mgr);
8281     + int (*binder_transaction)(const struct cred *from,
8282     + const struct cred *to);
8283     + int (*binder_transfer_binder)(const struct cred *from,
8284     + const struct cred *to);
8285     + int (*binder_transfer_file)(const struct cred *from,
8286     + const struct cred *to,
8287     struct file *file);
8288    
8289     int (*ptrace_access_check)(struct task_struct *child,
8290     diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
8291     index 9fe156d1c018e..a68972b097b72 100644
8292     --- a/include/linux/rpmsg.h
8293     +++ b/include/linux/rpmsg.h
8294     @@ -177,7 +177,7 @@ static inline struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *rpdev
8295     /* This shouldn't be possible */
8296     WARN_ON(1);
8297    
8298     - return ERR_PTR(-ENXIO);
8299     + return NULL;
8300     }
8301    
8302     static inline int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
8303     diff --git a/include/linux/sched/task_stack.h b/include/linux/sched/task_stack.h
8304     index 2413427e439c7..d10150587d819 100644
8305     --- a/include/linux/sched/task_stack.h
8306     +++ b/include/linux/sched/task_stack.h
8307     @@ -25,7 +25,11 @@ static inline void *task_stack_page(const struct task_struct *task)
8308    
8309     static inline unsigned long *end_of_stack(const struct task_struct *task)
8310     {
8311     +#ifdef CONFIG_STACK_GROWSUP
8312     + return (unsigned long *)((unsigned long)task->stack + THREAD_SIZE) - 1;
8313     +#else
8314     return task->stack;
8315     +#endif
8316     }
8317    
8318     #elif !defined(__HAVE_THREAD_FUNCTIONS)
8319     diff --git a/include/linux/security.h b/include/linux/security.h
8320     index df90399a8af98..3f6b8195ae9eb 100644
8321     --- a/include/linux/security.h
8322     +++ b/include/linux/security.h
8323     @@ -249,13 +249,13 @@ extern int security_init(void);
8324     extern int early_security_init(void);
8325    
8326     /* Security operations */
8327     -int security_binder_set_context_mgr(struct task_struct *mgr);
8328     -int security_binder_transaction(struct task_struct *from,
8329     - struct task_struct *to);
8330     -int security_binder_transfer_binder(struct task_struct *from,
8331     - struct task_struct *to);
8332     -int security_binder_transfer_file(struct task_struct *from,
8333     - struct task_struct *to, struct file *file);
8334     +int security_binder_set_context_mgr(const struct cred *mgr);
8335     +int security_binder_transaction(const struct cred *from,
8336     + const struct cred *to);
8337     +int security_binder_transfer_binder(const struct cred *from,
8338     + const struct cred *to);
8339     +int security_binder_transfer_file(const struct cred *from,
8340     + const struct cred *to, struct file *file);
8341     int security_ptrace_access_check(struct task_struct *child, unsigned int mode);
8342     int security_ptrace_traceme(struct task_struct *parent);
8343     int security_capget(struct task_struct *target,
8344     @@ -481,25 +481,25 @@ static inline int early_security_init(void)
8345     return 0;
8346     }
8347    
8348     -static inline int security_binder_set_context_mgr(struct task_struct *mgr)
8349     +static inline int security_binder_set_context_mgr(const struct cred *mgr)
8350     {
8351     return 0;
8352     }
8353    
8354     -static inline int security_binder_transaction(struct task_struct *from,
8355     - struct task_struct *to)
8356     +static inline int security_binder_transaction(const struct cred *from,
8357     + const struct cred *to)
8358     {
8359     return 0;
8360     }
8361    
8362     -static inline int security_binder_transfer_binder(struct task_struct *from,
8363     - struct task_struct *to)
8364     +static inline int security_binder_transfer_binder(const struct cred *from,
8365     + const struct cred *to)
8366     {
8367     return 0;
8368     }
8369    
8370     -static inline int security_binder_transfer_file(struct task_struct *from,
8371     - struct task_struct *to,
8372     +static inline int security_binder_transfer_file(const struct cred *from,
8373     + const struct cred *to,
8374     struct file *file)
8375     {
8376     return 0;
8377     @@ -985,6 +985,11 @@ static inline void security_transfer_creds(struct cred *new,
8378     {
8379     }
8380    
8381     +static inline void security_cred_getsecid(const struct cred *c, u32 *secid)
8382     +{
8383     + *secid = 0;
8384     +}
8385     +
8386     static inline int security_kernel_act_as(struct cred *cred, u32 secid)
8387     {
8388     return 0;
8389     diff --git a/include/net/llc.h b/include/net/llc.h
8390     index df282d9b40170..9c10b121b49b0 100644
8391     --- a/include/net/llc.h
8392     +++ b/include/net/llc.h
8393     @@ -72,7 +72,9 @@ struct llc_sap {
8394     static inline
8395     struct hlist_head *llc_sk_dev_hash(struct llc_sap *sap, int ifindex)
8396     {
8397     - return &sap->sk_dev_hash[ifindex % LLC_SK_DEV_HASH_ENTRIES];
8398     + u32 bucket = hash_32(ifindex, LLC_SK_DEV_HASH_BITS);
8399     +
8400     + return &sap->sk_dev_hash[bucket];
8401     }
8402    
8403     static inline
8404     diff --git a/include/net/neighbour.h b/include/net/neighbour.h
8405     index 2be8d6b0dfb69..b6494e87c897c 100644
8406     --- a/include/net/neighbour.h
8407     +++ b/include/net/neighbour.h
8408     @@ -253,6 +253,7 @@ static inline void *neighbour_priv(const struct neighbour *n)
8409     #define NEIGH_UPDATE_F_OVERRIDE 0x00000001
8410     #define NEIGH_UPDATE_F_WEAK_OVERRIDE 0x00000002
8411     #define NEIGH_UPDATE_F_OVERRIDE_ISROUTER 0x00000004
8412     +#define NEIGH_UPDATE_F_USE 0x10000000
8413     #define NEIGH_UPDATE_F_EXT_LEARNED 0x20000000
8414     #define NEIGH_UPDATE_F_ISROUTER 0x40000000
8415     #define NEIGH_UPDATE_F_ADMIN 0x80000000
8416     @@ -505,10 +506,15 @@ static inline int neigh_output(struct neighbour *n, struct sk_buff *skb,
8417     {
8418     const struct hh_cache *hh = &n->hh;
8419    
8420     - if ((n->nud_state & NUD_CONNECTED) && hh->hh_len && !skip_cache)
8421     + /* n->nud_state and hh->hh_len could be changed under us.
8422     + * neigh_hh_output() is taking care of the race later.
8423     + */
8424     + if (!skip_cache &&
8425     + (READ_ONCE(n->nud_state) & NUD_CONNECTED) &&
8426     + READ_ONCE(hh->hh_len))
8427     return neigh_hh_output(hh, skb);
8428     - else
8429     - return n->output(n, skb);
8430     +
8431     + return n->output(n, skb);
8432     }
8433    
8434     static inline struct neighbour *
8435     diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
8436     index 0cb0a4bcb5447..939fda8f97215 100644
8437     --- a/include/net/sch_generic.h
8438     +++ b/include/net/sch_generic.h
8439     @@ -299,6 +299,8 @@ struct Qdisc_ops {
8440     struct netlink_ext_ack *extack);
8441     void (*attach)(struct Qdisc *sch);
8442     int (*change_tx_queue_len)(struct Qdisc *, unsigned int);
8443     + void (*change_real_num_tx)(struct Qdisc *sch,
8444     + unsigned int new_real_tx);
8445    
8446     int (*dump)(struct Qdisc *, struct sk_buff *);
8447     int (*dump_stats)(struct Qdisc *, struct gnet_dump *);
8448     @@ -675,6 +677,8 @@ void qdisc_class_hash_grow(struct Qdisc *, struct Qdisc_class_hash *);
8449     void qdisc_class_hash_destroy(struct Qdisc_class_hash *);
8450    
8451     int dev_qdisc_change_tx_queue_len(struct net_device *dev);
8452     +void dev_qdisc_change_real_num_tx(struct net_device *dev,
8453     + unsigned int new_real_tx);
8454     void dev_init_scheduler(struct net_device *dev);
8455     void dev_shutdown(struct net_device *dev);
8456     void dev_activate(struct net_device *dev);
8457     diff --git a/include/net/strparser.h b/include/net/strparser.h
8458     index 1d20b98493a10..bec1439bd3be6 100644
8459     --- a/include/net/strparser.h
8460     +++ b/include/net/strparser.h
8461     @@ -54,10 +54,24 @@ struct strp_msg {
8462     int offset;
8463     };
8464    
8465     +struct _strp_msg {
8466     + /* Internal cb structure. struct strp_msg must be first for passing
8467     + * to upper layer.
8468     + */
8469     + struct strp_msg strp;
8470     + int accum_len;
8471     +};
8472     +
8473     +struct sk_skb_cb {
8474     +#define SK_SKB_CB_PRIV_LEN 20
8475     + unsigned char data[SK_SKB_CB_PRIV_LEN];
8476     + struct _strp_msg strp;
8477     +};
8478     +
8479     static inline struct strp_msg *strp_msg(struct sk_buff *skb)
8480     {
8481     return (struct strp_msg *)((void *)skb->cb +
8482     - offsetof(struct qdisc_skb_cb, data));
8483     + offsetof(struct sk_skb_cb, strp));
8484     }
8485    
8486     /* Structure for an attached lower socket */
8487     diff --git a/include/net/udp.h b/include/net/udp.h
8488     index fabf507bce5d1..d9d39cc20a847 100644
8489     --- a/include/net/udp.h
8490     +++ b/include/net/udp.h
8491     @@ -480,8 +480,9 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk,
8492     * CHECKSUM_NONE in __udp_gso_segment. UDP GRO indeed builds partial
8493     * packets in udp_gro_complete_segment. As does UDP GSO, verified by
8494     * udp_send_skb. But when those packets are looped in dev_loopback_xmit
8495     - * their ip_summed is set to CHECKSUM_UNNECESSARY. Reset in this
8496     - * specific case, where PARTIAL is both correct and required.
8497     + * their ip_summed CHECKSUM_NONE is changed to CHECKSUM_UNNECESSARY.
8498     + * Reset in this specific case, where PARTIAL is both correct and
8499     + * required.
8500     */
8501     if (skb->pkt_type == PACKET_LOOPBACK)
8502     skb->ip_summed = CHECKSUM_PARTIAL;
8503     diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h
8504     index 29d6e93fd15e3..b485d8b0d5a79 100644
8505     --- a/include/uapi/linux/pci_regs.h
8506     +++ b/include/uapi/linux/pci_regs.h
8507     @@ -502,6 +502,12 @@
8508     #define PCI_EXP_DEVCTL_URRE 0x0008 /* Unsupported Request Reporting En. */
8509     #define PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
8510     #define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */
8511     +#define PCI_EXP_DEVCTL_PAYLOAD_128B 0x0000 /* 128 Bytes */
8512     +#define PCI_EXP_DEVCTL_PAYLOAD_256B 0x0020 /* 256 Bytes */
8513     +#define PCI_EXP_DEVCTL_PAYLOAD_512B 0x0040 /* 512 Bytes */
8514     +#define PCI_EXP_DEVCTL_PAYLOAD_1024B 0x0060 /* 1024 Bytes */
8515     +#define PCI_EXP_DEVCTL_PAYLOAD_2048B 0x0080 /* 2048 Bytes */
8516     +#define PCI_EXP_DEVCTL_PAYLOAD_4096B 0x00a0 /* 4096 Bytes */
8517     #define PCI_EXP_DEVCTL_EXT_TAG 0x0100 /* Extended Tag Field Enable */
8518     #define PCI_EXP_DEVCTL_PHANTOM 0x0200 /* Phantom Functions Enable */
8519     #define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
8520     diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
8521     index d9a3d995bd966..1238ef9c569df 100644
8522     --- a/kernel/bpf/core.c
8523     +++ b/kernel/bpf/core.c
8524     @@ -523,6 +523,7 @@ int bpf_jit_enable __read_mostly = IS_BUILTIN(CONFIG_BPF_JIT_ALWAYS_ON);
8525     int bpf_jit_harden __read_mostly;
8526     int bpf_jit_kallsyms __read_mostly;
8527     long bpf_jit_limit __read_mostly;
8528     +long bpf_jit_limit_max __read_mostly;
8529    
8530     static __always_inline void
8531     bpf_get_prog_addr_region(const struct bpf_prog *prog,
8532     @@ -759,7 +760,8 @@ u64 __weak bpf_jit_alloc_exec_limit(void)
8533     static int __init bpf_jit_charge_init(void)
8534     {
8535     /* Only used as heuristic here to derive limit. */
8536     - bpf_jit_limit = min_t(u64, round_up(bpf_jit_alloc_exec_limit() >> 2,
8537     + bpf_jit_limit_max = bpf_jit_alloc_exec_limit();
8538     + bpf_jit_limit = min_t(u64, round_up(bpf_jit_limit_max >> 2,
8539     PAGE_SIZE), LONG_MAX);
8540     return 0;
8541     }
8542     diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
8543     index ede370ec245d9..1904ffcee0f1e 100644
8544     --- a/kernel/cgroup/cgroup.c
8545     +++ b/kernel/cgroup/cgroup.c
8546     @@ -1721,6 +1721,7 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask)
8547     struct cgroup *dcgrp = &dst_root->cgrp;
8548     struct cgroup_subsys *ss;
8549     int ssid, i, ret;
8550     + u16 dfl_disable_ss_mask = 0;
8551    
8552     lockdep_assert_held(&cgroup_mutex);
8553    
8554     @@ -1737,8 +1738,28 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask)
8555     /* can't move between two non-dummy roots either */
8556     if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root)
8557     return -EBUSY;
8558     +
8559     + /*
8560     + * Collect ssid's that need to be disabled from default
8561     + * hierarchy.
8562     + */
8563     + if (ss->root == &cgrp_dfl_root)
8564     + dfl_disable_ss_mask |= 1 << ssid;
8565     +
8566     } while_each_subsys_mask();
8567    
8568     + if (dfl_disable_ss_mask) {
8569     + struct cgroup *scgrp = &cgrp_dfl_root.cgrp;
8570     +
8571     + /*
8572     + * Controllers from default hierarchy that need to be rebound
8573     + * are all disabled together in one go.
8574     + */
8575     + cgrp_dfl_root.subsys_mask &= ~dfl_disable_ss_mask;
8576     + WARN_ON(cgroup_apply_control(scgrp));
8577     + cgroup_finalize_control(scgrp, 0);
8578     + }
8579     +
8580     do_each_subsys_mask(ss, ssid, ss_mask) {
8581     struct cgroup_root *src_root = ss->root;
8582     struct cgroup *scgrp = &src_root->cgrp;
8583     @@ -1747,10 +1768,12 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask)
8584    
8585     WARN_ON(!css || cgroup_css(dcgrp, ss));
8586    
8587     - /* disable from the source */
8588     - src_root->subsys_mask &= ~(1 << ssid);
8589     - WARN_ON(cgroup_apply_control(scgrp));
8590     - cgroup_finalize_control(scgrp, 0);
8591     + if (src_root != &cgrp_dfl_root) {
8592     + /* disable from the source */
8593     + src_root->subsys_mask &= ~(1 << ssid);
8594     + WARN_ON(cgroup_apply_control(scgrp));
8595     + cgroup_finalize_control(scgrp, 0);
8596     + }
8597    
8598     /* rebind */
8599     RCU_INIT_POINTER(scgrp->subsys[ssid], NULL);
8600     diff --git a/kernel/kprobes.c b/kernel/kprobes.c
8601     index a7812c115e487..1668439b269d3 100644
8602     --- a/kernel/kprobes.c
8603     +++ b/kernel/kprobes.c
8604     @@ -2712,14 +2712,13 @@ static const struct file_operations fops_kp = {
8605     static int __init debugfs_kprobe_init(void)
8606     {
8607     struct dentry *dir;
8608     - unsigned int value = 1;
8609    
8610     dir = debugfs_create_dir("kprobes", NULL);
8611    
8612     debugfs_create_file("list", 0400, dir, NULL,
8613     &debugfs_kprobes_operations);
8614    
8615     - debugfs_create_file("enabled", 0600, dir, &value, &fops_kp);
8616     + debugfs_create_file("enabled", 0600, dir, NULL, &fops_kp);
8617    
8618     debugfs_create_file("blacklist", 0400, dir, NULL,
8619     &debugfs_kprobe_blacklist_ops);
8620     diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
8621     index 3ec8fd2e80e53..db109d38f301e 100644
8622     --- a/kernel/locking/lockdep.c
8623     +++ b/kernel/locking/lockdep.c
8624     @@ -830,7 +830,7 @@ look_up_lock_class(const struct lockdep_map *lock, unsigned int subclass)
8625     if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
8626     return NULL;
8627    
8628     - hlist_for_each_entry_rcu(class, hash_head, hash_entry) {
8629     + hlist_for_each_entry_rcu_notrace(class, hash_head, hash_entry) {
8630     if (class->key == key) {
8631     /*
8632     * Huh! same key, different name? Did someone trample
8633     diff --git a/kernel/power/swap.c b/kernel/power/swap.c
8634     index 0516c422206d8..bcc9769e8a3b5 100644
8635     --- a/kernel/power/swap.c
8636     +++ b/kernel/power/swap.c
8637     @@ -292,7 +292,7 @@ static int hib_submit_io(int op, int op_flags, pgoff_t page_off, void *addr,
8638     return error;
8639     }
8640    
8641     -static blk_status_t hib_wait_io(struct hib_bio_batch *hb)
8642     +static int hib_wait_io(struct hib_bio_batch *hb)
8643     {
8644     wait_event(hb->wait, atomic_read(&hb->count) == 0);
8645     return blk_status_to_errno(hb->error);
8646     @@ -1509,9 +1509,10 @@ end:
8647     int swsusp_check(void)
8648     {
8649     int error;
8650     + void *holder;
8651    
8652     hib_resume_bdev = blkdev_get_by_dev(swsusp_resume_device,
8653     - FMODE_READ, NULL);
8654     + FMODE_READ | FMODE_EXCL, &holder);
8655     if (!IS_ERR(hib_resume_bdev)) {
8656     set_blocksize(hib_resume_bdev, PAGE_SIZE);
8657     clear_page(swsusp_header);
8658     @@ -1533,7 +1534,7 @@ int swsusp_check(void)
8659    
8660     put:
8661     if (error)
8662     - blkdev_put(hib_resume_bdev, FMODE_READ);
8663     + blkdev_put(hib_resume_bdev, FMODE_READ | FMODE_EXCL);
8664     else
8665     pr_debug("Image signature found, resuming\n");
8666     } else {
8667     diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
8668     index df90d4d7ad2e2..4c4d7683a4e5b 100644
8669     --- a/kernel/rcu/tree_exp.h
8670     +++ b/kernel/rcu/tree_exp.h
8671     @@ -738,7 +738,7 @@ static void sync_sched_exp_online_cleanup(int cpu)
8672     my_cpu = get_cpu();
8673     /* Quiescent state either not needed or already requested, leave. */
8674     if (!(READ_ONCE(rnp->expmask) & rdp->grpmask) ||
8675     - __this_cpu_read(rcu_data.cpu_no_qs.b.exp)) {
8676     + rdp->cpu_no_qs.b.exp) {
8677     put_cpu();
8678     return;
8679     }
8680     diff --git a/kernel/signal.c b/kernel/signal.c
8681     index 8c97fc72d78bd..3f61367fd1685 100644
8682     --- a/kernel/signal.c
8683     +++ b/kernel/signal.c
8684     @@ -2101,15 +2101,6 @@ static inline bool may_ptrace_stop(void)
8685     return true;
8686     }
8687    
8688     -/*
8689     - * Return non-zero if there is a SIGKILL that should be waking us up.
8690     - * Called with the siglock held.
8691     - */
8692     -static bool sigkill_pending(struct task_struct *tsk)
8693     -{
8694     - return sigismember(&tsk->pending.signal, SIGKILL) ||
8695     - sigismember(&tsk->signal->shared_pending.signal, SIGKILL);
8696     -}
8697    
8698     /*
8699     * This must be called with current->sighand->siglock held.
8700     @@ -2136,17 +2127,16 @@ static void ptrace_stop(int exit_code, int why, int clear_code, kernel_siginfo_t
8701     * calling arch_ptrace_stop, so we must release it now.
8702     * To preserve proper semantics, we must do this before
8703     * any signal bookkeeping like checking group_stop_count.
8704     - * Meanwhile, a SIGKILL could come in before we retake the
8705     - * siglock. That must prevent us from sleeping in TASK_TRACED.
8706     - * So after regaining the lock, we must check for SIGKILL.
8707     */
8708     spin_unlock_irq(&current->sighand->siglock);
8709     arch_ptrace_stop(exit_code, info);
8710     spin_lock_irq(&current->sighand->siglock);
8711     - if (sigkill_pending(current))
8712     - return;
8713     }
8714    
8715     + /*
8716     + * schedule() will not sleep if there is a pending signal that
8717     + * can awaken the task.
8718     + */
8719     set_special_state(TASK_TRACED);
8720    
8721     /*
8722     diff --git a/kernel/trace/tracing_map.c b/kernel/trace/tracing_map.c
8723     index 9e31bfc818ff8..10657b8dc2c2d 100644
8724     --- a/kernel/trace/tracing_map.c
8725     +++ b/kernel/trace/tracing_map.c
8726     @@ -834,29 +834,35 @@ int tracing_map_init(struct tracing_map *map)
8727     return err;
8728     }
8729    
8730     -static int cmp_entries_dup(const struct tracing_map_sort_entry **a,
8731     - const struct tracing_map_sort_entry **b)
8732     +static int cmp_entries_dup(const void *A, const void *B)
8733     {
8734     + const struct tracing_map_sort_entry *a, *b;
8735     int ret = 0;
8736    
8737     - if (memcmp((*a)->key, (*b)->key, (*a)->elt->map->key_size))
8738     + a = *(const struct tracing_map_sort_entry **)A;
8739     + b = *(const struct tracing_map_sort_entry **)B;
8740     +
8741     + if (memcmp(a->key, b->key, a->elt->map->key_size))
8742     ret = 1;
8743    
8744     return ret;
8745     }
8746    
8747     -static int cmp_entries_sum(const struct tracing_map_sort_entry **a,
8748     - const struct tracing_map_sort_entry **b)
8749     +static int cmp_entries_sum(const void *A, const void *B)
8750     {
8751     const struct tracing_map_elt *elt_a, *elt_b;
8752     + const struct tracing_map_sort_entry *a, *b;
8753     struct tracing_map_sort_key *sort_key;
8754     struct tracing_map_field *field;
8755     tracing_map_cmp_fn_t cmp_fn;
8756     void *val_a, *val_b;
8757     int ret = 0;
8758    
8759     - elt_a = (*a)->elt;
8760     - elt_b = (*b)->elt;
8761     + a = *(const struct tracing_map_sort_entry **)A;
8762     + b = *(const struct tracing_map_sort_entry **)B;
8763     +
8764     + elt_a = a->elt;
8765     + elt_b = b->elt;
8766    
8767     sort_key = &elt_a->map->sort_key;
8768    
8769     @@ -873,18 +879,21 @@ static int cmp_entries_sum(const struct tracing_map_sort_entry **a,
8770     return ret;
8771     }
8772    
8773     -static int cmp_entries_key(const struct tracing_map_sort_entry **a,
8774     - const struct tracing_map_sort_entry **b)
8775     +static int cmp_entries_key(const void *A, const void *B)
8776     {
8777     const struct tracing_map_elt *elt_a, *elt_b;
8778     + const struct tracing_map_sort_entry *a, *b;
8779     struct tracing_map_sort_key *sort_key;
8780     struct tracing_map_field *field;
8781     tracing_map_cmp_fn_t cmp_fn;
8782     void *val_a, *val_b;
8783     int ret = 0;
8784    
8785     - elt_a = (*a)->elt;
8786     - elt_b = (*b)->elt;
8787     + a = *(const struct tracing_map_sort_entry **)A;
8788     + b = *(const struct tracing_map_sort_entry **)B;
8789     +
8790     + elt_a = a->elt;
8791     + elt_b = b->elt;
8792    
8793     sort_key = &elt_a->map->sort_key;
8794    
8795     @@ -989,10 +998,8 @@ static void sort_secondary(struct tracing_map *map,
8796     struct tracing_map_sort_key *primary_key,
8797     struct tracing_map_sort_key *secondary_key)
8798     {
8799     - int (*primary_fn)(const struct tracing_map_sort_entry **,
8800     - const struct tracing_map_sort_entry **);
8801     - int (*secondary_fn)(const struct tracing_map_sort_entry **,
8802     - const struct tracing_map_sort_entry **);
8803     + int (*primary_fn)(const void *, const void *);
8804     + int (*secondary_fn)(const void *, const void *);
8805     unsigned i, start = 0, n_sub = 1;
8806    
8807     if (is_key(map, primary_key->field_idx))
8808     @@ -1061,8 +1068,7 @@ int tracing_map_sort_entries(struct tracing_map *map,
8809     unsigned int n_sort_keys,
8810     struct tracing_map_sort_entry ***sort_entries)
8811     {
8812     - int (*cmp_entries_fn)(const struct tracing_map_sort_entry **,
8813     - const struct tracing_map_sort_entry **);
8814     + int (*cmp_entries_fn)(const void *, const void *);
8815     struct tracing_map_sort_entry *sort_entry, **entries;
8816     int i, n_entries, ret;
8817    
8818     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
8819     index 885d4792abdfc..77e6964ae1a99 100644
8820     --- a/kernel/workqueue.c
8821     +++ b/kernel/workqueue.c
8822     @@ -5302,9 +5302,6 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
8823     int ret = -EINVAL;
8824     cpumask_var_t saved_cpumask;
8825    
8826     - if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL))
8827     - return -ENOMEM;
8828     -
8829     /*
8830     * Not excluding isolated cpus on purpose.
8831     * If the user wishes to include them, we allow that.
8832     @@ -5312,6 +5309,15 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
8833     cpumask_and(cpumask, cpumask, cpu_possible_mask);
8834     if (!cpumask_empty(cpumask)) {
8835     apply_wqattrs_lock();
8836     + if (cpumask_equal(cpumask, wq_unbound_cpumask)) {
8837     + ret = 0;
8838     + goto out_unlock;
8839     + }
8840     +
8841     + if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL)) {
8842     + ret = -ENOMEM;
8843     + goto out_unlock;
8844     + }
8845    
8846     /* save the old wq_unbound_cpumask. */
8847     cpumask_copy(saved_cpumask, wq_unbound_cpumask);
8848     @@ -5324,10 +5330,11 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
8849     if (ret < 0)
8850     cpumask_copy(wq_unbound_cpumask, saved_cpumask);
8851    
8852     + free_cpumask_var(saved_cpumask);
8853     +out_unlock:
8854     apply_wqattrs_unlock();
8855     }
8856    
8857     - free_cpumask_var(saved_cpumask);
8858     return ret;
8859     }
8860    
8861     diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
8862     index 25d59a95bd668..abea25310ac73 100644
8863     --- a/lib/decompress_unxz.c
8864     +++ b/lib/decompress_unxz.c
8865     @@ -167,7 +167,7 @@
8866     * memeq and memzero are not used much and any remotely sane implementation
8867     * is fast enough. memcpy/memmove speed matters in multi-call mode, but
8868     * the kernel image is decompressed in single-call mode, in which only
8869     - * memcpy speed can matter and only if there is a lot of uncompressible data
8870     + * memmove speed can matter and only if there is a lot of uncompressible data
8871     * (LZMA2 stores uncompressible chunks in uncompressed form). Thus, the
8872     * functions below should just be kept small; it's probably not worth
8873     * optimizing for speed.
8874     diff --git a/lib/iov_iter.c b/lib/iov_iter.c
8875     index 41b06af195368..957e3e58df652 100644
8876     --- a/lib/iov_iter.c
8877     +++ b/lib/iov_iter.c
8878     @@ -1302,7 +1302,7 @@ ssize_t iov_iter_get_pages(struct iov_iter *i,
8879     res = get_user_pages_fast(addr, n,
8880     iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0,
8881     pages);
8882     - if (unlikely(res < 0))
8883     + if (unlikely(res <= 0))
8884     return res;
8885     return (res == n ? len : res * PAGE_SIZE) - *start;
8886     0;}),({
8887     @@ -1384,8 +1384,9 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
8888     return -ENOMEM;
8889     res = get_user_pages_fast(addr, n,
8890     iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0, p);
8891     - if (unlikely(res < 0)) {
8892     + if (unlikely(res <= 0)) {
8893     kvfree(p);
8894     + *pages = NULL;
8895     return res;
8896     }
8897     *pages = p;
8898     diff --git a/lib/xz/xz_dec_lzma2.c b/lib/xz/xz_dec_lzma2.c
8899     index 156f26fdc4c91..dd80989ca5a6b 100644
8900     --- a/lib/xz/xz_dec_lzma2.c
8901     +++ b/lib/xz/xz_dec_lzma2.c
8902     @@ -387,7 +387,14 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
8903    
8904     *left -= copy_size;
8905    
8906     - memcpy(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
8907     + /*
8908     + * If doing in-place decompression in single-call mode and the
8909     + * uncompressed size of the file is larger than the caller
8910     + * thought (i.e. it is invalid input!), the buffers below may
8911     + * overlap and cause undefined behavior with memcpy().
8912     + * With valid inputs memcpy() would be fine here.
8913     + */
8914     + memmove(dict->buf + dict->pos, b->in + b->in_pos, copy_size);
8915     dict->pos += copy_size;
8916    
8917     if (dict->full < dict->pos)
8918     @@ -397,7 +404,11 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
8919     if (dict->pos == dict->end)
8920     dict->pos = 0;
8921    
8922     - memcpy(b->out + b->out_pos, b->in + b->in_pos,
8923     + /*
8924     + * Like above but for multi-call mode: use memmove()
8925     + * to avoid undefined behavior with invalid input.
8926     + */
8927     + memmove(b->out + b->out_pos, b->in + b->in_pos,
8928     copy_size);
8929     }
8930    
8931     @@ -421,6 +432,12 @@ static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b)
8932     if (dict->pos == dict->end)
8933     dict->pos = 0;
8934    
8935     + /*
8936     + * These buffers cannot overlap even if doing in-place
8937     + * decompression because in multi-call mode dict->buf
8938     + * has been allocated by us in this file; it's not
8939     + * provided by the caller like in single-call mode.
8940     + */
8941     memcpy(b->out + b->out_pos, dict->buf + dict->start,
8942     copy_size);
8943     }
8944     diff --git a/lib/xz/xz_dec_stream.c b/lib/xz/xz_dec_stream.c
8945     index bd1d182419d7e..0b161f90d8d80 100644
8946     --- a/lib/xz/xz_dec_stream.c
8947     +++ b/lib/xz/xz_dec_stream.c
8948     @@ -402,12 +402,12 @@ static enum xz_ret dec_stream_header(struct xz_dec *s)
8949     * we will accept other check types too, but then the check won't
8950     * be verified and a warning (XZ_UNSUPPORTED_CHECK) will be given.
8951     */
8952     + if (s->temp.buf[HEADER_MAGIC_SIZE + 1] > XZ_CHECK_MAX)
8953     + return XZ_OPTIONS_ERROR;
8954     +
8955     s->check_type = s->temp.buf[HEADER_MAGIC_SIZE + 1];
8956    
8957     #ifdef XZ_DEC_ANY_CHECK
8958     - if (s->check_type > XZ_CHECK_MAX)
8959     - return XZ_OPTIONS_ERROR;
8960     -
8961     if (s->check_type > XZ_CHECK_CRC32)
8962     return XZ_UNSUPPORTED_CHECK;
8963     #else
8964     diff --git a/mm/oom_kill.c b/mm/oom_kill.c
8965     index f1b810ddf2327..dcbb9a28706fc 100644
8966     --- a/mm/oom_kill.c
8967     +++ b/mm/oom_kill.c
8968     @@ -1114,25 +1114,22 @@ bool out_of_memory(struct oom_control *oc)
8969     }
8970    
8971     /*
8972     - * The pagefault handler calls here because it is out of memory, so kill a
8973     - * memory-hogging task. If oom_lock is held by somebody else, a parallel oom
8974     - * killing is already in progress so do nothing.
8975     + * The pagefault handler calls here because some allocation has failed. We have
8976     + * to take care of the memcg OOM here because this is the only safe context without
8977     + * any locks held but let the oom killer triggered from the allocation context care
8978     + * about the global OOM.
8979     */
8980     void pagefault_out_of_memory(void)
8981     {
8982     - struct oom_control oc = {
8983     - .zonelist = NULL,
8984     - .nodemask = NULL,
8985     - .memcg = NULL,
8986     - .gfp_mask = 0,
8987     - .order = 0,
8988     - };
8989     + static DEFINE_RATELIMIT_STATE(pfoom_rs, DEFAULT_RATELIMIT_INTERVAL,
8990     + DEFAULT_RATELIMIT_BURST);
8991    
8992     if (mem_cgroup_oom_synchronize(true))
8993     return;
8994    
8995     - if (!mutex_trylock(&oom_lock))
8996     + if (fatal_signal_pending(current))
8997     return;
8998     - out_of_memory(&oc);
8999     - mutex_unlock(&oom_lock);
9000     +
9001     + if (__ratelimit(&pfoom_rs))
9002     + pr_warn("Huh VM_FAULT_OOM leaked out to the #PF handler. Retrying PF\n");
9003     }
9004     diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
9005     index 443b3b1c95818..490e5f3ae614a 100644
9006     --- a/mm/zsmalloc.c
9007     +++ b/mm/zsmalloc.c
9008     @@ -1835,10 +1835,11 @@ static inline void zs_pool_dec_isolated(struct zs_pool *pool)
9009     VM_BUG_ON(atomic_long_read(&pool->isolated_pages) <= 0);
9010     atomic_long_dec(&pool->isolated_pages);
9011     /*
9012     - * There's no possibility of racing, since wait_for_isolated_drain()
9013     - * checks the isolated count under &class->lock after enqueuing
9014     - * on migration_wait.
9015     + * Checking pool->destroying must happen after atomic_long_dec()
9016     + * for pool->isolated_pages above. Paired with the smp_mb() in
9017     + * zs_unregister_migration().
9018     */
9019     + smp_mb__after_atomic();
9020     if (atomic_long_read(&pool->isolated_pages) == 0 && pool->destroying)
9021     wake_up_all(&pool->migration_wait);
9022     }
9023     diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
9024     index 3f47abf9ef4a6..cd7c0429cddf8 100644
9025     --- a/net/8021q/vlan.c
9026     +++ b/net/8021q/vlan.c
9027     @@ -116,9 +116,6 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
9028     }
9029    
9030     vlan_vid_del(real_dev, vlan->vlan_proto, vlan_id);
9031     -
9032     - /* Get rid of the vlan's reference to real_dev */
9033     - dev_put(real_dev);
9034     }
9035    
9036     int vlan_check_real_dev(struct net_device *real_dev,
9037     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
9038     index 2a78da4072de9..415a29d42cdf0 100644
9039     --- a/net/8021q/vlan_dev.c
9040     +++ b/net/8021q/vlan_dev.c
9041     @@ -790,6 +790,9 @@ static void vlan_dev_free(struct net_device *dev)
9042    
9043     free_percpu(vlan->vlan_pcpu_stats);
9044     vlan->vlan_pcpu_stats = NULL;
9045     +
9046     + /* Get rid of the vlan's reference to real_dev */
9047     + dev_put(vlan->real_dev);
9048     }
9049    
9050     void vlan_setup(struct net_device *dev)
9051     diff --git a/net/9p/client.c b/net/9p/client.c
9052     index 1d48afc7033ca..b03fce66eb8de 100644
9053     --- a/net/9p/client.c
9054     +++ b/net/9p/client.c
9055     @@ -538,6 +538,8 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
9056     kfree(ename);
9057     } else {
9058     err = p9pdu_readf(&req->rc, c->proto_version, "d", &ecode);
9059     + if (err)
9060     + goto out_err;
9061     err = -ecode;
9062    
9063     p9_debug(P9_DEBUG_9P, "<<< RLERROR (%d)\n", -ecode);
9064     diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
9065     index 82e76ff01267a..08e9f332adad3 100644
9066     --- a/net/bluetooth/l2cap_sock.c
9067     +++ b/net/bluetooth/l2cap_sock.c
9068     @@ -1347,6 +1347,9 @@ static void l2cap_sock_close_cb(struct l2cap_chan *chan)
9069     {
9070     struct sock *sk = chan->data;
9071    
9072     + if (!sk)
9073     + return;
9074     +
9075     l2cap_sock_kill(sk);
9076     }
9077    
9078     @@ -1355,6 +1358,9 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
9079     struct sock *sk = chan->data;
9080     struct sock *parent;
9081    
9082     + if (!sk)
9083     + return;
9084     +
9085     BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
9086    
9087     /* This callback can be called both for server (BT_LISTEN)
9088     @@ -1538,8 +1544,10 @@ static void l2cap_sock_destruct(struct sock *sk)
9089     {
9090     BT_DBG("sk %p", sk);
9091    
9092     - if (l2cap_pi(sk)->chan)
9093     + if (l2cap_pi(sk)->chan) {
9094     + l2cap_pi(sk)->chan->data = NULL;
9095     l2cap_chan_put(l2cap_pi(sk)->chan);
9096     + }
9097    
9098     if (l2cap_pi(sk)->rx_busy_skb) {
9099     kfree_skb(l2cap_pi(sk)->rx_busy_skb);
9100     diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
9101     index 1915943bb646a..2c616c1c62958 100644
9102     --- a/net/bluetooth/sco.c
9103     +++ b/net/bluetooth/sco.c
9104     @@ -133,6 +133,7 @@ static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
9105     return NULL;
9106    
9107     spin_lock_init(&conn->lock);
9108     + INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
9109    
9110     hcon->sco_data = conn;
9111     conn->hcon = hcon;
9112     @@ -196,11 +197,11 @@ static void sco_conn_del(struct hci_conn *hcon, int err)
9113     sco_chan_del(sk, err);
9114     bh_unlock_sock(sk);
9115     sock_put(sk);
9116     -
9117     - /* Ensure no more work items will run before freeing conn. */
9118     - cancel_delayed_work_sync(&conn->timeout_work);
9119     }
9120    
9121     + /* Ensure no more work items will run before freeing conn. */
9122     + cancel_delayed_work_sync(&conn->timeout_work);
9123     +
9124     hcon->sco_data = NULL;
9125     kfree(conn);
9126     }
9127     @@ -213,8 +214,6 @@ static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
9128     sco_pi(sk)->conn = conn;
9129     conn->sk = sk;
9130    
9131     - INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
9132     -
9133     if (parent)
9134     bt_accept_enqueue(parent, sk, true);
9135     }
9136     @@ -280,7 +279,8 @@ static int sco_connect(struct hci_dev *hdev, struct sock *sk)
9137     return err;
9138     }
9139    
9140     -static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
9141     +static int sco_send_frame(struct sock *sk, void *buf, int len,
9142     + unsigned int msg_flags)
9143     {
9144     struct sco_conn *conn = sco_pi(sk)->conn;
9145     struct sk_buff *skb;
9146     @@ -292,15 +292,11 @@ static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
9147    
9148     BT_DBG("sk %p len %d", sk, len);
9149    
9150     - skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
9151     + skb = bt_skb_send_alloc(sk, len, msg_flags & MSG_DONTWAIT, &err);
9152     if (!skb)
9153     return err;
9154    
9155     - if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
9156     - kfree_skb(skb);
9157     - return -EFAULT;
9158     - }
9159     -
9160     + memcpy(skb_put(skb, len), buf, len);
9161     hci_send_sco(conn->hcon, skb);
9162    
9163     return len;
9164     @@ -714,6 +710,7 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
9165     size_t len)
9166     {
9167     struct sock *sk = sock->sk;
9168     + void *buf;
9169     int err;
9170    
9171     BT_DBG("sock %p, sk %p", sock, sk);
9172     @@ -725,14 +722,24 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
9173     if (msg->msg_flags & MSG_OOB)
9174     return -EOPNOTSUPP;
9175    
9176     + buf = kmalloc(len, GFP_KERNEL);
9177     + if (!buf)
9178     + return -ENOMEM;
9179     +
9180     + if (memcpy_from_msg(buf, msg, len)) {
9181     + kfree(buf);
9182     + return -EFAULT;
9183     + }
9184     +
9185     lock_sock(sk);
9186    
9187     if (sk->sk_state == BT_CONNECTED)
9188     - err = sco_send_frame(sk, msg, len);
9189     + err = sco_send_frame(sk, buf, len, msg->msg_flags);
9190     else
9191     err = -ENOTCONN;
9192    
9193     release_sock(sk);
9194     + kfree(buf);
9195     return err;
9196     }
9197    
9198     diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c
9199     index 266c189f1e809..ca75d1b8f415c 100644
9200     --- a/net/can/j1939/main.c
9201     +++ b/net/can/j1939/main.c
9202     @@ -75,6 +75,13 @@ static void j1939_can_recv(struct sk_buff *iskb, void *data)
9203     skcb->addr.pgn = (cf->can_id >> 8) & J1939_PGN_MAX;
9204     /* set default message type */
9205     skcb->addr.type = J1939_TP;
9206     +
9207     + if (!j1939_address_is_valid(skcb->addr.sa)) {
9208     + netdev_err_once(priv->ndev, "%s: sa is broadcast address, ignoring!\n",
9209     + __func__);
9210     + goto done;
9211     + }
9212     +
9213     if (j1939_pgn_is_pdu1(skcb->addr.pgn)) {
9214     /* Type 1: with destination address */
9215     skcb->addr.da = skcb->addr.pgn;
9216     diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
9217     index 7a54170da09df..811682e06951b 100644
9218     --- a/net/can/j1939/transport.c
9219     +++ b/net/can/j1939/transport.c
9220     @@ -2065,6 +2065,12 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
9221     break;
9222    
9223     case J1939_ETP_CMD_ABORT: /* && J1939_TP_CMD_ABORT */
9224     + if (j1939_cb_is_broadcast(skcb)) {
9225     + netdev_err_once(priv->ndev, "%s: abort to broadcast (%02x), ignoring!\n",
9226     + __func__, skcb->addr.sa);
9227     + return;
9228     + }
9229     +
9230     if (j1939_tp_im_transmitter(skcb))
9231     j1939_xtp_rx_abort(priv, skb, true);
9232    
9233     diff --git a/net/core/dev.c b/net/core/dev.c
9234     index e4e492bf72af0..ff336417c9b90 100644
9235     --- a/net/core/dev.c
9236     +++ b/net/core/dev.c
9237     @@ -2589,6 +2589,8 @@ int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
9238     if (dev->num_tc)
9239     netif_setup_tc(dev, txq);
9240    
9241     + dev_qdisc_change_real_num_tx(dev, txq);
9242     +
9243     dev->real_num_tx_queues = txq;
9244    
9245     if (disabling) {
9246     @@ -3487,7 +3489,8 @@ int dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *skb)
9247     skb_reset_mac_header(skb);
9248     __skb_pull(skb, skb_network_offset(skb));
9249     skb->pkt_type = PACKET_LOOPBACK;
9250     - skb->ip_summed = CHECKSUM_UNNECESSARY;
9251     + if (skb->ip_summed == CHECKSUM_NONE)
9252     + skb->ip_summed = CHECKSUM_UNNECESSARY;
9253     WARN_ON(!skb_dst(skb));
9254     skb_dst_force(skb);
9255     netif_rx_ni(skb);
9256     diff --git a/net/core/filter.c b/net/core/filter.c
9257     index 0e161a6dff7e5..5ebc973ed4c50 100644
9258     --- a/net/core/filter.c
9259     +++ b/net/core/filter.c
9260     @@ -8356,6 +8356,27 @@ static u32 sk_skb_convert_ctx_access(enum bpf_access_type type,
9261     *insn++ = BPF_LDX_MEM(BPF_SIZEOF(void *), si->dst_reg,
9262     si->src_reg, off);
9263     break;
9264     + case offsetof(struct __sk_buff, cb[0]) ...
9265     + offsetofend(struct __sk_buff, cb[4]) - 1:
9266     + BUILD_BUG_ON(sizeof_field(struct sk_skb_cb, data) < 20);
9267     + BUILD_BUG_ON((offsetof(struct sk_buff, cb) +
9268     + offsetof(struct sk_skb_cb, data)) %
9269     + sizeof(__u64));
9270     +
9271     + prog->cb_access = 1;
9272     + off = si->off;
9273     + off -= offsetof(struct __sk_buff, cb[0]);
9274     + off += offsetof(struct sk_buff, cb);
9275     + off += offsetof(struct sk_skb_cb, data);
9276     + if (type == BPF_WRITE)
9277     + *insn++ = BPF_STX_MEM(BPF_SIZE(si->code), si->dst_reg,
9278     + si->src_reg, off);
9279     + else
9280     + *insn++ = BPF_LDX_MEM(BPF_SIZE(si->code), si->dst_reg,
9281     + si->src_reg, off);
9282     + break;
9283     +
9284     +
9285     default:
9286     return bpf_convert_ctx_access(type, si, insn_buf, prog,
9287     target_size);
9288     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
9289     index f94d405358a21..02e55041a8813 100644
9290     --- a/net/core/neighbour.c
9291     +++ b/net/core/neighbour.c
9292     @@ -380,7 +380,7 @@ EXPORT_SYMBOL(neigh_ifdown);
9293    
9294     static struct neighbour *neigh_alloc(struct neigh_table *tbl,
9295     struct net_device *dev,
9296     - bool exempt_from_gc)
9297     + u8 flags, bool exempt_from_gc)
9298     {
9299     struct neighbour *n = NULL;
9300     unsigned long now = jiffies;
9301     @@ -413,6 +413,7 @@ do_alloc:
9302     n->updated = n->used = now;
9303     n->nud_state = NUD_NONE;
9304     n->output = neigh_blackhole;
9305     + n->flags = flags;
9306     seqlock_init(&n->hh.hh_lock);
9307     n->parms = neigh_parms_clone(&tbl->parms);
9308     timer_setup(&n->timer, neigh_timer_handler, 0);
9309     @@ -576,19 +577,18 @@ struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net,
9310     }
9311     EXPORT_SYMBOL(neigh_lookup_nodev);
9312    
9313     -static struct neighbour *___neigh_create(struct neigh_table *tbl,
9314     - const void *pkey,
9315     - struct net_device *dev,
9316     - bool exempt_from_gc, bool want_ref)
9317     +static struct neighbour *
9318     +___neigh_create(struct neigh_table *tbl, const void *pkey,
9319     + struct net_device *dev, u8 flags,
9320     + bool exempt_from_gc, bool want_ref)
9321     {
9322     - struct neighbour *n1, *rc, *n = neigh_alloc(tbl, dev, exempt_from_gc);
9323     - u32 hash_val;
9324     - unsigned int key_len = tbl->key_len;
9325     - int error;
9326     + u32 hash_val, key_len = tbl->key_len;
9327     + struct neighbour *n1, *rc, *n;
9328     struct neigh_hash_table *nht;
9329     + int error;
9330    
9331     + n = neigh_alloc(tbl, dev, flags, exempt_from_gc);
9332     trace_neigh_create(tbl, dev, pkey, n, exempt_from_gc);
9333     -
9334     if (!n) {
9335     rc = ERR_PTR(-ENOBUFS);
9336     goto out;
9337     @@ -675,7 +675,7 @@ out_neigh_release:
9338     struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
9339     struct net_device *dev, bool want_ref)
9340     {
9341     - return ___neigh_create(tbl, pkey, dev, false, want_ref);
9342     + return ___neigh_create(tbl, pkey, dev, 0, false, want_ref);
9343     }
9344     EXPORT_SYMBOL(__neigh_create);
9345    
9346     @@ -1221,7 +1221,7 @@ static void neigh_update_hhs(struct neighbour *neigh)
9347     lladdr instead of overriding it
9348     if it is different.
9349     NEIGH_UPDATE_F_ADMIN means that the change is administrative.
9350     -
9351     + NEIGH_UPDATE_F_USE means that the entry is user triggered.
9352     NEIGH_UPDATE_F_OVERRIDE_ISROUTER allows to override existing
9353     NTF_ROUTER flag.
9354     NEIGH_UPDATE_F_ISROUTER indicates if the neighbour is known as
9355     @@ -1259,6 +1259,12 @@ static int __neigh_update(struct neighbour *neigh, const u8 *lladdr,
9356     goto out;
9357    
9358     ext_learn_change = neigh_update_ext_learned(neigh, flags, &notify);
9359     + if (flags & NEIGH_UPDATE_F_USE) {
9360     + new = old & ~NUD_PERMANENT;
9361     + neigh->nud_state = new;
9362     + err = 0;
9363     + goto out;
9364     + }
9365    
9366     if (!(new & NUD_VALID)) {
9367     neigh_del_timer(neigh);
9368     @@ -1945,7 +1951,9 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
9369    
9370     exempt_from_gc = ndm->ndm_state & NUD_PERMANENT ||
9371     ndm->ndm_flags & NTF_EXT_LEARNED;
9372     - neigh = ___neigh_create(tbl, dst, dev, exempt_from_gc, true);
9373     + neigh = ___neigh_create(tbl, dst, dev,
9374     + ndm->ndm_flags & NTF_EXT_LEARNED,
9375     + exempt_from_gc, true);
9376     if (IS_ERR(neigh)) {
9377     err = PTR_ERR(neigh);
9378     goto out;
9379     @@ -1964,22 +1972,20 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
9380    
9381     if (protocol)
9382     neigh->protocol = protocol;
9383     -
9384     if (ndm->ndm_flags & NTF_EXT_LEARNED)
9385     flags |= NEIGH_UPDATE_F_EXT_LEARNED;
9386     -
9387     if (ndm->ndm_flags & NTF_ROUTER)
9388     flags |= NEIGH_UPDATE_F_ISROUTER;
9389     + if (ndm->ndm_flags & NTF_USE)
9390     + flags |= NEIGH_UPDATE_F_USE;
9391    
9392     - if (ndm->ndm_flags & NTF_USE) {
9393     + err = __neigh_update(neigh, lladdr, ndm->ndm_state, flags,
9394     + NETLINK_CB(skb).portid, extack);
9395     + if (!err && ndm->ndm_flags & NTF_USE) {
9396     neigh_event_send(neigh, NULL);
9397     err = 0;
9398     - } else
9399     - err = __neigh_update(neigh, lladdr, ndm->ndm_state, flags,
9400     - NETLINK_CB(skb).portid, extack);
9401     -
9402     + }
9403     neigh_release(neigh);
9404     -
9405     out:
9406     return err;
9407     }
9408     diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
9409     index 98474d85fb51f..05b0c60bfba2b 100644
9410     --- a/net/core/net-sysfs.c
9411     +++ b/net/core/net-sysfs.c
9412     @@ -174,6 +174,14 @@ static int change_carrier(struct net_device *dev, unsigned long new_carrier)
9413     static ssize_t carrier_store(struct device *dev, struct device_attribute *attr,
9414     const char *buf, size_t len)
9415     {
9416     + struct net_device *netdev = to_net_dev(dev);
9417     +
9418     + /* The check is also done in change_carrier; this helps returning early
9419     + * without hitting the trylock/restart in netdev_store.
9420     + */
9421     + if (!netdev->netdev_ops->ndo_change_carrier)
9422     + return -EOPNOTSUPP;
9423     +
9424     return netdev_store(dev, attr, buf, len, change_carrier);
9425     }
9426    
9427     @@ -195,6 +203,12 @@ static ssize_t speed_show(struct device *dev,
9428     struct net_device *netdev = to_net_dev(dev);
9429     int ret = -EINVAL;
9430    
9431     + /* The check is also done in __ethtool_get_link_ksettings; this helps
9432     + * returning early without hitting the trylock/restart below.
9433     + */
9434     + if (!netdev->ethtool_ops->get_link_ksettings)
9435     + return ret;
9436     +
9437     if (!rtnl_trylock())
9438     return restart_syscall();
9439    
9440     @@ -215,6 +229,12 @@ static ssize_t duplex_show(struct device *dev,
9441     struct net_device *netdev = to_net_dev(dev);
9442     int ret = -EINVAL;
9443    
9444     + /* The check is also done in __ethtool_get_link_ksettings; this helps
9445     + * returning early without hitting the trylock/restart below.
9446     + */
9447     + if (!netdev->ethtool_ops->get_link_ksettings)
9448     + return ret;
9449     +
9450     if (!rtnl_trylock())
9451     return restart_syscall();
9452    
9453     @@ -438,6 +458,14 @@ static ssize_t proto_down_store(struct device *dev,
9454     struct device_attribute *attr,
9455     const char *buf, size_t len)
9456     {
9457     + struct net_device *netdev = to_net_dev(dev);
9458     +
9459     + /* The check is also done in change_proto_down; this helps returning
9460     + * early without hitting the trylock/restart in netdev_store.
9461     + */
9462     + if (!netdev->netdev_ops->ndo_change_proto_down)
9463     + return -EOPNOTSUPP;
9464     +
9465     return netdev_store(dev, attr, buf, len, change_proto_down);
9466     }
9467     NETDEVICE_SHOW_RW(proto_down, fmt_dec);
9468     @@ -448,6 +476,12 @@ static ssize_t phys_port_id_show(struct device *dev,
9469     struct net_device *netdev = to_net_dev(dev);
9470     ssize_t ret = -EINVAL;
9471    
9472     + /* The check is also done in dev_get_phys_port_id; this helps returning
9473     + * early without hitting the trylock/restart below.
9474     + */
9475     + if (!netdev->netdev_ops->ndo_get_phys_port_id)
9476     + return -EOPNOTSUPP;
9477     +
9478     if (!rtnl_trylock())
9479     return restart_syscall();
9480    
9481     @@ -470,6 +504,13 @@ static ssize_t phys_port_name_show(struct device *dev,
9482     struct net_device *netdev = to_net_dev(dev);
9483     ssize_t ret = -EINVAL;
9484    
9485     + /* The checks are also done in dev_get_phys_port_name; this helps
9486     + * returning early without hitting the trylock/restart below.
9487     + */
9488     + if (!netdev->netdev_ops->ndo_get_phys_port_name &&
9489     + !netdev->netdev_ops->ndo_get_devlink_port)
9490     + return -EOPNOTSUPP;
9491     +
9492     if (!rtnl_trylock())
9493     return restart_syscall();
9494    
9495     @@ -492,6 +533,14 @@ static ssize_t phys_switch_id_show(struct device *dev,
9496     struct net_device *netdev = to_net_dev(dev);
9497     ssize_t ret = -EINVAL;
9498    
9499     + /* The checks are also done in dev_get_phys_port_name; this helps
9500     + * returning early without hitting the trylock/restart below. This works
9501     + * because recurse is false when calling dev_get_port_parent_id.
9502     + */
9503     + if (!netdev->netdev_ops->ndo_get_port_parent_id &&
9504     + !netdev->netdev_ops->ndo_get_devlink_port)
9505     + return -EOPNOTSUPP;
9506     +
9507     if (!rtnl_trylock())
9508     return restart_syscall();
9509    
9510     @@ -1097,6 +1146,12 @@ static ssize_t tx_maxrate_store(struct netdev_queue *queue,
9511     if (!capable(CAP_NET_ADMIN))
9512     return -EPERM;
9513    
9514     + /* The check is also done later; this helps returning early without
9515     + * hitting the trylock/restart below.
9516     + */
9517     + if (!dev->netdev_ops->ndo_set_tx_maxrate)
9518     + return -EOPNOTSUPP;
9519     +
9520     err = kstrtou32(buf, 10, &rate);
9521     if (err < 0)
9522     return err;
9523     diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
9524     index 9bf15512601bf..cd1d40195e461 100644
9525     --- a/net/core/net_namespace.c
9526     +++ b/net/core/net_namespace.c
9527     @@ -480,7 +480,9 @@ struct net *copy_net_ns(unsigned long flags,
9528    
9529     if (rv < 0) {
9530     put_userns:
9531     +#ifdef CONFIG_KEYS
9532     key_remove_domain(net->key_domain);
9533     +#endif
9534     put_user_ns(user_ns);
9535     net_drop_ns(net);
9536     dec_ucounts:
9537     @@ -612,7 +614,9 @@ static void cleanup_net(struct work_struct *work)
9538     list_for_each_entry_safe(net, tmp, &net_exit_list, exit_list) {
9539     list_del_init(&net->exit_list);
9540     dec_net_namespaces(net->ucounts);
9541     +#ifdef CONFIG_KEYS
9542     key_remove_domain(net->key_domain);
9543     +#endif
9544     put_user_ns(net->user_ns);
9545     net_drop_ns(net);
9546     }
9547     diff --git a/net/core/stream.c b/net/core/stream.c
9548     index 4f1d4aa5fb38d..a166a32b411fa 100644
9549     --- a/net/core/stream.c
9550     +++ b/net/core/stream.c
9551     @@ -195,9 +195,6 @@ void sk_stream_kill_queues(struct sock *sk)
9552     /* First the read buffer. */
9553     __skb_queue_purge(&sk->sk_receive_queue);
9554    
9555     - /* Next, the error queue. */
9556     - __skb_queue_purge(&sk->sk_error_queue);
9557     -
9558     /* Next, the write queue. */
9559     WARN_ON(!skb_queue_empty(&sk->sk_write_queue));
9560    
9561     diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
9562     index 669cbe1609d9e..48041f50ecfb4 100644
9563     --- a/net/core/sysctl_net_core.c
9564     +++ b/net/core/sysctl_net_core.c
9565     @@ -424,7 +424,7 @@ static struct ctl_table net_core_table[] = {
9566     .mode = 0600,
9567     .proc_handler = proc_dolongvec_minmax_bpf_restricted,
9568     .extra1 = &long_one,
9569     - .extra2 = &long_max,
9570     + .extra2 = &bpf_jit_limit_max,
9571     },
9572     #endif
9573     {
9574     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
9575     index 5c8d0fb498256..9f53d25e047e3 100644
9576     --- a/net/ipv4/tcp.c
9577     +++ b/net/ipv4/tcp.c
9578     @@ -955,7 +955,7 @@ static int tcp_send_mss(struct sock *sk, int *size_goal, int flags)
9579     */
9580     static void tcp_remove_empty_skb(struct sock *sk, struct sk_buff *skb)
9581     {
9582     - if (skb && !skb->len) {
9583     + if (skb && TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) {
9584     tcp_unlink_write_queue(skb, sk);
9585     if (tcp_write_queue_empty(sk))
9586     tcp_chrono_stop(sk, TCP_CHRONO_BUSY);
9587     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
9588     index 366c3792b8604..d1f29a3eb70be 100644
9589     --- a/net/ipv6/addrconf.c
9590     +++ b/net/ipv6/addrconf.c
9591     @@ -3111,6 +3111,9 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
9592     memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4);
9593    
9594     if (idev->dev->flags&IFF_POINTOPOINT) {
9595     + if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
9596     + return;
9597     +
9598     addr.s6_addr32[0] = htonl(0xfe800000);
9599     scope = IFA_LINK;
9600     plen = 64;
9601     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
9602     index 0f57c682afdd8..818fc99756256 100644
9603     --- a/net/ipv6/udp.c
9604     +++ b/net/ipv6/udp.c
9605     @@ -1363,7 +1363,6 @@ do_udp_sendmsg:
9606     if (!fl6.flowi6_oif)
9607     fl6.flowi6_oif = np->sticky_pktinfo.ipi6_ifindex;
9608    
9609     - fl6.flowi6_mark = ipc6.sockc.mark;
9610     fl6.flowi6_uid = sk->sk_uid;
9611    
9612     if (msg->msg_controllen) {
9613     @@ -1399,6 +1398,7 @@ do_udp_sendmsg:
9614     ipc6.opt = opt;
9615    
9616     fl6.flowi6_proto = sk->sk_protocol;
9617     + fl6.flowi6_mark = ipc6.sockc.mark;
9618     fl6.daddr = *daddr;
9619     if (ipv6_addr_any(&fl6.saddr) && !ipv6_addr_any(&np->saddr))
9620     fl6.saddr = np->saddr;
9621     diff --git a/net/netfilter/nf_conntrack_proto_udp.c b/net/netfilter/nf_conntrack_proto_udp.c
9622     index 7365b43f8f980..e3a2d018f4ec5 100644
9623     --- a/net/netfilter/nf_conntrack_proto_udp.c
9624     +++ b/net/netfilter/nf_conntrack_proto_udp.c
9625     @@ -105,15 +105,18 @@ int nf_conntrack_udp_packet(struct nf_conn *ct,
9626     */
9627     if (test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) {
9628     unsigned long extra = timeouts[UDP_CT_UNREPLIED];
9629     + bool stream = false;
9630    
9631     /* Still active after two seconds? Extend timeout. */
9632     - if (time_after(jiffies, ct->proto.udp.stream_ts))
9633     + if (time_after(jiffies, ct->proto.udp.stream_ts)) {
9634     extra = timeouts[UDP_CT_REPLIED];
9635     + stream = true;
9636     + }
9637    
9638     nf_ct_refresh_acct(ct, ctinfo, skb, extra);
9639    
9640     /* Also, more likely to be important, and not a probe */
9641     - if (!test_and_set_bit(IPS_ASSURED_BIT, &ct->status))
9642     + if (stream && !test_and_set_bit(IPS_ASSURED_BIT, &ct->status))
9643     nf_conntrack_event_cache(IPCT_ASSURED, ct);
9644     } else {
9645     nf_ct_refresh_acct(ct, ctinfo, skb,
9646     diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
9647     index 6f0a2bad8ad5e..a8cb562da3fea 100644
9648     --- a/net/netfilter/nfnetlink_queue.c
9649     +++ b/net/netfilter/nfnetlink_queue.c
9650     @@ -562,7 +562,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
9651     goto nla_put_failure;
9652    
9653     if (indev && entskb->dev &&
9654     - entskb->mac_header != entskb->network_header) {
9655     + skb_mac_header_was_set(entskb)) {
9656     struct nfqnl_msg_packet_hw phw;
9657     int len;
9658    
9659     diff --git a/net/netfilter/nft_dynset.c b/net/netfilter/nft_dynset.c
9660     index 95415d2b81c93..6fdea0e57db8a 100644
9661     --- a/net/netfilter/nft_dynset.c
9662     +++ b/net/netfilter/nft_dynset.c
9663     @@ -164,17 +164,8 @@ static int nft_dynset_init(const struct nft_ctx *ctx,
9664     return -EBUSY;
9665    
9666     priv->op = ntohl(nla_get_be32(tb[NFTA_DYNSET_OP]));
9667     - switch (priv->op) {
9668     - case NFT_DYNSET_OP_ADD:
9669     - case NFT_DYNSET_OP_DELETE:
9670     - break;
9671     - case NFT_DYNSET_OP_UPDATE:
9672     - if (!(set->flags & NFT_SET_TIMEOUT))
9673     - return -EOPNOTSUPP;
9674     - break;
9675     - default:
9676     + if (priv->op > NFT_DYNSET_OP_DELETE)
9677     return -EOPNOTSUPP;
9678     - }
9679    
9680     timeout = 0;
9681     if (tb[NFTA_DYNSET_TIMEOUT] != NULL) {
9682     diff --git a/net/rxrpc/rtt.c b/net/rxrpc/rtt.c
9683     index 928d8b34a3eee..f3f87c9f0209d 100644
9684     --- a/net/rxrpc/rtt.c
9685     +++ b/net/rxrpc/rtt.c
9686     @@ -23,7 +23,7 @@ static u32 rxrpc_rto_min_us(struct rxrpc_peer *peer)
9687    
9688     static u32 __rxrpc_set_rto(const struct rxrpc_peer *peer)
9689     {
9690     - return _usecs_to_jiffies((peer->srtt_us >> 3) + peer->rttvar_us);
9691     + return usecs_to_jiffies((peer->srtt_us >> 3) + peer->rttvar_us);
9692     }
9693    
9694     static u32 rxrpc_bound_rto(u32 rto)
9695     diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
9696     index 9bc5cbe9809b8..d973f8a15e117 100644
9697     --- a/net/sched/sch_generic.c
9698     +++ b/net/sched/sch_generic.c
9699     @@ -1313,6 +1313,15 @@ static int qdisc_change_tx_queue_len(struct net_device *dev,
9700     return 0;
9701     }
9702    
9703     +void dev_qdisc_change_real_num_tx(struct net_device *dev,
9704     + unsigned int new_real_tx)
9705     +{
9706     + struct Qdisc *qdisc = dev->qdisc;
9707     +
9708     + if (qdisc->ops->change_real_num_tx)
9709     + qdisc->ops->change_real_num_tx(qdisc, new_real_tx);
9710     +}
9711     +
9712     int dev_qdisc_change_tx_queue_len(struct net_device *dev)
9713     {
9714     bool up = dev->flags & IFF_UP;
9715     diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c
9716     index e79f1afe0cfd6..db18d8a860f9c 100644
9717     --- a/net/sched/sch_mq.c
9718     +++ b/net/sched/sch_mq.c
9719     @@ -125,6 +125,29 @@ static void mq_attach(struct Qdisc *sch)
9720     priv->qdiscs = NULL;
9721     }
9722    
9723     +static void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx)
9724     +{
9725     +#ifdef CONFIG_NET_SCHED
9726     + struct net_device *dev = qdisc_dev(sch);
9727     + struct Qdisc *qdisc;
9728     + unsigned int i;
9729     +
9730     + for (i = new_real_tx; i < dev->real_num_tx_queues; i++) {
9731     + qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
9732     + /* Only update the default qdiscs we created,
9733     + * qdiscs with handles are always hashed.
9734     + */
9735     + if (qdisc != &noop_qdisc && !qdisc->handle)
9736     + qdisc_hash_del(qdisc);
9737     + }
9738     + for (i = dev->real_num_tx_queues; i < new_real_tx; i++) {
9739     + qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
9740     + if (qdisc != &noop_qdisc && !qdisc->handle)
9741     + qdisc_hash_add(qdisc, false);
9742     + }
9743     +#endif
9744     +}
9745     +
9746     static int mq_dump(struct Qdisc *sch, struct sk_buff *skb)
9747     {
9748     struct net_device *dev = qdisc_dev(sch);
9749     @@ -288,6 +311,7 @@ struct Qdisc_ops mq_qdisc_ops __read_mostly = {
9750     .init = mq_init,
9751     .destroy = mq_destroy,
9752     .attach = mq_attach,
9753     + .change_real_num_tx = mq_change_real_num_tx,
9754     .dump = mq_dump,
9755     .owner = THIS_MODULE,
9756     };
9757     diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
9758     index 5eb3b1b7ae5e7..50e15add6068f 100644
9759     --- a/net/sched/sch_mqprio.c
9760     +++ b/net/sched/sch_mqprio.c
9761     @@ -306,6 +306,28 @@ static void mqprio_attach(struct Qdisc *sch)
9762     priv->qdiscs = NULL;
9763     }
9764    
9765     +static void mqprio_change_real_num_tx(struct Qdisc *sch,
9766     + unsigned int new_real_tx)
9767     +{
9768     + struct net_device *dev = qdisc_dev(sch);
9769     + struct Qdisc *qdisc;
9770     + unsigned int i;
9771     +
9772     + for (i = new_real_tx; i < dev->real_num_tx_queues; i++) {
9773     + qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
9774     + /* Only update the default qdiscs we created,
9775     + * qdiscs with handles are always hashed.
9776     + */
9777     + if (qdisc != &noop_qdisc && !qdisc->handle)
9778     + qdisc_hash_del(qdisc);
9779     + }
9780     + for (i = dev->real_num_tx_queues; i < new_real_tx; i++) {
9781     + qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
9782     + if (qdisc != &noop_qdisc && !qdisc->handle)
9783     + qdisc_hash_add(qdisc, false);
9784     + }
9785     +}
9786     +
9787     static struct netdev_queue *mqprio_queue_get(struct Qdisc *sch,
9788     unsigned long cl)
9789     {
9790     @@ -629,6 +651,7 @@ static struct Qdisc_ops mqprio_qdisc_ops __read_mostly = {
9791     .init = mqprio_init,
9792     .destroy = mqprio_destroy,
9793     .attach = mqprio_attach,
9794     + .change_real_num_tx = mqprio_change_real_num_tx,
9795     .dump = mqprio_dump,
9796     .owner = THIS_MODULE,
9797     };
9798     diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
9799     index e14a66ce4884d..b268e61304515 100644
9800     --- a/net/sched/sch_taprio.c
9801     +++ b/net/sched/sch_taprio.c
9802     @@ -94,18 +94,22 @@ static ktime_t sched_base_time(const struct sched_gate_list *sched)
9803     return ns_to_ktime(sched->base_time);
9804     }
9805    
9806     -static ktime_t taprio_get_time(struct taprio_sched *q)
9807     +static ktime_t taprio_mono_to_any(const struct taprio_sched *q, ktime_t mono)
9808     {
9809     - ktime_t mono = ktime_get();
9810     + /* This pairs with WRITE_ONCE() in taprio_parse_clockid() */
9811     + enum tk_offsets tk_offset = READ_ONCE(q->tk_offset);
9812    
9813     - switch (q->tk_offset) {
9814     + switch (tk_offset) {
9815     case TK_OFFS_MAX:
9816     return mono;
9817     default:
9818     - return ktime_mono_to_any(mono, q->tk_offset);
9819     + return ktime_mono_to_any(mono, tk_offset);
9820     }
9821     +}
9822    
9823     - return KTIME_MAX;
9824     +static ktime_t taprio_get_time(const struct taprio_sched *q)
9825     +{
9826     + return taprio_mono_to_any(q, ktime_get());
9827     }
9828    
9829     static void taprio_free_sched_cb(struct rcu_head *head)
9830     @@ -321,7 +325,7 @@ static ktime_t get_tcp_tstamp(struct taprio_sched *q, struct sk_buff *skb)
9831     return 0;
9832     }
9833    
9834     - return ktime_mono_to_any(skb->skb_mstamp_ns, q->tk_offset);
9835     + return taprio_mono_to_any(q, skb->skb_mstamp_ns);
9836     }
9837    
9838     /* There are a few scenarios where we will have to modify the txtime from
9839     @@ -1342,6 +1346,7 @@ static int taprio_parse_clockid(struct Qdisc *sch, struct nlattr **tb,
9840     }
9841     } else if (tb[TCA_TAPRIO_ATTR_SCHED_CLOCKID]) {
9842     int clockid = nla_get_s32(tb[TCA_TAPRIO_ATTR_SCHED_CLOCKID]);
9843     + enum tk_offsets tk_offset;
9844    
9845     /* We only support static clockids and we don't allow
9846     * for it to be modified after the first init.
9847     @@ -1356,22 +1361,24 @@ static int taprio_parse_clockid(struct Qdisc *sch, struct nlattr **tb,
9848    
9849     switch (clockid) {
9850     case CLOCK_REALTIME:
9851     - q->tk_offset = TK_OFFS_REAL;
9852     + tk_offset = TK_OFFS_REAL;
9853     break;
9854     case CLOCK_MONOTONIC:
9855     - q->tk_offset = TK_OFFS_MAX;
9856     + tk_offset = TK_OFFS_MAX;
9857     break;
9858     case CLOCK_BOOTTIME:
9859     - q->tk_offset = TK_OFFS_BOOT;
9860     + tk_offset = TK_OFFS_BOOT;
9861     break;
9862     case CLOCK_TAI:
9863     - q->tk_offset = TK_OFFS_TAI;
9864     + tk_offset = TK_OFFS_TAI;
9865     break;
9866     default:
9867     NL_SET_ERR_MSG(extack, "Invalid 'clockid'");
9868     err = -EINVAL;
9869     goto out;
9870     }
9871     + /* This pairs with READ_ONCE() in taprio_mono_to_any */
9872     + WRITE_ONCE(q->tk_offset, tk_offset);
9873    
9874     q->clockid = clockid;
9875     } else {
9876     diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
9877     index 51986f7ead819..6b0f09c5b195f 100644
9878     --- a/net/smc/af_smc.c
9879     +++ b/net/smc/af_smc.c
9880     @@ -139,14 +139,18 @@ static int __smc_release(struct smc_sock *smc)
9881     sock_set_flag(sk, SOCK_DEAD);
9882     sk->sk_shutdown |= SHUTDOWN_MASK;
9883     } else {
9884     - if (sk->sk_state != SMC_LISTEN && sk->sk_state != SMC_INIT)
9885     - sock_put(sk); /* passive closing */
9886     - if (sk->sk_state == SMC_LISTEN) {
9887     - /* wake up clcsock accept */
9888     - rc = kernel_sock_shutdown(smc->clcsock, SHUT_RDWR);
9889     + if (sk->sk_state != SMC_CLOSED) {
9890     + if (sk->sk_state != SMC_LISTEN &&
9891     + sk->sk_state != SMC_INIT)
9892     + sock_put(sk); /* passive closing */
9893     + if (sk->sk_state == SMC_LISTEN) {
9894     + /* wake up clcsock accept */
9895     + rc = kernel_sock_shutdown(smc->clcsock,
9896     + SHUT_RDWR);
9897     + }
9898     + sk->sk_state = SMC_CLOSED;
9899     + sk->sk_state_change(sk);
9900     }
9901     - sk->sk_state = SMC_CLOSED;
9902     - sk->sk_state_change(sk);
9903     smc_restore_fallback_changes(smc);
9904     }
9905    
9906     @@ -783,7 +787,7 @@ static void smc_connect_work(struct work_struct *work)
9907     if (smc->clcsock->sk->sk_err) {
9908     smc->sk.sk_err = smc->clcsock->sk->sk_err;
9909     } else if ((1 << smc->clcsock->sk->sk_state) &
9910     - (TCPF_SYN_SENT | TCP_SYN_RECV)) {
9911     + (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
9912     rc = sk_stream_wait_connect(smc->clcsock->sk, &timeo);
9913     if ((rc == -EPIPE) &&
9914     ((1 << smc->clcsock->sk->sk_state) &
9915     diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c
9916     index b3815c1e8f2ea..cd9954c4ad808 100644
9917     --- a/net/strparser/strparser.c
9918     +++ b/net/strparser/strparser.c
9919     @@ -27,18 +27,10 @@
9920    
9921     static struct workqueue_struct *strp_wq;
9922    
9923     -struct _strp_msg {
9924     - /* Internal cb structure. struct strp_msg must be first for passing
9925     - * to upper layer.
9926     - */
9927     - struct strp_msg strp;
9928     - int accum_len;
9929     -};
9930     -
9931     static inline struct _strp_msg *_strp_msg(struct sk_buff *skb)
9932     {
9933     return (struct _strp_msg *)((void *)skb->cb +
9934     - offsetof(struct qdisc_skb_cb, data));
9935     + offsetof(struct sk_skb_cb, strp));
9936     }
9937    
9938     /* Lower lock held */
9939     diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
9940     index 3653898f465ff..93b6afd28405e 100644
9941     --- a/net/sunrpc/xprt.c
9942     +++ b/net/sunrpc/xprt.c
9943     @@ -1538,15 +1538,14 @@ xprt_transmit(struct rpc_task *task)
9944     {
9945     struct rpc_rqst *next, *req = task->tk_rqstp;
9946     struct rpc_xprt *xprt = req->rq_xprt;
9947     - int counter, status;
9948     + int status;
9949    
9950     spin_lock(&xprt->queue_lock);
9951     - counter = 0;
9952     - while (!list_empty(&xprt->xmit_queue)) {
9953     - if (++counter == 20)
9954     + for (;;) {
9955     + next = list_first_entry_or_null(&xprt->xmit_queue,
9956     + struct rpc_rqst, rq_xmit);
9957     + if (!next)
9958     break;
9959     - next = list_first_entry(&xprt->xmit_queue,
9960     - struct rpc_rqst, rq_xmit);
9961     xprt_pin_rqst(next);
9962     spin_unlock(&xprt->queue_lock);
9963     status = xprt_request_transmit(next, task);
9964     @@ -1554,13 +1553,16 @@ xprt_transmit(struct rpc_task *task)
9965     status = 0;
9966     spin_lock(&xprt->queue_lock);
9967     xprt_unpin_rqst(next);
9968     - if (status == 0) {
9969     - if (!xprt_request_data_received(task) ||
9970     - test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate))
9971     - continue;
9972     - } else if (test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate))
9973     - task->tk_status = status;
9974     - break;
9975     + if (status < 0) {
9976     + if (test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate))
9977     + task->tk_status = status;
9978     + break;
9979     + }
9980     + /* Was @task transmitted, and has it received a reply? */
9981     + if (xprt_request_data_received(task) &&
9982     + !test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate))
9983     + break;
9984     + cond_resched_lock(&xprt->queue_lock);
9985     }
9986     spin_unlock(&xprt->queue_lock);
9987     }
9988     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
9989     index d4104144bab1b..bc8055f4571bc 100644
9990     --- a/net/vmw_vsock/af_vsock.c
9991     +++ b/net/vmw_vsock/af_vsock.c
9992     @@ -1151,6 +1151,8 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
9993     * non-blocking call.
9994     */
9995     err = -EALREADY;
9996     + if (flags & O_NONBLOCK)
9997     + goto out;
9998     break;
9999     default:
10000     if ((sk->sk_state == TCP_LISTEN) ||
10001     diff --git a/samples/kprobes/kretprobe_example.c b/samples/kprobes/kretprobe_example.c
10002     index 186315ca88b3f..2701549ee7b3a 100644
10003     --- a/samples/kprobes/kretprobe_example.c
10004     +++ b/samples/kprobes/kretprobe_example.c
10005     @@ -84,7 +84,7 @@ static int __init kretprobe_init(void)
10006     ret = register_kretprobe(&my_kretprobe);
10007     if (ret < 0) {
10008     pr_err("register_kretprobe failed, returned %d\n", ret);
10009     - return -1;
10010     + return ret;
10011     }
10012     pr_info("Planted return probe at %s: %p\n",
10013     my_kretprobe.kp.symbol_name, my_kretprobe.kp.addr);
10014     diff --git a/scripts/leaking_addresses.pl b/scripts/leaking_addresses.pl
10015     index b2d8b8aa2d99e..8f636a23bc3f2 100755
10016     --- a/scripts/leaking_addresses.pl
10017     +++ b/scripts/leaking_addresses.pl
10018     @@ -455,8 +455,9 @@ sub parse_file
10019    
10020     open my $fh, "<", $file or return;
10021     while ( <$fh> ) {
10022     + chomp;
10023     if (may_leak_address($_)) {
10024     - print $file . ': ' . $_;
10025     + printf("$file: $_\n");
10026     }
10027     }
10028     close $fh;
10029     diff --git a/security/apparmor/label.c b/security/apparmor/label.c
10030     index 5f324d63ceaa3..747a734a08246 100644
10031     --- a/security/apparmor/label.c
10032     +++ b/security/apparmor/label.c
10033     @@ -1459,7 +1459,7 @@ bool aa_update_label_name(struct aa_ns *ns, struct aa_label *label, gfp_t gfp)
10034     if (label->hname || labels_ns(label) != ns)
10035     return res;
10036    
10037     - if (aa_label_acntsxprint(&name, ns, label, FLAGS_NONE, gfp) == -1)
10038     + if (aa_label_acntsxprint(&name, ns, label, FLAGS_NONE, gfp) < 0)
10039     return res;
10040    
10041     ls = labels_set(label);
10042     @@ -1709,7 +1709,7 @@ int aa_label_asxprint(char **strp, struct aa_ns *ns, struct aa_label *label,
10043    
10044     /**
10045     * aa_label_acntsxprint - allocate a __counted string buffer and print label
10046     - * @strp: buffer to write to. (MAY BE NULL if @size == 0)
10047     + * @strp: buffer to write to.
10048     * @ns: namespace profile is being viewed from
10049     * @label: label to view (NOT NULL)
10050     * @flags: flags controlling what label info is printed
10051     diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
10052     index 81e3245aec86c..b82291d10e730 100644
10053     --- a/security/integrity/evm/evm_main.c
10054     +++ b/security/integrity/evm/evm_main.c
10055     @@ -56,7 +56,7 @@ static struct xattr_list evm_config_default_xattrnames[] = {
10056    
10057     LIST_HEAD(evm_config_xattrnames);
10058    
10059     -static int evm_fixmode;
10060     +static int evm_fixmode __ro_after_init;
10061     static int __init evm_set_fixmode(char *str)
10062     {
10063     if (strncmp(str, "fix", 3) == 0)
10064     diff --git a/security/security.c b/security/security.c
10065     index 1bc000f834e2d..c34ec4c7d98cc 100644
10066     --- a/security/security.c
10067     +++ b/security/security.c
10068     @@ -670,25 +670,25 @@ static void __init lsm_early_task(struct task_struct *task)
10069    
10070     /* Security operations */
10071    
10072     -int security_binder_set_context_mgr(struct task_struct *mgr)
10073     +int security_binder_set_context_mgr(const struct cred *mgr)
10074     {
10075     return call_int_hook(binder_set_context_mgr, 0, mgr);
10076     }
10077    
10078     -int security_binder_transaction(struct task_struct *from,
10079     - struct task_struct *to)
10080     +int security_binder_transaction(const struct cred *from,
10081     + const struct cred *to)
10082     {
10083     return call_int_hook(binder_transaction, 0, from, to);
10084     }
10085    
10086     -int security_binder_transfer_binder(struct task_struct *from,
10087     - struct task_struct *to)
10088     +int security_binder_transfer_binder(const struct cred *from,
10089     + const struct cred *to)
10090     {
10091     return call_int_hook(binder_transfer_binder, 0, from, to);
10092     }
10093    
10094     -int security_binder_transfer_file(struct task_struct *from,
10095     - struct task_struct *to, struct file *file)
10096     +int security_binder_transfer_file(const struct cred *from,
10097     + const struct cred *to, struct file *file)
10098     {
10099     return call_int_hook(binder_transfer_file, 0, from, to, file);
10100     }
10101     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
10102     index 717a398ef4d05..8b9cbe1e8ee22 100644
10103     --- a/security/selinux/hooks.c
10104     +++ b/security/selinux/hooks.c
10105     @@ -2050,22 +2050,19 @@ static inline u32 open_file_to_av(struct file *file)
10106    
10107     /* Hook functions begin here. */
10108    
10109     -static int selinux_binder_set_context_mgr(struct task_struct *mgr)
10110     +static int selinux_binder_set_context_mgr(const struct cred *mgr)
10111     {
10112     - u32 mysid = current_sid();
10113     - u32 mgrsid = task_sid(mgr);
10114     -
10115     return avc_has_perm(&selinux_state,
10116     - mysid, mgrsid, SECCLASS_BINDER,
10117     + current_sid(), cred_sid(mgr), SECCLASS_BINDER,
10118     BINDER__SET_CONTEXT_MGR, NULL);
10119     }
10120    
10121     -static int selinux_binder_transaction(struct task_struct *from,
10122     - struct task_struct *to)
10123     +static int selinux_binder_transaction(const struct cred *from,
10124     + const struct cred *to)
10125     {
10126     u32 mysid = current_sid();
10127     - u32 fromsid = task_sid(from);
10128     - u32 tosid = task_sid(to);
10129     + u32 fromsid = cred_sid(from);
10130     + u32 tosid = cred_sid(to);
10131     int rc;
10132    
10133     if (mysid != fromsid) {
10134     @@ -2076,27 +2073,24 @@ static int selinux_binder_transaction(struct task_struct *from,
10135     return rc;
10136     }
10137    
10138     - return avc_has_perm(&selinux_state,
10139     - fromsid, tosid, SECCLASS_BINDER, BINDER__CALL,
10140     - NULL);
10141     + return avc_has_perm(&selinux_state, fromsid, tosid,
10142     + SECCLASS_BINDER, BINDER__CALL, NULL);
10143     }
10144    
10145     -static int selinux_binder_transfer_binder(struct task_struct *from,
10146     - struct task_struct *to)
10147     +static int selinux_binder_transfer_binder(const struct cred *from,
10148     + const struct cred *to)
10149     {
10150     - u32 fromsid = task_sid(from);
10151     - u32 tosid = task_sid(to);
10152     -
10153     return avc_has_perm(&selinux_state,
10154     - fromsid, tosid, SECCLASS_BINDER, BINDER__TRANSFER,
10155     + cred_sid(from), cred_sid(to),
10156     + SECCLASS_BINDER, BINDER__TRANSFER,
10157     NULL);
10158     }
10159    
10160     -static int selinux_binder_transfer_file(struct task_struct *from,
10161     - struct task_struct *to,
10162     +static int selinux_binder_transfer_file(const struct cred *from,
10163     + const struct cred *to,
10164     struct file *file)
10165     {
10166     - u32 sid = task_sid(to);
10167     + u32 sid = cred_sid(to);
10168     struct file_security_struct *fsec = selinux_file(file);
10169     struct dentry *dentry = file->f_path.dentry;
10170     struct inode_security_struct *isec;
10171     diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
10172     index 3823ab2c4e4be..6b6fec04c412b 100644
10173     --- a/security/smack/smackfs.c
10174     +++ b/security/smack/smackfs.c
10175     @@ -693,9 +693,7 @@ static void smk_cipso_doi(void)
10176     printk(KERN_WARNING "%s:%d remove rc = %d\n",
10177     __func__, __LINE__, rc);
10178    
10179     - doip = kmalloc(sizeof(struct cipso_v4_doi), GFP_KERNEL);
10180     - if (doip == NULL)
10181     - panic("smack: Failed to initialize cipso DOI.\n");
10182     + doip = kmalloc(sizeof(struct cipso_v4_doi), GFP_KERNEL | __GFP_NOFAIL);
10183     doip->map.std = NULL;
10184     doip->doi = smk_cipso_doi_value;
10185     doip->type = CIPSO_V4_MAP_PASS;
10186     @@ -714,7 +712,7 @@ static void smk_cipso_doi(void)
10187     if (rc != 0) {
10188     printk(KERN_WARNING "%s:%d map add rc = %d\n",
10189     __func__, __LINE__, rc);
10190     - kfree(doip);
10191     + netlbl_cfg_cipsov4_del(doip->doi, &nai);
10192     return;
10193     }
10194     }
10195     @@ -831,6 +829,7 @@ static int smk_open_cipso(struct inode *inode, struct file *file)
10196     static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
10197     size_t count, loff_t *ppos, int format)
10198     {
10199     + struct netlbl_lsm_catmap *old_cat;
10200     struct smack_known *skp;
10201     struct netlbl_lsm_secattr ncats;
10202     char mapcatset[SMK_CIPSOLEN];
10203     @@ -920,9 +919,11 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
10204    
10205     rc = smk_netlbl_mls(maplevel, mapcatset, &ncats, SMK_CIPSOLEN);
10206     if (rc >= 0) {
10207     - netlbl_catmap_free(skp->smk_netlabel.attr.mls.cat);
10208     + old_cat = skp->smk_netlabel.attr.mls.cat;
10209     skp->smk_netlabel.attr.mls.cat = ncats.attr.mls.cat;
10210     skp->smk_netlabel.attr.mls.lvl = ncats.attr.mls.lvl;
10211     + synchronize_rcu();
10212     + netlbl_catmap_free(old_cat);
10213     rc = count;
10214     }
10215    
10216     diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
10217     index 7eb54df5556df..50ec8b8ff68c9 100644
10218     --- a/sound/core/oss/mixer_oss.c
10219     +++ b/sound/core/oss/mixer_oss.c
10220     @@ -130,11 +130,13 @@ static int snd_mixer_oss_devmask(struct snd_mixer_oss_file *fmixer)
10221    
10222     if (mixer == NULL)
10223     return -EIO;
10224     + mutex_lock(&mixer->reg_mutex);
10225     for (chn = 0; chn < 31; chn++) {
10226     pslot = &mixer->slots[chn];
10227     if (pslot->put_volume || pslot->put_recsrc)
10228     result |= 1 << chn;
10229     }
10230     + mutex_unlock(&mixer->reg_mutex);
10231     return result;
10232     }
10233    
10234     @@ -146,11 +148,13 @@ static int snd_mixer_oss_stereodevs(struct snd_mixer_oss_file *fmixer)
10235    
10236     if (mixer == NULL)
10237     return -EIO;
10238     + mutex_lock(&mixer->reg_mutex);
10239     for (chn = 0; chn < 31; chn++) {
10240     pslot = &mixer->slots[chn];
10241     if (pslot->put_volume && pslot->stereo)
10242     result |= 1 << chn;
10243     }
10244     + mutex_unlock(&mixer->reg_mutex);
10245     return result;
10246     }
10247    
10248     @@ -161,6 +165,7 @@ static int snd_mixer_oss_recmask(struct snd_mixer_oss_file *fmixer)
10249    
10250     if (mixer == NULL)
10251     return -EIO;
10252     + mutex_lock(&mixer->reg_mutex);
10253     if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */
10254     result = mixer->mask_recsrc;
10255     } else {
10256     @@ -172,6 +177,7 @@ static int snd_mixer_oss_recmask(struct snd_mixer_oss_file *fmixer)
10257     result |= 1 << chn;
10258     }
10259     }
10260     + mutex_unlock(&mixer->reg_mutex);
10261     return result;
10262     }
10263    
10264     @@ -182,11 +188,12 @@ static int snd_mixer_oss_get_recsrc(struct snd_mixer_oss_file *fmixer)
10265    
10266     if (mixer == NULL)
10267     return -EIO;
10268     + mutex_lock(&mixer->reg_mutex);
10269     if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */
10270     - int err;
10271     unsigned int index;
10272     - if ((err = mixer->get_recsrc(fmixer, &index)) < 0)
10273     - return err;
10274     + result = mixer->get_recsrc(fmixer, &index);
10275     + if (result < 0)
10276     + goto unlock;
10277     result = 1 << index;
10278     } else {
10279     struct snd_mixer_oss_slot *pslot;
10280     @@ -201,7 +208,10 @@ static int snd_mixer_oss_get_recsrc(struct snd_mixer_oss_file *fmixer)
10281     }
10282     }
10283     }
10284     - return mixer->oss_recsrc = result;
10285     + mixer->oss_recsrc = result;
10286     + unlock:
10287     + mutex_unlock(&mixer->reg_mutex);
10288     + return result;
10289     }
10290    
10291     static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsrc)
10292     @@ -214,6 +224,7 @@ static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsr
10293    
10294     if (mixer == NULL)
10295     return -EIO;
10296     + mutex_lock(&mixer->reg_mutex);
10297     if (mixer->get_recsrc && mixer->put_recsrc) { /* exclusive input */
10298     if (recsrc & ~mixer->oss_recsrc)
10299     recsrc &= ~mixer->oss_recsrc;
10300     @@ -239,6 +250,7 @@ static int snd_mixer_oss_set_recsrc(struct snd_mixer_oss_file *fmixer, int recsr
10301     }
10302     }
10303     }
10304     + mutex_unlock(&mixer->reg_mutex);
10305     return result;
10306     }
10307    
10308     @@ -250,6 +262,7 @@ static int snd_mixer_oss_get_volume(struct snd_mixer_oss_file *fmixer, int slot)
10309    
10310     if (mixer == NULL || slot > 30)
10311     return -EIO;
10312     + mutex_lock(&mixer->reg_mutex);
10313     pslot = &mixer->slots[slot];
10314     left = pslot->volume[0];
10315     right = pslot->volume[1];
10316     @@ -257,15 +270,21 @@ static int snd_mixer_oss_get_volume(struct snd_mixer_oss_file *fmixer, int slot)
10317     result = pslot->get_volume(fmixer, pslot, &left, &right);
10318     if (!pslot->stereo)
10319     right = left;
10320     - if (snd_BUG_ON(left < 0 || left > 100))
10321     - return -EIO;
10322     - if (snd_BUG_ON(right < 0 || right > 100))
10323     - return -EIO;
10324     + if (snd_BUG_ON(left < 0 || left > 100)) {
10325     + result = -EIO;
10326     + goto unlock;
10327     + }
10328     + if (snd_BUG_ON(right < 0 || right > 100)) {
10329     + result = -EIO;
10330     + goto unlock;
10331     + }
10332     if (result >= 0) {
10333     pslot->volume[0] = left;
10334     pslot->volume[1] = right;
10335     result = (left & 0xff) | ((right & 0xff) << 8);
10336     }
10337     + unlock:
10338     + mutex_unlock(&mixer->reg_mutex);
10339     return result;
10340     }
10341    
10342     @@ -278,6 +297,7 @@ static int snd_mixer_oss_set_volume(struct snd_mixer_oss_file *fmixer,
10343    
10344     if (mixer == NULL || slot > 30)
10345     return -EIO;
10346     + mutex_lock(&mixer->reg_mutex);
10347     pslot = &mixer->slots[slot];
10348     if (left > 100)
10349     left = 100;
10350     @@ -288,10 +308,13 @@ static int snd_mixer_oss_set_volume(struct snd_mixer_oss_file *fmixer,
10351     if (pslot->put_volume)
10352     result = pslot->put_volume(fmixer, pslot, left, right);
10353     if (result < 0)
10354     - return result;
10355     + goto unlock;
10356     pslot->volume[0] = left;
10357     pslot->volume[1] = right;
10358     - return (left & 0xff) | ((right & 0xff) << 8);
10359     + result = (left & 0xff) | ((right & 0xff) << 8);
10360     + unlock:
10361     + mutex_unlock(&mixer->reg_mutex);
10362     + return result;
10363     }
10364    
10365     static int snd_mixer_oss_ioctl1(struct snd_mixer_oss_file *fmixer, unsigned int cmd, unsigned long arg)
10366     diff --git a/sound/core/timer.c b/sound/core/timer.c
10367     index b5a0ba79bf746..d684aa4150aad 100644
10368     --- a/sound/core/timer.c
10369     +++ b/sound/core/timer.c
10370     @@ -595,13 +595,13 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
10371     if (!timer)
10372     return -EINVAL;
10373     spin_lock_irqsave(&timer->lock, flags);
10374     + list_del_init(&timeri->ack_list);
10375     + list_del_init(&timeri->active_list);
10376     if (!(timeri->flags & (SNDRV_TIMER_IFLG_RUNNING |
10377     SNDRV_TIMER_IFLG_START))) {
10378     result = -EBUSY;
10379     goto unlock;
10380     }
10381     - list_del_init(&timeri->ack_list);
10382     - list_del_init(&timeri->active_list);
10383     if (timer->card && timer->card->shutdown)
10384     goto unlock;
10385     if (stop) {
10386     @@ -636,23 +636,22 @@ static int snd_timer_stop1(struct snd_timer_instance *timeri, bool stop)
10387     static int snd_timer_stop_slave(struct snd_timer_instance *timeri, bool stop)
10388     {
10389     unsigned long flags;
10390     + bool running;
10391    
10392     spin_lock_irqsave(&slave_active_lock, flags);
10393     - if (!(timeri->flags & SNDRV_TIMER_IFLG_RUNNING)) {
10394     - spin_unlock_irqrestore(&slave_active_lock, flags);
10395     - return -EBUSY;
10396     - }
10397     + running = timeri->flags & SNDRV_TIMER_IFLG_RUNNING;
10398     timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
10399     if (timeri->timer) {
10400     spin_lock(&timeri->timer->lock);
10401     list_del_init(&timeri->ack_list);
10402     list_del_init(&timeri->active_list);
10403     - snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
10404     - SNDRV_TIMER_EVENT_PAUSE);
10405     + if (running)
10406     + snd_timer_notify1(timeri, stop ? SNDRV_TIMER_EVENT_STOP :
10407     + SNDRV_TIMER_EVENT_PAUSE);
10408     spin_unlock(&timeri->timer->lock);
10409     }
10410     spin_unlock_irqrestore(&slave_active_lock, flags);
10411     - return 0;
10412     + return running ? 0 : -EBUSY;
10413     }
10414    
10415     /*
10416     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
10417     index ebb1ee69dd0c3..95d472d433e70 100644
10418     --- a/sound/pci/hda/hda_intel.c
10419     +++ b/sound/pci/hda/hda_intel.c
10420     @@ -671,13 +671,17 @@ static int azx_position_check(struct azx *chip, struct azx_dev *azx_dev)
10421     * the update-IRQ timing. The IRQ is issued before actually the
10422     * data is processed. So, we need to process it afterwords in a
10423     * workqueue.
10424     + *
10425     + * Returns 1 if OK to proceed, 0 for delay handling, -1 for skipping update
10426     */
10427     static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
10428     {
10429     struct snd_pcm_substream *substream = azx_dev->core.substream;
10430     + struct snd_pcm_runtime *runtime = substream->runtime;
10431     int stream = substream->stream;
10432     u32 wallclk;
10433     unsigned int pos;
10434     + snd_pcm_uframes_t hwptr, target;
10435    
10436     wallclk = azx_readl(chip, WALLCLK) - azx_dev->core.start_wallclk;
10437     if (wallclk < (azx_dev->core.period_wallclk * 2) / 3)
10438     @@ -714,6 +718,24 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
10439     /* NG - it's below the first next period boundary */
10440     return chip->bdl_pos_adj ? 0 : -1;
10441     azx_dev->core.start_wallclk += wallclk;
10442     +
10443     + if (azx_dev->core.no_period_wakeup)
10444     + return 1; /* OK, no need to check period boundary */
10445     +
10446     + if (runtime->hw_ptr_base != runtime->hw_ptr_interrupt)
10447     + return 1; /* OK, already in hwptr updating process */
10448     +
10449     + /* check whether the period gets really elapsed */
10450     + pos = bytes_to_frames(runtime, pos);
10451     + hwptr = runtime->hw_ptr_base + pos;
10452     + if (hwptr < runtime->status->hw_ptr)
10453     + hwptr += runtime->buffer_size;
10454     + target = runtime->hw_ptr_interrupt + runtime->period_size;
10455     + if (hwptr < target) {
10456     + /* too early wakeup, process it later */
10457     + return chip->bdl_pos_adj ? 0 : -1;
10458     + }
10459     +
10460     return 1; /* OK, it's fine */
10461     }
10462    
10463     @@ -907,11 +929,7 @@ static unsigned int azx_get_pos_skl(struct azx *chip, struct azx_dev *azx_dev)
10464     if (azx_dev->core.substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
10465     return azx_skl_get_dpib_pos(chip, azx_dev);
10466    
10467     - /* For capture, we need to read posbuf, but it requires a delay
10468     - * for the possible boundary overlap; the read of DPIB fetches the
10469     - * actual posbuf
10470     - */
10471     - udelay(20);
10472     + /* read of DPIB fetches the actual posbuf */
10473     azx_skl_get_dpib_pos(chip, azx_dev);
10474     return azx_get_pos_posbuf(chip, azx_dev);
10475     }
10476     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
10477     index 49aefb7875e72..94fc17b28e9c7 100644
10478     --- a/sound/pci/hda/patch_realtek.c
10479     +++ b/sound/pci/hda/patch_realtek.c
10480     @@ -2541,6 +2541,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
10481     SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10482     SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10483     SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10484     + SND_PCI_QUIRK(0x1558, 0x67f1, "Clevo PC70H[PRS]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10485     SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10486     SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170SM", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
10487     SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", ALC1220_FIXUP_CLEVO_PB51ED),
10488     @@ -7976,6 +7977,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10489     SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
10490     SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
10491     SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
10492     + SND_PCI_QUIRK(0x1025, 0x141f, "Acer Spin SP513-54N", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
10493     SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
10494     SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
10495     SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
10496     @@ -8102,6 +8104,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10497     SND_PCI_QUIRK(0x103c, 0x861f, "HP Elite Dragonfly G1", ALC285_FIXUP_HP_GPIO_AMP_INIT),
10498     SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
10499     SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),
10500     + SND_PCI_QUIRK(0x103c, 0x8728, "HP EliteBook 840 G7", ALC285_FIXUP_HP_GPIO_LED),
10501     SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
10502     SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_AMP_INIT),
10503     SND_PCI_QUIRK(0x103c, 0x8760, "HP", ALC285_FIXUP_HP_MUTE_LED),
10504     @@ -8132,6 +8135,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10505     SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
10506     SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
10507     SND_PCI_QUIRK(0x1043, 0x194e, "ASUS UX563FD", ALC294_FIXUP_ASUS_HPE),
10508     + SND_PCI_QUIRK(0x1043, 0x1970, "ASUS UX550VE", ALC289_FIXUP_ASUS_GA401),
10509     SND_PCI_QUIRK(0x1043, 0x1982, "ASUS B1400CEPE", ALC256_FIXUP_ASUS_HPE),
10510     SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
10511     SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
10512     diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
10513     index 6825e874785f2..ebee58eca4d51 100644
10514     --- a/sound/soc/codecs/cs42l42.c
10515     +++ b/sound/soc/codecs/cs42l42.c
10516     @@ -91,7 +91,7 @@ static const struct reg_default cs42l42_reg_defaults[] = {
10517     { CS42L42_ASP_RX_INT_MASK, 0x1F },
10518     { CS42L42_ASP_TX_INT_MASK, 0x0F },
10519     { CS42L42_CODEC_INT_MASK, 0x03 },
10520     - { CS42L42_SRCPL_INT_MASK, 0xFF },
10521     + { CS42L42_SRCPL_INT_MASK, 0x7F },
10522     { CS42L42_VPMON_INT_MASK, 0x01 },
10523     { CS42L42_PLL_LOCK_INT_MASK, 0x01 },
10524     { CS42L42_TSRS_PLUG_INT_MASK, 0x0F },
10525     @@ -128,7 +128,7 @@ static const struct reg_default cs42l42_reg_defaults[] = {
10526     { CS42L42_MIXER_CHA_VOL, 0x3F },
10527     { CS42L42_MIXER_ADC_VOL, 0x3F },
10528     { CS42L42_MIXER_CHB_VOL, 0x3F },
10529     - { CS42L42_EQ_COEF_IN0, 0x22 },
10530     + { CS42L42_EQ_COEF_IN0, 0x00 },
10531     { CS42L42_EQ_COEF_IN1, 0x00 },
10532     { CS42L42_EQ_COEF_IN2, 0x00 },
10533     { CS42L42_EQ_COEF_IN3, 0x00 },
10534     @@ -1798,8 +1798,9 @@ static int cs42l42_i2c_probe(struct i2c_client *i2c_client,
10535     NULL, cs42l42_irq_thread,
10536     IRQF_ONESHOT | IRQF_TRIGGER_LOW,
10537     "cs42l42", cs42l42);
10538     -
10539     - if (ret != 0)
10540     + if (ret == -EPROBE_DEFER)
10541     + goto err_disable;
10542     + else if (ret != 0)
10543     dev_err(&i2c_client->dev,
10544     "Failed to request IRQ: %d\n", ret);
10545    
10546     diff --git a/sound/synth/emux/emux.c b/sound/synth/emux/emux.c
10547     index f65e6c7b139f5..6695530bba9b3 100644
10548     --- a/sound/synth/emux/emux.c
10549     +++ b/sound/synth/emux/emux.c
10550     @@ -88,7 +88,7 @@ int snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, ch
10551     emu->name = kstrdup(name, GFP_KERNEL);
10552     emu->voices = kcalloc(emu->max_voices, sizeof(struct snd_emux_voice),
10553     GFP_KERNEL);
10554     - if (emu->voices == NULL)
10555     + if (emu->name == NULL || emu->voices == NULL)
10556     return -ENOMEM;
10557    
10558     /* create soundfont list */
10559     diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c
10560     index 43a2a62d66f7e..49629d4bb327a 100644
10561     --- a/sound/usb/6fire/comm.c
10562     +++ b/sound/usb/6fire/comm.c
10563     @@ -95,7 +95,7 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev)
10564     int actual_len;
10565    
10566     ret = usb_interrupt_msg(dev, usb_sndintpipe(dev, COMM_EP),
10567     - buffer, buffer[1] + 2, &actual_len, HZ);
10568     + buffer, buffer[1] + 2, &actual_len, 1000);
10569     if (ret < 0)
10570     return ret;
10571     else if (actual_len != buffer[1] + 2)
10572     diff --git a/sound/usb/6fire/firmware.c b/sound/usb/6fire/firmware.c
10573     index 69137c14d0dcf..2333e8ff3411a 100644
10574     --- a/sound/usb/6fire/firmware.c
10575     +++ b/sound/usb/6fire/firmware.c
10576     @@ -162,7 +162,7 @@ static int usb6fire_fw_ezusb_write(struct usb_device *device,
10577    
10578     ret = usb_control_msg(device, usb_sndctrlpipe(device, 0), type,
10579     USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
10580     - value, 0, data, len, HZ);
10581     + value, 0, data, len, 1000);
10582     if (ret < 0)
10583     return ret;
10584     else if (ret != len)
10585     @@ -175,7 +175,7 @@ static int usb6fire_fw_ezusb_read(struct usb_device *device,
10586     {
10587     int ret = usb_control_msg(device, usb_rcvctrlpipe(device, 0), type,
10588     USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, value,
10589     - 0, data, len, HZ);
10590     + 0, data, len, 1000);
10591     if (ret < 0)
10592     return ret;
10593     else if (ret != len)
10594     @@ -190,7 +190,7 @@ static int usb6fire_fw_fpga_write(struct usb_device *device,
10595     int ret;
10596    
10597     ret = usb_bulk_msg(device, usb_sndbulkpipe(device, FPGA_EP), data, len,
10598     - &actual_len, HZ);
10599     + &actual_len, 1000);
10600     if (ret < 0)
10601     return ret;
10602     else if (actual_len != len)
10603     diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
10604     index 1e38cdda2af69..8ca56ba600cf4 100644
10605     --- a/sound/usb/line6/driver.c
10606     +++ b/sound/usb/line6/driver.c
10607     @@ -113,12 +113,12 @@ static int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
10608     retval = usb_interrupt_msg(line6->usbdev,
10609     usb_sndintpipe(line6->usbdev, properties->ep_ctrl_w),
10610     (char *)frag_buf, frag_size,
10611     - &partial, LINE6_TIMEOUT * HZ);
10612     + &partial, LINE6_TIMEOUT);
10613     } else {
10614     retval = usb_bulk_msg(line6->usbdev,
10615     usb_sndbulkpipe(line6->usbdev, properties->ep_ctrl_w),
10616     (char *)frag_buf, frag_size,
10617     - &partial, LINE6_TIMEOUT * HZ);
10618     + &partial, LINE6_TIMEOUT);
10619     }
10620    
10621     if (retval) {
10622     @@ -350,7 +350,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
10623     ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
10624     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
10625     (datalen << 8) | 0x21, address,
10626     - NULL, 0, LINE6_TIMEOUT * HZ);
10627     + NULL, 0, LINE6_TIMEOUT);
10628    
10629     if (ret < 0) {
10630     dev_err(line6->ifcdev, "read request failed (error %d)\n", ret);
10631     @@ -365,7 +365,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
10632     USB_TYPE_VENDOR | USB_RECIP_DEVICE |
10633     USB_DIR_IN,
10634     0x0012, 0x0000, len, 1,
10635     - LINE6_TIMEOUT * HZ);
10636     + LINE6_TIMEOUT);
10637     if (ret < 0) {
10638     dev_err(line6->ifcdev,
10639     "receive length failed (error %d)\n", ret);
10640     @@ -393,7 +393,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
10641     ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
10642     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
10643     0x0013, 0x0000, data, datalen,
10644     - LINE6_TIMEOUT * HZ);
10645     + LINE6_TIMEOUT);
10646    
10647     if (ret < 0)
10648     dev_err(line6->ifcdev, "read failed (error %d)\n", ret);
10649     @@ -425,7 +425,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
10650     ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
10651     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
10652     0x0022, address, data, datalen,
10653     - LINE6_TIMEOUT * HZ);
10654     + LINE6_TIMEOUT);
10655    
10656     if (ret < 0) {
10657     dev_err(line6->ifcdev,
10658     @@ -441,7 +441,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
10659     USB_TYPE_VENDOR | USB_RECIP_DEVICE |
10660     USB_DIR_IN,
10661     0x0012, 0x0000,
10662     - status, 1, LINE6_TIMEOUT * HZ);
10663     + status, 1, LINE6_TIMEOUT);
10664    
10665     if (ret < 0) {
10666     dev_err(line6->ifcdev,
10667     diff --git a/sound/usb/line6/driver.h b/sound/usb/line6/driver.h
10668     index e5e572ed5f304..890c239e3fc01 100644
10669     --- a/sound/usb/line6/driver.h
10670     +++ b/sound/usb/line6/driver.h
10671     @@ -27,7 +27,7 @@
10672     #define LINE6_FALLBACK_INTERVAL 10
10673     #define LINE6_FALLBACK_MAXPACKETSIZE 16
10674    
10675     -#define LINE6_TIMEOUT 1
10676     +#define LINE6_TIMEOUT 1000
10677     #define LINE6_BUFSIZE_LISTEN 64
10678     #define LINE6_MIDI_MESSAGE_MAXLEN 256
10679    
10680     diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c
10681     index 5d9954a2d05e6..8b1610bdb8d5c 100644
10682     --- a/sound/usb/line6/podhd.c
10683     +++ b/sound/usb/line6/podhd.c
10684     @@ -190,7 +190,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
10685     ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0),
10686     0x67, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
10687     0x11, 0,
10688     - NULL, 0, LINE6_TIMEOUT * HZ);
10689     + NULL, 0, LINE6_TIMEOUT);
10690     if (ret < 0) {
10691     dev_err(pod->line6.ifcdev, "read request failed (error %d)\n", ret);
10692     goto exit;
10693     @@ -200,7 +200,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
10694     ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
10695     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
10696     0x11, 0x0,
10697     - init_bytes, 3, LINE6_TIMEOUT * HZ);
10698     + init_bytes, 3, LINE6_TIMEOUT);
10699     if (ret < 0) {
10700     dev_err(pod->line6.ifcdev,
10701     "receive length failed (error %d)\n", ret);
10702     @@ -220,7 +220,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
10703     USB_REQ_SET_FEATURE,
10704     USB_TYPE_STANDARD | USB_RECIP_DEVICE | USB_DIR_OUT,
10705     1, 0,
10706     - NULL, 0, LINE6_TIMEOUT * HZ);
10707     + NULL, 0, LINE6_TIMEOUT);
10708     exit:
10709     kfree(init_bytes);
10710     return ret;
10711     diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c
10712     index d0a555dbe324f..21f86c71dad7f 100644
10713     --- a/sound/usb/line6/toneport.c
10714     +++ b/sound/usb/line6/toneport.c
10715     @@ -128,7 +128,7 @@ static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2)
10716    
10717     ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev, 0), 0x67,
10718     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
10719     - cmd1, cmd2, NULL, 0, LINE6_TIMEOUT * HZ);
10720     + cmd1, cmd2, NULL, 0, LINE6_TIMEOUT);
10721    
10722     if (ret < 0) {
10723     dev_err(&usbdev->dev, "send failed (error %d)\n", ret);
10724     diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c
10725     index 307b72d5fffa9..77304a29a61d2 100644
10726     --- a/sound/usb/misc/ua101.c
10727     +++ b/sound/usb/misc/ua101.c
10728     @@ -1020,7 +1020,7 @@ static int detect_usb_format(struct ua101 *ua)
10729     fmt_playback->bSubframeSize * ua->playback.channels;
10730    
10731     epd = &ua->intf[INTF_CAPTURE]->altsetting[1].endpoint[0].desc;
10732     - if (!usb_endpoint_is_isoc_in(epd)) {
10733     + if (!usb_endpoint_is_isoc_in(epd) || usb_endpoint_maxp(epd) == 0) {
10734     dev_err(&ua->dev->dev, "invalid capture endpoint\n");
10735     return -ENXIO;
10736     }
10737     @@ -1028,7 +1028,7 @@ static int detect_usb_format(struct ua101 *ua)
10738     ua->capture.max_packet_bytes = usb_endpoint_maxp(epd);
10739    
10740     epd = &ua->intf[INTF_PLAYBACK]->altsetting[1].endpoint[0].desc;
10741     - if (!usb_endpoint_is_isoc_out(epd)) {
10742     + if (!usb_endpoint_is_isoc_out(epd) || usb_endpoint_maxp(epd) == 0) {
10743     dev_err(&ua->dev->dev, "invalid playback endpoint\n");
10744     return -ENXIO;
10745     }
10746     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
10747     index d5d828817c5e8..72223545abfd8 100644
10748     --- a/sound/usb/quirks.c
10749     +++ b/sound/usb/quirks.c
10750     @@ -1842,6 +1842,7 @@ static const struct registration_quirk registration_quirks[] = {
10751     REG_QUIRK_ENTRY(0x0951, 0x16ea, 2), /* Kingston HyperX Cloud Flight S */
10752     REG_QUIRK_ENTRY(0x0ecb, 0x1f46, 2), /* JBL Quantum 600 */
10753     REG_QUIRK_ENTRY(0x0ecb, 0x1f47, 2), /* JBL Quantum 800 */
10754     + REG_QUIRK_ENTRY(0x0ecb, 0x1f4c, 2), /* JBL Quantum 400 */
10755     REG_QUIRK_ENTRY(0x0ecb, 0x2039, 2), /* JBL Quantum 400 */
10756     REG_QUIRK_ENTRY(0x0ecb, 0x203c, 2), /* JBL Quantum 600 */
10757     REG_QUIRK_ENTRY(0x0ecb, 0x203e, 2), /* JBL Quantum 800 */
10758     diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
10759     index d606a358480da..41daf0fa95b9f 100644
10760     --- a/tools/lib/bpf/btf.c
10761     +++ b/tools/lib/bpf/btf.c
10762     @@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)
10763     return -EINVAL;
10764     }
10765    
10766     - if (meta_left < hdr->type_off) {
10767     - pr_debug("Invalid BTF type section offset:%u\n", hdr->type_off);
10768     + if (meta_left < hdr->str_off + hdr->str_len) {
10769     + pr_debug("Invalid BTF total size:%u\n", btf->data_size);
10770     return -EINVAL;
10771     }
10772    
10773     - if (meta_left < hdr->str_off) {
10774     - pr_debug("Invalid BTF string section offset:%u\n", hdr->str_off);
10775     + if (hdr->type_off + hdr->type_len > hdr->str_off) {
10776     + pr_debug("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n",
10777     + hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len);
10778     return -EINVAL;
10779     }
10780    
10781     - if (hdr->type_off >= hdr->str_off) {
10782     - pr_debug("BTF type section offset >= string section offset. No type?\n");
10783     - return -EINVAL;
10784     - }
10785     -
10786     - if (hdr->type_off & 0x02) {
10787     + if (hdr->type_off % 4) {
10788     pr_debug("BTF type section is not aligned to 4 bytes\n");
10789     return -EINVAL;
10790     }
10791     diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c
10792     index f7ed5d122e229..c766813d56be0 100644
10793     --- a/tools/perf/util/bpf-event.c
10794     +++ b/tools/perf/util/bpf-event.c
10795     @@ -467,7 +467,7 @@ void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info,
10796     synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0);
10797     fprintf(fp, "# bpf_prog_info %u: %s addr 0x%llx size %u\n",
10798     info->id, name, prog_addrs[0], prog_lens[0]);
10799     - return;
10800     + goto out;
10801     }
10802    
10803     fprintf(fp, "# bpf_prog_info %u:\n", info->id);
10804     @@ -477,4 +477,6 @@ void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info,
10805     fprintf(fp, "# \tsub_prog %u: %s addr 0x%llx size %u\n",
10806     i, name, prog_addrs[i], prog_lens[i]);
10807     }
10808     +out:
10809     + btf__free(btf);
10810     }
10811     diff --git a/tools/testing/selftests/bpf/progs/strobemeta.h b/tools/testing/selftests/bpf/progs/strobemeta.h
10812     index 067eb625d01c5..5ba8d39c4d544 100644
10813     --- a/tools/testing/selftests/bpf/progs/strobemeta.h
10814     +++ b/tools/testing/selftests/bpf/progs/strobemeta.h
10815     @@ -349,7 +349,7 @@ static __always_inline uint64_t read_str_var(struct strobemeta_cfg *cfg,
10816     void *payload)
10817     {
10818     void *location;
10819     - uint32_t len;
10820     + uint64_t len;
10821    
10822     data->str_lens[idx] = 0;
10823     location = calc_location(&cfg->str_locs[idx], tls_base);
10824     @@ -381,7 +381,7 @@ static __always_inline void *read_map_var(struct strobemeta_cfg *cfg,
10825     struct strobe_map_descr* descr = &data->map_descrs[idx];
10826     struct strobe_map_raw map;
10827     void *location;
10828     - uint32_t len;
10829     + uint64_t len;
10830     int i;
10831    
10832     descr->tag_len = 0; /* presume no tag is set */
10833     diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c
10834     index 48bbe8e0ce48d..4369bc46bf9c2 100644
10835     --- a/tools/testing/selftests/bpf/test_progs.c
10836     +++ b/tools/testing/selftests/bpf/test_progs.c
10837     @@ -289,7 +289,7 @@ int extract_build_id(char *build_id, size_t size)
10838    
10839     if (getline(&line, &len, fp) == -1)
10840     goto err;
10841     - fclose(fp);
10842     + pclose(fp);
10843    
10844     if (len > size)
10845     len = size;
10846     @@ -298,7 +298,7 @@ int extract_build_id(char *build_id, size_t size)
10847     free(line);
10848     return 0;
10849     err:
10850     - fclose(fp);
10851     + pclose(fp);
10852     return -1;
10853     }
10854    
10855     diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
10856     index 2cbc09aad7f64..92419b66b0578 100644
10857     --- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
10858     +++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
10859     @@ -84,7 +84,7 @@ int get_warnings_count(void)
10860     f = popen("dmesg | grep \"WARNING:\" | wc -l", "r");
10861     if (fscanf(f, "%d", &warnings) < 1)
10862     warnings = 0;
10863     - fclose(f);
10864     + pclose(f);
10865    
10866     return warnings;
10867     }
10868     diff --git a/tools/testing/selftests/net/udpgso_bench_rx.c b/tools/testing/selftests/net/udpgso_bench_rx.c
10869     index 76a24052f4b47..6a193425c367f 100644
10870     --- a/tools/testing/selftests/net/udpgso_bench_rx.c
10871     +++ b/tools/testing/selftests/net/udpgso_bench_rx.c
10872     @@ -293,19 +293,17 @@ static void usage(const char *filepath)
10873    
10874     static void parse_opts(int argc, char **argv)
10875     {
10876     + const char *bind_addr = NULL;
10877     int c;
10878    
10879     - /* bind to any by default */
10880     - setup_sockaddr(PF_INET6, "::", &cfg_bind_addr);
10881     while ((c = getopt(argc, argv, "4b:C:Gl:n:p:rR:S:tv")) != -1) {
10882     switch (c) {
10883     case '4':
10884     cfg_family = PF_INET;
10885     cfg_alen = sizeof(struct sockaddr_in);
10886     - setup_sockaddr(PF_INET, "0.0.0.0", &cfg_bind_addr);
10887     break;
10888     case 'b':
10889     - setup_sockaddr(cfg_family, optarg, &cfg_bind_addr);
10890     + bind_addr = optarg;
10891     break;
10892     case 'C':
10893     cfg_connect_timeout_ms = strtoul(optarg, NULL, 0);
10894     @@ -341,6 +339,11 @@ static void parse_opts(int argc, char **argv)
10895     }
10896     }
10897    
10898     + if (!bind_addr)
10899     + bind_addr = cfg_family == PF_INET6 ? "::" : "0.0.0.0";
10900     +
10901     + setup_sockaddr(cfg_family, bind_addr, &cfg_bind_addr);
10902     +
10903     if (optind != argc)
10904     usage(argv[0]);
10905