Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0239-5.4.140-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3637 - (hide annotations) (download)
Mon Oct 24 12:40:44 2022 UTC (20 months ago) by niro
File size: 94325 byte(s)
-add missing
1 niro 3637 diff --git a/Makefile b/Makefile
2     index 1174536034b38..1cb8f72d4dcea 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 5
8     PATCHLEVEL = 4
9     -SUBLEVEL = 139
10     +SUBLEVEL = 140
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
15     index 5f90df30be20a..06fd42417aa96 100644
16     --- a/arch/alpha/kernel/smp.c
17     +++ b/arch/alpha/kernel/smp.c
18     @@ -585,7 +585,7 @@ void
19     smp_send_stop(void)
20     {
21     cpumask_t to_whom;
22     - cpumask_copy(&to_whom, cpu_possible_mask);
23     + cpumask_copy(&to_whom, cpu_online_mask);
24     cpumask_clear_cpu(smp_processor_id(), &to_whom);
25     #ifdef DEBUG_IPI_MSG
26     if (hard_smp_processor_id() != boot_cpu_id)
27     diff --git a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi
28     index 6c2949991e297..64fdd5079d49b 100644
29     --- a/arch/arm/boot/dts/am437x-l4.dtsi
30     +++ b/arch/arm/boot/dts/am437x-l4.dtsi
31     @@ -1611,7 +1611,7 @@
32     compatible = "ti,am4372-d_can", "ti,am3352-d_can";
33     reg = <0x0 0x2000>;
34     clocks = <&dcan1_fck>;
35     - clock-name = "fck";
36     + clock-names = "fck";
37     syscon-raminit = <&scm_conf 0x644 1>;
38     interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
39     status = "disabled";
40     diff --git a/arch/arm/boot/dts/imx53-m53menlo.dts b/arch/arm/boot/dts/imx53-m53menlo.dts
41     index 719ed5ca454af..64faf5b46d92f 100644
42     --- a/arch/arm/boot/dts/imx53-m53menlo.dts
43     +++ b/arch/arm/boot/dts/imx53-m53menlo.dts
44     @@ -388,13 +388,13 @@
45    
46     pinctrl_power_button: powerbutgrp {
47     fsl,pins = <
48     - MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
49     + MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
50     >;
51     };
52    
53     pinctrl_power_out: poweroutgrp {
54     fsl,pins = <
55     - MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
56     + MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
57     >;
58     };
59    
60     diff --git a/arch/arm/boot/dts/imx6qdl-sr-som.dtsi b/arch/arm/boot/dts/imx6qdl-sr-som.dtsi
61     index 6d7f6b9035bc1..f2649241167ec 100644
62     --- a/arch/arm/boot/dts/imx6qdl-sr-som.dtsi
63     +++ b/arch/arm/boot/dts/imx6qdl-sr-som.dtsi
64     @@ -54,7 +54,13 @@
65     pinctrl-names = "default";
66     pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
67     phy-mode = "rgmii-id";
68     - phy-reset-duration = <2>;
69     +
70     + /*
71     + * The PHY seems to require a long-enough reset duration to avoid
72     + * some rare issues where the PHY gets stuck in an inconsistent and
73     + * non-functional state at boot-up. 10ms proved to be fine .
74     + */
75     + phy-reset-duration = <10>;
76     phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
77     status = "okay";
78     };
79     diff --git a/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi b/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
80     index 038d8c90f6dfe..621396884c318 100644
81     --- a/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
82     +++ b/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
83     @@ -43,6 +43,7 @@
84     assigned-clock-rates = <0>, <198000000>;
85     cap-power-off-card;
86     keep-power-in-suspend;
87     + max-frequency = <25000000>;
88     mmc-pwrseq = <&wifi_pwrseq>;
89     no-1-8-v;
90     non-removable;
91     diff --git a/arch/arm/boot/dts/omap5-board-common.dtsi b/arch/arm/boot/dts/omap5-board-common.dtsi
92     index 68ac04641bdb1..c7bf68c90ea8f 100644
93     --- a/arch/arm/boot/dts/omap5-board-common.dtsi
94     +++ b/arch/arm/boot/dts/omap5-board-common.dtsi
95     @@ -30,14 +30,6 @@
96     regulator-max-microvolt = <5000000>;
97     };
98    
99     - vdds_1v8_main: fixedregulator-vdds_1v8_main {
100     - compatible = "regulator-fixed";
101     - regulator-name = "vdds_1v8_main";
102     - vin-supply = <&smps7_reg>;
103     - regulator-min-microvolt = <1800000>;
104     - regulator-max-microvolt = <1800000>;
105     - };
106     -
107     vmmcsd_fixed: fixedregulator-mmcsd {
108     compatible = "regulator-fixed";
109     regulator-name = "vmmcsd_fixed";
110     @@ -487,6 +479,7 @@
111     regulator-boot-on;
112     };
113    
114     + vdds_1v8_main:
115     smps7_reg: smps7 {
116     /* VDDS_1v8_OMAP over VDDS_1v8_MAIN */
117     regulator-name = "smps7";
118     diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c
119     index 0dfd0ae7a63dd..af12668d0bf51 100644
120     --- a/arch/arm/mach-imx/mmdc.c
121     +++ b/arch/arm/mach-imx/mmdc.c
122     @@ -103,6 +103,7 @@ struct mmdc_pmu {
123     struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
124     struct hlist_node node;
125     struct fsl_mmdc_devtype_data *devtype_data;
126     + struct clk *mmdc_ipg_clk;
127     };
128    
129     /*
130     @@ -462,11 +463,14 @@ static int imx_mmdc_remove(struct platform_device *pdev)
131    
132     cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
133     perf_pmu_unregister(&pmu_mmdc->pmu);
134     + iounmap(pmu_mmdc->mmdc_base);
135     + clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk);
136     kfree(pmu_mmdc);
137     return 0;
138     }
139    
140     -static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base)
141     +static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base,
142     + struct clk *mmdc_ipg_clk)
143     {
144     struct mmdc_pmu *pmu_mmdc;
145     char *name;
146     @@ -494,6 +498,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
147     }
148    
149     mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
150     + pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;
151     if (mmdc_num == 0)
152     name = "mmdc";
153     else
154     @@ -529,7 +534,7 @@ pmu_free:
155    
156     #else
157     #define imx_mmdc_remove NULL
158     -#define imx_mmdc_perf_init(pdev, mmdc_base) 0
159     +#define imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk) 0
160     #endif
161    
162     static int imx_mmdc_probe(struct platform_device *pdev)
163     @@ -567,7 +572,13 @@ static int imx_mmdc_probe(struct platform_device *pdev)
164     val &= ~(1 << BP_MMDC_MAPSR_PSD);
165     writel_relaxed(val, reg);
166    
167     - return imx_mmdc_perf_init(pdev, mmdc_base);
168     + err = imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk);
169     + if (err) {
170     + iounmap(mmdc_base);
171     + clk_disable_unprepare(mmdc_ipg_clk);
172     + }
173     +
174     + return err;
175     }
176    
177     int imx_mmdc_get_ddr_type(void)
178     diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
179     index 5a2a188debd1d..5716ac20bddd1 100644
180     --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
181     +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
182     @@ -65,7 +65,7 @@
183     };
184     };
185    
186     - sysclk: clock-sysclk {
187     + sysclk: sysclk {
188     compatible = "fixed-clock";
189     #clock-cells = <0>;
190     clock-frequency = <100000000>;
191     diff --git a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
192     index 874bc3954c8e6..025e02d23da9b 100644
193     --- a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
194     +++ b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
195     @@ -118,6 +118,7 @@
196     pinctrl-names = "default";
197     pinctrl-0 = <&i2c1_pins>;
198     clock-frequency = <100000>;
199     + /delete-property/ mrvl,i2c-fast-mode;
200     status = "okay";
201    
202     rtc@6f {
203     diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h
204     index 9f0ec21d6327f..88d20f04c64a5 100644
205     --- a/arch/arm64/include/asm/arch_timer.h
206     +++ b/arch/arm64/include/asm/arch_timer.h
207     @@ -165,25 +165,6 @@ static inline void arch_timer_set_cntkctl(u32 cntkctl)
208     isb();
209     }
210    
211     -/*
212     - * Ensure that reads of the counter are treated the same as memory reads
213     - * for the purposes of ordering by subsequent memory barriers.
214     - *
215     - * This insanity brought to you by speculative system register reads,
216     - * out-of-order memory accesses, sequence locks and Thomas Gleixner.
217     - *
218     - * http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html
219     - */
220     -#define arch_counter_enforce_ordering(val) do { \
221     - u64 tmp, _val = (val); \
222     - \
223     - asm volatile( \
224     - " eor %0, %1, %1\n" \
225     - " add %0, sp, %0\n" \
226     - " ldr xzr, [%0]" \
227     - : "=r" (tmp) : "r" (_val)); \
228     -} while (0)
229     -
230     static __always_inline u64 __arch_counter_get_cntpct_stable(void)
231     {
232     u64 cnt;
233     @@ -224,8 +205,6 @@ static __always_inline u64 __arch_counter_get_cntvct(void)
234     return cnt;
235     }
236    
237     -#undef arch_counter_enforce_ordering
238     -
239     static inline int arch_timer_arch_init(void)
240     {
241     return 0;
242     diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
243     index e0e2b1946f42b..0fcd854fc95f3 100644
244     --- a/arch/arm64/include/asm/barrier.h
245     +++ b/arch/arm64/include/asm/barrier.h
246     @@ -57,6 +57,25 @@ static inline unsigned long array_index_mask_nospec(unsigned long idx,
247     return mask;
248     }
249    
250     +/*
251     + * Ensure that reads of the counter are treated the same as memory reads
252     + * for the purposes of ordering by subsequent memory barriers.
253     + *
254     + * This insanity brought to you by speculative system register reads,
255     + * out-of-order memory accesses, sequence locks and Thomas Gleixner.
256     + *
257     + * http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html
258     + */
259     +#define arch_counter_enforce_ordering(val) do { \
260     + u64 tmp, _val = (val); \
261     + \
262     + asm volatile( \
263     + " eor %0, %1, %1\n" \
264     + " add %0, sp, %0\n" \
265     + " ldr xzr, [%0]" \
266     + : "=r" (tmp) : "r" (_val)); \
267     +} while (0)
268     +
269     #define __smp_mb() dmb(ish)
270     #define __smp_rmb() dmb(ishld)
271     #define __smp_wmb() dmb(ishst)
272     diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
273     index bf57308fcd635..92b2575b01918 100644
274     --- a/arch/arm64/include/asm/ptrace.h
275     +++ b/arch/arm64/include/asm/ptrace.h
276     @@ -299,7 +299,17 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
277    
278     static inline unsigned long regs_return_value(struct pt_regs *regs)
279     {
280     - return regs->regs[0];
281     + unsigned long val = regs->regs[0];
282     +
283     + /*
284     + * Audit currently uses regs_return_value() instead of
285     + * syscall_get_return_value(). Apply the same sign-extension here until
286     + * audit is updated to use syscall_get_return_value().
287     + */
288     + if (compat_user_mode(regs))
289     + val = sign_extend64(val, 31);
290     +
291     + return val;
292     }
293    
294     static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)
295     diff --git a/arch/arm64/include/asm/syscall.h b/arch/arm64/include/asm/syscall.h
296     index cfc0672013f67..03e20895453a7 100644
297     --- a/arch/arm64/include/asm/syscall.h
298     +++ b/arch/arm64/include/asm/syscall.h
299     @@ -29,22 +29,23 @@ static inline void syscall_rollback(struct task_struct *task,
300     regs->regs[0] = regs->orig_x0;
301     }
302    
303     -
304     -static inline long syscall_get_error(struct task_struct *task,
305     - struct pt_regs *regs)
306     +static inline long syscall_get_return_value(struct task_struct *task,
307     + struct pt_regs *regs)
308     {
309     - unsigned long error = regs->regs[0];
310     + unsigned long val = regs->regs[0];
311    
312     if (is_compat_thread(task_thread_info(task)))
313     - error = sign_extend64(error, 31);
314     + val = sign_extend64(val, 31);
315    
316     - return IS_ERR_VALUE(error) ? error : 0;
317     + return val;
318     }
319    
320     -static inline long syscall_get_return_value(struct task_struct *task,
321     - struct pt_regs *regs)
322     +static inline long syscall_get_error(struct task_struct *task,
323     + struct pt_regs *regs)
324     {
325     - return regs->regs[0];
326     + unsigned long error = syscall_get_return_value(task, regs);
327     +
328     + return IS_ERR_VALUE(error) ? error : 0;
329     }
330    
331     static inline void syscall_set_return_value(struct task_struct *task,
332     diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
333     index ff83b8b574fc7..d7361faa42dea 100644
334     --- a/arch/arm64/include/asm/vdso/gettimeofday.h
335     +++ b/arch/arm64/include/asm/vdso/gettimeofday.h
336     @@ -85,11 +85,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
337     */
338     isb();
339     asm volatile("mrs %0, cntvct_el0" : "=r" (res) :: "memory");
340     - /*
341     - * This isb() is required to prevent that the seq lock is
342     - * speculated.#
343     - */
344     - isb();
345     + arch_counter_enforce_ordering(res);
346    
347     return res;
348     }
349     diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
350     index 0cfd685774891..8a95a013dfd3c 100644
351     --- a/arch/arm64/kernel/ptrace.c
352     +++ b/arch/arm64/kernel/ptrace.c
353     @@ -1868,7 +1868,7 @@ void syscall_trace_exit(struct pt_regs *regs)
354     audit_syscall_exit(regs);
355    
356     if (flags & _TIF_SYSCALL_TRACEPOINT)
357     - trace_sys_exit(regs, regs_return_value(regs));
358     + trace_sys_exit(regs, syscall_get_return_value(current, regs));
359    
360     if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
361     tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
362     diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
363     index ddb757b2c3e5b..f6d3278c1a4e0 100644
364     --- a/arch/arm64/kernel/signal.c
365     +++ b/arch/arm64/kernel/signal.c
366     @@ -29,6 +29,7 @@
367     #include <asm/unistd.h>
368     #include <asm/fpsimd.h>
369     #include <asm/ptrace.h>
370     +#include <asm/syscall.h>
371     #include <asm/signal32.h>
372     #include <asm/traps.h>
373     #include <asm/vdso.h>
374     @@ -868,7 +869,7 @@ static void do_signal(struct pt_regs *regs)
375     retval == -ERESTART_RESTARTBLOCK ||
376     (retval == -ERESTARTSYS &&
377     !(ksig.ka.sa.sa_flags & SA_RESTART)))) {
378     - regs->regs[0] = -EINTR;
379     + syscall_set_return_value(current, regs, -EINTR, 0);
380     regs->pc = continue_addr;
381     }
382    
383     diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c
384     index f2d2dbbbfca20..091c11521108a 100644
385     --- a/arch/arm64/kernel/syscall.c
386     +++ b/arch/arm64/kernel/syscall.c
387     @@ -50,10 +50,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
388     ret = do_ni_syscall(regs, scno);
389     }
390    
391     - if (is_compat_task())
392     - ret = lower_32_bits(ret);
393     -
394     - regs->regs[0] = ret;
395     + syscall_set_return_value(current, regs, 0, ret);
396     }
397    
398     static inline bool has_syscall_work(unsigned long flags)
399     @@ -108,7 +105,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
400     if (has_syscall_work(flags)) {
401     /* set default errno for user-issued syscall(-1) */
402     if (scno == NO_SYSCALL)
403     - regs->regs[0] = -ENOSYS;
404     + syscall_set_return_value(current, regs, -ENOSYS, 0);
405     scno = syscall_trace_enter(regs);
406     if (scno == NO_SYSCALL)
407     goto trace_exit;
408     diff --git a/arch/mips/Makefile b/arch/mips/Makefile
409     index 5403a91ce098d..9ff2c70763a0c 100644
410     --- a/arch/mips/Makefile
411     +++ b/arch/mips/Makefile
412     @@ -320,7 +320,7 @@ KBUILD_LDFLAGS += -m $(ld-emul)
413    
414     ifdef CONFIG_MIPS
415     CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
416     - egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \
417     + egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
418     sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
419     endif
420    
421     diff --git a/arch/mips/mti-malta/malta-platform.c b/arch/mips/mti-malta/malta-platform.c
422     index 11e9527c6e441..62ffac500eb52 100644
423     --- a/arch/mips/mti-malta/malta-platform.c
424     +++ b/arch/mips/mti-malta/malta-platform.c
425     @@ -47,7 +47,8 @@ static struct plat_serial8250_port uart8250_data[] = {
426     .mapbase = 0x1f000900, /* The CBUS UART */
427     .irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
428     .uartclk = 3686400, /* Twice the usual clk! */
429     - .iotype = UPIO_MEM32,
430     + .iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
431     + UPIO_MEM32BE : UPIO_MEM32,
432     .flags = CBUS_UART_FLAGS,
433     .regshift = 3,
434     },
435     diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
436     index 0ed910237c4d8..834e53e538d44 100644
437     --- a/arch/x86/events/perf_event.h
438     +++ b/arch/x86/events/perf_event.h
439     @@ -852,9 +852,10 @@ void x86_pmu_stop(struct perf_event *event, int flags);
440    
441     static inline void x86_pmu_disable_event(struct perf_event *event)
442     {
443     + u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
444     struct hw_perf_event *hwc = &event->hw;
445    
446     - wrmsrl(hwc->config_base, hwc->config);
447     + wrmsrl(hwc->config_base, hwc->config & ~disable_mask);
448     }
449    
450     void x86_pmu_enable_event(struct perf_event *event);
451     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
452     index b9400087141df..260c64c205b8c 100644
453     --- a/arch/x86/kvm/mmu.c
454     +++ b/arch/x86/kvm/mmu.c
455     @@ -2143,7 +2143,7 @@ static int is_empty_shadow_page(u64 *spt)
456     * aggregate version in order to make the slab shrinker
457     * faster
458     */
459     -static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, unsigned long nr)
460     +static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, long nr)
461     {
462     kvm->arch.n_used_mmu_pages += nr;
463     percpu_counter_add(&kvm_total_used_mmu_pages, nr);
464     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
465     index 5d35b9656b67d..364e96e508d90 100644
466     --- a/arch/x86/kvm/x86.c
467     +++ b/arch/x86/kvm/x86.c
468     @@ -3638,8 +3638,17 @@ static int kvm_cpu_accept_dm_intr(struct kvm_vcpu *vcpu)
469    
470     static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu *vcpu)
471     {
472     - return kvm_arch_interrupt_allowed(vcpu) &&
473     - kvm_cpu_accept_dm_intr(vcpu);
474     + /*
475     + * Do not cause an interrupt window exit if an exception
476     + * is pending or an event needs reinjection; userspace
477     + * might want to inject the interrupt manually using KVM_SET_REGS
478     + * or KVM_SET_SREGS. For that to work, we must be at an
479     + * instruction boundary and with no events half-injected.
480     + */
481     + return (kvm_arch_interrupt_allowed(vcpu) &&
482     + kvm_cpu_accept_dm_intr(vcpu) &&
483     + !kvm_event_needs_reinjection(vcpu) &&
484     + !vcpu->arch.exception.pending);
485     }
486    
487     static int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
488     diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
489     index c128d50cb4107..71a82528d4bfe 100644
490     --- a/block/blk-iolatency.c
491     +++ b/block/blk-iolatency.c
492     @@ -832,7 +832,11 @@ static ssize_t iolatency_set_limit(struct kernfs_open_file *of, char *buf,
493    
494     enable = iolatency_set_min_lat_nsec(blkg, lat_val);
495     if (enable) {
496     - WARN_ON_ONCE(!blk_get_queue(blkg->q));
497     + if (!blk_get_queue(blkg->q)) {
498     + ret = -ENODEV;
499     + goto out;
500     + }
501     +
502     blkg_get(blkg);
503     }
504    
505     diff --git a/drivers/acpi/acpica/nsrepair2.c b/drivers/acpi/acpica/nsrepair2.c
506     index b7c408ce340c9..663d85e0adba9 100644
507     --- a/drivers/acpi/acpica/nsrepair2.c
508     +++ b/drivers/acpi/acpica/nsrepair2.c
509     @@ -375,13 +375,6 @@ acpi_ns_repair_CID(struct acpi_evaluate_info *info,
510    
511     (*element_ptr)->common.reference_count =
512     original_ref_count;
513     -
514     - /*
515     - * The original_element holds a reference from the package object
516     - * that represents _HID. Since a new element was created by _HID,
517     - * remove the reference from the _CID package.
518     - */
519     - acpi_ut_remove_reference(original_element);
520     }
521    
522     element_ptr++;
523     diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
524     index 038db94216a91..454f9d7d42fe1 100644
525     --- a/drivers/ata/libata-sff.c
526     +++ b/drivers/ata/libata-sff.c
527     @@ -641,6 +641,20 @@ unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc, unsigned char *buf,
528     }
529     EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
530    
531     +static void ata_pio_xfer(struct ata_queued_cmd *qc, struct page *page,
532     + unsigned int offset, size_t xfer_size)
533     +{
534     + bool do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
535     + unsigned char *buf;
536     +
537     + buf = kmap_atomic(page);
538     + qc->ap->ops->sff_data_xfer(qc, buf + offset, xfer_size, do_write);
539     + kunmap_atomic(buf);
540     +
541     + if (!do_write && !PageSlab(page))
542     + flush_dcache_page(page);
543     +}
544     +
545     /**
546     * ata_pio_sector - Transfer a sector of data.
547     * @qc: Command on going
548     @@ -652,11 +666,9 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
549     */
550     static void ata_pio_sector(struct ata_queued_cmd *qc)
551     {
552     - int do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
553     struct ata_port *ap = qc->ap;
554     struct page *page;
555     unsigned int offset;
556     - unsigned char *buf;
557    
558     if (!qc->cursg) {
559     qc->curbytes = qc->nbytes;
560     @@ -674,13 +686,20 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
561    
562     DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
563    
564     - /* do the actual data transfer */
565     - buf = kmap_atomic(page);
566     - ap->ops->sff_data_xfer(qc, buf + offset, qc->sect_size, do_write);
567     - kunmap_atomic(buf);
568     + /*
569     + * Split the transfer when it splits a page boundary. Note that the
570     + * split still has to be dword aligned like all ATA data transfers.
571     + */
572     + WARN_ON_ONCE(offset % 4);
573     + if (offset + qc->sect_size > PAGE_SIZE) {
574     + unsigned int split_len = PAGE_SIZE - offset;
575    
576     - if (!do_write && !PageSlab(page))
577     - flush_dcache_page(page);
578     + ata_pio_xfer(qc, page, offset, split_len);
579     + ata_pio_xfer(qc, nth_page(page, 1), 0,
580     + qc->sect_size - split_len);
581     + } else {
582     + ata_pio_xfer(qc, page, offset, qc->sect_size);
583     + }
584    
585     qc->curbytes += qc->sect_size;
586     qc->cursg_ofs += qc->sect_size;
587     diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c
588     index 70efbb22dfc30..5f3e5d8372590 100644
589     --- a/drivers/base/firmware_loader/fallback.c
590     +++ b/drivers/base/firmware_loader/fallback.c
591     @@ -86,12 +86,11 @@ static void __fw_load_abort(struct fw_priv *fw_priv)
592     {
593     /*
594     * There is a small window in which user can write to 'loading'
595     - * between loading done and disappearance of 'loading'
596     + * between loading done/aborted and disappearance of 'loading'
597     */
598     - if (fw_sysfs_done(fw_priv))
599     + if (fw_state_is_aborted(fw_priv) || fw_sysfs_done(fw_priv))
600     return;
601    
602     - list_del_init(&fw_priv->pending_list);
603     fw_state_aborted(fw_priv);
604     }
605    
606     @@ -277,7 +276,6 @@ static ssize_t firmware_loading_store(struct device *dev,
607     * Same logic as fw_load_abort, only the DONE bit
608     * is ignored and we set ABORT only on failure.
609     */
610     - list_del_init(&fw_priv->pending_list);
611     if (rc) {
612     fw_state_aborted(fw_priv);
613     written = rc;
614     @@ -512,6 +510,11 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs,
615     }
616    
617     mutex_lock(&fw_lock);
618     + if (fw_state_is_aborted(fw_priv)) {
619     + mutex_unlock(&fw_lock);
620     + retval = -EINTR;
621     + goto out;
622     + }
623     list_add(&fw_priv->pending_list, &pending_fw_head);
624     mutex_unlock(&fw_lock);
625    
626     @@ -534,11 +537,10 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs,
627     if (fw_state_is_aborted(fw_priv)) {
628     if (retval == -ERESTARTSYS)
629     retval = -EINTR;
630     - else
631     - retval = -EAGAIN;
632     } else if (fw_priv->is_paged_buf && !fw_priv->data)
633     retval = -ENOMEM;
634    
635     +out:
636     device_del(f_dev);
637     err_put_dev:
638     put_device(f_dev);
639     diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h
640     index 9bef6c35f344a..ffb2a2724cc5a 100644
641     --- a/drivers/base/firmware_loader/firmware.h
642     +++ b/drivers/base/firmware_loader/firmware.h
643     @@ -108,8 +108,16 @@ static inline void __fw_state_set(struct fw_priv *fw_priv,
644    
645     WRITE_ONCE(fw_st->status, status);
646    
647     - if (status == FW_STATUS_DONE || status == FW_STATUS_ABORTED)
648     + if (status == FW_STATUS_DONE || status == FW_STATUS_ABORTED) {
649     +#ifdef CONFIG_FW_LOADER_USER_HELPER
650     + /*
651     + * Doing this here ensures that the fw_priv is deleted from
652     + * the pending list in all abort/done paths.
653     + */
654     + list_del_init(&fw_priv->pending_list);
655     +#endif
656     complete_all(&fw_st->completion);
657     + }
658     }
659    
660     static inline void fw_state_aborted(struct fw_priv *fw_priv)
661     diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
662     index 95d21b4af9045..249349f64bfe9 100644
663     --- a/drivers/base/firmware_loader/main.c
664     +++ b/drivers/base/firmware_loader/main.c
665     @@ -747,8 +747,10 @@ static void fw_abort_batch_reqs(struct firmware *fw)
666     return;
667    
668     fw_priv = fw->priv;
669     + mutex_lock(&fw_lock);
670     if (!fw_state_is_aborted(fw_priv))
671     fw_state_aborted(fw_priv);
672     + mutex_unlock(&fw_lock);
673     }
674    
675     /* called from request_firmware() and request_firmware_work_func() */
676     diff --git a/drivers/char/tpm/tpm_ftpm_tee.c b/drivers/char/tpm/tpm_ftpm_tee.c
677     index 22bf553ccf9df..69937be2032b1 100644
678     --- a/drivers/char/tpm/tpm_ftpm_tee.c
679     +++ b/drivers/char/tpm/tpm_ftpm_tee.c
680     @@ -255,11 +255,11 @@ static int ftpm_tee_probe(struct platform_device *pdev)
681     pvt_data->session = sess_arg.session;
682    
683     /* Allocate dynamic shared memory with fTPM TA */
684     - pvt_data->shm = tee_shm_alloc(pvt_data->ctx,
685     - MAX_COMMAND_SIZE + MAX_RESPONSE_SIZE,
686     - TEE_SHM_MAPPED | TEE_SHM_DMA_BUF);
687     + pvt_data->shm = tee_shm_alloc_kernel_buf(pvt_data->ctx,
688     + MAX_COMMAND_SIZE +
689     + MAX_RESPONSE_SIZE);
690     if (IS_ERR(pvt_data->shm)) {
691     - dev_err(dev, "%s: tee_shm_alloc failed\n", __func__);
692     + dev_err(dev, "%s: tee_shm_alloc_kernel_buf failed\n", __func__);
693     rc = -ENOMEM;
694     goto out_shm_alloc;
695     }
696     diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c
697     index be160764911bf..f9d5b73343417 100644
698     --- a/drivers/clk/clk-devres.c
699     +++ b/drivers/clk/clk-devres.c
700     @@ -92,13 +92,20 @@ int __must_check devm_clk_bulk_get_optional(struct device *dev, int num_clks,
701     }
702     EXPORT_SYMBOL_GPL(devm_clk_bulk_get_optional);
703    
704     +static void devm_clk_bulk_release_all(struct device *dev, void *res)
705     +{
706     + struct clk_bulk_devres *devres = res;
707     +
708     + clk_bulk_put_all(devres->num_clks, devres->clks);
709     +}
710     +
711     int __must_check devm_clk_bulk_get_all(struct device *dev,
712     struct clk_bulk_data **clks)
713     {
714     struct clk_bulk_devres *devres;
715     int ret;
716    
717     - devres = devres_alloc(devm_clk_bulk_release,
718     + devres = devres_alloc(devm_clk_bulk_release_all,
719     sizeof(*devres), GFP_KERNEL);
720     if (!devres)
721     return -ENOMEM;
722     diff --git a/drivers/clk/clk-stm32f4.c b/drivers/clk/clk-stm32f4.c
723     index 18117ce5ff85f..5c75e3d906c20 100644
724     --- a/drivers/clk/clk-stm32f4.c
725     +++ b/drivers/clk/clk-stm32f4.c
726     @@ -526,7 +526,7 @@ struct stm32f4_pll {
727    
728     struct stm32f4_pll_post_div_data {
729     int idx;
730     - u8 pll_num;
731     + int pll_idx;
732     const char *name;
733     const char *parent;
734     u8 flag;
735     @@ -557,13 +557,13 @@ static const struct clk_div_table post_divr_table[] = {
736    
737     #define MAX_POST_DIV 3
738     static const struct stm32f4_pll_post_div_data post_div_data[MAX_POST_DIV] = {
739     - { CLK_I2SQ_PDIV, PLL_I2S, "plli2s-q-div", "plli2s-q",
740     + { CLK_I2SQ_PDIV, PLL_VCO_I2S, "plli2s-q-div", "plli2s-q",
741     CLK_SET_RATE_PARENT, STM32F4_RCC_DCKCFGR, 0, 5, 0, NULL},
742    
743     - { CLK_SAIQ_PDIV, PLL_SAI, "pllsai-q-div", "pllsai-q",
744     + { CLK_SAIQ_PDIV, PLL_VCO_SAI, "pllsai-q-div", "pllsai-q",
745     CLK_SET_RATE_PARENT, STM32F4_RCC_DCKCFGR, 8, 5, 0, NULL },
746    
747     - { NO_IDX, PLL_SAI, "pllsai-r-div", "pllsai-r", CLK_SET_RATE_PARENT,
748     + { NO_IDX, PLL_VCO_SAI, "pllsai-r-div", "pllsai-r", CLK_SET_RATE_PARENT,
749     STM32F4_RCC_DCKCFGR, 16, 2, 0, post_divr_table },
750     };
751    
752     @@ -1774,7 +1774,7 @@ static void __init stm32f4_rcc_init(struct device_node *np)
753     post_div->width,
754     post_div->flag_div,
755     post_div->div_table,
756     - clks[post_div->pll_num],
757     + clks[post_div->pll_idx],
758     &stm32f4_clk_lock);
759    
760     if (post_div->idx != NO_IDX)
761     diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
762     index 5c0fb3134825f..5265182674eb7 100644
763     --- a/drivers/dma/imx-dma.c
764     +++ b/drivers/dma/imx-dma.c
765     @@ -832,6 +832,8 @@ static struct dma_async_tx_descriptor *imxdma_prep_slave_sg(
766     dma_length += sg_dma_len(sg);
767     }
768    
769     + imxdma_config_write(chan, &imxdmac->config, direction);
770     +
771     switch (imxdmac->word_size) {
772     case DMA_SLAVE_BUSWIDTH_4_BYTES:
773     if (sg_dma_len(sgl) & 3 || sgl->dma_address & 3)
774     diff --git a/drivers/gpio/gpio-tqmx86.c b/drivers/gpio/gpio-tqmx86.c
775     index a3109bcaa0ac2..09ca493b36176 100644
776     --- a/drivers/gpio/gpio-tqmx86.c
777     +++ b/drivers/gpio/gpio-tqmx86.c
778     @@ -235,8 +235,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)
779     struct resource *res;
780     int ret, irq;
781    
782     - irq = platform_get_irq(pdev, 0);
783     - if (irq < 0)
784     + irq = platform_get_irq_optional(pdev, 0);
785     + if (irq < 0 && irq != -ENXIO)
786     return irq;
787    
788     res = platform_get_resource(pdev, IORESOURCE_IO, 0);
789     @@ -275,7 +275,7 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)
790    
791     pm_runtime_enable(&pdev->dev);
792    
793     - if (irq) {
794     + if (irq > 0) {
795     struct irq_chip *irq_chip = &gpio->irq_chip;
796     u8 irq_status;
797    
798     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
799     index a715cb88052c2..e87184645c540 100644
800     --- a/drivers/md/raid1.c
801     +++ b/drivers/md/raid1.c
802     @@ -452,8 +452,6 @@ static void raid1_end_write_request(struct bio *bio)
803     /*
804     * When the device is faulty, it is not necessary to
805     * handle write error.
806     - * For failfast, this is the only remaining device,
807     - * We need to retry the write without FailFast.
808     */
809     if (!test_bit(Faulty, &rdev->flags))
810     set_bit(R1BIO_WriteError, &r1_bio->state);
811     diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
812     index a195a85cc366a..deddabfb07d79 100644
813     --- a/drivers/md/raid10.c
814     +++ b/drivers/md/raid10.c
815     @@ -470,12 +470,12 @@ static void raid10_end_write_request(struct bio *bio)
816     /*
817     * When the device is faulty, it is not necessary to
818     * handle write error.
819     - * For failfast, this is the only remaining device,
820     - * We need to retry the write without FailFast.
821     */
822     if (!test_bit(Faulty, &rdev->flags))
823     set_bit(R10BIO_WriteError, &r10_bio->state);
824     else {
825     + /* Fail the request */
826     + set_bit(R10BIO_Degraded, &r10_bio->state);
827     r10_bio->devs[slot].bio = NULL;
828     to_put = bio;
829     dec_rdev = 1;
830     diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
831     index 4489744fbbd95..13602939906fc 100644
832     --- a/drivers/media/common/videobuf2/videobuf2-core.c
833     +++ b/drivers/media/common/videobuf2/videobuf2-core.c
834     @@ -1512,6 +1512,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
835     struct media_request *req)
836     {
837     struct vb2_buffer *vb;
838     + enum vb2_buffer_state orig_state;
839     int ret;
840    
841     if (q->error) {
842     @@ -1611,6 +1612,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
843     * Add to the queued buffers list, a buffer will stay on it until
844     * dequeued in dqbuf.
845     */
846     + orig_state = vb->state;
847     list_add_tail(&vb->queued_entry, &q->queued_list);
848     q->queued_count++;
849     q->waiting_for_buffers = false;
850     @@ -1641,8 +1643,17 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
851     if (q->streaming && !q->start_streaming_called &&
852     q->queued_count >= q->min_buffers_needed) {
853     ret = vb2_start_streaming(q);
854     - if (ret)
855     + if (ret) {
856     + /*
857     + * Since vb2_core_qbuf will return with an error,
858     + * we should return it to state DEQUEUED since
859     + * the error indicates that the buffer wasn't queued.
860     + */
861     + list_del(&vb->queued_entry);
862     + q->queued_count--;
863     + vb->state = orig_state;
864     return ret;
865     + }
866     }
867    
868     dprintk(2, "qbuf of buffer %d succeeded\n", vb->index);
869     diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
870     index 1a36bda285421..0fe71437601e7 100644
871     --- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
872     +++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
873     @@ -37,7 +37,16 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req)
874     } else {
875     /* read */
876     requesttype = (USB_TYPE_VENDOR | USB_DIR_IN);
877     - pipe = usb_rcvctrlpipe(d->udev, 0);
878     +
879     + /*
880     + * Zero-length transfers must use usb_sndctrlpipe() and
881     + * rtl28xxu_identify_state() uses a zero-length i2c read
882     + * command to determine the chip type.
883     + */
884     + if (req->size)
885     + pipe = usb_rcvctrlpipe(d->udev, 0);
886     + else
887     + pipe = usb_sndctrlpipe(d->udev, 0);
888     }
889    
890     ret = usb_control_msg(d->udev, pipe, 0, requesttype, req->value,
891     diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
892     index 034f1b50ab287..a07d8051ec3e8 100644
893     --- a/drivers/net/dsa/sja1105/sja1105_main.c
894     +++ b/drivers/net/dsa/sja1105/sja1105_main.c
895     @@ -992,10 +992,11 @@ static int sja1105et_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin,
896     int sja1105et_fdb_add(struct dsa_switch *ds, int port,
897     const unsigned char *addr, u16 vid)
898     {
899     - struct sja1105_l2_lookup_entry l2_lookup = {0};
900     + struct sja1105_l2_lookup_entry l2_lookup = {0}, tmp;
901     struct sja1105_private *priv = ds->priv;
902     struct device *dev = ds->dev;
903     int last_unused = -1;
904     + int start, end, i;
905     int bin, way, rc;
906    
907     bin = sja1105et_fdb_hash(priv, addr, vid);
908     @@ -1007,7 +1008,7 @@ int sja1105et_fdb_add(struct dsa_switch *ds, int port,
909     * mask? If yes, we need to do nothing. If not, we need
910     * to rewrite the entry by adding this port to it.
911     */
912     - if (l2_lookup.destports & BIT(port))
913     + if ((l2_lookup.destports & BIT(port)) && l2_lookup.lockeds)
914     return 0;
915     l2_lookup.destports |= BIT(port);
916     } else {
917     @@ -1038,6 +1039,7 @@ int sja1105et_fdb_add(struct dsa_switch *ds, int port,
918     index, NULL, false);
919     }
920     }
921     + l2_lookup.lockeds = true;
922     l2_lookup.index = sja1105et_fdb_index(bin, way);
923    
924     rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP,
925     @@ -1046,6 +1048,29 @@ int sja1105et_fdb_add(struct dsa_switch *ds, int port,
926     if (rc < 0)
927     return rc;
928    
929     + /* Invalidate a dynamically learned entry if that exists */
930     + start = sja1105et_fdb_index(bin, 0);
931     + end = sja1105et_fdb_index(bin, way);
932     +
933     + for (i = start; i < end; i++) {
934     + rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP,
935     + i, &tmp);
936     + if (rc == -ENOENT)
937     + continue;
938     + if (rc)
939     + return rc;
940     +
941     + if (tmp.macaddr != ether_addr_to_u64(addr) || tmp.vlanid != vid)
942     + continue;
943     +
944     + rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP,
945     + i, NULL, false);
946     + if (rc)
947     + return rc;
948     +
949     + break;
950     + }
951     +
952     return sja1105_static_fdb_change(priv, port, &l2_lookup, true);
953     }
954    
955     @@ -1087,7 +1112,7 @@ int sja1105et_fdb_del(struct dsa_switch *ds, int port,
956     int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port,
957     const unsigned char *addr, u16 vid)
958     {
959     - struct sja1105_l2_lookup_entry l2_lookup = {0};
960     + struct sja1105_l2_lookup_entry l2_lookup = {0}, tmp;
961     struct sja1105_private *priv = ds->priv;
962     int rc, i;
963    
964     @@ -1108,10 +1133,10 @@ int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port,
965     rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP,
966     SJA1105_SEARCH, &l2_lookup);
967     if (rc == 0) {
968     - /* Found and this port is already in the entry's
969     + /* Found a static entry and this port is already in the entry's
970     * port mask => job done
971     */
972     - if (l2_lookup.destports & BIT(port))
973     + if ((l2_lookup.destports & BIT(port)) && l2_lookup.lockeds)
974     return 0;
975     /* l2_lookup.index is populated by the switch in case it
976     * found something.
977     @@ -1134,16 +1159,46 @@ int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port,
978     dev_err(ds->dev, "FDB is full, cannot add entry.\n");
979     return -EINVAL;
980     }
981     - l2_lookup.lockeds = true;
982     l2_lookup.index = i;
983    
984     skip_finding_an_index:
985     + l2_lookup.lockeds = true;
986     +
987     rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP,
988     l2_lookup.index, &l2_lookup,
989     true);
990     if (rc < 0)
991     return rc;
992    
993     + /* The switch learns dynamic entries and looks up the FDB left to
994     + * right. It is possible that our addition was concurrent with the
995     + * dynamic learning of the same address, so now that the static entry
996     + * has been installed, we are certain that address learning for this
997     + * particular address has been turned off, so the dynamic entry either
998     + * is in the FDB at an index smaller than the static one, or isn't (it
999     + * can also be at a larger index, but in that case it is inactive
1000     + * because the static FDB entry will match first, and the dynamic one
1001     + * will eventually age out). Search for a dynamically learned address
1002     + * prior to our static one and invalidate it.
1003     + */
1004     + tmp = l2_lookup;
1005     +
1006     + rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP,
1007     + SJA1105_SEARCH, &tmp);
1008     + if (rc < 0) {
1009     + dev_err(ds->dev,
1010     + "port %d failed to read back entry for %pM vid %d: %pe\n",
1011     + port, addr, vid, ERR_PTR(rc));
1012     + return rc;
1013     + }
1014     +
1015     + if (tmp.index < l2_lookup.index) {
1016     + rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP,
1017     + tmp.index, NULL, false);
1018     + if (rc < 0)
1019     + return rc;
1020     + }
1021     +
1022     return sja1105_static_fdb_change(priv, port, &l2_lookup, true);
1023     }
1024    
1025     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
1026     index d10b421ed1f19..9af8afd7ae89d 100644
1027     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
1028     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
1029     @@ -2666,7 +2666,8 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1030     }
1031    
1032     /* Allocated memory for FW statistics */
1033     - if (bnx2x_alloc_fw_stats_mem(bp))
1034     + rc = bnx2x_alloc_fw_stats_mem(bp);
1035     + if (rc)
1036     LOAD_ERROR_EXIT(bp, load_error0);
1037    
1038     /* request pf to initialize status blocks */
1039     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1040     index b1856552ab813..a53c2d637a971 100644
1041     --- a/drivers/net/ethernet/freescale/fec_main.c
1042     +++ b/drivers/net/ethernet/freescale/fec_main.c
1043     @@ -3781,13 +3781,13 @@ fec_drv_remove(struct platform_device *pdev)
1044     if (of_phy_is_fixed_link(np))
1045     of_phy_deregister_fixed_link(np);
1046     of_node_put(fep->phy_node);
1047     - free_netdev(ndev);
1048    
1049     clk_disable_unprepare(fep->clk_ahb);
1050     clk_disable_unprepare(fep->clk_ipg);
1051     pm_runtime_put_noidle(&pdev->dev);
1052     pm_runtime_disable(&pdev->dev);
1053    
1054     + free_netdev(ndev);
1055     return 0;
1056     }
1057    
1058     diff --git a/drivers/net/ethernet/natsemi/natsemi.c b/drivers/net/ethernet/natsemi/natsemi.c
1059     index 1a2634cbbb691..a653502c5d6f9 100644
1060     --- a/drivers/net/ethernet/natsemi/natsemi.c
1061     +++ b/drivers/net/ethernet/natsemi/natsemi.c
1062     @@ -819,7 +819,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
1063     printk(version);
1064     #endif
1065    
1066     - i = pci_enable_device(pdev);
1067     + i = pcim_enable_device(pdev);
1068     if (i) return i;
1069    
1070     /* natsemi has a non-standard PM control register
1071     @@ -852,7 +852,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
1072     ioaddr = ioremap(iostart, iosize);
1073     if (!ioaddr) {
1074     i = -ENOMEM;
1075     - goto err_ioremap;
1076     + goto err_pci_request_regions;
1077     }
1078    
1079     /* Work around the dropped serial bit. */
1080     @@ -974,9 +974,6 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
1081     err_register_netdev:
1082     iounmap(ioaddr);
1083    
1084     - err_ioremap:
1085     - pci_release_regions(pdev);
1086     -
1087     err_pci_request_regions:
1088     free_netdev(dev);
1089     return i;
1090     @@ -3242,7 +3239,6 @@ static void natsemi_remove1(struct pci_dev *pdev)
1091    
1092     NATSEMI_REMOVE_FILE(pdev, dspcfg_workaround);
1093     unregister_netdev (dev);
1094     - pci_release_regions (pdev);
1095     iounmap(ioaddr);
1096     free_netdev (dev);
1097     }
1098     diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
1099     index 1d334f2e0a568..607e2ff272dc0 100644
1100     --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
1101     +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
1102     @@ -3524,13 +3524,13 @@ static void vxge_device_unregister(struct __vxge_hw_device *hldev)
1103    
1104     kfree(vdev->vpaths);
1105    
1106     - /* we are safe to free it now */
1107     - free_netdev(dev);
1108     -
1109     vxge_debug_init(vdev->level_trace, "%s: ethernet device unregistered",
1110     buf);
1111     vxge_debug_entryexit(vdev->level_trace, "%s: %s:%d Exiting...", buf,
1112     __func__, __LINE__);
1113     +
1114     + /* we are safe to free it now */
1115     + free_netdev(dev);
1116     }
1117    
1118     /*
1119     diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
1120     index 17b91ed39369c..2354dec994184 100644
1121     --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
1122     +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
1123     @@ -266,6 +266,8 @@ nfp_net_get_link_ksettings(struct net_device *netdev,
1124    
1125     /* Init to unknowns */
1126     ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
1127     + ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
1128     + ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
1129     cmd->base.port = PORT_OTHER;
1130     cmd->base.speed = SPEED_UNKNOWN;
1131     cmd->base.duplex = DUPLEX_UNKNOWN;
1132     diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
1133     index 5dc36c51636c4..6ca2216e40585 100644
1134     --- a/drivers/net/ethernet/qlogic/qla3xxx.c
1135     +++ b/drivers/net/ethernet/qlogic/qla3xxx.c
1136     @@ -155,7 +155,7 @@ static int ql_wait_for_drvr_lock(struct ql3_adapter *qdev)
1137     "driver lock acquired\n");
1138     return 1;
1139     }
1140     - ssleep(1);
1141     + mdelay(1000);
1142     } while (++i < 10);
1143    
1144     netdev_err(qdev->ndev, "Timed out waiting for driver lock...\n");
1145     @@ -3291,7 +3291,7 @@ static int ql_adapter_reset(struct ql3_adapter *qdev)
1146     if ((value & ISP_CONTROL_SR) == 0)
1147     break;
1148    
1149     - ssleep(1);
1150     + mdelay(1000);
1151     } while ((--max_wait_time));
1152    
1153     /*
1154     @@ -3327,7 +3327,7 @@ static int ql_adapter_reset(struct ql3_adapter *qdev)
1155     ispControlStatus);
1156     if ((value & ISP_CONTROL_FSR) == 0)
1157     break;
1158     - ssleep(1);
1159     + mdelay(1000);
1160     } while ((--max_wait_time));
1161     }
1162     if (max_wait_time == 0)
1163     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
1164     index 663c68ed6ef96..910ab2182158d 100644
1165     --- a/drivers/net/phy/micrel.c
1166     +++ b/drivers/net/phy/micrel.c
1167     @@ -343,11 +343,11 @@ static int ksz8041_config_aneg(struct phy_device *phydev)
1168     }
1169    
1170     static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
1171     - const u32 ksz_phy_id)
1172     + const bool ksz_8051)
1173     {
1174     int ret;
1175    
1176     - if ((phydev->phy_id & MICREL_PHY_ID_MASK) != ksz_phy_id)
1177     + if ((phydev->phy_id & MICREL_PHY_ID_MASK) != PHY_ID_KSZ8051)
1178     return 0;
1179    
1180     ret = phy_read(phydev, MII_BMSR);
1181     @@ -360,7 +360,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
1182     * the switch does not.
1183     */
1184     ret &= BMSR_ERCAP;
1185     - if (ksz_phy_id == PHY_ID_KSZ8051)
1186     + if (ksz_8051)
1187     return ret;
1188     else
1189     return !ret;
1190     @@ -368,7 +368,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
1191    
1192     static int ksz8051_match_phy_device(struct phy_device *phydev)
1193     {
1194     - return ksz8051_ksz8795_match_phy_device(phydev, PHY_ID_KSZ8051);
1195     + return ksz8051_ksz8795_match_phy_device(phydev, true);
1196     }
1197    
1198     static int ksz8081_config_init(struct phy_device *phydev)
1199     @@ -396,7 +396,7 @@ static int ksz8061_config_init(struct phy_device *phydev)
1200    
1201     static int ksz8795_match_phy_device(struct phy_device *phydev)
1202     {
1203     - return ksz8051_ksz8795_match_phy_device(phydev, PHY_ID_KSZ87XX);
1204     + return ksz8051_ksz8795_match_phy_device(phydev, false);
1205     }
1206    
1207     static int ksz9021_load_values_from_of(struct phy_device *phydev,
1208     diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
1209     index f7d117d80cfbb..b744c09346a7c 100644
1210     --- a/drivers/net/usb/pegasus.c
1211     +++ b/drivers/net/usb/pegasus.c
1212     @@ -747,12 +747,16 @@ static inline void disable_net_traffic(pegasus_t *pegasus)
1213     set_registers(pegasus, EthCtrl0, sizeof(tmp), &tmp);
1214     }
1215    
1216     -static inline void get_interrupt_interval(pegasus_t *pegasus)
1217     +static inline int get_interrupt_interval(pegasus_t *pegasus)
1218     {
1219     u16 data;
1220     u8 interval;
1221     + int ret;
1222     +
1223     + ret = read_eprom_word(pegasus, 4, &data);
1224     + if (ret < 0)
1225     + return ret;
1226    
1227     - read_eprom_word(pegasus, 4, &data);
1228     interval = data >> 8;
1229     if (pegasus->usb->speed != USB_SPEED_HIGH) {
1230     if (interval < 0x80) {
1231     @@ -767,6 +771,8 @@ static inline void get_interrupt_interval(pegasus_t *pegasus)
1232     }
1233     }
1234     pegasus->intr_interval = interval;
1235     +
1236     + return 0;
1237     }
1238    
1239     static void set_carrier(struct net_device *net)
1240     @@ -1186,7 +1192,9 @@ static int pegasus_probe(struct usb_interface *intf,
1241     | NETIF_MSG_PROBE | NETIF_MSG_LINK);
1242    
1243     pegasus->features = usb_dev_id[dev_index].private;
1244     - get_interrupt_interval(pegasus);
1245     + res = get_interrupt_interval(pegasus);
1246     + if (res)
1247     + goto out2;
1248     if (reset_mac(pegasus)) {
1249     dev_err(&intf->dev, "can't reset MAC\n");
1250     res = -EIO;
1251     diff --git a/drivers/net/wireless/virt_wifi.c b/drivers/net/wireless/virt_wifi.c
1252     index 9d04ca53229b5..4e906910f110b 100644
1253     --- a/drivers/net/wireless/virt_wifi.c
1254     +++ b/drivers/net/wireless/virt_wifi.c
1255     @@ -136,6 +136,29 @@ static struct ieee80211_supported_band band_5ghz = {
1256     /* Assigned at module init. Guaranteed locally-administered and unicast. */
1257     static u8 fake_router_bssid[ETH_ALEN] __ro_after_init = {};
1258    
1259     +static void virt_wifi_inform_bss(struct wiphy *wiphy)
1260     +{
1261     + u64 tsf = div_u64(ktime_get_boottime_ns(), 1000);
1262     + struct cfg80211_bss *informed_bss;
1263     + static const struct {
1264     + u8 tag;
1265     + u8 len;
1266     + u8 ssid[8];
1267     + } __packed ssid = {
1268     + .tag = WLAN_EID_SSID,
1269     + .len = 8,
1270     + .ssid = "VirtWifi",
1271     + };
1272     +
1273     + informed_bss = cfg80211_inform_bss(wiphy, &channel_5ghz,
1274     + CFG80211_BSS_FTYPE_PRESP,
1275     + fake_router_bssid, tsf,
1276     + WLAN_CAPABILITY_ESS, 0,
1277     + (void *)&ssid, sizeof(ssid),
1278     + DBM_TO_MBM(-50), GFP_KERNEL);
1279     + cfg80211_put_bss(wiphy, informed_bss);
1280     +}
1281     +
1282     /* Called with the rtnl lock held. */
1283     static int virt_wifi_scan(struct wiphy *wiphy,
1284     struct cfg80211_scan_request *request)
1285     @@ -156,28 +179,13 @@ static int virt_wifi_scan(struct wiphy *wiphy,
1286     /* Acquires and releases the rdev BSS lock. */
1287     static void virt_wifi_scan_result(struct work_struct *work)
1288     {
1289     - struct {
1290     - u8 tag;
1291     - u8 len;
1292     - u8 ssid[8];
1293     - } __packed ssid = {
1294     - .tag = WLAN_EID_SSID, .len = 8, .ssid = "VirtWifi",
1295     - };
1296     - struct cfg80211_bss *informed_bss;
1297     struct virt_wifi_wiphy_priv *priv =
1298     container_of(work, struct virt_wifi_wiphy_priv,
1299     scan_result.work);
1300     struct wiphy *wiphy = priv_to_wiphy(priv);
1301     struct cfg80211_scan_info scan_info = { .aborted = false };
1302     - u64 tsf = div_u64(ktime_get_boottime_ns(), 1000);
1303    
1304     - informed_bss = cfg80211_inform_bss(wiphy, &channel_5ghz,
1305     - CFG80211_BSS_FTYPE_PRESP,
1306     - fake_router_bssid, tsf,
1307     - WLAN_CAPABILITY_ESS, 0,
1308     - (void *)&ssid, sizeof(ssid),
1309     - DBM_TO_MBM(-50), GFP_KERNEL);
1310     - cfg80211_put_bss(wiphy, informed_bss);
1311     + virt_wifi_inform_bss(wiphy);
1312    
1313     /* Schedules work which acquires and releases the rtnl lock. */
1314     cfg80211_scan_done(priv->scan_request, &scan_info);
1315     @@ -225,10 +233,12 @@ static int virt_wifi_connect(struct wiphy *wiphy, struct net_device *netdev,
1316     if (!could_schedule)
1317     return -EBUSY;
1318    
1319     - if (sme->bssid)
1320     + if (sme->bssid) {
1321     ether_addr_copy(priv->connect_requested_bss, sme->bssid);
1322     - else
1323     + } else {
1324     + virt_wifi_inform_bss(wiphy);
1325     eth_zero_addr(priv->connect_requested_bss);
1326     + }
1327    
1328     wiphy_debug(wiphy, "connect\n");
1329    
1330     @@ -241,11 +251,13 @@ static void virt_wifi_connect_complete(struct work_struct *work)
1331     struct virt_wifi_netdev_priv *priv =
1332     container_of(work, struct virt_wifi_netdev_priv, connect.work);
1333     u8 *requested_bss = priv->connect_requested_bss;
1334     - bool has_addr = !is_zero_ether_addr(requested_bss);
1335     bool right_addr = ether_addr_equal(requested_bss, fake_router_bssid);
1336     u16 status = WLAN_STATUS_SUCCESS;
1337    
1338     - if (!priv->is_up || (has_addr && !right_addr))
1339     + if (is_zero_ether_addr(requested_bss))
1340     + requested_bss = NULL;
1341     +
1342     + if (!priv->is_up || (requested_bss && !right_addr))
1343     status = WLAN_STATUS_UNSPECIFIED_FAILURE;
1344     else
1345     priv->is_connected = true;
1346     diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c
1347     index 245d60189375a..7a43d4ca79292 100644
1348     --- a/drivers/pcmcia/i82092.c
1349     +++ b/drivers/pcmcia/i82092.c
1350     @@ -106,6 +106,7 @@ static int i82092aa_pci_probe(struct pci_dev *dev, const struct pci_device_id *i
1351     for (i = 0;i<socket_count;i++) {
1352     sockets[i].card_state = 1; /* 1 = present but empty */
1353     sockets[i].io_base = pci_resource_start(dev, 0);
1354     + sockets[i].dev = dev;
1355     sockets[i].socket.features |= SS_CAP_PCCARD;
1356     sockets[i].socket.map_size = 0x1000;
1357     sockets[i].socket.irq_mask = 0;
1358     diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
1359     index 2332b245b182d..279dea628620d 100644
1360     --- a/drivers/scsi/sr.c
1361     +++ b/drivers/scsi/sr.c
1362     @@ -219,7 +219,7 @@ static unsigned int sr_get_events(struct scsi_device *sdev)
1363     else if (med->media_event_code == 2)
1364     return DISK_EVENT_MEDIA_CHANGE;
1365     else if (med->media_event_code == 3)
1366     - return DISK_EVENT_EJECT_REQUEST;
1367     + return DISK_EVENT_MEDIA_CHANGE;
1368     return 0;
1369     }
1370    
1371     diff --git a/drivers/soc/ixp4xx/ixp4xx-npe.c b/drivers/soc/ixp4xx/ixp4xx-npe.c
1372     index ec90b44fa0cd3..6065aaab67403 100644
1373     --- a/drivers/soc/ixp4xx/ixp4xx-npe.c
1374     +++ b/drivers/soc/ixp4xx/ixp4xx-npe.c
1375     @@ -690,8 +690,8 @@ static int ixp4xx_npe_probe(struct platform_device *pdev)
1376    
1377     if (!(ixp4xx_read_feature_bits() &
1378     (IXP4XX_FEATURE_RESET_NPEA << i))) {
1379     - dev_info(dev, "NPE%d at 0x%08x-0x%08x not available\n",
1380     - i, res->start, res->end);
1381     + dev_info(dev, "NPE%d at %pR not available\n",
1382     + i, res);
1383     continue; /* NPE already disabled or not present */
1384     }
1385     npe->regs = devm_ioremap_resource(dev, res);
1386     @@ -699,13 +699,12 @@ static int ixp4xx_npe_probe(struct platform_device *pdev)
1387     return PTR_ERR(npe->regs);
1388    
1389     if (npe_reset(npe)) {
1390     - dev_info(dev, "NPE%d at 0x%08x-0x%08x does not reset\n",
1391     - i, res->start, res->end);
1392     + dev_info(dev, "NPE%d at %pR does not reset\n",
1393     + i, res);
1394     continue;
1395     }
1396     npe->valid = 1;
1397     - dev_info(dev, "NPE%d at 0x%08x-0x%08x registered\n",
1398     - i, res->start, res->end);
1399     + dev_info(dev, "NPE%d at %pR registered\n", i, res);
1400     found++;
1401     }
1402    
1403     diff --git a/drivers/soc/ixp4xx/ixp4xx-qmgr.c b/drivers/soc/ixp4xx/ixp4xx-qmgr.c
1404     index 8c968382cea76..065a800717bd5 100644
1405     --- a/drivers/soc/ixp4xx/ixp4xx-qmgr.c
1406     +++ b/drivers/soc/ixp4xx/ixp4xx-qmgr.c
1407     @@ -145,12 +145,12 @@ static irqreturn_t qmgr_irq1_a0(int irq, void *pdev)
1408     /* ACK - it may clear any bits so don't rely on it */
1409     __raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[0]);
1410    
1411     - en_bitmap = qmgr_regs->irqen[0];
1412     + en_bitmap = __raw_readl(&qmgr_regs->irqen[0]);
1413     while (en_bitmap) {
1414     i = __fls(en_bitmap); /* number of the last "low" queue */
1415     en_bitmap &= ~BIT(i);
1416     - src = qmgr_regs->irqsrc[i >> 3];
1417     - stat = qmgr_regs->stat1[i >> 3];
1418     + src = __raw_readl(&qmgr_regs->irqsrc[i >> 3]);
1419     + stat = __raw_readl(&qmgr_regs->stat1[i >> 3]);
1420     if (src & 4) /* the IRQ condition is inverted */
1421     stat = ~stat;
1422     if (stat & BIT(src & 3)) {
1423     @@ -170,7 +170,8 @@ static irqreturn_t qmgr_irq2_a0(int irq, void *pdev)
1424     /* ACK - it may clear any bits so don't rely on it */
1425     __raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[1]);
1426    
1427     - req_bitmap = qmgr_regs->irqen[1] & qmgr_regs->statne_h;
1428     + req_bitmap = __raw_readl(&qmgr_regs->irqen[1]) &
1429     + __raw_readl(&qmgr_regs->statne_h);
1430     while (req_bitmap) {
1431     i = __fls(req_bitmap); /* number of the last "high" queue */
1432     req_bitmap &= ~BIT(i);
1433     diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
1434     index e237481dbbbbf..474d5a7fa95e3 100644
1435     --- a/drivers/spi/spi-imx.c
1436     +++ b/drivers/spi/spi-imx.c
1437     @@ -497,8 +497,10 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,
1438     struct spi_message *msg)
1439     {
1440     struct spi_device *spi = msg->spi;
1441     + struct spi_transfer *xfer;
1442     u32 ctrl = MX51_ECSPI_CTRL_ENABLE;
1443     - u32 testreg;
1444     + u32 min_speed_hz = ~0U;
1445     + u32 testreg, delay;
1446     u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG);
1447    
1448     /* set Master or Slave mode */
1449     @@ -559,6 +561,35 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,
1450    
1451     writel(cfg, spi_imx->base + MX51_ECSPI_CONFIG);
1452    
1453     + /*
1454     + * Wait until the changes in the configuration register CONFIGREG
1455     + * propagate into the hardware. It takes exactly one tick of the
1456     + * SCLK clock, but we will wait two SCLK clock just to be sure. The
1457     + * effect of the delay it takes for the hardware to apply changes
1458     + * is noticable if the SCLK clock run very slow. In such a case, if
1459     + * the polarity of SCLK should be inverted, the GPIO ChipSelect might
1460     + * be asserted before the SCLK polarity changes, which would disrupt
1461     + * the SPI communication as the device on the other end would consider
1462     + * the change of SCLK polarity as a clock tick already.
1463     + *
1464     + * Because spi_imx->spi_bus_clk is only set in bitbang prepare_message
1465     + * callback, iterate over all the transfers in spi_message, find the
1466     + * one with lowest bus frequency, and use that bus frequency for the
1467     + * delay calculation. In case all transfers have speed_hz == 0, then
1468     + * min_speed_hz is ~0 and the resulting delay is zero.
1469     + */
1470     + list_for_each_entry(xfer, &msg->transfers, transfer_list) {
1471     + if (!xfer->speed_hz)
1472     + continue;
1473     + min_speed_hz = min(xfer->speed_hz, min_speed_hz);
1474     + }
1475     +
1476     + delay = (2 * 1000000) / min_speed_hz;
1477     + if (likely(delay < 10)) /* SCLK is faster than 100 kHz */
1478     + udelay(delay);
1479     + else /* SCLK is _very_ slow */
1480     + usleep_range(delay, delay + 10);
1481     +
1482     return 0;
1483     }
1484    
1485     @@ -566,7 +597,7 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
1486     struct spi_device *spi)
1487     {
1488     u32 ctrl = readl(spi_imx->base + MX51_ECSPI_CTRL);
1489     - u32 clk, delay;
1490     + u32 clk;
1491    
1492     /* Clear BL field and set the right value */
1493     ctrl &= ~MX51_ECSPI_CTRL_BL_MASK;
1494     @@ -588,23 +619,6 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
1495    
1496     writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
1497    
1498     - /*
1499     - * Wait until the changes in the configuration register CONFIGREG
1500     - * propagate into the hardware. It takes exactly one tick of the
1501     - * SCLK clock, but we will wait two SCLK clock just to be sure. The
1502     - * effect of the delay it takes for the hardware to apply changes
1503     - * is noticable if the SCLK clock run very slow. In such a case, if
1504     - * the polarity of SCLK should be inverted, the GPIO ChipSelect might
1505     - * be asserted before the SCLK polarity changes, which would disrupt
1506     - * the SPI communication as the device on the other end would consider
1507     - * the change of SCLK polarity as a clock tick already.
1508     - */
1509     - delay = (2 * 1000000) / clk;
1510     - if (likely(delay < 10)) /* SCLK is faster than 100 kHz */
1511     - udelay(delay);
1512     - else /* SCLK is _very_ slow */
1513     - usleep_range(delay, delay + 10);
1514     -
1515     return 0;
1516     }
1517    
1518     diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c
1519     index f3f10443f9e26..3c841ae0a3e91 100644
1520     --- a/drivers/spi/spi-meson-spicc.c
1521     +++ b/drivers/spi/spi-meson-spicc.c
1522     @@ -597,6 +597,8 @@ static int meson_spicc_remove(struct platform_device *pdev)
1523    
1524     clk_disable_unprepare(spicc->core);
1525    
1526     + spi_master_put(spicc->master);
1527     +
1528     return 0;
1529     }
1530    
1531     diff --git a/drivers/staging/rtl8712/rtl8712_led.c b/drivers/staging/rtl8712/rtl8712_led.c
1532     index db99129d31695..4305178243891 100644
1533     --- a/drivers/staging/rtl8712/rtl8712_led.c
1534     +++ b/drivers/staging/rtl8712/rtl8712_led.c
1535     @@ -1820,3 +1820,11 @@ void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction)
1536     break;
1537     }
1538     }
1539     +
1540     +void r8712_flush_led_works(struct _adapter *padapter)
1541     +{
1542     + struct led_priv *pledpriv = &padapter->ledpriv;
1543     +
1544     + flush_work(&pledpriv->SwLed0.BlinkWorkItem);
1545     + flush_work(&pledpriv->SwLed1.BlinkWorkItem);
1546     +}
1547     diff --git a/drivers/staging/rtl8712/rtl871x_led.h b/drivers/staging/rtl8712/rtl871x_led.h
1548     index ee19c873cf010..2f0768132ad8f 100644
1549     --- a/drivers/staging/rtl8712/rtl871x_led.h
1550     +++ b/drivers/staging/rtl8712/rtl871x_led.h
1551     @@ -112,6 +112,7 @@ struct led_priv {
1552     void r8712_InitSwLeds(struct _adapter *padapter);
1553     void r8712_DeInitSwLeds(struct _adapter *padapter);
1554     void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction);
1555     +void r8712_flush_led_works(struct _adapter *padapter);
1556    
1557     #endif
1558    
1559     diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.c b/drivers/staging/rtl8712/rtl871x_pwrctrl.c
1560     index 23cff43437e21..cd6d9ff0bebca 100644
1561     --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.c
1562     +++ b/drivers/staging/rtl8712/rtl871x_pwrctrl.c
1563     @@ -224,3 +224,11 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
1564     }
1565     mutex_unlock(&pwrctrl->mutex_lock);
1566     }
1567     +
1568     +void r8712_flush_rwctrl_works(struct _adapter *padapter)
1569     +{
1570     + struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
1571     +
1572     + flush_work(&pwrctrl->SetPSModeWorkItem);
1573     + flush_work(&pwrctrl->rpwm_workitem);
1574     +}
1575     diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.h b/drivers/staging/rtl8712/rtl871x_pwrctrl.h
1576     index dd5a79f90b1a6..6eee6f1bdba4d 100644
1577     --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.h
1578     +++ b/drivers/staging/rtl8712/rtl871x_pwrctrl.h
1579     @@ -111,5 +111,6 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,
1580     void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode,
1581     uint smart_ps);
1582     void r8712_set_rpwm(struct _adapter *padapter, u8 val8);
1583     +void r8712_flush_rwctrl_works(struct _adapter *padapter);
1584    
1585     #endif /* __RTL871X_PWRCTRL_H_ */
1586     diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
1587     index bc421925e84c2..49188ab046123 100644
1588     --- a/drivers/staging/rtl8712/usb_intf.c
1589     +++ b/drivers/staging/rtl8712/usb_intf.c
1590     @@ -604,7 +604,8 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
1591     padapter->surprise_removed = true;
1592     if (pnetdev->reg_state != NETREG_UNINITIALIZED)
1593     unregister_netdev(pnetdev); /* will call netdev_close() */
1594     - flush_scheduled_work();
1595     + r8712_flush_rwctrl_works(padapter);
1596     + r8712_flush_led_works(padapter);
1597     udelay(1);
1598     /* Stop driver mlme relation timer */
1599     r8712_stop_drv_timers(padapter);
1600     diff --git a/drivers/staging/rtl8723bs/hal/sdio_ops.c b/drivers/staging/rtl8723bs/hal/sdio_ops.c
1601     index 301d327d06244..e6ca03aa6830d 100644
1602     --- a/drivers/staging/rtl8723bs/hal/sdio_ops.c
1603     +++ b/drivers/staging/rtl8723bs/hal/sdio_ops.c
1604     @@ -1033,6 +1033,8 @@ void sd_int_dpc(struct adapter *adapter)
1605     } else {
1606     rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
1607     }
1608     + } else {
1609     + kfree(c2h_evt);
1610     }
1611     } else {
1612     /* Error handling for malloc fail */
1613     diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c
1614     index ea79482ebda46..4b5069f88d786 100644
1615     --- a/drivers/tee/optee/call.c
1616     +++ b/drivers/tee/optee/call.c
1617     @@ -407,11 +407,13 @@ void optee_enable_shm_cache(struct optee *optee)
1618     }
1619    
1620     /**
1621     - * optee_disable_shm_cache() - Disables caching of some shared memory allocation
1622     - * in OP-TEE
1623     + * __optee_disable_shm_cache() - Disables caching of some shared memory
1624     + * allocation in OP-TEE
1625     * @optee: main service struct
1626     + * @is_mapped: true if the cached shared memory addresses were mapped by this
1627     + * kernel, are safe to dereference, and should be freed
1628     */
1629     -void optee_disable_shm_cache(struct optee *optee)
1630     +static void __optee_disable_shm_cache(struct optee *optee, bool is_mapped)
1631     {
1632     struct optee_call_waiter w;
1633    
1634     @@ -430,6 +432,13 @@ void optee_disable_shm_cache(struct optee *optee)
1635     if (res.result.status == OPTEE_SMC_RETURN_OK) {
1636     struct tee_shm *shm;
1637    
1638     + /*
1639     + * Shared memory references that were not mapped by
1640     + * this kernel must be ignored to prevent a crash.
1641     + */
1642     + if (!is_mapped)
1643     + continue;
1644     +
1645     shm = reg_pair_to_ptr(res.result.shm_upper32,
1646     res.result.shm_lower32);
1647     tee_shm_free(shm);
1648     @@ -440,6 +449,27 @@ void optee_disable_shm_cache(struct optee *optee)
1649     optee_cq_wait_final(&optee->call_queue, &w);
1650     }
1651    
1652     +/**
1653     + * optee_disable_shm_cache() - Disables caching of mapped shared memory
1654     + * allocations in OP-TEE
1655     + * @optee: main service struct
1656     + */
1657     +void optee_disable_shm_cache(struct optee *optee)
1658     +{
1659     + return __optee_disable_shm_cache(optee, true);
1660     +}
1661     +
1662     +/**
1663     + * optee_disable_unmapped_shm_cache() - Disables caching of shared memory
1664     + * allocations in OP-TEE which are not
1665     + * currently mapped
1666     + * @optee: main service struct
1667     + */
1668     +void optee_disable_unmapped_shm_cache(struct optee *optee)
1669     +{
1670     + return __optee_disable_shm_cache(optee, false);
1671     +}
1672     +
1673     #define PAGELIST_ENTRIES_PER_PAGE \
1674     ((OPTEE_MSG_NONCONTIG_PAGE_SIZE / sizeof(u64)) - 1)
1675    
1676     diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
1677     index ba6cfba589a69..432dd38921dd9 100644
1678     --- a/drivers/tee/optee/core.c
1679     +++ b/drivers/tee/optee/core.c
1680     @@ -628,6 +628,15 @@ static struct optee *optee_probe(struct device_node *np)
1681     optee->memremaped_shm = memremaped_shm;
1682     optee->pool = pool;
1683    
1684     + /*
1685     + * Ensure that there are no pre-existing shm objects before enabling
1686     + * the shm cache so that there's no chance of receiving an invalid
1687     + * address during shutdown. This could occur, for example, if we're
1688     + * kexec booting from an older kernel that did not properly cleanup the
1689     + * shm cache.
1690     + */
1691     + optee_disable_unmapped_shm_cache(optee);
1692     +
1693     optee_enable_shm_cache(optee);
1694    
1695     if (optee->sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM)
1696     diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h
1697     index d9c5037b4e03e..3eeaad2a28686 100644
1698     --- a/drivers/tee/optee/optee_private.h
1699     +++ b/drivers/tee/optee/optee_private.h
1700     @@ -152,6 +152,7 @@ int optee_cancel_req(struct tee_context *ctx, u32 cancel_id, u32 session);
1701    
1702     void optee_enable_shm_cache(struct optee *optee);
1703     void optee_disable_shm_cache(struct optee *optee);
1704     +void optee_disable_unmapped_shm_cache(struct optee *optee);
1705    
1706     int optee_shm_register(struct tee_context *ctx, struct tee_shm *shm,
1707     struct page **pages, size_t num_pages,
1708     diff --git a/drivers/tee/optee/shm_pool.c b/drivers/tee/optee/shm_pool.c
1709     index d767eebf30bdd..da06ce9b9313e 100644
1710     --- a/drivers/tee/optee/shm_pool.c
1711     +++ b/drivers/tee/optee/shm_pool.c
1712     @@ -32,8 +32,10 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm,
1713     struct page **pages;
1714    
1715     pages = kcalloc(nr_pages, sizeof(pages), GFP_KERNEL);
1716     - if (!pages)
1717     - return -ENOMEM;
1718     + if (!pages) {
1719     + rc = -ENOMEM;
1720     + goto err;
1721     + }
1722    
1723     for (i = 0; i < nr_pages; i++) {
1724     pages[i] = page;
1725     @@ -44,8 +46,14 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm,
1726     rc = optee_shm_register(shm->ctx, shm, pages, nr_pages,
1727     (unsigned long)shm->kaddr);
1728     kfree(pages);
1729     + if (rc)
1730     + goto err;
1731     }
1732    
1733     + return 0;
1734     +
1735     +err:
1736     + __free_pages(page, order);
1737     return rc;
1738     }
1739    
1740     diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
1741     index 09ddcd06c7152..1b4b4a1ba91d9 100644
1742     --- a/drivers/tee/tee_shm.c
1743     +++ b/drivers/tee/tee_shm.c
1744     @@ -219,6 +219,24 @@ struct tee_shm *tee_shm_priv_alloc(struct tee_device *teedev, size_t size)
1745     }
1746     EXPORT_SYMBOL_GPL(tee_shm_priv_alloc);
1747    
1748     +/**
1749     + * tee_shm_alloc_kernel_buf() - Allocate shared memory for kernel buffer
1750     + * @ctx: Context that allocates the shared memory
1751     + * @size: Requested size of shared memory
1752     + *
1753     + * The returned memory registered in secure world and is suitable to be
1754     + * passed as a memory buffer in parameter argument to
1755     + * tee_client_invoke_func(). The memory allocated is later freed with a
1756     + * call to tee_shm_free().
1757     + *
1758     + * @returns a pointer to 'struct tee_shm'
1759     + */
1760     +struct tee_shm *tee_shm_alloc_kernel_buf(struct tee_context *ctx, size_t size)
1761     +{
1762     + return tee_shm_alloc(ctx, size, TEE_SHM_MAPPED | TEE_SHM_DMA_BUF);
1763     +}
1764     +EXPORT_SYMBOL_GPL(tee_shm_alloc_kernel_buf);
1765     +
1766     struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr,
1767     size_t length, u32 flags)
1768     {
1769     diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c
1770     index e9eb454c24728..98e68f25a5f34 100644
1771     --- a/drivers/tty/serial/8250/8250_mtk.c
1772     +++ b/drivers/tty/serial/8250/8250_mtk.c
1773     @@ -92,10 +92,13 @@ static void mtk8250_dma_rx_complete(void *param)
1774     struct dma_tx_state state;
1775     int copied, total, cnt;
1776     unsigned char *ptr;
1777     + unsigned long flags;
1778    
1779     if (data->rx_status == DMA_RX_SHUTDOWN)
1780     return;
1781    
1782     + spin_lock_irqsave(&up->port.lock, flags);
1783     +
1784     dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state);
1785     total = dma->rx_size - state.residue;
1786     cnt = total;
1787     @@ -119,6 +122,8 @@ static void mtk8250_dma_rx_complete(void *param)
1788     tty_flip_buffer_push(tty_port);
1789    
1790     mtk8250_rx_dma(up);
1791     +
1792     + spin_unlock_irqrestore(&up->port.lock, flags);
1793     }
1794    
1795     static void mtk8250_rx_dma(struct uart_8250_port *up)
1796     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
1797     index 51346ca91c45c..43fc5b6a25d35 100644
1798     --- a/drivers/tty/serial/8250/8250_pci.c
1799     +++ b/drivers/tty/serial/8250/8250_pci.c
1800     @@ -3763,6 +3763,12 @@ static const struct pci_device_id blacklist[] = {
1801     { PCI_VDEVICE(INTEL, 0x0f0c), },
1802     { PCI_VDEVICE(INTEL, 0x228a), },
1803     { PCI_VDEVICE(INTEL, 0x228c), },
1804     + { PCI_VDEVICE(INTEL, 0x4b96), },
1805     + { PCI_VDEVICE(INTEL, 0x4b97), },
1806     + { PCI_VDEVICE(INTEL, 0x4b98), },
1807     + { PCI_VDEVICE(INTEL, 0x4b99), },
1808     + { PCI_VDEVICE(INTEL, 0x4b9a), },
1809     + { PCI_VDEVICE(INTEL, 0x4b9b), },
1810     { PCI_VDEVICE(INTEL, 0x9ce3), },
1811     { PCI_VDEVICE(INTEL, 0x9ce4), },
1812    
1813     @@ -3923,6 +3929,7 @@ pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)
1814     if (pci_match_id(pci_use_msi, dev)) {
1815     dev_dbg(&dev->dev, "Using MSI(-X) interrupts\n");
1816     pci_set_master(dev);
1817     + uart.port.flags &= ~UPF_SHARE_IRQ;
1818     rc = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_ALL_TYPES);
1819     } else {
1820     dev_dbg(&dev->dev, "Using legacy interrupts\n");
1821     diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
1822     index 6e93aa3623d9b..8a7c6d65f10ef 100644
1823     --- a/drivers/tty/serial/8250/8250_port.c
1824     +++ b/drivers/tty/serial/8250/8250_port.c
1825     @@ -314,7 +314,11 @@ static const struct serial8250_config uart_config[] = {
1826     /* Uart divisor latch read */
1827     static int default_serial_dl_read(struct uart_8250_port *up)
1828     {
1829     - return serial_in(up, UART_DLL) | serial_in(up, UART_DLM) << 8;
1830     + /* Assign these in pieces to truncate any bits above 7. */
1831     + unsigned char dll = serial_in(up, UART_DLL);
1832     + unsigned char dlm = serial_in(up, UART_DLM);
1833     +
1834     + return dll | dlm << 8;
1835     }
1836    
1837     /* Uart divisor latch write */
1838     @@ -1258,9 +1262,11 @@ static void autoconfig(struct uart_8250_port *up)
1839     serial_out(up, UART_LCR, 0);
1840    
1841     serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1842     - scratch = serial_in(up, UART_IIR) >> 6;
1843    
1844     - switch (scratch) {
1845     + /* Assign this as it is to truncate any bits above 7. */
1846     + scratch = serial_in(up, UART_IIR);
1847     +
1848     + switch (scratch >> 6) {
1849     case 0:
1850     autoconfig_8250(up);
1851     break;
1852     diff --git a/drivers/tty/serial/serial-tegra.c b/drivers/tty/serial/serial-tegra.c
1853     index 2007a40feef9d..64f18bf1e694a 100644
1854     --- a/drivers/tty/serial/serial-tegra.c
1855     +++ b/drivers/tty/serial/serial-tegra.c
1856     @@ -1028,9 +1028,11 @@ static int tegra_uart_hw_init(struct tegra_uart_port *tup)
1857    
1858     if (tup->cdata->fifo_mode_enable_status) {
1859     ret = tegra_uart_wait_fifo_mode_enabled(tup);
1860     - dev_err(tup->uport.dev, "FIFO mode not enabled\n");
1861     - if (ret < 0)
1862     + if (ret < 0) {
1863     + dev_err(tup->uport.dev,
1864     + "Failed to enable FIFO mode: %d\n", ret);
1865     return ret;
1866     + }
1867     } else {
1868     /*
1869     * For all tegra devices (up to t210), there is a hardware
1870     diff --git a/drivers/usb/cdns3/ep0.c b/drivers/usb/cdns3/ep0.c
1871     index 666cebd9c5f29..390779e2294d9 100644
1872     --- a/drivers/usb/cdns3/ep0.c
1873     +++ b/drivers/usb/cdns3/ep0.c
1874     @@ -736,6 +736,7 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep,
1875     request->actual = 0;
1876     priv_dev->status_completion_no_call = true;
1877     priv_dev->pending_status_request = request;
1878     + usb_gadget_set_state(&priv_dev->gadget, USB_STATE_CONFIGURED);
1879     spin_unlock_irqrestore(&priv_dev->lock, flags);
1880    
1881     /*
1882     diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
1883     index dcd7066ffba22..3922a6f8c50a6 100644
1884     --- a/drivers/usb/class/usbtmc.c
1885     +++ b/drivers/usb/class/usbtmc.c
1886     @@ -2285,17 +2285,10 @@ static void usbtmc_interrupt(struct urb *urb)
1887     dev_err(dev, "overflow with length %d, actual length is %d\n",
1888     data->iin_wMaxPacketSize, urb->actual_length);
1889     /* fall through */
1890     - case -ECONNRESET:
1891     - case -ENOENT:
1892     - case -ESHUTDOWN:
1893     - case -EILSEQ:
1894     - case -ETIME:
1895     - case -EPIPE:
1896     + default:
1897     /* urb terminated, clean up */
1898     dev_dbg(dev, "urb terminated, status: %d\n", status);
1899     return;
1900     - default:
1901     - dev_err(dev, "unknown status received: %d\n", status);
1902     }
1903     exit:
1904     rv = usb_submit_urb(urb, GFP_ATOMIC);
1905     diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
1906     index 3740cf95560e9..0697fde51d00f 100644
1907     --- a/drivers/usb/common/usb-otg-fsm.c
1908     +++ b/drivers/usb/common/usb-otg-fsm.c
1909     @@ -193,7 +193,11 @@ static void otg_start_hnp_polling(struct otg_fsm *fsm)
1910     if (!fsm->host_req_flag)
1911     return;
1912    
1913     - INIT_DELAYED_WORK(&fsm->hnp_polling_work, otg_hnp_polling_work);
1914     + if (!fsm->hnp_work_inited) {
1915     + INIT_DELAYED_WORK(&fsm->hnp_polling_work, otg_hnp_polling_work);
1916     + fsm->hnp_work_inited = true;
1917     + }
1918     +
1919     schedule_delayed_work(&fsm->hnp_polling_work,
1920     msecs_to_jiffies(T_HOST_REQ_POLL));
1921     }
1922     diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
1923     index 3d540b0d93687..e4d71410a4b1c 100644
1924     --- a/drivers/usb/gadget/function/f_hid.c
1925     +++ b/drivers/usb/gadget/function/f_hid.c
1926     @@ -41,6 +41,7 @@ struct f_hidg {
1927     unsigned char bInterfaceSubClass;
1928     unsigned char bInterfaceProtocol;
1929     unsigned char protocol;
1930     + unsigned char idle;
1931     unsigned short report_desc_length;
1932     char *report_desc;
1933     unsigned short report_length;
1934     @@ -344,6 +345,11 @@ static ssize_t f_hidg_write(struct file *file, const char __user *buffer,
1935    
1936     spin_lock_irqsave(&hidg->write_spinlock, flags);
1937    
1938     + if (!hidg->req) {
1939     + spin_unlock_irqrestore(&hidg->write_spinlock, flags);
1940     + return -ESHUTDOWN;
1941     + }
1942     +
1943     #define WRITE_COND (!hidg->write_pending)
1944     try_again:
1945     /* write queue */
1946     @@ -364,8 +370,14 @@ try_again:
1947     count = min_t(unsigned, count, hidg->report_length);
1948    
1949     spin_unlock_irqrestore(&hidg->write_spinlock, flags);
1950     - status = copy_from_user(req->buf, buffer, count);
1951    
1952     + if (!req) {
1953     + ERROR(hidg->func.config->cdev, "hidg->req is NULL\n");
1954     + status = -ESHUTDOWN;
1955     + goto release_write_pending;
1956     + }
1957     +
1958     + status = copy_from_user(req->buf, buffer, count);
1959     if (status != 0) {
1960     ERROR(hidg->func.config->cdev,
1961     "copy_from_user error\n");
1962     @@ -393,14 +405,17 @@ try_again:
1963    
1964     spin_unlock_irqrestore(&hidg->write_spinlock, flags);
1965    
1966     + if (!hidg->in_ep->enabled) {
1967     + ERROR(hidg->func.config->cdev, "in_ep is disabled\n");
1968     + status = -ESHUTDOWN;
1969     + goto release_write_pending;
1970     + }
1971     +
1972     status = usb_ep_queue(hidg->in_ep, req, GFP_ATOMIC);
1973     - if (status < 0) {
1974     - ERROR(hidg->func.config->cdev,
1975     - "usb_ep_queue error on int endpoint %zd\n", status);
1976     + if (status < 0)
1977     goto release_write_pending;
1978     - } else {
1979     + else
1980     status = count;
1981     - }
1982    
1983     return status;
1984     release_write_pending:
1985     @@ -529,6 +544,14 @@ static int hidg_setup(struct usb_function *f,
1986     goto respond;
1987     break;
1988    
1989     + case ((USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
1990     + | HID_REQ_GET_IDLE):
1991     + VDBG(cdev, "get_idle\n");
1992     + length = min_t(unsigned int, length, 1);
1993     + ((u8 *) req->buf)[0] = hidg->idle;
1994     + goto respond;
1995     + break;
1996     +
1997     case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
1998     | HID_REQ_SET_REPORT):
1999     VDBG(cdev, "set_report | wLength=%d\n", ctrl->wLength);
2000     @@ -552,6 +575,14 @@ static int hidg_setup(struct usb_function *f,
2001     goto stall;
2002     break;
2003    
2004     + case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8
2005     + | HID_REQ_SET_IDLE):
2006     + VDBG(cdev, "set_idle\n");
2007     + length = 0;
2008     + hidg->idle = value >> 8;
2009     + goto respond;
2010     + break;
2011     +
2012     case ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8
2013     | USB_REQ_GET_DESCRIPTOR):
2014     switch (value >> 8) {
2015     @@ -779,6 +810,7 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
2016     hidg_interface_desc.bInterfaceSubClass = hidg->bInterfaceSubClass;
2017     hidg_interface_desc.bInterfaceProtocol = hidg->bInterfaceProtocol;
2018     hidg->protocol = HID_REPORT_PROTOCOL;
2019     + hidg->idle = 1;
2020     hidg_ss_in_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
2021     hidg_ss_in_comp_desc.wBytesPerInterval =
2022     cpu_to_le16(hidg->report_length);
2023     diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
2024     index a82ba9cc0c724..e9c39a41faae9 100644
2025     --- a/drivers/usb/serial/ch341.c
2026     +++ b/drivers/usb/serial/ch341.c
2027     @@ -678,6 +678,7 @@ static struct usb_serial_driver ch341_device = {
2028     .owner = THIS_MODULE,
2029     .name = "ch341-uart",
2030     },
2031     + .bulk_in_size = 512,
2032     .id_table = id_table,
2033     .num_ports = 1,
2034     .open = ch341_open,
2035     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
2036     index 6bd1a2f6cbd0a..1ec623e46214b 100644
2037     --- a/drivers/usb/serial/ftdi_sio.c
2038     +++ b/drivers/usb/serial/ftdi_sio.c
2039     @@ -219,6 +219,7 @@ static const struct usb_device_id id_table_combined[] = {
2040     { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) },
2041     { USB_DEVICE(FTDI_VID, FTDI_R2000KU_TRUE_RNG) },
2042     { USB_DEVICE(FTDI_VID, FTDI_VARDAAN_PID) },
2043     + { USB_DEVICE(FTDI_VID, FTDI_AUTO_M3_OP_COM_V2_PID) },
2044     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0100_PID) },
2045     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0101_PID) },
2046     { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0102_PID) },
2047     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
2048     index add602bebd820..755858ca20bac 100644
2049     --- a/drivers/usb/serial/ftdi_sio_ids.h
2050     +++ b/drivers/usb/serial/ftdi_sio_ids.h
2051     @@ -159,6 +159,9 @@
2052     /* Vardaan Enterprises Serial Interface VEUSB422R3 */
2053     #define FTDI_VARDAAN_PID 0xF070
2054    
2055     +/* Auto-M3 Ltd. - OP-COM USB V2 - OBD interface Adapter */
2056     +#define FTDI_AUTO_M3_OP_COM_V2_PID 0x4f50
2057     +
2058     /*
2059     * Xsens Technologies BV products (http://www.xsens.com).
2060     */
2061     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2062     index d6d10ba1e1e80..793530f241ceb 100644
2063     --- a/drivers/usb/serial/option.c
2064     +++ b/drivers/usb/serial/option.c
2065     @@ -1203,6 +1203,8 @@ static const struct usb_device_id option_ids[] = {
2066     .driver_info = NCTRL(2) | RSVD(3) },
2067     { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */
2068     .driver_info = NCTRL(0) | RSVD(1) },
2069     + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1056, 0xff), /* Telit FD980 */
2070     + .driver_info = NCTRL(2) | RSVD(3) },
2071     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
2072     .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
2073     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
2074     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
2075     index 4c37abe768512..9905720df9248 100644
2076     --- a/fs/ext4/namei.c
2077     +++ b/fs/ext4/namei.c
2078     @@ -2407,7 +2407,7 @@ again:
2079     goto journal_error;
2080     err = ext4_handle_dirty_dx_node(handle, dir,
2081     frame->bh);
2082     - if (err)
2083     + if (restart || err)
2084     goto journal_error;
2085     } else {
2086     struct dx_root *dxroot;
2087     diff --git a/fs/pipe.c b/fs/pipe.c
2088     index 8a2ab2f974bd4..30a43b1956742 100644
2089     --- a/fs/pipe.c
2090     +++ b/fs/pipe.c
2091     @@ -30,6 +30,21 @@
2092    
2093     #include "internal.h"
2094    
2095     +/*
2096     + * New pipe buffers will be restricted to this size while the user is exceeding
2097     + * their pipe buffer quota. The general pipe use case needs at least two
2098     + * buffers: one for data yet to be read, and one for new data. If this is less
2099     + * than two, then a write to a non-empty pipe may block even if the pipe is not
2100     + * full. This can occur with GNU make jobserver or similar uses of pipes as
2101     + * semaphores: multiple processes may be waiting to write tokens back to the
2102     + * pipe before reading tokens: https://lore.kernel.org/lkml/1628086770.5rn8p04n6j.none@localhost/.
2103     + *
2104     + * Users can reduce their pipe buffers with F_SETPIPE_SZ below this at their
2105     + * own risk, namely: pipe writes to non-full pipes may block until the pipe is
2106     + * emptied.
2107     + */
2108     +#define PIPE_MIN_DEF_BUFFERS 2
2109     +
2110     /*
2111     * The max size that a non-root user is allowed to grow the pipe. Can
2112     * be set by root in /proc/sys/fs/pipe-max-size
2113     @@ -666,8 +681,8 @@ struct pipe_inode_info *alloc_pipe_info(void)
2114     user_bufs = account_pipe_buffers(user, 0, pipe_bufs);
2115    
2116     if (too_many_pipe_buffers_soft(user_bufs) && is_unprivileged_user()) {
2117     - user_bufs = account_pipe_buffers(user, pipe_bufs, 1);
2118     - pipe_bufs = 1;
2119     + user_bufs = account_pipe_buffers(user, pipe_bufs, PIPE_MIN_DEF_BUFFERS);
2120     + pipe_bufs = PIPE_MIN_DEF_BUFFERS;
2121     }
2122    
2123     if (too_many_pipe_buffers_hard(user_bufs) && is_unprivileged_user())
2124     diff --git a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c
2125     index 9e64e23014e8e..07d787145cc36 100644
2126     --- a/fs/reiserfs/stree.c
2127     +++ b/fs/reiserfs/stree.c
2128     @@ -387,6 +387,24 @@ void pathrelse(struct treepath *search_path)
2129     search_path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
2130     }
2131    
2132     +static int has_valid_deh_location(struct buffer_head *bh, struct item_head *ih)
2133     +{
2134     + struct reiserfs_de_head *deh;
2135     + int i;
2136     +
2137     + deh = B_I_DEH(bh, ih);
2138     + for (i = 0; i < ih_entry_count(ih); i++) {
2139     + if (deh_location(&deh[i]) > ih_item_len(ih)) {
2140     + reiserfs_warning(NULL, "reiserfs-5094",
2141     + "directory entry location seems wrong %h",
2142     + &deh[i]);
2143     + return 0;
2144     + }
2145     + }
2146     +
2147     + return 1;
2148     +}
2149     +
2150     static int is_leaf(char *buf, int blocksize, struct buffer_head *bh)
2151     {
2152     struct block_head *blkh;
2153     @@ -454,11 +472,14 @@ static int is_leaf(char *buf, int blocksize, struct buffer_head *bh)
2154     "(second one): %h", ih);
2155     return 0;
2156     }
2157     - if (is_direntry_le_ih(ih) && (ih_item_len(ih) < (ih_entry_count(ih) * IH_SIZE))) {
2158     - reiserfs_warning(NULL, "reiserfs-5093",
2159     - "item entry count seems wrong %h",
2160     - ih);
2161     - return 0;
2162     + if (is_direntry_le_ih(ih)) {
2163     + if (ih_item_len(ih) < (ih_entry_count(ih) * IH_SIZE)) {
2164     + reiserfs_warning(NULL, "reiserfs-5093",
2165     + "item entry count seems wrong %h",
2166     + ih);
2167     + return 0;
2168     + }
2169     + return has_valid_deh_location(bh, ih);
2170     }
2171     prev_location = ih_location(ih);
2172     }
2173     diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
2174     index 1b9c7a387dc71..913f5af9bf248 100644
2175     --- a/fs/reiserfs/super.c
2176     +++ b/fs/reiserfs/super.c
2177     @@ -2082,6 +2082,14 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
2178     unlock_new_inode(root_inode);
2179     }
2180    
2181     + if (!S_ISDIR(root_inode->i_mode) || !inode_get_bytes(root_inode) ||
2182     + !root_inode->i_size) {
2183     + SWARN(silent, s, "", "corrupt root inode, run fsck");
2184     + iput(root_inode);
2185     + errval = -EUCLEAN;
2186     + goto error;
2187     + }
2188     +
2189     s->s_root = d_make_root(root_inode);
2190     if (!s->s_root)
2191     goto error;
2192     diff --git a/include/linux/tee_drv.h b/include/linux/tee_drv.h
2193     index 7a03f68fb982d..91677f2fa2e8b 100644
2194     --- a/include/linux/tee_drv.h
2195     +++ b/include/linux/tee_drv.h
2196     @@ -317,6 +317,7 @@ void *tee_get_drvdata(struct tee_device *teedev);
2197     * @returns a pointer to 'struct tee_shm'
2198     */
2199     struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags);
2200     +struct tee_shm *tee_shm_alloc_kernel_buf(struct tee_context *ctx, size_t size);
2201    
2202     /**
2203     * tee_shm_priv_alloc() - Allocate shared memory privately
2204     diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h
2205     index e78eb577d0fa1..8ef7d148c1493 100644
2206     --- a/include/linux/usb/otg-fsm.h
2207     +++ b/include/linux/usb/otg-fsm.h
2208     @@ -196,6 +196,7 @@ struct otg_fsm {
2209     struct mutex lock;
2210     u8 *host_req_flag;
2211     struct delayed_work hnp_polling_work;
2212     + bool hnp_work_inited;
2213     bool state_changed;
2214     };
2215    
2216     diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
2217     index 325e8efb5b368..14d00cc10e22e 100644
2218     --- a/include/net/bluetooth/hci_core.h
2219     +++ b/include/net/bluetooth/hci_core.h
2220     @@ -1056,6 +1056,7 @@ struct hci_dev *hci_alloc_dev(void);
2221     void hci_free_dev(struct hci_dev *hdev);
2222     int hci_register_dev(struct hci_dev *hdev);
2223     void hci_unregister_dev(struct hci_dev *hdev);
2224     +void hci_cleanup_dev(struct hci_dev *hdev);
2225     int hci_suspend_dev(struct hci_dev *hdev);
2226     int hci_resume_dev(struct hci_dev *hdev);
2227     int hci_reset_dev(struct hci_dev *hdev);
2228     diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
2229     index feeecbc80e727..2c739fc752e1a 100644
2230     --- a/include/net/ip6_route.h
2231     +++ b/include/net/ip6_route.h
2232     @@ -263,7 +263,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
2233    
2234     static inline unsigned int ip6_skb_dst_mtu(struct sk_buff *skb)
2235     {
2236     - int mtu;
2237     + unsigned int mtu;
2238    
2239     struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ?
2240     inet6_sk(skb->sk) : NULL;
2241     diff --git a/kernel/time/timer.c b/kernel/time/timer.c
2242     index 87fa73cdb90f6..16a2b62f5f74c 100644
2243     --- a/kernel/time/timer.c
2244     +++ b/kernel/time/timer.c
2245     @@ -1269,8 +1269,10 @@ static inline void timer_base_unlock_expiry(struct timer_base *base)
2246     static void timer_sync_wait_running(struct timer_base *base)
2247     {
2248     if (atomic_read(&base->timer_waiters)) {
2249     + raw_spin_unlock_irq(&base->lock);
2250     spin_unlock(&base->expiry_lock);
2251     spin_lock(&base->expiry_lock);
2252     + raw_spin_lock_irq(&base->lock);
2253     }
2254     }
2255    
2256     @@ -1454,14 +1456,14 @@ static void expire_timers(struct timer_base *base, struct hlist_head *head)
2257     if (timer->flags & TIMER_IRQSAFE) {
2258     raw_spin_unlock(&base->lock);
2259     call_timer_fn(timer, fn, baseclk);
2260     - base->running_timer = NULL;
2261     raw_spin_lock(&base->lock);
2262     + base->running_timer = NULL;
2263     } else {
2264     raw_spin_unlock_irq(&base->lock);
2265     call_timer_fn(timer, fn, baseclk);
2266     + raw_spin_lock_irq(&base->lock);
2267     base->running_timer = NULL;
2268     timer_sync_wait_running(base);
2269     - raw_spin_lock_irq(&base->lock);
2270     }
2271     }
2272     }
2273     diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
2274     index 553add1eb457f..db2b10c718ba2 100644
2275     --- a/kernel/trace/trace_events_hist.c
2276     +++ b/kernel/trace/trace_events_hist.c
2277     @@ -3169,6 +3169,10 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data,
2278    
2279     expr->operands[0] = operand1;
2280     expr->operands[1] = operand2;
2281     +
2282     + /* The operand sizes should be the same, so just pick one */
2283     + expr->size = operand1->size;
2284     +
2285     expr->operator = field_op;
2286     expr->name = expr_str(expr, 0);
2287     expr->type = kstrdup(operand1->type, GFP_KERNEL);
2288     diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
2289     index 21a7ea9b70c8a..83a07fca9000f 100644
2290     --- a/net/bluetooth/hci_core.c
2291     +++ b/net/bluetooth/hci_core.c
2292     @@ -3393,14 +3393,10 @@ EXPORT_SYMBOL(hci_register_dev);
2293     /* Unregister HCI device */
2294     void hci_unregister_dev(struct hci_dev *hdev)
2295     {
2296     - int id;
2297     -
2298     BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
2299    
2300     hci_dev_set_flag(hdev, HCI_UNREGISTER);
2301    
2302     - id = hdev->id;
2303     -
2304     write_lock(&hci_dev_list_lock);
2305     list_del(&hdev->list);
2306     write_unlock(&hci_dev_list_lock);
2307     @@ -3429,7 +3425,14 @@ void hci_unregister_dev(struct hci_dev *hdev)
2308     }
2309    
2310     device_del(&hdev->dev);
2311     + /* Actual cleanup is deferred until hci_cleanup_dev(). */
2312     + hci_dev_put(hdev);
2313     +}
2314     +EXPORT_SYMBOL(hci_unregister_dev);
2315    
2316     +/* Cleanup HCI device */
2317     +void hci_cleanup_dev(struct hci_dev *hdev)
2318     +{
2319     debugfs_remove_recursive(hdev->debugfs);
2320     kfree_const(hdev->hw_info);
2321     kfree_const(hdev->fw_info);
2322     @@ -3452,11 +3455,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
2323     hci_discovery_filter_clear(hdev);
2324     hci_dev_unlock(hdev);
2325    
2326     - hci_dev_put(hdev);
2327     -
2328     - ida_simple_remove(&hci_index_ida, id);
2329     + ida_simple_remove(&hci_index_ida, hdev->id);
2330     }
2331     -EXPORT_SYMBOL(hci_unregister_dev);
2332    
2333     /* Suspend HCI device */
2334     int hci_suspend_dev(struct hci_dev *hdev)
2335     diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
2336     index 8d2c26c4b6d3d..befab857a39be 100644
2337     --- a/net/bluetooth/hci_sock.c
2338     +++ b/net/bluetooth/hci_sock.c
2339     @@ -59,6 +59,17 @@ struct hci_pinfo {
2340     char comm[TASK_COMM_LEN];
2341     };
2342    
2343     +static struct hci_dev *hci_hdev_from_sock(struct sock *sk)
2344     +{
2345     + struct hci_dev *hdev = hci_pi(sk)->hdev;
2346     +
2347     + if (!hdev)
2348     + return ERR_PTR(-EBADFD);
2349     + if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
2350     + return ERR_PTR(-EPIPE);
2351     + return hdev;
2352     +}
2353     +
2354     void hci_sock_set_flag(struct sock *sk, int nr)
2355     {
2356     set_bit(nr, &hci_pi(sk)->flags);
2357     @@ -752,19 +763,13 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)
2358     if (event == HCI_DEV_UNREG) {
2359     struct sock *sk;
2360    
2361     - /* Detach sockets from device */
2362     + /* Wake up sockets using this dead device */
2363     read_lock(&hci_sk_list.lock);
2364     sk_for_each(sk, &hci_sk_list.head) {
2365     - lock_sock(sk);
2366     if (hci_pi(sk)->hdev == hdev) {
2367     - hci_pi(sk)->hdev = NULL;
2368     sk->sk_err = EPIPE;
2369     - sk->sk_state = BT_OPEN;
2370     sk->sk_state_change(sk);
2371     -
2372     - hci_dev_put(hdev);
2373     }
2374     - release_sock(sk);
2375     }
2376     read_unlock(&hci_sk_list.lock);
2377     }
2378     @@ -923,10 +928,10 @@ static int hci_sock_blacklist_del(struct hci_dev *hdev, void __user *arg)
2379     static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd,
2380     unsigned long arg)
2381     {
2382     - struct hci_dev *hdev = hci_pi(sk)->hdev;
2383     + struct hci_dev *hdev = hci_hdev_from_sock(sk);
2384    
2385     - if (!hdev)
2386     - return -EBADFD;
2387     + if (IS_ERR(hdev))
2388     + return PTR_ERR(hdev);
2389    
2390     if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
2391     return -EBUSY;
2392     @@ -1080,6 +1085,18 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
2393    
2394     lock_sock(sk);
2395    
2396     + /* Allow detaching from dead device and attaching to alive device, if
2397     + * the caller wants to re-bind (instead of close) this socket in
2398     + * response to hci_sock_dev_event(HCI_DEV_UNREG) notification.
2399     + */
2400     + hdev = hci_pi(sk)->hdev;
2401     + if (hdev && hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
2402     + hci_pi(sk)->hdev = NULL;
2403     + sk->sk_state = BT_OPEN;
2404     + hci_dev_put(hdev);
2405     + }
2406     + hdev = NULL;
2407     +
2408     if (sk->sk_state == BT_BOUND) {
2409     err = -EALREADY;
2410     goto done;
2411     @@ -1356,9 +1373,9 @@ static int hci_sock_getname(struct socket *sock, struct sockaddr *addr,
2412    
2413     lock_sock(sk);
2414    
2415     - hdev = hci_pi(sk)->hdev;
2416     - if (!hdev) {
2417     - err = -EBADFD;
2418     + hdev = hci_hdev_from_sock(sk);
2419     + if (IS_ERR(hdev)) {
2420     + err = PTR_ERR(hdev);
2421     goto done;
2422     }
2423    
2424     @@ -1718,9 +1735,9 @@ static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg,
2425     goto done;
2426     }
2427    
2428     - hdev = hci_pi(sk)->hdev;
2429     - if (!hdev) {
2430     - err = -EBADFD;
2431     + hdev = hci_hdev_from_sock(sk);
2432     + if (IS_ERR(hdev)) {
2433     + err = PTR_ERR(hdev);
2434     goto done;
2435     }
2436    
2437     diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
2438     index 9874844a95a98..b69d88b88d2e4 100644
2439     --- a/net/bluetooth/hci_sysfs.c
2440     +++ b/net/bluetooth/hci_sysfs.c
2441     @@ -83,6 +83,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn)
2442     static void bt_host_release(struct device *dev)
2443     {
2444     struct hci_dev *hdev = to_hci_dev(dev);
2445     +
2446     + if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
2447     + hci_cleanup_dev(hdev);
2448     kfree(hdev);
2449     module_put(THIS_MODULE);
2450     }
2451     diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
2452     index e09147ac9a990..fc61cd3fea652 100644
2453     --- a/net/ipv4/tcp_offload.c
2454     +++ b/net/ipv4/tcp_offload.c
2455     @@ -298,6 +298,9 @@ int tcp_gro_complete(struct sk_buff *skb)
2456     if (th->cwr)
2457     skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
2458    
2459     + if (skb->encapsulation)
2460     + skb->inner_transport_header = skb->transport_header;
2461     +
2462     return 0;
2463     }
2464     EXPORT_SYMBOL(tcp_gro_complete);
2465     diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
2466     index c463eebdc8fe2..487a92d75c703 100644
2467     --- a/net/ipv4/udp_offload.c
2468     +++ b/net/ipv4/udp_offload.c
2469     @@ -501,6 +501,10 @@ static int udp_gro_complete_segment(struct sk_buff *skb)
2470    
2471     skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
2472     skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_L4;
2473     +
2474     + if (skb->encapsulation)
2475     + skb->inner_transport_header = skb->transport_header;
2476     +
2477     return 0;
2478     }
2479    
2480     diff --git a/net/sctp/auth.c b/net/sctp/auth.c
2481     index 7eced1e523a5e..3b2d0bd616dd4 100644
2482     --- a/net/sctp/auth.c
2483     +++ b/net/sctp/auth.c
2484     @@ -863,14 +863,18 @@ int sctp_auth_set_key(struct sctp_endpoint *ep,
2485     memcpy(key->data, &auth_key->sca_key[0], auth_key->sca_keylength);
2486     cur_key->key = key;
2487    
2488     - if (replace) {
2489     - list_del_init(&shkey->key_list);
2490     - sctp_auth_shkey_release(shkey);
2491     - if (asoc && asoc->active_key_id == auth_key->sca_keynumber)
2492     - sctp_auth_asoc_init_active_key(asoc, GFP_KERNEL);
2493     + if (!replace) {
2494     + list_add(&cur_key->key_list, sh_keys);
2495     + return 0;
2496     }
2497     +
2498     + list_del_init(&shkey->key_list);
2499     + sctp_auth_shkey_release(shkey);
2500     list_add(&cur_key->key_list, sh_keys);
2501    
2502     + if (asoc && asoc->active_key_id == auth_key->sca_keynumber)
2503     + sctp_auth_asoc_init_active_key(asoc, GFP_KERNEL);
2504     +
2505     return 0;
2506     }
2507    
2508     diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
2509     index 74f8aadfd4cbc..7011fbe003ff2 100755
2510     --- a/scripts/tracing/draw_functrace.py
2511     +++ b/scripts/tracing/draw_functrace.py
2512     @@ -17,7 +17,7 @@ Usage:
2513     $ cat /sys/kernel/debug/tracing/trace_pipe > ~/raw_trace_func
2514     Wait some times but not too much, the script is a bit slow.
2515     Break the pipe (Ctrl + Z)
2516     - $ scripts/draw_functrace.py < raw_trace_func > draw_functrace
2517     + $ scripts/tracing/draw_functrace.py < ~/raw_trace_func > draw_functrace
2518     Then you have your drawn trace in draw_functrace
2519     """
2520    
2521     @@ -103,10 +103,10 @@ def parseLine(line):
2522     line = line.strip()
2523     if line.startswith("#"):
2524     raise CommentLineException
2525     - m = re.match("[^]]+?\\] +([0-9.]+): (\\w+) <-(\\w+)", line)
2526     + m = re.match("[^]]+?\\] +([a-z.]+) +([0-9.]+): (\\w+) <-(\\w+)", line)
2527     if m is None:
2528     raise BrokenLineException
2529     - return (m.group(1), m.group(2), m.group(3))
2530     + return (m.group(2), m.group(3), m.group(4))
2531    
2532    
2533     def main():
2534     diff --git a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c
2535     index 83be6b982a87c..97e8eb38b0961 100644
2536     --- a/sound/core/seq/seq_ports.c
2537     +++ b/sound/core/seq/seq_ports.c
2538     @@ -514,10 +514,11 @@ static int check_and_subscribe_port(struct snd_seq_client *client,
2539     return err;
2540     }
2541    
2542     -static void delete_and_unsubscribe_port(struct snd_seq_client *client,
2543     - struct snd_seq_client_port *port,
2544     - struct snd_seq_subscribers *subs,
2545     - bool is_src, bool ack)
2546     +/* called with grp->list_mutex held */
2547     +static void __delete_and_unsubscribe_port(struct snd_seq_client *client,
2548     + struct snd_seq_client_port *port,
2549     + struct snd_seq_subscribers *subs,
2550     + bool is_src, bool ack)
2551     {
2552     struct snd_seq_port_subs_info *grp;
2553     struct list_head *list;
2554     @@ -525,7 +526,6 @@ static void delete_and_unsubscribe_port(struct snd_seq_client *client,
2555    
2556     grp = is_src ? &port->c_src : &port->c_dest;
2557     list = is_src ? &subs->src_list : &subs->dest_list;
2558     - down_write(&grp->list_mutex);
2559     write_lock_irq(&grp->list_lock);
2560     empty = list_empty(list);
2561     if (!empty)
2562     @@ -535,6 +535,18 @@ static void delete_and_unsubscribe_port(struct snd_seq_client *client,
2563    
2564     if (!empty)
2565     unsubscribe_port(client, port, grp, &subs->info, ack);
2566     +}
2567     +
2568     +static void delete_and_unsubscribe_port(struct snd_seq_client *client,
2569     + struct snd_seq_client_port *port,
2570     + struct snd_seq_subscribers *subs,
2571     + bool is_src, bool ack)
2572     +{
2573     + struct snd_seq_port_subs_info *grp;
2574     +
2575     + grp = is_src ? &port->c_src : &port->c_dest;
2576     + down_write(&grp->list_mutex);
2577     + __delete_and_unsubscribe_port(client, port, subs, is_src, ack);
2578     up_write(&grp->list_mutex);
2579     }
2580    
2581     @@ -590,27 +602,30 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector,
2582     struct snd_seq_client_port *dest_port,
2583     struct snd_seq_port_subscribe *info)
2584     {
2585     - struct snd_seq_port_subs_info *src = &src_port->c_src;
2586     + struct snd_seq_port_subs_info *dest = &dest_port->c_dest;
2587     struct snd_seq_subscribers *subs;
2588     int err = -ENOENT;
2589    
2590     - down_write(&src->list_mutex);
2591     + /* always start from deleting the dest port for avoiding concurrent
2592     + * deletions
2593     + */
2594     + down_write(&dest->list_mutex);
2595     /* look for the connection */
2596     - list_for_each_entry(subs, &src->list_head, src_list) {
2597     + list_for_each_entry(subs, &dest->list_head, dest_list) {
2598     if (match_subs_info(info, &subs->info)) {
2599     - atomic_dec(&subs->ref_count); /* mark as not ready */
2600     + __delete_and_unsubscribe_port(dest_client, dest_port,
2601     + subs, false,
2602     + connector->number != dest_client->number);
2603     err = 0;
2604     break;
2605     }
2606     }
2607     - up_write(&src->list_mutex);
2608     + up_write(&dest->list_mutex);
2609     if (err < 0)
2610     return err;
2611    
2612     delete_and_unsubscribe_port(src_client, src_port, subs, true,
2613     connector->number != src_client->number);
2614     - delete_and_unsubscribe_port(dest_client, dest_port, subs, false,
2615     - connector->number != dest_client->number);
2616     kfree(subs);
2617     return 0;
2618     }
2619     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2620     index f5606036b6a29..a0d1561eeb532 100644
2621     --- a/sound/pci/hda/patch_realtek.c
2622     +++ b/sound/pci/hda/patch_realtek.c
2623     @@ -7971,6 +7971,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
2624     SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
2625     SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
2626     SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
2627     + SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
2628     SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
2629     SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
2630     SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS),
2631     diff --git a/sound/usb/clock.c b/sound/usb/clock.c
2632     index 6a51b9d20eebf..3d1c0ec117536 100644
2633     --- a/sound/usb/clock.c
2634     +++ b/sound/usb/clock.c
2635     @@ -319,6 +319,12 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip,
2636     selector->baCSourceID[ret - 1],
2637     visited, validate);
2638     if (ret > 0) {
2639     + /*
2640     + * For Samsung USBC Headset (AKG), setting clock selector again
2641     + * will result in incorrect default clock setting problems
2642     + */
2643     + if (chip->usb_id == USB_ID(0x04e8, 0xa051))
2644     + return ret;
2645     err = uac_clock_selector_set_val(chip, entity_id, cur);
2646     if (err < 0)
2647     return err;
2648     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
2649     index 5b17a5c5785c0..4d20f3f45f7e2 100644
2650     --- a/sound/usb/quirks.c
2651     +++ b/sound/usb/quirks.c
2652     @@ -1842,6 +1842,7 @@ static const struct registration_quirk registration_quirks[] = {
2653     REG_QUIRK_ENTRY(0x0951, 0x16ea, 2), /* Kingston HyperX Cloud Flight S */
2654     REG_QUIRK_ENTRY(0x0ecb, 0x1f46, 2), /* JBL Quantum 600 */
2655     REG_QUIRK_ENTRY(0x0ecb, 0x2039, 2), /* JBL Quantum 400 */
2656     + REG_QUIRK_ENTRY(0x0ecb, 0x203c, 2), /* JBL Quantum 600 */
2657     REG_QUIRK_ENTRY(0x0ecb, 0x203e, 2), /* JBL Quantum 800 */
2658     { 0 } /* terminator */
2659     };
2660     diff --git a/tools/testing/selftests/bpf/verifier/stack_ptr.c b/tools/testing/selftests/bpf/verifier/stack_ptr.c
2661     index 7276620ef242a..53d2a5a5ec582 100644
2662     --- a/tools/testing/selftests/bpf/verifier/stack_ptr.c
2663     +++ b/tools/testing/selftests/bpf/verifier/stack_ptr.c
2664     @@ -291,8 +291,6 @@
2665     BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 0),
2666     BPF_EXIT_INSN(),
2667     },
2668     - .result_unpriv = REJECT,
2669     - .errstr_unpriv = "invalid stack off=0 size=1",
2670     .result = ACCEPT,
2671     .retval = 42,
2672     },
2673     diff --git a/tools/testing/selftests/bpf/verifier/value_ptr_arith.c b/tools/testing/selftests/bpf/verifier/value_ptr_arith.c
2674     index a8dab0f58462e..188ac92c56d1b 100644
2675     --- a/tools/testing/selftests/bpf/verifier/value_ptr_arith.c
2676     +++ b/tools/testing/selftests/bpf/verifier/value_ptr_arith.c
2677     @@ -301,8 +301,6 @@
2678     },
2679     .fixup_map_array_48b = { 3 },
2680     .result = ACCEPT,
2681     - .result_unpriv = REJECT,
2682     - .errstr_unpriv = "R0 pointer arithmetic of map value goes out of range",
2683     .retval = 1,
2684     },
2685     {
2686     @@ -372,8 +370,6 @@
2687     },
2688     .fixup_map_array_48b = { 3 },
2689     .result = ACCEPT,
2690     - .result_unpriv = REJECT,
2691     - .errstr_unpriv = "R0 pointer arithmetic of map value goes out of range",
2692     .retval = 1,
2693     },
2694     {
2695     @@ -473,8 +469,6 @@
2696     },
2697     .fixup_map_array_48b = { 3 },
2698     .result = ACCEPT,
2699     - .result_unpriv = REJECT,
2700     - .errstr_unpriv = "R0 pointer arithmetic of map value goes out of range",
2701     .retval = 1,
2702     },
2703     {
2704     @@ -767,8 +761,6 @@
2705     },
2706     .fixup_map_array_48b = { 3 },
2707     .result = ACCEPT,
2708     - .result_unpriv = REJECT,
2709     - .errstr_unpriv = "R0 pointer arithmetic of map value goes out of range",
2710     .retval = 1,
2711     },
2712     {
2713     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
2714     index 862c0708f58df..fc48298649c6c 100644
2715     --- a/virt/kvm/kvm_main.c
2716     +++ b/virt/kvm/kvm_main.c
2717     @@ -635,6 +635,8 @@ static void kvm_destroy_vm_debugfs(struct kvm *kvm)
2718    
2719     static int kvm_create_vm_debugfs(struct kvm *kvm, int fd)
2720     {
2721     + static DEFINE_MUTEX(kvm_debugfs_lock);
2722     + struct dentry *dent;
2723     char dir_name[ITOA_MAX_LEN * 2];
2724     struct kvm_stat_data *stat_data;
2725     struct kvm_stats_debugfs_item *p;
2726     @@ -643,8 +645,20 @@ static int kvm_create_vm_debugfs(struct kvm *kvm, int fd)
2727     return 0;
2728    
2729     snprintf(dir_name, sizeof(dir_name), "%d-%d", task_pid_nr(current), fd);
2730     - kvm->debugfs_dentry = debugfs_create_dir(dir_name, kvm_debugfs_dir);
2731     + mutex_lock(&kvm_debugfs_lock);
2732     + dent = debugfs_lookup(dir_name, kvm_debugfs_dir);
2733     + if (dent) {
2734     + pr_warn_ratelimited("KVM: debugfs: duplicate directory %s\n", dir_name);
2735     + dput(dent);
2736     + mutex_unlock(&kvm_debugfs_lock);
2737     + return 0;
2738     + }
2739     + dent = debugfs_create_dir(dir_name, kvm_debugfs_dir);
2740     + mutex_unlock(&kvm_debugfs_lock);
2741     + if (IS_ERR(dent))
2742     + return 0;
2743    
2744     + kvm->debugfs_dentry = dent;
2745     kvm->debugfs_stat_data = kcalloc(kvm_debugfs_num_entries,
2746     sizeof(*kvm->debugfs_stat_data),
2747     GFP_KERNEL_ACCOUNT);
2748     @@ -4367,7 +4381,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
2749     }
2750     add_uevent_var(env, "PID=%d", kvm->userspace_pid);
2751    
2752     - if (!IS_ERR_OR_NULL(kvm->debugfs_dentry)) {
2753     + if (kvm->debugfs_dentry) {
2754     char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL_ACCOUNT);
2755    
2756     if (p) {