From: Sasha Levin Date: Sun, 14 Feb 2021 16:44:56 +0000 (-0500) Subject: Fixes for 5.10 X-Git-Tag: v5.4.99~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=252690f5163d23193d390640c3128bbce84238e0;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/arm-dts-lpc32xx-revert-set-default-clock-rate-of-hcl.patch b/queue-5.10/arm-dts-lpc32xx-revert-set-default-clock-rate-of-hcl.patch new file mode 100644 index 00000000000..519ee729a30 --- /dev/null +++ b/queue-5.10/arm-dts-lpc32xx-revert-set-default-clock-rate-of-hcl.patch @@ -0,0 +1,47 @@ +From bc3a0b11c4c7b44999c447370dc3eeab80c32fd7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 3 Feb 2021 10:03:20 +0100 +Subject: ARM: dts: lpc32xx: Revert set default clock rate of HCLK PLL + +From: Alexandre Belloni + +[ Upstream commit 5638159f6d93b99ec9743ac7f65563fca3cf413d ] + +This reverts commit c17e9377aa81664d94b4f2102559fcf2a01ec8e7. + +The lpc32xx clock driver is not able to actually change the PLL rate as +this would require reparenting ARM_CLK, DDRAM_CLK, PERIPH_CLK to SYSCLK, +then stop the PLL, update the register, restart the PLL and wait for the +PLL to lock and finally reparent ARM_CLK, DDRAM_CLK, PERIPH_CLK to HCLK +PLL. + +Currently, the HCLK driver simply updates the registers but this has no +real effect and all the clock rate calculation end up being wrong. This is +especially annoying for the peripheral (e.g. UARTs, I2C, SPI). + +Signed-off-by: Alexandre Belloni +Tested-by: Gregory CLEMENT +Link: https://lore.kernel.org/r/20210203090320.GA3760268@piout.net' +Signed-off-by: Arnd Bergmann +Signed-off-by: Sasha Levin +--- + arch/arm/boot/dts/lpc32xx.dtsi | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/arch/arm/boot/dts/lpc32xx.dtsi b/arch/arm/boot/dts/lpc32xx.dtsi +index 7b7ec7b1217b8..824393e1bcfb7 100644 +--- a/arch/arm/boot/dts/lpc32xx.dtsi ++++ b/arch/arm/boot/dts/lpc32xx.dtsi +@@ -329,9 +329,6 @@ + + clocks = <&xtal_32k>, <&xtal>; + clock-names = "xtal_32k", "xtal"; +- +- assigned-clocks = <&clk LPC32XX_CLK_HCLK_PLL>; +- assigned-clock-rates = <208000000>; + }; + }; + +-- +2.27.0 + diff --git a/queue-5.10/arm-ensure-the-signal-page-contains-defined-contents.patch b/queue-5.10/arm-ensure-the-signal-page-contains-defined-contents.patch new file mode 100644 index 00000000000..761fc60a583 --- /dev/null +++ b/queue-5.10/arm-ensure-the-signal-page-contains-defined-contents.patch @@ -0,0 +1,54 @@ +From 77efa8fcd810302e5cbb4cba1c5ac74c4fcaf30b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 29 Jan 2021 10:19:07 +0000 +Subject: ARM: ensure the signal page contains defined contents + +From: Russell King + +[ Upstream commit 9c698bff66ab4914bb3d71da7dc6112519bde23e ] + +Ensure that the signal page contains our poison instruction to increase +the protection against ROP attacks and also contains well defined +contents. + +Acked-by: Will Deacon +Signed-off-by: Russell King +Signed-off-by: Sasha Levin +--- + arch/arm/kernel/signal.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c +index 585edbfccf6df..2f81d3af5f9af 100644 +--- a/arch/arm/kernel/signal.c ++++ b/arch/arm/kernel/signal.c +@@ -693,18 +693,20 @@ struct page *get_signal_page(void) + + addr = page_address(page); + ++ /* Poison the entire page */ ++ memset32(addr, __opcode_to_mem_arm(0xe7fddef1), ++ PAGE_SIZE / sizeof(u32)); ++ + /* Give the signal return code some randomness */ + offset = 0x200 + (get_random_int() & 0x7fc); + signal_return_offset = offset; + +- /* +- * Copy signal return handlers into the vector page, and +- * set sigreturn to be a pointer to these. +- */ ++ /* Copy signal return handlers into the page */ + memcpy(addr + offset, sigreturn_codes, sizeof(sigreturn_codes)); + +- ptr = (unsigned long)addr + offset; +- flush_icache_range(ptr, ptr + sizeof(sigreturn_codes)); ++ /* Flush out all instructions in this page */ ++ ptr = (unsigned long)addr; ++ flush_icache_range(ptr, ptr + PAGE_SIZE); + + return page; + } +-- +2.27.0 + diff --git a/queue-5.10/arm-kexec-fix-oops-after-tlb-are-invalidated.patch b/queue-5.10/arm-kexec-fix-oops-after-tlb-are-invalidated.patch new file mode 100644 index 00000000000..13deb47dc67 --- /dev/null +++ b/queue-5.10/arm-kexec-fix-oops-after-tlb-are-invalidated.patch @@ -0,0 +1,204 @@ +From 003e9fc041c9098d78cbaaf99059b4cf2a70b3e6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 1 Feb 2021 19:40:01 +0000 +Subject: ARM: kexec: fix oops after TLB are invalidated + +From: Russell King + +[ Upstream commit 4d62e81b60d4025e2dfcd5ea531cc1394ce9226f ] + +Giancarlo Ferrari reports the following oops while trying to use kexec: + + Unable to handle kernel paging request at virtual address 80112f38 + pgd = fd7ef03e + [80112f38] *pgd=0001141e(bad) + Internal error: Oops: 80d [#1] PREEMPT SMP ARM + ... + +This is caused by machine_kexec() trying to set the kernel text to be +read/write, so it can poke values into the relocation code before +copying it - and an interrupt occuring which changes the page tables. +The subsequent writes then hit read-only sections that trigger a +data abort resulting in the above oops. + +Fix this by copying the relocation code, and then writing the variables +into the destination, thereby avoiding the need to make the kernel text +read/write. + +Reported-by: Giancarlo Ferrari +Tested-by: Giancarlo Ferrari +Signed-off-by: Russell King +Signed-off-by: Sasha Levin +--- + arch/arm/include/asm/kexec-internal.h | 12 +++++++++ + arch/arm/kernel/asm-offsets.c | 5 ++++ + arch/arm/kernel/machine_kexec.c | 20 ++++++-------- + arch/arm/kernel/relocate_kernel.S | 38 ++++++++------------------- + 4 files changed, 36 insertions(+), 39 deletions(-) + create mode 100644 arch/arm/include/asm/kexec-internal.h + +diff --git a/arch/arm/include/asm/kexec-internal.h b/arch/arm/include/asm/kexec-internal.h +new file mode 100644 +index 0000000000000..ecc2322db7aa1 +--- /dev/null ++++ b/arch/arm/include/asm/kexec-internal.h +@@ -0,0 +1,12 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _ARM_KEXEC_INTERNAL_H ++#define _ARM_KEXEC_INTERNAL_H ++ ++struct kexec_relocate_data { ++ unsigned long kexec_start_address; ++ unsigned long kexec_indirection_page; ++ unsigned long kexec_mach_type; ++ unsigned long kexec_r2; ++}; ++ ++#endif +diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c +index a1570c8bab25a..be8050b0c3dfb 100644 +--- a/arch/arm/kernel/asm-offsets.c ++++ b/arch/arm/kernel/asm-offsets.c +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -170,5 +171,9 @@ int main(void) + DEFINE(MPU_RGN_PRBAR, offsetof(struct mpu_rgn, prbar)); + DEFINE(MPU_RGN_PRLAR, offsetof(struct mpu_rgn, prlar)); + #endif ++ DEFINE(KEXEC_START_ADDR, offsetof(struct kexec_relocate_data, kexec_start_address)); ++ DEFINE(KEXEC_INDIR_PAGE, offsetof(struct kexec_relocate_data, kexec_indirection_page)); ++ DEFINE(KEXEC_MACH_TYPE, offsetof(struct kexec_relocate_data, kexec_mach_type)); ++ DEFINE(KEXEC_R2, offsetof(struct kexec_relocate_data, kexec_r2)); + return 0; + } +diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c +index 5d84ad333f050..2b09dad7935eb 100644 +--- a/arch/arm/kernel/machine_kexec.c ++++ b/arch/arm/kernel/machine_kexec.c +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -22,11 +23,6 @@ + extern void relocate_new_kernel(void); + extern const unsigned int relocate_new_kernel_size; + +-extern unsigned long kexec_start_address; +-extern unsigned long kexec_indirection_page; +-extern unsigned long kexec_mach_type; +-extern unsigned long kexec_boot_atags; +- + static atomic_t waiting_for_crash_ipi; + + /* +@@ -159,6 +155,7 @@ void (*kexec_reinit)(void); + void machine_kexec(struct kimage *image) + { + unsigned long page_list, reboot_entry_phys; ++ struct kexec_relocate_data *data; + void (*reboot_entry)(void); + void *reboot_code_buffer; + +@@ -174,18 +171,17 @@ void machine_kexec(struct kimage *image) + + reboot_code_buffer = page_address(image->control_code_page); + +- /* Prepare parameters for reboot_code_buffer*/ +- set_kernel_text_rw(); +- kexec_start_address = image->start; +- kexec_indirection_page = page_list; +- kexec_mach_type = machine_arch_type; +- kexec_boot_atags = image->arch.kernel_r2; +- + /* copy our kernel relocation code to the control code page */ + reboot_entry = fncpy(reboot_code_buffer, + &relocate_new_kernel, + relocate_new_kernel_size); + ++ data = reboot_code_buffer + relocate_new_kernel_size; ++ data->kexec_start_address = image->start; ++ data->kexec_indirection_page = page_list; ++ data->kexec_mach_type = machine_arch_type; ++ data->kexec_r2 = image->arch.kernel_r2; ++ + /* get the identity mapping physical address for the reboot code */ + reboot_entry_phys = virt_to_idmap(reboot_entry); + +diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S +index 72a08786e16eb..218d524360fcd 100644 +--- a/arch/arm/kernel/relocate_kernel.S ++++ b/arch/arm/kernel/relocate_kernel.S +@@ -5,14 +5,16 @@ + + #include + #include ++#include + #include + + .align 3 /* not needed for this code, but keeps fncpy() happy */ + + ENTRY(relocate_new_kernel) + +- ldr r0,kexec_indirection_page +- ldr r1,kexec_start_address ++ adr r7, relocate_new_kernel_end ++ ldr r0, [r7, #KEXEC_INDIR_PAGE] ++ ldr r1, [r7, #KEXEC_START_ADDR] + + /* + * If there is no indirection page (we are doing crashdumps) +@@ -57,34 +59,16 @@ ENTRY(relocate_new_kernel) + + 2: + /* Jump to relocated kernel */ +- mov lr,r1 +- mov r0,#0 +- ldr r1,kexec_mach_type +- ldr r2,kexec_boot_atags +- ARM( ret lr ) +- THUMB( bx lr ) +- +- .align +- +- .globl kexec_start_address +-kexec_start_address: +- .long 0x0 +- +- .globl kexec_indirection_page +-kexec_indirection_page: +- .long 0x0 +- +- .globl kexec_mach_type +-kexec_mach_type: +- .long 0x0 +- +- /* phy addr of the atags for the new kernel */ +- .globl kexec_boot_atags +-kexec_boot_atags: +- .long 0x0 ++ mov lr, r1 ++ mov r0, #0 ++ ldr r1, [r7, #KEXEC_MACH_TYPE] ++ ldr r2, [r7, #KEXEC_R2] ++ ARM( ret lr ) ++ THUMB( bx lr ) + + ENDPROC(relocate_new_kernel) + ++ .align 3 + relocate_new_kernel_end: + + .globl relocate_new_kernel_size +-- +2.27.0 + diff --git a/queue-5.10/arm-omap2-fix-suspcious-rcu-usage-splats-for-omap_en.patch b/queue-5.10/arm-omap2-fix-suspcious-rcu-usage-splats-for-omap_en.patch new file mode 100644 index 00000000000..8a512aa50c2 --- /dev/null +++ b/queue-5.10/arm-omap2-fix-suspcious-rcu-usage-splats-for-omap_en.patch @@ -0,0 +1,106 @@ +From 4f73f12fb13cbc4404d15170a81947dff6dfa11f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 10 Jan 2021 21:09:11 +0200 +Subject: ARM: OMAP2+: Fix suspcious RCU usage splats for + omap_enter_idle_coupled + +From: Tony Lindgren + +[ Upstream commit 06862d789ddde8a99c1e579e934ca17c15a84755 ] + +We get suspcious RCU usage splats with cpuidle in several places in +omap_enter_idle_coupled() with the kernel debug options enabled: + +RCU used illegally from extended quiescent state! +... +(_raw_spin_lock_irqsave) +(omap_enter_idle_coupled+0x17c/0x2d8) +(omap_enter_idle_coupled) +(cpuidle_enter_state) +(cpuidle_enter_state_coupled) +(cpuidle_enter) + +Let's use RCU_NONIDLE to suppress these splats. Things got changed around +with commit 1098582a0f6c ("sched,idle,rcu: Push rcu_idle deeper into the +idle path") that started triggering these warnings. + +For the tick_broadcast related calls, ideally we'd just switch over to +using CPUIDLE_FLAG_TIMER_STOP for omap_enter_idle_coupled() to have the +generic cpuidle code handle the tick_broadcast related calls for us and +then just drop the tick_broadcast calls here. + +But we're currently missing the call in the common cpuidle code for +tick_broadcast_enable() that CPU1 hotplug needs as described in earlier +commit 50d6b3cf9403 ("ARM: OMAP2+: fix lack of timer interrupts on CPU1 +after hotplug"). + +Cc: Daniel Lezcano +Cc: Paul E. McKenney +Cc: Russell King +Acked-by: Paul E. McKenney +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +--- + arch/arm/mach-omap2/cpuidle44xx.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c +index c8d317fafe2ea..de37027ad7587 100644 +--- a/arch/arm/mach-omap2/cpuidle44xx.c ++++ b/arch/arm/mach-omap2/cpuidle44xx.c +@@ -151,10 +151,10 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, + (cx->mpu_logic_state == PWRDM_POWER_OFF); + + /* Enter broadcast mode for periodic timers */ +- tick_broadcast_enable(); ++ RCU_NONIDLE(tick_broadcast_enable()); + + /* Enter broadcast mode for one-shot timers */ +- tick_broadcast_enter(); ++ RCU_NONIDLE(tick_broadcast_enter()); + + /* + * Call idle CPU PM enter notifier chain so that +@@ -166,7 +166,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, + + if (dev->cpu == 0) { + pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); +- omap_set_pwrdm_state(mpu_pd, cx->mpu_state); ++ RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); + + /* + * Call idle CPU cluster PM enter notifier chain +@@ -178,7 +178,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, + index = 0; + cx = state_ptr + index; + pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); +- omap_set_pwrdm_state(mpu_pd, cx->mpu_state); ++ RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); + mpuss_can_lose_context = 0; + } + } +@@ -194,9 +194,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, + mpuss_can_lose_context) + gic_dist_disable(); + +- clkdm_deny_idle(cpu_clkdm[1]); +- omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON); +- clkdm_allow_idle(cpu_clkdm[1]); ++ RCU_NONIDLE(clkdm_deny_idle(cpu_clkdm[1])); ++ RCU_NONIDLE(omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON)); ++ RCU_NONIDLE(clkdm_allow_idle(cpu_clkdm[1])); + + if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) && + mpuss_can_lose_context) { +@@ -222,7 +222,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, + cpu_pm_exit(); + + cpu_pm_out: +- tick_broadcast_exit(); ++ RCU_NONIDLE(tick_broadcast_exit()); + + fail: + cpuidle_coupled_parallel_barrier(dev, &abort_barrier); +-- +2.27.0 + diff --git a/queue-5.10/arm64-dts-qcom-sdm845-reserve-lpass-clocks-in-gcc.patch b/queue-5.10/arm64-dts-qcom-sdm845-reserve-lpass-clocks-in-gcc.patch new file mode 100644 index 00000000000..523b09f5eba --- /dev/null +++ b/queue-5.10/arm64-dts-qcom-sdm845-reserve-lpass-clocks-in-gcc.patch @@ -0,0 +1,61 @@ +From 403a85f095839c6c1d0170115b8b578ddb3e277a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 21 Dec 2020 16:11:03 -0800 +Subject: arm64: dts: qcom: sdm845: Reserve LPASS clocks in gcc + +From: Bjorn Andersson + +[ Upstream commit 93f2a11580a9732c1d90f9e01a7e9facc825658f ] + +The GCC_LPASS_Q6_AXI_CLK and GCC_LPASS_SWAY_CLK clocks may not be +touched on a typical UEFI based SDM845 device, but when the kernel is +built with CONFIG_SDM_LPASSCC_845 this happens, unless they are marked +as protected-clocks in the DT. + +This was done for the MTP and the Pocophone, but not for DB845c and the +Lenovo Yoga C630 - causing these to fail to boot if the LPASS clock +controller is enabled (which it typically isn't). + +Tested-by: Vinod Koul #on db845c +Reviewed-by: Vinod Koul +Link: https://lore.kernel.org/r/20201222001103.3112306-1-bjorn.andersson@linaro.org +Signed-off-by: Bjorn Andersson +Signed-off-by: Sasha Levin +--- + arch/arm64/boot/dts/qcom/sdm845-db845c.dts | 4 +++- + arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts +index 7cc236575ee20..c0b93813ea9ac 100644 +--- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts ++++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts +@@ -415,7 +415,9 @@ + &gcc { + protected-clocks = , + , +- ; ++ , ++ , ++ ; + }; + + &gpu { +diff --git a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts +index d70aae77a6e84..888dc23a530e6 100644 +--- a/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts ++++ b/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts +@@ -245,7 +245,9 @@ + &gcc { + protected-clocks = , + , +- ; ++ , ++ , ++ ; + }; + + &gpu { +-- +2.27.0 + diff --git a/queue-5.10/arm64-dts-rockchip-disable-display-for-nanopi-r2s.patch b/queue-5.10/arm64-dts-rockchip-disable-display-for-nanopi-r2s.patch new file mode 100644 index 00000000000..b2de3d162cc --- /dev/null +++ b/queue-5.10/arm64-dts-rockchip-disable-display-for-nanopi-r2s.patch @@ -0,0 +1,42 @@ +From 96466b15a192008c539f465a99ebd0d18855249d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 Jan 2021 23:41:39 +0000 +Subject: arm64: dts: rockchip: Disable display for NanoPi R2S + +From: Robin Murphy + +[ Upstream commit 74532de460ec664e5a725507d1b59aa9e4d40776 ] + +NanoPi R2S is headless, so rightly does not enable any of the display +interface hardware, which currently provokes an obnoxious error in the +boot log from the fake DRM device failing to find anything to bind to. +It probably isn't *too* hard to obviate the fake device shenanigans +entirely with a bit of driver reshuffling, but for now let's just +disable it here to shut up the spurious error. + +Signed-off-by: Robin Murphy +Link: https://lore.kernel.org/r/c4553dfad1ad6792c4f22454c135ff55de77e2d6.1611186099.git.robin.murphy@arm.com +Signed-off-by: Heiko Stuebner +Signed-off-by: Sasha Levin +--- + arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts +index 2ee07d15a6e37..1eecad724f04c 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s.dts +@@ -114,6 +114,10 @@ + cpu-supply = <&vdd_arm>; + }; + ++&display_subsystem { ++ status = "disabled"; ++}; ++ + &gmac2io { + assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>; + assigned-clock-parents = <&gmac_clk>, <&gmac_clk>; +-- +2.27.0 + diff --git a/queue-5.10/arm64-dts-rockchip-fix-pcie-dt-properties-on-rk3399.patch b/queue-5.10/arm64-dts-rockchip-fix-pcie-dt-properties-on-rk3399.patch new file mode 100644 index 00000000000..99ba0aa91a7 --- /dev/null +++ b/queue-5.10/arm64-dts-rockchip-fix-pcie-dt-properties-on-rk3399.patch @@ -0,0 +1,50 @@ +From ec845f4176db65e2d00975f3c9ac46535e9c68e0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 15 Aug 2020 13:51:12 +0100 +Subject: arm64: dts: rockchip: Fix PCIe DT properties on rk3399 + +From: Marc Zyngier + +[ Upstream commit 43f20b1c6140896916f4e91aacc166830a7ba849 ] + +It recently became apparent that the lack of a 'device_type = "pci"' +in the PCIe root complex node for rk3399 is a violation of the PCI +binding, as documented in IEEE Std 1275-1994. Changes to the kernel's +parsing of the DT made such violation fatal, as drivers cannot +probe the controller anymore. + +Add the missing property makes the PCIe node compliant. While we +are at it, drop the pointless linux,pci-domain property, which only +makes sense when there are multiple host bridges. + +Signed-off-by: Marc Zyngier +Link: https://lore.kernel.org/r/20200815125112.462652-3-maz@kernel.org +Signed-off-by: Heiko Stuebner +Signed-off-by: Sasha Levin +--- + arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi +index 7a9a7aca86c6a..5df535ad4bbc3 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi +@@ -234,6 +234,7 @@ + reg = <0x0 0xf8000000 0x0 0x2000000>, + <0x0 0xfd000000 0x0 0x1000000>; + reg-names = "axi-base", "apb-base"; ++ device_type = "pci"; + #address-cells = <3>; + #size-cells = <2>; + #interrupt-cells = <1>; +@@ -252,7 +253,6 @@ + <0 0 0 2 &pcie0_intc 1>, + <0 0 0 3 &pcie0_intc 2>, + <0 0 0 4 &pcie0_intc 3>; +- linux,pci-domain = <0>; + max-link-speed = <1>; + msi-map = <0x0 &its 0x0 0x1000>; + phys = <&pcie_phy 0>, <&pcie_phy 1>, +-- +2.27.0 + diff --git a/queue-5.10/arm64-dts-rockchip-remove-interrupt-names-property-f.patch b/queue-5.10/arm64-dts-rockchip-remove-interrupt-names-property-f.patch new file mode 100644 index 00000000000..402d4511d9b --- /dev/null +++ b/queue-5.10/arm64-dts-rockchip-remove-interrupt-names-property-f.patch @@ -0,0 +1,45 @@ +From 596d69b58eb7de1854b2c4b6493c72f4c6b31885 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 17 Jan 2021 19:16:53 +0100 +Subject: arm64: dts: rockchip: remove interrupt-names property from rk3399 + vdec node + +From: Johan Jonker + +[ Upstream commit 94a5400f8b966c91c49991bae41c2ef911b935ac ] + +A test with the command below gives this error: +/arch/arm64/boot/dts/rockchip/rk3399-evb.dt.yaml: video-codec@ff660000: +'interrupt-names' does not match any of the regexes: 'pinctrl-[0-9]+' + +The rkvdec driver gets it irq with help of the platform_get_irq() +function, so remove the interrupt-names property from the rk3399 +vdec node. + +make ARCH=arm64 dtbs_check +DT_SCHEMA_FILES=Documentation/devicetree/bindings/ +media/rockchip,vdec.yaml + +Signed-off-by: Johan Jonker +Link: https://lore.kernel.org/r/20210117181653.24886-1-jbx6244@gmail.com +Signed-off-by: Heiko Stuebner +Signed-off-by: Sasha Levin +--- + arch/arm64/boot/dts/rockchip/rk3399.dtsi | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi +index 5df535ad4bbc3..7e69603fb41c0 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi +@@ -1278,7 +1278,6 @@ + compatible = "rockchip,rk3399-vdec"; + reg = <0x0 0xff660000 0x0 0x400>; + interrupts = ; +- interrupt-names = "vdpu"; + clocks = <&cru ACLK_VDU>, <&cru HCLK_VDU>, + <&cru SCLK_VDU_CA>, <&cru SCLK_VDU_CORE>; + clock-names = "axi", "ahb", "cabac", "core"; +-- +2.27.0 + diff --git a/queue-5.10/bfq-iosched-revert-bfq-fix-computation-of-shallow-de.patch b/queue-5.10/bfq-iosched-revert-bfq-fix-computation-of-shallow-de.patch new file mode 100644 index 00000000000..1597e942c81 --- /dev/null +++ b/queue-5.10/bfq-iosched-revert-bfq-fix-computation-of-shallow-de.patch @@ -0,0 +1,68 @@ +From 5b07d26ffa2e6bced341949c4f4c37c3815eb8d4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 2 Feb 2021 07:18:23 -0700 +Subject: bfq-iosched: Revert "bfq: Fix computation of shallow depth" + +From: Lin Feng + +[ Upstream commit 388c705b95f23f317fa43e6abf9ff07b583b721a ] + +This reverts commit 6d4d273588378c65915acaf7b2ee74e9dd9c130a. + +bfq.limit_depth passes word_depths[] as shallow_depth down to sbitmap core +sbitmap_get_shallow, which uses just the number to limit the scan depth of +each bitmap word, formula: +scan_percentage_for_each_word = shallow_depth / (1 << sbimap->shift) * 100% + +That means the comments's percentiles 50%, 75%, 18%, 37% of bfq are correct. +But after commit patch 'bfq: Fix computation of shallow depth', we use +sbitmap.depth instead, as a example in following case: + +sbitmap.depth = 256, map_nr = 4, shift = 6; sbitmap_word.depth = 64. +The resulsts of computed bfqd->word_depths[] are {128, 192, 48, 96}, and +three of the numbers exceed core dirver's 'sbitmap_word.depth=64' limit +nothing. + +Signed-off-by: Lin Feng +Reviewed-by: Jan Kara +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + block/bfq-iosched.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c +index 9e4eb0fc1c16e..9e81d1052091f 100644 +--- a/block/bfq-iosched.c ++++ b/block/bfq-iosched.c +@@ -6332,13 +6332,13 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd, + * limit 'something'. + */ + /* no more than 50% of tags for async I/O */ +- bfqd->word_depths[0][0] = max(bt->sb.depth >> 1, 1U); ++ bfqd->word_depths[0][0] = max((1U << bt->sb.shift) >> 1, 1U); + /* + * no more than 75% of tags for sync writes (25% extra tags + * w.r.t. async I/O, to prevent async I/O from starving sync + * writes) + */ +- bfqd->word_depths[0][1] = max((bt->sb.depth * 3) >> 2, 1U); ++ bfqd->word_depths[0][1] = max(((1U << bt->sb.shift) * 3) >> 2, 1U); + + /* + * In-word depths in case some bfq_queue is being weight- +@@ -6348,9 +6348,9 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd, + * shortage. + */ + /* no more than ~18% of tags for async I/O */ +- bfqd->word_depths[1][0] = max((bt->sb.depth * 3) >> 4, 1U); ++ bfqd->word_depths[1][0] = max(((1U << bt->sb.shift) * 3) >> 4, 1U); + /* no more than ~37% of tags for sync writes (~20% extra tags) */ +- bfqd->word_depths[1][1] = max((bt->sb.depth * 6) >> 4, 1U); ++ bfqd->word_depths[1][1] = max(((1U << bt->sb.shift) * 6) >> 4, 1U); + + for (i = 0; i < 2; i++) + for (j = 0; j < 2; j++) +-- +2.27.0 + diff --git a/queue-5.10/cap-fix-conversions-on-getxattr.patch b/queue-5.10/cap-fix-conversions-on-getxattr.patch new file mode 100644 index 00000000000..fe855cac448 --- /dev/null +++ b/queue-5.10/cap-fix-conversions-on-getxattr.patch @@ -0,0 +1,145 @@ +From 8b7537a06c1e3e4f4f7ddaf713dac3c936e00865 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 28 Jan 2021 10:22:48 +0100 +Subject: cap: fix conversions on getxattr + +From: Miklos Szeredi + +[ Upstream commit f2b00be488730522d0fb7a8a5de663febdcefe0a ] + +If a capability is stored on disk in v2 format cap_inode_getsecurity() will +currently return in v2 format unconditionally. + +This is wrong: v2 cap should be equivalent to a v3 cap with zero rootid, +and so the same conversions performed on it. + +If the rootid cannot be mapped, v3 is returned unconverted. Fix this so +that both v2 and v3 return -EOVERFLOW if the rootid (or the owner of the fs +user namespace in case of v2) cannot be mapped into the current user +namespace. + +Signed-off-by: Miklos Szeredi +Acked-by: "Eric W. Biederman" +Signed-off-by: Sasha Levin +--- + security/commoncap.c | 67 ++++++++++++++++++++++++++++---------------- + 1 file changed, 43 insertions(+), 24 deletions(-) + +diff --git a/security/commoncap.c b/security/commoncap.c +index 59bf3c1674c8b..a6c9bb4441d54 100644 +--- a/security/commoncap.c ++++ b/security/commoncap.c +@@ -371,10 +371,11 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer, + { + int size, ret; + kuid_t kroot; ++ u32 nsmagic, magic; + uid_t root, mappedroot; + char *tmpbuf = NULL; + struct vfs_cap_data *cap; +- struct vfs_ns_cap_data *nscap; ++ struct vfs_ns_cap_data *nscap = NULL; + struct dentry *dentry; + struct user_namespace *fs_ns; + +@@ -396,46 +397,61 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer, + fs_ns = inode->i_sb->s_user_ns; + cap = (struct vfs_cap_data *) tmpbuf; + if (is_v2header((size_t) ret, cap)) { +- /* If this is sizeof(vfs_cap_data) then we're ok with the +- * on-disk value, so return that. */ +- if (alloc) +- *buffer = tmpbuf; +- else +- kfree(tmpbuf); +- return ret; +- } else if (!is_v3header((size_t) ret, cap)) { +- kfree(tmpbuf); +- return -EINVAL; ++ root = 0; ++ } else if (is_v3header((size_t) ret, cap)) { ++ nscap = (struct vfs_ns_cap_data *) tmpbuf; ++ root = le32_to_cpu(nscap->rootid); ++ } else { ++ size = -EINVAL; ++ goto out_free; + } + +- nscap = (struct vfs_ns_cap_data *) tmpbuf; +- root = le32_to_cpu(nscap->rootid); + kroot = make_kuid(fs_ns, root); + + /* If the root kuid maps to a valid uid in current ns, then return + * this as a nscap. */ + mappedroot = from_kuid(current_user_ns(), kroot); + if (mappedroot != (uid_t)-1 && mappedroot != (uid_t)0) { ++ size = sizeof(struct vfs_ns_cap_data); + if (alloc) { +- *buffer = tmpbuf; ++ if (!nscap) { ++ /* v2 -> v3 conversion */ ++ nscap = kzalloc(size, GFP_ATOMIC); ++ if (!nscap) { ++ size = -ENOMEM; ++ goto out_free; ++ } ++ nsmagic = VFS_CAP_REVISION_3; ++ magic = le32_to_cpu(cap->magic_etc); ++ if (magic & VFS_CAP_FLAGS_EFFECTIVE) ++ nsmagic |= VFS_CAP_FLAGS_EFFECTIVE; ++ memcpy(&nscap->data, &cap->data, sizeof(__le32) * 2 * VFS_CAP_U32); ++ nscap->magic_etc = cpu_to_le32(nsmagic); ++ } else { ++ /* use allocated v3 buffer */ ++ tmpbuf = NULL; ++ } + nscap->rootid = cpu_to_le32(mappedroot); +- } else +- kfree(tmpbuf); +- return size; ++ *buffer = nscap; ++ } ++ goto out_free; + } + + if (!rootid_owns_currentns(kroot)) { +- kfree(tmpbuf); +- return -EOPNOTSUPP; ++ size = -EOVERFLOW; ++ goto out_free; + } + + /* This comes from a parent namespace. Return as a v2 capability */ + size = sizeof(struct vfs_cap_data); + if (alloc) { +- *buffer = kmalloc(size, GFP_ATOMIC); +- if (*buffer) { +- struct vfs_cap_data *cap = *buffer; +- __le32 nsmagic, magic; ++ if (nscap) { ++ /* v3 -> v2 conversion */ ++ cap = kzalloc(size, GFP_ATOMIC); ++ if (!cap) { ++ size = -ENOMEM; ++ goto out_free; ++ } + magic = VFS_CAP_REVISION_2; + nsmagic = le32_to_cpu(nscap->magic_etc); + if (nsmagic & VFS_CAP_FLAGS_EFFECTIVE) +@@ -443,9 +459,12 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer, + memcpy(&cap->data, &nscap->data, sizeof(__le32) * 2 * VFS_CAP_U32); + cap->magic_etc = cpu_to_le32(magic); + } else { +- size = -ENOMEM; ++ /* use unconverted v2 */ ++ tmpbuf = NULL; + } ++ *buffer = cap; + } ++out_free: + kfree(tmpbuf); + return size; + } +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-add-more-clock-sources-to-dcn2.1.patch b/queue-5.10/drm-amd-display-add-more-clock-sources-to-dcn2.1.patch new file mode 100644 index 00000000000..d98613e3136 --- /dev/null +++ b/queue-5.10/drm-amd-display-add-more-clock-sources-to-dcn2.1.patch @@ -0,0 +1,57 @@ +From 8a0457e4dbe30cff78117b22df59b4ea1a67a952 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 15 Jan 2021 13:53:15 -0500 +Subject: drm/amd/display: Add more Clock Sources to DCN2.1 + +From: Sung Lee + +[ Upstream commit 1622711beebe887e4f0f8237fea1f09bb48e9a51 ] + +[WHY] +When enabling HDMI on ComboPHY, there are not +enough clock sources to complete display detection. + +[HOW] +Initialize more clock sources. + +Signed-off-by: Sung Lee +Reviewed-by: Tony Cheng +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +index 20441127783ba..c993854404124 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +@@ -902,6 +902,8 @@ enum dcn20_clk_src_array_id { + DCN20_CLK_SRC_PLL0, + DCN20_CLK_SRC_PLL1, + DCN20_CLK_SRC_PLL2, ++ DCN20_CLK_SRC_PLL3, ++ DCN20_CLK_SRC_PLL4, + DCN20_CLK_SRC_TOTAL_DCN21 + }; + +@@ -1880,6 +1882,14 @@ static bool dcn21_resource_construct( + dcn21_clock_source_create(ctx, ctx->dc_bios, + CLOCK_SOURCE_COMBO_PHY_PLL2, + &clk_src_regs[2], false); ++ pool->base.clock_sources[DCN20_CLK_SRC_PLL3] = ++ dcn21_clock_source_create(ctx, ctx->dc_bios, ++ CLOCK_SOURCE_COMBO_PHY_PLL3, ++ &clk_src_regs[3], false); ++ pool->base.clock_sources[DCN20_CLK_SRC_PLL4] = ++ dcn21_clock_source_create(ctx, ctx->dc_bios, ++ CLOCK_SOURCE_COMBO_PHY_PLL4, ++ &clk_src_regs[4], false); + + pool->base.clk_src_count = DCN20_CLK_SRC_TOTAL_DCN21; + +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-decrement-refcount-of-dc_sink-before.patch b/queue-5.10/drm-amd-display-decrement-refcount-of-dc_sink-before.patch new file mode 100644 index 00000000000..665d451a940 --- /dev/null +++ b/queue-5.10/drm-amd-display-decrement-refcount-of-dc_sink-before.patch @@ -0,0 +1,46 @@ +From 5c92b5938603a010702523b0f6a076d30bd65313 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 15 Jan 2021 11:02:48 -0500 +Subject: drm/amd/display: Decrement refcount of dc_sink before reassignment + +From: Victor Lu + +[ Upstream commit 8e92bb0fa75bca9a57e4aba2e36f67d8016a3053 ] + +[why] +An old dc_sink state is causing a memory leak because it is missing a +dc_sink_release before a new dc_sink is assigned back to +aconnector->dc_sink. + +[how] +Decrement the dc_sink refcount before reassigning it to a new dc_sink. + +Signed-off-by: Victor Lu +Reviewed-by: Rodrigo Siqueira +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 321df20fcdb99..fdca76fc598c0 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -2261,8 +2261,10 @@ void amdgpu_dm_update_connector_after_detect( + * TODO: check if we still need the S3 mode update workaround. + * If yes, put it here. + */ +- if (aconnector->dc_sink) ++ if (aconnector->dc_sink) { + amdgpu_dm_update_freesync_caps(connector, NULL); ++ dc_sink_release(aconnector->dc_sink); ++ } + + aconnector->dc_sink = sink; + dc_sink_retain(aconnector->dc_sink); +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-fix-dc_sink-kref-count-in-emulated_l.patch b/queue-5.10/drm-amd-display-fix-dc_sink-kref-count-in-emulated_l.patch new file mode 100644 index 00000000000..9bff09d2a52 --- /dev/null +++ b/queue-5.10/drm-amd-display-fix-dc_sink-kref-count-in-emulated_l.patch @@ -0,0 +1,44 @@ +From 96a839ab6b46380f003bc0e49967fa2165cb352a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Jan 2021 22:24:14 -0500 +Subject: drm/amd/display: Fix dc_sink kref count in emulated_link_detect + +From: Victor Lu + +[ Upstream commit 3ddc818d9bb877c64f5c649beab97af86c403702 ] + +[why] +prev_sink is not used anywhere else in the function and the reference to +it from dc_link is replaced with a new dc_sink. + +[how] +Change dc_sink_retain(prev_sink) to dc_sink_release(prev_sink). + +Signed-off-by: Victor Lu +Reviewed-by: Nicholas Kazlauskas +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 580880212e551..e5e05a6cb62ab 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -1792,8 +1792,8 @@ static void emulated_link_detect(struct dc_link *link) + link->type = dc_connection_none; + prev_sink = link->local_sink; + +- if (prev_sink != NULL) +- dc_sink_retain(prev_sink); ++ if (prev_sink) ++ dc_sink_release(prev_sink); + + switch (link->connector_signal) { + case SIGNAL_TYPE_HDMI_TYPE_A: { +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-fix-dpcd-translation-for-lttpr-aux_r.patch b/queue-5.10/drm-amd-display-fix-dpcd-translation-for-lttpr-aux_r.patch new file mode 100644 index 00000000000..6cb7e7877cf --- /dev/null +++ b/queue-5.10/drm-amd-display-fix-dpcd-translation-for-lttpr-aux_r.patch @@ -0,0 +1,50 @@ +From 4e0cd0b6b76b8cae742d110fa473311e65fa4606 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 22 Dec 2020 14:05:41 -0500 +Subject: drm/amd/display: Fix DPCD translation for LTTPR AUX_RD_INTERVAL + +From: George Shen + +[ Upstream commit 2b6b7ab4b1cabfbee1af5d818efcab5d51d62c7e ] + +[Why] +The translation between the DPCD value and the specified AUX_RD_INTERVAL +in the DP spec do not match. + +[How] +Update values to match the spec. + +Signed-off-by: George Shen +Reviewed-by: Wenjing Liu +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +index 17e6fd8201395..32b73ea866737 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +@@ -877,13 +877,13 @@ static uint32_t translate_training_aux_read_interval(uint32_t dpcd_aux_read_inte + + switch (dpcd_aux_read_interval) { + case 0x01: +- aux_rd_interval_us = 400; ++ aux_rd_interval_us = 4000; + break; + case 0x02: +- aux_rd_interval_us = 4000; ++ aux_rd_interval_us = 8000; + break; + case 0x03: +- aux_rd_interval_us = 8000; ++ aux_rd_interval_us = 12000; + break; + case 0x04: + aux_rd_interval_us = 16000; +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-free-atomic-state-after-drm_atomic_c.patch b/queue-5.10/drm-amd-display-free-atomic-state-after-drm_atomic_c.patch new file mode 100644 index 00000000000..9d3ceff2f32 --- /dev/null +++ b/queue-5.10/drm-amd-display-free-atomic-state-after-drm_atomic_c.patch @@ -0,0 +1,73 @@ +From 8194431bf26d81085a12d90a766d2e645a2e1b8e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Jan 2021 16:27:07 -0500 +Subject: drm/amd/display: Free atomic state after drm_atomic_commit + +From: Victor Lu + +[ Upstream commit 2abaa323d744011982b20b8f3886184d56d23946 ] + +[why] +drm_atomic_commit was changed so that the caller must free their +drm_atomic_state reference on successes. + +[how] +Add drm_atomic_commit_put after drm_atomic_commit call in +dm_force_atomic_commit. + +Signed-off-by: Victor Lu +Reviewed-by: Roman Li +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index e5e05a6cb62ab..321df20fcdb99 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -7870,14 +7870,14 @@ static int dm_force_atomic_commit(struct drm_connector *connector) + + ret = PTR_ERR_OR_ZERO(conn_state); + if (ret) +- goto err; ++ goto out; + + /* Attach crtc to drm_atomic_state*/ + crtc_state = drm_atomic_get_crtc_state(state, &disconnected_acrtc->base); + + ret = PTR_ERR_OR_ZERO(crtc_state); + if (ret) +- goto err; ++ goto out; + + /* force a restore */ + crtc_state->mode_changed = true; +@@ -7887,17 +7887,15 @@ static int dm_force_atomic_commit(struct drm_connector *connector) + + ret = PTR_ERR_OR_ZERO(plane_state); + if (ret) +- goto err; +- ++ goto out; + + /* Call commit internally with the state we just constructed */ + ret = drm_atomic_commit(state); +- if (!ret) +- return 0; + +-err: +- DRM_ERROR("Restoring old state failed with %i\n", ret); ++out: + drm_atomic_state_put(state); ++ if (ret) ++ DRM_ERROR("Restoring old state failed with %i\n", ret); + + return ret; + } +-- +2.27.0 + diff --git a/queue-5.10/drm-amd-display-release-dsc-before-acquiring.patch b/queue-5.10/drm-amd-display-release-dsc-before-acquiring.patch new file mode 100644 index 00000000000..cf605bbdc57 --- /dev/null +++ b/queue-5.10/drm-amd-display-release-dsc-before-acquiring.patch @@ -0,0 +1,55 @@ +From 96cf0c55c44985a68e99374ccbc7c0438b580bd3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Jan 2021 11:48:57 -0500 +Subject: drm/amd/display: Release DSC before acquiring + +From: Mikita Lipski + +[ Upstream commit 58180a0cc0c57fe62a799a112f95b60f6935bd96 ] + +[why] +Need to unassign DSC from pipes that are not using it +so other pipes can acquire it. That is needed for +asic's that have unmatching number of DSC engines from +the number of pipes. + +[how] +Before acquiring dsc to stream resources, first remove it. + +Signed-off-by: Mikita Lipski +Reviewed-by: Eryk Brol +Acked-by: Anson Jacob +Tested-by: Daniel Wheeler +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +index eee19edeeee5c..1e448f1b39a18 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +@@ -828,6 +828,9 @@ bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, + if (computed_streams[i]) + continue; + ++ if (dcn20_remove_stream_from_ctx(stream->ctx->dc, dc_state, stream) != DC_OK) ++ return false; ++ + mutex_lock(&aconnector->mst_mgr.lock); + if (!compute_mst_dsc_configs_for_link(state, dc_state, stream->link)) { + mutex_unlock(&aconnector->mst_mgr.lock); +@@ -845,7 +848,8 @@ bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, + stream = dc_state->streams[i]; + + if (stream->timing.flags.DSC == 1) +- dc_stream_add_dsc_to_resource(stream->ctx->dc, dc_state, stream); ++ if (dc_stream_add_dsc_to_resource(stream->ctx->dc, dc_state, stream) != DC_OK) ++ return false; + } + + return true; +-- +2.27.0 + diff --git a/queue-5.10/kallsyms-fix-nonconverging-kallsyms-table-with-lld.patch b/queue-5.10/kallsyms-fix-nonconverging-kallsyms-table-with-lld.patch new file mode 100644 index 00000000000..b6531fd80a1 --- /dev/null +++ b/queue-5.10/kallsyms-fix-nonconverging-kallsyms-table-with-lld.patch @@ -0,0 +1,56 @@ +From dfbe29c3e3c13504c002fea6b124c7f7d7af5778 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 4 Feb 2021 16:29:47 +0100 +Subject: kallsyms: fix nonconverging kallsyms table with lld + +From: Arnd Bergmann + +[ Upstream commit efe6e3068067212b85c2d0474b5ee3b2d0c7adab ] + +ARM randconfig builds with lld sometimes show a build failure +from kallsyms: + + Inconsistent kallsyms data + Try make KALLSYMS_EXTRA_PASS=1 as a workaround + +The problem is the veneers/thunks getting added by the linker extend +the symbol table, which in turn leads to more veneers being needed, +so it may take a few extra iterations to converge. + +This bug has been fixed multiple times before, but comes back every time +a new symbol name is used. lld uses a different set of identifiers from +ld.bfd, so the additional ones need to be added as well. + +I looked through the sources and found that arm64 and mips define similar +prefixes, so I'm adding those as well, aside from the ones I observed. I'm +not sure about powerpc64, which seems to already be handled through a +section match, but if it comes back, the "__long_branch_" and "__plt_" +prefixes would have to get added as well. + +Signed-off-by: Arnd Bergmann +Signed-off-by: Masahiro Yamada +Signed-off-by: Sasha Levin +--- + scripts/kallsyms.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c +index 7ecd2ccba531b..54ad86d137849 100644 +--- a/scripts/kallsyms.c ++++ b/scripts/kallsyms.c +@@ -112,6 +112,12 @@ static bool is_ignored_symbol(const char *name, char type) + "__crc_", /* modversions */ + "__efistub_", /* arm64 EFI stub namespace */ + "__kvm_nvhe_", /* arm64 non-VHE KVM namespace */ ++ "__AArch64ADRPThunk_", /* arm64 lld */ ++ "__ARMV5PILongThunk_", /* arm lld */ ++ "__ARMV7PILongThunk_", ++ "__ThumbV7PILongThunk_", ++ "__LA25Thunk_", /* mips lld */ ++ "__microLA25Thunk_", + NULL + }; + +-- +2.27.0 + diff --git a/queue-5.10/kasan-add-explicit-preconditions-to-kasan_report.patch b/queue-5.10/kasan-add-explicit-preconditions-to-kasan_report.patch new file mode 100644 index 00000000000..c806ae68e1a --- /dev/null +++ b/queue-5.10/kasan-add-explicit-preconditions-to-kasan_report.patch @@ -0,0 +1,108 @@ +From ba00b65f4d2594a85a18eb19e8e9ad6c6f7aef56 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 4 Feb 2021 18:32:49 -0800 +Subject: kasan: add explicit preconditions to kasan_report() + +From: Vincenzo Frascino + +[ Upstream commit 49c6631d3b4f61a7b5bb0453a885a12bfa06ffd8 ] + +Patch series "kasan: Fix metadata detection for KASAN_HW_TAGS", v5. + +With the introduction of KASAN_HW_TAGS, kasan_report() currently assumes +that every location in memory has valid metadata associated. This is +due to the fact that addr_has_metadata() returns always true. + +As a consequence of this, an invalid address (e.g. NULL pointer +address) passed to kasan_report() when KASAN_HW_TAGS is enabled, leads +to a kernel panic. + +Example below, based on arm64: + + BUG: KASAN: invalid-access in 0x0 + Read at addr 0000000000000000 by task swapper/0/1 + Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 + Mem abort info: + ESR = 0x96000004 + EC = 0x25: DABT (current EL), IL = 32 bits + SET = 0, FnV = 0 + EA = 0, S1PTW = 0 + Data abort info: + ISV = 0, ISS = 0x00000004 + CM = 0, WnR = 0 + + ... + + Call trace: + mte_get_mem_tag+0x24/0x40 + kasan_report+0x1a4/0x410 + alsa_sound_last_init+0x8c/0xa4 + do_one_initcall+0x50/0x1b0 + kernel_init_freeable+0x1d4/0x23c + kernel_init+0x14/0x118 + ret_from_fork+0x10/0x34 + Code: d65f03c0 9000f021 f9428021 b6cfff61 (d9600000) + ---[ end trace 377c8bb45bdd3a1a ]--- + hrtimer: interrupt took 48694256 ns + note: swapper/0[1] exited with preempt_count 1 + Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b + SMP: stopping secondary CPUs + Kernel Offset: 0x35abaf140000 from 0xffff800010000000 + PHYS_OFFSET: 0x40000000 + CPU features: 0x0a7e0152,61c0a030 + Memory Limit: none + ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]--- + +This series fixes the behavior of addr_has_metadata() that now returns +true only when the address is valid. + +This patch (of 2): + +With the introduction of KASAN_HW_TAGS, kasan_report() accesses the +metadata only when addr_has_metadata() succeeds. + +Add a comment to make sure that the preconditions to the function are +explicitly clarified. + +Link: https://lkml.kernel.org/r/20210126134409.47894-1-vincenzo.frascino@arm.com +Link: https://lkml.kernel.org/r/20210126134409.47894-2-vincenzo.frascino@arm.com +Signed-off-by: Vincenzo Frascino +Reviewed-by: Andrey Konovalov +Cc: Andrey Ryabinin +Cc: Alexander Potapenko +Cc: Dmitry Vyukov +Cc: Leon Romanovsky +Cc: Andrey Konovalov +Cc: Catalin Marinas +Cc: Will Deacon +Cc: Mark Rutland +Cc: "Paul E . McKenney" +Cc: Naresh Kamboju +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + include/linux/kasan.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/include/linux/kasan.h b/include/linux/kasan.h +index 30d343b4a40a5..646fa165d2cce 100644 +--- a/include/linux/kasan.h ++++ b/include/linux/kasan.h +@@ -196,6 +196,13 @@ void kasan_init_tags(void); + + void *kasan_reset_tag(const void *addr); + ++/** ++ * kasan_report - print a report about a bad memory access detected by KASAN ++ * @addr: address of the bad access ++ * @size: size of the bad access ++ * @is_write: whether the bad access is a write or a read ++ * @ip: instruction pointer for the accessibility check or the bad access itself ++ */ + bool kasan_report(unsigned long addr, size_t size, + bool is_write, unsigned long ip); + +-- +2.27.0 + diff --git a/queue-5.10/kbuild-simplify-gcc_plugins-enablement-in-dummy-tool.patch b/queue-5.10/kbuild-simplify-gcc_plugins-enablement-in-dummy-tool.patch new file mode 100644 index 00000000000..5f38352c1eb --- /dev/null +++ b/queue-5.10/kbuild-simplify-gcc_plugins-enablement-in-dummy-tool.patch @@ -0,0 +1,46 @@ +From 54ba516fc3f6a2f561b1eb20522b79bf3385388c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 23 Jan 2021 18:16:30 +0900 +Subject: kbuild: simplify GCC_PLUGINS enablement in dummy-tools/gcc + +From: Masahiro Yamada + +[ Upstream commit f4c3b83b75b91c5059726cb91e3165cc01764ce7 ] + +With commit 1e860048c53e ("gcc-plugins: simplify GCC plugin-dev +capability test") applied, this hunk can be way simplified because +now scripts/gcc-plugins/Kconfig only checks plugin-version.h + +Signed-off-by: Masahiro Yamada +Signed-off-by: Sasha Levin +--- + scripts/dummy-tools/gcc | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/scripts/dummy-tools/gcc b/scripts/dummy-tools/gcc +index 33487e99d83e5..5c113cad56017 100755 +--- a/scripts/dummy-tools/gcc ++++ b/scripts/dummy-tools/gcc +@@ -75,16 +75,12 @@ if arg_contain -S "$@"; then + fi + fi + +-# For scripts/gcc-plugin.sh ++# To set GCC_PLUGINS + if arg_contain -print-file-name=plugin "$@"; then + plugin_dir=$(mktemp -d) + +- sed -n 's/.*#include "\(.*\)"/\1/p' $(dirname $0)/../gcc-plugins/gcc-common.h | +- while read header +- do +- mkdir -p $plugin_dir/include/$(dirname $header) +- touch $plugin_dir/include/$header +- done ++ mkdir -p $plugin_dir/include ++ touch $plugin_dir/include/plugin-version.h + + echo $plugin_dir + exit 0 +-- +2.27.0 + diff --git a/queue-5.10/nvme-pci-ignore-the-subsysem-nqn-on-phison-e16.patch b/queue-5.10/nvme-pci-ignore-the-subsysem-nqn-on-phison-e16.patch new file mode 100644 index 00000000000..f22a2bac8f8 --- /dev/null +++ b/queue-5.10/nvme-pci-ignore-the-subsysem-nqn-on-phison-e16.patch @@ -0,0 +1,37 @@ +From b4576d4db1eeb33eedb83b644167574b411bb112 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 1 Feb 2021 22:08:22 +0100 +Subject: nvme-pci: ignore the subsysem NQN on Phison E16 + +From: Claus Stovgaard + +[ Upstream commit c9e95c39280530200cdd0bbd2670e6334a81970b ] + +Tested both with Corsairs firmware 11.3 and 13.0 for the Corsairs MP600 +and both have the issue as reported by the kernel. + +nvme nvme0: missing or invalid SUBNQN field. + +Signed-off-by: Claus Stovgaard +Signed-off-by: Christoph Hellwig +Signed-off-by: Sasha Levin +--- + drivers/nvme/host/pci.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c +index a32494cde61f7..4a33287371bda 100644 +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -3247,6 +3247,8 @@ static const struct pci_device_id nvme_id_table[] = { + { PCI_DEVICE(0x144d, 0xa822), /* Samsung PM1725a */ + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, ++ { PCI_DEVICE(0x1987, 0x5016), /* Phison E16 */ ++ .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, }, + { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */ + .driver_data = NVME_QUIRK_LIGHTNVM, }, + { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */ +-- +2.27.0 + diff --git a/queue-5.10/ovl-perform-vfs_getxattr-with-mounter-creds.patch b/queue-5.10/ovl-perform-vfs_getxattr-with-mounter-creds.patch new file mode 100644 index 00000000000..36145e64df5 --- /dev/null +++ b/queue-5.10/ovl-perform-vfs_getxattr-with-mounter-creds.patch @@ -0,0 +1,40 @@ +From cedc5ac80e87fe4d49da40dd0c6b42bb2f65cf88 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 28 Jan 2021 10:22:48 +0100 +Subject: ovl: perform vfs_getxattr() with mounter creds + +From: Miklos Szeredi + +[ Upstream commit 554677b97257b0b69378bd74e521edb7e94769ff ] + +The vfs_getxattr() in ovl_xattr_set() is used to check whether an xattr +exist on a lower layer file that is to be removed. If the xattr does not +exist, then no need to copy up the file. + +This call of vfs_getxattr() wasn't wrapped in credential override, and this +is probably okay. But for consitency wrap this instance as well. + +Reported-by: "Eric W. Biederman" +Signed-off-by: Miklos Szeredi +Signed-off-by: Sasha Levin +--- + fs/overlayfs/inode.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c +index b584dca845baa..4fadafd8bdc12 100644 +--- a/fs/overlayfs/inode.c ++++ b/fs/overlayfs/inode.c +@@ -346,7 +346,9 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, + goto out; + + if (!value && !upperdentry) { ++ old_cred = ovl_override_creds(dentry->d_sb); + err = vfs_getxattr(realdentry, name, NULL, 0); ++ revert_creds(old_cred); + if (err < 0) + goto out_drop_write; + } +-- +2.27.0 + diff --git a/queue-5.10/ovl-skip-getxattr-of-security-labels.patch b/queue-5.10/ovl-skip-getxattr-of-security-labels.patch new file mode 100644 index 00000000000..b47885bd55c --- /dev/null +++ b/queue-5.10/ovl-skip-getxattr-of-security-labels.patch @@ -0,0 +1,74 @@ +From bcf0873d1acd5e20ae8adfbc47375e6efdd4a218 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 19 Dec 2020 12:16:08 +0200 +Subject: ovl: skip getxattr of security labels + +From: Amir Goldstein + +[ Upstream commit 03fedf93593c82538b18476d8c4f0e8f8435ea70 ] + +When inode has no listxattr op of its own (e.g. squashfs) vfs_listxattr +calls the LSM inode_listsecurity hooks to list the xattrs that LSMs will +intercept in inode_getxattr hooks. + +When selinux LSM is installed but not initialized, it will list the +security.selinux xattr in inode_listsecurity, but will not intercept it +in inode_getxattr. This results in -ENODATA for a getxattr call for an +xattr returned by listxattr. + +This situation was manifested as overlayfs failure to copy up lower +files from squashfs when selinux is built-in but not initialized, +because ovl_copy_xattr() iterates the lower inode xattrs by +vfs_listxattr() and vfs_getxattr(). + +ovl_copy_xattr() skips copy up of security labels that are indentified by +inode_copy_up_xattr LSM hooks, but it does that after vfs_getxattr(). +Since we are not going to copy them, skip vfs_getxattr() of the security +labels. + +Reported-by: Michael Labriola +Tested-by: Michael Labriola +Link: https://lore.kernel.org/linux-unionfs/2nv9d47zt7.fsf@aldarion.sourceruckus.org/ +Signed-off-by: Amir Goldstein +Signed-off-by: Miklos Szeredi +Signed-off-by: Sasha Levin +--- + fs/overlayfs/copy_up.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c +index 955ecd4030f04..89d5d59c7d7a4 100644 +--- a/fs/overlayfs/copy_up.c ++++ b/fs/overlayfs/copy_up.c +@@ -84,6 +84,14 @@ int ovl_copy_xattr(struct super_block *sb, struct dentry *old, + + if (ovl_is_private_xattr(sb, name)) + continue; ++ ++ error = security_inode_copy_up_xattr(name); ++ if (error < 0 && error != -EOPNOTSUPP) ++ break; ++ if (error == 1) { ++ error = 0; ++ continue; /* Discard */ ++ } + retry: + size = vfs_getxattr(old, name, value, value_size); + if (size == -ERANGE) +@@ -107,13 +115,6 @@ retry: + goto retry; + } + +- error = security_inode_copy_up_xattr(name); +- if (error < 0 && error != -EOPNOTSUPP) +- break; +- if (error == 1) { +- error = 0; +- continue; /* Discard */ +- } + error = vfs_setxattr(new, name, value, size, 0); + if (error) { + if (error != -EOPNOTSUPP || ovl_must_copy_xattr(name)) +-- +2.27.0 + diff --git a/queue-5.10/platform-x86-hp-wmi-disable-tablet-mode-reporting-by.patch b/queue-5.10/platform-x86-hp-wmi-disable-tablet-mode-reporting-by.patch new file mode 100644 index 00000000000..629d5189d93 --- /dev/null +++ b/queue-5.10/platform-x86-hp-wmi-disable-tablet-mode-reporting-by.patch @@ -0,0 +1,102 @@ +From 9a04fda59fe6e474e010ac727db51cd95e05948a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 Jan 2021 13:49:41 +0100 +Subject: platform/x86: hp-wmi: Disable tablet-mode reporting by default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Hans de Goede + +[ Upstream commit 67fbe02a5cebc3c653610f12e3c0424e58450153 ] + +Recently userspace has started making more use of SW_TABLET_MODE +(when an input-dev reports this). + +Specifically recent GNOME3 versions will: + +1. When SW_TABLET_MODE is reported and is reporting 0: +1.1 Disable accelerometer-based screen auto-rotation +1.2 Disable automatically showing the on-screen keyboard when a + text-input field is focussed + +2. When SW_TABLET_MODE is reported and is reporting 1: +2.1 Ignore input-events from the builtin keyboard and touchpad + (this is for 360° hinges style 2-in-1s where the keyboard and + touchpads are accessible on the back of the tablet when folded + into tablet-mode) + +This means that claiming to support SW_TABLET_MODE when it does not +actually work / reports correct values has bad side-effects. + +The check in the hp-wmi code which is used to decide if the input-dev +should claim SW_TABLET_MODE support, only checks if the +HPWMI_HARDWARE_QUERY is supported. It does *not* check if the hardware +actually is capable of reporting SW_TABLET_MODE. + +This leads to the hp-wmi input-dev claiming SW_TABLET_MODE support, +while in reality it will always report 0 as SW_TABLET_MODE value. +This has been seen on a "HP ENVY x360 Convertible 15-cp0xxx" and +this likely is the case on a whole lot of other HP models. + +This problem causes both auto-rotation and on-screen keyboard +support to not work on affected x360 models. + +There is no easy fix for this, but since userspace expects +SW_TABLET_MODE reporting to be reliable when advertised it is +better to not claim/report SW_TABLET_MODE support at all, then +to claim to support it while it does not work. + +To avoid the mentioned problems, add a new enable_tablet_mode_sw +module-parameter which defaults to false. + +Note I've made this an int using the standard -1=auto, 0=off, 1=on +triplett, with the hope that in the future we can come up with a +better way to detect SW_TABLET_MODE support. ATM the default +auto option just does the same as off. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1918255 +Cc: Stefan Brüns +Signed-off-by: Hans de Goede +Acked-by: Mark Gross +Link: https://lore.kernel.org/r/20210120124941.73409-1-hdegoede@redhat.com +Signed-off-by: Sasha Levin +--- + drivers/platform/x86/hp-wmi.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c +index 18bf8aeb5f870..e94e59283ecb9 100644 +--- a/drivers/platform/x86/hp-wmi.c ++++ b/drivers/platform/x86/hp-wmi.c +@@ -32,6 +32,10 @@ MODULE_LICENSE("GPL"); + MODULE_ALIAS("wmi:95F24279-4D7B-4334-9387-ACCDC67EF61C"); + MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4"); + ++static int enable_tablet_mode_sw = -1; ++module_param(enable_tablet_mode_sw, int, 0444); ++MODULE_PARM_DESC(enable_tablet_mode_sw, "Enable SW_TABLET_MODE reporting (-1=auto, 0=no, 1=yes)"); ++ + #define HPWMI_EVENT_GUID "95F24279-4D7B-4334-9387-ACCDC67EF61C" + #define HPWMI_BIOS_GUID "5FB7F034-2C63-45e9-BE91-3D44E2C707E4" + +@@ -654,10 +658,12 @@ static int __init hp_wmi_input_setup(void) + } + + /* Tablet mode */ +- val = hp_wmi_hw_state(HPWMI_TABLET_MASK); +- if (!(val < 0)) { +- __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit); +- input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val); ++ if (enable_tablet_mode_sw > 0) { ++ val = hp_wmi_hw_state(HPWMI_TABLET_MASK); ++ if (val >= 0) { ++ __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit); ++ input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val); ++ } + } + + err = sparse_keymap_setup(hp_wmi_input_dev, hp_wmi_keymap, NULL); +-- +2.27.0 + diff --git a/queue-5.10/revert-lib-restrict-cpumask_local_spread-to-houskeep.patch b/queue-5.10/revert-lib-restrict-cpumask_local_spread-to-houskeep.patch new file mode 100644 index 00000000000..227896c386b --- /dev/null +++ b/queue-5.10/revert-lib-restrict-cpumask_local_spread-to-houskeep.patch @@ -0,0 +1,106 @@ +From 2b171cefd28de1bbd6359e2b7ce2512a879e3790 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Feb 2021 23:28:29 +0100 +Subject: Revert "lib: Restrict cpumask_local_spread to houskeeping CPUs" + +From: Thomas Gleixner + +[ Upstream commit 2452483d9546de1c540f330469dc4042ff089731 ] + +This reverts commit 1abdfe706a579a702799fce465bceb9fb01d407c. + +This change is broken and not solving any problem it claims to solve. + +Robin reported that cpumask_local_spread() now returns any cpu out of +cpu_possible_mask in case that NOHZ_FULL is disabled (runtime or compile +time). It can also return any offline or not-present CPU in the +housekeeping mask. Before that it was returning a CPU out of +online_cpu_mask. + +While the function is racy against CPU hotplug if the caller does not +protect against it, the actual use cases are not caring much about it as +they use it mostly as hint for: + + - the user space affinity hint which is unused by the kernel + - memory node selection which is just suboptimal + - network queue affinity which might fail but is handled gracefully + +But the occasional fail vs. hotplug is very different from returning +anything from possible_cpu_mask which can have a large amount of offline +CPUs obviously. + +The changelog of the commit claims: + + "The current implementation of cpumask_local_spread() does not respect + the isolated CPUs, i.e., even if a CPU has been isolated for Real-Time + task, it will return it to the caller for pinning of its IRQ + threads. Having these unwanted IRQ threads on an isolated CPU adds up + to a latency overhead." + +The only correct part of this changelog is: + + "The current implementation of cpumask_local_spread() does not respect + the isolated CPUs." + +Everything else is just disjunct from reality. + +Reported-by: Robin Murphy +Signed-off-by: Thomas Gleixner +Cc: Nitesh Narayan Lal +Cc: Marcelo Tosatti +Cc: abelits@marvell.com +Cc: davem@davemloft.net +Link: https://lore.kernel.org/r/87y2g26tnt.fsf@nanos.tec.linutronix.de +Signed-off-by: Sasha Levin +--- + lib/cpumask.c | 16 +++++----------- + 1 file changed, 5 insertions(+), 11 deletions(-) + +diff --git a/lib/cpumask.c b/lib/cpumask.c +index 85da6ab4fbb5a..fb22fb266f937 100644 +--- a/lib/cpumask.c ++++ b/lib/cpumask.c +@@ -6,7 +6,6 @@ + #include + #include + #include +-#include + + /** + * cpumask_next - get the next cpu in a cpumask +@@ -206,27 +205,22 @@ void __init free_bootmem_cpumask_var(cpumask_var_t mask) + */ + unsigned int cpumask_local_spread(unsigned int i, int node) + { +- int cpu, hk_flags; +- const struct cpumask *mask; ++ int cpu; + +- hk_flags = HK_FLAG_DOMAIN | HK_FLAG_MANAGED_IRQ; +- mask = housekeeping_cpumask(hk_flags); + /* Wrap: we always want a cpu. */ +- i %= cpumask_weight(mask); ++ i %= num_online_cpus(); + + if (node == NUMA_NO_NODE) { +- for_each_cpu(cpu, mask) { ++ for_each_cpu(cpu, cpu_online_mask) + if (i-- == 0) + return cpu; +- } + } else { + /* NUMA first. */ +- for_each_cpu_and(cpu, cpumask_of_node(node), mask) { ++ for_each_cpu_and(cpu, cpumask_of_node(node), cpu_online_mask) + if (i-- == 0) + return cpu; +- } + +- for_each_cpu(cpu, mask) { ++ for_each_cpu(cpu, cpu_online_mask) { + /* Skip NUMA nodes, done above. */ + if (cpumask_test_cpu(cpu, cpumask_of_node(node))) + continue; +-- +2.27.0 + diff --git a/queue-5.10/riscv-virt_addr_valid-must-check-the-address-belongs.patch b/queue-5.10/riscv-virt_addr_valid-must-check-the-address-belongs.patch new file mode 100644 index 00000000000..5f0e6cdbcd0 --- /dev/null +++ b/queue-5.10/riscv-virt_addr_valid-must-check-the-address-belongs.patch @@ -0,0 +1,46 @@ +From c178008702081ba92c0b789991c17c4b0c1216ef Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 29 Jan 2021 12:31:05 -0500 +Subject: riscv: virt_addr_valid must check the address belongs to linear + mapping + +From: Alexandre Ghiti + +[ Upstream commit 2ab543823322b564f205cb15d0f0302803c87d11 ] + +virt_addr_valid macro checks that a virtual address is valid, ie that +the address belongs to the linear mapping and that the corresponding + physical page exists. + +Add the missing check that ensures the virtual address belongs to the +linear mapping, otherwise __virt_to_phys, when compiled with +CONFIG_DEBUG_VIRTUAL enabled, raises a WARN that is interpreted as a +kernel bug by syzbot. + +Signed-off-by: Alexandre Ghiti +Reviewed-by: Atish Patra +Signed-off-by: Palmer Dabbelt +Signed-off-by: Sasha Levin +--- + arch/riscv/include/asm/page.h | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h +index 2d50f76efe481..64a675c5c30ac 100644 +--- a/arch/riscv/include/asm/page.h ++++ b/arch/riscv/include/asm/page.h +@@ -135,7 +135,10 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); + + #endif /* __ASSEMBLY__ */ + +-#define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) ++#define virt_addr_valid(vaddr) ({ \ ++ unsigned long _addr = (unsigned long)vaddr; \ ++ (unsigned long)(_addr) >= PAGE_OFFSET && pfn_valid(virt_to_pfn(_addr)); \ ++}) + + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC + +-- +2.27.0 + diff --git a/queue-5.10/scsi-lpfc-fix-eeh-encountering-oops-with-nvme-traffi.patch b/queue-5.10/scsi-lpfc-fix-eeh-encountering-oops-with-nvme-traffi.patch new file mode 100644 index 00000000000..4518af524a5 --- /dev/null +++ b/queue-5.10/scsi-lpfc-fix-eeh-encountering-oops-with-nvme-traffi.patch @@ -0,0 +1,52 @@ +From 08cab573380aed1e507a5fd77e9b4079f9714843 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 27 Jan 2021 14:16:01 -0800 +Subject: scsi: lpfc: Fix EEH encountering oops with NVMe traffic + +From: James Smart + +[ Upstream commit 8c65830ae1629b03e5d65e9aafae7e2cf5f8b743 ] + +In testing, in a configuration with Redfish and native NVMe multipath when +an EEH is injected, a kernel oops is being encountered: + +(unreliable) +lpfc_nvme_ls_req+0x328/0x720 [lpfc] +__nvme_fc_send_ls_req.constprop.13+0x1d8/0x3d0 [nvme_fc] +nvme_fc_create_association+0x224/0xd10 [nvme_fc] +nvme_fc_reset_ctrl_work+0x110/0x154 [nvme_fc] +process_one_work+0x304/0x5d + +the NBMe transport is issuing a Disconnect LS request, which the driver +receives and tries to post but the work queue used by the driver is already +being torn down by the eeh. + +Fix by validating the validity of the work queue before proceeding with the +LS transmit. + +Link: https://lore.kernel.org/r/20210127221601.84878-1-jsmart2021@gmail.com +Reviewed-by: Ewan D. Milne +Signed-off-by: James Smart +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/lpfc/lpfc_nvme.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c +index 69f1a0457f51e..03c81cec6bc98 100644 +--- a/drivers/scsi/lpfc/lpfc_nvme.c ++++ b/drivers/scsi/lpfc/lpfc_nvme.c +@@ -714,6 +714,9 @@ __lpfc_nvme_ls_req(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, + return -ENODEV; + } + ++ if (!vport->phba->sli4_hba.nvmels_wq) ++ return -ENOMEM; ++ + /* + * there are two dma buf in the request, actually there is one and + * the second one is just the start address + cmd size. +-- +2.27.0 + diff --git a/queue-5.10/series b/queue-5.10/series index fb07a211bac..bae5c99e88c 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -14,3 +14,33 @@ drm-dp_mst-don-t-report-ports-connected-if-nothing-is-attached-to-them.patch dmaengine-move-channel-device_node-deletion-to-driver.patch tmpfs-disallow-config_tmpfs_inode64-on-s390.patch tmpfs-disallow-config_tmpfs_inode64-on-alpha.patch +soc-ti-omap-prm-fix-boot-time-errors-for-rst_map_012.patch +arm64-dts-rockchip-fix-pcie-dt-properties-on-rk3399.patch +arm64-dts-qcom-sdm845-reserve-lpass-clocks-in-gcc.patch +arm-omap2-fix-suspcious-rcu-usage-splats-for-omap_en.patch +arm64-dts-rockchip-remove-interrupt-names-property-f.patch +kbuild-simplify-gcc_plugins-enablement-in-dummy-tool.patch +platform-x86-hp-wmi-disable-tablet-mode-reporting-by.patch +arm64-dts-rockchip-disable-display-for-nanopi-r2s.patch +ovl-perform-vfs_getxattr-with-mounter-creds.patch +cap-fix-conversions-on-getxattr.patch +ovl-skip-getxattr-of-security-labels.patch +scsi-lpfc-fix-eeh-encountering-oops-with-nvme-traffi.patch +x86-split_lock-enable-the-split-lock-feature-on-anot.patch +nvme-pci-ignore-the-subsysem-nqn-on-phison-e16.patch +drm-amd-display-fix-dpcd-translation-for-lttpr-aux_r.patch +drm-amd-display-add-more-clock-sources-to-dcn2.1.patch +drm-amd-display-release-dsc-before-acquiring.patch +drm-amd-display-fix-dc_sink-kref-count-in-emulated_l.patch +drm-amd-display-free-atomic-state-after-drm_atomic_c.patch +drm-amd-display-decrement-refcount-of-dc_sink-before.patch +riscv-virt_addr_valid-must-check-the-address-belongs.patch +bfq-iosched-revert-bfq-fix-computation-of-shallow-de.patch +arm-dts-lpc32xx-revert-set-default-clock-rate-of-hcl.patch +kallsyms-fix-nonconverging-kallsyms-table-with-lld.patch +arm-ensure-the-signal-page-contains-defined-contents.patch +arm-kexec-fix-oops-after-tlb-are-invalidated.patch +kasan-add-explicit-preconditions-to-kasan_report.patch +ubsan-implement-__ubsan_handle_alignment_assumption.patch +revert-lib-restrict-cpumask_local_spread-to-houskeep.patch +x86-efi-remove-efi-pgd-build-time-checks.patch diff --git a/queue-5.10/soc-ti-omap-prm-fix-boot-time-errors-for-rst_map_012.patch b/queue-5.10/soc-ti-omap-prm-fix-boot-time-errors-for-rst_map_012.patch new file mode 100644 index 00000000000..b4eb1d7514f --- /dev/null +++ b/queue-5.10/soc-ti-omap-prm-fix-boot-time-errors-for-rst_map_012.patch @@ -0,0 +1,74 @@ +From 603effe7cbcc8ba82f1600b96599284944e35022 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 8 Dec 2020 16:08:02 +0200 +Subject: soc: ti: omap-prm: Fix boot time errors for rst_map_012 bits 0 and 1 + +From: Tony Lindgren + +[ Upstream commit 7078a5ba7a58e5db07583b176f8a03e0b8714731 ] + +We have rst_map_012 used for various accelerators like dsp, ipu and iva. +For these use cases, we have rstctrl bit 2 control the subsystem module +reset, and have and bits 0 and 1 control the accelerator specific +features. + +If the bootloader, or kexec boot, has left any accelerator specific +reset bits deasserted, deasserting bit 2 reset will potentially enable +an accelerator with unconfigured MMU and no firmware. And we may get +spammed with a lot by warnings on boot with "Data Access in User mode +during Functional access", or depending on the accelerator, the system +can also just hang. + +This issue can be quite easily reproduced by setting a rst_map_012 type +rstctrl register to 0 or 4 in the bootloader, and booting the system. + +Let's just assert all reset bits for rst_map_012 type resets. So far +it looks like the other rstctrl types don't need this. If it turns out +that the other type rstctrl bits also need reset on init, we need to +add an instance specific reset mask for the bits to avoid resetting +unwanted bits. + +Reported-by: Carl Philipp Klemm +Cc: Philipp Zabel +Cc: Santosh Shilimkar +Cc: Suman Anna +Cc: Tero Kristo +Tested-by: Carl Philipp Klemm +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +--- + drivers/soc/ti/omap_prm.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/drivers/soc/ti/omap_prm.c b/drivers/soc/ti/omap_prm.c +index 4d41dc3cdce1f..c8b14b3a171f7 100644 +--- a/drivers/soc/ti/omap_prm.c ++++ b/drivers/soc/ti/omap_prm.c +@@ -552,6 +552,7 @@ static int omap_prm_reset_init(struct platform_device *pdev, + const struct omap_rst_map *map; + struct ti_prm_platform_data *pdata = dev_get_platdata(&pdev->dev); + char buf[32]; ++ u32 v; + + /* + * Check if we have controllable resets. If either rstctrl is non-zero +@@ -599,6 +600,16 @@ static int omap_prm_reset_init(struct platform_device *pdev, + map++; + } + ++ /* Quirk handling to assert rst_map_012 bits on reset and avoid errors */ ++ if (prm->data->rstmap == rst_map_012) { ++ v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl); ++ if ((v & reset->mask) != reset->mask) { ++ dev_dbg(&pdev->dev, "Asserting all resets: %08x\n", v); ++ writel_relaxed(reset->mask, reset->prm->base + ++ reset->prm->data->rstctrl); ++ } ++ } ++ + return devm_reset_controller_register(&pdev->dev, &reset->rcdev); + } + +-- +2.27.0 + diff --git a/queue-5.10/ubsan-implement-__ubsan_handle_alignment_assumption.patch b/queue-5.10/ubsan-implement-__ubsan_handle_alignment_assumption.patch new file mode 100644 index 00000000000..ed84143bd5c --- /dev/null +++ b/queue-5.10/ubsan-implement-__ubsan_handle_alignment_assumption.patch @@ -0,0 +1,97 @@ +From d4a509845981d18a80ab924af4bc19e24bb331c9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 4 Feb 2021 18:32:57 -0800 +Subject: ubsan: implement __ubsan_handle_alignment_assumption + +From: Nathan Chancellor + +[ Upstream commit 28abcc963149e06d956d95a18a85f4ba26af746f ] + +When building ARCH=mips 32r2el_defconfig with CONFIG_UBSAN_ALIGNMENT: + + ld.lld: error: undefined symbol: __ubsan_handle_alignment_assumption + referenced by slab.h:557 (include/linux/slab.h:557) + main.o:(do_initcalls) in archive init/built-in.a + referenced by slab.h:448 (include/linux/slab.h:448) + do_mounts_rd.o:(rd_load_image) in archive init/built-in.a + referenced by slab.h:448 (include/linux/slab.h:448) + do_mounts_rd.o:(identify_ramdisk_image) in archive init/built-in.a + referenced 1579 more times + +Implement this for the kernel based on LLVM's +handleAlignmentAssumptionImpl because the kernel is not linked against +the compiler runtime. + +Link: https://github.com/ClangBuiltLinux/linux/issues/1245 +Link: https://github.com/llvm/llvm-project/blob/llvmorg-11.0.1/compiler-rt/lib/ubsan/ubsan_handlers.cpp#L151-L190 +Link: https://lkml.kernel.org/r/20210127224451.2587372-1-nathan@kernel.org +Signed-off-by: Nathan Chancellor +Acked-by: Kees Cook +Reviewed-by: Nick Desaulniers +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + lib/ubsan.c | 31 +++++++++++++++++++++++++++++++ + lib/ubsan.h | 6 ++++++ + 2 files changed, 37 insertions(+) + +diff --git a/lib/ubsan.c b/lib/ubsan.c +index cb9af3f6b77e3..adf8dcf3c84e6 100644 +--- a/lib/ubsan.c ++++ b/lib/ubsan.c +@@ -427,3 +427,34 @@ void __ubsan_handle_load_invalid_value(void *_data, void *val) + ubsan_epilogue(); + } + EXPORT_SYMBOL(__ubsan_handle_load_invalid_value); ++ ++void __ubsan_handle_alignment_assumption(void *_data, unsigned long ptr, ++ unsigned long align, ++ unsigned long offset); ++void __ubsan_handle_alignment_assumption(void *_data, unsigned long ptr, ++ unsigned long align, ++ unsigned long offset) ++{ ++ struct alignment_assumption_data *data = _data; ++ unsigned long real_ptr; ++ ++ if (suppress_report(&data->location)) ++ return; ++ ++ ubsan_prologue(&data->location, "alignment-assumption"); ++ ++ if (offset) ++ pr_err("assumption of %lu byte alignment (with offset of %lu byte) for pointer of type %s failed", ++ align, offset, data->type->type_name); ++ else ++ pr_err("assumption of %lu byte alignment for pointer of type %s failed", ++ align, data->type->type_name); ++ ++ real_ptr = ptr - offset; ++ pr_err("%saddress is %lu aligned, misalignment offset is %lu bytes", ++ offset ? "offset " : "", BIT(real_ptr ? __ffs(real_ptr) : 0), ++ real_ptr & (align - 1)); ++ ++ ubsan_epilogue(); ++} ++EXPORT_SYMBOL(__ubsan_handle_alignment_assumption); +diff --git a/lib/ubsan.h b/lib/ubsan.h +index 7b56c09473a98..9a0b71c5ff9fb 100644 +--- a/lib/ubsan.h ++++ b/lib/ubsan.h +@@ -78,6 +78,12 @@ struct invalid_value_data { + struct type_descriptor *type; + }; + ++struct alignment_assumption_data { ++ struct source_location location; ++ struct source_location assumption_location; ++ struct type_descriptor *type; ++}; ++ + #if defined(CONFIG_ARCH_SUPPORTS_INT128) + typedef __int128 s_max; + typedef unsigned __int128 u_max; +-- +2.27.0 + diff --git a/queue-5.10/x86-efi-remove-efi-pgd-build-time-checks.patch b/queue-5.10/x86-efi-remove-efi-pgd-build-time-checks.patch new file mode 100644 index 00000000000..b56a9d9835e --- /dev/null +++ b/queue-5.10/x86-efi-remove-efi-pgd-build-time-checks.patch @@ -0,0 +1,89 @@ +From 92fe07508c1b4e430dbd3c6932d7fdf5a338f530 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Feb 2021 11:31:31 +0100 +Subject: x86/efi: Remove EFI PGD build time checks + +From: Borislav Petkov + +[ Upstream commit 816ef8d7a2c4182e19bc06ab65751cb9e3951e94 ] + +With CONFIG_X86_5LEVEL, CONFIG_UBSAN and CONFIG_UBSAN_UNSIGNED_OVERFLOW +enabled, clang fails the build with + + x86_64-linux-ld: arch/x86/platform/efi/efi_64.o: in function `efi_sync_low_kernel_mappings': + efi_64.c:(.text+0x22c): undefined reference to `__compiletime_assert_354' + +which happens due to -fsanitize=unsigned-integer-overflow being enabled: + + -fsanitize=unsigned-integer-overflow: Unsigned integer overflow, where + the result of an unsigned integer computation cannot be represented + in its type. Unlike signed integer overflow, this is not undefined + behavior, but it is often unintentional. This sanitizer does not check + for lossy implicit conversions performed before such a computation + (see -fsanitize=implicit-conversion). + +and that fires when the (intentional) EFI_VA_START/END defines overflow +an unsigned long, leading to the assertion expressions not getting +optimized away (on GCC they do)... + +However, those checks are superfluous: the runtime services mapping +code already makes sure the ranges don't overshoot EFI_VA_END as the +EFI mapping range is hardcoded. On each runtime services call, it is +switched to the EFI-specific PGD and even if mappings manage to escape +that last PGD, this won't remain unnoticed for long. + +So rip them out. + +See https://github.com/ClangBuiltLinux/linux/issues/256 for more info. + +Reported-by: Arnd Bergmann +Signed-off-by: Borislav Petkov +Reviewed-by: Nathan Chancellor +Acked-by: Ard Biesheuvel +Tested-by: Nick Desaulniers +Tested-by: Nathan Chancellor +Link: http://lkml.kernel.org/r/20210107223424.4135538-1-arnd@kernel.org +Signed-off-by: Sasha Levin +--- + arch/x86/platform/efi/efi_64.c | 19 ------------------- + 1 file changed, 19 deletions(-) + +diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c +index e1e8d4e3a2139..8efd003540cae 100644 +--- a/arch/x86/platform/efi/efi_64.c ++++ b/arch/x86/platform/efi/efi_64.c +@@ -115,31 +115,12 @@ void efi_sync_low_kernel_mappings(void) + pud_t *pud_k, *pud_efi; + pgd_t *efi_pgd = efi_mm.pgd; + +- /* +- * We can share all PGD entries apart from the one entry that +- * covers the EFI runtime mapping space. +- * +- * Make sure the EFI runtime region mappings are guaranteed to +- * only span a single PGD entry and that the entry also maps +- * other important kernel regions. +- */ +- MAYBE_BUILD_BUG_ON(pgd_index(EFI_VA_END) != pgd_index(MODULES_END)); +- MAYBE_BUILD_BUG_ON((EFI_VA_START & PGDIR_MASK) != +- (EFI_VA_END & PGDIR_MASK)); +- + pgd_efi = efi_pgd + pgd_index(PAGE_OFFSET); + pgd_k = pgd_offset_k(PAGE_OFFSET); + + num_entries = pgd_index(EFI_VA_END) - pgd_index(PAGE_OFFSET); + memcpy(pgd_efi, pgd_k, sizeof(pgd_t) * num_entries); + +- /* +- * As with PGDs, we share all P4D entries apart from the one entry +- * that covers the EFI runtime mapping space. +- */ +- BUILD_BUG_ON(p4d_index(EFI_VA_END) != p4d_index(MODULES_END)); +- BUILD_BUG_ON((EFI_VA_START & P4D_MASK) != (EFI_VA_END & P4D_MASK)); +- + pgd_efi = efi_pgd + pgd_index(EFI_VA_END); + pgd_k = pgd_offset_k(EFI_VA_END); + p4d_efi = p4d_offset(pgd_efi, 0); +-- +2.27.0 + diff --git a/queue-5.10/x86-split_lock-enable-the-split-lock-feature-on-anot.patch b/queue-5.10/x86-split_lock-enable-the-split-lock-feature-on-anot.patch new file mode 100644 index 00000000000..13cbff3bb1a --- /dev/null +++ b/queue-5.10/x86-split_lock-enable-the-split-lock-feature-on-anot.patch @@ -0,0 +1,37 @@ +From 6a9c33ce476cd8025c3d7ee712063de8b4b4a913 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 1 Feb 2021 19:00:07 +0000 +Subject: x86/split_lock: Enable the split lock feature on another Alder Lake + CPU + +From: Fenghua Yu + +[ Upstream commit 8acf417805a5f5c69e9ff66f14cab022c2755161 ] + +Add Alder Lake mobile processor to CPU list to enumerate and enable the +split lock feature. + +Signed-off-by: Fenghua Yu +Signed-off-by: Borislav Petkov +Reviewed-by: Tony Luck +Link: https://lkml.kernel.org/r/20210201190007.4031869-1-fenghua.yu@intel.com +Signed-off-by: Sasha Levin +--- + arch/x86/kernel/cpu/intel.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c +index 59a1e3ce3f145..816fdbec795a4 100644 +--- a/arch/x86/kernel/cpu/intel.c ++++ b/arch/x86/kernel/cpu/intel.c +@@ -1159,6 +1159,7 @@ static const struct x86_cpu_id split_lock_cpu_ids[] __initconst = { + X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, 1), + X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, 1), + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, 1), ++ X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, 1), + {} + }; + +-- +2.27.0 +