Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0198-5.4.99-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (hide annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (19 months, 1 week ago) by niro
File size: 83279 byte(s)
-sync kernel patches
1 niro 3635 diff --git a/Makefile b/Makefile
2     index 4f6bfcf434e80..a0491ba1d7593 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 = 98
10     +SUBLEVEL = 99
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/arm/boot/dts/lpc32xx.dtsi b/arch/arm/boot/dts/lpc32xx.dtsi
15     index 7b7ec7b1217b8..824393e1bcfb7 100644
16     --- a/arch/arm/boot/dts/lpc32xx.dtsi
17     +++ b/arch/arm/boot/dts/lpc32xx.dtsi
18     @@ -329,9 +329,6 @@
19    
20     clocks = <&xtal_32k>, <&xtal>;
21     clock-names = "xtal_32k", "xtal";
22     -
23     - assigned-clocks = <&clk LPC32XX_CLK_HCLK_PLL>;
24     - assigned-clock-rates = <208000000>;
25     };
26     };
27    
28     diff --git a/arch/arm/include/asm/kexec-internal.h b/arch/arm/include/asm/kexec-internal.h
29     new file mode 100644
30     index 0000000000000..ecc2322db7aa1
31     --- /dev/null
32     +++ b/arch/arm/include/asm/kexec-internal.h
33     @@ -0,0 +1,12 @@
34     +/* SPDX-License-Identifier: GPL-2.0 */
35     +#ifndef _ARM_KEXEC_INTERNAL_H
36     +#define _ARM_KEXEC_INTERNAL_H
37     +
38     +struct kexec_relocate_data {
39     + unsigned long kexec_start_address;
40     + unsigned long kexec_indirection_page;
41     + unsigned long kexec_mach_type;
42     + unsigned long kexec_r2;
43     +};
44     +
45     +#endif
46     diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
47     index c773b829ee8ee..bfb05c93494db 100644
48     --- a/arch/arm/kernel/asm-offsets.c
49     +++ b/arch/arm/kernel/asm-offsets.c
50     @@ -15,6 +15,7 @@
51     #include <linux/kvm_host.h>
52     #endif
53     #include <asm/cacheflush.h>
54     +#include <asm/kexec-internal.h>
55     #include <asm/glue-df.h>
56     #include <asm/glue-pf.h>
57     #include <asm/mach/arch.h>
58     @@ -190,5 +191,9 @@ int main(void)
59     DEFINE(MPU_RGN_PRBAR, offsetof(struct mpu_rgn, prbar));
60     DEFINE(MPU_RGN_PRLAR, offsetof(struct mpu_rgn, prlar));
61     #endif
62     + DEFINE(KEXEC_START_ADDR, offsetof(struct kexec_relocate_data, kexec_start_address));
63     + DEFINE(KEXEC_INDIR_PAGE, offsetof(struct kexec_relocate_data, kexec_indirection_page));
64     + DEFINE(KEXEC_MACH_TYPE, offsetof(struct kexec_relocate_data, kexec_mach_type));
65     + DEFINE(KEXEC_R2, offsetof(struct kexec_relocate_data, kexec_r2));
66     return 0;
67     }
68     diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
69     index 76300f3813e89..734adeb42df87 100644
70     --- a/arch/arm/kernel/machine_kexec.c
71     +++ b/arch/arm/kernel/machine_kexec.c
72     @@ -15,6 +15,7 @@
73     #include <asm/pgalloc.h>
74     #include <asm/mmu_context.h>
75     #include <asm/cacheflush.h>
76     +#include <asm/kexec-internal.h>
77     #include <asm/fncpy.h>
78     #include <asm/mach-types.h>
79     #include <asm/smp_plat.h>
80     @@ -24,11 +25,6 @@
81     extern void relocate_new_kernel(void);
82     extern const unsigned int relocate_new_kernel_size;
83    
84     -extern unsigned long kexec_start_address;
85     -extern unsigned long kexec_indirection_page;
86     -extern unsigned long kexec_mach_type;
87     -extern unsigned long kexec_boot_atags;
88     -
89     static atomic_t waiting_for_crash_ipi;
90    
91     /*
92     @@ -161,6 +157,7 @@ void (*kexec_reinit)(void);
93     void machine_kexec(struct kimage *image)
94     {
95     unsigned long page_list, reboot_entry_phys;
96     + struct kexec_relocate_data *data;
97     void (*reboot_entry)(void);
98     void *reboot_code_buffer;
99    
100     @@ -176,18 +173,17 @@ void machine_kexec(struct kimage *image)
101    
102     reboot_code_buffer = page_address(image->control_code_page);
103    
104     - /* Prepare parameters for reboot_code_buffer*/
105     - set_kernel_text_rw();
106     - kexec_start_address = image->start;
107     - kexec_indirection_page = page_list;
108     - kexec_mach_type = machine_arch_type;
109     - kexec_boot_atags = image->arch.kernel_r2;
110     -
111     /* copy our kernel relocation code to the control code page */
112     reboot_entry = fncpy(reboot_code_buffer,
113     &relocate_new_kernel,
114     relocate_new_kernel_size);
115    
116     + data = reboot_code_buffer + relocate_new_kernel_size;
117     + data->kexec_start_address = image->start;
118     + data->kexec_indirection_page = page_list;
119     + data->kexec_mach_type = machine_arch_type;
120     + data->kexec_r2 = image->arch.kernel_r2;
121     +
122     /* get the identity mapping physical address for the reboot code */
123     reboot_entry_phys = virt_to_idmap(reboot_entry);
124    
125     diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
126     index 7eaa2ae7aff58..5e15b5912cb05 100644
127     --- a/arch/arm/kernel/relocate_kernel.S
128     +++ b/arch/arm/kernel/relocate_kernel.S
129     @@ -5,14 +5,16 @@
130    
131     #include <linux/linkage.h>
132     #include <asm/assembler.h>
133     +#include <asm/asm-offsets.h>
134     #include <asm/kexec.h>
135    
136     .align 3 /* not needed for this code, but keeps fncpy() happy */
137    
138     ENTRY(relocate_new_kernel)
139    
140     - ldr r0,kexec_indirection_page
141     - ldr r1,kexec_start_address
142     + adr r7, relocate_new_kernel_end
143     + ldr r0, [r7, #KEXEC_INDIR_PAGE]
144     + ldr r1, [r7, #KEXEC_START_ADDR]
145    
146     /*
147     * If there is no indirection page (we are doing crashdumps)
148     @@ -57,34 +59,16 @@ ENTRY(relocate_new_kernel)
149    
150     2:
151     /* Jump to relocated kernel */
152     - mov lr,r1
153     - mov r0,#0
154     - ldr r1,kexec_mach_type
155     - ldr r2,kexec_boot_atags
156     - ARM( ret lr )
157     - THUMB( bx lr )
158     -
159     - .align
160     -
161     - .globl kexec_start_address
162     -kexec_start_address:
163     - .long 0x0
164     -
165     - .globl kexec_indirection_page
166     -kexec_indirection_page:
167     - .long 0x0
168     -
169     - .globl kexec_mach_type
170     -kexec_mach_type:
171     - .long 0x0
172     -
173     - /* phy addr of the atags for the new kernel */
174     - .globl kexec_boot_atags
175     -kexec_boot_atags:
176     - .long 0x0
177     + mov lr, r1
178     + mov r0, #0
179     + ldr r1, [r7, #KEXEC_MACH_TYPE]
180     + ldr r2, [r7, #KEXEC_R2]
181     + ARM( ret lr )
182     + THUMB( bx lr )
183    
184     ENDPROC(relocate_new_kernel)
185    
186     + .align 3
187     relocate_new_kernel_end:
188    
189     .globl relocate_new_kernel_size
190     diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
191     index ab2568996ddb0..c01f76cd02422 100644
192     --- a/arch/arm/kernel/signal.c
193     +++ b/arch/arm/kernel/signal.c
194     @@ -694,18 +694,20 @@ struct page *get_signal_page(void)
195    
196     addr = page_address(page);
197    
198     + /* Poison the entire page */
199     + memset32(addr, __opcode_to_mem_arm(0xe7fddef1),
200     + PAGE_SIZE / sizeof(u32));
201     +
202     /* Give the signal return code some randomness */
203     offset = 0x200 + (get_random_int() & 0x7fc);
204     signal_return_offset = offset;
205    
206     - /*
207     - * Copy signal return handlers into the vector page, and
208     - * set sigreturn to be a pointer to these.
209     - */
210     + /* Copy signal return handlers into the page */
211     memcpy(addr + offset, sigreturn_codes, sizeof(sigreturn_codes));
212    
213     - ptr = (unsigned long)addr + offset;
214     - flush_icache_range(ptr, ptr + sizeof(sigreturn_codes));
215     + /* Flush out all instructions in this page */
216     + ptr = (unsigned long)addr;
217     + flush_icache_range(ptr, ptr + PAGE_SIZE);
218    
219     return page;
220     }
221     diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
222     index c8d317fafe2ea..de37027ad7587 100644
223     --- a/arch/arm/mach-omap2/cpuidle44xx.c
224     +++ b/arch/arm/mach-omap2/cpuidle44xx.c
225     @@ -151,10 +151,10 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
226     (cx->mpu_logic_state == PWRDM_POWER_OFF);
227    
228     /* Enter broadcast mode for periodic timers */
229     - tick_broadcast_enable();
230     + RCU_NONIDLE(tick_broadcast_enable());
231    
232     /* Enter broadcast mode for one-shot timers */
233     - tick_broadcast_enter();
234     + RCU_NONIDLE(tick_broadcast_enter());
235    
236     /*
237     * Call idle CPU PM enter notifier chain so that
238     @@ -166,7 +166,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
239    
240     if (dev->cpu == 0) {
241     pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state);
242     - omap_set_pwrdm_state(mpu_pd, cx->mpu_state);
243     + RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state));
244    
245     /*
246     * Call idle CPU cluster PM enter notifier chain
247     @@ -178,7 +178,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
248     index = 0;
249     cx = state_ptr + index;
250     pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state);
251     - omap_set_pwrdm_state(mpu_pd, cx->mpu_state);
252     + RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state));
253     mpuss_can_lose_context = 0;
254     }
255     }
256     @@ -194,9 +194,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
257     mpuss_can_lose_context)
258     gic_dist_disable();
259    
260     - clkdm_deny_idle(cpu_clkdm[1]);
261     - omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON);
262     - clkdm_allow_idle(cpu_clkdm[1]);
263     + RCU_NONIDLE(clkdm_deny_idle(cpu_clkdm[1]));
264     + RCU_NONIDLE(omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON));
265     + RCU_NONIDLE(clkdm_allow_idle(cpu_clkdm[1]));
266    
267     if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) &&
268     mpuss_can_lose_context) {
269     @@ -222,7 +222,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
270     cpu_pm_exit();
271    
272     cpu_pm_out:
273     - tick_broadcast_exit();
274     + RCU_NONIDLE(tick_broadcast_exit());
275    
276     fail:
277     cpuidle_coupled_parallel_barrier(dev, &abort_barrier);
278     diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
279     index f45bff158fc20..57dfc13b27529 100644
280     --- a/arch/arm/xen/enlighten.c
281     +++ b/arch/arm/xen/enlighten.c
282     @@ -370,8 +370,6 @@ static int __init xen_guest_init(void)
283     return -ENOMEM;
284     }
285     gnttab_init();
286     - if (!xen_initial_domain())
287     - xenbus_probe();
288    
289     /*
290     * Making sure board specific code will not set up ops for
291     diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
292     index 751651a6cd819..bf4fde88011c8 100644
293     --- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
294     +++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
295     @@ -337,7 +337,9 @@
296     &gcc {
297     protected-clocks = <GCC_QSPI_CORE_CLK>,
298     <GCC_QSPI_CORE_CLK_SRC>,
299     - <GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
300     + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
301     + <GCC_LPASS_Q6_AXI_CLK>,
302     + <GCC_LPASS_SWAY_CLK>;
303     };
304    
305     &pm8998_gpio {
306     diff --git a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
307     index e638f216dbfb3..840d6b9bbb598 100644
308     --- a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
309     +++ b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
310     @@ -232,7 +232,9 @@
311     &gcc {
312     protected-clocks = <GCC_QSPI_CORE_CLK>,
313     <GCC_QSPI_CORE_CLK_SRC>,
314     - <GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
315     + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
316     + <GCC_LPASS_Q6_AXI_CLK>,
317     + <GCC_LPASS_SWAY_CLK>;
318     };
319    
320     &i2c1 {
321     diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
322     index bb7d0aac6b9db..9d6ed8cda2c86 100644
323     --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
324     +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
325     @@ -232,6 +232,7 @@
326     reg = <0x0 0xf8000000 0x0 0x2000000>,
327     <0x0 0xfd000000 0x0 0x1000000>;
328     reg-names = "axi-base", "apb-base";
329     + device_type = "pci";
330     #address-cells = <3>;
331     #size-cells = <2>;
332     #interrupt-cells = <1>;
333     @@ -250,7 +251,6 @@
334     <0 0 0 2 &pcie0_intc 1>,
335     <0 0 0 3 &pcie0_intc 2>,
336     <0 0 0 4 &pcie0_intc 3>;
337     - linux,pci-domain = <0>;
338     max-link-speed = <1>;
339     msi-map = <0x0 &its 0x0 0x1000>;
340     phys = <&pcie_phy 0>, <&pcie_phy 1>,
341     diff --git a/arch/h8300/kernel/asm-offsets.c b/arch/h8300/kernel/asm-offsets.c
342     index 85e60509f0a83..d4b53af657c84 100644
343     --- a/arch/h8300/kernel/asm-offsets.c
344     +++ b/arch/h8300/kernel/asm-offsets.c
345     @@ -63,6 +63,9 @@ int main(void)
346     OFFSET(TI_FLAGS, thread_info, flags);
347     OFFSET(TI_CPU, thread_info, cpu);
348     OFFSET(TI_PRE, thread_info, preempt_count);
349     +#ifdef CONFIG_PREEMPTION
350     + DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count));
351     +#endif
352    
353     return 0;
354     }
355     diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
356     index a4e576019d79c..3ea360cad337b 100644
357     --- a/arch/powerpc/kernel/vmlinux.lds.S
358     +++ b/arch/powerpc/kernel/vmlinux.lds.S
359     @@ -102,6 +102,7 @@ SECTIONS
360     #ifdef CONFIG_PPC64
361     *(.tramp.ftrace.text);
362     #endif
363     + NOINSTR_TEXT
364     SCHED_TEXT
365     CPUIDLE_TEXT
366     LOCK_TEXT
367     diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h
368     index 3db261c4810fc..6a30794aa1eea 100644
369     --- a/arch/riscv/include/asm/page.h
370     +++ b/arch/riscv/include/asm/page.h
371     @@ -119,7 +119,10 @@ extern unsigned long min_low_pfn;
372    
373     #endif /* __ASSEMBLY__ */
374    
375     -#define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr)))
376     +#define virt_addr_valid(vaddr) ({ \
377     + unsigned long _addr = (unsigned long)vaddr; \
378     + (unsigned long)(_addr) >= PAGE_OFFSET && pfn_valid(virt_to_pfn(_addr)); \
379     +})
380    
381     #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \
382     VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
383     diff --git a/arch/x86/Makefile b/arch/x86/Makefile
384     index b5e3bfd4facea..8ca3cf7c5ec97 100644
385     --- a/arch/x86/Makefile
386     +++ b/arch/x86/Makefile
387     @@ -61,6 +61,9 @@ endif
388     KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
389     KBUILD_CFLAGS += $(call cc-option,-mno-avx,)
390    
391     +# Intel CET isn't enabled in the kernel
392     +KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
393     +
394     ifeq ($(CONFIG_X86_32),y)
395     BITS := 32
396     UTS_MACHINE := i386
397     @@ -131,9 +134,6 @@ else
398    
399     KBUILD_CFLAGS += -mno-red-zone
400     KBUILD_CFLAGS += -mcmodel=kernel
401     -
402     - # Intel CET isn't enabled in the kernel
403     - KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
404     endif
405    
406     ifdef CONFIG_X86_X32
407     diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
408     index 7d19aae015aeb..ba32adaeefdd0 100644
409     --- a/block/bfq-iosched.c
410     +++ b/block/bfq-iosched.c
411     @@ -6320,13 +6320,13 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd,
412     * limit 'something'.
413     */
414     /* no more than 50% of tags for async I/O */
415     - bfqd->word_depths[0][0] = max(bt->sb.depth >> 1, 1U);
416     + bfqd->word_depths[0][0] = max((1U << bt->sb.shift) >> 1, 1U);
417     /*
418     * no more than 75% of tags for sync writes (25% extra tags
419     * w.r.t. async I/O, to prevent async I/O from starving sync
420     * writes)
421     */
422     - bfqd->word_depths[0][1] = max((bt->sb.depth * 3) >> 2, 1U);
423     + bfqd->word_depths[0][1] = max(((1U << bt->sb.shift) * 3) >> 2, 1U);
424    
425     /*
426     * In-word depths in case some bfq_queue is being weight-
427     @@ -6336,9 +6336,9 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd,
428     * shortage.
429     */
430     /* no more than ~18% of tags for async I/O */
431     - bfqd->word_depths[1][0] = max((bt->sb.depth * 3) >> 4, 1U);
432     + bfqd->word_depths[1][0] = max(((1U << bt->sb.shift) * 3) >> 4, 1U);
433     /* no more than ~37% of tags for sync writes (~20% extra tags) */
434     - bfqd->word_depths[1][1] = max((bt->sb.depth * 6) >> 4, 1U);
435     + bfqd->word_depths[1][1] = max(((1U << bt->sb.shift) * 6) >> 4, 1U);
436    
437     for (i = 0; i < 2; i++)
438     for (j = 0; j < 2; j++)
439     diff --git a/drivers/clk/sunxi-ng/ccu_mp.c b/drivers/clk/sunxi-ng/ccu_mp.c
440     index fa4ecb9155909..9d3a76604d94c 100644
441     --- a/drivers/clk/sunxi-ng/ccu_mp.c
442     +++ b/drivers/clk/sunxi-ng/ccu_mp.c
443     @@ -108,7 +108,7 @@ static unsigned long ccu_mp_round_rate(struct ccu_mux_internal *mux,
444     max_m = cmp->m.max ?: 1 << cmp->m.width;
445     max_p = cmp->p.max ?: 1 << ((1 << cmp->p.width) - 1);
446    
447     - if (!(clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT)) {
448     + if (!clk_hw_can_set_rate_parent(&cmp->common.hw)) {
449     ccu_mp_find_best(*parent_rate, rate, max_m, max_p, &m, &p);
450     rate = *parent_rate / p / m;
451     } else {
452     diff --git a/drivers/gpio/gpio-ep93xx.c b/drivers/gpio/gpio-ep93xx.c
453     index 226da8df6f100..94d9fa0d6aa70 100644
454     --- a/drivers/gpio/gpio-ep93xx.c
455     +++ b/drivers/gpio/gpio-ep93xx.c
456     @@ -25,6 +25,9 @@
457     /* Maximum value for gpio line identifiers */
458     #define EP93XX_GPIO_LINE_MAX 63
459    
460     +/* Number of GPIO chips in EP93XX */
461     +#define EP93XX_GPIO_CHIP_NUM 8
462     +
463     /* Maximum value for irq capable line identifiers */
464     #define EP93XX_GPIO_LINE_MAX_IRQ 23
465    
466     @@ -34,74 +37,75 @@
467     */
468     #define EP93XX_GPIO_F_IRQ_BASE 80
469    
470     -struct ep93xx_gpio {
471     - void __iomem *base;
472     - struct gpio_chip gc[8];
473     +struct ep93xx_gpio_irq_chip {
474     + struct irq_chip ic;
475     + u8 irq_offset;
476     + u8 int_unmasked;
477     + u8 int_enabled;
478     + u8 int_type1;
479     + u8 int_type2;
480     + u8 int_debounce;
481     };
482    
483     -/*************************************************************************
484     - * Interrupt handling for EP93xx on-chip GPIOs
485     - *************************************************************************/
486     -static unsigned char gpio_int_unmasked[3];
487     -static unsigned char gpio_int_enabled[3];
488     -static unsigned char gpio_int_type1[3];
489     -static unsigned char gpio_int_type2[3];
490     -static unsigned char gpio_int_debounce[3];
491     -
492     -/* Port ordering is: A B F */
493     -static const u8 int_type1_register_offset[3] = { 0x90, 0xac, 0x4c };
494     -static const u8 int_type2_register_offset[3] = { 0x94, 0xb0, 0x50 };
495     -static const u8 eoi_register_offset[3] = { 0x98, 0xb4, 0x54 };
496     -static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
497     -static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 };
498     -
499     -static void ep93xx_gpio_update_int_params(struct ep93xx_gpio *epg, unsigned port)
500     -{
501     - BUG_ON(port > 2);
502     +struct ep93xx_gpio_chip {
503     + struct gpio_chip gc;
504     + struct ep93xx_gpio_irq_chip *eic;
505     +};
506    
507     - writeb_relaxed(0, epg->base + int_en_register_offset[port]);
508     +struct ep93xx_gpio {
509     + void __iomem *base;
510     + struct ep93xx_gpio_chip gc[EP93XX_GPIO_CHIP_NUM];
511     +};
512    
513     - writeb_relaxed(gpio_int_type2[port],
514     - epg->base + int_type2_register_offset[port]);
515     +#define to_ep93xx_gpio_chip(x) container_of(x, struct ep93xx_gpio_chip, gc)
516    
517     - writeb_relaxed(gpio_int_type1[port],
518     - epg->base + int_type1_register_offset[port]);
519     +static struct ep93xx_gpio_irq_chip *to_ep93xx_gpio_irq_chip(struct gpio_chip *gc)
520     +{
521     + struct ep93xx_gpio_chip *egc = to_ep93xx_gpio_chip(gc);
522    
523     - writeb(gpio_int_unmasked[port] & gpio_int_enabled[port],
524     - epg->base + int_en_register_offset[port]);
525     + return egc->eic;
526     }
527    
528     -static int ep93xx_gpio_port(struct gpio_chip *gc)
529     +/*************************************************************************
530     + * Interrupt handling for EP93xx on-chip GPIOs
531     + *************************************************************************/
532     +#define EP93XX_INT_TYPE1_OFFSET 0x00
533     +#define EP93XX_INT_TYPE2_OFFSET 0x04
534     +#define EP93XX_INT_EOI_OFFSET 0x08
535     +#define EP93XX_INT_EN_OFFSET 0x0c
536     +#define EP93XX_INT_STATUS_OFFSET 0x10
537     +#define EP93XX_INT_RAW_STATUS_OFFSET 0x14
538     +#define EP93XX_INT_DEBOUNCE_OFFSET 0x18
539     +
540     +static void ep93xx_gpio_update_int_params(struct ep93xx_gpio *epg,
541     + struct ep93xx_gpio_irq_chip *eic)
542     {
543     - struct ep93xx_gpio *epg = gpiochip_get_data(gc);
544     - int port = 0;
545     + writeb_relaxed(0, epg->base + eic->irq_offset + EP93XX_INT_EN_OFFSET);
546    
547     - while (port < ARRAY_SIZE(epg->gc) && gc != &epg->gc[port])
548     - port++;
549     + writeb_relaxed(eic->int_type2,
550     + epg->base + eic->irq_offset + EP93XX_INT_TYPE2_OFFSET);
551    
552     - /* This should not happen but is there as a last safeguard */
553     - if (port == ARRAY_SIZE(epg->gc)) {
554     - pr_crit("can't find the GPIO port\n");
555     - return 0;
556     - }
557     + writeb_relaxed(eic->int_type1,
558     + epg->base + eic->irq_offset + EP93XX_INT_TYPE1_OFFSET);
559    
560     - return port;
561     + writeb_relaxed(eic->int_unmasked & eic->int_enabled,
562     + epg->base + eic->irq_offset + EP93XX_INT_EN_OFFSET);
563     }
564    
565     static void ep93xx_gpio_int_debounce(struct gpio_chip *gc,
566     unsigned int offset, bool enable)
567     {
568     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
569     - int port = ep93xx_gpio_port(gc);
570     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
571     int port_mask = BIT(offset);
572    
573     if (enable)
574     - gpio_int_debounce[port] |= port_mask;
575     + eic->int_debounce |= port_mask;
576     else
577     - gpio_int_debounce[port] &= ~port_mask;
578     + eic->int_debounce &= ~port_mask;
579    
580     - writeb(gpio_int_debounce[port],
581     - epg->base + int_debounce_register_offset[port]);
582     + writeb(eic->int_debounce,
583     + epg->base + eic->irq_offset + EP93XX_INT_DEBOUNCE_OFFSET);
584     }
585    
586     static void ep93xx_gpio_ab_irq_handler(struct irq_desc *desc)
587     @@ -122,12 +126,12 @@ static void ep93xx_gpio_ab_irq_handler(struct irq_desc *desc)
588     */
589     stat = readb(epg->base + EP93XX_GPIO_A_INT_STATUS);
590     for_each_set_bit(offset, &stat, 8)
591     - generic_handle_irq(irq_find_mapping(epg->gc[0].irq.domain,
592     + generic_handle_irq(irq_find_mapping(epg->gc[0].gc.irq.domain,
593     offset));
594    
595     stat = readb(epg->base + EP93XX_GPIO_B_INT_STATUS);
596     for_each_set_bit(offset, &stat, 8)
597     - generic_handle_irq(irq_find_mapping(epg->gc[1].irq.domain,
598     + generic_handle_irq(irq_find_mapping(epg->gc[1].gc.irq.domain,
599     offset));
600    
601     chained_irq_exit(irqchip, desc);
602     @@ -153,52 +157,52 @@ static void ep93xx_gpio_f_irq_handler(struct irq_desc *desc)
603     static void ep93xx_gpio_irq_ack(struct irq_data *d)
604     {
605     struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
606     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
607     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
608     - int port = ep93xx_gpio_port(gc);
609     int port_mask = BIT(d->irq & 7);
610    
611     if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH) {
612     - gpio_int_type2[port] ^= port_mask; /* switch edge direction */
613     - ep93xx_gpio_update_int_params(epg, port);
614     + eic->int_type2 ^= port_mask; /* switch edge direction */
615     + ep93xx_gpio_update_int_params(epg, eic);
616     }
617    
618     - writeb(port_mask, epg->base + eoi_register_offset[port]);
619     + writeb(port_mask, epg->base + eic->irq_offset + EP93XX_INT_EOI_OFFSET);
620     }
621    
622     static void ep93xx_gpio_irq_mask_ack(struct irq_data *d)
623     {
624     struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
625     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
626     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
627     - int port = ep93xx_gpio_port(gc);
628     int port_mask = BIT(d->irq & 7);
629    
630     if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH)
631     - gpio_int_type2[port] ^= port_mask; /* switch edge direction */
632     + eic->int_type2 ^= port_mask; /* switch edge direction */
633    
634     - gpio_int_unmasked[port] &= ~port_mask;
635     - ep93xx_gpio_update_int_params(epg, port);
636     + eic->int_unmasked &= ~port_mask;
637     + ep93xx_gpio_update_int_params(epg, eic);
638    
639     - writeb(port_mask, epg->base + eoi_register_offset[port]);
640     + writeb(port_mask, epg->base + eic->irq_offset + EP93XX_INT_EOI_OFFSET);
641     }
642    
643     static void ep93xx_gpio_irq_mask(struct irq_data *d)
644     {
645     struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
646     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
647     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
648     - int port = ep93xx_gpio_port(gc);
649    
650     - gpio_int_unmasked[port] &= ~BIT(d->irq & 7);
651     - ep93xx_gpio_update_int_params(epg, port);
652     + eic->int_unmasked &= ~BIT(d->irq & 7);
653     + ep93xx_gpio_update_int_params(epg, eic);
654     }
655    
656     static void ep93xx_gpio_irq_unmask(struct irq_data *d)
657     {
658     struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
659     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
660     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
661     - int port = ep93xx_gpio_port(gc);
662    
663     - gpio_int_unmasked[port] |= BIT(d->irq & 7);
664     - ep93xx_gpio_update_int_params(epg, port);
665     + eic->int_unmasked |= BIT(d->irq & 7);
666     + ep93xx_gpio_update_int_params(epg, eic);
667     }
668    
669     /*
670     @@ -209,8 +213,8 @@ static void ep93xx_gpio_irq_unmask(struct irq_data *d)
671     static int ep93xx_gpio_irq_type(struct irq_data *d, unsigned int type)
672     {
673     struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
674     + struct ep93xx_gpio_irq_chip *eic = to_ep93xx_gpio_irq_chip(gc);
675     struct ep93xx_gpio *epg = gpiochip_get_data(gc);
676     - int port = ep93xx_gpio_port(gc);
677     int offset = d->irq & 7;
678     int port_mask = BIT(offset);
679     irq_flow_handler_t handler;
680     @@ -219,32 +223,32 @@ static int ep93xx_gpio_irq_type(struct irq_data *d, unsigned int type)
681    
682     switch (type) {
683     case IRQ_TYPE_EDGE_RISING:
684     - gpio_int_type1[port] |= port_mask;
685     - gpio_int_type2[port] |= port_mask;
686     + eic->int_type1 |= port_mask;
687     + eic->int_type2 |= port_mask;
688     handler = handle_edge_irq;
689     break;
690     case IRQ_TYPE_EDGE_FALLING:
691     - gpio_int_type1[port] |= port_mask;
692     - gpio_int_type2[port] &= ~port_mask;
693     + eic->int_type1 |= port_mask;
694     + eic->int_type2 &= ~port_mask;
695     handler = handle_edge_irq;
696     break;
697     case IRQ_TYPE_LEVEL_HIGH:
698     - gpio_int_type1[port] &= ~port_mask;
699     - gpio_int_type2[port] |= port_mask;
700     + eic->int_type1 &= ~port_mask;
701     + eic->int_type2 |= port_mask;
702     handler = handle_level_irq;
703     break;
704     case IRQ_TYPE_LEVEL_LOW:
705     - gpio_int_type1[port] &= ~port_mask;
706     - gpio_int_type2[port] &= ~port_mask;
707     + eic->int_type1 &= ~port_mask;
708     + eic->int_type2 &= ~port_mask;
709     handler = handle_level_irq;
710     break;
711     case IRQ_TYPE_EDGE_BOTH:
712     - gpio_int_type1[port] |= port_mask;
713     + eic->int_type1 |= port_mask;
714     /* set initial polarity based on current input level */
715     if (gc->get(gc, offset))
716     - gpio_int_type2[port] &= ~port_mask; /* falling */
717     + eic->int_type2 &= ~port_mask; /* falling */
718     else
719     - gpio_int_type2[port] |= port_mask; /* rising */
720     + eic->int_type2 |= port_mask; /* rising */
721     handler = handle_edge_irq;
722     break;
723     default:
724     @@ -253,22 +257,13 @@ static int ep93xx_gpio_irq_type(struct irq_data *d, unsigned int type)
725    
726     irq_set_handler_locked(d, handler);
727    
728     - gpio_int_enabled[port] |= port_mask;
729     + eic->int_enabled |= port_mask;
730    
731     - ep93xx_gpio_update_int_params(epg, port);
732     + ep93xx_gpio_update_int_params(epg, eic);
733    
734     return 0;
735     }
736    
737     -static struct irq_chip ep93xx_gpio_irq_chip = {
738     - .name = "GPIO",
739     - .irq_ack = ep93xx_gpio_irq_ack,
740     - .irq_mask_ack = ep93xx_gpio_irq_mask_ack,
741     - .irq_mask = ep93xx_gpio_irq_mask,
742     - .irq_unmask = ep93xx_gpio_irq_unmask,
743     - .irq_set_type = ep93xx_gpio_irq_type,
744     -};
745     -
746     /*************************************************************************
747     * gpiolib interface for EP93xx on-chip GPIOs
748     *************************************************************************/
749     @@ -276,17 +271,19 @@ struct ep93xx_gpio_bank {
750     const char *label;
751     int data;
752     int dir;
753     + int irq;
754     int base;
755     bool has_irq;
756     bool has_hierarchical_irq;
757     unsigned int irq_base;
758     };
759    
760     -#define EP93XX_GPIO_BANK(_label, _data, _dir, _base, _has_irq, _has_hier, _irq_base) \
761     +#define EP93XX_GPIO_BANK(_label, _data, _dir, _irq, _base, _has_irq, _has_hier, _irq_base) \
762     { \
763     .label = _label, \
764     .data = _data, \
765     .dir = _dir, \
766     + .irq = _irq, \
767     .base = _base, \
768     .has_irq = _has_irq, \
769     .has_hierarchical_irq = _has_hier, \
770     @@ -295,16 +292,16 @@ struct ep93xx_gpio_bank {
771    
772     static struct ep93xx_gpio_bank ep93xx_gpio_banks[] = {
773     /* Bank A has 8 IRQs */
774     - EP93XX_GPIO_BANK("A", 0x00, 0x10, 0, true, false, 64),
775     + EP93XX_GPIO_BANK("A", 0x00, 0x10, 0x90, 0, true, false, 64),
776     /* Bank B has 8 IRQs */
777     - EP93XX_GPIO_BANK("B", 0x04, 0x14, 8, true, false, 72),
778     - EP93XX_GPIO_BANK("C", 0x08, 0x18, 40, false, false, 0),
779     - EP93XX_GPIO_BANK("D", 0x0c, 0x1c, 24, false, false, 0),
780     - EP93XX_GPIO_BANK("E", 0x20, 0x24, 32, false, false, 0),
781     + EP93XX_GPIO_BANK("B", 0x04, 0x14, 0xac, 8, true, false, 72),
782     + EP93XX_GPIO_BANK("C", 0x08, 0x18, 0x00, 40, false, false, 0),
783     + EP93XX_GPIO_BANK("D", 0x0c, 0x1c, 0x00, 24, false, false, 0),
784     + EP93XX_GPIO_BANK("E", 0x20, 0x24, 0x00, 32, false, false, 0),
785     /* Bank F has 8 IRQs */
786     - EP93XX_GPIO_BANK("F", 0x30, 0x34, 16, false, true, 0),
787     - EP93XX_GPIO_BANK("G", 0x38, 0x3c, 48, false, false, 0),
788     - EP93XX_GPIO_BANK("H", 0x40, 0x44, 56, false, false, 0),
789     + EP93XX_GPIO_BANK("F", 0x30, 0x34, 0x4c, 16, false, true, 0),
790     + EP93XX_GPIO_BANK("G", 0x38, 0x3c, 0x00, 48, false, false, 0),
791     + EP93XX_GPIO_BANK("H", 0x40, 0x44, 0x00, 56, false, false, 0),
792     };
793    
794     static int ep93xx_gpio_set_config(struct gpio_chip *gc, unsigned offset,
795     @@ -326,13 +323,23 @@ static int ep93xx_gpio_f_to_irq(struct gpio_chip *gc, unsigned offset)
796     return EP93XX_GPIO_F_IRQ_BASE + offset;
797     }
798    
799     -static int ep93xx_gpio_add_bank(struct gpio_chip *gc,
800     +static void ep93xx_init_irq_chip(struct device *dev, struct irq_chip *ic)
801     +{
802     + ic->irq_ack = ep93xx_gpio_irq_ack;
803     + ic->irq_mask_ack = ep93xx_gpio_irq_mask_ack;
804     + ic->irq_mask = ep93xx_gpio_irq_mask;
805     + ic->irq_unmask = ep93xx_gpio_irq_unmask;
806     + ic->irq_set_type = ep93xx_gpio_irq_type;
807     +}
808     +
809     +static int ep93xx_gpio_add_bank(struct ep93xx_gpio_chip *egc,
810     struct platform_device *pdev,
811     struct ep93xx_gpio *epg,
812     struct ep93xx_gpio_bank *bank)
813     {
814     void __iomem *data = epg->base + bank->data;
815     void __iomem *dir = epg->base + bank->dir;
816     + struct gpio_chip *gc = &egc->gc;
817     struct device *dev = &pdev->dev;
818     struct gpio_irq_chip *girq;
819     int err;
820     @@ -346,8 +353,21 @@ static int ep93xx_gpio_add_bank(struct gpio_chip *gc,
821    
822     girq = &gc->irq;
823     if (bank->has_irq || bank->has_hierarchical_irq) {
824     + struct irq_chip *ic;
825     +
826     gc->set_config = ep93xx_gpio_set_config;
827     - girq->chip = &ep93xx_gpio_irq_chip;
828     + egc->eic = devm_kcalloc(dev, 1,
829     + sizeof(*egc->eic),
830     + GFP_KERNEL);
831     + if (!egc->eic)
832     + return -ENOMEM;
833     + egc->eic->irq_offset = bank->irq;
834     + ic = &egc->eic->ic;
835     + ic->name = devm_kasprintf(dev, GFP_KERNEL, "gpio-irq-%s", bank->label);
836     + if (!ic->name)
837     + return -ENOMEM;
838     + ep93xx_init_irq_chip(dev, ic);
839     + girq->chip = ic;
840     }
841    
842     if (bank->has_irq) {
843     @@ -389,7 +409,7 @@ static int ep93xx_gpio_add_bank(struct gpio_chip *gc,
844     gpio_irq = EP93XX_GPIO_F_IRQ_BASE + i;
845     irq_set_chip_data(gpio_irq, &epg->gc[5]);
846     irq_set_chip_and_handler(gpio_irq,
847     - &ep93xx_gpio_irq_chip,
848     + girq->chip,
849     handle_level_irq);
850     irq_clear_status_flags(gpio_irq, IRQ_NOREQUEST);
851     }
852     @@ -415,7 +435,7 @@ static int ep93xx_gpio_probe(struct platform_device *pdev)
853     return PTR_ERR(epg->base);
854    
855     for (i = 0; i < ARRAY_SIZE(ep93xx_gpio_banks); i++) {
856     - struct gpio_chip *gc = &epg->gc[i];
857     + struct ep93xx_gpio_chip *gc = &epg->gc[i];
858     struct ep93xx_gpio_bank *bank = &ep93xx_gpio_banks[i];
859    
860     if (ep93xx_gpio_add_bank(gc, pdev, epg, bank))
861     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
862     index de06ee7d2ad46..fbbe611d4873f 100644
863     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
864     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
865     @@ -1093,8 +1093,8 @@ static void emulated_link_detect(struct dc_link *link)
866     link->type = dc_connection_none;
867     prev_sink = link->local_sink;
868    
869     - if (prev_sink != NULL)
870     - dc_sink_retain(prev_sink);
871     + if (prev_sink)
872     + dc_sink_release(prev_sink);
873    
874     switch (link->connector_signal) {
875     case SIGNAL_TYPE_HDMI_TYPE_A: {
876     @@ -1417,8 +1417,10 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
877     * TODO: check if we still need the S3 mode update workaround.
878     * If yes, put it here.
879     */
880     - if (aconnector->dc_sink)
881     + if (aconnector->dc_sink) {
882     amdgpu_dm_update_freesync_caps(connector, NULL);
883     + dc_sink_release(aconnector->dc_sink);
884     + }
885    
886     aconnector->dc_sink = sink;
887     dc_sink_retain(aconnector->dc_sink);
888     @@ -6463,14 +6465,14 @@ static int dm_force_atomic_commit(struct drm_connector *connector)
889    
890     ret = PTR_ERR_OR_ZERO(conn_state);
891     if (ret)
892     - goto err;
893     + goto out;
894    
895     /* Attach crtc to drm_atomic_state*/
896     crtc_state = drm_atomic_get_crtc_state(state, &disconnected_acrtc->base);
897    
898     ret = PTR_ERR_OR_ZERO(crtc_state);
899     if (ret)
900     - goto err;
901     + goto out;
902    
903     /* force a restore */
904     crtc_state->mode_changed = true;
905     @@ -6480,17 +6482,15 @@ static int dm_force_atomic_commit(struct drm_connector *connector)
906    
907     ret = PTR_ERR_OR_ZERO(plane_state);
908     if (ret)
909     - goto err;
910     -
911     + goto out;
912    
913     /* Call commit internally with the state we just constructed */
914     ret = drm_atomic_commit(state);
915     - if (!ret)
916     - return 0;
917    
918     -err:
919     - DRM_ERROR("Restoring old state failed with %i\n", ret);
920     +out:
921     drm_atomic_state_put(state);
922     + if (ret)
923     + DRM_ERROR("Restoring old state failed with %i\n", ret);
924    
925     return ret;
926     }
927     diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
928     index a6d5beada6634..f63cbbee7b337 100644
929     --- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
930     +++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
931     @@ -826,6 +826,8 @@ enum dcn20_clk_src_array_id {
932     DCN20_CLK_SRC_PLL0,
933     DCN20_CLK_SRC_PLL1,
934     DCN20_CLK_SRC_PLL2,
935     + DCN20_CLK_SRC_PLL3,
936     + DCN20_CLK_SRC_PLL4,
937     DCN20_CLK_SRC_TOTAL_DCN21
938     };
939    
940     @@ -1498,6 +1500,14 @@ static bool construct(
941     dcn21_clock_source_create(ctx, ctx->dc_bios,
942     CLOCK_SOURCE_COMBO_PHY_PLL2,
943     &clk_src_regs[2], false);
944     + pool->base.clock_sources[DCN20_CLK_SRC_PLL3] =
945     + dcn21_clock_source_create(ctx, ctx->dc_bios,
946     + CLOCK_SOURCE_COMBO_PHY_PLL3,
947     + &clk_src_regs[3], false);
948     + pool->base.clock_sources[DCN20_CLK_SRC_PLL4] =
949     + dcn21_clock_source_create(ctx, ctx->dc_bios,
950     + CLOCK_SOURCE_COMBO_PHY_PLL4,
951     + &clk_src_regs[4], false);
952    
953     pool->base.clk_src_count = DCN20_CLK_SRC_TOTAL_DCN21;
954    
955     diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
956     index ae7ae432aa4ab..6bf1425e8b0ca 100644
957     --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
958     +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
959     @@ -665,6 +665,30 @@ static void sun4i_tcon1_mode_set(struct sun4i_tcon *tcon,
960     SUN4I_TCON1_BASIC5_V_SYNC(vsync) |
961     SUN4I_TCON1_BASIC5_H_SYNC(hsync));
962    
963     + /* Setup the polarity of multiple signals */
964     + if (tcon->quirks->polarity_in_ch0) {
965     + val = 0;
966     +
967     + if (mode->flags & DRM_MODE_FLAG_PHSYNC)
968     + val |= SUN4I_TCON0_IO_POL_HSYNC_POSITIVE;
969     +
970     + if (mode->flags & DRM_MODE_FLAG_PVSYNC)
971     + val |= SUN4I_TCON0_IO_POL_VSYNC_POSITIVE;
972     +
973     + regmap_write(tcon->regs, SUN4I_TCON0_IO_POL_REG, val);
974     + } else {
975     + /* according to vendor driver, this bit must be always set */
976     + val = SUN4I_TCON1_IO_POL_UNKNOWN;
977     +
978     + if (mode->flags & DRM_MODE_FLAG_PHSYNC)
979     + val |= SUN4I_TCON1_IO_POL_HSYNC_POSITIVE;
980     +
981     + if (mode->flags & DRM_MODE_FLAG_PVSYNC)
982     + val |= SUN4I_TCON1_IO_POL_VSYNC_POSITIVE;
983     +
984     + regmap_write(tcon->regs, SUN4I_TCON1_IO_POL_REG, val);
985     + }
986     +
987     /* Map output pins to channel 1 */
988     regmap_update_bits(tcon->regs, SUN4I_TCON_GCTL_REG,
989     SUN4I_TCON_GCTL_IOMAP_MASK,
990     @@ -1482,6 +1506,7 @@ static const struct sun4i_tcon_quirks sun8i_a83t_tv_quirks = {
991    
992     static const struct sun4i_tcon_quirks sun8i_r40_tv_quirks = {
993     .has_channel_1 = true,
994     + .polarity_in_ch0 = true,
995     .set_mux = sun8i_r40_tcon_tv_set_mux,
996     };
997    
998     diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
999     index a62ec826ae71e..5bdbaf0847824 100644
1000     --- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
1001     +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
1002     @@ -153,6 +153,11 @@
1003     #define SUN4I_TCON1_BASIC5_V_SYNC(height) (((height) - 1) & 0x3ff)
1004    
1005     #define SUN4I_TCON1_IO_POL_REG 0xf0
1006     +/* there is no documentation about this bit */
1007     +#define SUN4I_TCON1_IO_POL_UNKNOWN BIT(26)
1008     +#define SUN4I_TCON1_IO_POL_HSYNC_POSITIVE BIT(25)
1009     +#define SUN4I_TCON1_IO_POL_VSYNC_POSITIVE BIT(24)
1010     +
1011     #define SUN4I_TCON1_IO_TRI_REG 0xf4
1012    
1013     #define SUN4I_TCON_ECC_FIFO_REG 0xf8
1014     @@ -224,6 +229,7 @@ struct sun4i_tcon_quirks {
1015     bool needs_de_be_mux; /* sun6i needs mux to select backend */
1016     bool needs_edp_reset; /* a80 edp reset needed for tcon0 access */
1017     bool supports_lvds; /* Does the TCON support an LVDS output? */
1018     + bool polarity_in_ch0; /* some tcon1 channels have polarity bits in tcon0 pol register */
1019     u8 dclk_min_div; /* minimum divider for TCON0 DCLK */
1020    
1021     /* callback to handle tcon muxing options */
1022     diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
1023     index 12fe241956213..8f721be26477b 100644
1024     --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
1025     +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
1026     @@ -49,11 +49,9 @@ sun8i_dw_hdmi_mode_valid_h6(struct drm_connector *connector,
1027     {
1028     /*
1029     * Controller support maximum of 594 MHz, which correlates to
1030     - * 4K@60Hz 4:4:4 or RGB. However, for frequencies greater than
1031     - * 340 MHz scrambling has to be enabled. Because scrambling is
1032     - * not yet implemented, just limit to 340 MHz for now.
1033     + * 4K@60Hz 4:4:4 or RGB.
1034     */
1035     - if (mode->clock > 340000)
1036     + if (mode->clock > 594000)
1037     return MODE_CLOCK_HIGH;
1038    
1039     return MODE_OK;
1040     diff --git a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c b/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
1041     index 43643ad317306..a4012ec13d4b3 100644
1042     --- a/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
1043     +++ b/drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c
1044     @@ -104,29 +104,21 @@ static const struct dw_hdmi_mpll_config sun50i_h6_mpll_cfg[] = {
1045    
1046     static const struct dw_hdmi_curr_ctrl sun50i_h6_cur_ctr[] = {
1047     /* pixelclk bpp8 bpp10 bpp12 */
1048     - { 25175000, { 0x0000, 0x0000, 0x0000 }, },
1049     { 27000000, { 0x0012, 0x0000, 0x0000 }, },
1050     - { 59400000, { 0x0008, 0x0008, 0x0008 }, },
1051     - { 72000000, { 0x0008, 0x0008, 0x001b }, },
1052     - { 74250000, { 0x0013, 0x0013, 0x0013 }, },
1053     - { 90000000, { 0x0008, 0x001a, 0x001b }, },
1054     - { 118800000, { 0x001b, 0x001a, 0x001b }, },
1055     - { 144000000, { 0x001b, 0x001a, 0x0034 }, },
1056     - { 180000000, { 0x001b, 0x0033, 0x0034 }, },
1057     - { 216000000, { 0x0036, 0x0033, 0x0034 }, },
1058     - { 237600000, { 0x0036, 0x0033, 0x001b }, },
1059     - { 288000000, { 0x0036, 0x001b, 0x001b }, },
1060     - { 297000000, { 0x0019, 0x001b, 0x0019 }, },
1061     - { 330000000, { 0x0036, 0x001b, 0x001b }, },
1062     - { 594000000, { 0x003f, 0x001b, 0x001b }, },
1063     + { 74250000, { 0x0013, 0x001a, 0x001b }, },
1064     + { 148500000, { 0x0019, 0x0033, 0x0034 }, },
1065     + { 297000000, { 0x0019, 0x001b, 0x001b }, },
1066     + { 594000000, { 0x0010, 0x001b, 0x001b }, },
1067     { ~0UL, { 0x0000, 0x0000, 0x0000 }, }
1068     };
1069    
1070     static const struct dw_hdmi_phy_config sun50i_h6_phy_config[] = {
1071     /*pixelclk symbol term vlev*/
1072     - { 74250000, 0x8009, 0x0004, 0x0232},
1073     - { 148500000, 0x8029, 0x0004, 0x0273},
1074     - { 594000000, 0x8039, 0x0004, 0x014a},
1075     + { 27000000, 0x8009, 0x0007, 0x02b0 },
1076     + { 74250000, 0x8009, 0x0006, 0x022d },
1077     + { 148500000, 0x8029, 0x0006, 0x0270 },
1078     + { 297000000, 0x8039, 0x0005, 0x01ab },
1079     + { 594000000, 0x8029, 0x0000, 0x008a },
1080     { ~0UL, 0x0000, 0x0000, 0x0000}
1081     };
1082    
1083     diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
1084     index 5e5f90810acaf..363f456ea7134 100644
1085     --- a/drivers/gpu/drm/vc4/vc4_plane.c
1086     +++ b/drivers/gpu/drm/vc4/vc4_plane.c
1087     @@ -205,7 +205,7 @@ static void vc4_plane_reset(struct drm_plane *plane)
1088     __drm_atomic_helper_plane_reset(plane, &vc4_state->base);
1089     }
1090    
1091     -static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val)
1092     +static void vc4_dlist_counter_increment(struct vc4_plane_state *vc4_state)
1093     {
1094     if (vc4_state->dlist_count == vc4_state->dlist_size) {
1095     u32 new_size = max(4u, vc4_state->dlist_count * 2);
1096     @@ -220,7 +220,15 @@ static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val)
1097     vc4_state->dlist_size = new_size;
1098     }
1099    
1100     - vc4_state->dlist[vc4_state->dlist_count++] = val;
1101     + vc4_state->dlist_count++;
1102     +}
1103     +
1104     +static void vc4_dlist_write(struct vc4_plane_state *vc4_state, u32 val)
1105     +{
1106     + unsigned int idx = vc4_state->dlist_count;
1107     +
1108     + vc4_dlist_counter_increment(vc4_state);
1109     + vc4_state->dlist[idx] = val;
1110     }
1111    
1112     /* Returns the scl0/scl1 field based on whether the dimensions need to
1113     @@ -871,8 +879,10 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
1114     * be set when calling vc4_plane_allocate_lbm().
1115     */
1116     if (vc4_state->y_scaling[0] != VC4_SCALING_NONE ||
1117     - vc4_state->y_scaling[1] != VC4_SCALING_NONE)
1118     - vc4_state->lbm_offset = vc4_state->dlist_count++;
1119     + vc4_state->y_scaling[1] != VC4_SCALING_NONE) {
1120     + vc4_state->lbm_offset = vc4_state->dlist_count;
1121     + vc4_dlist_counter_increment(vc4_state);
1122     + }
1123    
1124     if (num_planes > 1) {
1125     /* Emit Cb/Cr as channel 0 and Y as channel
1126     diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
1127     index b2634afe066d3..a7977eef2ead5 100644
1128     --- a/drivers/i2c/busses/i2c-stm32f7.c
1129     +++ b/drivers/i2c/busses/i2c-stm32f7.c
1130     @@ -53,6 +53,8 @@
1131     #define STM32F7_I2C_CR1_RXDMAEN BIT(15)
1132     #define STM32F7_I2C_CR1_TXDMAEN BIT(14)
1133     #define STM32F7_I2C_CR1_ANFOFF BIT(12)
1134     +#define STM32F7_I2C_CR1_DNF_MASK GENMASK(11, 8)
1135     +#define STM32F7_I2C_CR1_DNF(n) (((n) & 0xf) << 8)
1136     #define STM32F7_I2C_CR1_ERRIE BIT(7)
1137     #define STM32F7_I2C_CR1_TCIE BIT(6)
1138     #define STM32F7_I2C_CR1_STOPIE BIT(5)
1139     @@ -151,7 +153,7 @@
1140     #define STM32F7_I2C_MAX_SLAVE 0x2
1141    
1142     #define STM32F7_I2C_DNF_DEFAULT 0
1143     -#define STM32F7_I2C_DNF_MAX 16
1144     +#define STM32F7_I2C_DNF_MAX 15
1145    
1146     #define STM32F7_I2C_ANALOG_FILTER_ENABLE 1
1147     #define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN 50 /* ns */
1148     @@ -657,6 +659,13 @@ static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
1149     else
1150     stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
1151     STM32F7_I2C_CR1_ANFOFF);
1152     +
1153     + /* Program the Digital Filter */
1154     + stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
1155     + STM32F7_I2C_CR1_DNF_MASK);
1156     + stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
1157     + STM32F7_I2C_CR1_DNF(i2c_dev->setup.dnf));
1158     +
1159     stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
1160     STM32F7_I2C_CR1_PE);
1161     }
1162     diff --git a/drivers/misc/lkdtm/Makefile b/drivers/misc/lkdtm/Makefile
1163     index c70b3822013f4..30c8ac24635d4 100644
1164     --- a/drivers/misc/lkdtm/Makefile
1165     +++ b/drivers/misc/lkdtm/Makefile
1166     @@ -16,7 +16,7 @@ KCOV_INSTRUMENT_rodata.o := n
1167    
1168     OBJCOPYFLAGS :=
1169     OBJCOPYFLAGS_rodata_objcopy.o := \
1170     - --rename-section .text=.rodata,alloc,readonly,load
1171     + --rename-section .noinstr.text=.rodata,alloc,readonly,load
1172     targets += rodata.o rodata_objcopy.o
1173     $(obj)/rodata_objcopy.o: $(obj)/rodata.o FORCE
1174     $(call if_changed,objcopy)
1175     diff --git a/drivers/misc/lkdtm/rodata.c b/drivers/misc/lkdtm/rodata.c
1176     index 58d180af72cf0..baacb876d1d94 100644
1177     --- a/drivers/misc/lkdtm/rodata.c
1178     +++ b/drivers/misc/lkdtm/rodata.c
1179     @@ -5,7 +5,7 @@
1180     */
1181     #include "lkdtm.h"
1182    
1183     -void notrace lkdtm_rodata_do_nothing(void)
1184     +void noinstr lkdtm_rodata_do_nothing(void)
1185     {
1186     /* Does nothing. We just want an architecture agnostic "return". */
1187     }
1188     diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
1189     index 7428f62408a20..fac80831d5327 100644
1190     --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h
1191     +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
1192     @@ -181,6 +181,8 @@ enum enetc_bdr_type {TX, RX};
1193     #define ENETC_PTCCBSR0(n) (0x1110 + (n) * 8) /* n = 0 to 7*/
1194     #define ENETC_PTCCBSR1(n) (0x1114 + (n) * 8) /* n = 0 to 7*/
1195     #define ENETC_RSSHASH_KEY_SIZE 40
1196     +#define ENETC_PRSSCAPR 0x1404
1197     +#define ENETC_PRSSCAPR_GET_NUM_RSS(val) (BIT((val) & 0xf) * 32)
1198     #define ENETC_PRSSK(n) (0x1410 + (n) * 4) /* n = [0..9] */
1199     #define ENETC_PSIVLANFMR 0x1700
1200     #define ENETC_PSIVLANFMR_VS BIT(0)
1201     diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
1202     index 74847aa644f12..22f70638a4055 100644
1203     --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
1204     +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
1205     @@ -809,6 +809,51 @@ static void enetc_of_put_phy(struct enetc_ndev_priv *priv)
1206     of_node_put(priv->phy_node);
1207     }
1208    
1209     +/* Initialize the entire shared memory for the flow steering entries
1210     + * of this port (PF + VFs)
1211     + */
1212     +static int enetc_init_port_rfs_memory(struct enetc_si *si)
1213     +{
1214     + struct enetc_cmd_rfse rfse = {0};
1215     + struct enetc_hw *hw = &si->hw;
1216     + int num_rfs, i, err = 0;
1217     + u32 val;
1218     +
1219     + val = enetc_port_rd(hw, ENETC_PRFSCAPR);
1220     + num_rfs = ENETC_PRFSCAPR_GET_NUM_RFS(val);
1221     +
1222     + for (i = 0; i < num_rfs; i++) {
1223     + err = enetc_set_fs_entry(si, &rfse, i);
1224     + if (err)
1225     + break;
1226     + }
1227     +
1228     + return err;
1229     +}
1230     +
1231     +static int enetc_init_port_rss_memory(struct enetc_si *si)
1232     +{
1233     + struct enetc_hw *hw = &si->hw;
1234     + int num_rss, err;
1235     + int *rss_table;
1236     + u32 val;
1237     +
1238     + val = enetc_port_rd(hw, ENETC_PRSSCAPR);
1239     + num_rss = ENETC_PRSSCAPR_GET_NUM_RSS(val);
1240     + if (!num_rss)
1241     + return 0;
1242     +
1243     + rss_table = kcalloc(num_rss, sizeof(*rss_table), GFP_KERNEL);
1244     + if (!rss_table)
1245     + return -ENOMEM;
1246     +
1247     + err = enetc_set_rss_table(si, rss_table, num_rss);
1248     +
1249     + kfree(rss_table);
1250     +
1251     + return err;
1252     +}
1253     +
1254     static int enetc_pf_probe(struct pci_dev *pdev,
1255     const struct pci_device_id *ent)
1256     {
1257     @@ -863,6 +908,18 @@ static int enetc_pf_probe(struct pci_dev *pdev,
1258     goto err_alloc_si_res;
1259     }
1260    
1261     + err = enetc_init_port_rfs_memory(si);
1262     + if (err) {
1263     + dev_err(&pdev->dev, "Failed to initialize RFS memory\n");
1264     + goto err_init_port_rfs;
1265     + }
1266     +
1267     + err = enetc_init_port_rss_memory(si);
1268     + if (err) {
1269     + dev_err(&pdev->dev, "Failed to initialize RSS memory\n");
1270     + goto err_init_port_rss;
1271     + }
1272     +
1273     err = enetc_alloc_msix(priv);
1274     if (err) {
1275     dev_err(&pdev->dev, "MSIX alloc failed\n");
1276     @@ -888,6 +945,8 @@ err_reg_netdev:
1277     enetc_mdio_remove(pf);
1278     enetc_of_put_phy(priv);
1279     enetc_free_msix(priv);
1280     +err_init_port_rss:
1281     +err_init_port_rfs:
1282     err_alloc_msix:
1283     enetc_free_si_resources(priv);
1284     err_alloc_si_res:
1285     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
1286     index 6887b7fda6e07..08040cafc06bc 100644
1287     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
1288     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
1289     @@ -8563,12 +8563,19 @@ int hclge_reset_tqp(struct hnae3_handle *handle, u16 queue_id)
1290    
1291     void hclge_reset_vf_queue(struct hclge_vport *vport, u16 queue_id)
1292     {
1293     + struct hnae3_handle *handle = &vport->nic;
1294     struct hclge_dev *hdev = vport->back;
1295     int reset_try_times = 0;
1296     int reset_status;
1297     u16 queue_gid;
1298     int ret;
1299    
1300     + if (queue_id >= handle->kinfo.num_tqps) {
1301     + dev_warn(&hdev->pdev->dev, "Invalid vf queue id(%u)\n",
1302     + queue_id);
1303     + return;
1304     + }
1305     +
1306     queue_gid = hclge_covert_handle_qid_global(&vport->nic, queue_id);
1307    
1308     ret = hclge_send_reset_tqp_cmd(hdev, queue_gid, true);
1309     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
1310     index c3079f436f6d7..0f35eec967ae8 100644
1311     --- a/drivers/net/ethernet/ibm/ibmvnic.c
1312     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
1313     @@ -4595,7 +4595,22 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
1314     complete(&adapter->init_done);
1315     adapter->init_done_rc = -EIO;
1316     }
1317     - ibmvnic_reset(adapter, VNIC_RESET_FAILOVER);
1318     + rc = ibmvnic_reset(adapter, VNIC_RESET_FAILOVER);
1319     + if (rc && rc != -EBUSY) {
1320     + /* We were unable to schedule the failover
1321     + * reset either because the adapter was still
1322     + * probing (eg: during kexec) or we could not
1323     + * allocate memory. Clear the failover_pending
1324     + * flag since no one else will. We ignore
1325     + * EBUSY because it means either FAILOVER reset
1326     + * is already scheduled or the adapter is
1327     + * being removed.
1328     + */
1329     + netdev_err(netdev,
1330     + "Error %ld scheduling failover reset\n",
1331     + rc);
1332     + adapter->failover_pending = false;
1333     + }
1334     break;
1335     case IBMVNIC_CRQ_INIT_COMPLETE:
1336     dev_info(dev, "Partner initialization complete\n");
1337     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
1338     index 1d135b02ea021..52b453b605979 100644
1339     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
1340     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
1341     @@ -332,7 +332,12 @@ static int tc_setup_cbs(struct stmmac_priv *priv,
1342    
1343     priv->plat->tx_queues_cfg[queue].mode_to_use = MTL_QUEUE_AVB;
1344     } else if (!qopt->enable) {
1345     - return stmmac_dma_qmode(priv, priv->ioaddr, queue, MTL_QUEUE_DCB);
1346     + ret = stmmac_dma_qmode(priv, priv->ioaddr, queue,
1347     + MTL_QUEUE_DCB);
1348     + if (ret)
1349     + return ret;
1350     +
1351     + priv->plat->tx_queues_cfg[queue].mode_to_use = MTL_QUEUE_DCB;
1352     }
1353    
1354     /* Port Transmit Rate and Speed Divider */
1355     diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
1356     index 026d996612fbe..781952b686ed2 100644
1357     --- a/drivers/net/wireless/mediatek/mt76/dma.c
1358     +++ b/drivers/net/wireless/mediatek/mt76/dma.c
1359     @@ -452,15 +452,17 @@ static void
1360     mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,
1361     int len, bool more)
1362     {
1363     - struct page *page = virt_to_head_page(data);
1364     - int offset = data - page_address(page);
1365     struct sk_buff *skb = q->rx_head;
1366     struct skb_shared_info *shinfo = skb_shinfo(skb);
1367    
1368     if (shinfo->nr_frags < ARRAY_SIZE(shinfo->frags)) {
1369     - offset += q->buf_offset;
1370     + struct page *page = virt_to_head_page(data);
1371     + int offset = data - page_address(page) + q->buf_offset;
1372     +
1373     skb_add_rx_frag(skb, shinfo->nr_frags, page, offset, len,
1374     q->buf_size);
1375     + } else {
1376     + skb_free_frag(data);
1377     }
1378    
1379     if (more)
1380     diff --git a/drivers/net/xen-netback/rx.c b/drivers/net/xen-netback/rx.c
1381     index 9b62f65b630e4..48e2006f96ce6 100644
1382     --- a/drivers/net/xen-netback/rx.c
1383     +++ b/drivers/net/xen-netback/rx.c
1384     @@ -38,10 +38,15 @@ static bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue)
1385     RING_IDX prod, cons;
1386     struct sk_buff *skb;
1387     int needed;
1388     + unsigned long flags;
1389     +
1390     + spin_lock_irqsave(&queue->rx_queue.lock, flags);
1391    
1392     skb = skb_peek(&queue->rx_queue);
1393     - if (!skb)
1394     + if (!skb) {
1395     + spin_unlock_irqrestore(&queue->rx_queue.lock, flags);
1396     return false;
1397     + }
1398    
1399     needed = DIV_ROUND_UP(skb->len, XEN_PAGE_SIZE);
1400     if (skb_is_gso(skb))
1401     @@ -49,6 +54,8 @@ static bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue)
1402     if (skb->sw_hash)
1403     needed++;
1404    
1405     + spin_unlock_irqrestore(&queue->rx_queue.lock, flags);
1406     +
1407     do {
1408     prod = queue->rx.sring->req_prod;
1409     cons = queue->rx.req_cons;
1410     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
1411     index 434d3f21f0e13..19e375b59f407 100644
1412     --- a/drivers/nvme/host/pci.c
1413     +++ b/drivers/nvme/host/pci.c
1414     @@ -3147,6 +3147,8 @@ static const struct pci_device_id nvme_id_table[] = {
1415     { PCI_DEVICE(0x144d, 0xa822), /* Samsung PM1725a */
1416     .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |
1417     NVME_QUIRK_IGNORE_DEV_SUBNQN, },
1418     + { PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */
1419     + .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
1420     { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */
1421     .driver_data = NVME_QUIRK_LIGHTNVM, },
1422     { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */
1423     diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
1424     index a44a2ec332872..63a530a3d9feb 100644
1425     --- a/drivers/platform/x86/hp-wmi.c
1426     +++ b/drivers/platform/x86/hp-wmi.c
1427     @@ -32,6 +32,10 @@ MODULE_LICENSE("GPL");
1428     MODULE_ALIAS("wmi:95F24279-4D7B-4334-9387-ACCDC67EF61C");
1429     MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
1430    
1431     +static int enable_tablet_mode_sw = -1;
1432     +module_param(enable_tablet_mode_sw, int, 0444);
1433     +MODULE_PARM_DESC(enable_tablet_mode_sw, "Enable SW_TABLET_MODE reporting (-1=auto, 0=no, 1=yes)");
1434     +
1435     #define HPWMI_EVENT_GUID "95F24279-4D7B-4334-9387-ACCDC67EF61C"
1436     #define HPWMI_BIOS_GUID "5FB7F034-2C63-45e9-BE91-3D44E2C707E4"
1437    
1438     @@ -654,10 +658,12 @@ static int __init hp_wmi_input_setup(void)
1439     }
1440    
1441     /* Tablet mode */
1442     - val = hp_wmi_hw_state(HPWMI_TABLET_MASK);
1443     - if (!(val < 0)) {
1444     - __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
1445     - input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val);
1446     + if (enable_tablet_mode_sw > 0) {
1447     + val = hp_wmi_hw_state(HPWMI_TABLET_MASK);
1448     + if (val >= 0) {
1449     + __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
1450     + input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val);
1451     + }
1452     }
1453    
1454     err = sparse_keymap_setup(hp_wmi_input_dev, hp_wmi_keymap, NULL);
1455     diff --git a/drivers/usb/dwc3/ulpi.c b/drivers/usb/dwc3/ulpi.c
1456     index bb8271531da70..ffe3440abb74c 100644
1457     --- a/drivers/usb/dwc3/ulpi.c
1458     +++ b/drivers/usb/dwc3/ulpi.c
1459     @@ -7,6 +7,8 @@
1460     * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
1461     */
1462    
1463     +#include <linux/delay.h>
1464     +#include <linux/time64.h>
1465     #include <linux/ulpi/regs.h>
1466    
1467     #include "core.h"
1468     @@ -17,12 +19,22 @@
1469     DWC3_GUSB2PHYACC_ADDR(ULPI_ACCESS_EXTENDED) | \
1470     DWC3_GUSB2PHYACC_EXTEND_ADDR(a) : DWC3_GUSB2PHYACC_ADDR(a))
1471    
1472     -static int dwc3_ulpi_busyloop(struct dwc3 *dwc)
1473     +#define DWC3_ULPI_BASE_DELAY DIV_ROUND_UP(NSEC_PER_SEC, 60000000L)
1474     +
1475     +static int dwc3_ulpi_busyloop(struct dwc3 *dwc, u8 addr, bool read)
1476     {
1477     - unsigned count = 1000;
1478     + unsigned long ns = 5L * DWC3_ULPI_BASE_DELAY;
1479     + unsigned int count = 1000;
1480     u32 reg;
1481    
1482     + if (addr >= ULPI_EXT_VENDOR_SPECIFIC)
1483     + ns += DWC3_ULPI_BASE_DELAY;
1484     +
1485     + if (read)
1486     + ns += DWC3_ULPI_BASE_DELAY;
1487     +
1488     while (count--) {
1489     + ndelay(ns);
1490     reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYACC(0));
1491     if (reg & DWC3_GUSB2PHYACC_DONE)
1492     return 0;
1493     @@ -47,7 +59,7 @@ static int dwc3_ulpi_read(struct device *dev, u8 addr)
1494     reg = DWC3_GUSB2PHYACC_NEWREGREQ | DWC3_ULPI_ADDR(addr);
1495     dwc3_writel(dwc->regs, DWC3_GUSB2PHYACC(0), reg);
1496    
1497     - ret = dwc3_ulpi_busyloop(dwc);
1498     + ret = dwc3_ulpi_busyloop(dwc, addr, true);
1499     if (ret)
1500     return ret;
1501    
1502     @@ -71,7 +83,7 @@ static int dwc3_ulpi_write(struct device *dev, u8 addr, u8 val)
1503     reg |= DWC3_GUSB2PHYACC_WRITE | val;
1504     dwc3_writel(dwc->regs, DWC3_GUSB2PHYACC(0), reg);
1505    
1506     - return dwc3_ulpi_busyloop(dwc);
1507     + return dwc3_ulpi_busyloop(dwc, addr, false);
1508     }
1509    
1510     static const struct ulpi_ops dwc3_ulpi_ops = {
1511     diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h
1512     index a9bb5f91082d3..88516a8a9f932 100644
1513     --- a/drivers/xen/xenbus/xenbus.h
1514     +++ b/drivers/xen/xenbus/xenbus.h
1515     @@ -115,7 +115,6 @@ int xenbus_probe_node(struct xen_bus_type *bus,
1516     const char *type,
1517     const char *nodename);
1518     int xenbus_probe_devices(struct xen_bus_type *bus);
1519     -void xenbus_probe(void);
1520    
1521     void xenbus_dev_changed(const char *node, struct xen_bus_type *bus);
1522    
1523     diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
1524     index 786494bb7f20b..652894d619677 100644
1525     --- a/drivers/xen/xenbus/xenbus_probe.c
1526     +++ b/drivers/xen/xenbus/xenbus_probe.c
1527     @@ -683,7 +683,7 @@ void unregister_xenstore_notifier(struct notifier_block *nb)
1528     }
1529     EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
1530    
1531     -void xenbus_probe(void)
1532     +static void xenbus_probe(void)
1533     {
1534     xenstored_ready = 1;
1535    
1536     diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
1537     index ec5eca5a96f41..7b758d623b5bd 100644
1538     --- a/fs/overlayfs/copy_up.c
1539     +++ b/fs/overlayfs/copy_up.c
1540     @@ -76,6 +76,14 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new)
1541    
1542     if (ovl_is_private_xattr(name))
1543     continue;
1544     +
1545     + error = security_inode_copy_up_xattr(name);
1546     + if (error < 0 && error != -EOPNOTSUPP)
1547     + break;
1548     + if (error == 1) {
1549     + error = 0;
1550     + continue; /* Discard */
1551     + }
1552     retry:
1553     size = vfs_getxattr(old, name, value, value_size);
1554     if (size == -ERANGE)
1555     @@ -99,13 +107,6 @@ retry:
1556     goto retry;
1557     }
1558    
1559     - error = security_inode_copy_up_xattr(name);
1560     - if (error < 0 && error != -EOPNOTSUPP)
1561     - break;
1562     - if (error == 1) {
1563     - error = 0;
1564     - continue; /* Discard */
1565     - }
1566     error = vfs_setxattr(new, name, value, size, 0);
1567     if (error)
1568     break;
1569     diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
1570     index bb980721502dd..56b55397a7a00 100644
1571     --- a/fs/overlayfs/inode.c
1572     +++ b/fs/overlayfs/inode.c
1573     @@ -337,7 +337,9 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
1574     goto out;
1575    
1576     if (!value && !upperdentry) {
1577     + old_cred = ovl_override_creds(dentry->d_sb);
1578     err = vfs_getxattr(realdentry, name, NULL, 0);
1579     + revert_creds(old_cred);
1580     if (err < 0)
1581     goto out_drop_write;
1582     }
1583     diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
1584     index d6b724beb304c..87cf9b1d2eca3 100644
1585     --- a/fs/overlayfs/super.c
1586     +++ b/fs/overlayfs/super.c
1587     @@ -79,7 +79,7 @@ static void ovl_dentry_release(struct dentry *dentry)
1588     static struct dentry *ovl_d_real(struct dentry *dentry,
1589     const struct inode *inode)
1590     {
1591     - struct dentry *real;
1592     + struct dentry *real = NULL, *lower;
1593    
1594     /* It's an overlay file */
1595     if (inode && d_inode(dentry) == inode)
1596     @@ -98,9 +98,10 @@ static struct dentry *ovl_d_real(struct dentry *dentry,
1597     if (real && !inode && ovl_has_upperdata(d_inode(dentry)))
1598     return real;
1599    
1600     - real = ovl_dentry_lowerdata(dentry);
1601     - if (!real)
1602     + lower = ovl_dentry_lowerdata(dentry);
1603     + if (!lower)
1604     goto bug;
1605     + real = lower;
1606    
1607     /* Handle recursion */
1608     real = d_real(real, inode);
1609     @@ -108,8 +109,10 @@ static struct dentry *ovl_d_real(struct dentry *dentry,
1610     if (!inode || inode == d_inode(real))
1611     return real;
1612     bug:
1613     - WARN(1, "ovl_d_real(%pd4, %s:%lu): real dentry not found\n", dentry,
1614     - inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0);
1615     + WARN(1, "%s(%pd4, %s:%lu): real dentry (%p/%lu) not found\n",
1616     + __func__, dentry, inode ? inode->i_sb->s_id : "NULL",
1617     + inode ? inode->i_ino : 0, real,
1618     + real && d_inode(real) ? d_inode(real)->i_ino : 0);
1619     return dentry;
1620     }
1621    
1622     diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h
1623     index d1779d442aa51..66397ed10acb7 100644
1624     --- a/include/asm-generic/sections.h
1625     +++ b/include/asm-generic/sections.h
1626     @@ -53,6 +53,9 @@ extern char __ctors_start[], __ctors_end[];
1627     /* Start and end of .opd section - used for function descriptors. */
1628     extern char __start_opd[], __end_opd[];
1629    
1630     +/* Start and end of instrumentation protected text section */
1631     +extern char __noinstr_text_start[], __noinstr_text_end[];
1632     +
1633     extern __visible const void __nosave_begin, __nosave_end;
1634    
1635     /* Function descriptor handling (if any). Override in asm/sections.h */
1636     diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
1637     index 130f16cc0b86d..2267b7c763c64 100644
1638     --- a/include/asm-generic/vmlinux.lds.h
1639     +++ b/include/asm-generic/vmlinux.lds.h
1640     @@ -396,7 +396,7 @@
1641     } \
1642     \
1643     /* Built-in firmware blobs */ \
1644     - .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \
1645     + .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) ALIGN(8) { \
1646     __start_builtin_fw = .; \
1647     KEEP(*(.builtin_fw)) \
1648     __end_builtin_fw = .; \
1649     @@ -510,6 +510,15 @@
1650     #define RODATA RO_DATA_SECTION(4096)
1651     #define RO_DATA(align) RO_DATA_SECTION(align)
1652    
1653     +/*
1654     + * Non-instrumentable text section
1655     + */
1656     +#define NOINSTR_TEXT \
1657     + ALIGN_FUNCTION(); \
1658     + __noinstr_text_start = .; \
1659     + *(.noinstr.text) \
1660     + __noinstr_text_end = .;
1661     +
1662     /*
1663     * .text section. Map to function alignment to avoid address changes
1664     * during second ld run in second ld pass when generating System.map
1665     @@ -524,6 +533,7 @@
1666     *(TEXT_MAIN .text.fixup) \
1667     *(.text.unlikely .text.unlikely.*) \
1668     *(.text.unknown .text.unknown.*) \
1669     + NOINSTR_TEXT \
1670     *(.text..refcount) \
1671     *(.ref.text) \
1672     MEM_KEEP(init.text*) \
1673     diff --git a/include/linux/compiler.h b/include/linux/compiler.h
1674     index f164a9b12813f..9446e8fbe55c5 100644
1675     --- a/include/linux/compiler.h
1676     +++ b/include/linux/compiler.h
1677     @@ -134,12 +134,65 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
1678     /* Annotate a C jump table to allow objtool to follow the code flow */
1679     #define __annotate_jump_table __section(.rodata..c_jump_table)
1680    
1681     +#ifdef CONFIG_DEBUG_ENTRY
1682     +/* Begin/end of an instrumentation safe region */
1683     +#define instrumentation_begin() ({ \
1684     + asm volatile("%c0:\n\t" \
1685     + ".pushsection .discard.instr_begin\n\t" \
1686     + ".long %c0b - .\n\t" \
1687     + ".popsection\n\t" : : "i" (__COUNTER__)); \
1688     +})
1689     +
1690     +/*
1691     + * Because instrumentation_{begin,end}() can nest, objtool validation considers
1692     + * _begin() a +1 and _end() a -1 and computes a sum over the instructions.
1693     + * When the value is greater than 0, we consider instrumentation allowed.
1694     + *
1695     + * There is a problem with code like:
1696     + *
1697     + * noinstr void foo()
1698     + * {
1699     + * instrumentation_begin();
1700     + * ...
1701     + * if (cond) {
1702     + * instrumentation_begin();
1703     + * ...
1704     + * instrumentation_end();
1705     + * }
1706     + * bar();
1707     + * instrumentation_end();
1708     + * }
1709     + *
1710     + * If instrumentation_end() would be an empty label, like all the other
1711     + * annotations, the inner _end(), which is at the end of a conditional block,
1712     + * would land on the instruction after the block.
1713     + *
1714     + * If we then consider the sum of the !cond path, we'll see that the call to
1715     + * bar() is with a 0-value, even though, we meant it to happen with a positive
1716     + * value.
1717     + *
1718     + * To avoid this, have _end() be a NOP instruction, this ensures it will be
1719     + * part of the condition block and does not escape.
1720     + */
1721     +#define instrumentation_end() ({ \
1722     + asm volatile("%c0: nop\n\t" \
1723     + ".pushsection .discard.instr_end\n\t" \
1724     + ".long %c0b - .\n\t" \
1725     + ".popsection\n\t" : : "i" (__COUNTER__)); \
1726     +})
1727     +#endif /* CONFIG_DEBUG_ENTRY */
1728     +
1729     #else
1730     #define annotate_reachable()
1731     #define annotate_unreachable()
1732     #define __annotate_jump_table
1733     #endif
1734    
1735     +#ifndef instrumentation_begin
1736     +#define instrumentation_begin() do { } while(0)
1737     +#define instrumentation_end() do { } while(0)
1738     +#endif
1739     +
1740     #ifndef ASM_UNREACHABLE
1741     # define ASM_UNREACHABLE
1742     #endif
1743     diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
1744     index 77433633572e4..b94d08d055ff5 100644
1745     --- a/include/linux/compiler_types.h
1746     +++ b/include/linux/compiler_types.h
1747     @@ -118,6 +118,10 @@ struct ftrace_likely_data {
1748     #define notrace __attribute__((__no_instrument_function__))
1749     #endif
1750    
1751     +/* Section for code which can't be instrumented at all */
1752     +#define noinstr \
1753     + noinline notrace __attribute((__section__(".noinstr.text")))
1754     +
1755     /*
1756     * it doesn't make sense on ARM (currently the only user of __naked)
1757     * to trace naked functions because then mcount is called without
1758     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
1759     index ec3081ab04c01..3e0692fd6282c 100644
1760     --- a/include/linux/netdevice.h
1761     +++ b/include/linux/netdevice.h
1762     @@ -4044,6 +4044,7 @@ static inline void netif_tx_disable(struct net_device *dev)
1763    
1764     local_bh_disable();
1765     cpu = smp_processor_id();
1766     + spin_lock(&dev->tx_global_lock);
1767     for (i = 0; i < dev->num_tx_queues; i++) {
1768     struct netdev_queue *txq = netdev_get_tx_queue(dev, i);
1769    
1770     @@ -4051,6 +4052,7 @@ static inline void netif_tx_disable(struct net_device *dev)
1771     netif_tx_stop_queue(txq);
1772     __netif_tx_unlock(txq);
1773     }
1774     + spin_unlock(&dev->tx_global_lock);
1775     local_bh_enable();
1776     }
1777    
1778     diff --git a/include/linux/uio.h b/include/linux/uio.h
1779     index ab5f523bc0df9..b74d292b9960e 100644
1780     --- a/include/linux/uio.h
1781     +++ b/include/linux/uio.h
1782     @@ -261,7 +261,13 @@ static inline void iov_iter_reexpand(struct iov_iter *i, size_t count)
1783     {
1784     i->count = count;
1785     }
1786     -size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csump, struct iov_iter *i);
1787     +
1788     +struct csum_state {
1789     + __wsum csum;
1790     + size_t off;
1791     +};
1792     +
1793     +size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csstate, struct iov_iter *i);
1794     size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i);
1795     bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i);
1796     size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp,
1797     diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h
1798     index fe9a9fa2ebc45..14d47ed4114fd 100644
1799     --- a/include/xen/xenbus.h
1800     +++ b/include/xen/xenbus.h
1801     @@ -187,8 +187,6 @@ void xs_suspend_cancel(void);
1802    
1803     struct work_struct;
1804    
1805     -void xenbus_probe(void);
1806     -
1807     #define XENBUS_IS_ERR_READ(str) ({ \
1808     if (!IS_ERR(str) && strlen(str) == 0) { \
1809     kfree(str); \
1810     diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c
1811     index 173e983619d77..fba2ade28fb3a 100644
1812     --- a/kernel/bpf/stackmap.c
1813     +++ b/kernel/bpf/stackmap.c
1814     @@ -112,6 +112,8 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)
1815    
1816     /* hash table size must be power of 2 */
1817     n_buckets = roundup_pow_of_two(attr->max_entries);
1818     + if (!n_buckets)
1819     + return ERR_PTR(-E2BIG);
1820    
1821     cost = n_buckets * sizeof(struct stack_map_bucket *) + sizeof(*smap);
1822     cost += n_buckets * (value_size + sizeof(struct stack_map_bucket));
1823     diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
1824     index 35faf082a709c..37db8eba149ac 100644
1825     --- a/kernel/cgroup/cgroup.c
1826     +++ b/kernel/cgroup/cgroup.c
1827     @@ -3627,6 +3627,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
1828     {
1829     struct psi_trigger *new;
1830     struct cgroup *cgrp;
1831     + struct psi_group *psi;
1832    
1833     cgrp = cgroup_kn_lock_live(of->kn, false);
1834     if (!cgrp)
1835     @@ -3635,7 +3636,8 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
1836     cgroup_get(cgrp);
1837     cgroup_kn_unlock(of->kn);
1838    
1839     - new = psi_trigger_create(&cgrp->psi, buf, nbytes, res);
1840     + psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
1841     + new = psi_trigger_create(psi, buf, nbytes, res);
1842     if (IS_ERR(new)) {
1843     cgroup_put(cgrp);
1844     return PTR_ERR(new);
1845     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
1846     index 67af28f03cf41..1a75610f5f57b 100644
1847     --- a/kernel/trace/trace.c
1848     +++ b/kernel/trace/trace.c
1849     @@ -2498,7 +2498,7 @@ trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1850     (entry = this_cpu_read(trace_buffered_event))) {
1851     /* Try to use the per cpu buffer first */
1852     val = this_cpu_inc_return(trace_buffered_event_cnt);
1853     - if (val == 1) {
1854     + if ((len < (PAGE_SIZE - sizeof(*entry))) && val == 1) {
1855     trace_event_setup(entry, type, flags, pc);
1856     entry->array[0] = len;
1857     return entry;
1858     diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
1859     index 309b2b3c5349e..e31ee325dad16 100644
1860     --- a/kernel/trace/trace_events.c
1861     +++ b/kernel/trace/trace_events.c
1862     @@ -1107,7 +1107,8 @@ system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
1863     mutex_lock(&event_mutex);
1864     list_for_each_entry(file, &tr->events, list) {
1865     call = file->event_call;
1866     - if (!trace_event_name(call) || !call->class || !call->class->reg)
1867     + if ((call->flags & TRACE_EVENT_FL_IGNORE_ENABLE) ||
1868     + !trace_event_name(call) || !call->class || !call->class->reg)
1869     continue;
1870    
1871     if (system && strcmp(call->class->system, system->name) != 0)
1872     diff --git a/lib/iov_iter.c b/lib/iov_iter.c
1873     index 639d5e7014c1e..9ea6f7bb83095 100644
1874     --- a/lib/iov_iter.c
1875     +++ b/lib/iov_iter.c
1876     @@ -570,12 +570,13 @@ static __wsum csum_and_memcpy(void *to, const void *from, size_t len,
1877     }
1878    
1879     static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes,
1880     - __wsum *csum, struct iov_iter *i)
1881     + struct csum_state *csstate,
1882     + struct iov_iter *i)
1883     {
1884     struct pipe_inode_info *pipe = i->pipe;
1885     + __wsum sum = csstate->csum;
1886     + size_t off = csstate->off;
1887     size_t n, r;
1888     - size_t off = 0;
1889     - __wsum sum = *csum;
1890     int idx;
1891    
1892     if (!sanity(i))
1893     @@ -596,7 +597,8 @@ static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes,
1894     addr += chunk;
1895     }
1896     i->count -= bytes;
1897     - *csum = sum;
1898     + csstate->csum = sum;
1899     + csstate->off = off;
1900     return bytes;
1901     }
1902    
1903     @@ -1484,18 +1486,19 @@ bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum,
1904     }
1905     EXPORT_SYMBOL(csum_and_copy_from_iter_full);
1906    
1907     -size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csump,
1908     +size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate,
1909     struct iov_iter *i)
1910     {
1911     + struct csum_state *csstate = _csstate;
1912     const char *from = addr;
1913     - __wsum *csum = csump;
1914     __wsum sum, next;
1915     - size_t off = 0;
1916     + size_t off;
1917    
1918     if (unlikely(iov_iter_is_pipe(i)))
1919     - return csum_and_copy_to_pipe_iter(addr, bytes, csum, i);
1920     + return csum_and_copy_to_pipe_iter(addr, bytes, _csstate, i);
1921    
1922     - sum = *csum;
1923     + sum = csstate->csum;
1924     + off = csstate->off;
1925     if (unlikely(iov_iter_is_discard(i))) {
1926     WARN_ON(1); /* for now */
1927     return 0;
1928     @@ -1524,7 +1527,8 @@ size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csump,
1929     off += v.iov_len;
1930     })
1931     )
1932     - *csum = sum;
1933     + csstate->csum = sum;
1934     + csstate->off = off;
1935     return bytes;
1936     }
1937     EXPORT_SYMBOL(csum_and_copy_to_iter);
1938     diff --git a/net/core/datagram.c b/net/core/datagram.c
1939     index 189ad4c73a3fe..b0488f30f2c4e 100644
1940     --- a/net/core/datagram.c
1941     +++ b/net/core/datagram.c
1942     @@ -700,8 +700,16 @@ static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
1943     struct iov_iter *to, int len,
1944     __wsum *csump)
1945     {
1946     - return __skb_datagram_iter(skb, offset, to, len, true,
1947     - csum_and_copy_to_iter, csump);
1948     + struct csum_state csdata = { .csum = *csump };
1949     + int ret;
1950     +
1951     + ret = __skb_datagram_iter(skb, offset, to, len, true,
1952     + csum_and_copy_to_iter, &csdata);
1953     + if (ret)
1954     + return ret;
1955     +
1956     + *csump = csdata.csum;
1957     + return 0;
1958     }
1959    
1960     /**
1961     diff --git a/net/core/dev.c b/net/core/dev.c
1962     index ec66d13d2bdad..d90e8bd87df83 100644
1963     --- a/net/core/dev.c
1964     +++ b/net/core/dev.c
1965     @@ -5275,10 +5275,11 @@ static void gro_normal_list(struct napi_struct *napi)
1966     /* Queue one GRO_NORMAL SKB up for list processing. If batch size exceeded,
1967     * pass the whole batch up to the stack.
1968     */
1969     -static void gro_normal_one(struct napi_struct *napi, struct sk_buff *skb)
1970     +static void gro_normal_one(struct napi_struct *napi, struct sk_buff *skb, int segs)
1971     {
1972     list_add_tail(&skb->list, &napi->rx_list);
1973     - if (++napi->rx_count >= gro_normal_batch)
1974     + napi->rx_count += segs;
1975     + if (napi->rx_count >= gro_normal_batch)
1976     gro_normal_list(napi);
1977     }
1978    
1979     @@ -5317,7 +5318,7 @@ static int napi_gro_complete(struct napi_struct *napi, struct sk_buff *skb)
1980     }
1981    
1982     out:
1983     - gro_normal_one(napi, skb);
1984     + gro_normal_one(napi, skb, NAPI_GRO_CB(skb)->count);
1985     return NET_RX_SUCCESS;
1986     }
1987    
1988     @@ -5608,7 +5609,7 @@ static gro_result_t napi_skb_finish(struct napi_struct *napi,
1989     {
1990     switch (ret) {
1991     case GRO_NORMAL:
1992     - gro_normal_one(napi, skb);
1993     + gro_normal_one(napi, skb, 1);
1994     break;
1995    
1996     case GRO_DROP:
1997     @@ -5696,7 +5697,7 @@ static gro_result_t napi_frags_finish(struct napi_struct *napi,
1998     __skb_push(skb, ETH_HLEN);
1999     skb->protocol = eth_type_trans(skb, skb->dev);
2000     if (ret == GRO_NORMAL)
2001     - gro_normal_one(napi, skb);
2002     + gro_normal_one(napi, skb, 1);
2003     break;
2004    
2005     case GRO_DROP:
2006     diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
2007     index 0f7f38c295799..70e6fc2edd304 100644
2008     --- a/net/dsa/dsa2.c
2009     +++ b/net/dsa/dsa2.c
2010     @@ -399,18 +399,21 @@ static int dsa_switch_setup(struct dsa_switch *ds)
2011     ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
2012     if (!ds->slave_mii_bus) {
2013     err = -ENOMEM;
2014     - goto unregister_notifier;
2015     + goto teardown;
2016     }
2017    
2018     dsa_slave_mii_bus_init(ds);
2019    
2020     err = mdiobus_register(ds->slave_mii_bus);
2021     if (err < 0)
2022     - goto unregister_notifier;
2023     + goto teardown;
2024     }
2025    
2026     return 0;
2027    
2028     +teardown:
2029     + if (ds->ops->teardown)
2030     + ds->ops->teardown(ds);
2031     unregister_notifier:
2032     dsa_switch_unregister_notifier(ds);
2033     unregister_devlink:
2034     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
2035     index 200cdad3ff3ab..9a40312b1f161 100644
2036     --- a/net/netfilter/nf_conntrack_core.c
2037     +++ b/net/netfilter/nf_conntrack_core.c
2038     @@ -1091,7 +1091,8 @@ nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
2039     * Let nf_ct_resolve_clash() deal with this later.
2040     */
2041     if (nf_ct_tuple_equal(&ignored_conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple,
2042     - &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple))
2043     + &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple) &&
2044     + nf_ct_zone_equal(ct, zone, IP_CT_DIR_ORIGINAL))
2045     continue;
2046    
2047     NF_CT_STAT_INC_ATOMIC(net, found);
2048     diff --git a/net/netfilter/nf_flow_table_core.c b/net/netfilter/nf_flow_table_core.c
2049     index 128245efe84ab..e05e5df803d68 100644
2050     --- a/net/netfilter/nf_flow_table_core.c
2051     +++ b/net/netfilter/nf_flow_table_core.c
2052     @@ -354,7 +354,7 @@ static int nf_flow_nat_port_tcp(struct sk_buff *skb, unsigned int thoff,
2053     return -1;
2054    
2055     tcph = (void *)(skb_network_header(skb) + thoff);
2056     - inet_proto_csum_replace2(&tcph->check, skb, port, new_port, true);
2057     + inet_proto_csum_replace2(&tcph->check, skb, port, new_port, false);
2058    
2059     return 0;
2060     }
2061     @@ -371,7 +371,7 @@ static int nf_flow_nat_port_udp(struct sk_buff *skb, unsigned int thoff,
2062     udph = (void *)(skb_network_header(skb) + thoff);
2063     if (udph->check || skb->ip_summed == CHECKSUM_PARTIAL) {
2064     inet_proto_csum_replace2(&udph->check, skb, port,
2065     - new_port, true);
2066     + new_port, false);
2067     if (!udph->check)
2068     udph->check = CSUM_MANGLED_0;
2069     }
2070     diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
2071     index 40216c2a7dd72..373ea0e49f12d 100644
2072     --- a/net/netfilter/nf_tables_api.c
2073     +++ b/net/netfilter/nf_tables_api.c
2074     @@ -7696,6 +7696,17 @@ int __nft_release_basechain(struct nft_ctx *ctx)
2075     }
2076     EXPORT_SYMBOL_GPL(__nft_release_basechain);
2077    
2078     +static void __nft_release_hooks(struct net *net)
2079     +{
2080     + struct nft_table *table;
2081     + struct nft_chain *chain;
2082     +
2083     + list_for_each_entry(table, &net->nft.tables, list) {
2084     + list_for_each_entry(chain, &table->chains, list)
2085     + nf_tables_unregister_hook(net, table, chain);
2086     + }
2087     +}
2088     +
2089     static void __nft_release_tables(struct net *net)
2090     {
2091     struct nft_flowtable *flowtable, *nf;
2092     @@ -7711,10 +7722,6 @@ static void __nft_release_tables(struct net *net)
2093    
2094     list_for_each_entry_safe(table, nt, &net->nft.tables, list) {
2095     ctx.family = table->family;
2096     -
2097     - list_for_each_entry(chain, &table->chains, list)
2098     - nf_tables_unregister_hook(net, table, chain);
2099     - /* No packets are walking on these chains anymore. */
2100     ctx.table = table;
2101     list_for_each_entry(chain, &table->chains, list) {
2102     ctx.chain = chain;
2103     @@ -7762,6 +7769,11 @@ static int __net_init nf_tables_init_net(struct net *net)
2104     return 0;
2105     }
2106    
2107     +static void __net_exit nf_tables_pre_exit_net(struct net *net)
2108     +{
2109     + __nft_release_hooks(net);
2110     +}
2111     +
2112     static void __net_exit nf_tables_exit_net(struct net *net)
2113     {
2114     mutex_lock(&net->nft.commit_mutex);
2115     @@ -7774,8 +7786,9 @@ static void __net_exit nf_tables_exit_net(struct net *net)
2116     }
2117    
2118     static struct pernet_operations nf_tables_net_ops = {
2119     - .init = nf_tables_init_net,
2120     - .exit = nf_tables_exit_net,
2121     + .init = nf_tables_init_net,
2122     + .pre_exit = nf_tables_pre_exit_net,
2123     + .exit = nf_tables_exit_net,
2124     };
2125    
2126     static int __init nf_tables_module_init(void)
2127     diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
2128     index 6c2582a197667..3469b60736103 100644
2129     --- a/net/netfilter/xt_recent.c
2130     +++ b/net/netfilter/xt_recent.c
2131     @@ -152,7 +152,8 @@ static void recent_entry_remove(struct recent_table *t, struct recent_entry *e)
2132     /*
2133     * Drop entries with timestamps older then 'time'.
2134     */
2135     -static void recent_entry_reap(struct recent_table *t, unsigned long time)
2136     +static void recent_entry_reap(struct recent_table *t, unsigned long time,
2137     + struct recent_entry *working, bool update)
2138     {
2139     struct recent_entry *e;
2140    
2141     @@ -161,6 +162,12 @@ static void recent_entry_reap(struct recent_table *t, unsigned long time)
2142     */
2143     e = list_entry(t->lru_list.next, struct recent_entry, lru_list);
2144    
2145     + /*
2146     + * Do not reap the entry which are going to be updated.
2147     + */
2148     + if (e == working && update)
2149     + return;
2150     +
2151     /*
2152     * The last time stamp is the most recent.
2153     */
2154     @@ -303,7 +310,8 @@ recent_mt(const struct sk_buff *skb, struct xt_action_param *par)
2155    
2156     /* info->seconds must be non-zero */
2157     if (info->check_set & XT_RECENT_REAP)
2158     - recent_entry_reap(t, time);
2159     + recent_entry_reap(t, time, e,
2160     + info->check_set & XT_RECENT_UPDATE && ret);
2161     }
2162    
2163     if (info->check_set & XT_RECENT_SET ||
2164     diff --git a/net/qrtr/tun.c b/net/qrtr/tun.c
2165     index e35869e81766e..997af345ce374 100644
2166     --- a/net/qrtr/tun.c
2167     +++ b/net/qrtr/tun.c
2168     @@ -80,6 +80,12 @@ static ssize_t qrtr_tun_write_iter(struct kiocb *iocb, struct iov_iter *from)
2169     ssize_t ret;
2170     void *kbuf;
2171    
2172     + if (!len)
2173     + return -EINVAL;
2174     +
2175     + if (len > KMALLOC_MAX_SIZE)
2176     + return -ENOMEM;
2177     +
2178     kbuf = kzalloc(len, GFP_KERNEL);
2179     if (!kbuf)
2180     return -ENOMEM;
2181     diff --git a/net/rds/rdma.c b/net/rds/rdma.c
2182     index 8e10f954a22fe..1c42a600fe7fa 100644
2183     --- a/net/rds/rdma.c
2184     +++ b/net/rds/rdma.c
2185     @@ -532,6 +532,9 @@ int rds_rdma_extra_size(struct rds_rdma_args *args,
2186     if (args->nr_local == 0)
2187     return -EINVAL;
2188    
2189     + if (args->nr_local > UIO_MAXIOV)
2190     + return -EMSGSIZE;
2191     +
2192     iov->iov = kcalloc(args->nr_local,
2193     sizeof(struct rds_iovec),
2194     GFP_KERNEL);
2195     diff --git a/net/rxrpc/call_object.c b/net/rxrpc/call_object.c
2196     index 38a46167523fa..f8233bc76c0ea 100644
2197     --- a/net/rxrpc/call_object.c
2198     +++ b/net/rxrpc/call_object.c
2199     @@ -507,8 +507,6 @@ void rxrpc_release_call(struct rxrpc_sock *rx, struct rxrpc_call *call)
2200     rxrpc_disconnect_call(call);
2201     if (call->security)
2202     call->security->free_call_crypto(call);
2203     -
2204     - rxrpc_cleanup_ring(call);
2205     _leave("");
2206     }
2207    
2208     diff --git a/net/sctp/proc.c b/net/sctp/proc.c
2209     index f7da88ae20a57..982a87b3e11f8 100644
2210     --- a/net/sctp/proc.c
2211     +++ b/net/sctp/proc.c
2212     @@ -215,6 +215,12 @@ static void sctp_transport_seq_stop(struct seq_file *seq, void *v)
2213     {
2214     struct sctp_ht_iter *iter = seq->private;
2215    
2216     + if (v && v != SEQ_START_TOKEN) {
2217     + struct sctp_transport *transport = v;
2218     +
2219     + sctp_transport_put(transport);
2220     + }
2221     +
2222     sctp_transport_walk_stop(&iter->hti);
2223     }
2224    
2225     @@ -222,6 +228,12 @@ static void *sctp_transport_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2226     {
2227     struct sctp_ht_iter *iter = seq->private;
2228    
2229     + if (v && v != SEQ_START_TOKEN) {
2230     + struct sctp_transport *transport = v;
2231     +
2232     + sctp_transport_put(transport);
2233     + }
2234     +
2235     ++*pos;
2236    
2237     return sctp_transport_get_next(seq_file_net(seq), &iter->hti);
2238     @@ -277,8 +289,6 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
2239     sk->sk_rcvbuf);
2240     seq_printf(seq, "\n");
2241    
2242     - sctp_transport_put(transport);
2243     -
2244     return 0;
2245     }
2246    
2247     @@ -354,8 +364,6 @@ static int sctp_remaddr_seq_show(struct seq_file *seq, void *v)
2248     seq_printf(seq, "\n");
2249     }
2250    
2251     - sctp_transport_put(transport);
2252     -
2253     return 0;
2254     }
2255    
2256     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
2257     index 3a074a03d3820..5d323574d04fe 100644
2258     --- a/net/vmw_vsock/af_vsock.c
2259     +++ b/net/vmw_vsock/af_vsock.c
2260     @@ -808,10 +808,12 @@ static int vsock_shutdown(struct socket *sock, int mode)
2261     */
2262    
2263     sk = sock->sk;
2264     +
2265     + lock_sock(sk);
2266     if (sock->state == SS_UNCONNECTED) {
2267     err = -ENOTCONN;
2268     if (sk->sk_type == SOCK_STREAM)
2269     - return err;
2270     + goto out;
2271     } else {
2272     sock->state = SS_DISCONNECTING;
2273     err = 0;
2274     @@ -820,10 +822,8 @@ static int vsock_shutdown(struct socket *sock, int mode)
2275     /* Receive and send shutdowns are treated alike. */
2276     mode = mode & (RCV_SHUTDOWN | SEND_SHUTDOWN);
2277     if (mode) {
2278     - lock_sock(sk);
2279     sk->sk_shutdown |= mode;
2280     sk->sk_state_change(sk);
2281     - release_sock(sk);
2282    
2283     if (sk->sk_type == SOCK_STREAM) {
2284     sock_reset_flag(sk, SOCK_DONE);
2285     @@ -831,6 +831,8 @@ static int vsock_shutdown(struct socket *sock, int mode)
2286     }
2287     }
2288    
2289     +out:
2290     + release_sock(sk);
2291     return err;
2292     }
2293    
2294     @@ -1099,7 +1101,6 @@ static void vsock_connect_timeout(struct work_struct *work)
2295     {
2296     struct sock *sk;
2297     struct vsock_sock *vsk;
2298     - int cancel = 0;
2299    
2300     vsk = container_of(work, struct vsock_sock, connect_work.work);
2301     sk = sk_vsock(vsk);
2302     @@ -1110,11 +1111,9 @@ static void vsock_connect_timeout(struct work_struct *work)
2303     sk->sk_state = TCP_CLOSE;
2304     sk->sk_err = ETIMEDOUT;
2305     sk->sk_error_report(sk);
2306     - cancel = 1;
2307     + vsock_transport_cancel_pkt(vsk);
2308     }
2309     release_sock(sk);
2310     - if (cancel)
2311     - vsock_transport_cancel_pkt(vsk);
2312    
2313     sock_put(sk);
2314     }
2315     diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
2316     index 463cefc1e5ae2..a3c57c048cbd8 100644
2317     --- a/net/vmw_vsock/hyperv_transport.c
2318     +++ b/net/vmw_vsock/hyperv_transport.c
2319     @@ -464,14 +464,10 @@ static void hvs_shutdown_lock_held(struct hvsock *hvs, int mode)
2320    
2321     static int hvs_shutdown(struct vsock_sock *vsk, int mode)
2322     {
2323     - struct sock *sk = sk_vsock(vsk);
2324     -
2325     if (!(mode & SEND_SHUTDOWN))
2326     return 0;
2327    
2328     - lock_sock(sk);
2329     hvs_shutdown_lock_held(vsk->trans, mode);
2330     - release_sock(sk);
2331     return 0;
2332     }
2333    
2334     diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
2335     index efbb521bff135..dde16a033a09d 100644
2336     --- a/net/vmw_vsock/virtio_transport_common.c
2337     +++ b/net/vmw_vsock/virtio_transport_common.c
2338     @@ -1100,10 +1100,10 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
2339    
2340     vsk = vsock_sk(sk);
2341    
2342     - space_available = virtio_transport_space_update(sk, pkt);
2343     -
2344     lock_sock(sk);
2345    
2346     + space_available = virtio_transport_space_update(sk, pkt);
2347     +
2348     /* Update CID in case it has changed after a transport reset event */
2349     vsk->local_addr.svm_cid = dst.svm_cid;
2350    
2351     diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
2352     index 52f1152c98389..13cda6aa26880 100644
2353     --- a/scripts/mod/modpost.c
2354     +++ b/scripts/mod/modpost.c
2355     @@ -960,7 +960,7 @@ static void check_section(const char *modname, struct elf_info *elf,
2356    
2357     #define DATA_SECTIONS ".data", ".data.rel"
2358     #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
2359     - ".kprobes.text", ".cpuidle.text"
2360     + ".kprobes.text", ".cpuidle.text", ".noinstr.text"
2361     #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
2362     ".fixup", ".entry.text", ".exception.text", ".text.*", \
2363     ".coldtext"
2364     diff --git a/security/commoncap.c b/security/commoncap.c
2365     index 0ca31c8bc0b13..28a6939bcc4e5 100644
2366     --- a/security/commoncap.c
2367     +++ b/security/commoncap.c
2368     @@ -371,10 +371,11 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer,
2369     {
2370     int size, ret;
2371     kuid_t kroot;
2372     + u32 nsmagic, magic;
2373     uid_t root, mappedroot;
2374     char *tmpbuf = NULL;
2375     struct vfs_cap_data *cap;
2376     - struct vfs_ns_cap_data *nscap;
2377     + struct vfs_ns_cap_data *nscap = NULL;
2378     struct dentry *dentry;
2379     struct user_namespace *fs_ns;
2380    
2381     @@ -396,46 +397,61 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer,
2382     fs_ns = inode->i_sb->s_user_ns;
2383     cap = (struct vfs_cap_data *) tmpbuf;
2384     if (is_v2header((size_t) ret, cap)) {
2385     - /* If this is sizeof(vfs_cap_data) then we're ok with the
2386     - * on-disk value, so return that. */
2387     - if (alloc)
2388     - *buffer = tmpbuf;
2389     - else
2390     - kfree(tmpbuf);
2391     - return ret;
2392     - } else if (!is_v3header((size_t) ret, cap)) {
2393     - kfree(tmpbuf);
2394     - return -EINVAL;
2395     + root = 0;
2396     + } else if (is_v3header((size_t) ret, cap)) {
2397     + nscap = (struct vfs_ns_cap_data *) tmpbuf;
2398     + root = le32_to_cpu(nscap->rootid);
2399     + } else {
2400     + size = -EINVAL;
2401     + goto out_free;
2402     }
2403    
2404     - nscap = (struct vfs_ns_cap_data *) tmpbuf;
2405     - root = le32_to_cpu(nscap->rootid);
2406     kroot = make_kuid(fs_ns, root);
2407    
2408     /* If the root kuid maps to a valid uid in current ns, then return
2409     * this as a nscap. */
2410     mappedroot = from_kuid(current_user_ns(), kroot);
2411     if (mappedroot != (uid_t)-1 && mappedroot != (uid_t)0) {
2412     + size = sizeof(struct vfs_ns_cap_data);
2413     if (alloc) {
2414     - *buffer = tmpbuf;
2415     + if (!nscap) {
2416     + /* v2 -> v3 conversion */
2417     + nscap = kzalloc(size, GFP_ATOMIC);
2418     + if (!nscap) {
2419     + size = -ENOMEM;
2420     + goto out_free;
2421     + }
2422     + nsmagic = VFS_CAP_REVISION_3;
2423     + magic = le32_to_cpu(cap->magic_etc);
2424     + if (magic & VFS_CAP_FLAGS_EFFECTIVE)
2425     + nsmagic |= VFS_CAP_FLAGS_EFFECTIVE;
2426     + memcpy(&nscap->data, &cap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
2427     + nscap->magic_etc = cpu_to_le32(nsmagic);
2428     + } else {
2429     + /* use allocated v3 buffer */
2430     + tmpbuf = NULL;
2431     + }
2432     nscap->rootid = cpu_to_le32(mappedroot);
2433     - } else
2434     - kfree(tmpbuf);
2435     - return size;
2436     + *buffer = nscap;
2437     + }
2438     + goto out_free;
2439     }
2440    
2441     if (!rootid_owns_currentns(kroot)) {
2442     - kfree(tmpbuf);
2443     - return -EOPNOTSUPP;
2444     + size = -EOVERFLOW;
2445     + goto out_free;
2446     }
2447    
2448     /* This comes from a parent namespace. Return as a v2 capability */
2449     size = sizeof(struct vfs_cap_data);
2450     if (alloc) {
2451     - *buffer = kmalloc(size, GFP_ATOMIC);
2452     - if (*buffer) {
2453     - struct vfs_cap_data *cap = *buffer;
2454     - __le32 nsmagic, magic;
2455     + if (nscap) {
2456     + /* v3 -> v2 conversion */
2457     + cap = kzalloc(size, GFP_ATOMIC);
2458     + if (!cap) {
2459     + size = -ENOMEM;
2460     + goto out_free;
2461     + }
2462     magic = VFS_CAP_REVISION_2;
2463     nsmagic = le32_to_cpu(nscap->magic_etc);
2464     if (nsmagic & VFS_CAP_FLAGS_EFFECTIVE)
2465     @@ -443,9 +459,12 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer,
2466     memcpy(&cap->data, &nscap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
2467     cap->magic_etc = cpu_to_le32(magic);
2468     } else {
2469     - size = -ENOMEM;
2470     + /* use unconverted v2 */
2471     + tmpbuf = NULL;
2472     }
2473     + *buffer = cap;
2474     }
2475     +out_free:
2476     kfree(tmpbuf);
2477     return size;
2478     }
2479     diff --git a/tools/testing/selftests/networking/timestamping/txtimestamp.c b/tools/testing/selftests/networking/timestamping/txtimestamp.c
2480     index 7e386be471201..2fce2e8f47f55 100644
2481     --- a/tools/testing/selftests/networking/timestamping/txtimestamp.c
2482     +++ b/tools/testing/selftests/networking/timestamping/txtimestamp.c
2483     @@ -26,6 +26,7 @@
2484     #include <inttypes.h>
2485     #include <linux/errqueue.h>
2486     #include <linux/if_ether.h>
2487     +#include <linux/if_packet.h>
2488     #include <linux/ipv6.h>
2489     #include <linux/net_tstamp.h>
2490     #include <netdb.h>
2491     @@ -34,7 +35,6 @@
2492     #include <netinet/ip.h>
2493     #include <netinet/udp.h>
2494     #include <netinet/tcp.h>
2495     -#include <netpacket/packet.h>
2496     #include <poll.h>
2497     #include <stdarg.h>
2498     #include <stdbool.h>
2499     @@ -396,12 +396,12 @@ static void do_test(int family, unsigned int report_opt)
2500     total_len = cfg_payload_len;
2501     if (cfg_use_pf_packet || cfg_proto == SOCK_RAW) {
2502     total_len += sizeof(struct udphdr);
2503     - if (cfg_use_pf_packet || cfg_ipproto == IPPROTO_RAW)
2504     + if (cfg_use_pf_packet || cfg_ipproto == IPPROTO_RAW) {
2505     if (family == PF_INET)
2506     total_len += sizeof(struct iphdr);
2507     else
2508     total_len += sizeof(struct ipv6hdr);
2509     -
2510     + }
2511     /* special case, only rawv6_sendmsg:
2512     * pass proto in sin6_port if not connected
2513     * also see ANK comment in net/ipv4/raw.c