Changelog in Linux kernel 6.14.7

 
accel/ivpu: Correct mutex unlock order in job submission [+ + +]
Author: Karol Wachowski <karol.wachowski@intel.com>
Date:   Fri Apr 25 11:36:56 2025 +0200

    accel/ivpu: Correct mutex unlock order in job submission
    
    [ Upstream commit 75680b7cd461b169c7ccd2a0fba7542868b7fce2 ]
    
    The mutex unlock for vdev->submitted_jobs_lock was incorrectly placed
    before unlocking file_priv->lock. Change order of unlocks to avoid potential
    race conditions.
    
    Fixes: 5bbccadaf33e ("accel/ivpu: Abort all jobs after command queue unregister")
    Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
    Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
    Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
    Link: https://lore.kernel.org/r/20250425093656.2228168-1-jacek.lawrynowicz@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

accel/ivpu: Increase state dump msg timeout [+ + +]
Author: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Date:   Fri Apr 25 11:28:22 2025 +0200

    accel/ivpu: Increase state dump msg timeout
    
    commit c4eb2f88d2796ab90c5430e11c48709716181364 upstream.
    
    Increase JMS message state dump command timeout to 100 ms. On some
    platforms, the FW may take a bit longer than 50 ms to dump its state
    to the log buffer and we don't want to miss any debug info during TDR.
    
    Fixes: 5e162f872d7a ("accel/ivpu: Add FW state dump on TDR")
    Cc: stable@vger.kernel.org # v6.13+
    Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
    Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
    Link: https://lore.kernel.org/r/20250425092822.2194465-1-jacek.lawrynowicz@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

accel/ivpu: Separate DB ID and CMDQ ID allocations from CMDQ allocation [+ + +]
Author: Karol Wachowski <karol.wachowski@intel.com>
Date:   Tue Jan 7 18:32:24 2025 +0100

    accel/ivpu: Separate DB ID and CMDQ ID allocations from CMDQ allocation
    
    [ Upstream commit 950942b4813f8c44dbec683fdb140cf4a238516b ]
    
    Move doorbell ID and command queue ID XArray allocations from command
    queue memory allocation function. This will allow ID allocations to be
    done without the need for actual memory allocation.
    
    Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
    Signed-off-by: Maciej Falkowski <maciej.falkowski@linux.intel.com>
    Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
    Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250107173238.381120-2-maciej.falkowski@linux.intel.com
    Stable-dep-of: 75680b7cd461 ("accel/ivpu: Correct mutex unlock order in job submission")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: bpf: Add BHB mitigation to the epilogue for cBPF programs [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Thu Dec 9 15:13:24 2021 +0000

    arm64: bpf: Add BHB mitigation to the epilogue for cBPF programs
    
    commit 0dfefc2ea2f29ced2416017d7e5b1253a54c2735 upstream.
    
    A malicious BPF program may manipulate the branch history to influence
    what the hardware speculates will happen next.
    
    On exit from a BPF program, emit the BHB mititgation sequence.
    
    This is only applied for 'classic' cBPF programs that are loaded by
    seccomp.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: bpf: Only mitigate cBPF programs loaded by unprivileged users [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Tue Apr 29 16:03:38 2025 +0100

    arm64: bpf: Only mitigate cBPF programs loaded by unprivileged users
    
    commit f300769ead032513a68e4a02e806393402e626f8 upstream.
    
    Support for eBPF programs loaded by unprivileged users is typically
    disabled. This means only cBPF programs need to be mitigated for BHB.
    
    In addition, only mitigate cBPF programs that were loaded by an
    unprivileged user. Privileged users can also load the same program
    via eBPF, making the mitigation pointless.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: cpufeature: Move arm64_use_ng_mappings to the .data section to prevent wrong idmap generation [+ + +]
Author: Yeoreum Yun <yeoreum.yun@arm.com>
Date:   Fri May 2 19:04:12 2025 +0100

    arm64: cpufeature: Move arm64_use_ng_mappings to the .data section to prevent wrong idmap generation
    
    commit 363cd2b81cfdf706bbfc9ec78db000c9b1ecc552 upstream.
    
    The PTE_MAYBE_NG macro sets the nG page table bit according to the value
    of "arm64_use_ng_mappings". This variable is currently placed in the
    .bss section. create_init_idmap() is called before the .bss section
    initialisation which is done in early_map_kernel(). Therefore,
    data/test_prot in create_init_idmap() could be set incorrectly through
    the PAGE_KERNEL -> PROT_DEFAULT -> PTE_MAYBE_NG macros.
    
       # llvm-objdump-21 --syms vmlinux-gcc | grep arm64_use_ng_mappings
         ffff800082f242a8 g     O .bss    0000000000000001 arm64_use_ng_mappings
    
    The create_init_idmap() function disassembly compiled with llvm-21:
    
      // create_init_idmap()
      ffff80008255c058: d10103ff            sub     sp, sp, #0x40
      ffff80008255c05c: a9017bfd            stp     x29, x30, [sp, #0x10]
      ffff80008255c060: a90257f6            stp     x22, x21, [sp, #0x20]
      ffff80008255c064: a9034ff4            stp     x20, x19, [sp, #0x30]
      ffff80008255c068: 910043fd            add     x29, sp, #0x10
      ffff80008255c06c: 90003fc8            adrp    x8, 0xffff800082d54000
      ffff80008255c070: d280e06a            mov     x10, #0x703     // =1795
      ffff80008255c074: 91400409            add     x9, x0, #0x1, lsl #12 // =0x1000
      ffff80008255c078: 394a4108            ldrb    w8, [x8, #0x290] ------------- (1)
      ffff80008255c07c: f2e00d0a            movk    x10, #0x68, lsl #48
      ffff80008255c080: f90007e9            str     x9, [sp, #0x8]
      ffff80008255c084: aa0103f3            mov     x19, x1
      ffff80008255c088: aa0003f4            mov     x20, x0
      ffff80008255c08c: 14000000            b       0xffff80008255c08c <__pi_create_init_idmap+0x34>
      ffff80008255c090: aa082d56            orr     x22, x10, x8, lsl #11 -------- (2)
    
    Note (1) is loading the arm64_use_ng_mappings value in w8 and (2) is set
    the text or data prot with the w8 value to set PTE_NG bit. If the .bss
    section isn't initialized, x8 could include a garbage value and generate
    an incorrect mapping.
    
    Annotate arm64_use_ng_mappings as __read_mostly so that it is placed in
    the .data section.
    
    Fixes: 84b04d3e6bdb ("arm64: kernel: Create initial ID map from C code")
    Cc: stable@vger.kernel.org # 6.9.x
    Tested-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
    Link: https://lore.kernel.org/r/20250502180412.3774883-1-yeoreum.yun@arm.com
    [catalin.marinas@arm.com: use __read_mostly instead of __ro_after_init]
    [catalin.marinas@arm.com: slight tweaking of the code comment]
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: imx8mm-verdin: Link reg_usdhc2_vqmmc to usdhc2 [+ + +]
Author: Wojciech Dubowik <Wojciech.Dubowik@mt.com>
Date:   Thu Apr 24 11:59:14 2025 +0200

    arm64: dts: imx8mm-verdin: Link reg_usdhc2_vqmmc to usdhc2
    
    commit 5591ce0069ddda97cdbbea596bed53e698f399c2 upstream.
    
    Define vqmmc regulator-gpio for usdhc2 with vin-supply
    coming from LDO5.
    
    Without this definition LDO5 will be powered down, disabling
    SD card after bootup. This has been introduced in commit
    f5aab0438ef1 ("regulator: pca9450: Fix enable register for LDO5").
    
    Fixes: 6a57f224f734 ("arm64: dts: freescale: add initial support for verdin imx8m mini")
    Fixes: f5aab0438ef1 ("regulator: pca9450: Fix enable register for LDO5")
    Tested-by: Manuel Traut <manuel.traut@mt.com>
    Reviewed-by: Philippe Schenker <philippe.schenker@impulsing.ch>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Wojciech Dubowik <Wojciech.Dubowik@mt.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: insn: Add support for encoding DSB [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Thu Dec 9 15:12:19 2021 +0000

    arm64: insn: Add support for encoding DSB
    
    commit 63de8abd97ddb9b758bd8f915ecbd18e1f1a87a0 upstream.
    
    To generate code in the eBPF epilogue that uses the DSB instruction,
    insn.c needs a heler to encode the type and domain.
    
    Re-use the crm encoding logic from the DMB instruction.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: proton-pack: Add new CPUs 'k' values for branch mitigation [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Mon Aug 12 17:50:22 2024 +0100

    arm64: proton-pack: Add new CPUs 'k' values for branch mitigation
    
    commit efe676a1a7554219eae0b0dcfe1e0cdcc9ef9aef upstream.
    
    Update the list of 'k' values for the branch mitigation from arm's
    website.
    
    Add the values for Cortex-X1C. The MIDR_EL1 value can be found here:
    https://developer.arm.com/documentation/101968/0002/Register-descriptions/AArch>
    
    Link: https://developer.arm.com/documentation/110280/2-0/?lang=en
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: proton-pack: Expose whether the branchy loop k value [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Tue Apr 29 13:55:17 2025 +0100

    arm64: proton-pack: Expose whether the branchy loop k value
    
    commit a1152be30a043d2d4dcb1683415f328bf3c51978 upstream.
    
    Add a helper to expose the k value of the branchy loop. This is needed
    by the BPF JIT to generate the mitigation sequence in BPF programs.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: proton-pack: Expose whether the platform is mitigated by firmware [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Mon Aug 19 14:15:53 2024 +0100

    arm64: proton-pack: Expose whether the platform is mitigated by firmware
    
    commit e7956c92f396a44eeeb6eaf7a5b5e1ad24db6748 upstream.
    
    is_spectre_bhb_fw_affected() allows the caller to determine if the CPU
    is known to need a firmware mitigation. CPUs are either on the list
    of CPUs we know about, or firmware has been queried and reported that
    the platform is affected - and mitigated by firmware.
    
    This helper is not useful to determine if the platform is mitigated
    by firmware. A CPU could be on the know list, but the firmware may
    not be implemented. Its affected but not mitigated.
    
    spectre_bhb_enable_mitigation() handles this distinction by checking
    the firmware state before enabling the mitigation.
    
    Add a helper to expose this state. This will be used by the BPF JIT
    to determine if calling firmware for a mitigation is necessary and
    supported.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: btmtk: Remove the resetting step before downloading the fw [+ + +]
Author: Hao Qin <hao.qin@mediatek.com>
Date:   Sat Mar 15 10:27:30 2025 +0800

    Bluetooth: btmtk: Remove the resetting step before downloading the fw
    
    commit 33634e2ab7c6369391e0ca4b9b97dc861e33d20e upstream.
    
    Remove the resetting step before downloading the fw, as it may cause
    other usb devices to fail to initialise when connected during boot
    on kernels 6.11 and newer.
    
    Signed-off-by: Hao Qin <hao.qin@mediatek.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Cc: "Geoffrey D. Bennett" <g@b4.vu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Scrub packet on bpf_redirect_peer [+ + +]
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date:   Mon May 5 21:58:04 2025 +0200

    bpf: Scrub packet on bpf_redirect_peer
    
    [ Upstream commit c4327229948879814229b46aa26a750718888503 ]
    
    When bpf_redirect_peer is used to redirect packets to a device in
    another network namespace, the skb isn't scrubbed. That can lead skb
    information from one namespace to be "misused" in another namespace.
    
    As one example, this is causing Cilium to drop traffic when using
    bpf_redirect_peer to redirect packets that just went through IPsec
    decryption to a container namespace. The following pwru trace shows (1)
    the packet path from the host's XFRM layer to the container's XFRM
    layer where it's dropped and (2) the number of active skb extensions at
    each function.
    
        NETNS       MARK  IFACE  TUPLE                                FUNC
        4026533547  d00   eth0   10.244.3.124:35473->10.244.2.158:53  xfrm_rcv_cb
                                 .active_extensions = (__u8)2,
        4026533547  d00   eth0   10.244.3.124:35473->10.244.2.158:53  xfrm4_rcv_cb
                                 .active_extensions = (__u8)2,
        4026533547  d00   eth0   10.244.3.124:35473->10.244.2.158:53  gro_cells_receive
                                 .active_extensions = (__u8)2,
        [...]
        4026533547  0     eth0   10.244.3.124:35473->10.244.2.158:53  skb_do_redirect
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  ip_rcv
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  ip_rcv_core
                                 .active_extensions = (__u8)2,
        [...]
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  udp_queue_rcv_one_skb
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  __xfrm_policy_check
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  __xfrm_decode_session
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  security_xfrm_decode_session
                                 .active_extensions = (__u8)2,
        4026534999  0     eth0   10.244.3.124:35473->10.244.2.158:53  kfree_skb_reason(SKB_DROP_REASON_XFRM_POLICY)
                                 .active_extensions = (__u8)2,
    
    In this case, there are no XFRM policies in the container's network
    namespace so the drop is unexpected. When we decrypt the IPsec packet,
    the XFRM state used for decryption is set in the skb extensions. This
    information is preserved across the netns switch. When we reach the
    XFRM policy check in the container's netns, __xfrm_policy_check drops
    the packet with LINUX_MIB_XFRMINNOPOLS because a (container-side) XFRM
    policy can't be found that matches the (host-side) XFRM state used for
    decryption.
    
    This patch fixes this by scrubbing the packet when using
    bpf_redirect_peer, as is done on typical netns switches via veth
    devices except skb->mark and skb->tstamp are not zeroed.
    
    Fixes: 9aa1206e8f482 ("bpf: Add redirect_peer helper")
    Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://patch.msgid.link/1728ead5e0fe45e7a6542c36bd4e3ca07a73b7d6.1746460653.git.paul.chaignon@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: gw: fix RCU/BH usage in cgw_create_job() [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Tue Apr 29 09:05:55 2025 +0200

    can: gw: fix RCU/BH usage in cgw_create_job()
    
    [ Upstream commit 511e64e13d8cc72853275832e3f372607466c18c ]
    
    As reported by Sebastian Andrzej Siewior the use of local_bh_disable()
    is only feasible in uni processor systems to update the modification rules.
    The usual use-case to update the modification rules is to update the data
    of the modifications but not the modification types (AND/OR/XOR/SET) or
    the checksum functions itself.
    
    To omit additional memory allocations to maintain fast modification
    switching times, the modification description space is doubled at gw-job
    creation time so that only the reference to the active modification
    description is changed under rcu protection.
    
    Rename cgw_job::mod to cf_mod and make it a RCU pointer. Allocate in
    cgw_create_job() and free it together with cgw_job in
    cgw_job_free_rcu(). Update all users to dereference cgw_job::cf_mod with
    a RCU accessor and if possible once.
    
    [bigeasy: Replace mod1/mod2 from the Oliver's original patch with dynamic
    allocation, use RCU annotation and accessor]
    
    Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Closes: https://lore.kernel.org/linux-can/20231031112349.y0aLoBrz@linutronix.de/
    Fixes: dd895d7f21b2 ("can: cangw: introduce optional uid to reference created routing jobs")
    Tested-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://patch.msgid.link/20250429070555.cs-7b_eZ@linutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: m_can: m_can_class_allocate_dev(): initialize spin lock on device probe [+ + +]
Author: Antonios Salios <antonios@mwa.re>
Date:   Fri Apr 25 13:17:45 2025 +0200

    can: m_can: m_can_class_allocate_dev(): initialize spin lock on device probe
    
    [ Upstream commit dcaeeb8ae84c5506ebc574732838264f3887738c ]
    
    The spin lock tx_handling_spinlock in struct m_can_classdev is not
    being initialized. This leads the following spinlock bad magic
    complaint from the kernel, eg. when trying to send CAN frames with
    cansend from can-utils:
    
    | BUG: spinlock bad magic on CPU#0, cansend/95
    |  lock: 0xff60000002ec1010, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
    | CPU: 0 UID: 0 PID: 95 Comm: cansend Not tainted 6.15.0-rc3-00032-ga79be02bba5c #5 NONE
    | Hardware name: MachineWare SIM-V (DT)
    | Call Trace:
    | [<ffffffff800133e0>] dump_backtrace+0x1c/0x24
    | [<ffffffff800022f2>] show_stack+0x28/0x34
    | [<ffffffff8000de3e>] dump_stack_lvl+0x4a/0x68
    | [<ffffffff8000de70>] dump_stack+0x14/0x1c
    | [<ffffffff80003134>] spin_dump+0x62/0x6e
    | [<ffffffff800883ba>] do_raw_spin_lock+0xd0/0x142
    | [<ffffffff807a6fcc>] _raw_spin_lock_irqsave+0x20/0x2c
    | [<ffffffff80536dba>] m_can_start_xmit+0x90/0x34a
    | [<ffffffff806148b0>] dev_hard_start_xmit+0xa6/0xee
    | [<ffffffff8065b730>] sch_direct_xmit+0x114/0x292
    | [<ffffffff80614e2a>] __dev_queue_xmit+0x3b0/0xaa8
    | [<ffffffff8073b8fa>] can_send+0xc6/0x242
    | [<ffffffff8073d1c0>] raw_sendmsg+0x1a8/0x36c
    | [<ffffffff805ebf06>] sock_write_iter+0x9a/0xee
    | [<ffffffff801d06ea>] vfs_write+0x184/0x3a6
    | [<ffffffff801d0a88>] ksys_write+0xa0/0xc0
    | [<ffffffff801d0abc>] __riscv_sys_write+0x14/0x1c
    | [<ffffffff8079ebf8>] do_trap_ecall_u+0x168/0x212
    | [<ffffffff807a830a>] handle_exception+0x146/0x152
    
    Initializing the spin lock in m_can_class_allocate_dev solves that
    problem.
    
    Fixes: 1fa80e23c150 ("can: m_can: Introduce a tx_fifo_in_flight counter")
    Signed-off-by: Antonios Salios <antonios@mwa.re>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250425111744.37604-2-antonios@mwa.re
    Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: mcan: m_can_class_unregister(): fix order of unregistration calls [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Fri May 2 16:13:46 2025 +0200

    can: mcan: m_can_class_unregister(): fix order of unregistration calls
    
    commit 0713a1b3276b98c7dafbeefef00d7bc3a9119a84 upstream.
    
    If a driver is removed, the driver framework invokes the driver's
    remove callback. A CAN driver's remove function calls
    unregister_candev(), which calls net_device_ops::ndo_stop further down
    in the call stack for interfaces which are in the "up" state.
    
    The removal of the module causes a warning, as can_rx_offload_del()
    deletes the NAPI, while it is still active, because the interface is
    still up.
    
    To fix the warning, first unregister the network interface, which
    calls net_device_ops::ndo_stop, which disables the NAPI, and then call
    can_rx_offload_del().
    
    Fixes: 1be37d3b0414 ("can: m_can: fix periph RX path: use rx-offload to ensure skbs are sent from softirq context")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20250502-can-rx-offload-del-v1-3-59a9b131589d@pengutronix.de
    Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: mcp251xfd: fix TDC setting for low data bit rates [+ + +]
Author: Kelsey Maes <kelsey@vpprocess.com>
Date:   Wed Apr 30 09:15:01 2025 -0700

    can: mcp251xfd: fix TDC setting for low data bit rates
    
    [ Upstream commit 5e1663810e11c64956aa7e280cf74b2f3284d816 ]
    
    The TDC is currently hardcoded enabled. This means that even for lower
    CAN-FD data bitrates (with a DBRP (data bitrate prescaler) > 2) a TDC
    is configured. This leads to a bus-off condition.
    
    ISO 11898-1 section 11.3.3 says "Transmitter delay compensation" (TDC)
    is only applicable if DBRP is 1 or 2.
    
    To fix the problem, switch the driver to use the TDC calculation
    provided by the CAN driver framework (which respects ISO 11898-1
    section 11.3.3). This has the positive side effect that userspace can
    control TDC as needed.
    
    Demonstration of the feature in action:
    | $ ip link set can0 up type can bitrate 125000 dbitrate 500000 fd on
    | $ ip -details link show can0
    | 3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    |     link/can  promiscuity 0  allmulti 0 minmtu 0 maxmtu 0
    |     can <FD> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
    |         bitrate 125000 sample-point 0.875
    |         tq 50 prop-seg 69 phase-seg1 70 phase-seg2 20 sjw 10 brp 2
    |         mcp251xfd: tseg1 2..256 tseg2 1..128 sjw 1..128 brp 1..256 brp_inc 1
    |         dbitrate 500000 dsample-point 0.875
    |         dtq 125 dprop-seg 6 dphase-seg1 7 dphase-seg2 2 dsjw 1 dbrp 5
    |         mcp251xfd: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..256 dbrp_inc 1
    |         tdcv 0..63 tdco 0..63
    |         clock 40000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 parentbus spi parentdev spi0.0
    | $ ip link set can0 up type can bitrate 1000000 dbitrate 4000000 fd on
    | $ ip -details link show can0
    | 3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    |     link/can  promiscuity 0  allmulti 0 minmtu 0 maxmtu 0
    |     can <FD,TDC-AUTO> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
    |         bitrate 1000000 sample-point 0.750
    |         tq 25 prop-seg 14 phase-seg1 15 phase-seg2 10 sjw 5 brp 1
    |         mcp251xfd: tseg1 2..256 tseg2 1..128 sjw 1..128 brp 1..256 brp_inc 1
    |         dbitrate 4000000 dsample-point 0.700
    |         dtq 25 dprop-seg 3 dphase-seg1 3 dphase-seg2 3 dsjw 1 dbrp 1
    |         tdco 7
    |         mcp251xfd: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..256 dbrp_inc 1
    |         tdcv 0..63 tdco 0..63
    |         clock 40000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 parentbus spi parentdev spi0.0
    
    There has been some confusion about the MCP2518FD using a relative or
    absolute TDCO due to the datasheet specifying a range of [-64,63]. I
    have a custom board with a 40 MHz clock and an estimated loop delay of
    100 to 216 ns. During testing at a data bit rate of 4 Mbit/s I found
    that using can_get_relative_tdco() resulted in bus-off errors. The
    final TDCO value was 1 which corresponds to a 10% SSP in an absolute
    configuration. This behavior is expected if the TDCO value is really
    absolute and not relative. Using priv->can.tdc.tdco instead results in
    a final TDCO of 8, setting the SSP at exactly 80%. This configuration
    works.
    
    The automatic, manual, and off TDC modes were tested at speeds up to,
    and including, 8 Mbit/s on real hardware and behave as expected.
    
    Fixes: 55e5b97f003e ("can: mcp25xxfd: add driver for Microchip MCP25xxFD SPI CAN")
    Reported-by: Kelsey Maes <kelsey@vpprocess.com>
    Closes: https://lore.kernel.org/all/C2121586-C87F-4B23-A933-845362C29CA1@vpprocess.com
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Signed-off-by: Kelsey Maes <kelsey@vpprocess.com>
    Link: https://patch.msgid.link/20250430161501.79370-1-kelsey@vpprocess.com
    [mkl: add comment]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: mcp251xfd: mcp251xfd_remove(): fix order of unregistration calls [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Fri May 2 16:13:44 2025 +0200

    can: mcp251xfd: mcp251xfd_remove(): fix order of unregistration calls
    
    commit 84f5eb833f53ae192baed4cfb8d9eaab43481fc9 upstream.
    
    If a driver is removed, the driver framework invokes the driver's
    remove callback. A CAN driver's remove function calls
    unregister_candev(), which calls net_device_ops::ndo_stop further down
    in the call stack for interfaces which are in the "up" state.
    
    With the mcp251xfd driver the removal of the module causes the
    following warning:
    
    | WARNING: CPU: 0 PID: 352 at net/core/dev.c:7342 __netif_napi_del_locked+0xc8/0xd8
    
    as can_rx_offload_del() deletes the NAPI, while it is still active,
    because the interface is still up.
    
    To fix the warning, first unregister the network interface, which
    calls net_device_ops::ndo_stop, which disables the NAPI, and then call
    can_rx_offload_del().
    
    Fixes: 55e5b97f003e ("can: mcp25xxfd: add driver for Microchip MCP25xxFD SPI CAN")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20250502-can-rx-offload-del-v1-1-59a9b131589d@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rockchip_canfd: rkcanfd_remove(): fix order of unregistration calls [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Fri May 2 16:13:45 2025 +0200

    can: rockchip_canfd: rkcanfd_remove(): fix order of unregistration calls
    
    commit 037ada7a3181300218e4fd78bef6a741cfa7f808 upstream.
    
    If a driver is removed, the driver framework invokes the driver's
    remove callback. A CAN driver's remove function calls
    unregister_candev(), which calls net_device_ops::ndo_stop further down
    in the call stack for interfaces which are in the "up" state.
    
    The removal of the module causes a warning, as can_rx_offload_del()
    deletes the NAPI, while it is still active, because the interface is
    still up.
    
    To fix the warning, first unregister the network interface, which
    calls net_device_ops::ndo_stop, which disables the NAPI, and then call
    can_rx_offload_del().
    
    Fixes: ff60bfbaf67f ("can: rockchip_canfd: add driver for Rockchip CAN-FD controller")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20250502-can-rx-offload-del-v1-2-59a9b131589d@pengutronix.de
    Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable() [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Fri Apr 4 15:31:16 2025 +0200

    clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable()
    
    commit 94cff94634e506a4a44684bee1875d2dbf782722 upstream.
    
    On x86 during boot, clockevent_i8253_disable() can be invoked via
    x86_late_time_init -> hpet_time_init() -> pit_timer_init() which happens
    with enabled interrupts.
    
    If some of the old i8253 hardware is actually used then lockdep will notice
    that i8253_lock is used in hard interrupt context. This causes lockdep to
    complain because it observed the lock being acquired with interrupts
    enabled and in hard interrupt context.
    
    Make clockevent_i8253_disable() acquire the lock with
    raw_spinlock_irqsave() to cure this.
    
    [ tglx: Massage change log and use guard() ]
    
    Fixes: c8c4076723dac ("x86/timer: Skip PIT initialization on modern chipsets")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20250404133116.p-XRWJXf@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm: add missing unlock on in dm_keyslot_evict() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Apr 30 11:05:54 2025 +0300

    dm: add missing unlock on in dm_keyslot_evict()
    
    commit 650266ac4c7230c89bcd1307acf5c9c92cfa85e2 upstream.
    
    We need to call dm_put_live_table() even if dm_get_live_table() returns
    NULL.
    
    Fixes: 9355a9eb21a5 ("dm: support key eviction from keyslot managers of underlying devices")
    Cc: stable@vger.kernel.org      # v5.12+
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
do_umount(): add missing barrier before refcount checks in sync case [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon Apr 28 23:56:14 2025 -0400

    do_umount(): add missing barrier before refcount checks in sync case
    
    [ Upstream commit 65781e19dcfcb4aed1167d87a3ffcc2a0c071d47 ]
    
    do_umount() analogue of the race fixed in 119e1ef80ecf "fix
    __legitimize_mnt()/mntput() race".  Here we want to make sure that
    if __legitimize_mnt() doesn't notice our lock_mount_hash(), we will
    notice their refcount increment.  Harder to hit than mntput_no_expire()
    one, fortunately, and consequences are milder (sync umount acting
    like umount -l on a rare race with RCU pathwalk hitting at just the
    wrong time instead of use-after-free galore mntput_no_expire()
    counterpart used to be hit).  Still a bug...
    
    Fixes: 48a066e72d97 ("RCU'd vfsmounts")
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Documentation: x86/bugs/its: Add ITS documentation [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri Apr 11 15:36:38 2025 -0700

    Documentation: x86/bugs/its: Add ITS documentation
    
    commit 1ac116ce6468670eeda39345a5585df308243dca upstream.
    
    Add the admin-guide for Indirect Target Selection (ITS).
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: Copy AUX read reply data whenever length > 0 [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Sun Apr 20 17:50:03 2025 +0800

    drm/amd/display: Copy AUX read reply data whenever length > 0
    
    commit 3924f45d4de7250a603fd7b50379237a6a0e5adf upstream.
    
    [Why]
    amdgpu_dm_process_dmub_aux_transfer_sync() should return all exact data
    reply from the sink side. Don't do the analysis job in it.
    
    [How]
    Remove unnecessary check condition AUX_TRANSACTION_REPLY_AUX_ACK.
    
    Fixes: ead08b95fa50 ("drm/amd/display: Fix race condition in DPIA AUX transfer")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ray Wu <ray.wu@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 9b540e3fe6796fec4fb1344f3be8952fc2f084d4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix invalid context error in dml helper [+ + +]
Author: Roman Li <Roman.Li@amd.com>
Date:   Mon Apr 14 12:56:48 2025 -0400

    drm/amd/display: Fix invalid context error in dml helper
    
    commit 9984db63742099ee3f3cff35cf71306d10e64356 upstream.
    
    [Why]
    "BUG: sleeping function called from invalid context" error.
    after:
    "drm/amd/display: Protect FPU in dml2_validate()/dml21_validate()"
    
    The populate_dml_plane_cfg_from_plane_state() uses the GFP_KERNEL flag
    for memory allocation, which shouldn't be used in atomic contexts.
    
    The allocation is needed only for using another helper function
    get_scaler_data_for_plane().
    
    [How]
    Modify helpers to pass a pointer to scaler_data within existing context,
    eliminating the need for dynamic memory allocation/deallocation
    and copying.
    
    Fixes: 366e77cd4923 ("drm/amd/display: Protect FPU in dml2_validate()/dml21_validate()")
    Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Roman Li <Roman.Li@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit bd3e84bc98f81b44f2c43936bdadc3241d654259)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix the checking condition in dmub aux handling [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Sun Apr 20 16:29:07 2025 +0800

    drm/amd/display: Fix the checking condition in dmub aux handling
    
    commit bc70e11b550d37fbd9eaed0f113ba560894f1609 upstream.
    
    [Why & How]
    Fix the checking condition for detecting AUX_RET_ERROR_PROTOCOL_ERROR.
    It was wrongly checking by "not equals to"
    
    Reviewed-by: Ray Wu <ray.wu@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1db6c9e9b62e1a8912f0a281c941099fca678da3)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix wrong handling for AUX_DEFER case [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Sun Apr 20 19:22:14 2025 +0800

    drm/amd/display: Fix wrong handling for AUX_DEFER case
    
    commit 65924ec69b29296845c7f628112353438e63ea56 upstream.
    
    [Why]
    We incorrectly ack all bytes get written when the reply actually is defer.
    When it's defer, means sink is not ready for the request. We should
    retry the request.
    
    [How]
    Only reply all data get written when receive I2C_ACK|AUX_ACK. Otherwise,
    reply the number of actual written bytes received from the sink.
    Add some messages to facilitate debugging as well.
    
    Fixes: ad6756b4d773 ("drm/amd/display: Shift dc link aux to aux_payload")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ray Wu <ray.wu@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 3637e457eb0000bc37d8bbbec95964aad2fb29fd)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: more liberal vmin/vmax update for freesync [+ + +]
Author: Aurabindo Pillai <aurabindo.pillai@amd.com>
Date:   Wed Apr 16 11:26:54 2025 -0400

    drm/amd/display: more liberal vmin/vmax update for freesync
    
    commit f1c6be3999d2be2673a51a9be0caf9348e254e52 upstream.
    
    [Why]
    FAMS2 expects vmin/vmax to be updated in the case when freesync is
    off, but supported. But we only update it when freesync is enabled.
    
    [How]
    Change the vsync handler such that dc_stream_adjust_vmin_vmax() its called
    irrespective of whether freesync is enabled. If freesync is supported,
    then there is no harm in updating vmin/vmax registers.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3546
    Reviewed-by: ChiaHsuan Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit cfb2d41831ee5647a4ae0ea7c24971a92d5dfa0d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Remove incorrect checking in dmub aux handler [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Sun Apr 20 16:56:54 2025 +0800

    drm/amd/display: Remove incorrect checking in dmub aux handler
    
    commit 396dc51b3b7ea524bf8061f478332d0039e96d5d upstream.
    
    [Why & How]
    "Request length != reply length" is expected behavior defined in spec.
    It's not an invalid reply. Besides, replied data handling logic is not
    designed to be written in amdgpu_dm_process_dmub_aux_transfer_sync().
    Remove the incorrectly handling section.
    
    Fixes: ead08b95fa50 ("drm/amd/display: Fix race condition in DPIA AUX transfer")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ray Wu <ray.wu@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 81b5c6fa62af62fe89ae9576f41aae37830b94cb)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Shift DMUB AUX reply command if necessary [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Fri Apr 18 16:31:59 2025 +0800

    drm/amd/display: Shift DMUB AUX reply command if necessary
    
    commit 5a3846648c0523fd850b7f0aec78c0139453ab8b upstream.
    
    [Why]
    Defined value of dmub AUX reply command field get updated but didn't
    adjust dm receiving side accordingly.
    
    [How]
    Check the received reply command value to see if it's updated version
    or not. Adjust it if necessary.
    
    Fixes: ead08b95fa50 ("drm/amd/display: Fix race condition in DPIA AUX transfer")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ray Wu <ray.wu@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit d5c9ade755a9afa210840708a12a8f44c0d532f4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/hdp4: use memcfg register to post the write for HDP flush [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Apr 30 12:45:04 2025 -0400

    drm/amdgpu/hdp4: use memcfg register to post the write for HDP flush
    
    commit f690e3974755a650259a45d71456decc9c96a282 upstream.
    
    Reading back the remapped HDP flush register seems to cause
    problems on some platforms. All we need is a read, so read back
    the memcfg register.
    
    Fixes: c9b8dcabb52a ("drm/amdgpu/hdp4.0: do a posting read when flushing HDP")
    Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5c937b4a6050316af37ef214825b6340b5e9e391)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/hdp5.2: use memcfg register to post the write for HDP flush [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Apr 30 12:47:37 2025 -0400

    drm/amdgpu/hdp5.2: use memcfg register to post the write for HDP flush
    
    commit dbc988c689333faeeed44d5561f372ff20395304 upstream.
    
    Reading back the remapped HDP flush register seems to cause
    problems on some platforms. All we need is a read, so read back
    the memcfg register.
    
    Fixes: f756dbac1ce1 ("drm/amdgpu/hdp5.2: do a posting read when flushing HDP")
    Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 4a89b7698e771914b4d5b571600c76e2fdcbe2a9)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/hdp5: use memcfg register to post the write for HDP flush [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Apr 30 12:46:56 2025 -0400

    drm/amdgpu/hdp5: use memcfg register to post the write for HDP flush
    
    commit 0e33e0f339b91eecd9558311449a3d1e728722d4 upstream.
    
    Reading back the remapped HDP flush register seems to cause
    problems on some platforms. All we need is a read, so read back
    the memcfg register.
    
    Fixes: cf424020e040 ("drm/amdgpu/hdp5.0: do a posting read when flushing HDP")
    Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit a5cb344033c7598762e89255e8ff52827abb57a4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/hdp6: use memcfg register to post the write for HDP flush [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Apr 30 12:48:51 2025 -0400

    drm/amdgpu/hdp6: use memcfg register to post the write for HDP flush
    
    commit ca28e80abe4219c8f1a2961ae05102d70af6dc87 upstream.
    
    Reading back the remapped HDP flush register seems to cause
    problems on some platforms. All we need is a read, so read back
    the memcfg register.
    
    Fixes: abe1cbaec6cf ("drm/amdgpu/hdp6.0: do a posting read when flushing HDP")
    Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 84141ff615951359c9a99696fd79a36c465ed847)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/hdp7: use memcfg register to post the write for HDP flush [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Apr 30 12:50:02 2025 -0400

    drm/amdgpu/hdp7: use memcfg register to post the write for HDP flush
    
    commit 5a11a2767731139bf87e667331aa2209e33a1d19 upstream.
    
    Reading back the remapped HDP flush register seems to cause
    problems on some platforms. All we need is a read, so read back
    the memcfg register.
    
    Fixes: 689275140cb8 ("drm/amdgpu/hdp7.0: do a posting read when flushing HDP")
    Reported-by: Alexey Klimov <alexey.klimov@linaro.org>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-April/123150.html
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4119
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3908
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit dbc064adfcf9095e7d895bea87b2f75c1ab23236)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/vcn: using separate VCN1_AON_SOC offset [+ + +]
Author: Ruijing Dong <ruijing.dong@amd.com>
Date:   Fri May 2 11:19:26 2025 -0400

    drm/amdgpu/vcn: using separate VCN1_AON_SOC offset
    
    commit b7e84fb708392b37e5dbb2a95db9b94a0e3f0aa2 upstream.
    
    VCN1_AON_SOC_ADDRESS_3_0 offset varies on different
    VCN generations, the issue in vcn4.0.5 is caused by
    a different VCN1_AON_SOC_ADDRESS_3_0 offset.
    
    This patch does the following:
    
        1. use the same offset for other VCN generations.
        2. use the vcn4.0.5 special offset
        3. update vcn_4_0 and vcn_5_0
    
    Acked-by: Saleemkhan Jamadar <saleemkhan.jamadar@amd.com>
    Reviewed-by: Leo Liu <leo.liu@amd.com>
    Signed-off-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5c89ceda9984498b28716944633a9a01cbb2c90d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: fix pm notifier handling [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Thu May 1 13:46:46 2025 -0400

    drm/amdgpu: fix pm notifier handling
    
    commit 4aaffc85751da5722e858e4333e8cf0aa4b6c78f upstream.
    
    Set the s3/s0ix and s4 flags in the pm notifier so that we can skip
    the resource evictions properly in pm prepare based on whether
    we are suspending or hibernating.  Drop the eviction as processes
    are not frozen at this time, we we can end up getting stuck trying
    to evict VRAM while applications continue to submit work which
    causes the buffers to get pulled back into VRAM.
    
    v2: Move suspend flags out of pm notifier (Mario)
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4178
    Fixes: 2965e6355dcd ("drm/amd: Add Suspend/Hibernate notification callback support")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 06f2dcc241e7e5c681f81fbc46cacdf4bfd7d6d7)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/panel: simple: Update timings for AUO G101EVN010 [+ + +]
Author: Kevin Baker <kevinb@ventureresearch.com>
Date:   Mon May 5 12:02:56 2025 -0500

    drm/panel: simple: Update timings for AUO G101EVN010
    
    [ Upstream commit 7c6fa1797a725732981f2d77711c867166737719 ]
    
    Switch to panel timings based on datasheet for the AUO G101EVN01.0
    LVDS panel. Default timings were tested on the panel.
    
    Previous mode-based timings resulted in horizontal display shift.
    
    Signed-off-by: Kevin Baker <kevinb@ventureresearch.com>
    Fixes: 4fb86404a977 ("drm/panel: simple: Add AUO G101EVN010 panel support")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20250505170256.1385113-1-kevinb@ventureresearch.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20250505170256.1385113-1-kevinb@ventureresearch.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/v3d: Add job to pending list if the reset was skipped [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Wed Apr 30 17:51:52 2025 -0300

    drm/v3d: Add job to pending list if the reset was skipped
    
    commit 35e4079bf1a2570abffce6ababa631afcf8ea0e5 upstream.
    
    When a CL/CSD job times out, we check if the GPU has made any progress
    since the last timeout. If so, instead of resetting the hardware, we skip
    the reset and let the timer get rearmed. This gives long-running jobs a
    chance to complete.
    
    However, when `timedout_job()` is called, the job in question is removed
    from the pending list, which means it won't be automatically freed through
    `free_job()`. Consequently, when we skip the reset and keep the job
    running, the job won't be freed when it finally completes.
    
    This situation leads to a memory leak, as exposed in [1] and [2].
    
    Similarly to commit 704d3d60fec4 ("drm/etnaviv: don't block scheduler when
    GPU is still active"), this patch ensures the job is put back on the
    pending list when extending the timeout.
    
    Cc: stable@vger.kernel.org # 6.0
    Reported-by: Daivik Bhatia <dtgs1208@gmail.com>
    Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12227 [1]
    Closes: https://github.com/raspberrypi/linux/issues/6817 [2]
    Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
    Acked-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Link: https://lore.kernel.org/r/20250430210643.57924-1-mcanal@igalia.com
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe/tests/mocs: Hold XE_FORCEWAKE_ALL for LNCF regs [+ + +]
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
Date:   Mon Apr 28 13:53:57 2025 +0530

    drm/xe/tests/mocs: Hold XE_FORCEWAKE_ALL for LNCF regs
    
    [ Upstream commit 51c0ee84e4dc339287b2d7335f2b54d747794c83 ]
    
    LNCF registers report wrong values when XE_FORCEWAKE_GT
    only is held. Holding XE_FORCEWAKE_ALL ensures correct
    operations on LNCF regs.
    
    V2(Himal):
     - Use xe_force_wake_ref_has_domain
    
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/1999
    Fixes: a6a4ea6d7d37 ("drm/xe: Add mocs kunit")
    Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250428082357.1730068-1-tejas.upadhyay@intel.com
    Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
    (cherry picked from commit 70a2585e582058e94fe4381a337be42dec800337)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe: Add page queue multiplier [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Tue Apr 8 08:59:15 2025 -0700

    drm/xe: Add page queue multiplier
    
    commit 391008f34e711253c5983b0bf52277cc43723127 upstream.
    
    For an unknown reason the math to determine the PF queue size does is
    not correct - compute UMD applications are overflowing the PF queue
    which is fatal. A multippier of 8 fixes the problem.
    
    Fixes: 3338e4f90c14 ("drm/xe: Use topology to determine page fault queue size")
    Cc: stable@vger.kernel.org
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Jagmeet Randhawa <jagmeet.randhawa@intel.com>
    Link: https://lore.kernel.org/r/20250408155915.78770-1-matthew.brost@intel.com
    (cherry picked from commit 29582e0ea75c95668d168b12406e3c56cf5a73c4)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/xe: Release force wake first then runtime power [+ + +]
Author: Shuicheng Lin <shuicheng.lin@intel.com>
Date:   Wed May 7 02:23:02 2025 +0000

    drm/xe: Release force wake first then runtime power
    
    [ Upstream commit 9d271a4f5ba52520e448ab223b1a91c6e35f17c7 ]
    
    xe_force_wake_get() is dependent on xe_pm_runtime_get(), so for
    the release path, xe_force_wake_put() should be called first then
    xe_pm_runtime_put().
    Combine the error path and normal path together with goto.
    
    Fixes: 85d547608ef5 ("drm/xe/xe_gt_debugfs: Update handling of xe_force_wake_get return")
    Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
    Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Link: https://lore.kernel.org/r/20250507022302.2187527-1-shuicheng.lin@intel.com
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    (cherry picked from commit 432cd94efdca06296cc5e76d673546f58aa90ee1)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
erofs: ensure the extra temporary copy is valid for shortened bvecs [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Tue May 6 18:18:50 2025 +0800

    erofs: ensure the extra temporary copy is valid for shortened bvecs
    
    [ Upstream commit 35076d2223c731f7be75af61e67f90807384d030 ]
    
    When compressed data deduplication is enabled, multiple logical extents
    may reference the same compressed physical cluster.
    
    The previous commit 94c43de73521 ("erofs: fix wrong primary bvec
    selection on deduplicated extents") already avoids using shortened
    bvecs.  However, in such cases, the extra temporary buffers also
    need to be preserved for later use in z_erofs_fill_other_copies() to
    to prevent data corruption.
    
    IOWs, extra temporary buffers have to be retained not only due to
    varying start relative offsets (`pageofs_out`, as indicated by
    `pcl->multibases`) but also because of shortened bvecs.
    
    android.hardware.graphics.composer@2.1.so : 270696 bytes
       0:        0..  204185 |  204185 :  628019200.. 628084736 |   65536
    -> 1:   204185..  225536 |   21351 :  544063488.. 544129024 |   65536
       2:   225536..  270696 |   45160 :          0..         0 |       0
    
    com.android.vndk.v28.apex : 93814897 bytes
    ...
       364: 53869896..54095257 |  225361 :  543997952.. 544063488 |   65536
    -> 365: 54095257..54309344 |  214087 :  544063488.. 544129024 |   65536
       366: 54309344..54514557 |  205213 :  544129024.. 544194560 |   65536
    ...
    
    Both 204185 and 54095257 have the same start relative offset of 3481,
    but the logical page 55 of `android.hardware.graphics.composer@2.1.so`
    ranges from 225280 to 229632, forming a shortened bvec [225280, 225536)
    that cannot be used for decompressing the range from 54095257 to
    54309344 of `com.android.vndk.v28.apex`.
    
    Since `pcl->multibases` is already meaningless, just mark `be->keepxcpy`
    on demand for simplicity.
    
    Again, this issue can only lead to data corruption if `-Ededupe` is on.
    
    Fixes: 94c43de73521 ("erofs: fix wrong primary bvec selection on deduplicated extents")
    Reviewed-by: Hongbo Li <lihongbo22@huawei.com>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20250506101850.191506-1-hsiangkao@linux.alibaba.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbnic: Actually flush_tx instead of stalling out [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 08:59:59 2025 -0700

    fbnic: Actually flush_tx instead of stalling out
    
    [ Upstream commit 0f9a959a0addd9bbc47e5d16c36b3a7f97981915 ]
    
    The fbnic_mbx_flush_tx function had a number of issues.
    
    First, we were waiting 200ms for the firmware to process the packets. We
    can drop this to 20ms and in almost all cases this should be more than
    enough time. So by changing this we can significantly reduce shutdown time.
    
    Second, we were not making sure that the Tx path was actually shut off. As
    such we could still have packets added while we were flushing the mailbox.
    To prevent that we can now clear the ready flag for the Tx side and it
    should stay down since the interrupt is disabled.
    
    Third, we kept re-reading the tail due to the second issue. The tail should
    not move after we have started the flush so we can just read it once while
    we are holding the mailbox Tx lock. By doing that we are guaranteed that
    the value should be consistent.
    
    Fourth, we were keeping a count of descriptors cleaned due to the second
    and third issues called out. That count is not a valid reason to be exiting
    the cleanup, and with the tail only being read once we shouldn't see any
    cases where the tail moves after the disable so the tracking of count can
    be dropped.
    
    Fifth, we were using attempts * sleep time to determine how long we would
    wait in our polling loop to flush out the Tx. This can be very imprecise.
    In order to tighten up the timing we are shifting over to using a jiffies
    value of jiffies + 10 * HZ + 1 to determine the jiffies value we should
    stop polling at as this should be accurate within once sleep cycle for the
    total amount of time spent polling.
    
    Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654719929.499179.16406653096197423749.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Cleanup handling of completions [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 09:00:05 2025 -0700

    fbnic: Cleanup handling of completions
    
    [ Upstream commit cdbb2dc3996a60ed3d7431c1239a8ca98c778e04 ]
    
    There was an issue in that if we were to shutdown we could be left with
    a completion in flight as the mailbox went away. To address that I have
    added an fbnic_mbx_evict_all_cmpl function that is meant to essentially
    create a "broken pipe" type response so that all callers will receive an
    error indicating that the connection has been broken as a result of us
    shutting down the mailbox.
    
    Fixes: 378e5cc1c6c6 ("eth: fbnic: hwmon: Add completion infrastructure for firmware requests")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654720578.499179.380252598204530873.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Do not allow mailbox to toggle to ready outside fbnic_mbx_poll_tx_ready [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 09:00:25 2025 -0700

    fbnic: Do not allow mailbox to toggle to ready outside fbnic_mbx_poll_tx_ready
    
    [ Upstream commit ce2fa1dba204c761582674cf2eb9cbe0b949b5c7 ]
    
    We had originally thought to have the mailbox go to ready in the background
    while we were doing other things. One issue with this though is that we
    can't disable it by clearing the ready state without also blocking
    interrupts or calls to mbx_poll as it will just pop back to life during an
    interrupt.
    
    In order to prevent that from happening we can pull the code for toggling
    to ready out of the interrupt path and instead place it in the
    fbnic_mbx_poll_tx_ready path so that it becomes the only spot where the
    Rx/Tx can toggle to the ready state. By doing this we can prevent races
    where we disable the DMA and/or free buffers only to have an interrupt fire
    and undo what we have done.
    
    Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654722518.499179.11612865740376848478.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Fix initialization of mailbox descriptor rings [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 08:59:39 2025 -0700

    fbnic: Fix initialization of mailbox descriptor rings
    
    [ Upstream commit f34343cc11afc7bb1f881c3492bee3484016bf71 ]
    
    Address to issues with the FW mailbox descriptor initialization.
    
    We need to reverse the order of accesses when we invalidate an entry versus
    writing an entry. When writing an entry we write upper and then lower as
    the lower 32b contain the valid bit that makes the entire address valid.
    However for invalidation we should write it in the reverse order so that
    the upper is marked invalid before we update it.
    
    Without this change we may see FW attempt to access pages with the upper
    32b of the address set to 0 which will likely result in DMAR faults due to
    write access failures on mailbox shutdown.
    
    Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654717972.499179.8083789731819297034.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Gate AXI read/write enabling on FW mailbox [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 08:59:46 2025 -0700

    fbnic: Gate AXI read/write enabling on FW mailbox
    
    [ Upstream commit 3b12f00ddd08e888273b2ac0488d396d90a836fc ]
    
    In order to prevent the device from throwing spurious writes and/or reads
    at us we need to gate the AXI fabric interface to the PCIe until such time
    as we know the FW is in a known good state.
    
    To accomplish this we use the mailbox as a mechanism for us to recognize
    that the FW has acknowledged our presence and is no longer sending any
    stale message data to us.
    
    We start in fbnic_mbx_init by calling fbnic_mbx_reset_desc_ring function,
    disabling the DMA in both directions, and then invalidating all the
    descriptors in each ring.
    
    We then poll the mailbox in fbnic_mbx_poll_tx_ready and when the interrupt
    is set by the FW we pick it up and mark the mailboxes as ready, while also
    enabling the DMA.
    
    Once we have completed all the transactions and need to shut down we call
    into fbnic_mbx_clean which will in turn call fbnic_mbx_reset_desc_ring for
    each ring and shut down the DMA and once again invalidate the descriptors.
    
    Fixes: 3646153161f1 ("eth: fbnic: Add register init to set PCIe/Ethernet device config")
    Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654718623.499179.7445197308109347982.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Improve responsiveness of fbnic_mbx_poll_tx_ready [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 09:00:12 2025 -0700

    fbnic: Improve responsiveness of fbnic_mbx_poll_tx_ready
    
    [ Upstream commit ab064f6005973d456f95ae99cd9ea0d8ab676cce ]
    
    There were a couple different issues found in fbnic_mbx_poll_tx_ready.
    Among them were the fact that we were sleeping much longer than we actually
    needed to as the actual FW could respond in under 20ms. The other issue was
    that we would just keep polling the mailbox even if the device itself had
    gone away.
    
    To address the responsiveness issues we can decrease the sleeps to 20ms and
    use a jiffies based timeout value rather than just counting the number of
    times we slept and then polled.
    
    To address the hardware going away we can move the check for the firmware
    BAR being present from where it was and place it inside the loop after the
    mailbox descriptor ring is initialized and before we sleep so that we just
    abort and return an error if the device went away during initialization.
    
    With these two changes we see a significant improvement in boot times for
    the driver.
    
    Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654721224.499179.2698616208976624755.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbnic: Pull fbnic_fw_xmit_cap_msg use out of interrupt context [+ + +]
Author: Alexander Duyck <alexanderduyck@fb.com>
Date:   Tue May 6 09:00:18 2025 -0700

    fbnic: Pull fbnic_fw_xmit_cap_msg use out of interrupt context
    
    [ Upstream commit 1b34d1c1dc8384884febd83140c9afbc7c4b9eb8 ]
    
    This change pulls the call to fbnic_fw_xmit_cap_msg out of
    fbnic_mbx_init_desc_ring and instead places it in the polling function for
    getting the Tx ready. Doing that we can avoid the potential issue with an
    interrupt coming in later from the firmware that causes it to get fired in
    interrupt context.
    
    Fixes: 20d2e88cc746 ("eth: fbnic: Add initial messaging to notify FW of our presence")
    Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/174654721876.499179.9839651602256668493.stgit@ahduyck-xeon-server.home.arpa
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: arm_scmi: Fix timeout checks on polling path [+ + +]
Author: Cristian Marussi <cristian.marussi@arm.com>
Date:   Mon Mar 10 17:58:00 2025 +0000

    firmware: arm_scmi: Fix timeout checks on polling path
    
    commit c23c03bf1faa1e76be1eba35bad6da6a2a7c95ee upstream.
    
    Polling mode transactions wait for a reply busy-looping without holding a
    spinlock, but currently the timeout checks are based only on elapsed time:
    as a result we could hit a false positive whenever our busy-looping thread
    is pre-empted and scheduled out for a time greater than the polling
    timeout.
    
    Change the checks at the end of the busy-loop to make sure that the polling
    wasn't indeed successful or an out-of-order reply caused the polling to be
    forcibly terminated.
    
    Fixes: 31d2f803c19c ("firmware: arm_scmi: Add sync_cmds_completed_on_ret transport flag")
    Reported-by: Huangjie <huangjie1663@phytium.com.cn>
    Closes: https://lore.kernel.org/arm-scmi/20250123083323.2363749-1-jackhuang021@gmail.com/
    Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
    Cc: stable@vger.kernel.org # 5.18.x
    Message-Id: <20250310175800.1444293-1-cristian.marussi@arm.com>
    Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio() [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Tue Apr 29 01:09:33 2025 +0200

    fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio()
    
    commit bbfe756dc3062c1e934f06e5ba39c239aa953b92 upstream.
    
    If bio_add_folio() fails (because it is full),
    erofs_fileio_scan_folio() needs to submit the I/O request via
    erofs_fileio_rq_submit() and allocate a new I/O request with an empty
    `struct bio`.  Then it retries the bio_add_folio() call.
    
    However, at this point, erofs_onlinefolio_split() has already been
    called which increments `folio->private`; the retry will call
    erofs_onlinefolio_split() again, but there will never be a matching
    erofs_onlinefolio_end() call.  This leaves the folio locked forever
    and all waiters will be stuck in folio_wait_bit_common().
    
    This bug has been added by commit ce63cb62d794 ("erofs: support
    unencoded inodes for fileio"), but was practically unreachable because
    there was room for 256 folios in the `struct bio` - until commit
    9f74ae8c9ac9 ("erofs: shorten bvecs[] for file-backed mounts") which
    reduced the array capacity to 16 folios.
    
    It was now trivial to trigger the bug by manually invoking readahead
    from userspace, e.g.:
    
     posix_fadvise(fd, 0, st.st_size, POSIX_FADV_WILLNEED);
    
    This should be fixed by invoking erofs_onlinefolio_split() only after
    bio_add_folio() has succeeded.  This is safe: asynchronous completions
    invoking erofs_onlinefolio_end() will not unlock the folio because
    erofs_fileio_scan_folio() is still holding a reference to be released
    by erofs_onlinefolio_end() at the end.
    
    Fixes: ce63cb62d794 ("erofs: support unencoded inodes for fileio")
    Fixes: 9f74ae8c9ac9 ("erofs: shorten bvecs[] for file-backed mounts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Reviewed-by: Gao Xiang <xiang@kernel.org>
    Tested-by: Hongbo Li <lihongbo22@huawei.com>
    Link: https://lore.kernel.org/r/20250428230933.3422273-1-max.kellermann@ionos.com
    Signed-off-by: Gao Xiang <xiang@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gre: Fix again IPv6 link-local address generation. [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Sat May 3 00:57:52 2025 +0200

    gre: Fix again IPv6 link-local address generation.
    
    [ Upstream commit 3e6a0243ff002ddbd7ee18a8974ae61d2e6ed00d ]
    
    Use addrconf_addr_gen() to generate IPv6 link-local addresses on GRE
    devices in most cases and fall back to using add_v4_addrs() only in
    case the GRE configuration is incompatible with addrconf_addr_gen().
    
    GRE used to use addrconf_addr_gen() until commit e5dd729460ca ("ip/ip6_gre:
    use the same logic as SIT interfaces when computing v6LL address")
    restricted this use to gretap and ip6gretap devices, and created
    add_v4_addrs() (borrowed from SIT) for non-Ethernet GRE ones.
    
    The original problem came when commit 9af28511be10 ("addrconf: refuse
    isatap eui64 for INADDR_ANY") made __ipv6_isatap_ifid() fail when its
    addr parameter was 0. The commit says that this would create an invalid
    address, however, I couldn't find any RFC saying that the generated
    interface identifier would be wrong. Anyway, since gre over IPv4
    devices pass their local tunnel address to __ipv6_isatap_ifid(), that
    commit broke their IPv6 link-local address generation when the local
    address was unspecified.
    
    Then commit e5dd729460ca ("ip/ip6_gre: use the same logic as SIT
    interfaces when computing v6LL address") tried to fix that case by
    defining add_v4_addrs() and calling it to generate the IPv6 link-local
    address instead of using addrconf_addr_gen() (apart for gretap and
    ip6gretap devices, which would still use the regular
    addrconf_addr_gen(), since they have a MAC address).
    
    That broke several use cases because add_v4_addrs() isn't properly
    integrated into the rest of IPv6 Neighbor Discovery code. Several of
    these shortcomings have been fixed over time, but add_v4_addrs()
    remains broken on several aspects. In particular, it doesn't send any
    Router Sollicitations, so the SLAAC process doesn't start until the
    interface receives a Router Advertisement. Also, add_v4_addrs() mostly
    ignores the address generation mode of the interface
    (/proc/sys/net/ipv6/conf/*/addr_gen_mode), thus breaking the
    IN6_ADDR_GEN_MODE_RANDOM and IN6_ADDR_GEN_MODE_STABLE_PRIVACY cases.
    
    Fix the situation by using add_v4_addrs() only in the specific scenario
    where the normal method would fail. That is, for interfaces that have
    all of the following characteristics:
    
      * run over IPv4,
      * transport IP packets directly, not Ethernet (that is, not gretap
        interfaces),
      * tunnel endpoint is INADDR_ANY (that is, 0),
      * device address generation mode is EUI64.
    
    In all other cases, revert back to the regular addrconf_addr_gen().
    
    Also, remove the special case for ip6gre interfaces in add_v4_addrs(),
    since ip6gre devices now always use addrconf_addr_gen() instead.
    
    Note:
      This patch was originally applied as commit 183185a18ff9 ("gre: Fix
      IPv6 link-local address generation."). However, it was then reverted
      by commit fc486c2d060f ("Revert "gre: Fix IPv6 link-local address
      generation."") because it uncovered another bug that ended up
      breaking net/forwarding/ip6gre_custom_multipath_hash.sh. That other
      bug has now been fixed by commit 4d0ab3a6885e ("ipv6: Start path
      selection from the first nexthop"). Therefore we can now revive this
      GRE patch (no changes since original commit 183185a18ff9 ("gre: Fix
      IPv6 link-local address generation.").
    
    Fixes: e5dd729460ca ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL address")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/a88cc5c4811af36007645d610c95102dccb360a6.1746225214.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: use DSN instead of PCI BDF for ice_adapter index [+ + +]
Author: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Date:   Mon May 5 09:19:38 2025 -0700

    ice: use DSN instead of PCI BDF for ice_adapter index
    
    [ Upstream commit 0093cb194a7511d1e68865fa35b763c72e44c2f0 ]
    
    Use Device Serial Number instead of PCI bus/device/function for
    the index of struct ice_adapter.
    
    Functions on the same physical device should point to the very same
    ice_adapter instance, but with two PFs, when at least one of them is
    PCI-e passed-through to a VM, it is no longer the case - PFs will get
    seemingly random PCI BDF values, and thus indices, what finally leds to
    each of them being on their own instance of ice_adapter. That causes them
    to don't attempt any synchronization of the PTP HW clock usage, or any
    other future resources.
    
    DSN works nicely in place of the index, as it is "immutable" in terms of
    virtualization.
    
    Fixes: 0e2bddf9e5f9 ("ice: add ice_adapter for shared data across PFs on the same NIC")
    Suggested-by: Jacob Keller <jacob.e.keller@intel.com>
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Suggested-by: Jiri Pirko <jiri@resnulli.us>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://patch.msgid.link/20250505161939.2083581-1-anthony.l.nguyen@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: accel: adxl355: Make timestamp 64-bit aligned using aligned_s64 [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Sun Apr 13 11:34:27 2025 +0100

    iio: accel: adxl355: Make timestamp 64-bit aligned using aligned_s64
    
    [ Upstream commit 1bb942287e05dc4c304a003ea85e6dd9a5e7db39 ]
    
    The IIO ABI requires 64-bit aligned timestamps. In this case insufficient
    padding would have been added on architectures where an s64 is only 32-bit
    aligned.  Use aligned_s64 to enforce the correct alignment.
    
    Fixes: 327a0eaf19d5 ("iio: accel: adxl355: Add triggered buffer support")
    Reported-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250413103443.2420727-5-jic23@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: accel: adxl367: fix setting odr for activity time update [+ + +]
Author: Lothar Rubusch <l.rubusch@gmail.com>
Date:   Sun Mar 9 19:35:15 2025 +0000

    iio: accel: adxl367: fix setting odr for activity time update
    
    [ Upstream commit 38f67d0264929762e54ae5948703a21f841fe706 ]
    
    Fix setting the odr value to update activity time based on frequency
    derrived by recent odr, and not by obsolete odr value.
    
    The [small] bug: When _adxl367_set_odr() is called with a new odr value,
    it first writes the new odr value to the hardware register
    ADXL367_REG_FILTER_CTL.
    Second, it calls _adxl367_set_act_time_ms(), which calls
    adxl367_time_ms_to_samples(). Here st->odr still holds the old odr value.
    This st->odr member is used to derrive a frequency value, which is
    applied to update ADXL367_REG_TIME_ACT. Hence, the idea is to update
    activity time, based on possibilities and power consumption by the
    current ODR rate.
    Finally, when the function calls return, again in _adxl367_set_odr() the
    new ODR is assigned to st->odr.
    
    The fix: When setting a new ODR value is set to ADXL367_REG_FILTER_CTL,
    also ADXL367_REG_TIME_ACT should probably be updated with a frequency
    based on the recent ODR value and not the old one. Changing the location
    of the assignment to st->odr fixes this.
    
    Fixes: cbab791c5e2a5 ("iio: accel: add ADXL367 driver")
    Signed-off-by: Lothar Rubusch <l.rubusch@gmail.com>
    Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
    Link: https://patch.msgid.link/20250309193515.2974-1-l.rubusch@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: adc: ad7266: Fix potential timestamp alignment issue. [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Sun Apr 13 11:34:24 2025 +0100

    iio: adc: ad7266: Fix potential timestamp alignment issue.
    
    commit 52d349884738c346961e153f195f4c7fe186fcf4 upstream.
    
    On architectures where an s64 is only 32-bit aligned insufficient padding
    would be left between the earlier elements and the timestamp. Use
    aligned_s64 to enforce the correct placement and ensure the storage is
    large enough.
    
    Fixes: 54e018da3141 ("iio:ad7266: Mark transfer buffer as __be16") # aligned_s64 is much newer.
    Reported-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250413103443.2420727-2-jic23@kernel.org
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: ad7606: fix serial register access [+ + +]
Author: Angelo Dureghello <adureghello@baylibre.com>
Date:   Fri Apr 18 20:37:53 2025 +0200

    iio: adc: ad7606: fix serial register access
    
    commit f083f8a21cc785ebe3a33f756a3fa3660611f8db upstream.
    
    Fix register read/write routine as per datasheet.
    
    When reading multiple consecutive registers, only the first one is read
    properly. This is due to missing chip select deassert and assert again
    between first and second 16bit transfer, as shown in the datasheet
    AD7606C-16, rev 0, figure 110.
    
    Fixes: f2a22e1e172f ("iio: adc: ad7606: Add support for software mode for ad7616")
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
    Link: https://patch.msgid.link/20250418-wip-bl-ad7606-fix-reg-access-v3-1-d5eeb440c738@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: ad7768-1: Fix insufficient alignment of timestamp. [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Sun Apr 13 11:34:25 2025 +0100

    iio: adc: ad7768-1: Fix insufficient alignment of timestamp.
    
    commit ffbc26bc91c1f1eb3dcf5d8776e74cbae21ee13a upstream.
    
    On architectures where an s64 is not 64-bit aligned, this may result
    insufficient alignment of the timestamp and the structure being too small.
    Use aligned_s64 to force the alignment.
    
    Fixes: a1caeebab07e ("iio: adc: ad7768-1: Fix too small buffer passed to iio_push_to_buffers_with_timestamp()") # aligned_s64 newer
    Reported-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250413103443.2420727-3-jic23@kernel.org
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: dln2: Use aligned_s64 for timestamp [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Sun Apr 13 11:34:26 2025 +0100

    iio: adc: dln2: Use aligned_s64 for timestamp
    
    [ Upstream commit 5097eaae98e53f9ab9d35801c70da819b92ca907 ]
    
    Here the lack of marking allows the overall structure to not be
    sufficiently aligned resulting in misplacement of the timestamp
    in iio_push_to_buffers_with_timestamp(). Use aligned_s64 to
    force the alignment on all architectures.
    
    Fixes: 7c0299e879dd ("iio: adc: Add support for DLN2 ADC")
    Reported-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250413103443.2420727-4-jic23@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: adc: rockchip: Fix clock initialization sequence [+ + +]
Author: Simon Xue <xxm@rock-chips.com>
Date:   Wed Mar 12 14:20:16 2025 +0800

    iio: adc: rockchip: Fix clock initialization sequence
    
    commit 839f81de397019f55161c5982d670ac19d836173 upstream.
    
    clock_set_rate should be executed after devm_clk_get_enabled.
    
    Fixes: 97ad10bb2901 ("iio: adc: rockchip_saradc: Make use of devm_clk_get_enabled")
    Signed-off-by: Simon Xue <xxm@rock-chips.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patch.msgid.link/20250312062016.137821-1-xxm@rock-chips.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adis16201: Correct inclinometer channel resolution [+ + +]
Author: Gabriel Shahrouzi <gshahrouzi@gmail.com>
Date:   Mon Apr 21 09:15:39 2025 -0400

    iio: adis16201: Correct inclinometer channel resolution
    
    commit 609bc31eca06c7408e6860d8b46311ebe45c1fef upstream.
    
    The inclinometer channels were previously defined with 14 realbits.
    However, the ADIS16201 datasheet states the resolution for these output
    channels is 12 bits (Page 14, text description; Page 15, table 7).
    
    Correct the realbits value to 12 to accurately reflect the hardware.
    
    Fixes: f7fe1d1dd5a5 ("staging: iio: new adis16201 driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
    Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
    Link: https://patch.msgid.link/20250421131539.912966-1-gshahrouzi@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: pms7003: use aligned_s64 for timestamp [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Thu Apr 17 11:52:36 2025 -0500

    iio: chemical: pms7003: use aligned_s64 for timestamp
    
    commit 6ffa698674053e82e811520642db2650d00d2c01 upstream.
    
    Follow the pattern of other drivers and use aligned_s64 for the
    timestamp. This will ensure that the timestamp is correctly aligned on
    all architectures.
    
    Also move the unaligned.h header while touching this since it was the
    only one not in alphabetical order.
    
    Fixes: 13e945631c2f ("iio:chemical:pms7003: Fix timestamp alignment and prevent data leak.")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Link: https://patch.msgid.link/20250417-iio-more-timestamp-alignment-v1-4-eafac1e22318@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: sps30: use aligned_s64 for timestamp [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Thu Apr 17 11:52:37 2025 -0500

    iio: chemical: sps30: use aligned_s64 for timestamp
    
    commit bb49d940344bcb8e2b19e69d7ac86f567887ea9a upstream.
    
    Follow the pattern of other drivers and use aligned_s64 for the
    timestamp. This will ensure that the timestamp is correctly aligned on
    all architectures.
    
    Fixes: a5bf6fdd19c3 ("iio:chemical:sps30: Fix timestamp alignment")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Link: https://patch.msgid.link/20250417-iio-more-timestamp-alignment-v1-5-eafac1e22318@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: hid-sensor-prox: Fix incorrect OFFSET calculation [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Mon Mar 31 13:50:22 2025 +0800

    iio: hid-sensor-prox: Fix incorrect OFFSET calculation
    
    commit 79dabbd505210e41c88060806c92c052496dd61c upstream.
    
    The OFFSET calculation in the prox_read_raw() was incorrectly using the
    unit exponent, which is intended for SCALE calculations.
    
    Remove the incorrect OFFSET calculation and set it to a fixed value of 0.
    
    Cc: stable@vger.kernel.org
    Fixes: 39a3a0138f61 ("iio: hid-sensors: Added Proximity Sensor Driver")
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://patch.msgid.link/20250331055022.1149736-4-lixu.zhang@intel.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: hid-sensor-prox: Restore lost scale assignments [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Mon Mar 31 13:50:20 2025 +0800

    iio: hid-sensor-prox: Restore lost scale assignments
    
    commit 83ded7cfaccccd2f4041769c313b58b4c9e265ad upstream.
    
    The variables `scale_pre_decml`, `scale_post_decml`, and `scale_precision`
    were assigned in commit d68c592e02f6 ("iio: hid-sensor-prox: Fix scale not
    correct issue"), but due to a merge conflict in
    commit 9c15db92a8e5 ("Merge tag 'iio-for-5.13a' of
    https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next"),
    these assignments were lost.
    
    Add back lost assignments and replace `st->prox_attr` with
    `st->prox_attr[0]` because commit 596ef5cf654b ("iio: hid-sensor-prox: Add
    support for more channels") changed `prox_attr` to an array.
    
    Cc: stable@vger.kernel.org # 5.13+
    Fixes: 9c15db92a8e5 ("Merge tag 'iio-for-5.13a' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next")
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://patch.msgid.link/20250331055022.1149736-2-lixu.zhang@intel.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: hid-sensor-prox: support multi-channel SCALE calculation [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Mon Mar 31 13:50:21 2025 +0800

    iio: hid-sensor-prox: support multi-channel SCALE calculation
    
    commit 8b518cdb03f5f6e06d635cbfd9583d1fdbb39bfd upstream.
    
    With the introduction of multi-channel support in commit 596ef5cf654b
    ("iio: hid-sensor-prox: Add support for more channels"), each channel
    requires an independent SCALE calculation, but the existing code only
    calculates SCALE for a single channel.
    
    Addresses the problem by modifying the driver to perform independent
    SCALE calculations for each channel.
    
    Cc: stable@vger.kernel.org
    Fixes: 596ef5cf654b ("iio: hid-sensor-prox: Add support for more channels")
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://patch.msgid.link/20250331055022.1149736-3-lixu.zhang@intel.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: bmi270: fix initial sampling frequency configuration [+ + +]
Author: Gustavo Silva <gustavograzs@gmail.com>
Date:   Tue Mar 4 15:01:02 2025 -0300

    iio: imu: bmi270: fix initial sampling frequency configuration
    
    [ Upstream commit 6d03811d7a99e08d5928f58120acb45b8ba22b08 ]
    
    In the bmi270_configure_imu() function, the accelerometer and gyroscope
    configuration registers are incorrectly written with the mask
    BMI270_PWR_CONF_ADV_PWR_SAVE_MSK, which is unrelated to these registers.
    
    As a result, the accelerometer's sampling frequency is set to 200 Hz
    instead of the intended 100 Hz.
    
    Remove the mask to ensure the correct bits are set in the configuration
    registers.
    
    Fixes: 3ea51548d6b2 ("iio: imu: Add i2c driver for bmi270 imu")
    Signed-off-by: Gustavo Silva <gustavograzs@gmail.com>
    Reviewed-by: Alex Lanzano <lanzano.alex@gmail.com>
    Link: https://patch.msgid.link/20250304-bmi270-odr-fix-v1-1-384dbcd699fb@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: imu: inv_mpu6050: align buffer for timestamp [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Thu Apr 17 11:52:39 2025 -0500

    iio: imu: inv_mpu6050: align buffer for timestamp
    
    commit 1d2d8524eaffc4d9a116213520d2c650e07c9cc6 upstream.
    
    Align the buffer used with iio_push_to_buffers_with_timestamp() to
    ensure the s64 timestamp is aligned to 8 bytes.
    
    Fixes: 0829edc43e0a ("iio: imu: inv_mpu6050: read the full fifo when processing data")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250417-iio-more-timestamp-alignment-v1-7-eafac1e22318@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_fifo [+ + +]
Author: Silvano Seva <s.seva@4sigma.it>
Date:   Tue Mar 11 09:49:47 2025 +0100

    iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_fifo
    
    commit 159ca7f18129834b6f4c7eae67de48e96c752fc9 upstream.
    
    Prevent st_lsm6dsx_read_fifo from falling in an infinite loop in case
    pattern_len is equal to zero and the device FIFO is not empty.
    
    Fixes: 290a6ce11d93 ("iio: imu: add support to lsm6dsx driver")
    Signed-off-by: Silvano Seva <s.seva@4sigma.it>
    Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20250311085030.3593-2-s.seva@4sigma.it
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_tagged_fifo [+ + +]
Author: Silvano Seva <s.seva@4sigma.it>
Date:   Tue Mar 11 09:49:49 2025 +0100

    iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_tagged_fifo
    
    commit 8114ef86e2058e2554111b793596f17bee23fa15 upstream.
    
    Prevent st_lsm6dsx_read_tagged_fifo from falling in an infinite loop in
    case pattern_len is equal to zero and the device FIFO is not empty.
    
    Fixes: 801a6e0af0c6 ("iio: imu: st_lsm6dsx: add support to LSM6DSO")
    Signed-off-by: Silvano Seva <s.seva@4sigma.it>
    Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20250311085030.3593-4-s.seva@4sigma.it
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: opt3001: fix deadlock due to concurrent flag access [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Fri Mar 21 19:10:00 2025 +0100

    iio: light: opt3001: fix deadlock due to concurrent flag access
    
    commit f063a28002e3350088b4577c5640882bf4ea17ea upstream.
    
    The threaded IRQ function in this driver is reading the flag twice: once to
    lock a mutex and once to unlock it. Even though the code setting the flag
    is designed to prevent it, there are subtle cases where the flag could be
    true at the mutex_lock stage and false at the mutex_unlock stage. This
    results in the mutex not being unlocked, resulting in a deadlock.
    
    Fix it by making the opt3001_irq() code generally more robust, reading the
    flag into a variable and using the variable value at both stages.
    
    Fixes: 94a9b7b1809f ("iio: light: add support for TI's opt3001 light sensor")
    Cc: stable@vger.kernel.org
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Link: https://patch.msgid.link/20250321-opt3001-irq-fix-v1-1-6c520d851562@bootlin.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: pressure: mprls0025pa: use aligned_s64 for timestamp [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Apr 18 11:17:14 2025 -0500

    iio: pressure: mprls0025pa: use aligned_s64 for timestamp
    
    commit ffcd19e9f4cca0c8f9e23e88f968711acefbb37b upstream.
    
    Follow the pattern of other drivers and use aligned_s64 for the
    timestamp. This will ensure the struct itself it also 8-byte aligned.
    
    While touching this, convert struct mpr_chan to an anonymous struct
    to consolidate the code a bit to make it easier for future readers.
    
    Fixes: 713337d9143e ("iio: pressure: Honeywell mprls0025pa pressure sensor")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250418-iio-more-timestamp-alignment-v2-2-d6a5d2b1c9fe@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: temp: maxim-thermocouple: Fix potential lack of DMA safe buffer. [+ + +]
Author: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date:   Sun Apr 13 11:34:36 2025 +0100

    iio: temp: maxim-thermocouple: Fix potential lack of DMA safe buffer.
    
    [ Upstream commit f79aeb6c631b57395f37acbfbe59727e355a714c ]
    
    The trick of using __aligned(IIO_DMA_MINALIGN) ensures that there is
    no overlap between buffers used for DMA and those used for driver
    state storage that are before the marking. It doesn't ensure
    anything above state variables found after the marking. Hence
    move this particular bit of state earlier in the structure.
    
    Fixes: 10897f34309b ("iio: temp: maxim_thermocouple: Fix alignment for DMA safety")
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250413103443.2420727-14-jic23@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: cyttsp5 - ensure minimum reset pulse width [+ + +]
Author: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Date:   Thu Apr 10 14:46:32 2025 -0400

    Input: cyttsp5 - ensure minimum reset pulse width
    
    commit c6cb8bf79466ae66bd0d07338c7c505ce758e9d7 upstream.
    
    The current reset pulse width is measured to be 5us on a
    Renesas RZ/G2L SOM. The manufacturer's minimum reset pulse width is
    specified as 10us.
    
    Extend reset pulse width to make sure it is long enough on all platforms.
    
    Also reword confusing comments about reset pin assertion.
    
    Fixes: 5b0c03e24a06 ("Input: Add driver for Cypress Generation 5 touchscreen")
    Cc: stable@vger.kernel.org
    Acked-by: Alistair Francis <alistair@alistair23.me>
    Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Link: https://lore.kernel.org/r/20250410184633.1164837-1-hugo@hugovil.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: cyttsp5 - fix power control issue on wakeup [+ + +]
Author: Mikael Gonella-Bolduc <mgonellabolduc@dimonoff.com>
Date:   Wed Apr 23 09:52:43 2025 -0400

    Input: cyttsp5 - fix power control issue on wakeup
    
    commit 7675b5efd81fe6d524e29d5a541f43201e98afa8 upstream.
    
    The power control function ignores the "on" argument when setting the
    report ID, and thus is always sending HID_POWER_SLEEP. This causes a
    problem when trying to wakeup.
    
    Fix by sending the state variable, which contains the proper HID_POWER_ON or
    HID_POWER_SLEEP based on the "on" argument.
    
    Fixes: 3c98b8dbdced ("Input: cyttsp5 - implement proper sleep and wakeup procedures")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikael Gonella-Bolduc <mgonellabolduc@dimonoff.com>
    Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Reviewed-by: Alistair Francis <alistair@alistair23.me>
    Link: https://lore.kernel.org/r/20250423135243.1261460-1-hugo@hugovil.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: mtk-pmic-keys - fix possible null pointer dereference [+ + +]
Author: Gary Bisson <bisson.gary@gmail.com>
Date:   Tue Apr 29 09:16:29 2025 -0700

    Input: mtk-pmic-keys - fix possible null pointer dereference
    
    commit 11cdb506d0fbf5ac05bf55f5afcb3a215c316490 upstream.
    
    In mtk_pmic_keys_probe, the regs parameter is only set if the button is
    parsed in the device tree. However, on hardware where the button is left
    floating, that node will most likely be removed not to enable that
    input. In that case the code will try to dereference a null pointer.
    
    Let's use the regs struct instead as it is defined for all supported
    platforms. Note that it is ok setting the key reg even if that latter is
    disabled as the interrupt won't be enabled anyway.
    
    Fixes: b581acb49aec ("Input: mtk-pmic-keys - transfer per-key bit in mtk_pmic_keys_regs")
    Signed-off-by: Gary Bisson <bisson.gary@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - enable InterTouch on Dell Precision M3800 [+ + +]
Author: Aditya Garg <gargaditya08@live.com>
Date:   Wed May 7 12:12:15 2025 -0700

    Input: synaptics - enable InterTouch on Dell Precision M3800
    
    commit a609cb4cc07aa9ab8f50466622814356c06f2c17 upstream.
    
    Enable InterTouch mode on Dell Precision M3800 by adding "DLL060d" to
    the list of SMBus-enabled variants.
    
    Reported-by: Markus Rathgeb <maggu2810@gmail.com>
    Signed-off-by: Aditya Garg <gargaditya08@live.com>
    Link: https://lore.kernel.org/r/PN3PR01MB959789DD6D574E16141E5DC4B888A@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - enable InterTouch on Dynabook Portege X30-D [+ + +]
Author: Manuel Fombuena <fombuena@outlook.com>
Date:   Wed May 7 12:05:26 2025 -0700

    Input: synaptics - enable InterTouch on Dynabook Portege X30-D
    
    commit 6d7ea0881000966607772451b789b5fb5766f11d upstream.
    
    [    5.989588] psmouse serio1: synaptics: Your touchpad (PNP: TOS0213 PNP0f03) says it can support a different bus. If i2c-hid and hid-rmi are not used, you might want to try setting psmouse.synaptics_intertouch to 1 and report this to linux-input@vger.kernel.org.
    [    6.039923] psmouse serio1: synaptics: Touchpad model: 1, fw: 9.32, id: 0x1e2a1, caps: 0xf00223/0x840300/0x12e800/0x52d884, board id: 3322, fw id: 2658004
    
    The board is labelled TM3322.
    
    Present on the Toshiba / Dynabook Portege X30-D and possibly others.
    
    Confirmed working well with psmouse.synaptics_intertouch=1 and local build.
    
    Signed-off-by: Manuel Fombuena <fombuena@outlook.com>
    Signed-off-by: Aditya Garg <gargaditya08@live.com>
    Link: https://lore.kernel.org/r/PN3PR01MB9597711E7933A08389FEC31DB888A@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - enable InterTouch on Dynabook Portege X30L-G [+ + +]
Author: Aditya Garg <gargaditya08@live.com>
Date:   Wed May 7 12:06:32 2025 -0700

    Input: synaptics - enable InterTouch on Dynabook Portege X30L-G
    
    commit 47d768b32e644b56901bb4bbbdb1feb01ea86c85 upstream.
    
    Enable InterTouch mode on Dynabook Portege X30L-G by adding "TOS01f6" to
    the list of SMBus-enabled variants.
    
    Reported-by: Xuntao Chi <chotaotao1qaz2wsx@gmail.com>
    Tested-by: Xuntao Chi <chotaotao1qaz2wsx@gmail.com>
    Signed-off-by: Aditya Garg <gargaditya08@live.com>
    Link: https://lore.kernel.org/r/PN3PR01MB959786E4AC797160CDA93012B888A@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - enable InterTouch on TUXEDO InfinityBook Pro 14 v5 [+ + +]
Author: Aditya Garg <gargaditya08@live.com>
Date:   Wed May 7 12:09:00 2025 -0700

    Input: synaptics - enable InterTouch on TUXEDO InfinityBook Pro 14 v5
    
    commit 2abc698ac77314e0de5b33a6d96a39c5159d88e4 upstream.
    
    Enable InterTouch mode on TUXEDO InfinityBook Pro 14 v5 by adding
    "SYN1221" to the list of SMBus-enabled variants.
    
    Add support for InterTouch on SYN1221 by adding it to the list of
    SMBus-enabled variants.
    
    Reported-by: Matthias Eilert <kernel.hias@eilert.tech>
    Tested-by: Matthias Eilert <kernel.hias@eilert.tech>
    Signed-off-by: Aditya Garg <gargaditya08@live.com>
    Link: https://lore.kernel.org/r/PN3PR01MB9597C033C4BC20EE2A0C4543B888A@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - enable SMBus for HP Elitebook 850 G1 [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Wed May 7 14:52:55 2025 -0700

    Input: synaptics - enable SMBus for HP Elitebook 850 G1
    
    commit f04f03d3e99bc8f89b6af5debf07ff67d961bc23 upstream.
    
    The kernel reports that the touchpad for this device can support
    SMBus mode.
    
    Reported-by: jt <enopatch@gmail.com>
    Link: https://lore.kernel.org/r/iys5dbv3ldddsgobfkxldazxyp54kay4bozzmagga6emy45jop@2ebvuxgaui4u
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: xpad - add support for 8BitDo Ultimate 2 Wireless Controller [+ + +]
Author: Lode Willems <me@lodewillems.com>
Date:   Tue Apr 22 13:24:27 2025 +0200

    Input: xpad - add support for 8BitDo Ultimate 2 Wireless Controller
    
    commit 22cd66a5db56a07d9e621367cb4d16ff0f6baf56 upstream.
    
    This patch adds support for the 8BitDo Ultimate 2 Wireless Controller.
    Tested using the wireless dongle and plugged in.
    
    Signed-off-by: Lode Willems <me@lodewillems.com>
    Link: https://lore.kernel.org/r/20250422112457.6728-1-me@lodewillems.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: xpad - fix Share button on Xbox One controllers [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Sat May 10 22:59:25 2025 -0700

    Input: xpad - fix Share button on Xbox One controllers
    
    commit 4ef46367073b107ec22f46fe5f12176e87c238e8 upstream.
    
    The Share button, if present, is always one of two offsets from the end of the
    file, depending on the presence of a specific interface. As we lack parsing for
    the identify packet we can't automatically determine the presence of that
    interface, but we can hardcode which of these offsets is correct for a given
    controller.
    
    More controllers are probably fixable by adding the MAP_SHARE_BUTTON in the
    future, but for now I only added the ones that I have the ability to test
    directly.
    
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Link: https://lore.kernel.org/r/20250328234345.989761-2-vi@endrift.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: xpad - fix two controller table values [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Fri Mar 28 16:43:36 2025 -0700

    Input: xpad - fix two controller table values
    
    commit d05a424bea9aa3435009d5c462055008cc1545d8 upstream.
    
    Two controllers -- Mad Catz JOYTECH NEO SE Advanced and PDP Mirror's
    Edge Official -- were missing the value of the mapping field, and thus
    wouldn't detect properly.
    
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Link: https://lore.kernel.org/r/20250328234345.989761-1-vi@endrift.com
    Fixes: 540602a43ae5 ("Input: xpad - add a few new VID/PID combinations")
    Fixes: 3492321e2e60 ("Input: xpad - add multiple supported devices")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/sqpoll: Increase task_work submission batch size [+ + +]
Author: Gabriel Krisman Bertazi <krisman@suse.de>
Date:   Thu May 8 14:12:03 2025 -0400

    io_uring/sqpoll: Increase task_work submission batch size
    
    [ Upstream commit 92835cebab120f8a5f023a26a792a2ac3f816c4f ]
    
    Our QA team reported a 10%-23%, throughput reduction on an io_uring
    sqpoll testcase doing IO to a null_blk, that I traced back to a
    reduction of the device submission queue depth utilization. It turns out
    that, after commit af5d68f8892f ("io_uring/sqpoll: manage task_work
    privately"), we capped the number of task_work entries that can be
    completed from a single spin of sqpoll to only 8 entries, before the
    sqpoll goes around to (potentially) sleep.  While this cap doesn't drive
    the submission side directly, it impacts the completion behavior, which
    affects the number of IO queued by fio per sqpoll cycle on the
    submission side, and io_uring ends up seeing less ios per sqpoll cycle.
    As a result, block layer plugging is less effective, and we see more
    time spent inside the block layer in profilings charts, and increased
    submission latency measured by fio.
    
    There are other places that have increased overhead once sqpoll sleeps
    more often, such as the sqpoll utilization calculation.  But, in this
    microbenchmark, those were not representative enough in perf charts, and
    their removal didn't yield measurable changes in throughput.  The major
    overhead comes from the fact we plug less, and less often, when submitting
    to the block layer.
    
    My benchmark is:
    
    fio --ioengine=io_uring --direct=1 --iodepth=128 --runtime=300 --bs=4k \
        --invalidate=1 --time_based  --ramp_time=10 --group_reporting=1 \
        --filename=/dev/nullb0 --name=RandomReads-direct-nullb-sqpoll-4k-1 \
        --rw=randread --numjobs=1 --sqthread_poll
    
    In one machine, tested on top of Linux 6.15-rc1, we have the following
    baseline:
      READ: bw=4994MiB/s (5236MB/s), 4994MiB/s-4994MiB/s (5236MB/s-5236MB/s), io=439GiB (471GB), run=90001-90001msec
    
    With this patch:
      READ: bw=5762MiB/s (6042MB/s), 5762MiB/s-5762MiB/s (6042MB/s-6042MB/s), io=506GiB (544GB), run=90001-90001msec
    
    which is a 15% improvement in measured bandwidth.  The average
    submission latency is noticeably lowered too.  As measured by
    fio:
    
    Baseline:
       lat (usec): min=20, max=241, avg=99.81, stdev=3.38
    Patched:
       lat (usec): min=26, max=226, avg=86.48, stdev=4.82
    
    If we look at blktrace, we can also see the plugging behavior is
    improved. In the baseline, we end up limited to plugging 8 requests in
    the block layer regardless of the device queue depth size, while after
    patching we can drive more io, and we manage to utilize the full device
    queue.
    
    In the baseline, after a stabilization phase, an ordinary submission
    looks like:
      254,0    1    49942     0.016028795  5977  U   N [iou-sqp-5976] 7
    
    After patching, I see consistently more requests per unplug.
      254,0    1     4996     0.001432872  3145  U   N [iou-sqp-3144] 32
    
    Ideally, the cap size would at least be the deep enough to fill the
    device queue, but we can't predict that behavior, or assume all IO goes
    to a single device, and thus can't guess the ideal batch size.  We also
    don't want to let the tw run unbounded, though I'm not sure it would
    really be a problem.  Instead, let's just give it a more sensible value
    that will allow for more efficient batching.  I've tested with different
    cap values, and initially proposed to increase the cap to 1024.  Jens
    argued it is too big of a bump and I observed that, with 32, I'm no
    longer able to observe this bottleneck in any of my machines.
    
    Fixes: af5d68f8892f ("io_uring/sqpoll: manage task_work privately")
    Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
    Link: https://lore.kernel.org/r/20250508181203.3785544-1-krisman@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring: always arm linked timeouts prior to issue [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Sun May 4 08:06:28 2025 -0600

    io_uring: always arm linked timeouts prior to issue
    
    Commit b53e523261bf058ea4a518b482222e7a277b186b upstream.
    
    There are a few spots where linked timeouts are armed, and not all of
    them adhere to the pre-arm, attempt issue, post-arm pattern. This can
    be problematic if the linked request returns that it will trigger a
    callback later, and does so before the linked timeout is fully armed.
    
    Consolidate all the linked timeout handling into __io_issue_sqe(),
    rather than have it spread throughout the various issue entry points.
    
    Cc: stable@vger.kernel.org
    Link: https://github.com/axboe/liburing/issues/1390
    Reported-by: Chase Hiltz <chase@path.net>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: ensure deferred completions are flushed for multishot [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Wed May 7 07:34:24 2025 -0600

    io_uring: ensure deferred completions are flushed for multishot
    
    commit 687b2bae0efff9b25e071737d6af5004e6e35af5 upstream.
    
    Multishot normally uses io_req_post_cqe() to post completions, but when
    stopping it, it may finish up with a deferred completion. This is fine,
    except if another multishot event triggers before the deferred completions
    get flushed. If this occurs, then CQEs may get reordered in the CQ ring,
    as new multishot completions get posted before the deferred ones are
    flushed. This can cause confusion on the application side, if strict
    ordering is required for the use case.
    
    When multishot posting via io_req_post_cqe(), flush any pending deferred
    completions first, if any.
    
    Cc: stable@vger.kernel.org # 6.1+
    Reported-by: Norman Maurer <norman_maurer@apple.com>
    Reported-by: Christian Mazakas <christian.mazakas@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipvs: fix uninit-value for saddr in do_output_route4 [+ + +]
Author: Julian Anastasov <ja@ssi.bg>
Date:   Sat May 3 01:01:18 2025 +0300

    ipvs: fix uninit-value for saddr in do_output_route4
    
    [ Upstream commit e34090d7214e0516eb8722aee295cb2507317c07 ]
    
    syzbot reports for uninit-value for the saddr argument [1].
    commit 4754957f04f5 ("ipvs: do not use random local source address for
    tunnels") already implies that the input value of saddr
    should be ignored but the code is still reading it which can prevent
    to connect the route. Fix it by changing the argument to ret_saddr.
    
    [1]
    BUG: KMSAN: uninit-value in do_output_route4+0x42c/0x4d0 net/netfilter/ipvs/ip_vs_xmit.c:147
     do_output_route4+0x42c/0x4d0 net/netfilter/ipvs/ip_vs_xmit.c:147
     __ip_vs_get_out_rt+0x403/0x21d0 net/netfilter/ipvs/ip_vs_xmit.c:330
     ip_vs_tunnel_xmit+0x205/0x2380 net/netfilter/ipvs/ip_vs_xmit.c:1136
     ip_vs_in_hook+0x1aa5/0x35b0 net/netfilter/ipvs/ip_vs_core.c:2063
     nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
     nf_hook_slow+0xf7/0x400 net/netfilter/core.c:626
     nf_hook include/linux/netfilter.h:269 [inline]
     __ip_local_out+0x758/0x7e0 net/ipv4/ip_output.c:118
     ip_local_out net/ipv4/ip_output.c:127 [inline]
     ip_send_skb+0x6a/0x3c0 net/ipv4/ip_output.c:1501
     udp_send_skb+0xfda/0x1b70 net/ipv4/udp.c:1195
     udp_sendmsg+0x2fe3/0x33c0 net/ipv4/udp.c:1483
     inet_sendmsg+0x1fc/0x280 net/ipv4/af_inet.c:851
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg+0x267/0x380 net/socket.c:727
     ____sys_sendmsg+0x91b/0xda0 net/socket.c:2566
     ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2620
     __sys_sendmmsg+0x41d/0x880 net/socket.c:2702
     __compat_sys_sendmmsg net/compat.c:360 [inline]
     __do_compat_sys_sendmmsg net/compat.c:367 [inline]
     __se_compat_sys_sendmmsg net/compat.c:364 [inline]
     __ia32_compat_sys_sendmmsg+0xc8/0x140 net/compat.c:364
     ia32_sys_call+0x3ffa/0x41f0 arch/x86/include/generated/asm/syscalls_32.h:346
     do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
     __do_fast_syscall_32+0xb0/0x110 arch/x86/entry/syscall_32.c:306
     do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
     do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:369
     entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:4167 [inline]
     slab_alloc_node mm/slub.c:4210 [inline]
     __kmalloc_cache_noprof+0x8fa/0xe00 mm/slub.c:4367
     kmalloc_noprof include/linux/slab.h:905 [inline]
     ip_vs_dest_dst_alloc net/netfilter/ipvs/ip_vs_xmit.c:61 [inline]
     __ip_vs_get_out_rt+0x35d/0x21d0 net/netfilter/ipvs/ip_vs_xmit.c:323
     ip_vs_tunnel_xmit+0x205/0x2380 net/netfilter/ipvs/ip_vs_xmit.c:1136
     ip_vs_in_hook+0x1aa5/0x35b0 net/netfilter/ipvs/ip_vs_core.c:2063
     nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
     nf_hook_slow+0xf7/0x400 net/netfilter/core.c:626
     nf_hook include/linux/netfilter.h:269 [inline]
     __ip_local_out+0x758/0x7e0 net/ipv4/ip_output.c:118
     ip_local_out net/ipv4/ip_output.c:127 [inline]
     ip_send_skb+0x6a/0x3c0 net/ipv4/ip_output.c:1501
     udp_send_skb+0xfda/0x1b70 net/ipv4/udp.c:1195
     udp_sendmsg+0x2fe3/0x33c0 net/ipv4/udp.c:1483
     inet_sendmsg+0x1fc/0x280 net/ipv4/af_inet.c:851
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg+0x267/0x380 net/socket.c:727
     ____sys_sendmsg+0x91b/0xda0 net/socket.c:2566
     ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2620
     __sys_sendmmsg+0x41d/0x880 net/socket.c:2702
     __compat_sys_sendmmsg net/compat.c:360 [inline]
     __do_compat_sys_sendmmsg net/compat.c:367 [inline]
     __se_compat_sys_sendmmsg net/compat.c:364 [inline]
     __ia32_compat_sys_sendmmsg+0xc8/0x140 net/compat.c:364
     ia32_sys_call+0x3ffa/0x41f0 arch/x86/include/generated/asm/syscalls_32.h:346
     do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
     __do_fast_syscall_32+0xb0/0x110 arch/x86/entry/syscall_32.c:306
     do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
     do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:369
     entry_SYSENTER_compat_after_hwframe+0x84/0x8e
    
    CPU: 0 UID: 0 PID: 22408 Comm: syz.4.5165 Not tainted 6.15.0-rc3-syzkaller-00019-gbc3372351d0c #0 PREEMPT(undef)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2025
    
    Reported-by: syzbot+04b9a82855c8aed20860@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/68138dfa.050a0220.14dd7d.0017.GAE@google.com/
    Fixes: 4754957f04f5 ("ipvs: do not use random local source address for tunnels")
    Signed-off-by: Julian Anastasov <ja@ssi.bg>
    Acked-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix memory leak in parse_lease_state() [+ + +]
Author: Wang Zhaolong <wangzhaolong1@huawei.com>
Date:   Wed Apr 30 11:16:23 2025 +0800

    ksmbd: fix memory leak in parse_lease_state()
    
    [ Upstream commit eb4447bcce915b43b691123118893fca4f372a8f ]
    
    The previous patch that added bounds check for create lease context
    introduced a memory leak. When the bounds check fails, the function
    returns NULL without freeing the previously allocated lease_ctx_info
    structure.
    
    This patch fixes the issue by adding kfree(lreq) before returning NULL
    in both boundary check cases.
    
    Fixes: bab703ed8472 ("ksmbd: add bounds check for create lease context")
    Signed-off-by: Wang Zhaolong <wangzhaolong1@huawei.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: Fix UAF in __close_file_table_ids [+ + +]
Author: Sean Heelan <seanheelan@gmail.com>
Date:   Tue May 6 22:04:52 2025 +0900

    ksmbd: Fix UAF in __close_file_table_ids
    
    commit 36991c1ccde2d5a521577c448ffe07fcccfe104d upstream.
    
    A use-after-free is possible if one thread destroys the file
    via __ksmbd_close_fd while another thread holds a reference to
    it. The existing checks on fp->refcount are not sufficient to
    prevent this.
    
    The fix takes ft->lock around the section which removes the
    file from the file table. This prevents two threads acquiring the
    same file pointer via __close_file_table_ids, as well as the other
    functions which retrieve a file from the IDR and which already use
    this same lock.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Heelan <seanheelan@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: prevent out-of-bounds stream writes by validating *pos [+ + +]
Author: Norbert Szetei <norbert@doyensec.com>
Date:   Fri May 2 08:21:58 2025 +0900

    ksmbd: prevent out-of-bounds stream writes by validating *pos
    
    commit 0ca6df4f40cf4c32487944aaf48319cb6c25accc upstream.
    
    ksmbd_vfs_stream_write() did not validate whether the write offset
    (*pos) was within the bounds of the existing stream data length (v_len).
    If *pos was greater than or equal to v_len, this could lead to an
    out-of-bounds memory write.
    
    This patch adds a check to ensure *pos is less than v_len before
    proceeding. If the condition fails, -EINVAL is returned.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Norbert Szetei <norbert@doyensec.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: prevent rename with empty string [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed Apr 30 11:18:28 2025 +0900

    ksmbd: prevent rename with empty string
    
    commit 53e3e5babc0963a92d856a5ec0ce92c59f54bc12 upstream.
    
    Client can send empty newname string to ksmbd server.
    It will cause a kernel oops from d_alloc.
    This patch return the error when attempting to rename
    a file or directory with an empty new name string.
    
    Cc: stable@vger.kernel.org
    Reported-by: Norbert Szetei <norbert@doyensec.com>
    Tested-by: Norbert Szetei <norbert@doyensec.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Fix uninitialized memcache pointer in user_mem_abort() [+ + +]
Author: Sebastian Ott <sebott@redhat.com>
Date:   Mon May 5 19:31:48 2025 +0200

    KVM: arm64: Fix uninitialized memcache pointer in user_mem_abort()
    
    commit 157dbc4a321f5bb6f8b6c724d12ba720a90f1a7c upstream.
    
    Commit fce886a60207 ("KVM: arm64: Plumb the pKVM MMU in KVM") made the
    initialization of the local memcache variable in user_mem_abort()
    conditional, leaving a codepath where it is used uninitialized via
    kvm_pgtable_stage2_map().
    
    This can fail on any path that requires a stage-2 allocation
    without transition via a permission fault or dirty logging.
    
    Fix this by making sure that memcache is always valid.
    
    Fixes: fce886a60207 ("KVM: arm64: Plumb the pKVM MMU in KVM")
    Signed-off-by: Sebastian Ott <sebott@redhat.com>
    Reviewed-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/kvmarm/3f5db4c7-ccce-fb95-595c-692fa7aad227@redhat.com/
    Link: https://lore.kernel.org/r/20250505173148.33900-1-sebott@redhat.com
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception [+ + +]
Author: Mikhail Lobanov <m.lobanov@rosa.ru>
Date:   Mon Apr 14 20:12:06 2025 +0300

    KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception
    
    commit a2620f8932fa9fdabc3d78ed6efb004ca409019f upstream.
    
    Previously, commit ed129ec9057f ("KVM: x86: forcibly leave nested mode
    on vCPU reset") addressed an issue where a triple fault occurring in
    nested mode could lead to use-after-free scenarios. However, the commit
    did not handle the analogous situation for System Management Mode (SMM).
    
    This omission results in triggering a WARN when KVM forces a vCPU INIT
    after SHUTDOWN interception while the vCPU is in SMM. This situation was
    reprodused using Syzkaller by:
    
      1) Creating a KVM VM and vCPU
      2) Sending a KVM_SMI ioctl to explicitly enter SMM
      3) Executing invalid instructions causing consecutive exceptions and
         eventually a triple fault
    
    The issue manifests as follows:
    
      WARNING: CPU: 0 PID: 25506 at arch/x86/kvm/x86.c:12112
      kvm_vcpu_reset+0x1d2/0x1530 arch/x86/kvm/x86.c:12112
      Modules linked in:
      CPU: 0 PID: 25506 Comm: syz-executor.0 Not tainted
      6.1.130-syzkaller-00157-g164fe5dde9b6 #0
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
      BIOS 1.12.0-1 04/01/2014
      RIP: 0010:kvm_vcpu_reset+0x1d2/0x1530 arch/x86/kvm/x86.c:12112
      Call Trace:
       <TASK>
       shutdown_interception+0x66/0xb0 arch/x86/kvm/svm/svm.c:2136
       svm_invoke_exit_handler+0x110/0x530 arch/x86/kvm/svm/svm.c:3395
       svm_handle_exit+0x424/0x920 arch/x86/kvm/svm/svm.c:3457
       vcpu_enter_guest arch/x86/kvm/x86.c:10959 [inline]
       vcpu_run+0x2c43/0x5a90 arch/x86/kvm/x86.c:11062
       kvm_arch_vcpu_ioctl_run+0x50f/0x1cf0 arch/x86/kvm/x86.c:11283
       kvm_vcpu_ioctl+0x570/0xf00 arch/x86/kvm/../../../virt/kvm/kvm_main.c:4122
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:870 [inline]
       __se_sys_ioctl fs/ioctl.c:856 [inline]
       __x64_sys_ioctl+0x19a/0x210 fs/ioctl.c:856
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81
       entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Architecturally, INIT is blocked when the CPU is in SMM, hence KVM's WARN()
    in kvm_vcpu_reset() to guard against KVM bugs, e.g. to detect improper
    emulation of INIT.  SHUTDOWN on SVM is a weird edge case where KVM needs to
    do _something_ sane with the VMCB, since it's technically undefined, and
    INIT is the least awful choice given KVM's ABI.
    
    So, double down on stuffing INIT on SHUTDOWN, and force the vCPU out of
    SMM to avoid any weirdness (and the WARN).
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: ed129ec9057f ("KVM: x86: forcibly leave nested mode on vCPU reset")
    Cc: stable@vger.kernel.org
    Suggested-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Mikhail Lobanov <m.lobanov@rosa.ru>
    Link: https://lore.kernel.org/r/20250414171207.155121-1-m.lobanov@rosa.ru
    [sean: massage changelog, make it clear this isn't architectural behavior]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86/mmu: Prevent installing hugepages when mem attributes are changing [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Apr 30 15:09:54 2025 -0700

    KVM: x86/mmu: Prevent installing hugepages when mem attributes are changing
    
    commit 9129633d568edd36aa22bf703b12835153cec985 upstream.
    
    When changing memory attributes on a subset of a potential hugepage, add
    the hugepage to the invalidation range tracking to prevent installing a
    hugepage until the attributes are fully updated.  Like the actual hugepage
    tracking updates in kvm_arch_post_set_memory_attributes(), process only
    the head and tail pages, as any potential hugepages that are entirely
    covered by the range will already be tracked.
    
    Note, only hugepage chunks whose current attributes are NOT mixed need to
    be added to the invalidation set, as mixed attributes already prevent
    installing a hugepage, and it's perfectly safe to install a smaller
    mapping for a gfn whose attributes aren't changing.
    
    Fixes: 8dd2eee9d526 ("KVM: x86/mmu: Handle page fault for private memory")
    Cc: stable@vger.kernel.org
    Reported-by: Michael Roth <michael.roth@amd.com>
    Tested-by: Michael Roth <michael.roth@amd.com>
    Link: https://lore.kernel.org/r/20250430220954.522672-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.14.7 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun May 18 08:26:10 2025 +0200

    Linux 6.14.7
    
    Link: https://lore.kernel.org/r/20250512172044.326436266@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Markus Reichelt <lkt+2023@mareichelt.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Christian Heusel <christian@heusel.eu>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20250514125625.496402993@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
loop: Add sanity check for read/write_iter [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Mon Apr 28 22:36:26 2025 +0800

    loop: Add sanity check for read/write_iter
    
    [ Upstream commit f5c84eff634ba003326aa034c414e2a9dcb7c6a7 ]
    
    Some file systems do not support read_iter/write_iter, such as selinuxfs
    in this issue.
    So before calling them, first confirm that the interface is supported and
    then call it.
    
    It is releavant in that vfs_iter_read/write have the check, and removal
    of their used caused szybot to be able to hit this issue.
    
    Fixes: f2fed441c69b ("loop: stop using vfs_iter__{read,write} for buffered I/O")
    Reported-by: syzbot+6af973a3b8dfd2faefdc@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6af973a3b8dfd2faefdc
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20250428143626.3318717-1-lizhi.xu@windriver.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

loop: factor out a loop_assign_backing_file helper [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Fri Jan 31 13:00:38 2025 +0100

    loop: factor out a loop_assign_backing_file helper
    
    [ Upstream commit d278164832618bf2775c6a89e6434e2633de1eed ]
    
    Split the code for setting up a backing file into a helper in preparation
    of adding more code to this path.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20250131120120.1315125-2-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: f5c84eff634b ("loop: Add sanity check for read/write_iter")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memblock: Accept allocated memory before use in memblock_double_array() [+ + +]
Author: Tom Lendacky <thomas.lendacky@amd.com>
Date:   Thu May 8 12:24:10 2025 -0500

    memblock: Accept allocated memory before use in memblock_double_array()
    
    commit da8bf5daa5e55a6af2b285ecda460d6454712ff4 upstream.
    
    When increasing the array size in memblock_double_array() and the slab
    is not yet available, a call to memblock_find_in_range() is used to
    reserve/allocate memory. However, the range returned may not have been
    accepted, which can result in a crash when booting an SNP guest:
    
      RIP: 0010:memcpy_orig+0x68/0x130
      Code: ...
      RSP: 0000:ffffffff9cc03ce8 EFLAGS: 00010006
      RAX: ff11001ff83e5000 RBX: 0000000000000000 RCX: fffffffffffff000
      RDX: 0000000000000bc0 RSI: ffffffff9dba8860 RDI: ff11001ff83e5c00
      RBP: 0000000000002000 R08: 0000000000000000 R09: 0000000000002000
      R10: 000000207fffe000 R11: 0000040000000000 R12: ffffffff9d06ef78
      R13: ff11001ff83e5000 R14: ffffffff9dba7c60 R15: 0000000000000c00
      memblock_double_array+0xff/0x310
      memblock_add_range+0x1fb/0x2f0
      memblock_reserve+0x4f/0xa0
      memblock_alloc_range_nid+0xac/0x130
      memblock_alloc_internal+0x53/0xc0
      memblock_alloc_try_nid+0x3d/0xa0
      swiotlb_init_remap+0x149/0x2f0
      mem_init+0xb/0xb0
      mm_core_init+0x8f/0x350
      start_kernel+0x17e/0x5d0
      x86_64_start_reservations+0x14/0x30
      x86_64_start_kernel+0x92/0xa0
      secondary_startup_64_no_verify+0x194/0x19b
    
    Mitigate this by calling accept_memory() on the memory range returned
    before the slab is available.
    
    Prior to v6.12, the accept_memory() interface used a 'start' and 'end'
    parameter instead of 'start' and 'size', therefore the accept_memory()
    call must be adjusted to specify 'start + size' for 'end' when applying
    to kernels prior to v6.12.
    
    Cc: stable@vger.kernel.org # see patch description, needs adjustments for <= 6.11
    Fixes: dcdfdd40fa82 ("mm: Add support for unaccepted memory")
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Link: https://lore.kernel.org/r/da1ac73bf4ded761e21b4e4bb5178382a580cd73.1746725050.git.thomas.lendacky@amd.com
    Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MIPS: Fix MAX_REG_OFFSET [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Sun Apr 27 13:34:24 2025 +0200

    MIPS: Fix MAX_REG_OFFSET
    
    [ Upstream commit c44572e0cc13c9afff83fd333135a0aa9b27ba26 ]
    
    Fix MAX_REG_OFFSET to point to the last register in 'pt_regs' and not to
    the marker itself, which could allow regs_get_register() to return an
    invalid offset.
    
    Fixes: 40e084a506eb ("MIPS: Add uprobes support.")
    Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/huge_memory: fix dereferencing invalid pmd migration entry [+ + +]
Author: Gavin Guo <gavinguo@igalia.com>
Date:   Mon Apr 21 19:35:36 2025 +0800

    mm/huge_memory: fix dereferencing invalid pmd migration entry
    
    commit be6e843fc51a584672dfd9c4a6a24c8cb81d5fb7 upstream.
    
    When migrating a THP, concurrent access to the PMD migration entry during
    a deferred split scan can lead to an invalid address access, as
    illustrated below.  To prevent this invalid access, it is necessary to
    check the PMD migration entry and return early.  In this context, there is
    no need to use pmd_to_swp_entry and pfn_swap_entry_to_page to verify the
    equality of the target folio.  Since the PMD migration entry is locked, it
    cannot be served as the target.
    
    Mailing list discussion and explanation from Hugh Dickins: "An anon_vma
    lookup points to a location which may contain the folio of interest, but
    might instead contain another folio: and weeding out those other folios is
    precisely what the "folio != pmd_folio((*pmd)" check (and the "risk of
    replacing the wrong folio" comment a few lines above it) is for."
    
    BUG: unable to handle page fault for address: ffffea60001db008
    CPU: 0 UID: 0 PID: 2199114 Comm: tee Not tainted 6.14.0+ #4 NONE
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:split_huge_pmd_locked+0x3b5/0x2b60
    Call Trace:
    <TASK>
    try_to_migrate_one+0x28c/0x3730
    rmap_walk_anon+0x4f6/0x770
    unmap_folio+0x196/0x1f0
    split_huge_page_to_list_to_order+0x9f6/0x1560
    deferred_split_scan+0xac5/0x12a0
    shrinker_debugfs_scan_write+0x376/0x470
    full_proxy_write+0x15c/0x220
    vfs_write+0x2fc/0xcb0
    ksys_write+0x146/0x250
    do_syscall_64+0x6a/0x120
    entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The bug is found by syzkaller on an internal kernel, then confirmed on
    upstream.
    
    Link: https://lkml.kernel.org/r/20250421113536.3682201-1-gavinguo@igalia.com
    Link: https://lore.kernel.org/all/20250414072737.1698513-1-gavinguo@igalia.com/
    Link: https://lore.kernel.org/all/20250418085802.2973519-1-gavinguo@igalia.com/
    Fixes: 84c3fc4e9c56 ("mm: thp: check pmd migration entry in common path")
    Signed-off-by: Gavin Guo <gavinguo@igalia.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Acked-by: Hugh Dickins <hughd@google.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Reviewed-by: Gavin Shan <gshan@redhat.com>
    Cc: Florent Revest <revest@google.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/userfaultfd: fix uninitialized output field for -EAGAIN race [+ + +]
Author: Peter Xu <peterx@redhat.com>
Date:   Thu Apr 24 17:57:28 2025 -0400

    mm/userfaultfd: fix uninitialized output field for -EAGAIN race
    
    commit 95567729173e62e0e60a1f8ad9eb2e1320a8ccac upstream.
    
    While discussing some userfaultfd relevant issues recently, Andrea noticed
    a potential ABI breakage with -EAGAIN on almost all userfaultfd ioctl()s.
    
    Quote from Andrea, explaining how -EAGAIN was processed, and how this
    should fix it (taking example of UFFDIO_COPY ioctl):
    
      The "mmap_changing" and "stale pmd" conditions are already reported as
      -EAGAIN written in the copy field, this does not change it. This change
      removes the subnormal case that left copy.copy uninitialized and required
      apps to explicitly set the copy field to get deterministic
      behavior (which is a requirement contrary to the documentation in both
      the manpage and source code). In turn there's no alteration to backwards
      compatibility as result of this change because userland will find the
      copy field consistently set to -EAGAIN, and not anymore sometime -EAGAIN
      and sometime uninitialized.
    
      Even then the change only can make a difference to non cooperative users
      of userfaultfd, so when UFFD_FEATURE_EVENT_* is enabled, which is not
      true for the vast majority of apps using userfaultfd or this unintended
      uninitialized field may have been noticed sooner.
    
    Meanwhile, since this bug existed for years, it also almost affects all
    ioctl()s that was introduced later.  Besides UFFDIO_ZEROPAGE, these also
    get affected in the same way:
    
      - UFFDIO_CONTINUE
      - UFFDIO_POISON
      - UFFDIO_MOVE
    
    This patch should have fixed all of them.
    
    Link: https://lkml.kernel.org/r/20250424215729.194656-2-peterx@redhat.com
    Fixes: df2cc96e7701 ("userfaultfd: prevent non-cooperative events vs mcopy_atomic races")
    Fixes: f619147104c8 ("userfaultfd: add UFFDIO_CONTINUE ioctl")
    Fixes: fc71884a5f59 ("mm: userfaultfd: add new UFFDIO_POISON ioctl")
    Fixes: adef440691ba ("userfaultfd: UFFDIO_MOVE uABI")
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Reported-by: Andrea Arcangeli <aarcange@redhat.com>
    Suggested-by: Andrea Arcangeli <aarcange@redhat.com>
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Axel Rasmussen <axelrasmussen@google.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: fix folio_pte_batch() on XEN PV [+ + +]
Author: Petr Vaněk <arkamar@atlas.cz>
Date:   Fri May 2 23:50:19 2025 +0200

    mm: fix folio_pte_batch() on XEN PV
    
    commit 7b08b74f3d99f6b801250683c751d391128799ec upstream.
    
    On XEN PV, folio_pte_batch() can incorrectly batch beyond the end of a
    folio due to a corner case in pte_advance_pfn().  Specifically, when the
    PFN following the folio maps to an invalidated MFN,
    
            expected_pte = pte_advance_pfn(expected_pte, nr);
    
    produces a pte_none().  If the actual next PTE in memory is also
    pte_none(), the pte_same() succeeds,
    
            if (!pte_same(pte, expected_pte))
                    break;
    
    the loop is not broken, and batching continues into unrelated memory.
    
    For example, with a 4-page folio, the PTE layout might look like this:
    
    [   53.465673] [ T2552] folio_pte_batch: printing PTE values at addr=0x7f1ac9dc5000
    [   53.465674] [ T2552]   PTE[453] = 000000010085c125
    [   53.465679] [ T2552]   PTE[454] = 000000010085d125
    [   53.465682] [ T2552]   PTE[455] = 000000010085e125
    [   53.465684] [ T2552]   PTE[456] = 000000010085f125
    [   53.465686] [ T2552]   PTE[457] = 0000000000000000 <-- not present
    [   53.465689] [ T2552]   PTE[458] = 0000000101da7125
    
    pte_advance_pfn(PTE[456]) returns a pte_none() due to invalid PFN->MFN
    mapping.  The next actual PTE (PTE[457]) is also pte_none(), so the loop
    continues and includes PTE[457] in the batch, resulting in 5 batched
    entries for a 4-page folio.  This triggers the following warning:
    
    [   53.465751] [ T2552] page: refcount:85 mapcount:20 mapping:ffff88813ff4f6a8 index:0x110 pfn:0x10085c
    [   53.465754] [ T2552] head: order:2 mapcount:80 entire_mapcount:0 nr_pages_mapped:4 pincount:0
    [   53.465756] [ T2552] memcg:ffff888003573000
    [   53.465758] [ T2552] aops:0xffffffff8226fd20 ino:82467c dentry name(?):"libc.so.6"
    [   53.465761] [ T2552] flags: 0x2000000000416c(referenced|uptodate|lru|active|private|head|node=0|zone=2)
    [   53.465764] [ T2552] raw: 002000000000416c ffffea0004021f08 ffffea0004021908 ffff88813ff4f6a8
    [   53.465767] [ T2552] raw: 0000000000000110 ffff888133d8bd40 0000005500000013 ffff888003573000
    [   53.465768] [ T2552] head: 002000000000416c ffffea0004021f08 ffffea0004021908 ffff88813ff4f6a8
    [   53.465770] [ T2552] head: 0000000000000110 ffff888133d8bd40 0000005500000013 ffff888003573000
    [   53.465772] [ T2552] head: 0020000000000202 ffffea0004021701 000000040000004f 00000000ffffffff
    [   53.465774] [ T2552] head: 0000000300000003 8000000300000002 0000000000000013 0000000000000004
    [   53.465775] [ T2552] page dumped because: VM_WARN_ON_FOLIO((_Generic((page + nr_pages - 1), const struct page *: (const struct folio *)_compound_head(page + nr_pages - 1), struct page *: (struct folio *)_compound_head(page + nr_pages - 1))) != folio)
    
    Original code works as expected everywhere, except on XEN PV, where
    pte_advance_pfn() can yield a pte_none() after balloon inflation due to
    MFNs invalidation.  In XEN, pte_advance_pfn() ends up calling
    __pte()->xen_make_pte()->pte_pfn_to_mfn(), which returns pte_none() when
    mfn == INVALID_P2M_ENTRY.
    
    The pte_pfn_to_mfn() documents that nastiness:
    
            If there's no mfn for the pfn, then just create an
            empty non-present pte.  Unfortunately this loses
            information about the original pfn, so
            pte_mfn_to_pfn is asymmetric.
    
    While such hacks should certainly be removed, we can do better in
    folio_pte_batch() and simply check ahead of time how many PTEs we can
    possibly batch in our folio.
    
    This way, we can not only fix the issue but cleanup the code: removing the
    pte_pfn() check inside the loop body and avoiding end_ptr comparison +
    arithmetic.
    
    Link: https://lkml.kernel.org/r/20250502215019.822-2-arkamar@atlas.cz
    Fixes: f8d937761d65 ("mm/memory: optimize fork() with PTE-mapped THP")
    Co-developed-by: David Hildenbrand <david@redhat.com>
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Signed-off-by: Petr Vaněk <arkamar@atlas.cz>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: page_alloc: don't steal single pages from biggest buddy [+ + +]
Author: Johannes Weiner <hannes@cmpxchg.org>
Date:   Mon Feb 24 19:08:24 2025 -0500

    mm: page_alloc: don't steal single pages from biggest buddy
    
    commit c2f6ea38fc1b640aa7a2e155cc1c0410ff91afa2 upstream.
    
    The fallback code searches for the biggest buddy first in an attempt to
    steal the whole block and encourage type grouping down the line.
    
    The approach used to be this:
    
    - Non-movable requests will split the largest buddy and steal the
      remainder. This splits up contiguity, but it allows subsequent
      requests of this type to fall back into adjacent space.
    
    - Movable requests go and look for the smallest buddy instead. The
      thinking is that movable requests can be compacted, so grouping is
      less important than retaining contiguity.
    
    c0cd6f557b90 ("mm: page_alloc: fix freelist movement during block
    conversion") enforces freelist type hygiene, which restricts stealing to
    either claiming the whole block or just taking the requested chunk; no
    additional pages or buddy remainders can be stolen any more.
    
    The patch mishandled when to switch to finding the smallest buddy in that
    new reality.  As a result, it may steal the exact request size, but from
    the biggest buddy.  This causes fracturing for no good reason.
    
    Fix this by committing to the new behavior: either steal the whole block,
    or fall back to the smallest buddy.
    
    Remove single-page stealing from steal_suitable_fallback().  Rename it to
    try_to_steal_block() to make the intentions clear.  If this fails, always
    fall back to the smallest buddy.
    
    The following is from 4 runs of mmtest's thpchallenge.  "Pollute" is
    single page fallback, "steal" is conversion of a partially used block.
    The numbers for free block conversions (omitted) are comparable.
    
                                         vanilla          patched
    
    @pollute[unmovable from reclaimable]:     27              106
    @pollute[unmovable from movable]:         82               46
    @pollute[reclaimable from unmovable]:    256               83
    @pollute[reclaimable from movable]:       46                8
    @pollute[movable from unmovable]:       4841              868
    @pollute[movable from reclaimable]:     5278            12568
    
    @steal[unmovable from reclaimable]:       11               12
    @steal[unmovable from movable]:          113               49
    @steal[reclaimable from unmovable]:       19               34
    @steal[reclaimable from movable]:         47               21
    @steal[movable from unmovable]:          250              183
    @steal[movable from reclaimable]:         81               93
    
    The allocator appears to do a better job at keeping stealing and polluting
    to the first fallback preference.  As a result, the numbers for "from
    movable" - the least preferred fallback option, and most detrimental to
    compactability - are down across the board.
    
    Link: https://lkml.kernel.org/r/20250225001023.1494422-2-hannes@cmpxchg.org
    Fixes: c0cd6f557b90 ("mm: page_alloc: fix freelist movement during block conversion")
    Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
    Suggested-by: Vlastimil Babka <vbabka@suse.cz>
    Reviewed-by: Brendan Jackman <jackmanb@google.com>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: page_alloc: speed up fallbacks in rmqueue_bulk() [+ + +]
Author: Johannes Weiner <hannes@cmpxchg.org>
Date:   Mon Apr 7 14:01:53 2025 -0400

    mm: page_alloc: speed up fallbacks in rmqueue_bulk()
    
    commit 90abee6d7895d5eef18c91d870d8168be4e76e9d upstream.
    
    The test robot identified c2f6ea38fc1b ("mm: page_alloc: don't steal
    single pages from biggest buddy") as the root cause of a 56.4% regression
    in vm-scalability::lru-file-mmap-read.
    
    Carlos reports an earlier patch, c0cd6f557b90 ("mm: page_alloc: fix
    freelist movement during block conversion"), as the root cause for a
    regression in worst-case zone->lock+irqoff hold times.
    
    Both of these patches modify the page allocator's fallback path to be less
    greedy in an effort to stave off fragmentation.  The flip side of this is
    that fallbacks are also less productive each time around, which means the
    fallback search can run much more frequently.
    
    Carlos' traces point to rmqueue_bulk() specifically, which tries to refill
    the percpu cache by allocating a large batch of pages in a loop.  It
    highlights how once the native freelists are exhausted, the fallback code
    first scans orders top-down for whole blocks to claim, then falls back to
    a bottom-up search for the smallest buddy to steal.  For the next batch
    page, it goes through the same thing again.
    
    This can be made more efficient.  Since rmqueue_bulk() holds the
    zone->lock over the entire batch, the freelists are not subject to outside
    changes; when the search for a block to claim has already failed, there is
    no point in trying again for the next page.
    
    Modify __rmqueue() to remember the last successful fallback mode, and
    restart directly from there on the next rmqueue_bulk() iteration.
    
    Oliver confirms that this improves beyond the regression that the test
    robot reported against c2f6ea38fc1b:
    
    commit:
      f3b92176f4 ("tools/selftests: add guard region test for /proc/$pid/pagemap")
      c2f6ea38fc ("mm: page_alloc: don't steal single pages from biggest buddy")
      acc4d5ff0b ("Merge tag 'net-6.15-rc0' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net")
      2c847f27c3 ("mm: page_alloc: speed up fallbacks in rmqueue_bulk()")   <--- your patch
    
    f3b92176f4f7100f c2f6ea38fc1b640aa7a2e155cc1 acc4d5ff0b61eb1715c498b6536 2c847f27c37da65a93d23c237c5
    ---------------- --------------------------- --------------------------- ---------------------------
             %stddev     %change         %stddev     %change         %stddev     %change         %stddev
                 \          |                \          |                \          |                \
      25525364 ±  3%     -56.4%   11135467           -57.8%   10779336           +31.6%   33581409        vm-scalability.throughput
    
    Carlos confirms that worst-case times are almost fully recovered
    compared to before the earlier culprit patch:
    
      2dd482ba627d (before freelist hygiene):    1ms
      c0cd6f557b90  (after freelist hygiene):   90ms
     next-20250319    (steal smallest buddy):  280ms
        this patch                          :    8ms
    
    [jackmanb@google.com: comment updates]
      Link: https://lkml.kernel.org/r/D92AC0P9594X.3BML64MUKTF8Z@google.com
    [hannes@cmpxchg.org: reset rmqueue_mode in rmqueue_buddy() error loop, per Yunsheng Lin]
      Link: https://lkml.kernel.org/r/20250409140023.GA2313@cmpxchg.org
    Link: https://lkml.kernel.org/r/20250407180154.63348-1-hannes@cmpxchg.org
    Fixes: c0cd6f557b90 ("mm: page_alloc: fix freelist movement during block conversion")
    Fixes: c2f6ea38fc1b ("mm: page_alloc: don't steal single pages from biggest buddy")
    Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: Brendan Jackman <jackmanb@google.com>
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Reported-by: Carlos Song <carlos.song@nxp.com>
    Tested-by: Carlos Song <carlos.song@nxp.com>
    Tested-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202503271547.fc08b188-lkp@intel.com
    Reviewed-by: Brendan Jackman <jackmanb@google.com>
    Tested-by: Shivank Garg <shivankg@amd.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>    [6.10+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: vmalloc: support more granular vrealloc() sizing [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Apr 25 17:11:07 2025 -0700

    mm: vmalloc: support more granular vrealloc() sizing
    
    commit a0309faf1cb0622cac7c820150b7abf2024acff5 upstream.
    
    Introduce struct vm_struct::requested_size so that the requested
    (re)allocation size is retained separately from the allocated area size.
    This means that KASAN will correctly poison the correct spans of requested
    bytes.  This also means we can support growing the usable portion of an
    allocation that can already be supported by the existing area's existing
    allocation.
    
    Link: https://lkml.kernel.org/r/20250426001105.it.679-kees@kernel.org
    Fixes: 3ddc2fefe6f3 ("mm: vmalloc: implement vrealloc()")
    Signed-off-by: Kees Cook <kees@kernel.org>
    Reported-by: Erhard Furtner <erhard_f@mailbox.org>
    Closes: https://lore.kernel.org/all/20250408192503.6149a816@outsider.home/
    Reviewed-by: Danilo Krummrich <dakr@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
module: ensure that kobject_put() is safe for module type kobjects [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Wed May 7 09:50:44 2025 +0300

    module: ensure that kobject_put() is safe for module type kobjects
    
    commit a6aeb739974ec73e5217c75a7c008a688d3d5cf1 upstream.
    
    In 'lookup_or_create_module_kobject()', an internal kobject is created
    using 'module_ktype'. So call to 'kobject_put()' on error handling
    path causes an attempt to use an uninitialized completion pointer in
    'module_kobject_release()'. In this scenario, we just want to release
    kobject without an extra synchronization required for a regular module
    unloading process, so adding an extra check whether 'complete()' is
    actually required makes 'kobject_put()' safe.
    
    Reported-by: syzbot+7fb8a372e1f6add936dd@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7fb8a372e1f6add936dd
    Fixes: 942e443127e9 ("module: Fix mod->mkobj.kobj potentially freed too early")
    Cc: stable@vger.kernel.org
    Suggested-by: Petr Pavlu <petr.pavlu@suse.com>
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://lore.kernel.org/r/20250507065044.86529-1-dmantipov@yandex.ru
    Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: dsa: b53: allow leaky reserved multicast [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:00 2025 +0200

    net: dsa: b53: allow leaky reserved multicast
    
    [ Upstream commit 5f93185a757ff38b36f849c659aeef368db15a68 ]
    
    Allow reserved multicast to ignore VLAN membership so STP and other
    management protocols work without a PVID VLAN configured when using a
    vlan aware bridge.
    
    Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-2-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: always rejoin default untagged VLAN on bridge leave [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:05 2025 +0200

    net: dsa: b53: always rejoin default untagged VLAN on bridge leave
    
    [ Upstream commit 13b152ae40495966501697693f048f47430c50fd ]
    
    While JOIN_ALL_VLAN allows to join all VLANs, we still need to keep the
    default VLAN enabled so that untagged traffic stays untagged.
    
    So rejoin the default VLAN even for switches with JOIN_ALL_VLAN support.
    
    Fixes: 48aea33a77ab ("net: dsa: b53: Add JOIN_ALL_VLAN support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-7-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: do not allow to configure VLAN 0 [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:06 2025 +0200

    net: dsa: b53: do not allow to configure VLAN 0
    
    [ Upstream commit 45e9d59d39503bb3e6ab4d258caea4ba6496e2dc ]
    
    Since we cannot set forwarding destinations per VLAN, we should not have
    a VLAN 0 configured, as it would allow untagged traffic to work across
    ports on VLAN aware bridges regardless if a PVID untagged VLAN exists.
    
    So remove the VLAN 0 on join, an re-add it on leave. But only do so if
    we have a VLAN aware bridge, as without it, untagged traffic would
    become tagged with VID 0 on a VLAN unaware bridge.
    
    Fixes: a2482d2ce349 ("net: dsa: b53: Plug in VLAN support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-8-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: do not program vlans when vlan filtering is off [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:07 2025 +0200

    net: dsa: b53: do not program vlans when vlan filtering is off
    
    [ Upstream commit f089652b6b16452535dcc5cbaa6e2bb05acd3f93 ]
    
    Documentation/networking/switchdev.rst says:
    
    - with VLAN filtering turned off: the bridge is strictly VLAN unaware and its
      data path will process all Ethernet frames as if they are VLAN-untagged.
      The bridge VLAN database can still be modified, but the modifications should
      have no effect while VLAN filtering is turned off.
    
    This breaks if we immediately apply the VLAN configuration, so skip
    writing it when vlan_filtering is off.
    
    Fixes: 0ee2af4ebbe3 ("net: dsa: set configure_vlan_while_not_filtering to true by default")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-9-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: do not set learning and unicast/multicast on up [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:10 2025 +0200

    net: dsa: b53: do not set learning and unicast/multicast on up
    
    [ Upstream commit 2e7179c628d3cb9aee75e412473813b099e11ed4 ]
    
    When a port gets set up, b53 disables learning and enables the port for
    flooding. This can undo any bridge configuration on the port.
    
    E.g. the following flow would disable learning on a port:
    
    $ ip link add br0 type bridge
    $ ip link set sw1p1 master br0 <- enables learning for sw1p1
    $ ip link set br0 up
    $ ip link set sw1p1 up <- disables learning again
    
    Fix this by populating dsa_switch_ops::port_setup(), and set up initial
    config there.
    
    Fixes: f9b3827ee66c ("net: dsa: b53: Support setting learning on port")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-12-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix clearing PVID of a port [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:02 2025 +0200

    net: dsa: b53: fix clearing PVID of a port
    
    [ Upstream commit f480851981043d9bb6447ca9883ade9247b9a0ad ]
    
    Currently the PVID of ports are only set when adding/updating VLANs with
    PVID set or removing VLANs, but not when clearing the PVID flag of a
    VLAN.
    
    E.g. the following flow
    
    $ ip link add br0 type bridge vlan_filtering 1
    $ ip link set sw1p1 master bridge
    $ bridge vlan add dev sw1p1 vid 10 pvid untagged
    $ bridge vlan add dev sw1p1 vid 10 untagged
    
    Would keep the PVID set as 10, despite the flag being cleared. Fix this
    by checking if we need to unset the PVID on vlan updates.
    
    Fixes: a2482d2ce349 ("net: dsa: b53: Plug in VLAN support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-4-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix flushing old pvid VLAN on pvid change [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:03 2025 +0200

    net: dsa: b53: fix flushing old pvid VLAN on pvid change
    
    [ Upstream commit 083c6b28c0cbcd83b6af1a10f2c82937129b3438 ]
    
    Presumably the intention here was to flush the VLAN of the old pvid, not
    the added VLAN again, which we already flushed before.
    
    Fixes: a2482d2ce349 ("net: dsa: b53: Plug in VLAN support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-5-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix learning on VLAN unaware bridges [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:09 2025 +0200

    net: dsa: b53: fix learning on VLAN unaware bridges
    
    [ Upstream commit 9f34ad89bcf0e6df6f8b01f1bdab211493fc66d1 ]
    
    When VLAN filtering is off, we configure the switch to forward, but not
    learn on VLAN table misses. This effectively disables learning while not
    filtering.
    
    Fix this by switching to forward and learn. Setting the learning disable
    register will still control whether learning actually happens.
    
    Fixes: dad8d7c6452b ("net: dsa: b53: Properly account for VLAN filtering")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-11-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix toggling vlan_filtering [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:08 2025 +0200

    net: dsa: b53: fix toggling vlan_filtering
    
    [ Upstream commit 2dc2bd57111582895e10f54ea380329c89873f1c ]
    
    To allow runtime switching between vlan aware and vlan non-aware mode,
    we need to properly keep track of any bridge VLAN configuration.
    Likewise, we need to know when we actually switch between both modes, to
    not have to rewrite the full VLAN table every time we update the VLANs.
    
    So keep track of the current vlan_filtering mode, and on changes, apply
    the appropriate VLAN configuration.
    
    Fixes: 0ee2af4ebbe3 ("net: dsa: set configure_vlan_while_not_filtering to true by default")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-10-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix VLAN ID for untagged vlan on bridge leave [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:04 2025 +0200

    net: dsa: b53: fix VLAN ID for untagged vlan on bridge leave
    
    [ Upstream commit a1c1901c5cc881425cc45992ab6c5418174e9e5a ]
    
    The untagged default VLAN is added to the default vlan, which may be
    one, but we modify the VLAN 0 entry on bridge leave.
    
    Fix this to use the correct VLAN entry for the default pvid.
    
    Fixes: fea83353177a ("net: dsa: b53: Fix default VLAN ID")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-6-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: keep CPU port always tagged again [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Tue Apr 29 22:17:01 2025 +0200

    net: dsa: b53: keep CPU port always tagged again
    
    [ Upstream commit 425f11d4cc9bd9e97e6825d9abb2c51a068ca7b5 ]
    
    The Broadcom management header does not carry the original VLAN tag
    state information, just the ingress port, so for untagged frames we do
    not know from which VLAN they originated.
    
    Therefore keep the CPU port always tagged except for VLAN 0.
    
    Fixes the following setup:
    
    $ ip link add br0 type bridge vlan_filtering 1
    $ ip link set sw1p1 master br0
    $ bridge vlan add dev br0 pvid untagged self
    $ ip link add sw1p2.10 link sw1p2 type vlan id 10
    
    Where VID 10 would stay untagged on the CPU port.
    
    Fixes: 2c32a3d3c233 ("net: dsa: b53: Do not force CPU to be always tagged")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20250429201710.330937-3-jonas.gorski@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: mtk_eth_soc: do not reset PSE when setting FE [+ + +]
Author: Frank Wunderlich <frank-w@public-files.de>
Date:   Mon May 5 02:07:58 2025 +0100

    net: ethernet: mtk_eth_soc: do not reset PSE when setting FE
    
    [ Upstream commit e8716b5b0dff1b3d523b4a83fd5e94d57b887c5c ]
    
    Remove redundant PSE reset.
    When setting FE register there is no need to reset PSE,
    doing so may cause FE to work abnormal.
    
    Link: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/3a5223473e086a4b54a2b9a44df7d9ddcc2bc75a
    Fixes: dee4dd10c79aa ("net: ethernet: mtk_eth_soc: ppe: add support for multiple PPEs")
    Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
    Link: https://patch.msgid.link/18f0ac7d83f82defa3342c11ef0d1362f6b81e88.1746406763.git.daniel@makrotopia.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: mtk_eth_soc: reset all TX queues on DMA free [+ + +]
Author: Daniel Golle <daniel@makrotopia.org>
Date:   Mon May 5 02:07:32 2025 +0100

    net: ethernet: mtk_eth_soc: reset all TX queues on DMA free
    
    [ Upstream commit 4db6c75124d871fbabf8243f947d34cc7e0697fc ]
    
    The purpose of resetting the TX queue is to reset the byte and packet
    count as well as to clear the software flow control XOFF bit.
    
    MediaTek developers pointed out that netdev_reset_queue would only
    resets queue 0 of the network device.
    
    Queues that are not reset may cause unexpected issues.
    
    Packets may stop being sent after reset and "transmit timeout" log may
    be displayed.
    
    Import fix from MediaTek's SDK to resolve this issue.
    
    Link: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/319c0d9905579a46dc448579f892f364f1f84818
    Fixes: f63959c7eec31 ("net: ethernet: mtk_eth_soc: implement multi-queue support for per-port queues")
    Signed-off-by: Daniel Golle <daniel@makrotopia.org>
    Link: https://patch.msgid.link/c9ff9adceac4f152239a0f65c397f13547639175.1746406763.git.daniel@makrotopia.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: export a helper for adding up queue stats [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue May 6 17:32:20 2025 -0700

    net: export a helper for adding up queue stats
    
    [ Upstream commit 23fa6a23d97182d36ca3c71e43c804fa91e46a03 ]
    
    Older drivers and drivers with lower queue counts often have a static
    array of queues, rather than allocating structs for each queue on demand.
    Add a helper for adding up qstats from a queue range. Expectation is
    that driver will pass a queue range [netdev->real_num_*x_queues, MAX).
    It was tempting to always use num_*x_queues as the end, but virtio
    seems to clamp its queue count after allocating the netdev. And this
    way we can trivaly reuse the helper for [0, real_..).
    
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://patch.msgid.link/20250507003221.823267-2-kuba@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 001160ec8c59 ("virtio-net: fix total qstat values")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: ipset: fix region locking in hash types [+ + +]
Author: Jozsef Kadlecsik <kadlec@netfilter.org>
Date:   Wed May 7 17:01:59 2025 +0200

    netfilter: ipset: fix region locking in hash types
    
    [ Upstream commit 8478a729c0462273188263136880480729e9efca ]
    
    Region locking introduced in v5.6-rc4 contained three macros to handle
    the region locks: ahash_bucket_start(), ahash_bucket_end() which gave
    back the start and end hash bucket values belonging to a given region
    lock and ahash_region() which should give back the region lock belonging
    to a given hash bucket. The latter was incorrect which can lead to a
    race condition between the garbage collector and adding new elements
    when a hash type of set is defined with timeouts.
    
    Fixes: f66ee0410b1c ("netfilter: ipset: Fix "INFO: rcu detected stall in hash_xxx" reports")
    Reported-by: Kota Toda <kota.toda@gmo-cybersecurity.com>
    Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: unblock ctrl state transition for firmware update [+ + +]
Author: Daniel Wagner <wagi@kernel.org>
Date:   Fri May 2 10:58:00 2025 +0200

    nvme: unblock ctrl state transition for firmware update
    
    [ Upstream commit 650415fca0a97472fdd79725e35152614d1aad76 ]
    
    The original nvme subsystem design didn't have a CONNECTING state; the
    state machine allowed transitions from RESETTING to LIVE directly.
    
    With the introduction of nvme fabrics the CONNECTING state was
    introduce. Over time the nvme-pci started to use the CONNECTING state as
    well.
    
    Eventually, a bug fix for the nvme-fc started to depend that the only
    valid transition to LIVE was from CONNECTING. Though this change didn't
    update the firmware update handler which was still depending on
    RESETTING to LIVE transition.
    
    The simplest way to address it for the time being is to switch into
    CONNECTING state before going to LIVE state.
    
    Fixes: d2fe192348f9 ("nvme: only allow entering LIVE from CONNECTING state")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Daniel Wagner <wagi@kernel.org>
    Closes: https://lore.kernel.org/all/0134ea15-8d5f-41f7-9e9a-d7e6d82accaa@roeck-us.net
    Reviewed-by: Keith Busch <kbusch@kernel.org>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
objtool/rust: add one more `noreturn` Rust function for Rust 1.87.0 [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri May 2 16:02:33 2025 +0200

    objtool/rust: add one more `noreturn` Rust function for Rust 1.87.0
    
    commit 19f5ca461d5fc09bdf93a9f8e4bd78ed3a49dc71 upstream.
    
    Starting with Rust 1.87.0 (expected 2025-05-15), `objtool` may report:
    
        rust/core.o: warning: objtool: _R..._4core9panicking9panic_fmt() falls
        through to next function _R..._4core9panicking18panic_nounwind_fmt()
    
        rust/core.o: warning: objtool: _R..._4core9panicking18panic_nounwind_fmt()
        falls through to next function _R..._4core9panicking5panic()
    
    The reason is that `rust_begin_unwind` is now mangled:
    
        _R..._7___rustc17rust_begin_unwind
    
    Thus add the mangled one to the list so that `objtool` knows it is
    actually `noreturn`.
    
    See commit 56d680dd23c3 ("objtool/rust: list `noreturn` Rust functions")
    for more details.
    
    Alternatively, we could remove the fixed one in `noreturn.h` and relax
    this test to cover both, but it seems best to be strict as long as we can.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Cc: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20250502140237.1659624-2-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ocfs2: fix panic in failed foilio allocation [+ + +]
Author: Mark Tinguely <mark.tinguely@oracle.com>
Date:   Fri Apr 11 11:31:24 2025 -0500

    ocfs2: fix panic in failed foilio allocation
    
    commit 31d4cd4eb2f8d9b87ebfa6a5e443a59e3b3d7b8c upstream.
    
    commit 7e119cff9d0a ("ocfs2: convert w_pages to w_folios") and commit
    9a5e08652dc4b ("ocfs2: use an array of folios instead of an array of
    pages") save -ENOMEM in the folio array upon allocation failure and call
    the folio array free code.
    
    The folio array free code expects either valid folio pointers or NULL.
    Finding the -ENOMEM will result in a panic.  Fix by NULLing the error
    folio entry.
    
    Link: https://lkml.kernel.org/r/c879a52b-835c-4fa0-902b-8b2e9196dcbd@oracle.com
    Fixes: 7e119cff9d0a ("ocfs2: convert w_pages to w_folios")
    Fixes: 9a5e08652dc4b ("ocfs2: use an array of folios instead of an array of pages")
    Signed-off-by: Mark Tinguely <mark.tinguely@oracle.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix the issue with discontiguous allocation in the global_bitmap [+ + +]
Author: Heming Zhao <heming.zhao@suse.com>
Date:   Mon Apr 14 14:01:23 2025 +0800

    ocfs2: fix the issue with discontiguous allocation in the global_bitmap
    
    commit bd1261b16d9131d79723d982d54295e7f309797a upstream.
    
    commit 4eb7b93e0310 ("ocfs2: improve write IO performance when
    fragmentation is high") introduced another regression.
    
    The following ocfs2-test case can trigger this issue:
    > discontig_runner.sh => activate_discontig_bg.sh => resv_unwritten:
    > ${RESV_UNWRITTEN_BIN} -f ${WORK_PLACE}/large_testfile -s 0 -l \
    > $((${FILE_MAJOR_SIZE_M}*1024*1024))
    
    In my env, test disk size (by "fdisk -l <dev>"):
    > 53687091200 bytes, 104857600 sectors.
    
    Above command is:
    > /usr/local/ocfs2-test/bin/resv_unwritten -f \
    > /mnt/ocfs2/ocfs2-activate-discontig-bg-dir/large_testfile -s 0 -l \
    > 53187969024
    
    Error log:
    > [*] Reserve 50724M space for a LARGE file, reserve 200M space for future test.
    > ioctl error 28: "No space left on device"
    > resv allocation failed Unknown error -1
    > reserve unwritten region from 0 to 53187969024.
    
    Call flow:
    __ocfs2_change_file_space //by ioctl OCFS2_IOC_RESVSP64
     ocfs2_allocate_unwritten_extents //start:0 len:53187969024
      while()
       + ocfs2_get_clusters //cpos:0, alloc_size:1623168 (cluster number)
       + ocfs2_extend_allocation
         + ocfs2_lock_allocators
         |  + choose OCFS2_AC_USE_MAIN & ocfs2_cluster_group_search
         |
         + ocfs2_add_inode_data
            ocfs2_add_clusters_in_btree
             __ocfs2_claim_clusters
              ocfs2_claim_suballoc_bits
              + During the allocation of the final part of the large file
                (after ~47GB), no chain had the required contiguous
                bits_wanted. Consequently, the allocation failed.
    
    How to fix:
    When OCFS2 is encountering fragmented allocation, the file system should
    stop attempting bits_wanted contiguous allocation and instead provide the
    largest available contiguous free bits from the cluster groups.
    
    Link: https://lkml.kernel.org/r/20250414060125.19938-2-heming.zhao@suse.com
    Fixes: 4eb7b93e0310 ("ocfs2: improve write IO performance when fragmentation is high")
    Signed-off-by: Heming Zhao <heming.zhao@suse.com>
    Reported-by: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: implement handshaking with ocfs2 recovery thread [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Apr 24 15:45:12 2025 +0200

    ocfs2: implement handshaking with ocfs2 recovery thread
    
    commit 8f947e0fd595951460f5a6e1ac29baa82fa02eab upstream.
    
    We will need ocfs2 recovery thread to acknowledge transitions of
    recovery_state when disabling particular types of recovery.  This is
    similar to what currently happens when disabling recovery completely, just
    more general.  Implement the handshake and use it for exit from recovery.
    
    Link: https://lkml.kernel.org/r/20250424134515.18933-5-jack@suse.cz
    Fixes: 5f530de63cfc ("ocfs2: Use s_umount for quota recovery protection")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Tested-by: Heming Zhao <heming.zhao@suse.com>
    Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Murad Masimov <m.masimov@mt-integration.ru>
    Cc: Shichangkuo <shi.changkuo@h3c.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: stop quota recovery before disabling quotas [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Apr 24 15:45:13 2025 +0200

    ocfs2: stop quota recovery before disabling quotas
    
    commit fcaf3b2683b05a9684acdebda706a12025a6927a upstream.
    
    Currently quota recovery is synchronized with unmount using sb->s_umount
    semaphore.  That is however prone to deadlocks because
    flush_workqueue(osb->ocfs2_wq) called from umount code can wait for quota
    recovery to complete while ocfs2_finish_quota_recovery() waits for
    sb->s_umount semaphore.
    
    Grabbing of sb->s_umount semaphore in ocfs2_finish_quota_recovery() is
    only needed to protect that function from disabling of quotas from
    ocfs2_dismount_volume().  Handle this problem by disabling quota recovery
    early during unmount in ocfs2_dismount_volume() instead so that we can
    drop acquisition of sb->s_umount from ocfs2_finish_quota_recovery().
    
    Link: https://lkml.kernel.org/r/20250424134515.18933-6-jack@suse.cz
    Fixes: 5f530de63cfc ("ocfs2: Use s_umount for quota recovery protection")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reported-by: Shichangkuo <shi.changkuo@h3c.com>
    Reported-by: Murad Masimov <m.masimov@mt-integration.ru>
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Tested-by: Heming Zhao <heming.zhao@suse.com>
    Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: switch osb->disable_recovery to enum [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Apr 24 15:45:11 2025 +0200

    ocfs2: switch osb->disable_recovery to enum
    
    commit c0fb83088f0cc4ee4706e0495ee8b06f49daa716 upstream.
    
    Patch series "ocfs2: Fix deadlocks in quota recovery", v3.
    
    This implements another approach to fixing quota recovery deadlocks.  We
    avoid grabbing sb->s_umount semaphore from ocfs2_finish_quota_recovery()
    and instead stop quota recovery early in ocfs2_dismount_volume().
    
    
    This patch (of 3):
    
    We will need more recovery states than just pure enable / disable to fix
    deadlocks with quota recovery.  Switch osb->disable_recovery to enum.
    
    Link: https://lkml.kernel.org/r/20250424134301.1392-1-jack@suse.cz
    Link: https://lkml.kernel.org/r/20250424134515.18933-4-jack@suse.cz
    Fixes: 5f530de63cfc ("ocfs2: Use s_umount for quota recovery protection")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Tested-by: Heming Zhao <heming.zhao@suse.com>
    Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Murad Masimov <m.masimov@mt-integration.ru>
    Cc: Shichangkuo <shi.changkuo@h3c.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
openvswitch: Fix unsafe attribute parsing in output_userspace() [+ + +]
Author: Eelco Chaudron <echaudro@redhat.com>
Date:   Tue May 6 16:28:54 2025 +0200

    openvswitch: Fix unsafe attribute parsing in output_userspace()
    
    commit 6beb6835c1fbb3f676aebb51a5fee6b77fed9308 upstream.
    
    This patch replaces the manual Netlink attribute iteration in
    output_userspace() with nla_for_each_nested(), which ensures that only
    well-formed attributes are processed.
    
    Fixes: ccb1352e76cf ("net: Add Open vSwitch kernel components.")
    Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
    Acked-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/0bd65949df61591d9171c0dc13e42cea8941da10.1746541734.git.echaudro@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "btrfs: canonicalize the device path before adding it" [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Fri Jan 17 09:09:34 2025 +1030

    Revert "btrfs: canonicalize the device path before adding it"
    
    commit 8fb1dcbbcc1ffe6ed7cf3f0f96d2737491dd1fbf upstream.
    
    This reverts commit 7e06de7c83a746e58d4701e013182af133395188.
    
    Commit 7e06de7c83a7 ("btrfs: canonicalize the device path before adding
    it") tries to make btrfs to use "/dev/mapper/*" name first, then any
    filename inside "/dev/" as the device path.
    
    This is mostly fine when there is only the root namespace involved, but
    when multiple namespace are involved, things can easily go wrong for the
    d_path() usage.
    
    As d_path() returns a file path that is namespace dependent, the
    resulted string may not make any sense in another namespace.
    
    Furthermore, the "/dev/" prefix checks itself is not reliable, one can
    still make a valid initramfs without devtmpfs, and fill all needed
    device nodes manually.
    
    Overall the userspace has all its might to pass whatever device path for
    mount, and we are not going to win the war trying to cover every corner
    case.
    
    So just revert that commit, and do no extra d_path() based file path
    sanity check.
    
    CC: stable@vger.kernel.org # 6.12+
    Link: https://lore.kernel.org/linux-fsdevel/20250115185608.GA2223535@zen.localdomain/
    Reviewed-by: Boris Burkov <boris@bur.io>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "drm/amd: Stop evicting resources on APUs in suspend" [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Thu May 1 13:00:16 2025 -0400

    Revert "drm/amd: Stop evicting resources on APUs in suspend"
    
    commit d0ce1aaa8531a4a4707711cab5721374751c51b0 upstream.
    
    This reverts commit 3a9626c816db901def438dc2513622e281186d39.
    
    This breaks S4 because we end up setting the s3/s0ix flags
    even when we are entering s4 since prepare is used by both
    flows.  The causes both the S3/s0ix and s4 flags to be set
    which breaks several checks in the driver which assume they
    are mutually exclusive.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3634
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit ce8f7d95899c2869b47ea6ce0b3e5bf304b2fff4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv: Disallow PR_GET_TAGGED_ADDR_CTRL without Supm [+ + +]
Author: Samuel Holland <samuel.holland@sifive.com>
Date:   Wed May 7 07:52:18 2025 -0700

    riscv: Disallow PR_GET_TAGGED_ADDR_CTRL without Supm
    
    [ Upstream commit 7f1c3de1370bc6a8ad5157336b258067dac0ae9c ]
    
    When the prctl() interface for pointer masking was added, it did not
    check that the pointer masking ISA extension was supported, only the
    individual submodes. Userspace could still attempt to disable pointer
    masking and query the pointer masking state. commit 81de1afb2dd1
    ("riscv: Fix kernel crash due to PR_SET_TAGGED_ADDR_CTRL") disallowed
    the former, as the senvcfg write could crash on older systems.
    PR_GET_TAGGED_ADDR_CTRL state does not crash, because it reads only
    kernel-internal state and not senvcfg, but it should still be disallowed
    for consistency.
    
    Fixes: 09d6775f503b ("riscv: Add support for userspace pointer masking")
    Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
    Reviewed-by: Nam Cao <namcao@linutronix.de>
    Link: https://lore.kernel.org/r/20250507145230.2272871-1-samuel.holland@sifive.com
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: Fix kernel crash due to PR_SET_TAGGED_ADDR_CTRL [+ + +]
Author: Nam Cao <namcao@linutronix.de>
Date:   Sun May 4 12:19:20 2025 +0200

    riscv: Fix kernel crash due to PR_SET_TAGGED_ADDR_CTRL
    
    commit ae08d55807c099357c047dba17624b09414635dd upstream.
    
    When userspace does PR_SET_TAGGED_ADDR_CTRL, but Supm extension is not
    available, the kernel crashes:
    
    Oops - illegal instruction [#1]
        [snip]
    epc : set_tagged_addr_ctrl+0x112/0x15a
     ra : set_tagged_addr_ctrl+0x74/0x15a
    epc : ffffffff80011ace ra : ffffffff80011a30 sp : ffffffc60039be10
        [snip]
    status: 0000000200000120 badaddr: 0000000010a79073 cause: 0000000000000002
        set_tagged_addr_ctrl+0x112/0x15a
        __riscv_sys_prctl+0x352/0x73c
        do_trap_ecall_u+0x17c/0x20c
        andle_exception+0x150/0x15c
    
    Fix it by checking if Supm is available.
    
    Fixes: 09d6775f503b ("riscv: Add support for userspace pointer masking")
    Signed-off-by: Nam Cao <namcao@linutronix.de>
    Cc: stable@vger.kernel.org
    Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
    Link: https://lore.kernel.org/r/20250504101920.3393053-1-namcao@linutronix.de
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

riscv: misaligned: Add handling for ZCB instructions [+ + +]
Author: Nylon Chen <nylon.chen@sifive.com>
Date:   Fri Apr 11 15:38:49 2025 +0800

    riscv: misaligned: Add handling for ZCB instructions
    
    [ Upstream commit eb16b3727c05ed36420c90eca1e8f0e279514c1c ]
    
    Add support for the Zcb extension's compressed half-word instructions
    (C.LHU, C.LH, and C.SH) in the RISC-V misaligned access trap handler.
    
    Signed-off-by: Zong Li <zong.li@sifive.com>
    Signed-off-by: Nylon Chen <nylon.chen@sifive.com>
    Fixes: 956d705dd279 ("riscv: Unaligned load/store handling for M_MODE")
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20250411073850.3699180-2-nylon.chen@sifive.com
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: misaligned: enable IRQs while handling misaligned accesses [+ + +]
Author: Clément Léger <cleger@rivosinc.com>
Date:   Tue Apr 22 18:23:09 2025 +0200

    riscv: misaligned: enable IRQs while handling misaligned accesses
    
    [ Upstream commit 453805f0a28fc5091e46145e6560c776f7c7a611 ]
    
    We can safely reenable IRQs if coming from userspace. This allows to
    access user memory that could potentially trigger a page fault.
    
    Fixes: b686ecdeacf6 ("riscv: misaligned: Restrict user access to kernel memory")
    Signed-off-by: Clément Léger <cleger@rivosinc.com>
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20250422162324.956065-3-cleger@rivosinc.com
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: misaligned: factorize trap handling [+ + +]
Author: Clément Léger <cleger@rivosinc.com>
Date:   Tue Apr 22 18:23:08 2025 +0200

    riscv: misaligned: factorize trap handling
    
    [ Upstream commit fd94de9f9e7aac11ec659e386b9db1203d502023 ]
    
    Since both load/store and user/kernel should use almost the same path and
    that we are going to add some code around that, factorize it.
    
    Signed-off-by: Clément Léger <cleger@rivosinc.com>
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20250422162324.956065-2-cleger@rivosinc.com
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Stable-dep-of: 453805f0a28f ("riscv: misaligned: enable IRQs while handling misaligned accesses")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust: allow Rust 1.87.0's `clippy::ptr_eq` lint [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri May 2 16:02:34 2025 +0200

    rust: allow Rust 1.87.0's `clippy::ptr_eq` lint
    
    commit a39f3087092716f2bd531d6fdc20403c3dc2a879 upstream.
    
    Starting with Rust 1.87.0 (expected 2025-05-15) [1], Clippy may expand
    the `ptr_eq` lint, e.g.:
    
        error: use `core::ptr::eq` when comparing raw pointers
           --> rust/kernel/list.rs:438:12
            |
        438 |         if self.first == item {
            |            ^^^^^^^^^^^^^^^^^^ help: try: `core::ptr::eq(self.first, item)`
            |
            = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_eq
            = note: `-D clippy::ptr-eq` implied by `-D warnings`
            = help: to override `-D warnings` add `#[allow(clippy::ptr_eq)]`
    
    It is expected that a PR to relax the lint will be backported [2] by
    the time Rust 1.87.0 releases, since the lint was considered too eager
    (at least by default) [3].
    
    Thus allow the lint temporarily just in case.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust-clippy/pull/14339 [1]
    Link: https://github.com/rust-lang/rust-clippy/pull/14526 [2]
    Link: https://github.com/rust-lang/rust-clippy/issues/14525 [3]
    Link: https://lore.kernel.org/r/20250502140237.1659624-3-ojeda@kernel.org
    [ Converted to `allow`s since backport was confirmed. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: clean Rust 1.88.0's `clippy::uninlined_format_args` lint [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri May 2 16:02:37 2025 +0200

    rust: clean Rust 1.88.0's `clippy::uninlined_format_args` lint
    
    commit 211dcf77856db64c73e0c3b9ce0c624ec855daca upstream.
    
    Starting with Rust 1.88.0 (expected 2025-06-26) [1], `rustc` may move
    back the `uninlined_format_args` to `style` from `pedantic` (it was
    there waiting for rust-analyzer suppotr), and thus we will start to see
    lints like:
    
        warning: variables can be used directly in the `format!` string
           --> rust/macros/kunit.rs:105:37
            |
        105 |         let kunit_wrapper_fn_name = format!("kunit_rust_wrapper_{}", test);
            |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            |
            = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
        help: change this to
            |
        105 -         let kunit_wrapper_fn_name = format!("kunit_rust_wrapper_{}", test);
        105 +         let kunit_wrapper_fn_name = format!("kunit_rust_wrapper_{test}");
    
    There is even a case that is a pure removal:
    
        warning: variables can be used directly in the `format!` string
          --> rust/macros/module.rs:51:13
           |
        51 |             format!("{field}={content}\0", field = field, content = content)
           |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           |
           = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
        help: change this to
           |
        51 -             format!("{field}={content}\0", field = field, content = content)
        51 +             format!("{field}={content}\0")
    
    The lints all seem like nice cleanups, thus just apply them.
    
    We may want to disable `allow-mixed-uninlined-format-args` in the future.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust-clippy/pull/14160 [1]
    Acked-by: Benno Lossin <lossin@kernel.org>
    Reviewed-by: Tamir Duberstein <tamird@gmail.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20250502140237.1659624-6-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: clean Rust 1.88.0's `unnecessary_transmutes` lint [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri May 2 16:02:35 2025 +0200

    rust: clean Rust 1.88.0's `unnecessary_transmutes` lint
    
    commit 7129ea6e242b00938532537da41ddf5fa3e21471 upstream.
    
    Starting with Rust 1.88.0 (expected 2025-06-26) [1][2], `rustc` may
    introduce a new lint that catches unnecessary transmutes, e.g.:
    
         error: unnecessary transmute
             --> rust/uapi/uapi_generated.rs:23242:18
              |
        23242 |         unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
              |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace this with: `(self._bitfield_1.get(0usize, 1u8) as u8 == 1)`
              |
              = note: `-D unnecessary-transmutes` implied by `-D warnings`
              = help: to override `-D warnings` add `#[allow(unnecessary_transmutes)]`
    
    There are a lot of them (at least 300), but luckily they are all in
    `bindgen`-generated code.
    
    Thus clean all up by allowing it there.
    
    Since unknown lints trigger a lint itself in older compilers, do it
    conditionally so that we can keep the `unknown_lints` lint enabled.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust/pull/136083 [1]
    Link: https://github.com/rust-lang/rust/issues/136067 [2]
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20250502140237.1659624-4-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: clean Rust 1.88.0's warning about `clippy::disallowed_macros` configuration [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri May 2 16:02:36 2025 +0200

    rust: clean Rust 1.88.0's warning about `clippy::disallowed_macros` configuration
    
    commit c016722fd57551f8a6fcf472c9d2bcf2130ea0ec upstream.
    
    Starting with Rust 1.88.0 (expected 2025-06-26) [1], Clippy may start
    warning about paths that do not resolve in the `disallowed_macros`
    configuration:
    
        warning: `kernel::dbg` does not refer to an existing macro
          --> .clippy.toml:10:5
           |
        10 |     { path = "kernel::dbg", reason = "the `dbg!` macro is intended as a debugging tool" },
           |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    This is a lint we requested at [2], due to the trouble debugging
    the lint due to false negatives (e.g. [3]), which we use to emulate
    `clippy::dbg_macro` [4]. See commit 8577c9dca799 ("rust: replace
    `clippy::dbg_macro` with `disallowed_macros`") for more details.
    
    Given the false negatives are not resolved yet, it is expected that
    Clippy complains about not finding this macro.
    
    Thus, until the false negatives are fixed (and, even then, probably we
    will need to wait for the MSRV to raise enough), use the escape hatch
    to allow an invalid path.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust-clippy/pull/14397 [1]
    Link: https://github.com/rust-lang/rust-clippy/issues/11432 [2]
    Link: https://github.com/rust-lang/rust-clippy/issues/11431 [3]
    Link: https://github.com/rust-lang/rust-clippy/issues/11303 [4]
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20250502140237.1659624-5-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/entry: Fix last breaking event handling in case of stack corruption [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Thu Apr 24 17:07:01 2025 +0200

    s390/entry: Fix last breaking event handling in case of stack corruption
    
    [ Upstream commit ae952eea6f4a7e2193f8721a5366049946e012e7 ]
    
    In case of stack corruption stack_invalid() is called and the expectation
    is that register r10 contains the last breaking event address. This
    dependency is quite subtle and broke a couple of years ago without that
    anybody noticed.
    
    Fix this by getting rid of the dependency and read the last breaking event
    address from lowcore.
    
    Fixes: 56e62a737028 ("s390: convert to generic entry")
    Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
    Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/pci: Fix duplicate pci_dev_put() in disable_slot() when PF has child VFs [+ + +]
Author: Niklas Schnelle <schnelle@linux.ibm.com>
Date:   Wed Apr 30 15:26:19 2025 +0200

    s390/pci: Fix duplicate pci_dev_put() in disable_slot() when PF has child VFs
    
    commit 05a2538f2b48500cf4e8a0a0ce76623cc5bafcf1 upstream.
    
    With commit bcb5d6c76903 ("s390/pci: introduce lock to synchronize state
    of zpci_dev's") the code to ignore power off of a PF that has child VFs
    was changed from a direct return to a goto to the unlock and
    pci_dev_put() section. The change however left the existing pci_dev_put()
    untouched resulting in a doubple put. This can subsequently cause a use
    after free if the struct pci_dev is released in an unexpected state.
    Fix this by removing the extra pci_dev_put().
    
    Cc: stable@vger.kernel.org
    Fixes: bcb5d6c76903 ("s390/pci: introduce lock to synchronize state of zpci_dev's")
    Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/pci: Fix missing check for zpci_create_device() error return [+ + +]
Author: Niklas Schnelle <schnelle@linux.ibm.com>
Date:   Wed Apr 30 15:26:18 2025 +0200

    s390/pci: Fix missing check for zpci_create_device() error return
    
    commit 42420c50c68f3e95e90de2479464f420602229fc upstream.
    
    The zpci_create_device() function returns an error pointer that needs to
    be checked before dereferencing it as a struct zpci_dev pointer. Add the
    missing check in __clp_add() where it was missed when adding the
    scan_list in the fixed commit. Simply not adding the device to the scan
    list results in the previous behavior.
    
    Cc: stable@vger.kernel.org
    Fixes: 0467cdde8c43 ("s390/pci: Sort PCI functions prior to creating virtual busses")
    Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sch_htb: make htb_deactivate() idempotent [+ + +]
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Mon Apr 28 16:29:54 2025 -0700

    sch_htb: make htb_deactivate() idempotent
    
    [ Upstream commit 3769478610135e82b262640252d90f6efb05be71 ]
    
    Alan reported a NULL pointer dereference in htb_next_rb_node()
    after we made htb_qlen_notify() idempotent.
    
    It turns out in the following case it introduced some regression:
    
    htb_dequeue_tree():
      |-> fq_codel_dequeue()
        |-> qdisc_tree_reduce_backlog()
          |-> htb_qlen_notify()
            |-> htb_deactivate()
      |-> htb_next_rb_node()
      |-> htb_deactivate()
    
    For htb_next_rb_node(), after calling the 1st htb_deactivate(), the
    clprio[prio]->ptr could be already set to  NULL, which means
    htb_next_rb_node() is vulnerable here.
    
    For htb_deactivate(), although we checked qlen before calling it, in
    case of qlen==0 after qdisc_tree_reduce_backlog(), we may call it again
    which triggers the warning inside.
    
    To fix the issues here, we need to:
    
    1) Make htb_deactivate() idempotent, that is, simply return if we
       already call it before.
    2) Make htb_next_rb_node() safe against ptr==NULL.
    
    Many thanks to Alan for testing and for the reproducer.
    
    Fixes: 5ba8b837b522 ("sch_htb: make htb_qlen_notify() idempotent")
    Reported-by: Alan J. Wylie <alan@wylie.me.uk>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Link: https://patch.msgid.link/20250428232955.1740419-2-xiyou.wangcong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftest/x86/bugs: Add selftests for ITS [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Tue Dec 24 16:09:28 2024 -0800

    selftest/x86/bugs: Add selftests for ITS
    
    commit 7a9b709e7cc5ce1ffb84ce07bf6d157e1de758df upstream.
    
    Below are the tests added for Indirect Target Selection (ITS):
    
    - its_sysfs.py - Check if sysfs reflects the correct mitigation status for
      the mitigation selected via the kernel cmdline.
    
    - its_permutations.py - tests mitigation selection with cmdline
      permutations with other bugs like spectre_v2 and retbleed.
    
    - its_indirect_alignment.py - verifies that for addresses in
      .retpoline_sites section that belong to lower half of cacheline are
      patched to ITS-safe thunk. Typical output looks like below:
    
      Site 49: function symbol: __x64_sys_restart_syscall+0x1f <0xffffffffbb1509af>
      #     vmlinux: 0xffffffff813509af:    jmp     0xffffffff81f5a8e0
      #     kcore:   0xffffffffbb1509af:    jmpq    *%rax
      #     ITS thunk NOT expected for site 49
      #     PASSED: Found *%rax
      #
      Site 50: function symbol: __resched_curr+0xb0 <0xffffffffbb181910>
      #     vmlinux: 0xffffffff81381910:    jmp     0xffffffff81f5a8e0
      #     kcore:   0xffffffffbb181910:    jmp     0xffffffffc02000fc
      #     ITS thunk expected for site 50
      #     PASSED: Found 0xffffffffc02000fc -> jmpq *%rax <scattered-thunk?>
    
    - its_ret_alignment.py - verifies that for addresses in .return_sites
      section that belong to lower half of cacheline are patched to
      its_return_thunk. Typical output looks like below:
    
      Site 97: function symbol: collect_event+0x48 <0xffffffffbb007f18>
      #     vmlinux: 0xffffffff81207f18:    jmp     0xffffffff81f5b500
      #     kcore:   0xffffffffbb007f18:    jmp     0xffffffffbbd5b560
      #     PASSED: Found jmp 0xffffffffbbd5b560 <its_return_thunk>
      #
      Site 98: function symbol: collect_event+0xa4 <0xffffffffbb007f74>
      #     vmlinux: 0xffffffff81207f74:    jmp     0xffffffff81f5b500
      #     kcore:   0xffffffffbb007f74:    retq
      #     PASSED: Found retq
    
    Some of these tests have dependency on tools like virtme-ng[1] and drgn[2].
    When the dependencies are not met, the test will be skipped.
    
    [1] https://github.com/arighi/virtme-ng
    [2] https://github.com/osandov/drgn
    
    Co-developed-by: Tao Zhang <tao1.zhang@linux.intel.com>
    Signed-off-by: Tao Zhang <tao1.zhang@linux.intel.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/mm: compaction_test: support platform with huge mount of memory [+ + +]
Author: Feng Tang <feng.tang@linux.alibaba.com>
Date:   Wed Apr 23 18:36:45 2025 +0800

    selftests/mm: compaction_test: support platform with huge mount of memory
    
    commit ab00ddd802f80e31fc9639c652d736fe3913feae upstream.
    
    When running mm selftest to verify mm patches, 'compaction_test' case
    failed on an x86 server with 1TB memory.  And the root cause is that it
    has too much free memory than what the test supports.
    
    The test case tries to allocate 100000 huge pages, which is about 200 GB
    for that x86 server, and when it succeeds, it expects it's large than 1/3
    of 80% of the free memory in system.  This logic only works for platform
    with 750 GB ( 200 / (1/3) / 80% ) or less free memory, and may raise false
    alarm for others.
    
    Fix it by changing the fixed page number to self-adjustable number
    according to the real number of free memory.
    
    Link: https://lkml.kernel.org/r/20250423103645.2758-1-feng.tang@linux.alibaba.com
    Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory")
    Signed-off-by: Feng Tang <feng.tang@linux.alibaba.com>
    Acked-by: Dev Jain <dev.jain@arm.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Tested-by: Baolin Wang <baolin.wang@inux.alibaba.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Sri Jayaramappa <sjayaram@akamai.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests/mm: fix a build failure on powerpc [+ + +]
Author: Nysal Jan K.A. <nysal@linux.ibm.com>
Date:   Mon Apr 28 18:49:35 2025 +0530

    selftests/mm: fix a build failure on powerpc
    
    commit 8cf6ecb18baac867585fe1cba5dde6dbf3b6d29a upstream.
    
    The compiler is unaware of the size of code generated by the ".rept"
    assembler directive.  This results in the compiler emitting branch
    instructions where the offset to branch to exceeds the maximum allowed
    value, resulting in build failures like the following:
    
      CC       protection_keys
      /tmp/ccypKWAE.s: Assembler messages:
      /tmp/ccypKWAE.s:2073: Error: operand out of range (0x0000000000020158
      is not between 0xffffffffffff8000 and 0x0000000000007ffc)
      /tmp/ccypKWAE.s:2509: Error: operand out of range (0x0000000000020130
      is not between 0xffffffffffff8000 and 0x0000000000007ffc)
    
    Fix the issue by manually adding nop instructions using the preprocessor.
    
    Link: https://lkml.kernel.org/r/20250428131937.641989-2-nysal@linux.ibm.com
    Fixes: 46036188ea1f ("selftests/mm: build with -O2")
    Reported-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Signed-off-by: Nysal Jan K.A. <nysal@linux.ibm.com>
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Reviewed-by: Donet Tom <donettom@linux.ibm.com>
    Tested-by: Donet Tom <donettom@linux.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests/mm: fix build break when compiling pkey_util.c [+ + +]
Author: Madhavan Srinivasan <maddy@linux.ibm.com>
Date:   Mon Apr 28 18:49:34 2025 +0530

    selftests/mm: fix build break when compiling pkey_util.c
    
    commit 22adb528621ddc92f887882a658507fbf88a5214 upstream.
    
    Commit 50910acd6f615 ("selftests/mm: use sys_pkey helpers consistently")
    added a pkey_util.c to refactor some of the protection_keys functions
    accessible by other tests.  But this broken the build in powerpc in two
    ways,
    
    pkey-powerpc.h: In function `arch_is_powervm':
    pkey-powerpc.h:73:21: error: storage size of `buf' isn't known
       73 |         struct stat buf;
          |                     ^~~
    pkey-powerpc.h:75:14: error: implicit declaration of function `stat'; did you mean `strcat'? [-Wimplicit-function-declaration]
       75 |         if ((stat("/sys/firmware/devicetree/base/ibm,partition-name", &buf) == 0) &&
          |              ^~~~
          |              strcat
    
    Since pkey_util.c includes pkeys-helper.h, which in turn includes pkeys-powerpc.h,
    stat.h including is missing for "struct stat". This is fixed by adding "sys/stat.h"
    in pkeys-powerpc.h
    
    Secondly,
    
    pkey-powerpc.h:55:18: warning: format `%llx' expects argument of type `long long unsigned int', but argument 3 has type `u64' {aka `long unsigned int'} [-Wformat=]
       55 |         dprintf4("%s() changing %016llx to %016llx\n",
          |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       56 |                          __func__, __read_pkey_reg(), pkey_reg);
          |                                    ~~~~~~~~~~~~~~~~~
          |                                    |
          |                                    u64 {aka long unsigned int}
    pkey-helpers.h:63:32: note: in definition of macro `dprintf_level'
       63 |                 sigsafe_printf(args);           \
          |                                ^~~~
    
    These format specifier related warning are removed by adding
    "__SANE_USERSPACE_TYPES__" to pkeys_utils.c.
    
    Link: https://lkml.kernel.org/r/20250428131937.641989-1-nysal@linux.ibm.com
    Fixes: 50910acd6f61 ("selftests/mm: use sys_pkey helpers consistently")
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Signed-off-by: Nysal Jan K.A. <nysal@linux.ibm.com>
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb: client: Avoid race in open_cached_dir with lease breaks [+ + +]
Author: Paul Aurich <paul@darkrain42.org>
Date:   Tue May 6 22:28:09 2025 -0700

    smb: client: Avoid race in open_cached_dir with lease breaks
    
    commit 3ca02e63edccb78ef3659bebc68579c7224a6ca2 upstream.
    
    A pre-existing valid cfid returned from find_or_create_cached_dir might
    race with a lease break, meaning open_cached_dir doesn't consider it
    valid, and thinks it's newly-constructed. This leaks a dentry reference
    if the allocation occurs before the queued lease break work runs.
    
    Avoid the race by extending holding the cfid_list_lock across
    find_or_create_cached_dir and when the result is checked.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Signed-off-by: Paul Aurich <paul@darkrain42.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
staging: axis-fifo: Correct handling of tx_fifo_depth for size validation [+ + +]
Author: Gabriel Shahrouzi <gshahrouzi@gmail.com>
Date:   Fri Apr 18 21:29:37 2025 -0400

    staging: axis-fifo: Correct handling of tx_fifo_depth for size validation
    
    commit 2ca34b508774aaa590fc3698a54204706ecca4ba upstream.
    
    Remove erroneous subtraction of 4 from the total FIFO depth read from
    device tree. The stored depth is for checking against total capacity,
    not initial vacancy. This prevented writes near the FIFO's full size.
    
    The check performed just before data transfer, which uses live reads of
    the TDFV register to determine current vacancy, correctly handles the
    initial Depth - 4 hardware state and subsequent FIFO fullness.
    
    Fixes: 4a965c5f89de ("staging: add driver for Xilinx AXI-Stream FIFO v4.1 IP core")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
    Link: https://lore.kernel.org/r/20250419012937.674924-1-gshahrouzi@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: axis-fifo: Remove hardware resets for user errors [+ + +]
Author: Gabriel Shahrouzi <gshahrouzi@gmail.com>
Date:   Fri Apr 18 20:43:06 2025 -0400

    staging: axis-fifo: Remove hardware resets for user errors
    
    commit c6e8d85fafa7193613db37da29c0e8d6e2515b13 upstream.
    
    The axis-fifo driver performs a full hardware reset (via
    reset_ip_core()) in several error paths within the read and write
    functions. This reset flushes both TX and RX FIFOs and resets the
    AXI-Stream links.
    
    Allow the user to handle the error without causing hardware disruption
    or data loss in other FIFO paths.
    
    Fixes: 4a965c5f89de ("staging: add driver for Xilinx AXI-Stream FIFO v4.1 IP core")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
    Link: https://lore.kernel.org/r/20250419004306.669605-1-gshahrouzi@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: bcm2835-camera: Initialise dev in v4l2_dev [+ + +]
Author: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date:   Wed Apr 23 11:47:15 2025 +0100

    staging: bcm2835-camera: Initialise dev in v4l2_dev
    
    commit 98698ca0e58734bc5c1c24e5bbc7429f981cd186 upstream.
    
    Commit 42a2f6664e18 ("staging: vc04_services: Move global g_state to
    vchiq_state") changed mmal_init to pass dev->v4l2_dev.dev to
    vchiq_mmal_init, however nothing iniitialised dev->v4l2_dev, so we got
    a NULL pointer dereference.
    
    Set dev->v4l2_dev.dev during bcm2835_mmal_probe. The device pointer
    could be passed into v4l2_device_register to set it, however that also
    has other effects that would need additional changes.
    
    Fixes: 42a2f6664e18 ("staging: vc04_services: Move global g_state to vchiq_state")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20250423-staging-bcm2835-v4l2-fix-v2-1-3227f0ba4700@raspberrypi.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: iio: adc: ad7816: Correct conditional logic for store mode [+ + +]
Author: Gabriel Shahrouzi <gshahrouzi@gmail.com>
Date:   Mon Apr 14 11:40:49 2025 -0400

    staging: iio: adc: ad7816: Correct conditional logic for store mode
    
    commit 2e922956277187655ed9bedf7b5c28906e51708f upstream.
    
    The mode setting logic in ad7816_store_mode was reversed due to
    incorrect handling of the strcmp return value. strcmp returns 0 on
    match, so the `if (strcmp(buf, "full"))` block executed when the
    input was not "full".
    
    This resulted in "full" setting the mode to AD7816_PD (power-down) and
    other inputs setting it to AD7816_FULL.
    
    Fix this by checking it against 0 to correctly check for "full" and
    "power-down", mapping them to AD7816_FULL and AD7816_PD respectively.
    
    Fixes: 7924425db04a ("staging: iio: adc: new driver for AD7816 devices")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
    Acked-by: Nuno Sá <nuno.sa@analog.com>
    Link: https://lore.kernel.org/stable/20250414152920.467505-1-gshahrouzi%40gmail.com
    Link: https://patch.msgid.link/20250414154050.469482-1-gshahrouzi@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
timekeeping: Prevent coarse clocks going backwards [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Fri Apr 18 22:46:52 2025 -0700

    timekeeping: Prevent coarse clocks going backwards
    
    [ Upstream commit b71f9804f66c2592d4c3a2397b7374a4039005a5 ]
    
    Lei Chen raised an issue with CLOCK_MONOTONIC_COARSE seeing time
    inconsistencies. Lei tracked down that this was being caused by the
    adjustment:
    
        tk->tkr_mono.xtime_nsec -= offset;
    
    which is made to compensate for the unaccumulated cycles in offset when the
    multiplicator is adjusted forward, so that the non-_COARSE clockids don't
    see inconsistencies.
    
    However, the _COARSE clockid getter functions use the adjusted xtime_nsec
    value directly and do not compensate the negative offset via the
    clocksource delta multiplied with the new multiplicator. In that case the
    caller can observe time going backwards in consecutive calls.
    
    By design, this negative adjustment should be fine, because the logic run
    from timekeeping_adjust() is done after it accumulated approximately
    
         multiplicator * interval_cycles
    
    into xtime_nsec.  The accumulated value is always larger then the
    
         mult_adj * offset
    
    value, which is subtracted from xtime_nsec. Both operations are done
    together under the tk_core.lock, so the net change to xtime_nsec is always
    always be positive.
    
    However, do_adjtimex() calls into timekeeping_advance() as well, to
    apply the NTP frequency adjustment immediately. In this case,
    timekeeping_advance() does not return early when the offset is smaller
    then interval_cycles. In that case there is no time accumulated into
    xtime_nsec. But the subsequent call into timekeeping_adjust(), which
    modifies the multiplicator, subtracts from xtime_nsec to correct for the
    new multiplicator.
    
    Here because there was no accumulation, xtime_nsec becomes smaller than
    before, which opens a window up to the next accumulation, where the
    _COARSE clockid getters, which don't compensate for the offset, can
    observe the inconsistency.
    
    This has been tried to be fixed by forwarding the timekeeper in the case
    that adjtimex() adjusts the multiplier, which resets the offset to zero:
    
      757b000f7b93 ("timekeeping: Fix possible inconsistencies in _COARSE clockids")
    
    That works correctly, but unfortunately causes a regression on the
    adjtimex() side. There are two issues:
    
       1) The forwarding of the base time moves the update out of the original
          period and establishes a new one.
    
       2) The clearing of the accumulated NTP error is changing the behaviour as
          well.
    
    User-space expects that multiplier/frequency updates are in effect, when the
    syscall returns, so delaying the update to the next tick is not solving the
    problem either.
    
    Commit 757b000f7b93 was reverted so that the established expectations of
    user space implementations (ntpd, chronyd) are restored, but that obviously
    brought the inconsistencies back.
    
    One of the initial approaches to fix this was to establish a separate
    storage for the coarse time getter nanoseconds part by calculating it from
    the offset. That was dropped on the floor because not having yet another
    state to maintain was simpler. But given the result of the above exercise,
    this solution turns out to be the right one. Bring it back in a slightly
    modified form.
    
    Thus introduce timekeeper::coarse_nsec and store that nanoseconds part in
    it, switch the time getter functions and the VDSO update to use that value.
    coarse_nsec is set on operations which forward or initialize the timekeeper
    and after time was accumulated during a tick. If there is no accumulation
    the timestamp is unchanged.
    
    This leaves the adjtimex() behaviour unmodified and prevents coarse time
    from going backwards.
    
    [ jstultz: Simplified the coarse_nsec calculation and kept behavior so
               coarse clockids aren't adjusted on each inter-tick adjtimex
               call, slightly reworked the comments and commit message ]
    
    Fixes: da15cfdae033 ("time: Introduce CLOCK_REALTIME_COARSE")
    Reported-by: Lei Chen <lei.chen@smartx.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: John Stultz <jstultz@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/all/20250419054706.2319105-1-jstultz@google.com
    Closes: https://lore.kernel.org/lkml/20250310030004.3705801-1-lei.chen@smartx.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
uio_hv_generic: Fix sysfs creation path for ring buffer [+ + +]
Author: Naman Jain <namjain@linux.microsoft.com>
Date:   Fri May 2 13:18:10 2025 +0530

    uio_hv_generic: Fix sysfs creation path for ring buffer
    
    commit f31fe8165d365379d858c53bef43254c7d6d1cfd upstream.
    
    On regular bootup, devices get registered to VMBus first, so when
    uio_hv_generic driver for a particular device type is probed,
    the device is already initialized and added, so sysfs creation in
    hv_uio_probe() works fine. However, when the device is removed
    and brought back, the channel gets rescinded and the device again gets
    registered to VMBus. However this time, the uio_hv_generic driver is
    already registered to probe for that device and in this case sysfs
    creation is tried before the device's kobject gets initialized
    completely.
    
    Fix this by moving the core logic of sysfs creation of ring buffer,
    from uio_hv_generic to HyperV's VMBus driver, where the rest of the
    sysfs attributes for the channels are defined. While doing that, make
    use of attribute groups and macros, instead of creating sysfs
    directly, to ensure better error handling and code flow.
    
    Problematic path:
    vmbus_process_offer (A new offer comes for the VMBus device)
      vmbus_add_channel_work
        vmbus_device_register
          |-> device_register
          |     |...
          |     |-> hv_uio_probe
          |           |...
          |           |-> sysfs_create_bin_file (leads to a warning as
          |                 the primary channel's kobject, which is used to
          |                 create the sysfs file, is not yet initialized)
          |-> kset_create_and_add
          |-> vmbus_add_channel_kobj (initialization of the primary
                                      channel's kobject happens later)
    
    Above code flow is sequential and the warning is always reproducible in
    this path.
    
    Fixes: 9ab877a6ccf8 ("uio_hv_generic: make ring buffer attribute for primary channel")
    Cc: stable@kernel.org
    Suggested-by: Saurabh Sengar <ssengar@linux.microsoft.com>
    Suggested-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Tested-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Naman Jain <namjain@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20250502074811.2022-2-namjain@linux.microsoft.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdnsp: Fix issue with resuming from L1 [+ + +]
Author: Pawel Laszczak <pawell@cadence.com>
Date:   Fri Apr 18 04:55:16 2025 +0000

    usb: cdnsp: Fix issue with resuming from L1
    
    commit 241e2ce88e5a494be7a5d44c0697592f1632fbee upstream.
    
    In very rare cases after resuming controller from L1 to L0 it reads
    registers before the clock UTMI have been enabled and as the result
    driver reads incorrect value.
    Most of registers are in APB domain clock but some of them (e.g. PORTSC)
    are in UTMI domain clock.
    After entering to L1 state the UTMI clock can be disabled.
    When controller transition from L1 to L0 the port status change event is
    reported and in interrupt runtime function driver reads PORTSC.
    During this read operation controller synchronize UTMI and APB domain
    but UTMI clock is still disabled and in result it reads 0xFFFFFFFF value.
    To fix this issue driver increases APB timeout value.
    
    The issue is platform specific and if the default value of APB timeout
    is not sufficient then this time should be set Individually for each
    platform.
    
    Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Pawel Laszczak <pawell@cadence.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/PH7PR07MB953846C57973E4DB134CAA71DDBF2@PH7PR07MB9538.namprd07.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: cdnsp: fix L1 resume issue for RTL_REVISION_NEW_LPM version [+ + +]
Author: Pawel Laszczak <pawell@cadence.com>
Date:   Fri Apr 25 05:55:40 2025 +0000

    usb: cdnsp: fix L1 resume issue for RTL_REVISION_NEW_LPM version
    
    commit 8614ecdb1570e4fffe87ebdc62b613ed66f1f6a6 upstream.
    
    The controllers with rtl version larger than
    RTL_REVISION_NEW_LPM (0x00002700) has bug which causes that controller
    doesn't resume from L1 state. It happens if after receiving LPM packet
    controller starts transitioning to L1 and in this moment the driver force
    resuming by write operation to PORTSC.PLS.
    It's corner case and happens when write operation to PORTSC occurs during
    device delay before transitioning to L1 after transmitting ACK
    time (TL1TokenRetry).
    
    Forcing transition from L1->L0 by driver for revision larger than
    RTL_REVISION_NEW_LPM is not needed, so driver can simply fix this issue
    through block call of cdnsp_force_l0_go function.
    
    Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Pawel Laszczak <pawell@cadence.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/PH7PR07MB9538B55C3A6E71F9ED29E980DD842@PH7PR07MB9538.namprd07.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: gadget: Make gadget_wakeup asynchronous [+ + +]
Author: Prashanth K <prashanth.k@oss.qualcomm.com>
Date:   Tue Apr 22 16:02:31 2025 +0530

    usb: dwc3: gadget: Make gadget_wakeup asynchronous
    
    commit 2372f1caeca433c4c01c2482f73fbe057f5168ce upstream.
    
    Currently gadget_wakeup() waits for U0 synchronously if it was
    called from func_wakeup(), this is because we need to send the
    function wakeup command soon after the link is active. And the
    call is made synchronous by polling DSTS continuosly for 20000
    times in __dwc3_gadget_wakeup(). But it observed that sometimes
    the link is not active even after polling 20K times, leading to
    remote wakeup failures. Adding a small delay between each poll
    helps, but that won't guarantee resolution in future. Hence make
    the gadget_wakeup completely asynchronous.
    
    Since multiple interfaces can issue a function wakeup at once,
    add a new variable wakeup_pending_funcs which will indicate the
    functions that has issued func_wakup, this is represented in a
    bitmap format. If the link is in U3, dwc3_gadget_func_wakeup()
    will set the bit corresponding to interface_id and bail out.
    Once link comes back to U0, linksts_change irq is triggered,
    where the function wakeup command is sent based on bitmap.
    
    Cc: stable <stable@kernel.org>
    Fixes: 92c08a84b53e ("usb: dwc3: Add function suspend and function wakeup support")
    Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250422103231.1954387-4-prashanth.k@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_ecm: Add get_status callback [+ + +]
Author: Prashanth K <prashanth.k@oss.qualcomm.com>
Date:   Tue Apr 22 16:02:29 2025 +0530

    usb: gadget: f_ecm: Add get_status callback
    
    commit 8e3820271c517ceb89ab7442656ba49fa23ee1d0 upstream.
    
    When host sends GET_STATUS to ECM interface, handle the request
    from the function driver. Since the interface is wakeup capable,
    set the corresponding bit, and set RW bit if the function is
    already armed for wakeup by the host.
    
    Cc: stable <stable@kernel.org>
    Fixes: 481c225c4802 ("usb: gadget: Handle function suspend feature selector")
    Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com>
    Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250422103231.1954387-2-prashanth.k@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN [+ + +]
Author: Wayne Chang <waynec@nvidia.com>
Date:   Fri Apr 18 16:12:28 2025 +0800

    usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN
    
    commit 59820fde001500c167342257650541280c622b73 upstream.
    
    We identified a bug where the ST_RC bit in the status register was not
    being acknowledged after clearing the CTRL_RUN bit in the control
    register. This could lead to unexpected behavior in the USB gadget
    drivers.
    
    This patch resolves the issue by adding the necessary code to explicitly
    acknowledge ST_RC after clearing CTRL_RUN based on the programming
    sequence, ensuring proper state transition.
    
    Fixes: 49db427232fe ("usb: gadget: Add UDC driver for tegra XUSB device mode controller")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Wayne Chang <waynec@nvidia.com>
    Link: https://lore.kernel.org/r/20250418081228.1194779-1-waynec@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: Use get_status callback to set remote wakeup capability [+ + +]
Author: Prashanth K <prashanth.k@oss.qualcomm.com>
Date:   Tue Apr 22 16:02:30 2025 +0530

    usb: gadget: Use get_status callback to set remote wakeup capability
    
    commit 5977a58dd5a4865198b0204b998adb0f634abe19 upstream.
    
    Currently when the host sends GET_STATUS request for an interface,
    we use get_status callbacks to set/clear remote wakeup capability
    of that interface. And if get_status callback isn't present for
    that interface, then we assume its remote wakeup capability based
    on bmAttributes.
    
    Now consider a scenario, where we have a USB configuration with
    multiple interfaces (say ECM + ADB), here ECM is remote wakeup
    capable and as of now ADB isn't. And bmAttributes will indicate
    the device as wakeup capable. With the current implementation,
    when host sends GET_STATUS request for both interfaces, we will
    set FUNC_RW_CAP for both. This results in USB3 CV Chapter 9.15
    (Function Remote Wakeup Test) failures as host expects remote
    wakeup from both interfaces.
    
    The above scenario is just an example, and the failure can be
    observed if we use configuration with any interface except ECM.
    Hence avoid configuring remote wakeup capability from composite
    driver based on bmAttributes, instead use get_status callbacks
    and let the function drivers decide this.
    
    Cc: stable <stable@kernel.org>
    Fixes: 481c225c4802 ("usb: gadget: Handle function suspend feature selector")
    Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com>
    Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250422103231.1954387-3-prashanth.k@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: host: tegra: Prevent host controller crash when OTG port is used [+ + +]
Author: Jim Lin <jilin@nvidia.com>
Date:   Tue Apr 22 19:40:01 2025 +0800

    usb: host: tegra: Prevent host controller crash when OTG port is used
    
    commit 732f35cf8bdfece582f6e4a9c659119036577308 upstream.
    
    When a USB device is connected to the OTG port, the tegra_xhci_id_work()
    routine transitions the PHY to host mode and calls xhci_hub_control()
    with the SetPortFeature command to enable port power.
    
    In certain cases, the XHCI controller may be in a low-power state
    when this operation occurs. If xhci_hub_control() is invoked while
    the controller is suspended, the PORTSC register may return 0xFFFFFFFF,
    indicating a read failure. This causes xhci_hc_died() to be triggered,
    leading to host controller shutdown.
    
    Example backtrace:
    [  105.445736] Workqueue: events tegra_xhci_id_work
    [  105.445747]  dump_backtrace+0x0/0x1e8
    [  105.445759]  xhci_hc_died.part.48+0x40/0x270
    [  105.445769]  tegra_xhci_set_port_power+0xc0/0x240
    [  105.445774]  tegra_xhci_id_work+0x130/0x240
    
    To prevent this, ensure the controller is fully resumed before
    interacting with hardware registers by calling pm_runtime_get_sync()
    prior to the host mode transition and xhci_hub_control().
    
    Fixes: f836e7843036 ("usb: xhci-tegra: Add OTG support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jim Lin <jilin@nvidia.com>
    Signed-off-by: Wayne Chang <waynec@nvidia.com>
    Link: https://lore.kernel.org/r/20250422114001.126367-1-waynec@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: misc: onboard_usb_dev: fix support for Cypress HX3 hubs [+ + +]
Author: Lukasz Czechowski <lukasz.czechowski@thaumatec.com>
Date:   Fri Apr 25 17:18:06 2025 +0200

    usb: misc: onboard_usb_dev: fix support for Cypress HX3 hubs
    
    commit 9f657a92805cfc98e11cf5da9e8f4e02ecff2260 upstream.
    
    The Cypress HX3 USB3.0 hubs use different PID values depending
    on the product variant. The comment in compatibles table is
    misleading, as the currently used PIDs (0x6504 and 0x6506 for
    USB 3.0 and USB 2.0, respectively) are defaults for the CYUSB331x,
    while CYUSB330x and CYUSB332x variants use different values.
    Based on the datasheet [1], update the compatible usb devices table
    to handle different types of the hub.
    The change also includes vendor mode PIDs, which are used by the
    hub in I2C Master boot mode, if connected EEPROM contains invalid
    signature or is blank. This allows to correctly boot the hub even
    if the EEPROM will have broken content.
    Number of vcc supplies and timing requirements are the same for all
    HX variants, so the platform driver's match table does not have to
    be extended.
    
    [1] https://www.infineon.com/dgdl/Infineon-HX3_USB_3_0_Hub_Consumer_Industrial-DataSheet-v22_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0ecb53f644b8
        Table 9. PID Values
    
    Fixes: b43cd82a1a40 ("usb: misc: onboard-hub: add support for Cypress HX3 USB 3.0 family")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Lukasz Czechowski <lukasz.czechowski@thaumatec.com>
    Link: https://lore.kernel.org/r/20250425-onboard_usb_dev-v2-1-4a76a474a010@thaumatec.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: tcpm: delay SNK_TRY_WAIT_DEBOUNCE to SRC_TRYWAIT transition [+ + +]
Author: RD Babiera <rdbabiera@google.com>
Date:   Tue Apr 29 23:47:01 2025 +0000

    usb: typec: tcpm: delay SNK_TRY_WAIT_DEBOUNCE to SRC_TRYWAIT transition
    
    commit e918d3959b5ae0e793b8f815ce62240e10ba03a4 upstream.
    
    This patch fixes Type-C Compliance Test TD 4.7.6 - Try.SNK DRP Connect
    SNKAS.
    
    The compliance tester moves into SNK_UNATTACHED during toggling and
    expects the PUT to apply Rp after tPDDebounce of detection. If the port
    is in SNK_TRY_WAIT_DEBOUNCE, it will move into SRC_TRYWAIT immediately
    and apply Rp. This violates TD 4.7.5.V.3, where the tester confirms that
    the PUT attaches Rp after the transitions to Unattached.SNK for
    tPDDebounce.
    
    Change the tcpm_set_state delay between SNK_TRY_WAIT_DEBOUNCE and
    SRC_TRYWAIT to tPDDebounce.
    
    Fixes: a0a3e04e6b2c ("staging: typec: tcpm: Check for Rp for tPDDebounce")
    Cc: stable <stable@kernel.org>
    Signed-off-by: RD Babiera <rdbabiera@google.com>
    Reviewed-by: Badhri Jagan Sridharan <badhri@google.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20250429234703.3748506-2-rdbabiera@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: displayport: Fix deadlock [+ + +]
Author: Andrei Kuchynski <akuchynski@chromium.org>
Date:   Thu Apr 24 08:44:28 2025 +0000

    usb: typec: ucsi: displayport: Fix deadlock
    
    commit 364618c89d4c57c85e5fc51a2446cd939bf57802 upstream.
    
    This patch introduces the ucsi_con_mutex_lock / ucsi_con_mutex_unlock
    functions to the UCSI driver. ucsi_con_mutex_lock ensures the connector
    mutex is only locked if a connection is established and the partner pointer
    is valid. This resolves a deadlock scenario where
    ucsi_displayport_remove_partner holds con->mutex waiting for
    dp_altmode_work to complete while dp_altmode_work attempts to acquire it.
    
    Cc: stable <stable@kernel.org>
    Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
    Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20250424084429.3220757-2-akuchynski@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: displayport: Fix NULL pointer access [+ + +]
Author: Andrei Kuchynski <akuchynski@chromium.org>
Date:   Thu Apr 24 08:44:29 2025 +0000

    usb: typec: ucsi: displayport: Fix NULL pointer access
    
    commit 312d79669e71283d05c05cc49a1a31e59e3d9e0e upstream.
    
    This patch ensures that the UCSI driver waits for all pending tasks in the
    ucsi_displayport_work workqueue to finish executing before proceeding with
    the partner removal.
    
    Cc: stable <stable@kernel.org>
    Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
    Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Benson Leung <bleung@chromium.org>
    Link: https://lore.kernel.org/r/20250424084429.3220757-3-akuchynski@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: uhci-platform: Make the clock really optional [+ + +]
Author: Alexey Charkov <alchark@gmail.com>
Date:   Fri Apr 25 18:11:11 2025 +0400

    usb: uhci-platform: Make the clock really optional
    
    commit a5c7973539b010874a37a0e846e62ac6f00553ba upstream.
    
    Device tree bindings state that the clock is optional for UHCI platform
    controllers, and some existing device trees don't provide those - such
    as those for VIA/WonderMedia devices.
    
    The driver however fails to probe now if no clock is provided, because
    devm_clk_get returns an error pointer in such case.
    
    Switch to devm_clk_get_optional instead, so that it could probe again
    on those platforms where no clocks are given.
    
    Cc: stable <stable@kernel.org>
    Fixes: 26c502701c52 ("usb: uhci: Add clk support to uhci-platform")
    Signed-off-by: Alexey Charkov <alchark@gmail.com>
    Link: https://lore.kernel.org/r/20250425-uhci-clock-optional-v1-1-a1d462592f29@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usbtmc: Fix erroneous generic_read ioctl return [+ + +]
Author: Dave Penkler <dpenkler@gmail.com>
Date:   Fri May 2 09:09:41 2025 +0200

    usb: usbtmc: Fix erroneous generic_read ioctl return
    
    commit 4e77d3ec7c7c0d9535ccf1138827cb9bb5480b9b upstream.
    
    wait_event_interruptible_timeout returns a long
    The return value was being assigned to an int causing an integer overflow
    when the remaining jiffies > INT_MAX which resulted in random error
    returns.
    
    Use a long return value, converting to the int ioctl return only on error.
    
    Fixes: bb99794a4792 ("usb: usbtmc: Add ioctl for vendor specific read")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dave Penkler <dpenkler@gmail.com>
    Link: https://lore.kernel.org/r/20250502070941.31819-4-dpenkler@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usbtmc: Fix erroneous get_stb ioctl error returns [+ + +]
Author: Dave Penkler <dpenkler@gmail.com>
Date:   Fri May 2 09:09:39 2025 +0200

    usb: usbtmc: Fix erroneous get_stb ioctl error returns
    
    commit cac01bd178d6a2a23727f138d647ce1a0e8a73a1 upstream.
    
    wait_event_interruptible_timeout returns a long
    The return was being assigned to an int causing an integer overflow when
    the remaining jiffies > INT_MAX resulting in random error returns.
    
    Use a long return value and convert to int ioctl return only on error.
    
    When the return value of wait_event_interruptible_timeout was <= INT_MAX
    the number of remaining jiffies was returned which has no meaning for the
    user. Return 0 on success.
    
    Reported-by: Michael Katzmann <vk2bea@gmail.com>
    Fixes: dbf3e7f654c0 ("Implement an ioctl to support the USMTMC-USB488 READ_STATUS_BYTE operation.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dave Penkler <dpenkler@gmail.com>
    Link: https://lore.kernel.org/r/20250502070941.31819-2-dpenkler@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usbtmc: Fix erroneous wait_srq ioctl return [+ + +]
Author: Dave Penkler <dpenkler@gmail.com>
Date:   Fri May 2 09:09:40 2025 +0200

    usb: usbtmc: Fix erroneous wait_srq ioctl return
    
    commit a9747c9b8b59ab4207effd20eb91a890acb44e16 upstream.
    
    wait_event_interruptible_timeout returns a long
    The return was being assigned to an int causing an integer overflow when
    the remaining jiffies > INT_MAX resulting in random error returns.
    
    Use a long return value,  converting to the int ioctl return only on
    error.
    
    Fixes: 739240a9f6ac ("usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dave Penkler <dpenkler@gmail.com>
    Link: https://lore.kernel.org/r/20250502070941.31819-3-dpenkler@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: usbtmc: use interruptible sleep in usbtmc_read [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Wed Apr 30 15:48:10 2025 +0200

    USB: usbtmc: use interruptible sleep in usbtmc_read
    
    commit 054c5145540e5ad5b80adf23a5e3e2fc281fb8aa upstream.
    
    usbtmc_read() calls usbtmc_generic_read()
    which uses interruptible sleep, but usbtmc_read()
    itself uses uninterruptble sleep for mutual exclusion
    between threads. That makes no sense.
    Both should use interruptible sleep.
    
    Fixes: 5b775f672cc99 ("USB: add USB test and measurement class driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/r/20250430134810.226015-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vfio/pci: Align huge faults to order [+ + +]
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Fri May 2 16:40:31 2025 -0600

    vfio/pci: Align huge faults to order
    
    commit c1d9dac0db168198b6f63f460665256dedad9b6e upstream.
    
    The vfio-pci huge_fault handler doesn't make any attempt to insert a
    mapping containing the faulting address, it only inserts mappings if the
    faulting address and resulting pfn are aligned.  This works in a lot of
    cases, particularly in conjunction with QEMU where DMA mappings linearly
    fault the mmap.  However, there are configurations where we don't get
    that linear faulting and pages are faulted on-demand.
    
    The scenario reported in the bug below is such a case, where the physical
    address width of the CPU is greater than that of the IOMMU, resulting in a
    VM where guest firmware has mapped device MMIO beyond the address width of
    the IOMMU.  In this configuration, the MMIO is faulted on demand and
    tracing indicates that occasionally the faults generate a VM_FAULT_OOM.
    Given the use case, this results in a "error: kvm run failed Bad address",
    killing the VM.
    
    The host is not under memory pressure in this test, therefore it's
    suspected that VM_FAULT_OOM is actually the result of a NULL return from
    __pte_offset_map_lock() in the get_locked_pte() path from insert_pfn().
    This suggests a potential race inserting a pte concurrent to a pmd, and
    maybe indicates some deficiency in the mm layer properly handling such a
    case.
    
    Nevertheless, Peter noted the inconsistency of vfio-pci's huge_fault
    handler where our mapping granularity depends on the alignment of the
    faulting address relative to the order rather than aligning the faulting
    address to the order to more consistently insert huge mappings.  This
    change not only uses the page tables more consistently and efficiently, but
    as any fault to an aligned page results in the same mapping, the race
    condition suspected in the VM_FAULT_OOM is avoided.
    
    Reported-by: Adolfo <adolfotregosa@gmail.com>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220057
    Fixes: 09dfc8a5f2ce ("vfio/pci: Fallback huge faults for unaligned pfn")
    Cc: stable@vger.kernel.org
    Tested-by: Adolfo <adolfotregosa@gmail.com>
    Co-developed-by: Peter Xu <peterx@redhat.com>
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Link: https://lore.kernel.org/r/20250502224035.3183451-1-alex.williamson@redhat.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtio-net: don't re-enable refill work too early when NAPI is disabled [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Apr 30 09:37:58 2025 -0700

    virtio-net: don't re-enable refill work too early when NAPI is disabled
    
    [ Upstream commit 1e20324b23f0afba27997434fb978f1e4a1dbcb6 ]
    
    Commit 4bc12818b363 ("virtio-net: disable delayed refill when pausing rx")
    fixed a deadlock between reconfig paths and refill work trying to disable
    the same NAPI instance. The refill work can't run in parallel with reconfig
    because trying to double-disable a NAPI instance causes a stall under the
    instance lock, which the reconfig path needs to re-enable the NAPI and
    therefore unblock the stalled thread.
    
    There are two cases where we re-enable refill too early. One is in the
    virtnet_set_queues() handler. We call it when installing XDP:
    
       virtnet_rx_pause_all(vi);
       ...
       virtnet_napi_tx_disable(..);
       ...
       virtnet_set_queues(..);
       ...
       virtnet_rx_resume_all(..);
    
    We want the work to be disabled until we call virtnet_rx_resume_all(),
    but virtnet_set_queues() kicks it before NAPIs were re-enabled.
    
    The other case is a more trivial case of mis-ordering in
    __virtnet_rx_resume() found by code inspection.
    
    Taking the spin lock in virtnet_set_queues() (requested during review)
    may be unnecessary as we are under rtnl_lock and so are all paths writing
    to ->refill_enabled.
    
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Fixes: 4bc12818b363 ("virtio-net: disable delayed refill when pausing rx")
    Fixes: 413f0271f396 ("net: protect NAPI enablement with netdev_lock()")
    Link: https://patch.msgid.link/20250430163758.3029367-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

virtio-net: fix total qstat values [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue May 6 17:32:21 2025 -0700

    virtio-net: fix total qstat values
    
    [ Upstream commit 001160ec8c59115efc39e197d40829bdafd4d7f5 ]
    
    NIPA tests report that the interface statistics reported
    via qstat are lower than those reported via ip link.
    Looks like this is because some tests flip the queue
    count up and down, and we end up with some of the traffic
    accounted on disabled queues.
    
    Add up counters from disabled queues.
    
    Fixes: d888f04c09bb ("virtio-net: support queue stat")
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://patch.msgid.link/20250507003221.823267-3-kuba@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Apr 30 09:38:36 2025 -0700

    virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable()
    
    [ Upstream commit 4397684a292a71fbc1e815c3e283f7490ddce5ae ]
    
    The selftests added to our CI by Bui Quang Minh recently reveals
    that there is a mem leak on the error path of virtnet_xsk_pool_enable():
    
    unreferenced object 0xffff88800a68a000 (size 2048):
      comm "xdp_helper", pid 318, jiffies 4294692778
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace (crc 0):
        __kvmalloc_node_noprof+0x402/0x570
        virtnet_xsk_pool_enable+0x293/0x6a0 (drivers/net/virtio_net.c:5882)
        xp_assign_dev+0x369/0x670 (net/xdp/xsk_buff_pool.c:226)
        xsk_bind+0x6a5/0x1ae0
        __sys_bind+0x15e/0x230
        __x64_sys_bind+0x72/0xb0
        do_syscall_64+0xc1/0x1d0
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Acked-by: Jason Wang <jasowang@redhat.com>
    Fixes: e9f3962441c0 ("virtio_net: xsk: rx: support fill with xsk buffer")
    Link: https://patch.msgid.link/20250430163836.3029761-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: cfg80211: fix out-of-bounds access during multi-link element defragmentation [+ + +]
Author: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
Date:   Thu Apr 24 18:01:42 2025 +0530

    wifi: cfg80211: fix out-of-bounds access during multi-link element defragmentation
    
    commit 023c1f2f0609218103cbcb48e0104b144d4a16dc upstream.
    
    Currently during the multi-link element defragmentation process, the
    multi-link element length added to the total IEs length when calculating
    the length of remaining IEs after the multi-link element in
    cfg80211_defrag_mle(). This could lead to out-of-bounds access if the
    multi-link element or its corresponding fragment elements are the last
    elements in the IEs buffer.
    
    To address this issue, correctly calculate the remaining IEs length by
    deducting the multi-link element end offset from total IEs end offset.
    
    Cc: stable@vger.kernel.org
    Fixes: 2481b5da9c6b ("wifi: cfg80211: handle BSS data contained in ML probe responses")
    Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
    Link: https://patch.msgid.link/20250424-fix_mle_defragmentation_oob_access-v1-1-84412a1743fa@quicinc.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix the type of status_code for negotiated TID to Link Mapping [+ + +]
Author: Michael-CY Lee <michael-cy.lee@mediatek.com>
Date:   Mon May 5 16:19:46 2025 +0800

    wifi: mac80211: fix the type of status_code for negotiated TID to Link Mapping
    
    [ Upstream commit e12a42f64fc3d74872b349eedd47f90c6676b78a ]
    
    The status code should be type of __le16.
    
    Fixes: 83e897a961b8 ("wifi: ieee80211: add definitions for negotiated TID to Link map")
    Fixes: 8f500fbc6c65 ("wifi: mac80211: process and save negotiated TID to Link mapping request")
    Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
    Link: https://patch.msgid.link/20250505081946.3927214-1-michael-cy.lee@mediatek.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/bhi: Do not set BHI_DIS_S in 32-bit mode [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Mon May 5 14:35:12 2025 -0700

    x86/bhi: Do not set BHI_DIS_S in 32-bit mode
    
    commit 073fdbe02c69c43fb7c0d547ec265c7747d4a646 upstream.
    
    With the possibility of intra-mode BHI via cBPF, complete mitigation for
    BHI is to use IBHF (history fence) instruction with BHI_DIS_S set. Since
    this new instruction is only available in 64-bit mode, setting BHI_DIS_S in
    32-bit mode is only a partial mitigation.
    
    Do not set BHI_DIS_S in 32-bit mode so as to avoid reporting misleading
    mitigated status. With this change IBHF won't be used in 32-bit mode, also
    remove the CONFIG_X86_64 check from emit_spectre_bhb_barrier().
    
    Suggested-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/bpf: Add IBHF call at end of classic BPF [+ + +]
Author: Daniel Sneddon <daniel.sneddon@linux.intel.com>
Date:   Mon May 5 14:35:12 2025 -0700

    x86/bpf: Add IBHF call at end of classic BPF
    
    commit 9f725eec8fc0b39bdc07dcc8897283c367c1a163 upstream.
    
    Classic BPF programs can be run by unprivileged users, allowing
    unprivileged code to execute inside the kernel. Attackers can use this to
    craft branch history in kernel mode that can influence the target of
    indirect branches.
    
    BHI_DIS_S provides user-kernel isolation of branch history, but cBPF can be
    used to bypass this protection by crafting branch history in kernel mode.
    To stop intra-mode attacks via cBPF programs, Intel created a new
    instruction Indirect Branch History Fence (IBHF). IBHF prevents the
    predicted targets of subsequent indirect branches from being influenced by
    branch history prior to the IBHF. IBHF is only effective while BHI_DIS_S is
    enabled.
    
    Add the IBHF instruction to cBPF jitted code's exit path. Add the new fence
    when the hardware mitigation is enabled (i.e., X86_FEATURE_CLEAR_BHB_HW is
    set) or after the software sequence (X86_FEATURE_CLEAR_BHB_LOOP) is being
    used in a virtual machine. Note that X86_FEATURE_CLEAR_BHB_HW and
    X86_FEATURE_CLEAR_BHB_LOOP are mutually exclusive, so the JIT compiler will
    only emit the new fence, not the SW sequence, when X86_FEATURE_CLEAR_BHB_HW
    is set.
    
    Hardware that enumerates BHI_NO basically has BHI_DIS_S protections always
    enabled, regardless of the value of BHI_DIS_S. Since BHI_DIS_S doesn't
    protect against intra-mode attacks, enumerate BHI bug on BHI_NO hardware as
    well.
    
    Signed-off-by: Daniel Sneddon <daniel.sneddon@linux.intel.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/bpf: Call branch history clearing sequence on exit [+ + +]
Author: Daniel Sneddon <daniel.sneddon@linux.intel.com>
Date:   Mon May 5 14:35:12 2025 -0700

    x86/bpf: Call branch history clearing sequence on exit
    
    commit d4e89d212d401672e9cdfe825d947ee3a9fbe3f5 upstream.
    
    Classic BPF programs have been identified as potential vectors for
    intra-mode Branch Target Injection (BTI) attacks. Classic BPF programs can
    be run by unprivileged users. They allow unprivileged code to execute
    inside the kernel. Attackers can use unprivileged cBPF to craft branch
    history in kernel mode that can influence the target of indirect branches.
    
    Introduce a branch history buffer (BHB) clearing sequence during the JIT
    compilation of classic BPF programs. The clearing sequence is the same as
    is used in previous mitigations to protect syscalls. Since eBPF programs
    already have their own mitigations in place, only insert the call on
    classic programs that aren't run by privileged users.
    
    Signed-off-by: Daniel Sneddon <daniel.sneddon@linux.intel.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/ibt: Keep IBT disabled during alternative patching [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Sat May 3 09:46:31 2025 -0700

    x86/ibt: Keep IBT disabled during alternative patching
    
    commit ebebe30794d38c51f71fe4951ba6af4159d9837d upstream.
    
    cfi_rewrite_callers() updates the fineIBT hash matching at the caller side,
    but except for paranoid-mode it relies on apply_retpoline() and friends for
    any ENDBR relocation. This could temporarily cause an indirect branch to
    land on a poisoned ENDBR.
    
    For instance, with para-virtualization enabled, a simple wrmsrl() could
    have an indirect branch pointing to native_write_msr() who's ENDBR has been
    relocated due to fineIBT:
    
    <wrmsrl>:
           push   %rbp
           mov    %rsp,%rbp
           mov    %esi,%eax
           mov    %rsi,%rdx
           shr    $0x20,%rdx
           mov    %edi,%edi
           mov    %rax,%rsi
           call   *0x21e65d0(%rip)        # <pv_ops+0xb8>
           ^^^^^^^^^^^^^^^^^^^^^^^
    
    Such an indirect call during the alternative patching could #CP if the
    caller is not *yet* adjusted for the new target ENDBR. To prevent a false
     #CP, keep CET-IBT disabled until all callers are patched.
    
    Patching during the module load does not need to be guarded by IBT-disable
    because the module code is not executed until the patching is complete.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/its: Add "vmexit" option to skip mitigation on some CPUs [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Mon Nov 18 09:53:12 2024 -0800

    x86/its: Add "vmexit" option to skip mitigation on some CPUs
    
    commit 2665281a07e19550944e8354a2024635a7b2714a upstream.
    
    Ice Lake generation CPUs are not affected by guest/host isolation part of
    ITS. If a user is only concerned about KVM guests, they can now choose a
    new cmdline option "vmexit" that will not deploy the ITS mitigation when
    CPU is not affected by guest/host isolation. This saves the performance
    overhead of ITS mitigation on Ice Lake gen CPUs.
    
    When "vmexit" option selected, if the CPU is affected by ITS guest/host
    isolation, the default ITS mitigation is deployed.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Add support for ITS-safe indirect thunk [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri Jun 21 21:17:21 2024 -0700

    x86/its: Add support for ITS-safe indirect thunk
    
    commit 8754e67ad4ac692c67ff1f99c0d07156f04ae40c upstream.
    
    Due to ITS, indirect branches in the lower half of a cacheline may be
    vulnerable to branch target injection attack.
    
    Introduce ITS-safe thunks to patch indirect branches in the lower half of
    cacheline with the thunk. Also thunk any eBPF generated indirect branches
    in emit_indirect_jump().
    
    Below category of indirect branches are not mitigated:
    
    - Indirect branches in the .init section are not mitigated because they are
      discarded after boot.
    - Indirect branches that are explicitly marked retpoline-safe.
    
    Note that retpoline also mitigates the indirect branches against ITS. This
    is because the retpoline sequence fills an RSB entry before RET, and it
    does not suffer from RSB-underflow part of the ITS.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Add support for ITS-safe return thunk [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri Jun 21 21:17:21 2024 -0700

    x86/its: Add support for ITS-safe return thunk
    
    commit a75bf27fe41abe658c53276a0c486c4bf9adecfc upstream.
    
    RETs in the lower half of cacheline may be affected by ITS bug,
    specifically when the RSB-underflows. Use ITS-safe return thunk for such
    RETs.
    
    RETs that are not patched:
    
    - RET in retpoline sequence does not need to be patched, because the
      sequence itself fills an RSB before RET.
    - RET in Call Depth Tracking (CDT) thunks __x86_indirect_{call|jump}_thunk
      and call_depth_return_thunk are not patched because CDT by design
      prevents RSB-underflow.
    - RETs in .init section are not reachable after init.
    - RETs that are explicitly marked safe with ANNOTATE_UNRET_SAFE.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Add support for RSB stuffing mitigation [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Mon Dec 2 12:07:08 2024 -0800

    x86/its: Add support for RSB stuffing mitigation
    
    commit facd226f7e0c8ca936ac114aba43cb3e8b94e41e upstream.
    
    When retpoline mitigation is enabled for spectre-v2, enabling
    call-depth-tracking and RSB stuffing also mitigates ITS. Add cmdline option
    indirect_target_selection=stuff to allow enabling RSB stuffing mitigation.
    
    When retpoline mitigation is not enabled, =stuff option is ignored, and
    default mitigation for ITS is deployed.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Align RETs in BHB clear sequence to avoid thunking [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri May 2 06:25:19 2025 -0700

    x86/its: Align RETs in BHB clear sequence to avoid thunking
    
    commit f0cd7091cc5a032c8870b4285305d9172569d126 upstream.
    
    The software mitigation for BHI is to execute BHB clear sequence at syscall
    entry, and possibly after a cBPF program. ITS mitigation thunks RETs in the
    lower half of the cacheline. This causes the RETs in the BHB clear sequence
    to be thunked as well, adding unnecessary branches to the BHB clear
    sequence.
    
    Since the sequence is in hot path, align the RET instructions in the
    sequence to avoid thunking.
    
    This is how disassembly clear_bhb_loop() looks like after this change:
    
       0x44 <+4>:     mov    $0x5,%ecx
       0x49 <+9>:     call   0xffffffff81001d9b <clear_bhb_loop+91>
       0x4e <+14>:    jmp    0xffffffff81001de5 <clear_bhb_loop+165>
       0x53 <+19>:    int3
       ...
       0x9b <+91>:    call   0xffffffff81001dce <clear_bhb_loop+142>
       0xa0 <+96>:    ret
       0xa1 <+97>:    int3
       ...
       0xce <+142>:   mov    $0x5,%eax
       0xd3 <+147>:   jmp    0xffffffff81001dd6 <clear_bhb_loop+150>
       0xd5 <+149>:   nop
       0xd6 <+150>:   sub    $0x1,%eax
       0xd9 <+153>:   jne    0xffffffff81001dd3 <clear_bhb_loop+147>
       0xdb <+155>:   sub    $0x1,%ecx
       0xde <+158>:   jne    0xffffffff81001d9b <clear_bhb_loop+91>
       0xe0 <+160>:   ret
       0xe1 <+161>:   int3
       0xe2 <+162>:   int3
       0xe3 <+163>:   int3
       0xe4 <+164>:   int3
       0xe5 <+165>:   lfence
       0xe8 <+168>:   pop    %rbp
       0xe9 <+169>:   ret
    
    Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Enable Indirect Target Selection mitigation [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri Jun 21 20:23:23 2024 -0700

    x86/its: Enable Indirect Target Selection mitigation
    
    commit f4818881c47fd91fcb6d62373c57c7844e3de1c0 upstream.
    
    Indirect Target Selection (ITS) is a bug in some pre-ADL Intel CPUs with
    eIBRS. It affects prediction of indirect branch and RETs in the
    lower half of cacheline. Due to ITS such branches may get wrongly predicted
    to a target of (direct or indirect) branch that is located in the upper
    half of the cacheline.
    
    Scope of impact
    ===============
    
    Guest/host isolation
    --------------------
    When eIBRS is used for guest/host isolation, the indirect branches in the
    VMM may still be predicted with targets corresponding to branches in the
    guest.
    
    Intra-mode
    ----------
    cBPF or other native gadgets can be used for intra-mode training and
    disclosure using ITS.
    
    User/kernel isolation
    ---------------------
    When eIBRS is enabled user/kernel isolation is not impacted.
    
    Indirect Branch Prediction Barrier (IBPB)
    -----------------------------------------
    After an IBPB, indirect branches may be predicted with targets
    corresponding to direct branches which were executed prior to IBPB. This is
    mitigated by a microcode update.
    
    Add cmdline parameter indirect_target_selection=off|on|force to control the
    mitigation to relocate the affected branches to an ITS-safe thunk i.e.
    located in the upper half of cacheline. Also add the sysfs reporting.
    
    When retpoline mitigation is deployed, ITS safe-thunks are not needed,
    because retpoline sequence is already ITS-safe. Similarly, when call depth
    tracking (CDT) mitigation is deployed (retbleed=stuff), ITS safe return
    thunk is not used, as CDT prevents RSB-underflow.
    
    To not overcomplicate things, ITS mitigation is not supported with
    spectre-v2 lfence;jmp mitigation. Moreover, it is less practical to deploy
    lfence;jmp mitigation on ITS affected parts anyways.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Enumerate Indirect Target Selection (ITS) bug [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Fri Jun 21 17:40:41 2024 -0700

    x86/its: Enumerate Indirect Target Selection (ITS) bug
    
    commit 159013a7ca18c271ff64192deb62a689b622d860 upstream.
    
    ITS bug in some pre-Alderlake Intel CPUs may allow indirect branches in the
    first half of a cache line get predicted to a target of a branch located in
    the second half of the cache line.
    
    Set X86_BUG_ITS on affected CPUs. Mitigation to follow in later commits.
    
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: FineIBT-paranoid vs ITS [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Apr 23 09:57:31 2025 +0200

    x86/its: FineIBT-paranoid vs ITS
    
    commit e52c1dc7455d32c8a55f9949d300e5e87d011fa6 upstream.
    
    FineIBT-paranoid was using the retpoline bytes for the paranoid check,
    disabling retpolines, because all parts that have IBT also have eIBRS
    and thus don't need no stinking retpolines.
    
    Except... ITS needs the retpolines for indirect calls must not be in
    the first half of a cacheline :-/
    
    So what was the paranoid call sequence:
    
      <fineibt_paranoid_start>:
       0:   41 ba 78 56 34 12       mov    $0x12345678, %r10d
       6:   45 3b 53 f7             cmp    -0x9(%r11), %r10d
       a:   4d 8d 5b <f0>           lea    -0x10(%r11), %r11
       e:   75 fd                   jne    d <fineibt_paranoid_start+0xd>
      10:   41 ff d3                call   *%r11
      13:   90                      nop
    
    Now becomes:
    
      <fineibt_paranoid_start>:
       0:   41 ba 78 56 34 12       mov    $0x12345678, %r10d
       6:   45 3b 53 f7             cmp    -0x9(%r11), %r10d
       a:   4d 8d 5b f0             lea    -0x10(%r11), %r11
       e:   2e e8 XX XX XX XX       cs call __x86_indirect_paranoid_thunk_r11
    
      Where the paranoid_thunk looks like:
    
       1d:  <ea>                    (bad)
       __x86_indirect_paranoid_thunk_r11:
       1e:  75 fd                   jne 1d
       __x86_indirect_its_thunk_r11:
       20:  41 ff eb                jmp *%r11
       23:  cc                      int3
    
    [ dhansen: remove initialization to false ]
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    [ Just a portion of the original commit, in order to fix a build issue
      in stable kernels due to backports ]
    Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
    Link: https://lore.kernel.org/r/20250514113952.GB16434@noisy.programming.kicks-ass.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Fix build errors when CONFIG_MODULES=n [+ + +]
Author: Eric Biggers <ebiggers@google.com>
Date:   Mon May 12 19:58:39 2025 -0700

    x86/its: Fix build errors when CONFIG_MODULES=n
    
    commit 9f35e33144ae5377d6a8de86dd3bd4d995c6ac65 upstream.
    
    Fix several build errors when CONFIG_MODULES=n, including the following:
    
    ../arch/x86/kernel/alternative.c:195:25: error: incomplete definition of type 'struct module'
      195 |         for (int i = 0; i < mod->its_num_pages; i++) {
    
    Fixes: 872df34d7c51 ("x86/its: Use dynamic thunks for indirect branches")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Acked-by: Dave Hansen <dave.hansen@intel.com>
    Tested-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/its: Use dynamic thunks for indirect branches [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Mon Oct 14 10:05:48 2024 -0700

    x86/its: Use dynamic thunks for indirect branches
    
    commit 872df34d7c51a79523820ea6a14860398c639b87 upstream.
    
    ITS mitigation moves the unsafe indirect branches to a safe thunk. This
    could degrade the prediction accuracy as the source address of indirect
    branches becomes same for different execution paths.
    
    To improve the predictions, and hence the performance, assign a separate
    thunk for each indirect callsite. This is also a defense-in-depth measure
    to avoid indirect branches aliasing with each other.
    
    As an example, 5000 dynamic thunks would utilize around 16 bits of the
    address space, thereby gaining entropy. For a BTB that uses
    32 bits for indexing, dynamic thunks could provide better prediction
    accuracy over fixed thunks.
    
    Have ITS thunks be variable sized and use EXECMEM_MODULE_TEXT such that
    they are both more flexible (got to extend them later) and live in 2M TLBs,
    just like kernel code, avoiding undue TLB pressure.
    
      [ pawan: CONFIG_EXECMEM_ROX is not supported on backport kernel, made
               adjustments to set memory to RW and ROX ]
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/microcode: Consolidate the loader enablement checking [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Mon Apr 14 11:59:33 2025 +0200

    x86/microcode: Consolidate the loader enablement checking
    
    commit 5214a9f6c0f56644acb9d2cbb58facf1856d322b upstream.
    
    Consolidate the whole logic which determines whether the microcode loader
    should be enabled or not into a single function and call it everywhere.
    
    Well, almost everywhere - not in mk_early_pgtbl_32() because there the kernel
    is running without paging enabled and checking dis_ucode_ldr et al would
    require physical addresses and uglification of the code.
    
    But since this is 32-bit, the easier thing to do is to simply map the initrd
    unconditionally especially since that mapping is getting removed later anyway
    by zap_early_initrd_mapping() and avoid the uglification.
    
    In doing so, address the issue of old 486er machines without CPUID
    support, not booting current kernels.
    
      [ mingo: Fix no previous prototype for ‘microcode_loader_disabled’ [-Wmissing-prototypes] ]
    
    Fixes: 4c585af7180c1 ("x86/boot/32: Temporarily map initrd for microcode loading")
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/CANpbe9Wm3z8fy9HbgS8cuhoj0TREYEEkBipDuhgkWFvqX0UoVQ@mail.gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/mm: Eliminate window where TLB flushes may be inadvertently skipped [+ + +]
Author: Dave Hansen <dave.hansen@linux.intel.com>
Date:   Thu May 8 15:41:32 2025 -0700

    x86/mm: Eliminate window where TLB flushes may be inadvertently skipped
    
    commit fea4e317f9e7e1f449ce90dedc27a2d2a95bee5a upstream.
    
    tl;dr: There is a window in the mm switching code where the new CR3 is
    set and the CPU should be getting TLB flushes for the new mm.  But
    should_flush_tlb() has a bug and suppresses the flush.  Fix it by
    widening the window where should_flush_tlb() sends an IPI.
    
    Long Version:
    
    === History ===
    
    There were a few things leading up to this.
    
    First, updating mm_cpumask() was observed to be too expensive, so it was
    made lazier.  But being lazy caused too many unnecessary IPIs to CPUs
    due to the now-lazy mm_cpumask().  So code was added to cull
    mm_cpumask() periodically[2].  But that culling was a bit too aggressive
    and skipped sending TLB flushes to CPUs that need them.  So here we are
    again.
    
    === Problem ===
    
    The too-aggressive code in should_flush_tlb() strikes in this window:
    
            // Turn on IPIs for this CPU/mm combination, but only
            // if should_flush_tlb() agrees:
            cpumask_set_cpu(cpu, mm_cpumask(next));
    
            next_tlb_gen = atomic64_read(&next->context.tlb_gen);
            choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush);
            load_new_mm_cr3(need_flush);
            // ^ After 'need_flush' is set to false, IPIs *MUST*
            // be sent to this CPU and not be ignored.
    
            this_cpu_write(cpu_tlbstate.loaded_mm, next);
            // ^ Not until this point does should_flush_tlb()
            // become true!
    
    should_flush_tlb() will suppress TLB flushes between load_new_mm_cr3()
    and writing to 'loaded_mm', which is a window where they should not be
    suppressed.  Whoops.
    
    === Solution ===
    
    Thankfully, the fuzzy "just about to write CR3" window is already marked
    with loaded_mm==LOADED_MM_SWITCHING.  Simply checking for that state in
    should_flush_tlb() is sufficient to ensure that the CPU is targeted with
    an IPI.
    
    This will cause more TLB flush IPIs.  But the window is relatively small
    and I do not expect this to cause any kind of measurable performance
    impact.
    
    Update the comment where LOADED_MM_SWITCHING is written since it grew
    yet another user.
    
    Peter Z also raised a concern that should_flush_tlb() might not observe
    'loaded_mm' and 'is_lazy' in the same order that switch_mm_irqs_off()
    writes them.  Add a barrier to ensure that they are observed in the
    order they are written.
    
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Acked-by: Rik van Riel <riel@surriel.com>
    Link: https://lore.kernel.org/oe-lkp/202411282207.6bd28eae-lkp@intel.com/ [1]
    Fixes: 6db2526c1d69 ("x86/mm/tlb: Only trim the mm_cpumask once a second") [2]
    Reported-by: Stephen Dolan <sdolan@janestreet.com>
    Cc: stable@vger.kernel.org
    Acked-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xen: swiotlb: Use swiotlb bouncing if kmalloc allocation demands it [+ + +]
Author: John Ernberg <john.ernberg@actia.se>
Date:   Fri May 2 11:40:55 2025 +0000

    xen: swiotlb: Use swiotlb bouncing if kmalloc allocation demands it
    
    commit cd9c058489053e172a6654cad82ee936d1b09fab upstream.
    
    Xen swiotlb support was missed when the patch set starting with
    4ab5f8ec7d71 ("mm/slab: decouple ARCH_KMALLOC_MINALIGN from
    ARCH_DMA_MINALIGN") was merged.
    
    When running Xen on iMX8QXP, a SoC without IOMMU, the effect was that USB
    transfers ended up corrupted when there was more than one URB inflight at
    the same time.
    
    Add a call to dma_kmalloc_needs_bounce() to make sure that allocations too
    small for DMA get bounced via swiotlb.
    
    Closes: https://lore.kernel.org/linux-usb/ab2776f0-b838-4cf6-a12a-c208eb6aad59@actia.se/
    Fixes: 4ab5f8ec7d71 ("mm/slab: decouple ARCH_KMALLOC_MINALIGN from ARCH_DMA_MINALIGN")
    Cc: stable@kernel.org # v6.5+
    Signed-off-by: John Ernberg <john.ernberg@actia.se>
    Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Message-ID: <20250502114043.1968976-2-john.ernberg@actia.se>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xenbus: Use kref to track req lifetime [+ + +]
Author: Jason Andryuk <jason.andryuk@amd.com>
Date:   Tue May 6 17:09:33 2025 -0400

    xenbus: Use kref to track req lifetime
    
    commit 1f0304dfd9d217c2f8b04a9ef4b3258a66eedd27 upstream.
    
    Marek reported seeing a NULL pointer fault in the xenbus_thread
    callstack:
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    RIP: e030:__wake_up_common+0x4c/0x180
    Call Trace:
     <TASK>
     __wake_up_common_lock+0x82/0xd0
     process_msg+0x18e/0x2f0
     xenbus_thread+0x165/0x1c0
    
    process_msg+0x18e is req->cb(req).  req->cb is set to xs_wake_up(), a
    thin wrapper around wake_up(), or xenbus_dev_queue_reply().  It seems
    like it was xs_wake_up() in this case.
    
    It seems like req may have woken up the xs_wait_for_reply(), which
    kfree()ed the req.  When xenbus_thread resumes, it faults on the zero-ed
    data.
    
    Linux Device Drivers 2nd edition states:
    "Normally, a wake_up call can cause an immediate reschedule to happen,
    meaning that other processes might run before wake_up returns."
    ... which would match the behaviour observed.
    
    Change to keeping two krefs on each request.  One for the caller, and
    one for xenbus_thread.  Each will kref_put() when finished, and the last
    will free it.
    
    This use of kref matches the description in
    Documentation/core-api/kref.rst
    
    Link: https://lore.kernel.org/xen-devel/ZO0WrR5J0xuwDIxW@mail-itl/
    Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    Fixes: fd8aa9095a95 ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Message-ID: <20250506210935.5607-1-jason.andryuk@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: dbc: Avoid event polling busyloop if pending rx transfers are inactive. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Mon May 5 15:56:30 2025 +0300

    xhci: dbc: Avoid event polling busyloop if pending rx transfers are inactive.
    
    commit cab63934c33b12c0d1e9f4da7450928057f2c142 upstream.
    
    Event polling delay is set to 0 if there are any pending requests in
    either rx or tx requests lists. Checking for pending requests does
    not work well for "IN" transfers as the tty driver always queues
    requests to the list and TRBs to the ring, preparing to receive data
    from the host.
    
    This causes unnecessary busylooping and cpu hogging.
    
    Only set the event polling delay to 0 if there are pending tx "write"
    transfers, or if it was less than 10ms since last active data transfer
    in any direction.
    
    Cc: Łukasz Bartosik <ukaszb@chromium.org>
    Fixes: fb18e5bb9660 ("xhci: dbc: poll at different rate depending on data transfer activity")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20250505125630.561699-3-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>