Changelog in Linux kernel 6.12.67

 
ALSA: hda/cirrus_scodec_test: Fix incorrect setup of gpiochip [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Tue Jan 13 13:09:54 2026 +0000

    ALSA: hda/cirrus_scodec_test: Fix incorrect setup of gpiochip
    
    [ Upstream commit c5e96e54eca3876d4ce8857e2e22adbe9f44f4a2 ]
    
    Set gpiochip parent to the struct device of the dummy GPIO driver
    so that the software node will be associated with the GPIO chip.
    
    The recent commit e5d527be7e698 ("gpio: swnode: don't use the
    swnode's name as the key for GPIO lookup") broke cirrus_scodec_test,
    because the software node no longer gets associated with the GPIO
    driver by name.
    
    Instead, setting struct gpio_chip.parent to the owning struct device
    will find the node using a normal fwnode lookup.
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Fixes: 2144833e7b414 ("ALSA: hda: cirrus_scodec: Add KUnit test")
    Link: https://patch.msgid.link/20260113130954.574670-1-rf@opensource.cirrus.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer [+ + +]
Author: Jaroslav Kysela <perex@perex.cz>
Date:   Wed Jan 7 22:36:42 2026 +0100

    ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer
    
    commit 47c27c9c9c720bc93fdc69605d0ecd9382e99047 upstream.
    
    Handle the error code from snd_pcm_buffer_access_lock() in
    snd_pcm_runtime_buffer_set_silence() function.
    
    Found by Alexandros Panagiotou <apanagio@redhat.com>
    
    Fixes: 93a81ca06577 ("ALSA: pcm: Fix race of buffer access at PCM OSS layer")
    Cc: stable@vger.kernel.org # 6.15
    Signed-off-by: Jaroslav Kysela <perex@perex.cz>
    Link: https://patch.msgid.link/20260107213642.332954-1-perex@perex.cz
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: codecs: wsa881x: fix unnecessary initialisation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 2 12:14:11 2026 +0100

    ASoC: codecs: wsa881x: fix unnecessary initialisation
    
    commit 29d71b8a5a40708b3eed9ba4953bfc2312c9c776 upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
    Cc: stable@vger.kernel.org      # 5.6
    Cc: Srinivas Kandagatla <srini@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260102111413.9605-3-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: codecs: wsa883x: fix unnecessary initialisation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 2 12:14:10 2026 +0100

    ASoC: codecs: wsa883x: fix unnecessary initialisation
    
    commit 49aadf830eb048134d33ad7329d92ecff45d8dbb upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    This avoids repeated initialisation of the codecs during boot of
    machines like the Lenovo ThinkPad X13s:
    
    [   11.614523] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.618022] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.621377] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.624065] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.631382] wsa883x-codec sdw:1:0:0217:0202:00:2: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.634424] wsa883x-codec sdw:1:0:0217:0202:00:2: WSA883X Version 1_1, Variant: WSA8835_V2
    
    Fixes: 43b8c7dc85a1 ("ASoC: codecs: add wsa883x amplifier support")
    Cc: stable@vger.kernel.org      # 6.0
    Cc: Srinivas Kandagatla <srini@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260102111413.9605-2-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: codecs: wsa884x: fix codec initialisation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 2 12:14:12 2026 +0100

    ASoC: codecs: wsa884x: fix codec initialisation
    
    commit 120f3e6ff76209ee2f62a64e5e7e9d70274df42b upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    Fix the inverted hw_init flag which was set to false instead of true
    after initialisation which defeats its purpose and may result in
    repeated unnecessary initialisation.
    
    Similarly, the initial state of the flag was also inverted so that the
    codec would only be initialised and brought out of regmap cache only
    mode if its status first transitions to UNATTACHED.
    
    Fixes: aa21a7d4f68a ("ASoC: codecs: wsa884x: Add WSA884x family of speakers")
    Cc: stable@vger.kernel.org      # 6.5
    Cc: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260102111413.9605-4-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: sdw_utils: cs42l43: Enable Headphone pin for LINEOUT jack type [+ + +]
Author: Cole Leavitt <cole@unwrap.rs>
Date:   Tue Jan 13 19:55:18 2026 -0700

    ASoC: sdw_utils: cs42l43: Enable Headphone pin for LINEOUT jack type
    
    [ Upstream commit 390caeed0897fcac75f3c414dbdd85d593183d9c ]
    
    The CS42L43 codec's load detection can return different impedance values
    that map to either HEADPHONE or LINEOUT jack types. However, the
    soc_jack_pins array only maps SND_JACK_HEADPHONE to the "Headphone" DAPM
    pin, not SND_JACK_LINEOUT.
    
    When headphones are detected with an impedance that maps to LINEOUT
    (such as impedance value 0x2), the driver reports SND_JACK_LINEOUT.
    Since this doesn't match the jack pin mask, the "Headphone" DAPM pin
    is not activated, and no audio is routed to the headphone outputs.
    
    Fix by adding SND_JACK_LINEOUT to the Headphone pin mask, so that both
    headphone and line-out detection properly enable the headphone output
    path.
    
    This fixes no audio output on devices like the Lenovo ThinkPad P16 Gen 3
    where headphones are detected with LINEOUT impedance.
    
    Fixes: d74bad3b7452 ("ASoC: intel: sof_sdw_cs42l43: Create separate jacks for hp and mic")
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Cole Leavitt <cole@unwrap.rs>
    Link: https://patch.msgid.link/20260114025518.28519-1-cole@unwrap.rs
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tlv320adcx140: fix null pointer [+ + +]
Author: Emil Svendsen <emas@bang-olufsen.dk>
Date:   Tue Jan 13 11:58:45 2026 +0100

    ASoC: tlv320adcx140: fix null pointer
    
    [ Upstream commit be7664c81d3129fc313ef62ff275fd3d33cfecd4 ]
    
    The "snd_soc_component" in "adcx140_priv" was only used once but never
    set. It was only used for reaching "dev" which is already present in
    "adcx140_priv".
    
    Fixes: 4e82971f7b55 ("ASoC: tlv320adcx140: Add a new kcontrol")
    Signed-off-by: Emil Svendsen <emas@bang-olufsen.dk>
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-2-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tlv320adcx140: fix word length [+ + +]
Author: Emil Svendsen <emas@bang-olufsen.dk>
Date:   Tue Jan 13 11:58:47 2026 +0100

    ASoC: tlv320adcx140: fix word length
    
    [ Upstream commit 46378ab9fcb796dca46b51e10646f636e2c661f9 ]
    
    The word length is the physical width of the channel slots. So the
    hw_params would misconfigure when format width and physical width
    doesn't match. Like S24_LE which has data width of 24 bits but physical
    width of 32 bits. So if using asymmetric formats you will get a lot of
    noise.
    
    Fixes: 689c7655b50c5 ("ASoC: tlv320adcx140: Add the tlv320adcx140 codec driver family")
    Signed-off-by: Emil Svendsen <emas@bang-olufsen.dk>
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-4-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Reject narrower access to pointer ctx fields [+ + +]
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date:   Tue Jul 22 16:32:32 2025 +0200

    bpf: Reject narrower access to pointer ctx fields
    
    commit e09299225d5ba3916c91ef70565f7d2187e4cca0 upstream.
    
    The following BPF program, simplified from a syzkaller repro, causes a
    kernel warning:
    
        r0 = *(u8 *)(r1 + 169);
        exit;
    
    With pointer field sk being at offset 168 in __sk_buff. This access is
    detected as a narrower read in bpf_skb_is_valid_access because it
    doesn't match offsetof(struct __sk_buff, sk). It is therefore allowed
    and later proceeds to bpf_convert_ctx_access. Note that for the
    "is_narrower_load" case in the convert_ctx_accesses(), the insn->off
    is aligned, so the cnt may not be 0 because it matches the
    offsetof(struct __sk_buff, sk) in the bpf_convert_ctx_access. However,
    the target_size stays 0 and the verifier errors with a kernel warning:
    
        verifier bug: error during ctx access conversion(1)
    
    This patch fixes that to return a proper "invalid bpf_context access
    off=X size=Y" error on the load instruction.
    
    The same issue affects multiple other fields in context structures that
    allow narrow access. Some other non-affected fields (for sk_msg,
    sk_lookup, and sockopt) were also changed to use bpf_ctx_range_ptr for
    consistency.
    
    Note this syzkaller crash was reported in the "Closes" link below, which
    used to be about a different bug, fixed in
    commit fce7bd8e385a ("bpf/verifier: Handle BPF_LOAD_ACQ instructions
    in insn_def_regno()"). Because syzbot somehow confused the two bugs,
    the new crash and repro didn't get reported to the mailing list.
    
    Fixes: f96da09473b52 ("bpf: simplify narrower ctx access")
    Fixes: 0df1a55afa832 ("bpf: Warn on internal verifier errors")
    Reported-by: syzbot+0ef84a7bdf5301d4cbec@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0ef84a7bdf5301d4cbec
    Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://patch.msgid.link/3b8dcee67ff4296903351a974ddd9c4dca768b64.1753194596.git.paul.chaignon@gmail.com
    Signed-off-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bridge: mcast: Fix use-after-free during router port configuration [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Jun 19 21:22:28 2025 +0300

    bridge: mcast: Fix use-after-free during router port configuration
    
    commit 7544f3f5b0b58c396f374d060898b5939da31709 upstream.
    
    The bridge maintains a global list of ports behind which a multicast
    router resides. The list is consulted during forwarding to ensure
    multicast packets are forwarded to these ports even if the ports are not
    member in the matching MDB entry.
    
    When per-VLAN multicast snooping is enabled, the per-port multicast
    context is disabled on each port and the port is removed from the global
    router port list:
    
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1
     # ip link add name dummy1 up master br1 type dummy
     # ip link set dev dummy1 type bridge_slave mcast_router 2
     $ bridge -d mdb show | grep router
     router ports on br1: dummy1
     # ip link set dev br1 type bridge mcast_vlan_snooping 1
     $ bridge -d mdb show | grep router
    
    However, the port can be re-added to the global list even when per-VLAN
    multicast snooping is enabled:
    
     # ip link set dev dummy1 type bridge_slave mcast_router 0
     # ip link set dev dummy1 type bridge_slave mcast_router 2
     $ bridge -d mdb show | grep router
     router ports on br1: dummy1
    
    Since commit 4b30ae9adb04 ("net: bridge: mcast: re-implement
    br_multicast_{enable, disable}_port functions"), when per-VLAN multicast
    snooping is enabled, multicast disablement on a port will disable the
    per-{port, VLAN} multicast contexts and not the per-port one. As a
    result, a port will remain in the global router port list even after it
    is deleted. This will lead to a use-after-free [1] when the list is
    traversed (when adding a new port to the list, for example):
    
     # ip link del dev dummy1
     # ip link add name dummy2 up master br1 type dummy
     # ip link set dev dummy2 type bridge_slave mcast_router 2
    
    Similarly, stale entries can also be found in the per-VLAN router port
    list. When per-VLAN multicast snooping is disabled, the per-{port, VLAN}
    contexts are disabled on each port and the port is removed from the
    per-VLAN router port list:
    
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1
     # ip link add name dummy1 up master br1 type dummy
     # bridge vlan add vid 2 dev dummy1
     # bridge vlan global set vid 2 dev br1 mcast_snooping 1
     # bridge vlan set vid 2 dev dummy1 mcast_router 2
     $ bridge vlan global show dev br1 vid 2 | grep router
           router ports: dummy1
     # ip link set dev br1 type bridge mcast_vlan_snooping 0
     $ bridge vlan global show dev br1 vid 2 | grep router
    
    However, the port can be re-added to the per-VLAN list even when
    per-VLAN multicast snooping is disabled:
    
     # bridge vlan set vid 2 dev dummy1 mcast_router 0
     # bridge vlan set vid 2 dev dummy1 mcast_router 2
     $ bridge vlan global show dev br1 vid 2 | grep router
           router ports: dummy1
    
    When the VLAN is deleted from the port, the per-{port, VLAN} multicast
    context will not be disabled since multicast snooping is not enabled
    on the VLAN. As a result, the port will remain in the per-VLAN router
    port list even after it is no longer member in the VLAN. This will lead
    to a use-after-free [2] when the list is traversed (when adding a new
    port to the list, for example):
    
     # ip link add name dummy2 up master br1 type dummy
     # bridge vlan add vid 2 dev dummy2
     # bridge vlan del vid 2 dev dummy1
     # bridge vlan set vid 2 dev dummy2 mcast_router 2
    
    Fix these issues by removing the port from the relevant (global or
    per-VLAN) router port list in br_multicast_port_ctx_deinit(). The
    function is invoked during port deletion with the per-port multicast
    context and during VLAN deletion with the per-{port, VLAN} multicast
    context.
    
    Note that deleting the multicast router timer is not enough as it only
    takes care of the temporary multicast router states (1 or 3) and not the
    permanent one (2).
    
    [1]
    BUG: KASAN: slab-out-of-bounds in br_multicast_add_router.part.0+0x3f1/0x560
    Write of size 8 at addr ffff888004a67328 by task ip/384
    [...]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x6f/0xa0
     print_address_description.constprop.0+0x6f/0x350
     print_report+0x108/0x205
     kasan_report+0xdf/0x110
     br_multicast_add_router.part.0+0x3f1/0x560
     br_multicast_set_port_router+0x74e/0xac0
     br_setport+0xa55/0x1870
     br_port_slave_changelink+0x95/0x120
     __rtnl_newlink+0x5e8/0xa40
     rtnl_newlink+0x627/0xb00
     rtnetlink_rcv_msg+0x6fb/0xb70
     netlink_rcv_skb+0x11f/0x350
     netlink_unicast+0x426/0x710
     netlink_sendmsg+0x75a/0xc20
     __sock_sendmsg+0xc1/0x150
     ____sys_sendmsg+0x5aa/0x7b0
     ___sys_sendmsg+0xfc/0x180
     __sys_sendmsg+0x124/0x1c0
     do_syscall_64+0xbb/0x360
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    [2]
    BUG: KASAN: slab-use-after-free in br_multicast_add_router.part.0+0x378/0x560
    Read of size 8 at addr ffff888009f00840 by task bridge/391
    [...]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x6f/0xa0
     print_address_description.constprop.0+0x6f/0x350
     print_report+0x108/0x205
     kasan_report+0xdf/0x110
     br_multicast_add_router.part.0+0x378/0x560
     br_multicast_set_port_router+0x6f9/0xac0
     br_vlan_process_options+0x8b6/0x1430
     br_vlan_rtm_process_one+0x605/0xa30
     br_vlan_rtm_process+0x396/0x4c0
     rtnetlink_rcv_msg+0x2f7/0xb70
     netlink_rcv_skb+0x11f/0x350
     netlink_unicast+0x426/0x710
     netlink_sendmsg+0x75a/0xc20
     __sock_sendmsg+0xc1/0x150
     ____sys_sendmsg+0x5aa/0x7b0
     ___sys_sendmsg+0xfc/0x180
     __sys_sendmsg+0x124/0x1c0
     do_syscall_64+0xbb/0x360
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Fixes: 2796d846d74a ("net: bridge: vlan: convert mcast router global option to per-vlan entry")
    Fixes: 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions")
    Reported-by: syzbot+7bfa4b72c6a5da128d32@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/684c18bd.a00a0220.279073.000b.GAE@google.com/T/
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250619182228.1656906-1-idosch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: factor out check_removing_space_info() from btrfs_free_block_groups() [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Wed Apr 23 11:43:45 2025 +0900

    btrfs: factor out check_removing_space_info() from btrfs_free_block_groups()
    
    [ Upstream commit 1cfdbe0d53b27b4b4a4f4cf2a4e430bc65ba2ba5 ]
    
    Factor out check_removing_space_info() from btrfs_free_block_groups(). It
    sanity checks a to-be-removed space_info. There is no functional change.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: a11224a016d6 ("btrfs: fix memory leaks in create_space_info() error paths")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: factor out init_space_info() from create_space_info() [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Wed Apr 23 11:43:43 2025 +0900

    btrfs: factor out init_space_info() from create_space_info()
    
    [ Upstream commit ac5578fef380e68e539a2238ba63dd978a450ef2 ]
    
    Factor out initialization of the space_info struct, which is used in a
    later patch. There is no functional change.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: a11224a016d6 ("btrfs: fix memory leaks in create_space_info() error paths")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix deadlock in wait_current_trans() due to ignored transaction type [+ + +]
Author: Robbie Ko <robbieko@synology.com>
Date:   Thu Dec 11 13:30:33 2025 +0800

    btrfs: fix deadlock in wait_current_trans() due to ignored transaction type
    
    commit 5037b342825df7094a4906d1e2a9674baab50cb2 upstream.
    
    When wait_current_trans() is called during start_transaction(), it
    currently waits for a blocked transaction without considering whether
    the given transaction type actually needs to wait for that particular
    transaction state. The btrfs_blocked_trans_types[] array already defines
    which transaction types should wait for which transaction states, but
    this check was missing in wait_current_trans().
    
    This can lead to a deadlock scenario involving two transactions and
    pending ordered extents:
    
      1. Transaction A is in TRANS_STATE_COMMIT_DOING state
    
      2. A worker processing an ordered extent calls start_transaction()
         with TRANS_JOIN
    
      3. join_transaction() returns -EBUSY because Transaction A is in
         TRANS_STATE_COMMIT_DOING
    
      4. Transaction A moves to TRANS_STATE_UNBLOCKED and completes
    
      5. A new Transaction B is created (TRANS_STATE_RUNNING)
    
      6. The ordered extent from step 2 is added to Transaction B's
         pending ordered extents
    
      7. Transaction B immediately starts commit by another task and
         enters TRANS_STATE_COMMIT_START
    
      8. The worker finally reaches wait_current_trans(), sees Transaction B
         in TRANS_STATE_COMMIT_START (a blocked state), and waits
         unconditionally
    
      9. However, TRANS_JOIN should NOT wait for TRANS_STATE_COMMIT_START
         according to btrfs_blocked_trans_types[]
    
      10. Transaction B is waiting for pending ordered extents to complete
    
      11. Deadlock: Transaction B waits for ordered extent, ordered extent
          waits for Transaction B
    
    This can be illustrated by the following call stacks:
      CPU0                              CPU1
                                        btrfs_finish_ordered_io()
                                          start_transaction(TRANS_JOIN)
                                            join_transaction()
                                              # -EBUSY (Transaction A is
                                              # TRANS_STATE_COMMIT_DOING)
      # Transaction A completes
      # Transaction B created
      # ordered extent added to
      # Transaction B's pending list
      btrfs_commit_transaction()
        # Transaction B enters
        # TRANS_STATE_COMMIT_START
        # waiting for pending ordered
        # extents
                                            wait_current_trans()
                                              # waits for Transaction B
                                              # (should not wait!)
    
    Task bstore_kv_sync in btrfs_commit_transaction waiting for ordered
    extents:
    
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      btrfs_commit_transaction+0xbf7/0xda0 [btrfs]
      btrfs_sync_file+0x342/0x4d0 [btrfs]
      __x64_sys_fdatasync+0x4b/0x80
      do_syscall_64+0x33/0x40
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Task kworker in wait_current_trans waiting for transaction commit:
    
      Workqueue: btrfs-syno_nocow btrfs_work_helper [btrfs]
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      wait_current_trans+0xb0/0x110 [btrfs]
      start_transaction+0x346/0x5b0 [btrfs]
      btrfs_finish_ordered_io.isra.0+0x49b/0x9c0 [btrfs]
      btrfs_work_helper+0xe8/0x350 [btrfs]
      process_one_work+0x1d3/0x3c0
      worker_thread+0x4d/0x3e0
      kthread+0x12d/0x150
      ret_from_fork+0x1f/0x30
    
    Fix this by passing the transaction type to wait_current_trans() and
    checking btrfs_blocked_trans_types[cur_trans->state] against the given
    type before deciding to wait. This ensures that transaction types which
    are allowed to join during certain blocked states will not unnecessarily
    wait and cause deadlocks.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Robbie Ko <robbieko@synology.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Cc: Motiejus Jakštys <motiejus@jakstys.lt>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix memory leaks in create_space_info() error paths [+ + +]
Author: Jiasheng Jiang <jiashengjiangcool@gmail.com>
Date:   Sun Jan 11 19:20:37 2026 +0000

    btrfs: fix memory leaks in create_space_info() error paths
    
    [ Upstream commit a11224a016d6d1d46a4d9b6573244448a80d4d7f ]
    
    In create_space_info(), the 'space_info' object is allocated at the
    beginning of the function. However, there are two error paths where the
    function returns an error code without freeing the allocated memory:
    
    1. When create_space_info_sub_group() fails in zoned mode.
    2. When btrfs_sysfs_add_space_info_type() fails.
    
    In both cases, 'space_info' has not yet been added to the
    fs_info->space_info list, resulting in a memory leak. Fix this by
    adding an error handling label to kfree(space_info) before returning.
    
    Fixes: 2be12ef79fe9 ("btrfs: Separate space_info create/update")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Jiasheng Jiang <jiashengjiangcool@gmail.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: introduce btrfs_space_info sub-group [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Wed Apr 23 11:43:48 2025 +0900

    btrfs: introduce btrfs_space_info sub-group
    
    [ Upstream commit f92ee31e031c7819126d2febdda0c3e91f5d2eb9 ]
    
    Current code assumes we have only one space_info for each block group type
    (DATA, METADATA, and SYSTEM). We sometime need multiple space infos to
    manage special block groups.
    
    One example is handling the data relocation block group for the zoned mode.
    That block group is dedicated for writing relocated data and we cannot
    allocate any regular extent from that block group, which is implemented in
    the zoned extent allocator. This block group still belongs to the normal
    data space_info. So, when all the normal data block groups are full and
    there is some free space in the dedicated block group, the space_info
    looks to have some free space, while it cannot allocate normal extent
    anymore. That results in a strange ENOSPC error. We need to have a
    space_info for the relocation data block group to represent the situation
    properly.
    
    Adds a basic infrastructure for having a "sub-group" of a space_info:
    creation and removing. A sub-group space_info belongs to one of the
    primary space_infos and has the same flags as its parent.
    
    This commit first introduces the relocation data sub-space_info, and the
    next commit will introduce tree-log sub-space_info. In the future, it could
    be useful to implement tiered storage for btrfs e.g. by implementing a
    sub-group space_info for block groups resides on a fast storage.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: a11224a016d6 ("btrfs: fix memory leaks in create_space_info() error paths")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: send: check for inline extents in range_is_hole_in_parent() [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Jan 6 20:26:40 2026 +1030

    btrfs: send: check for inline extents in range_is_hole_in_parent()
    
    [ Upstream commit 08b096c1372cd69627f4f559fb47c9fb67a52b39 ]
    
    Before accessing the disk_bytenr field of a file extent item we need
    to check if we are dealing with an inline extent.
    This is because for inline extents their data starts at the offset of
    the disk_bytenr field. So accessing the disk_bytenr
    means we are accessing inline data or in case the inline data is less
    than 8 bytes we can actually cause an invalid
    memory access if this inline extent item is the first item in the leaf
    or access metadata from other items.
    
    Fixes: 82bfb2e7b645 ("Btrfs: incremental send, fix unnecessary hole writes for sparse files")
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: ctucanfd: fix SSP_SRC in cases when bit-rate is higher than 1 MBit. [+ + +]
Author: Ondrej Ille <ondrej.ille@gmail.com>
Date:   Mon Jan 5 12:16:20 2026 +0100

    can: ctucanfd: fix SSP_SRC in cases when bit-rate is higher than 1 MBit.
    
    commit e707c591a139d1bfa4ddc83036fc820ca006a140 upstream.
    
    The Secondary Sample Point Source field has been
    set to an incorrect value by some mistake in the
    past
    
      0b01 - SSP_SRC_NO_SSP - SSP is not used.
    
    for data bitrates above 1 MBit/s. The correct/default
    value already used for lower bitrates is
    
      0b00 - SSP_SRC_MEAS_N_OFFSET - SSP position = TRV_DELAY
             (Measured Transmitter delay) + SSP_OFFSET.
    
    The related configuration register structure is described
    in section 3.1.46 SSP_CFG of the CTU CAN FD
    IP CORE Datasheet.
    
    The analysis leading to the proper configuration
    is described in section 2.8.3 Secondary sampling point
    of the datasheet.
    
    The change has been tested on AMD/Xilinx Zynq
    with the next CTU CN FD IP core versions:
    
     - 2.6 aka master in the "integration with Zynq-7000 system" test
       6.12.43-rt12+ #1 SMP PREEMPT_RT kernel with CTU CAN FD git
       driver (change already included in the driver repo)
     - older 2.5 snapshot with mainline kernels with this patch
       applied locally in the multiple CAN latency tester nightly runs
       6.18.0-rc4-rt3-dut #1 SMP PREEMPT_RT
       6.19.0-rc3-dut
    
    The logs, the datasheet and sources are available at
    
     https://canbus.pages.fel.cvut.cz/
    
    Signed-off-by: Ondrej Ille <ondrej.ille@gmail.com>
    Signed-off-by: Pavel Pisa <pisa@fel.cvut.cz>
    Link: https://patch.msgid.link/20260105111620.16580-1-pisa@fel.cvut.cz
    Fixes: 2dcb8e8782d8 ("can: ctucanfd: add support for CTU CAN FD open-source IP core - bus independent part.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: etas_es58x: allow partial RX URB allocation to succeed [+ + +]
Author: Szymon Wilczek <swilczek.lx@gmail.com>
Date:   Tue Dec 23 02:17:32 2025 +0100

    can: etas_es58x: allow partial RX URB allocation to succeed
    
    [ Upstream commit b1979778e98569c1e78c2c7f16bb24d76541ab00 ]
    
    When es58x_alloc_rx_urbs() fails to allocate the requested number of
    URBs but succeeds in allocating some, it returns an error code.
    This causes es58x_open() to return early, skipping the cleanup label
    'free_urbs', which leads to the anchored URBs being leaked.
    
    As pointed out by maintainer Vincent Mailhol, the driver is designed
    to handle partial URB allocation gracefully. Therefore, partial
    allocation should not be treated as a fatal error.
    
    Modify es58x_alloc_rx_urbs() to return 0 if at least one URB has been
    allocated, restoring the intended behavior and preventing the leak
    in es58x_open().
    
    Fixes: 8537257874e9 ("can: etas_es58x: add core support for ETAS ES58X CAN USB interfaces")
    Reported-by: syzbot+e8cb6691a7cf68256cb8@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=e8cb6691a7cf68256cb8
    Signed-off-by: Szymon Wilczek <swilczek.lx@gmail.com>
    Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
    Link: https://patch.msgid.link/20251223011732.39361-1-swilczek.lx@gmail.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: gs_usb: gs_usb_receive_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Tue Dec 23 21:21:39 2025 +0100

    can: gs_usb: gs_usb_receive_bulk_callback(): fix URB memory leak
    
    commit 7352e1d5932a0e777e39fa4b619801191f57e603 upstream.
    
    In gs_can_open(), the URBs for USB-in transfers are allocated, added to the
    parent->rx_submitted anchor and submitted. In the complete callback
    gs_usb_receive_bulk_callback(), the URB is processed and resubmitted. In
    gs_can_close() the URBs are freed by calling
    usb_kill_anchored_urbs(parent->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in gs_can_close().
    
    Fix the memory leak by anchoring the URB in the
    gs_usb_receive_bulk_callback() to the parent->rx_submitted anchor.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260105-gs_usb-fix-memory-leak-v2-1-cc6ed6438034@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dmaengine: apple-admac: Add "apple,t8103-admac" compatible [+ + +]
Author: Janne Grunau <j@jannau.net>
Date:   Wed Dec 31 13:34:59 2025 +0100

    dmaengine: apple-admac: Add "apple,t8103-admac" compatible
    
    commit 76cba1e60b69c9cd53b9127d017a7dc5945455b1 upstream.
    
    After discussion with the devicetree maintainers we agreed to not extend
    lists with the generic compatible "apple,admac" anymore [1]. Use
    "apple,t8103-admac" as base compatible as it is the SoC the driver and
    bindings were written for.
    
    [1]: https://lore.kernel.org/asahi/12ab93b7-1fc2-4ce0-926e-c8141cfe81bf@kernel.org/
    
    Fixes: b127315d9a78 ("dmaengine: apple-admac: Add Apple ADMAC driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Neal Gompa <neal@gompa.dev>
    Signed-off-by: Janne Grunau <j@jannau.net>
    Link: https://patch.msgid.link/20251231-apple-admac-t8103-base-compat-v1-1-ec24a3708f76@jannau.net
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: at_hdmac: fix device leak on of_dma_xlate() [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:43 2025 +0100

    dmaengine: at_hdmac: fix device leak on of_dma_xlate()
    
    commit b9074b2d7a230b6e28caa23165e9d8bc0677d333 upstream.
    
    Make sure to drop the reference taken when looking up the DMA platform
    device during of_dma_xlate() when releasing channel resources.
    
    Note that commit 3832b78b3ec2 ("dmaengine: at_hdmac: add missing
    put_device() call in at_dma_xlate()") fixed the leak in a couple of
    error paths but the reference is still leaking on successful allocation.
    
    Fixes: bbe89c8e3d59 ("at_hdmac: move to generic DMA binding")
    Fixes: 3832b78b3ec2 ("dmaengine: at_hdmac: add missing put_device() call in at_dma_xlate()")
    Cc: stable@vger.kernel.org      # 3.10: 3832b78b3ec2
    Cc: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-2-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: bcm-sba-raid: fix device leak on probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:45 2025 +0100

    dmaengine: bcm-sba-raid: fix device leak on probe
    
    commit 7c3a46ebf15a9796b763a54272407fdbf945bed8 upstream.
    
    Make sure to drop the reference taken when looking up the mailbox device
    during probe on probe failures and on driver unbind.
    
    Fixes: 743e1c8ffe4e ("dmaengine: Add Broadcom SBA RAID driver")
    Cc: stable@vger.kernel.org      # 4.13
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-4-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: dw: dmamux: fix OF node leak on route allocation failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:47 2025 +0100

    dmaengine: dw: dmamux: fix OF node leak on route allocation failure
    
    commit ec25e60f9f95464aa11411db31d0906b3fb7b9f2 upstream.
    
    Make sure to drop the reference taken to the DMA master OF node also on
    late route allocation failures.
    
    Fixes: 134d9c52fca2 ("dmaengine: dw: dmamux: Introduce RZN1 DMA router support")
    Cc: stable@vger.kernel.org      # 5.19
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://patch.msgid.link/20251117161258.10679-6-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: fsl-edma: Fix clk leak on alloc_chan_resources failure [+ + +]
Author: Zhen Ni <zhen.ni@easystack.cn>
Date:   Wed Jan 21 07:04:21 2026 -0500

    dmaengine: fsl-edma: Fix clk leak on alloc_chan_resources failure
    
    [ Upstream commit b18cd8b210417f90537d914ffb96e390c85a7379 ]
    
    When fsl_edma_alloc_chan_resources() fails after clk_prepare_enable(),
    the error paths only free IRQs and destroy the TCD pool, but forget to
    call clk_disable_unprepare(). This causes the channel clock to remain
    enabled, leaking power and resources.
    
    Fix it by disabling the channel clock in the error unwind path.
    
    Fixes: d8d4355861d8 ("dmaengine: fsl-edma: add i.MX8ULP edma support")
    Cc: stable@vger.kernel.org
    Suggested-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Zhen Ni <zhen.ni@easystack.cn>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20251014090522.827726-1-zhen.ni@easystack.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    [ Different error handling scheme ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: idxd: fix device leaks on compat bind and unbind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:48 2025 +0100

    dmaengine: idxd: fix device leaks on compat bind and unbind
    
    commit 799900f01792cf8b525a44764f065f83fcafd468 upstream.
    
    Make sure to drop the reference taken when looking up the idxd device as
    part of the compat bind and unbind sysfs interface.
    
    Fixes: 6e7f3ee97bbe ("dmaengine: idxd: move dsa_drv support to compatible mode")
    Cc: stable@vger.kernel.org      # 5.15
    Cc: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-7-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: lpc18xx-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:49 2025 +0100

    dmaengine: lpc18xx-dmamux: fix device leak on route allocation
    
    commit d4d63059dee7e7cae0c4d9a532ed558bc90efb55 upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: e5f4ae84be74 ("dmaengine: add driver for lpc18xx dmamux")
    Cc: stable@vger.kernel.org      # 4.3
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
    Link: https://patch.msgid.link/20251117161258.10679-8-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: lpc32xx-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:50 2025 +0100

    dmaengine: lpc32xx-dmamux: fix device leak on route allocation
    
    commit d9847e6d1d91462890ba297f7888fa598d47e76e upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: 5d318b595982 ("dmaengine: Add dma router for pl08x in LPC32XX SoC")
    Cc: stable@vger.kernel.org      # 6.12
    Cc: Piotr Wojtaszczyk <piotr.wojtaszczyk@timesys.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
    Link: https://patch.msgid.link/20251117161258.10679-9-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: omap-dma: fix dma_pool resource leak in error paths [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Mon Nov 3 15:30:18 2025 +0800

    dmaengine: omap-dma: fix dma_pool resource leak in error paths
    
    [ Upstream commit 2e1136acf8a8887c29f52e35a77b537309af321f ]
    
    The dma_pool created by dma_pool_create() is not destroyed when
    dma_async_device_register() or of_dma_controller_register() fails,
    causing a resource leak in the probe error paths.
    
    Add dma_pool_destroy() in both error paths to properly release the
    allocated dma_pool resource.
    
    Fixes: 7bedaa553760 ("dmaengine: add OMAP DMA engine driver")
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20251103073018.643-1-vulab@iscas.ac.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config() [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Wed Oct 29 20:34:19 2025 +0800

    dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config()
    
    commit 3f747004bbd641131d9396d87b5d2d3d1e182728 upstream.
    
    Fix a memory leak in gpi_peripheral_config() where the original memory
    pointed to by gchan->config could be lost if krealloc() fails.
    
    The issue occurs when:
    1. gchan->config points to previously allocated memory
    2. krealloc() fails and returns NULL
    3. The function directly assigns NULL to gchan->config, losing the
       reference to the original memory
    4. The original memory becomes unreachable and cannot be freed
    
    Fix this by using a temporary variable to hold the krealloc() result
    and only updating gchan->config when the allocation succeeds.
    
    Found via static analysis and code review.
    
    Fixes: 5d0c3533a19f ("dmaengine: qcom: Add GPI dma driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://patch.msgid.link/20251029123421.91973-1-linmq006@gmail.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all() [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Thu Nov 13 19:50:48 2025 +0000

    dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all()
    
    commit 747213b08a1ab6a76e3e3b3e7a209cc1d402b5d0 upstream.
    
    After audio full duplex testing, playing the recorded file contains a few
    playback frames from the previous time. The rz_dmac_terminate_all() does
    not reset all the hardware descriptors queued previously, leading to the
    wrong descriptor being picked up during the next DMA transfer. Fix the
    above issue by resetting all the descriptor headers for a channel in
    rz_dmac_terminate_all() as rz_dmac_lmdesc_recycle() points to the proper
    descriptor header filled by the rz_dmac_prepare_descs_for_slave_sg().
    
    Cc: stable@kernel.org
    Fixes: 5000d37042a6 ("dmaengine: sh: Add DMAC driver for RZ/G2L SoC")
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Link: https://patch.msgid.link/20251113195052.564338-1-biju.das.jz@bp.renesas.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: stm32: dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:52 2025 +0100

    dmaengine: stm32: dmamux: fix device leak on route allocation
    
    commit dd6e4943889fb354efa3f700e42739da9bddb6ef upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: stable@vger.kernel.org      # 4.15
    Cc: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Link: https://patch.msgid.link/20251117161258.10679-11-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: stm32: dmamux: fix OF node leak on route allocation failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:53 2025 +0100

    dmaengine: stm32: dmamux: fix OF node leak on route allocation failure
    
    commit b1b590a590af13ded598e70f0b72bc1e515787a1 upstream.
    
    Make sure to drop the reference taken to the DMA master OF node also on
    late route allocation failures.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: stable@vger.kernel.org      # 4.15
    Cc: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Link: https://patch.msgid.link/20251117161258.10679-12-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: tegra-adma: Fix use-after-free [+ + +]
Author: Sheetal <sheetal@nvidia.com>
Date:   Mon Nov 10 19:54:45 2025 +0530

    dmaengine: tegra-adma: Fix use-after-free
    
    [ Upstream commit 2efd07a7c36949e6fa36a69183df24d368bf9e96 ]
    
    A use-after-free bug exists in the Tegra ADMA driver when audio streams
    are terminated, particularly during XRUN conditions. The issue occurs
    when the DMA buffer is freed by tegra_adma_terminate_all() before the
    vchan completion tasklet finishes accessing it.
    
    The race condition follows this sequence:
    
      1. DMA transfer completes, triggering an interrupt that schedules the
         completion tasklet (tasklet has not executed yet)
      2. Audio playback stops, calling tegra_adma_terminate_all() which
         frees the DMA buffer memory via kfree()
      3. The scheduled tasklet finally executes, calling vchan_complete()
         which attempts to access the already-freed memory
    
    Since tasklets can execute at any time after being scheduled, there is
    no guarantee that the buffer will remain valid when vchan_complete()
    runs.
    
    Fix this by properly synchronizing the virtual channel completion:
     - Calling vchan_terminate_vdesc() in tegra_adma_stop() to mark the
       descriptors as terminated instead of freeing the descriptor.
     - Add the callback tegra_adma_synchronize() that calls
       vchan_synchronize() which kills any pending tasklets and frees any
       terminated descriptors.
    
    Crash logs:
    [  337.427523] BUG: KASAN: use-after-free in vchan_complete+0x124/0x3b0
    [  337.427544] Read of size 8 at addr ffff000132055428 by task swapper/0/0
    
    [  337.427562] Call trace:
    [  337.427564]  dump_backtrace+0x0/0x320
    [  337.427571]  show_stack+0x20/0x30
    [  337.427575]  dump_stack_lvl+0x68/0x84
    [  337.427584]  print_address_description.constprop.0+0x74/0x2b8
    [  337.427590]  kasan_report+0x1f4/0x210
    [  337.427598]  __asan_load8+0xa0/0xd0
    [  337.427603]  vchan_complete+0x124/0x3b0
    [  337.427609]  tasklet_action_common.constprop.0+0x190/0x1d0
    [  337.427617]  tasklet_action+0x30/0x40
    [  337.427623]  __do_softirq+0x1a0/0x5c4
    [  337.427628]  irq_exit+0x110/0x140
    [  337.427633]  handle_domain_irq+0xa4/0xe0
    [  337.427640]  gic_handle_irq+0x64/0x160
    [  337.427644]  call_on_irq_stack+0x20/0x4c
    [  337.427649]  do_interrupt_handler+0x7c/0x90
    [  337.427654]  el1_interrupt+0x30/0x80
    [  337.427659]  el1h_64_irq_handler+0x18/0x30
    [  337.427663]  el1h_64_irq+0x7c/0x80
    [  337.427667]  cpuidle_enter_state+0xe4/0x540
    [  337.427674]  cpuidle_enter+0x54/0x80
    [  337.427679]  do_idle+0x2e0/0x380
    [  337.427685]  cpu_startup_entry+0x2c/0x70
    [  337.427690]  rest_init+0x114/0x130
    [  337.427695]  arch_call_rest_init+0x18/0x24
    [  337.427702]  start_kernel+0x380/0x3b4
    [  337.427706]  __primary_switched+0xc0/0xc8
    
    Fixes: f46b195799b5 ("dmaengine: tegra-adma: Add support for Tegra210 ADMA")
    Signed-off-by: Sheetal <sheetal@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20251110142445.3842036-1-sheetal@nvidia.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:56 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation
    
    commit 4fc17b1c6d2e04ad13fd6c21cfbac68043ec03f9 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during am335x route allocation.
    
    Fixes: 42dbdcc6bf96 ("dmaengine: ti-dma-crossbar: Add support for crossbar on AM33xx/AM43xx")
    Cc: stable@vger.kernel.org      # 4.4
    Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-15-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:55 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation
    
    commit dc7e44db01fc2498644e3106db3e62a9883a93d5 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during dra7x route allocation.
    
    Note that commit 615a4bfc426e ("dmaengine: ti: Add missing put_device in
    ti_dra7_xbar_route_allocate") fixed the leak in the error paths but the
    reference is still leaking on successful allocation.
    
    Fixes: a074ae38f859 ("dmaengine: Add driver for TI DMA crossbar on DRA7x")
    Fixes: 615a4bfc426e ("dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate")
    Cc: stable@vger.kernel.org      # 4.2: 615a4bfc426e
    Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-14-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: ti: k3-udma: fix device leak on udma lookup [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 17 17:12:58 2025 +0100

    dmaengine: ti: k3-udma: fix device leak on udma lookup
    
    commit 430f7803b69cd5e5694e5dfc884c6628870af36e upstream.
    
    Make sure to drop the reference taken when looking up the UDMA platform
    device.
    
    Note that holding a reference to a platform device does not prevent its
    driver data from going away so there is no point in keeping the
    reference after the lookup helper returns.
    
    Fixes: d70241913413 ("dmaengine: ti: k3-udma: Add glue layer for non DMAengine users")
    Fixes: 1438cde8fe9c ("dmaengine: ti: k3-udma: add missing put_device() call in of_xudma_dev_get()")
    Cc: stable@vger.kernel.org      # 5.6: 1438cde8fe9c
    Cc: Grygorii Strashko <grygorii.strashko@ti.com>
    Cc: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251117161258.10679-17-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: xilinx: xdma: Fix regmap max_register [+ + +]
Author: Anthony Brandon <anthony@amarulasolutions.com>
Date:   Mon Oct 13 17:48:49 2025 +0200

    dmaengine: xilinx: xdma: Fix regmap max_register
    
    [ Upstream commit c7d436a6c1a274c1ac28d5fb3b8eb8f03b6d0e10 ]
    
    The max_register field is assigned the size of the register memory
    region instead of the offset of the last register.
    The result is that reading from the regmap via debugfs can cause
    a segmentation fault:
    
    tail /sys/kernel/debug/regmap/xdma.1.auto/registers
    Unable to handle kernel paging request at virtual address ffff800082f70000
    Mem abort info:
      ESR = 0x0000000096000007
      EC = 0x25: DABT (current EL), IL = 32 bits
      SET = 0, FnV = 0
      EA = 0, S1PTW = 0
      FSC = 0x07: level 3 translation fault
    [...]
    Call trace:
     regmap_mmio_read32le+0x10/0x30
     _regmap_bus_reg_read+0x74/0xc0
     _regmap_read+0x68/0x198
     regmap_read+0x54/0x88
     regmap_read_debugfs+0x140/0x380
     regmap_map_read_file+0x30/0x48
     full_proxy_read+0x68/0xc8
     vfs_read+0xcc/0x310
     ksys_read+0x7c/0x120
     __arm64_sys_read+0x24/0x40
     invoke_syscall.constprop.0+0x64/0x108
     do_el0_svc+0xb0/0xd8
     el0_svc+0x38/0x130
     el0t_64_sync_handler+0x120/0x138
     el0t_64_sync+0x194/0x198
    Code: aa1e03e9 d503201f f9400000 8b214000 (b9400000)
    ---[ end trace 0000000000000000 ]---
    note: tail[1217] exited with irqs disabled
    note: tail[1217] exited with preempt_count 1
    Segmentation fault
    
    Fixes: 17ce252266c7 ("dmaengine: xilinx: xdma: Add xilinx xdma driver")
    Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
    Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Signed-off-by: Anthony Brandon <anthony@amarulasolutions.com>
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing [+ + +]
Author: Suraj Gupta <suraj.gupta2@amd.com>
Date:   Wed Oct 22 00:00:06 2025 +0530

    dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing
    
    [ Upstream commit c0732fe78728718c853ef8e7af5bbb05262acbd1 ]
    
    When device tree lacks optional "xlnx,addrwidth" property, the addr_width
    variable remained uninitialized with garbage values, causing incorrect
    DMA mask configuration and subsequent probe failure. The fix ensures a
    fallback to the default 32-bit address width when this property is missing.
    
    Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com>
    Fixes: b72db4005fe4 ("dmaengine: vdma: Add 64 bit addressing support to the driver")
    Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Reviewed-by: Folker Schwesinger <dev@folker-schwesinger.de>
    Link: https://patch.msgid.link/20251021183006.3434495-1-suraj.gupta2@amd.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Bump the HDMI clock to 340MHz [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Mon Dec 15 14:08:30 2025 -0600

    drm/amd/display: Bump the HDMI clock to 340MHz
    
    commit fee50077656d8a58011f13bca48f743d1b6d6015 upstream.
    
    [Why]
    DP-HDMI dongles can execeed bandwidth requirements on high resolution
    monitors. This can lead to pruning the high resolution modes.
    
    HDMI 1.3 bumped the clock to 340MHz, but display code never matched it.
    
    [How]
    Set default to (DVI) 165MHz.  Once HDMI display is identified update
    to 340MHz.
    
    Reported-by: Dianne Skoll <dianne@skoll.ca>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4780
    Reviewed-by: Chris Park <chris.park@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Matthew Stewart <matthew.stewart2@amd.com>
    Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit ac1e65d8ade46c09fb184579b81acadf36dcb91e)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: mark static functions noinline_for_stack [+ + +]
Author: Tzung-Bi Shih <tzungbi@kernel.org>
Date:   Thu Jan 9 05:35:04 2025 +0000

    drm/amd/display: mark static functions noinline_for_stack
    
    commit a8d42cd228ec41ad99c50a270db82f0dd9127a28 upstream.
    
    When compiling allmodconfig (CONFIG_WERROR=y) with clang-19, see the
    following errors:
    
    .../display/dc/dml2/display_mode_core.c:6268:13: warning: stack frame size (3128) exceeds limit (3072) in 'dml_prefetch_check' [-Wframe-larger-than]
    .../display/dc/dml2/dml21/src/dml2_core/dml2_core_dcn4_calcs.c:7236:13: warning: stack frame size (3256) exceeds limit (3072) in 'dml_core_mode_support' [-Wframe-larger-than]
    
    Mark static functions called by dml_prefetch_check() and
    dml_core_mode_support() noinline_for_stack to avoid them become huge
    functions and thus exceed the frame size limit.
    
    A way to reproduce:
    $ git checkout next-20250107
    $ mkdir build_dir
    $ export PATH=/tmp/llvm-19.1.6-x86_64/bin:$PATH
    $ make LLVM=1 O=build_dir allmodconfig
    $ make LLVM=1 O=build_dir drivers/gpu/drm/ -j
    
    The way how it chose static functions to mark:
    [0] Unset CONFIG_WERROR in build_dir/.config.
    To get display_mode_core.o without errors.
    
    [1] Get a function list called by dml_prefetch_check().
    $ sed -n '6268,6711p' drivers/gpu/drm/amd/display/dc/dml2/display_mode_core.c \
      | sed -n -r 's/.*\W(\w+)\(.*/\1/p' | sort -u >/tmp/syms
    
    [2] Get the non-inline function list.
    Objdump won't show the symbols if they are inline functions.
    
    $ make LLVM=1 O=build_dir drivers/gpu/drm/ -j
    $ objdump -d build_dir/.../display_mode_core.o | \
      ./scripts/checkstack.pl x86_64 0 | \
      grep -f /tmp/syms | cut -d' ' -f2- >/tmp/orig
    
    [3] Get the full function list.
    Append "-fno-inline" to `CFLAGS_.../display_mode_core.o` in
    drivers/gpu/drm/amd/display/dc/dml2/Makefile.
    
    $ make LLVM=1 O=build_dir drivers/gpu/drm/ -j
    $ objdump -d build_dir/.../display_mode_core.o | \
      ./scripts/checkstack.pl x86_64 0 | \
      grep -f /tmp/syms | cut -d' ' -f2- >/tmp/noinline
    
    [4] Get the inline function list.
    If a symbol only in /tmp/noinline but not in /tmp/orig, it is a good
    candidate to mark noinline.
    
    $ diff /tmp/orig /tmp/noinline
    
    Chosen functions and their stack sizes:
    CalculateBandwidthAvailableForImmediateFlip [display_mode_core.o]:144
    CalculateExtraLatency [display_mode_core.o]:176
    CalculateTWait [display_mode_core.o]:64
    CalculateVActiveBandwithSupport [display_mode_core.o]:112
    set_calculate_prefetch_schedule_params [display_mode_core.o]:48
    
    CheckGlobalPrefetchAdmissibility [dml2_core_dcn4_calcs.o]:544
    calculate_bandwidth_available [dml2_core_dcn4_calcs.o]:320
    calculate_vactive_det_fill_latency [dml2_core_dcn4_calcs.o]:272
    CalculateDCFCLKDeepSleep [dml2_core_dcn4_calcs.o]:208
    CalculateODMMode [dml2_core_dcn4_calcs.o]:208
    CalculateOutputLink [dml2_core_dcn4_calcs.o]:176
    
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    [nathan: Fix conflicts in dml2_core_dcn4_calcs.c]
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: fix smu overdrive data type wrong issue on smu 14.0.2 [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Tue Jan 6 14:42:40 2026 +0800

    drm/amd/pm: fix smu overdrive data type wrong issue on smu 14.0.2
    
    [ Upstream commit 90dbc0bc2aa60021615969841fed06790c992bde ]
    
    resolving the issue of incorrect type definitions potentially causing calculation errors.
    
    Fixes: 54f7f3ca982a ("drm/amdgpu/swm14: Update power limit logic")
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit e3a03d0ae16d6b56e893cce8e52b44140e1ed985)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd: Clean up kfd node on surprise disconnect [+ + +]
Author: Mario Limonciello (AMD) <superm1@kernel.org>
Date:   Wed Jan 7 15:37:28 2026 -0600

    drm/amd: Clean up kfd node on surprise disconnect
    
    commit 28695ca09d326461f8078332aa01db516983e8a2 upstream.
    
    When an eGPU is unplugged the KFD topology should also be destroyed
    for that GPU. This never happens because the fini_sw callbacks never
    get to run. Run them manually before calling amdgpu_device_ip_fini_early()
    when a device has already been disconnected.
    
    This location is intentionally chosen to make sure that the kfd locking
    refcount doesn't get incremented unintentionally.
    
    Cc: kent.russell@amd.com
    Closes: https://community.frame.work/t/amd-egpu-on-linux/8691/33
    Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
    Reviewed-by: Kent Russell <kent.russell@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6a23e7b4332c10f8b56c33a9c5431b52ecff9aab)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: fix a memory leak in device_queue_manager_init() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Thu Jan 8 15:18:22 2026 +0800

    drm/amdkfd: fix a memory leak in device_queue_manager_init()
    
    commit 80614c509810fc051312d1a7ccac8d0012d6b8d0 upstream.
    
    If dqm->ops.initialize() fails, add deallocate_hiq_sdma_mqd()
    to release the memory allocated by allocate_hiq_sdma_mqd().
    Move deallocate_hiq_sdma_mqd() up to ensure proper function
    visibility at the point of use.
    
    Fixes: 11614c36bc8f ("drm/amdkfd: Allocate MQD trunk for HIQ and SDMA")
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
    Reviewed-by: Oak Zeng <Oak.Zeng@amd.com>
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit b7cccc8286bb9919a0952c812872da1dcfe9d390)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare [+ + +]
Author: Lyude Paul <lyude@redhat.com>
Date:   Fri Dec 19 16:52:02 2025 -0500

    drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare
    
    commit 9e9bc6be0fa0b6b6b73f4f831f3b77716d0a8d9e upstream.
    
    For a while, I've been seeing a strange issue where some (usually not all)
    of the display DMA channels will suddenly hang, particularly when there is
    a visible cursor on the screen that is being frequently updated, and
    especially when said cursor happens to go between two screens. While this
    brings back lovely memories of fixing Intel Skylake bugs, I would quite
    like to fix it :).
    
    It turns out the problem that's happening here is that we're managing to
    reach nv50_head_flush_set() in our atomic commit path without actually
    holding nv50_disp->mutex. This means that cursor updates happening in
    parallel (along with any other atomic updates that need to use the core
    channel) will race with eachother, which eventually causes us to corrupt
    the pushbuffer - leading to a plethora of various GSP errors, usually:
    
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000218 00102680 00000004 00800003
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 0000021c 00040509 00000004 00000001
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000000 00000000 00000001 00000001
    
    The reason this is happening is because generally we check whether we need
    to set nv50_atom->lock_core at the end of nv50_head_atomic_check().
    However, curs507a_prepare is called from the fb_prepare callback, which
    happens after the atomic check phase. As a result, this can lead to commits
    that both touch the core channel but also don't grab nv50_disp->mutex.
    
    So, fix this by making sure that we set nv50_atom->lock_core in
    cus507a_prepare().
    
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Fixes: 1590700d94ac ("drm/nouveau/kms/nv50-: split each resource type into their own source files")
    Cc: <stable@vger.kernel.org> # v4.18+
    Link: https://patch.msgid.link/20251219215344.170852-2-lyude@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel [+ + +]
Author: Marek Vasut <marex@nabladev.com>
Date:   Sat Jan 10 16:27:28 2026 +0100

    drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel
    
    commit 6ab3d4353bf75005eaa375677c9fed31148154d6 upstream.
    
    The connector type for the DataImage SCF0700C48GGU18 panel is missing and
    devm_drm_panel_bridge_add() requires connector type to be set. This leads
    to a warning and a backtrace in the kernel log and panel does not work:
    "
    WARNING: CPU: 3 PID: 38 at drivers/gpu/drm/bridge/panel.c:379 devm_drm_of_get_bridge+0xac/0xb8
    "
    The warning is triggered by a check for valid connector type in
    devm_drm_panel_bridge_add(). If there is no valid connector type
    set for a panel, the warning is printed and panel is not added.
    Fill in the missing connector type to fix the warning and make
    the panel operational once again.
    
    Cc: stable@vger.kernel.org
    Fixes: 97ceb1fb08b6 ("drm/panel: simple: Add support for DataImage SCF0700C48GGU18")
    Signed-off-by: Marek Vasut <marex@nabladev.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patch.msgid.link/20260110152750.73848-1-marex@nabladev.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/vmwgfx: Fix an error return check in vmw_compat_shader_add() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Wed Dec 24 17:11:05 2025 +0800

    drm/vmwgfx: Fix an error return check in vmw_compat_shader_add()
    
    commit bf72b4b7bb7dbb643d204fa41e7463894a95999f upstream.
    
    In vmw_compat_shader_add(), the return value check of vmw_shader_alloc()
    is not proper. Modify the check for the return pointer 'res'.
    
    Found by code review and compiled on ubuntu 20.04.
    
    Fixes: 18e4a4669c50 ("drm/vmwgfx: Fix compat shader namespace")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patch.msgid.link/20251224091105.1569464-1-lihaoxiang@isrc.iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/vmwgfx: Merge vmw_bo_release and vmw_bo_free functions [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Wed Jan 7 09:20:59 2026 -0600

    drm/vmwgfx: Merge vmw_bo_release and vmw_bo_free functions
    
    [ Upstream commit 37a0cff4551c14aca4cfa6ef3f2f0e0f61d66825 ]
    
    Some of the warnings need to be reordered between these two functions
    in order to be correct. This has happened multiple times.
    Merging them solves this problem once and for all.
    
    Fixes: d6667f0ddf46 ("drm/vmwgfx: Fix handling of dumb buffers")
    Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patch.msgid.link/20260107152059.3048329-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
EDAC/i3200: Fix a resource leak in i3200_probe1() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Tue Dec 23 20:32:02 2025 +0800

    EDAC/i3200: Fix a resource leak in i3200_probe1()
    
    commit d42d5715dcb559342ff356327b241c53a67584d9 upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: dd8ef1db87a4 ("edac: i3200 memory controller driver")
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251223123202.1492038-1-lihaoxiang@isrc.iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC/x38: Fix a resource leak in x38_probe1() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Tue Dec 23 20:43:50 2025 +0800

    EDAC/x38: Fix a resource leak in x38_probe1()
    
    commit 0ff7c44106b4715fc27a2e455d9f57f1dfcfd54f upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: df8bc08c192f ("edac x38: new MC driver module")
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251223124350.1496325-1-lihaoxiang@isrc.iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
efi/cper: Fix cper_bits_to_str buffer handling and return value [+ + +]
Author: Morduan Zang <zhangdandan@uniontech.com>
Date:   Wed Jan 14 13:30:33 2026 +0800

    efi/cper: Fix cper_bits_to_str buffer handling and return value
    
    commit d7f1b4bdc7108be1b178e1617b5f45c8918e88d7 upstream.
    
    The return value calculation was incorrect: `return len - buf_size;`
    Initially `len = buf_size`, then `len` decreases with each operation.
    This results in a negative return value on success.
    
    Fix by returning `buf_size - len` which correctly calculates the actual
    number of bytes written.
    
    Fixes: a976d790f494 ("efi/cper: Add a new helper function to print bitmasks")
    Signed-off-by: Morduan Zang <zhangdandan@uniontech.com>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref [+ + +]
Author: Yang Erkun <yangerkun@huawei.com>
Date:   Sat Dec 13 13:57:06 2025 +0800

    ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref
    
    commit d250bdf531d9cd4096fedbb9f172bb2ca660c868 upstream.
    
    The error branch for ext4_xattr_inode_update_ref forget to release the
    refcount for iloc.bh. Find this when review code.
    
    Fixes: 57295e835408 ("ext4: guard against EA inode refcount underflow in xattr update")
    Signed-off-by: Yang Erkun <yangerkun@huawei.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://patch.msgid.link/20251213055706.3417529-1-yangerkun@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: imx: scu-irq: Set mu_resource_id before get handle [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Oct 17 09:56:27 2025 +0800

    firmware: imx: scu-irq: Set mu_resource_id before get handle
    
    commit ff3f9913bc0749364fbfd86ea62ba2d31c6136c8 upstream.
    
    mu_resource_id is referenced in imx_scu_irq_get_status() and
    imx_scu_irq_group_enable() which could be used by other modules, so
    need to set correct value before using imx_sc_irq_ipc_handle in
    SCU API call.
    
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Fixes: 81fb53feb66a ("firmware: imx: scu-irq: Init workqueue before request mbox channel")
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
HID: intel-ish-hid: Fix -Wcast-function-type-strict in devm_ishtp_alloc_workqueue() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Wed Oct 22 00:49:08 2025 +0200

    HID: intel-ish-hid: Fix -Wcast-function-type-strict in devm_ishtp_alloc_workqueue()
    
    commit 3644f4411713f52bf231574aa8759e3d8e20b341 upstream.
    
    Clang warns (or errors with CONFIG_WERROR=y / W=e):
    
      drivers/hid/intel-ish-hid/ipc/ipc.c:935:36: error: cast from 'void (*)(struct workqueue_struct *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
        935 |         if (devm_add_action_or_reset(dev, (void (*)(void *))destroy_workqueue,
            |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      include/linux/device/devres.h:168:34: note: expanded from macro 'devm_add_action_or_reset'
        168 |         __devm_add_action_or_ireset(dev, action, data, #action)
            |                                         ^~~~~~
    
    This warning is pointing out a kernel control flow integrity (kCFI /
    CONFIG_CFI=y) violation will occur due to this function cast when the
    destroy_workqueue() is indirectly called via devm_action_release()
    because the prototype of destroy_workqueue() does not match the
    prototype of (*action)().
    
    Use a local function with the correct prototype to wrap
    destroy_workqueue() to resolve the warning and CFI violation.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202510190103.qTZvfdjj-lkp@intel.com/
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2139
    Fixes: 0d30dae38fe0 ("HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking")
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Reviewed-by: Zhang Lixu <lixu.zhang@intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Fri Oct 10 13:52:54 2025 +0800

    HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking
    
    commit 0d30dae38fe01cd1de358c6039a0b1184689fe51 upstream.
    
    During suspend/resume tests with S2IDLE, some ISH functional failures were
    observed because of delay in executing ISH resume handler. Here
    schedule_work() is used from resume handler to do actual work.
    schedule_work() uses system_wq, which is a per CPU work queue. Although
    the queuing is not bound to a CPU, but it prefers local CPU of the caller,
    unless prohibited.
    
    Users of this work queue are not supposed to queue long running work.
    But in practice, there are scenarios where long running work items are
    queued on other unbound workqueues, occupying the CPU. As a result, the
    ISH resume handler may not get a chance to execute in a timely manner.
    
    In one scenario, one of the ish_resume_handler() executions was delayed
    nearly 1 second because another work item on an unbound workqueue occupied
    the same CPU. This delay causes ISH functionality failures.
    
    A similar issue was previously observed where the ISH HID driver timed out
    while getting the HID descriptor during S4 resume in the recovery kernel,
    likely caused by the same workqueue contention problem.
    
    Create dedicated unbound workqueues for all ISH operations to allow work
    items to execute on any available CPU, eliminating CPU-specific bottlenecks
    and improving resume reliability under varying system loads. Also ISH has
    three different components, a bus driver which implements ISH protocols, a
    PCI interface layer and HID interface. Use one dedicated work queue for all
    of them.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: usbhid: paper over wrong bNumDescriptor field [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Mon Dec 15 12:57:21 2025 +0100

    HID: usbhid: paper over wrong bNumDescriptor field
    
    commit f28beb69c51517aec7067dfb2074e7c751542384 upstream.
    
    Some faulty devices (ZWO EFWmini) have a wrong optional HID class
    descriptor count compared to the provided length.
    
    Given that we plainly ignore those optional descriptor, we can attempt
    to fix the provided number so we do not lock out those devices.
    
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Cc: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hrtimer: Fix softirq base check in update_needs_ipi() [+ + +]
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Date:   Wed Jan 7 11:39:24 2026 +0100

    hrtimer: Fix softirq base check in update_needs_ipi()
    
    commit 05dc4a9fc8b36d4c99d76bbc02aa9ec0132de4c2 upstream.
    
    The 'clockid' field is not the correct way to check for a softirq base.
    
    Fix the check to correctly compare the base type instead of the clockid.
    
    Fixes: 1e7f7fbcd40c ("hrtimer: Avoid more SMP function calls in clock_was_set()")
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260107-hrtimer-clock-base-check-v1-1-afb5dbce94a1@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i2c: qcom-geni: make sure I2C hub controllers can't use SE DMA [+ + +]
Author: Neil Armstrong <neil.armstrong@linaro.org>
Date:   Wed Oct 29 19:07:42 2025 +0100

    i2c: qcom-geni: make sure I2C hub controllers can't use SE DMA
    
    [ Upstream commit c0c50e3743e467ec4752c638e10e97f89c8644e2 ]
    
    The I2C Hub controller is a simpler GENI I2C variant that doesn't
    support DMA at all, add a no_dma flag to make sure it nevers selects
    the SE DMA mode with mappable 32bytes long transfers.
    
    Fixes: cacd9643eca7 ("i2c: qcom-geni: add support for I2C Master Hub variant")
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Reviewed-by: Mukesh Kumar Savaliya <mukesh.savaliya@oss.qualcomm.com>>
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: riic: Move suspend handling to NOIRQ phase [+ + +]
Author: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Date:   Thu Dec 18 16:10:21 2025 +0100

    i2c: riic: Move suspend handling to NOIRQ phase
    
    commit e383f0961422f983451ac4dd6aed1a3d3311f2be upstream.
    
    Commit 53326135d0e0 ("i2c: riic: Add suspend/resume support") added
    suspend support for the Renesas I2C driver and following this change
    on RZ/G3E the following WARNING is seen on entering suspend ...
    
    [  134.275704] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [  134.285536] ------------[ cut here ]------------
    [  134.290298] i2c i2c-2: Transfer while suspended
    [  134.295174] WARNING: drivers/i2c/i2c-core.h:56 at __i2c_smbus_xfer+0x1e4/0x214, CPU#0: systemd-sleep/388
    [  134.365507] Tainted: [W]=WARN
    [  134.368485] Hardware name: Renesas SMARC EVK version 2 based on r9a09g047e57 (DT)
    [  134.375961] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [  134.382935] pc : __i2c_smbus_xfer+0x1e4/0x214
    [  134.387329] lr : __i2c_smbus_xfer+0x1e4/0x214
    [  134.391717] sp : ffff800083f23860
    [  134.395040] x29: ffff800083f23860 x28: 0000000000000000 x27: ffff800082ed5d60
    [  134.402226] x26: 0000001f4395fd74 x25: 0000000000000007 x24: 0000000000000001
    [  134.409408] x23: 0000000000000000 x22: 000000000000006f x21: ffff800083f23936
    [  134.416589] x20: ffff0000c090e140 x19: ffff0000c090e0d0 x18: 0000000000000006
    [  134.423771] x17: 6f63657320313030 x16: 2e30206465737061 x15: ffff800083f23280
    [  134.430953] x14: 0000000000000000 x13: ffff800082b16ce8 x12: 0000000000000f09
    [  134.438134] x11: 0000000000000503 x10: ffff800082b6ece8 x9 : ffff800082b16ce8
    [  134.445315] x8 : 00000000ffffefff x7 : ffff800082b6ece8 x6 : 80000000fffff000
    [  134.452495] x5 : 0000000000000504 x4 : 0000000000000000 x3 : 0000000000000000
    [  134.459672] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000c9ee9e80
    [  134.466851] Call trace:
    [  134.469311]  __i2c_smbus_xfer+0x1e4/0x214 (P)
    [  134.473715]  i2c_smbus_xfer+0xbc/0x120
    [  134.477507]  i2c_smbus_read_byte_data+0x4c/0x84
    [  134.482077]  isl1208_i2c_read_time+0x44/0x178 [rtc_isl1208]
    [  134.487703]  isl1208_rtc_read_time+0x14/0x20 [rtc_isl1208]
    [  134.493226]  __rtc_read_time+0x44/0x88
    [  134.497012]  rtc_read_time+0x3c/0x68
    [  134.500622]  rtc_suspend+0x9c/0x170
    
    The warning is triggered because I2C transfers can still be attempted
    while the controller is already suspended, due to inappropriate ordering
    of the system sleep callbacks.
    
    If the controller is autosuspended, there is no way to wake it up once
    runtime PM disabled (in suspend_late()). During system resume, the I2C
    controller will be available only after runtime PM is re-enabled
    (in resume_early()). However, this may be too late for some devices.
    
    Wake up the controller in the suspend() callback while runtime PM is
    still enabled. The I2C controller will remain available until the
    suspend_noirq() callback (pm_runtime_force_suspend()) is called. During
    resume, the I2C controller can be restored by the resume_noirq() callback
    (pm_runtime_force_resume()). Finally, the resume() callback re-enables
    autosuspend. As a result, the I2C controller can remain available until
    the system enters suspend_noirq() and from resume_noirq().
    
    Cc: stable@vger.kernel.org
    Fixes: 53326135d0e0 ("i2c: riic: Add suspend/resume support")
    Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
    Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
    Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: move local task_work in exit cancel loop [+ + +]
Author: Ming Lei <ming.lei@redhat.com>
Date:   Wed Jan 14 16:54:05 2026 +0800

    io_uring: move local task_work in exit cancel loop
    
    commit da579f05ef0faada3559e7faddf761c75cdf85e1 upstream.
    
    With IORING_SETUP_DEFER_TASKRUN, task work is queued to ctx->work_llist
    (local work) rather than the fallback list. During io_ring_exit_work(),
    io_move_task_work_from_local() was called once before the cancel loop,
    moving work from work_llist to fallback_llist.
    
    However, task work can be added to work_llist during the cancel loop
    itself. There are two cases:
    
    1) io_kill_timeouts() is called from io_uring_try_cancel_requests() to
    cancel pending timeouts, and it adds task work via io_req_queue_tw_complete()
    for each cancelled timeout:
    
    2) URING_CMD requests like ublk can be completed via
    io_uring_cmd_complete_in_task() from ublk_queue_rq() during canceling,
    given ublk request queue is only quiesced when canceling the 1st uring_cmd.
    
    Since io_allowed_defer_tw_run() returns false in io_ring_exit_work()
    (kworker != submitter_task), io_run_local_work() is never invoked,
    and the work_llist entries are never processed. This causes
    io_uring_try_cancel_requests() to loop indefinitely, resulting in
    100% CPU usage in kworker threads.
    
    Fix this by moving io_move_task_work_from_local() inside the cancel
    loop, ensuring any work on work_llist is moved to fallback before
    each cancel attempt.
    
    Cc: stable@vger.kernel.org
    Fixes: c0e0d6ba25f1 ("io_uring: add IORING_SETUP_DEFER_TASKRUN")
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 7 16:31:09 2026 +0000

    ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv()
    
    [ Upstream commit 81c734dae203757fb3c9eee6f9896386940776bd ]
    
    Blamed commit did not take care of VLAN encapsulations
    as spotted by syzbot [1].
    
    Use skb_vlan_inet_prepare() instead of pskb_inet_may_pull().
    
    [1]
     BUG: KMSAN: uninit-value in __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
     BUG: KMSAN: uninit-value in INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
     BUG: KMSAN: uninit-value in IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
      INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
      IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      ip6ip6_dscp_ecn_decapsulate+0x16f/0x1b0 net/ipv6/ip6_tunnel.c:729
      __ip6_tnl_rcv+0xed9/0x1b50 net/ipv6/ip6_tunnel.c:860
      ip6_tnl_rcv+0xc3/0x100 net/ipv6/ip6_tunnel.c:903
     gre_rcv+0x1529/0x1b90 net/ipv6/ip6_gre.c:-1
      ip6_protocol_deliver_rcu+0x1c89/0x2c60 net/ipv6/ip6_input.c:438
      ip6_input_finish+0x1f4/0x4a0 net/ipv6/ip6_input.c:489
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ip6_input+0x9c/0x330 net/ipv6/ip6_input.c:500
      ip6_mc_input+0x7ca/0xc10 net/ipv6/ip6_input.c:590
      dst_input include/net/dst.h:474 [inline]
      ip6_rcv_finish+0x958/0x990 net/ipv6/ip6_input.c:79
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ipv6_rcv+0xf1/0x3c0 net/ipv6/ip6_input.c:311
      __netif_receive_skb_one_core net/core/dev.c:6139 [inline]
      __netif_receive_skb+0x1df/0xac0 net/core/dev.c:6252
      netif_receive_skb_internal net/core/dev.c:6338 [inline]
      netif_receive_skb+0x57/0x630 net/core/dev.c:6397
      tun_rx_batched+0x1df/0x980 drivers/net/tun.c:1485
      tun_get_user+0x5c0e/0x6c60 drivers/net/tun.c:1953
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4960 [inline]
      slab_alloc_node mm/slub.c:5263 [inline]
      kmem_cache_alloc_node_noprof+0x9e7/0x17a0 mm/slub.c:5315
      kmalloc_reserve+0x13c/0x4b0 net/core/skbuff.c:586
      __alloc_skb+0x805/0x1040 net/core/skbuff.c:690
      alloc_skb include/linux/skbuff.h:1383 [inline]
      alloc_skb_with_frags+0xc5/0xa60 net/core/skbuff.c:6712
      sock_alloc_send_pskb+0xacc/0xc60 net/core/sock.c:2995
      tun_alloc_skb drivers/net/tun.c:1461 [inline]
      tun_get_user+0x1142/0x6c60 drivers/net/tun.c:1794
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 0 UID: 0 PID: 6465 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(none)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    
    Fixes: 8d975c15c0cd ("ip6_tunnel: make sure to pull inner header in __ip6_tnl_rcv()")
    Reported-by: syzbot+d4dda070f833dc5dc89a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/695e88b2.050a0220.1c677c.036d.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260107163109.4188620-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv4: ip_gre: make ipgre_header() robust [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 8 19:02:14 2026 +0000

    ipv4: ip_gre: make ipgre_header() robust
    
    [ Upstream commit e67c577d89894811ce4dcd1a9ed29d8b63476667 ]
    
    Analog to commit db5b4e39c4e6 ("ip6_gre: make ip6gre_header() robust")
    
    Over the years, syzbot found many ways to crash the kernel
    in ipgre_header() [1].
    
    This involves team or bonding drivers ability to dynamically
    change their dev->needed_headroom and/or dev->hard_header_len
    
    In this particular crash mld_newpack() allocated an skb
    with a too small reserve/headroom, and by the time mld_sendpack()
    was called, syzbot managed to attach an ipgre device.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff89ea3cb7 len:2030915468 put:2030915372 head:ffff888058b43000 data:ffff887fdfa6e194 tail:0x120 end:0x6c0 dev:team0
     kernel BUG at net/core/skbuff.c:213 !
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 1 UID: 0 PID: 1322 Comm: kworker/1:9 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Workqueue: mld mld_ifc_work
     RIP: 0010:skb_panic+0x157/0x160 net/core/skbuff.c:213
    Call Trace:
     <TASK>
      skb_under_panic net/core/skbuff.c:223 [inline]
      skb_push+0xc3/0xe0 net/core/skbuff.c:2641
      ipgre_header+0x67/0x290 net/ipv4/ip_gre.c:897
      dev_hard_header include/linux/netdevice.h:3436 [inline]
      neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
      NF_HOOK_COND include/linux/netfilter.h:307 [inline]
      ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
      NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
      mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Fixes: c54419321455 ("GRE: Refactor GRE tunneling code.")
    Reported-by: syzbot+7c134e1c3aa3283790b9@syzkaller.appspotmail.com
    Closes: https://www.spinics.net/lists/netdev/msg1147302.html
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260108190214.1667040-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: Fix use-after-free in inet6_addr_del(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Tue Jan 13 01:05:08 2026 +0000

    ipv6: Fix use-after-free in inet6_addr_del().
    
    [ Upstream commit ddf96c393a33aef4887e2e406c76c2f8cda1419c ]
    
    syzbot reported use-after-free of inet6_ifaddr in
    inet6_addr_del(). [0]
    
    The cited commit accidentally moved ipv6_del_addr() for
    mngtmpaddr before reading its ifp->flags for temporary
    addresses in inet6_addr_del().
    
    Let's move ipv6_del_addr() down to fix the UAF.
    
    [0]:
    BUG: KASAN: slab-use-after-free in inet6_addr_del.constprop.0+0x67a/0x6b0 net/ipv6/addrconf.c:3117
    Read of size 4 at addr ffff88807b89c86c by task syz.3.1618/9593
    
    CPU: 0 UID: 0 PID: 9593 Comm: syz.3.1618 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xcd/0x630 mm/kasan/report.c:482
     kasan_report+0xe0/0x110 mm/kasan/report.c:595
     inet6_addr_del.constprop.0+0x67a/0x6b0 net/ipv6/addrconf.c:3117
     addrconf_del_ifaddr+0x11e/0x190 net/ipv6/addrconf.c:3181
     inet6_ioctl+0x1e5/0x2b0 net/ipv6/af_inet6.c:582
     sock_do_ioctl+0x118/0x280 net/socket.c:1254
     sock_ioctl+0x227/0x6b0 net/socket.c:1375
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f164cf8f749
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f164de64038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 00007f164d1e5fa0 RCX: 00007f164cf8f749
    RDX: 0000200000000000 RSI: 0000000000008936 RDI: 0000000000000003
    RBP: 00007f164d013f91 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f164d1e6038 R14: 00007f164d1e5fa0 R15: 00007ffde15c8288
     </TASK>
    
    Allocated by task 9593:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 mm/kasan/common.c:77
     poison_kmalloc_redzone mm/kasan/common.c:397 [inline]
     __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:414
     kmalloc_noprof include/linux/slab.h:957 [inline]
     kzalloc_noprof include/linux/slab.h:1094 [inline]
     ipv6_add_addr+0x4e3/0x2010 net/ipv6/addrconf.c:1120
     inet6_addr_add+0x256/0x9b0 net/ipv6/addrconf.c:3050
     addrconf_add_ifaddr+0x1fc/0x450 net/ipv6/addrconf.c:3160
     inet6_ioctl+0x103/0x2b0 net/ipv6/af_inet6.c:580
     sock_do_ioctl+0x118/0x280 net/socket.c:1254
     sock_ioctl+0x227/0x6b0 net/socket.c:1375
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 6099:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 mm/kasan/common.c:77
     kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:584
     poison_slab_object mm/kasan/common.c:252 [inline]
     __kasan_slab_free+0x5f/0x80 mm/kasan/common.c:284
     kasan_slab_free include/linux/kasan.h:234 [inline]
     slab_free_hook mm/slub.c:2540 [inline]
     slab_free_freelist_hook mm/slub.c:2569 [inline]
     slab_free_bulk mm/slub.c:6696 [inline]
     kmem_cache_free_bulk mm/slub.c:7383 [inline]
     kmem_cache_free_bulk+0x2bf/0x680 mm/slub.c:7362
     kfree_bulk include/linux/slab.h:830 [inline]
     kvfree_rcu_bulk+0x1b7/0x1e0 mm/slab_common.c:1523
     kvfree_rcu_drain_ready mm/slab_common.c:1728 [inline]
     kfree_rcu_monitor+0x1d0/0x2f0 mm/slab_common.c:1801
     process_one_work+0x9ba/0x1b20 kernel/workqueue.c:3257
     process_scheduled_works kernel/workqueue.c:3340 [inline]
     worker_thread+0x6c8/0xf10 kernel/workqueue.c:3421
     kthread+0x3c5/0x780 kernel/kthread.c:463
     ret_from_fork+0x983/0xb10 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Fixes: 00b5b7aab9e42 ("net/ipv6: delete temporary address if mngtmpaddr is removed or unmanaged")
    Reported-by: syzbot+72e610f4f1a930ca9d8a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/696598e9.050a0220.3be5c5.0009.GAE@google.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260113010538.2019411-1-kuniyu@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib/buildid: use __kernel_read() for sleepable context [+ + +]
Author: Shakeel Butt <shakeel.butt@linux.dev>
Date:   Mon Dec 22 12:58:59 2025 -0800

    lib/buildid: use __kernel_read() for sleepable context
    
    commit 777a8560fd29738350c5094d4166fe5499452409 upstream.
    
    Prevent a "BUG: unable to handle kernel NULL pointer dereference in
    filemap_read_folio".
    
    For the sleepable context, convert freader to use __kernel_read() instead
    of direct page cache access via read_cache_folio().  This simplifies the
    faultable code path by using the standard kernel file reading interface
    which handles all the complexity of reading file data.
    
    At the moment we are not changing the code for non-sleepable context which
    uses filemap_get_folio() and only succeeds if the target folios are
    already in memory and up-to-date.  The reason is to keep the patch simple
    and easier to backport to stable kernels.
    
    Syzbot repro does not crash the kernel anymore and the selftests run
    successfully.
    
    In the follow up we will make __kernel_read() with IOCB_NOWAIT work for
    non-sleepable contexts.  In addition, I would like to replace the
    secretmem check with a more generic approach and will add fstest for the
    buildid code.
    
    Link: https://lkml.kernel.org/r/20251222205859.3968077-1-shakeel.butt@linux.dev
    Fixes: ad41251c290d ("lib/buildid: implement sleepable build_id_parse() API")
    Reported-by: syzbot+09b7d050e4806540153d@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=09b7d050e4806540153d
    Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Tested-by: Jinchao Wang <wangjinchao600@gmail.com>
      Link: https://lkml.kernel.org/r/aUteBPWPYzVWIZFH@ndev
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andrii Nakryiko <andrii@kernel.org>
    Cc: Daniel Borkman <daniel@iogearbox.net>
    Cc: "Darrick J. Wong" <djwong@kernel.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.12.67 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jan 23 11:18:52 2026 +0100

    Linux 6.12.67
    
    Link: https://lore.kernel.org/r/20260121181411.452263583@linuxfoundation.org
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Brett Mastbergen <bmastbergen@ciq.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: dts: loongson-2k0500: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Sat Jan 17 10:56:52 2026 +0800

    LoongArch: dts: loongson-2k0500: Add default interrupt controller address cells
    
    commit c4461754e6fe7e12a3ff198cce4707e3e20e43d4 upstream.
    
    Add missing address-cells 0 to the Local I/O and Extend I/O interrupt
    controller node to silence W=1 warning:
    
      loongson-2k0500.dtsi:513.5-51: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@0,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@1fe11600, using 0 as fallback
    
    Value '0' is correct because:
    1. The Local I/O & Extend I/O interrupt controller do not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: dts: loongson-2k1000: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k1000: Add default interrupt controller address cells
    
    commit 81e8cb7e504a5adbcc48f7f954bf3c2aa9b417f8 upstream.
    
    Add missing address-cells 0 to the Local I/O interrupt controller node
    to silence W=1 warning:
    
      loongson-2k1000.dtsi:498.5-55: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@9,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@1fe01440, using 0 as fallback
    
    Value '0' is correct because:
    1. The Local I/O interrupt controller does not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: dts: loongson-2k1000: Fix i2c-gpio node names [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k1000: Fix i2c-gpio node names
    
    commit 14ea5a3625881d79f75418c66e3a7d98db8518e1 upstream.
    
    The binding wants the node to be named "i2c-number", but those are named
    "i2c-gpio-number" instead.
    
    Thus rename those to i2c-0, i2c-1 to adhere to the binding and suppress
    dtbs_check warnings.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells
    
    commit e65df3f77ecd59d3a8647d19df82b22a6ce210a9 upstream.
    
    Add missing address-cells 0 to the Local I/O, Extend I/O and PCH-PIC
    Interrupt Controller node to silence W=1 warning:
    
      loongson-2k2000.dtsi:364.5-49: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@9,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@10000000, using 0 as fallback
    
    Value '0' is correct because:
    1. The LIO/EIO/PCH interrupt controller does not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Fix PMU counter allocation for mixed-type event groups [+ + +]
Author: Lisa Robinson <lisa@bytefly.space>
Date:   Sat Jan 17 10:56:43 2026 +0800

    LoongArch: Fix PMU counter allocation for mixed-type event groups
    
    commit a91f86e27087f250a5d9c89bb4a427b9c30fd815 upstream.
    
    When validating a perf event group, validate_group() unconditionally
    attempts to allocate hardware PMU counters for the leader, sibling
    events and the new event being added.
    
    This is incorrect for mixed-type groups. If a PERF_TYPE_SOFTWARE event
    is part of the group, the current code still tries to allocate a hardware
    PMU counter for it, which can wrongly consume hardware PMU resources and
    cause spurious allocation failures.
    
    Fix this by only allocating PMU counters for hardware events during group
    validation, and skipping software events.
    
    A trimmed down reproducer is as simple as this:
    
      #include <stdio.h>
      #include <assert.h>
      #include <unistd.h>
      #include <string.h>
      #include <sys/syscall.h>
      #include <linux/perf_event.h>
    
      int main (int argc, char *argv[])
      {
            struct perf_event_attr attr = { 0 };
            int fds[5];
    
            attr.disabled = 1;
            attr.exclude_kernel = 1;
            attr.exclude_hv = 1;
            attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
                    PERF_FORMAT_TOTAL_TIME_RUNNING | PERF_FORMAT_ID | PERF_FORMAT_GROUP;
            attr.size = sizeof (attr);
    
            attr.type = PERF_TYPE_SOFTWARE;
            attr.config = PERF_COUNT_SW_DUMMY;
            fds[0] = syscall (SYS_perf_event_open, &attr, 0, -1, -1, 0);
            assert (fds[0] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_CPU_CYCLES;
            fds[1] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[1] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_INSTRUCTIONS;
            fds[2] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[2] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_BRANCH_MISSES;
            fds[3] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[3] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_CACHE_REFERENCES;
            fds[4] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[4] >= 0);
    
            printf ("PASSED\n");
    
            return 0;
      }
    
    Cc: stable@vger.kernel.org
    Fixes: b37042b2bb7c ("LoongArch: Add perf events support")
    Signed-off-by: Lisa Robinson <lisa@bytefly.space>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
macvlan: fix possible UAF in macvlan_forward_source() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 8 13:36:51 2026 +0000

    macvlan: fix possible UAF in macvlan_forward_source()
    
    [ Upstream commit 7470a7a63dc162f07c26dbf960e41ee1e248d80e ]
    
    Add RCU protection on (struct macvlan_source_entry)->vlan.
    
    Whenever macvlan_hash_del_source() is called, we must clear
    entry->vlan pointer before RCU grace period starts.
    
    This allows macvlan_forward_source() to skip over
    entries queued for freeing.
    
    Note that macvlan_dev are already RCU protected, as they
    are embedded in a standard netdev (netdev_priv(ndev)).
    
    Fixes: 79cf79abce71 ("macvlan: add source mode")
    Reported-by: syzbot+7182fbe91e58602ec1fe@syzkaller.appspotmail.com
    https: //lore.kernel.org/netdev/695fb1e8.050a0220.1c677c.039f.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260108133651.1130486-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm, kfence: describe @slab parameter in __kfence_obj_info() [+ + +]
Author: Bagas Sanjaya <bagasdotme@gmail.com>
Date:   Fri Dec 19 08:40:07 2025 +0700

    mm, kfence: describe @slab parameter in __kfence_obj_info()
    
    [ Upstream commit 6cfab50e1440fde19af7c614aacd85e11aa4dcea ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/kfence.h:220 function parameter 'slab' not described in '__kfence_obj_info'
    
    Fix it by describing @slab parameter.
    
    Link: https://lkml.kernel.org/r/20251219014006.16328-6-bagasdotme@gmail.com
    Fixes: 2dfe63e61cc3 ("mm, kfence: support kmem_dump_obj() for KFENCE objects")
    Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Acked-by: Marco Elver <elver@google.com>
    Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
    Acked-by: Harry Yoo <harry.yoo@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Wed Dec 24 18:30:37 2025 -0800

    mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure
    
    commit 392b3d9d595f34877dd745b470c711e8ebcd225c upstream.
    
    When a DAMOS-scheme DAMON sysfs directory setup fails after setup of
    access_pattern/ directory, subdirectories of access_pattern/ directory are
    not cleaned up.  As a result, DAMON sysfs interface is nearly broken until
    the system reboots, and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/20251225023043.18579-5-sj@kernel.org
    Fixes: 9bbb820a5bd5 ("mm/damon/sysfs: support DAMOS quotas")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: chongjiapeng <jiapeng.chong@linux.alibaba.com>
    Cc: <stable@vger.kernel.org> # 5.18.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/damon/sysfs-scheme: cleanup quotas subdirs on scheme dir setup failure [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Wed Dec 24 18:30:36 2025 -0800

    mm/damon/sysfs-scheme: cleanup quotas subdirs on scheme dir setup failure
    
    commit dc7e1d75fd8c505096d0cddeca9e2efb2b55aaf9 upstream.
    
    When a DAMOS-scheme DAMON sysfs directory setup fails after setup of
    quotas/ directory, subdirectories of quotas/ directory are not cleaned up.
    As a result, DAMON sysfs interface is nearly broken until the system
    reboots, and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/20251225023043.18579-4-sj@kernel.org
    Fixes: 1b32234ab087 ("mm/damon/sysfs: support DAMOS watermarks")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: chongjiapeng <jiapeng.chong@linux.alibaba.com>
    Cc: <stable@vger.kernel.org> # 5.18.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/damon/sysfs: cleanup attrs subdirs on context dir setup failure [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Wed Dec 24 18:30:35 2025 -0800

    mm/damon/sysfs: cleanup attrs subdirs on context dir setup failure
    
    commit 9814cc832b88bd040fc2a1817c2b5469d0f7e862 upstream.
    
    When a context DAMON sysfs directory setup is failed after setup of attrs/
    directory, subdirectories of attrs/ directory are not cleaned up.  As a
    result, DAMON sysfs interface is nearly broken until the system reboots,
    and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/20251225023043.18579-3-sj@kernel.org
    Fixes: c951cd3b8901 ("mm/damon: implement a minimal stub for sysfs-based DAMON interface")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: chongjiapeng <jiapeng.chong@linux.alibaba.com>
    Cc: <stable@vger.kernel.org> # 5.18.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/fake-numa: allow later numa node hotplug [+ + +]
Author: Bruno Faccini <bfaccini@nvidia.com>
Date:   Tue Jan 20 22:06:54 2026 -0500

    mm/fake-numa: allow later numa node hotplug
    
    [ Upstream commit 63db8170bf34ce9e0763f87d993cf9b4c9002b09 ]
    
    Current fake-numa implementation prevents new Numa nodes to be later
    hot-plugged by drivers.  A common symptom of this limitation is the "node
    <X> was absent from the node_possible_map" message by associated warning
    in mm/memory_hotplug.c: add_memory_resource().
    
    This comes from the lack of remapping in both pxm_to_node_map[] and
    node_to_pxm_map[] tables to take fake-numa nodes into account and thus
    triggers collisions with original and physical nodes only-mapping that had
    been determined from BIOS tables.
    
    This patch fixes this by doing the necessary node-ids translation in both
    pxm_to_node_map[]/node_to_pxm_map[] tables.  node_distance[] table has
    also been fixed accordingly.
    
    Details:
    
    When trying to use fake-numa feature on our system where new Numa nodes
    are being "hot-plugged" upon driver load, this fails with the following
    type of message and warning with stack :
    
    node 8 was absent from the node_possible_map WARNING: CPU: 61 PID: 4259 at
    mm/memory_hotplug.c:1506 add_memory_resource+0x3dc/0x418
    
    This issue prevents the use of the fake-NUMA debug feature with the
    system's full configuration, when it has proven to be sometimes extremely
    useful for performance testing of multi-tasked, memory-bound applications,
    as it enables better isolation of processes/ranks compared to fat NUMA
    nodes.
    
    Usual numactl output after driver has “hot-plugged”/unveiled some
    new Numa nodes with and without memory :
    $ numactl --hardware
    available: 9 nodes (0-8)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 0 size: 490037 MB
    node 0 free: 484432 MB
    node 1 cpus:
    node 1 size: 97280 MB
    node 1 free: 97279 MB
    node 2 cpus:
    node 2 size: 0 MB
    node 2 free: 0 MB
    node 3 cpus:
    node 3 size: 0 MB
    node 3 free: 0 MB
    node 4 cpus:
    node 4 size: 0 MB
    node 4 free: 0 MB
    node 5 cpus:
    node 5 size: 0 MB
    node 5 free: 0 MB
    node 6 cpus:
    node 6 size: 0 MB
    node 6 free: 0 MB
    node 7 cpus:
    node 7 size: 0 MB
    node 7 free: 0 MB
    node 8 cpus:
    node 8 size: 0 MB
    node 8 free: 0 MB
    node distances:
    node   0   1   2   3   4   5   6   7   8
      0:  10  80  80  80  80  80  80  80  80
      1:  80  10  255  255  255  255  255  255  255
      2:  80  255  10  255  255  255  255  255  255
      3:  80  255  255  10  255  255  255  255  255
      4:  80  255  255  255  10  255  255  255  255
      5:  80  255  255  255  255  10  255  255  255
      6:  80  255  255  255  255  255  10  255  255
      7:  80  255  255  255  255  255  255  10  255
      8:  80  255  255  255  255  255  255  255  10
    
    With recent M.Rapoport set of fake-numa patches in mm-everything
    and using numa=fake=4 boot parameter :
    $ numactl --hardware
    available: 4 nodes (0-3)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 0 size: 122518 MB
    node 0 free: 117141 MB
    node 1 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 1 size: 219911 MB
    node 1 free: 219751 MB
    node 2 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 2 size: 122599 MB
    node 2 free: 122541 MB
    node 3 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 3 size: 122479 MB
    node 3 free: 122408 MB
    node distances:
    node   0   1   2   3
      0:  10  10  10  10
      1:  10  10  10  10
      2:  10  10  10  10
      3:  10  10  10  10
    
    With recent M.Rapoport set of fake-numa patches in mm-everything,
    this patch on top, using numa=fake=4 boot parameter :
    # numactl —hardware
    available: 12 nodes (0-11)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 0 size: 122518 MB
    node 0 free: 116429 MB
    node 1 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 1 size: 122631 MB
    node 1 free: 122576 MB
    node 2 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 2 size: 122599 MB
    node 2 free: 122544 MB
    node 3 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    65 66 67 68 69 70 71
    node 3 size: 122479 MB
    node 3 free: 122419 MB
    node 4 cpus:
    node 4 size: 97280 MB
    node 4 free: 97279 MB
    node 5 cpus:
    node 5 size: 0 MB
    node 5 free: 0 MB
    node 6 cpus:
    node 6 size: 0 MB
    node 6 free: 0 MB
    node 7 cpus:
    node 7 size: 0 MB
    node 7 free: 0 MB
    node 8 cpus:
    node 8 size: 0 MB
    node 8 free: 0 MB
    node 9 cpus:
    node 9 size: 0 MB
    node 9 free: 0 MB
    node 10 cpus:
    node 10 size: 0 MB
    node 10 free: 0 MB
    node 11 cpus:
    node 11 size: 0 MB
    node 11 free: 0 MB
    node distances:
    node   0   1   2   3   4   5   6   7   8   9  10  11
      0:  10  10  10  10  80  80  80  80  80  80  80  80
      1:  10  10  10  10  80  80  80  80  80  80  80  80
      2:  10  10  10  10  80  80  80  80  80  80  80  80
      3:  10  10  10  10  80  80  80  80  80  80  80  80
      4:  80  80  80  80  10  255  255  255  255  255  255  255
      5:  80  80  80  80  255  10  255  255  255  255  255  255
      6:  80  80  80  80  255  255  10  255  255  255  255  255
      7:  80  80  80  80  255  255  255  10  255  255  255  255
      8:  80  80  80  80  255  255  255  255  10  255  255  255
      9:  80  80  80  80  255  255  255  255  255  10  255  255
     10:  80  80  80  80  255  255  255  255  255  255  10  255
     11:  80  80  80  80  255  255  255  255  255  255  255  10
    
    Link: https://lkml.kernel.org/r/20250106120659.359610-2-bfaccini@nvidia.com
    Signed-off-by: Bruno Faccini <bfaccini@nvidia.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: f46c26f1bcd9 ("mm: numa,memblock: include <asm/numa.h> for 'numa_nodes_parsed'")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/fake-numa: handle cases with no SRAT info [+ + +]
Author: Bruno Faccini <bfaccini@nvidia.com>
Date:   Mon Jan 27 09:16:23 2025 -0800

    mm/fake-numa: handle cases with no SRAT info
    
    commit 4c80187001d3e2876dfe7e011b9eac3b6270156f upstream.
    
    Handle more gracefully cases where no SRAT information is available, like
    in VMs with no Numa support, and allow fake-numa configuration to complete
    successfully in these cases
    
    Link: https://lkml.kernel.org/r/20250127171623.1523171-1-bfaccini@nvidia.com
    Fixes: 63db8170bf34 (“mm/fake-numa: allow later numa node hotplug”)
    Signed-off-by: Bruno Faccini <bfaccini@nvidia.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hyeonggon Yoo <hyeonggon.yoo@sk.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: "Mike Rapoport (IBM)" <rppt@kernel.org>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/page_alloc/vmstat: simplify refresh_cpu_vm_stats change detection [+ + +]
Author: Joshua Hahn <joshua.hahnjy@gmail.com>
Date:   Wed Jan 21 06:28:06 2026 -0500

    mm/page_alloc/vmstat: simplify refresh_cpu_vm_stats change detection
    
    [ Upstream commit 0acc67c4030c39f39ac90413cc5d0abddd3a9527 ]
    
    Patch series "mm/page_alloc: Batch callers of free_pcppages_bulk", v5.
    
    Motivation & Approach
    =====================
    
    While testing workloads with high sustained memory pressure on large
    machines in the Meta fleet (1Tb memory, 316 CPUs), we saw an unexpectedly
    high number of softlockups.  Further investigation showed that the zone
    lock in free_pcppages_bulk was being held for a long time, and was called
    to free 2k+ pages over 100 times just during boot.
    
    This causes starvation in other processes for the zone lock, which can
    lead to the system stalling as multiple threads cannot make progress
    without the locks.  We can see these issues manifesting as warnings:
    
    [ 4512.591979] rcu: INFO: rcu_sched self-detected stall on CPU
    [ 4512.604370] rcu:     20-....: (9312 ticks this GP) idle=a654/1/0x4000000000000000 softirq=309340/309344 fqs=5426
    [ 4512.626401] rcu:              hardirqs   softirqs   csw/system
    [ 4512.638793] rcu:      number:        0        145            0
    [ 4512.651177] rcu:     cputime:       30      10410          174   ==> 10558(ms)
    [ 4512.666657] rcu:     (t=21077 jiffies g=783665 q=1242213 ncpus=316)
    
    While these warnings don't indicate a crash or a kernel panic, they do
    point to the underlying issue of lock contention.  To prevent starvation
    in both locks, batch the freeing of pages using pcp->batch.
    
    Because free_pcppages_bulk is called with the pcp lock and acquires the
    zone lock, relinquishing and reacquiring the locks are only effective when
    both of them are broken together (unless the system was built with queued
    spinlocks).  Thus, instead of modifying free_pcppages_bulk to break both
    locks, batch the freeing from its callers instead.
    
    A similar fix has been implemented in the Meta fleet, and we have seen
    significantly less softlockups.
    
    Testing
    =======
    The following are a few synthetic benchmarks, made on three machines. The
    first is a large machine with 754GiB memory and 316 processors.
    The second is a relatively smaller machine with 251GiB memory and 176
    processors. The third and final is the smallest of the three, which has 62GiB
    memory and 36 processors.
    
    On all machines, I kick off a kernel build with -j$(nproc).
    Negative delta is better (faster compilation).
    
    Large machine (754GiB memory, 316 processors)
    make -j$(nproc)
    +------------+---------------+-----------+
    | Metric (s) | Variation (%) | Delta(%)  |
    +------------+---------------+-----------+
    | real       |        0.8070 |  - 1.4865 |
    | user       |        0.2823 |  + 0.4081 |
    | sys        |        5.0267 |  -11.8737 |
    +------------+---------------+-----------+
    
    Medium machine (251GiB memory, 176 processors)
    make -j$(nproc)
    +------------+---------------+----------+
    | Metric (s) | Variation (%) | Delta(%) |
    +------------+---------------+----------+
    | real       |        0.2806 |  +0.0351 |
    | user       |        0.0994 |  +0.3170 |
    | sys        |        0.6229 |  -0.6277 |
    +------------+---------------+----------+
    
    Small machine (62GiB memory, 36 processors)
    make -j$(nproc)
    +------------+---------------+----------+
    | Metric (s) | Variation (%) | Delta(%) |
    +------------+---------------+----------+
    | real       |        0.1503 |  -2.6585 |
    | user       |        0.0431 |  -2.2984 |
    | sys        |        0.1870 |  -3.2013 |
    +------------+---------------+----------+
    
    Here, variation is the coefficient of variation, i.e.  standard deviation
    / mean.
    
    Based on these results, it seems like there are varying degrees to how
    much lock contention this reduces.  For the largest and smallest machines
    that I ran the tests on, it seems like there is quite some significant
    reduction.  There is also some performance increases visible from
    userspace.
    
    Interestingly, the performance gains don't scale with the size of the
    machine, but rather there seems to be a dip in the gain there is for the
    medium-sized machine.  One possible theory is that because the high
    watermark depends on both memory and the number of local CPUs, what
    impacts zone contention the most is not these individual values, but
    rather the ratio of mem:processors.
    
    This patch (of 5):
    
    Currently, refresh_cpu_vm_stats returns an int, indicating how many
    changes were made during its updates.  Using this information, callers
    like vmstat_update can heuristically determine if more work will be done
    in the future.
    
    However, all of refresh_cpu_vm_stats's callers either (a) ignore the
    result, only caring about performing the updates, or (b) only care about
    whether changes were made, but not *how many* changes were made.
    
    Simplify the code by returning a bool instead to indicate if updates
    were made.
    
    In addition, simplify fold_diff and decay_pcp_high to return a bool
    for the same reason.
    
    Link: https://lkml.kernel.org/r/20251014145011.3427205-1-joshua.hahnjy@gmail.com
    Link: https://lkml.kernel.org/r/20251014145011.3427205-2-joshua.hahnjy@gmail.com
    Signed-off-by: Joshua Hahn <joshua.hahnjy@gmail.com>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Reviewed-by: SeongJae Park <sj@kernel.org>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Chris Mason <clm@fb.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 038a102535eb ("mm/page_alloc: prevent pcp corruption with SMP=n")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/page_alloc: batch page freeing in decay_pcp_high [+ + +]
Author: Joshua Hahn <joshua.hahnjy@gmail.com>
Date:   Wed Jan 21 06:28:07 2026 -0500

    mm/page_alloc: batch page freeing in decay_pcp_high
    
    [ Upstream commit fc4b909c368f3a7b08c895dd5926476b58e85312 ]
    
    It is possible for pcp->count - pcp->high to exceed pcp->batch by a lot.
    When this happens, we should perform batching to ensure that
    free_pcppages_bulk isn't called with too many pages to free at once and
    starve out other threads that need the pcp or zone lock.
    
    Since we are still only freeing the difference between the initial
    pcp->count and pcp->high values, there should be no change to how many
    pages are freed.
    
    Link: https://lkml.kernel.org/r/20251014145011.3427205-3-joshua.hahnjy@gmail.com
    Signed-off-by: Joshua Hahn <joshua.hahnjy@gmail.com>
    Suggested-by: Chris Mason <clm@fb.com>
    Suggested-by: Andrew Morton <akpm@linux-foundation.org>
    Co-developed-by: Johannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: SeongJae Park <sj@kernel.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 038a102535eb ("mm/page_alloc: prevent pcp corruption with SMP=n")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free [+ + +]
Author: Aboorva Devarajan <aboorvad@linux.ibm.com>
Date:   Mon Dec 1 11:30:09 2025 +0530

    mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free
    
    commit b9efe36b5e3eb2e91aa3d706066428648af034fc upstream.
    
    When page isolation loops indefinitely during memory offline, reading
    /proc/sys/vm/percpu_pagelist_high_fraction blocks on pcp_batch_high_lock,
    causing hung task warnings.
    
    Make procfs reads lock-free since percpu_pagelist_high_fraction is a
    simple integer with naturally atomic reads, writers still serialize via
    the mutex.
    
    This prevents hung task warnings when reading the procfs file during
    long-running memory offline operations.
    
    [akpm@linux-foundation.org: add comment, per Michal]
      Link: https://lkml.kernel.org/r/aS_y9AuJQFydLEXo@tiehlicka
    Link: https://lkml.kernel.org/r/20251201060009.1420792-1-aboorvad@linux.ibm.com
    Signed-off-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Zi Yan <ziy@nvidia.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: prevent pcp corruption with SMP=n [+ + +]
Author: Vlastimil Babka <vbabka@suse.cz>
Date:   Wed Jan 21 06:28:08 2026 -0500

    mm/page_alloc: prevent pcp corruption with SMP=n
    
    [ Upstream commit 038a102535eb49e10e93eafac54352fcc5d78847 ]
    
    The kernel test robot has reported:
    
     BUG: spinlock trylock failure on UP on CPU#0, kcompactd0/28
      lock: 0xffff888807e35ef0, .magic: dead4ead, .owner: kcompactd0/28, .owner_cpu: 0
     CPU: 0 UID: 0 PID: 28 Comm: kcompactd0 Not tainted 6.18.0-rc5-00127-ga06157804399 #1 PREEMPT  8cc09ef94dcec767faa911515ce9e609c45db470
     Call Trace:
      <IRQ>
      __dump_stack (lib/dump_stack.c:95)
      dump_stack_lvl (lib/dump_stack.c:123)
      dump_stack (lib/dump_stack.c:130)
      spin_dump (kernel/locking/spinlock_debug.c:71)
      do_raw_spin_trylock (kernel/locking/spinlock_debug.c:?)
      _raw_spin_trylock (include/linux/spinlock_api_smp.h:89 kernel/locking/spinlock.c:138)
      __free_frozen_pages (mm/page_alloc.c:2973)
      ___free_pages (mm/page_alloc.c:5295)
      __free_pages (mm/page_alloc.c:5334)
      tlb_remove_table_rcu (include/linux/mm.h:? include/linux/mm.h:3122 include/asm-generic/tlb.h:220 mm/mmu_gather.c:227 mm/mmu_gather.c:290)
      ? __cfi_tlb_remove_table_rcu (mm/mmu_gather.c:289)
      ? rcu_core (kernel/rcu/tree.c:?)
      rcu_core (include/linux/rcupdate.h:341 kernel/rcu/tree.c:2607 kernel/rcu/tree.c:2861)
      rcu_core_si (kernel/rcu/tree.c:2879)
      handle_softirqs (arch/x86/include/asm/jump_label.h:36 include/trace/events/irq.h:142 kernel/softirq.c:623)
      __irq_exit_rcu (arch/x86/include/asm/jump_label.h:36 kernel/softirq.c:725)
      irq_exit_rcu (kernel/softirq.c:741)
      sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1052)
      </IRQ>
      <TASK>
     RIP: 0010:_raw_spin_unlock_irqrestore (arch/x86/include/asm/preempt.h:95 include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
      free_pcppages_bulk (mm/page_alloc.c:1494)
      drain_pages_zone (include/linux/spinlock.h:391 mm/page_alloc.c:2632)
      __drain_all_pages (mm/page_alloc.c:2731)
      drain_all_pages (mm/page_alloc.c:2747)
      kcompactd (mm/compaction.c:3115)
      kthread (kernel/kthread.c:465)
      ? __cfi_kcompactd (mm/compaction.c:3166)
      ? __cfi_kthread (kernel/kthread.c:412)
      ret_from_fork (arch/x86/kernel/process.c:164)
      ? __cfi_kthread (kernel/kthread.c:412)
      ret_from_fork_asm (arch/x86/entry/entry_64.S:255)
      </TASK>
    
    Matthew has analyzed the report and identified that in drain_page_zone()
    we are in a section protected by spin_lock(&pcp->lock) and then get an
    interrupt that attempts spin_trylock() on the same lock.  The code is
    designed to work this way without disabling IRQs and occasionally fail the
    trylock with a fallback.  However, the SMP=n spinlock implementation
    assumes spin_trylock() will always succeed, and thus it's normally a
    no-op.  Here the enabled lock debugging catches the problem, but otherwise
    it could cause a corruption of the pcp structure.
    
    The problem has been introduced by commit 574907741599 ("mm/page_alloc:
    leave IRQs enabled for per-cpu page allocations").  The pcp locking scheme
    recognizes the need for disabling IRQs to prevent nesting spin_trylock()
    sections on SMP=n, but the need to prevent the nesting in spin_lock() has
    not been recognized.  Fix it by introducing local wrappers that change the
    spin_lock() to spin_lock_iqsave() with SMP=n and use them in all places
    that do spin_lock(&pcp->lock).
    
    [vbabka@suse.cz: add pcp_ prefix to the spin_lock_irqsave wrappers, per Steven]
    Link: https://lkml.kernel.org/r/20260105-fix-pcp-up-v1-1-5579662d2071@suse.cz
    Fixes: 574907741599 ("mm/page_alloc: leave IRQs enabled for per-cpu page allocations")
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202512101320.e2f2dd6f-lkp@intel.com
    Analyzed-by: Matthew Wilcox <willy@infradead.org>
    Link: https://lore.kernel.org/all/aUW05pyc9nZkvY-1@casper.infradead.org/
    Acked-by: Mel Gorman <mgorman@techsingularity.net>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/zswap: fix error pointer free in zswap_cpu_comp_prepare() [+ + +]
Author: Pavel Butsykin <pbutsykin@cloudlinux.com>
Date:   Wed Dec 31 11:46:38 2025 +0400

    mm/zswap: fix error pointer free in zswap_cpu_comp_prepare()
    
    commit 590b13669b813d55844fecd9142c56abd567914d upstream.
    
    crypto_alloc_acomp_node() may return ERR_PTR(), but the fail path checks
    only for NULL and can pass an error pointer to crypto_free_acomp().  Use
    IS_ERR_OR_NULL() to only free valid acomp instances.
    
    Link: https://lkml.kernel.org/r/20251231074638.2564302-1-pbutsykin@cloudlinux.com
    Fixes: 779b9955f643 ("mm: zswap: move allocations during CPU init outside the lock")
    Signed-off-by: Pavel Butsykin <pbutsykin@cloudlinux.com>
    Reviewed-by: SeongJae Park <sj@kernel.org>
    Acked-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Acked-by: Nhat Pham <nphamcs@gmail.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Chengming Zhou <chengming.zhou@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: describe @flags parameter in memalloc_flags_save() [+ + +]
Author: Bagas Sanjaya <bagasdotme@gmail.com>
Date:   Fri Dec 19 08:40:04 2025 +0700

    mm: describe @flags parameter in memalloc_flags_save()
    
    [ Upstream commit e2fb7836b01747815f8bb94981c35f2688afb120 ]
    
    Patch series "mm kernel-doc fixes".
    
    Here are kernel-doc fixes for mm subsystem.  I'm also including textsearch
    fix since there's currently no maintainer for include/linux/textsearch.h
    (get_maintainer.pl only shows LKML).
    
    This patch (of 4):
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/sched/mm.h:332 function parameter 'flags' not described in 'memalloc_flags_save'
    
    Describe @flags to fix it.
    
    Link: https://lkml.kernel.org/r/20251219014006.16328-2-bagasdotme@gmail.com
    Link: https://lkml.kernel.org/r/20251219014006.16328-3-bagasdotme@gmail.com
    Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Fixes: 3f6d5e6a468d ("mm: introduce memalloc_flags_{save,restore}")
    Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
    Acked-by: Harry Yoo <harry.yoo@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: kmsan: fix poisoning of high-order non-compound pages [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Jan 20 22:14:29 2026 -0500

    mm: kmsan: fix poisoning of high-order non-compound pages
    
    [ Upstream commit 4795d205d78690a46b60164f44b8bb7b3e800865 ]
    
    kmsan_free_page() is called by the page allocator's free_pages_prepare()
    during page freeing.  Its job is to poison all the memory covered by the
    page.  It can be called with an order-0 page, a compound high-order page
    or a non-compound high-order page.  But page_size() only works for order-0
    and compound pages.  For a non-compound high-order page it will
    incorrectly return PAGE_SIZE.
    
    The implication is that the tail pages of a high-order non-compound page
    do not get poisoned at free, so any invalid access while they are free
    could go unnoticed.  It looks like the pages will be poisoned again at
    allocation time, so that would bookend the window.
    
    Fix this by using the order parameter to calculate the size.
    
    Link: https://lkml.kernel.org/r/20260104134348.3544298-1-ryan.roberts@arm.com
    Fixes: b073d7f8aee4 ("mm: kmsan: maintain KMSAN metadata for page operations")
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Reviewed-by: Alexander Potapenko <glider@google.com>
    Tested-by: Alexander Potapenko <glider@google.com>
    Cc: Dmitriy Vyukov <dvyukov@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: numa,memblock: include for 'numa_nodes_parsed' [+ + +]
Author: Ben Dooks <ben.dooks@codethink.co.uk>
Date:   Tue Jan 20 22:06:55 2026 -0500

    mm: numa,memblock: include <asm/numa.h> for 'numa_nodes_parsed'
    
    [ Upstream commit f46c26f1bcd9164d7f3377f15ca75488a3e44362 ]
    
    The 'numa_nodes_parsed' is defined in <asm/numa.h> but this file
    is not included in mm/numa_memblks.c (build x86_64) so add this
    to the incldues to fix the following sparse warning:
    
    mm/numa_memblks.c:13:12: warning: symbol 'numa_nodes_parsed' was not declared. Should it be static?
    
    Link: https://lkml.kernel.org/r/20260108101539.229192-1-ben.dooks@codethink.co.uk
    Fixes: 87482708210f ("mm: introduce numa_memblks")
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Cc: Ben Dooks <ben.dooks@codethink.co.uk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5e: Don't store mlx5e_priv in mlx5e_dev devlink priv [+ + +]
Author: Saeed Mahameed <saeedm@nvidia.com>
Date:   Thu Jan 8 13:26:55 2026 -0800

    net/mlx5e: Don't store mlx5e_priv in mlx5e_dev devlink priv
    
    [ Upstream commit 123eda2e5b1638e298e3a66bb1e64a8da92de5e1 ]
    
    mlx5e_priv is an unstable structure that can be memset(0) if profile
    attaching fails, mlx5e_priv in mlx5e_dev devlink private is used to
    reference the netdev and mdev associated with that struct. Instead,
    store netdev directly into mlx5e_dev and get mdev from the containing
    mlx5_adev aux device structure.
    
    This fixes a kernel oops in mlx5e_remove when switchdev mode fails due
    to change profile failure.
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
    Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg:
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
    
    $ devlink dev reload pci/0000:00:03.0 ==> oops
    
    BUG: kernel NULL pointer dereference, address: 0000000000000520
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 3 UID: 0 PID: 521 Comm: devlink Not tainted 6.18.0-rc5+ #117 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_remove+0x68/0x130
    RSP: 0018:ffffc900034838f0 EFLAGS: 00010246
    RAX: ffff88810283c380 RBX: ffff888101874400 RCX: ffffffff826ffc45
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000000
    RBP: ffff888102d789c0 R08: ffff8881007137f0 R09: ffff888100264e10
    R10: ffffc90003483898 R11: ffffc900034838a0 R12: ffff888100d261a0
    R13: ffff888100d261a0 R14: ffff8881018749a0 R15: ffff888101874400
    FS:  00007f8565fea740(0000) GS:ffff88856a759000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000520 CR3: 000000010b11a004 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     device_release_driver_internal+0x19c/0x200
     bus_remove_device+0xc6/0x130
     device_del+0x160/0x3d0
     ? devl_param_driverinit_value_get+0x2d/0x90
     mlx5_detach_device+0x89/0xe0
     mlx5_unload_one_devl_locked+0x3a/0x70
     mlx5_devlink_reload_down+0xc8/0x220
     devlink_reload+0x7d/0x260
     devlink_nl_reload_doit+0x45b/0x5a0
     genl_family_rcv_msg_doit+0xe8/0x140
    
    Fixes: ee75f1fc44dd ("net/mlx5e: Create separate devlink instance for ethernet auxiliary device")
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Link: https://patch.msgid.link/20260108212657.25090-3-saeed@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 4ef8512e1427 ("net/mlx5e: Pass netdev to mlx5e_destroy_netdev instead of priv")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Fix crash on profile change rollback failure [+ + +]
Author: Saeed Mahameed <saeedm@nvidia.com>
Date:   Thu Jan 8 13:26:54 2026 -0800

    net/mlx5e: Fix crash on profile change rollback failure
    
    [ Upstream commit 4dadc4077e3f77d6d31e199a925fc7a705e7adeb ]
    
    mlx5e_netdev_change_profile can fail to attach a new profile and can
    fail to rollback to old profile, in such case, we could end up with a
    dangling netdev with a fully reset netdev_priv. A retry to change
    profile, e.g. another attempt to call mlx5e_netdev_change_profile via
    switchdev mode change, will crash trying to access the now NULL
    priv->mdev.
    
    This fix allows mlx5e_netdev_change_profile() to handle previous
    failures and an empty priv, by not assuming priv is valid.
    
    Pass netdev and mdev to all flows requiring
    mlx5e_netdev_change_profile() and avoid passing priv.
    In mlx5e_netdev_change_profile() check if current priv is valid, and if
    not, just attach the new profile without trying to access the old one.
    
    This fixes the following oops, when enabling switchdev mode for the 2nd
    time after first time failure:
    
     ## Enabling switchdev mode first time:
    
    mlx5_core 0012:03:00.1: E-Switch: Supported tc chains and prios offload
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
                                                                             ^^^^^^^^
    mlx5_core 0000:00:03.0: E-Switch: Disable: mode(LEGACY), nvfs(0), necvfs(0), active vports(0)
    
     ## retry: Enabling switchdev mode 2nd time:
    
    mlx5_core 0000:00:03.0: E-Switch: Supported tc chains and prios offload
    BUG: kernel NULL pointer dereference, address: 0000000000000038
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 13 UID: 0 PID: 520 Comm: devlink Not tainted 6.18.0-rc4+ #91 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_detach_netdev+0x3c/0x90
    Code: 50 00 00 f0 80 4f 78 02 48 8b bf e8 07 00 00 48 85 ff 74 16 48 8b 73 78 48 d1 ee 83 e6 01 83 f6 01 40 0f b6 f6 e8 c4 42 00 00 <48> 8b 45 38 48 85 c0 74 08 48 89 df e8 cc 47 40 1e 48 8b bb f0 07
    RSP: 0018:ffffc90000673890 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffff8881036a89c0 RCX: 0000000000000000
    RDX: ffff888113f63800 RSI: ffffffff822fe720 RDI: 0000000000000000
    RBP: 0000000000000000 R08: 0000000000002dcd R09: 0000000000000000
    R10: ffffc900006738e8 R11: 00000000ffffffff R12: 0000000000000000
    R13: 0000000000000000 R14: ffff8881036a89c0 R15: 0000000000000000
    FS:  00007fdfb8384740(0000) GS:ffff88856a9d6000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000038 CR3: 0000000112ae0005 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     mlx5e_netdev_change_profile+0x45/0xb0
     mlx5e_vport_rep_load+0x27b/0x2d0
     mlx5_esw_offloads_rep_load+0x72/0xf0
     esw_offloads_enable+0x5d0/0x970
     mlx5_eswitch_enable_locked+0x349/0x430
     ? is_mp_supported+0x57/0xb0
     mlx5_devlink_eswitch_mode_set+0x26b/0x430
     devlink_nl_eswitch_set_doit+0x6f/0xf0
     genl_family_rcv_msg_doit+0xe8/0x140
     genl_rcv_msg+0x18b/0x290
     ? __pfx_devlink_nl_pre_doit+0x10/0x10
     ? __pfx_devlink_nl_eswitch_set_doit+0x10/0x10
     ? __pfx_devlink_nl_post_doit+0x10/0x10
     ? __pfx_genl_rcv_msg+0x10/0x10
     netlink_rcv_skb+0x52/0x100
     genl_rcv+0x28/0x40
     netlink_unicast+0x282/0x3e0
     ? __alloc_skb+0xd6/0x190
     netlink_sendmsg+0x1f7/0x430
     __sys_sendto+0x213/0x220
     ? __sys_recvmsg+0x6a/0xd0
     __x64_sys_sendto+0x24/0x30
     do_syscall_64+0x50/0x1f0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7fdfb8495047
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260108212657.25090-2-saeed@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Pass netdev to mlx5e_destroy_netdev instead of priv [+ + +]
Author: Saeed Mahameed <saeedm@nvidia.com>
Date:   Thu Jan 8 13:26:56 2026 -0800

    net/mlx5e: Pass netdev to mlx5e_destroy_netdev instead of priv
    
    [ Upstream commit 4ef8512e1427111f7ba92b4a847d181ff0aeec42 ]
    
    mlx5e_priv is an unstable structure that can be memset(0) if profile
    attaching fails.
    
    Pass netdev to mlx5e_destroy_netdev() to guarantee it will work on a
    valid netdev.
    
    On mlx5e_remove: Check validity of priv->profile, before attempting
    to cleanup any resources that might be not there.
    
    This fixes a kernel oops in mlx5e_remove when switchdev mode fails due
    to change profile failure.
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
    Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg:
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
    
    $ devlink dev reload pci/0000:00:03.0 ==> oops
    
    BUG: kernel NULL pointer dereference, address: 0000000000000370
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 15 UID: 0 PID: 520 Comm: devlink Not tainted 6.18.0-rc5+ #115 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_dcbnl_dscp_app+0x23/0x100
    RSP: 0018:ffffc9000083f8b8 EFLAGS: 00010286
    RAX: ffff8881126fc380 RBX: ffff8881015ac400 RCX: ffffffff826ffc45
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff8881035109c0
    RBP: ffff8881035109c0 R08: ffff888101e3e838 R09: ffff888100264e10
    R10: ffffc9000083f898 R11: ffffc9000083f8a0 R12: ffff888101b921a0
    R13: ffff888101b921a0 R14: ffff8881015ac9a0 R15: ffff8881015ac400
    FS:  00007f789a3c8740(0000) GS:ffff88856aa59000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000370 CR3: 000000010b6c0001 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     mlx5e_remove+0x57/0x110
     device_release_driver_internal+0x19c/0x200
     bus_remove_device+0xc6/0x130
     device_del+0x160/0x3d0
     ? devl_param_driverinit_value_get+0x2d/0x90
     mlx5_detach_device+0x89/0xe0
     mlx5_unload_one_devl_locked+0x3a/0x70
     mlx5_devlink_reload_down+0xc8/0x220
     devlink_reload+0x7d/0x260
     devlink_nl_reload_doit+0x45b/0x5a0
     genl_family_rcv_msg_doit+0xe8/0x140
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Reviewed-by: Shay Drori <shayd@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260108212657.25090-4-saeed@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Restore destroying state bit after profile cleanup [+ + +]
Author: Saeed Mahameed <saeedm@nvidia.com>
Date:   Thu Jan 8 13:26:57 2026 -0800

    net/mlx5e: Restore destroying state bit after profile cleanup
    
    [ Upstream commit 5629f8859dca7ef74d7314b60de6a957f23166c0 ]
    
    Profile rollback can fail in mlx5e_netdev_change_profile() and we will
    end up with invalid mlx5e_priv memset to 0, we must maintain the
    'destroying' bit in order to gracefully shutdown even if the
    profile/priv are not valid.
    
    This patch maintains the previous state of the 'destroying' state of
    mlx5e_priv after priv cleanup, to allow the remove flow to cleanup
    common resources from mlx5_core to avoid FW fatal errors as seen below:
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
        Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg: mlx5_core 0000:00:03.0 enp0s3np0: failed to rollback to orig profile, ...
    
    $ devlink dev reload pci/0000:00:03.0
    
    mlx5_core 0000:00:03.0: E-Switch: Disable: mode(LEGACY), nvfs(0), necvfs(0), active vports(0)
    mlx5_core 0000:00:03.0: poll_health:803:(pid 519): Fatal error 3 detected
    mlx5_core 0000:00:03.0: firmware version: 28.41.1000
    mlx5_core 0000:00:03.0: 0.000 Gb/s available PCIe bandwidth (Unknown x255 link)
    mlx5_core 0000:00:03.0: mlx5_function_enable:1200:(pid 519): enable hca failed
    mlx5_core 0000:00:03.0: mlx5_function_enable:1200:(pid 519): enable hca failed
    mlx5_core 0000:00:03.0: mlx5_health_try_recover:340:(pid 141): handling bad device here
    mlx5_core 0000:00:03.0: mlx5_handle_bad_state:285:(pid 141): Expected to see disabled NIC but it is full driver
    mlx5_core 0000:00:03.0: mlx5_error_sw_reset:236:(pid 141): start
    mlx5_core 0000:00:03.0: NIC IFC still 0 after 4000ms.
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260108212657.25090-5-saeed@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: sch_qfq: do not free existing class in qfq_change_class() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Jan 12 17:56:56 2026 +0000

    net/sched: sch_qfq: do not free existing class in qfq_change_class()
    
    [ Upstream commit 3879cffd9d07aa0377c4b8835c4f64b4fb24ac78 ]
    
    Fixes qfq_change_class() error case.
    
    cl->qdisc and cl should only be freed if a new class and qdisc
    were allocated, or we risk various UAF.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Reported-by: syzbot+07f3f38f723c335f106d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6965351d.050a0220.eaf7.00c5.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260112175656.17605-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: bridge: annotate data-races around fdb->{updated,used} [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 8 09:38:06 2026 +0000

    net: bridge: annotate data-races around fdb->{updated,used}
    
    [ Upstream commit b25a0b4a2193407aa72a4cd1df66a7ed07dd4f1e ]
    
    fdb->updated and fdb->used are read and written locklessly.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Fixes: 31cbc39b6344 ("net: bridge: add option to allow activity notifications for any fdb entries")
    Reported-by: syzbot+bfab43087ad57222ce96@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/695e3d74.050a0220.1c677c.035f.GAE@google.com/
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260108093806.834459-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Wed Jan 14 00:28:47 2026 +0900

    net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts
    
    commit 1809c82aa073a11b7d335ae932d81ce51a588a4a upstream.
    
    Since j1939_session_deactivate_activate_next() in j1939_tp_rxtimer() is
    called only when the timer is enabled, we need to call
    j1939_session_deactivate_activate_next() if we cancelled the timer.
    Otherwise, refcount for j1939_session leaks, which will later appear as
    
    | unregister_netdevice: waiting for vcan0 to become free. Usage count = 2.
    
    problem.
    
    Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Tested-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://patch.msgid.link/b1212653-8fa1-44e1-be9d-12f950fb3a07@I-love.SAKURA.ne.jp
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: hv_netvsc: reject RSS hash key programming without RX indirection table [+ + +]
Author: Aditya Garg <gargaditya@linux.microsoft.com>
Date:   Mon Jan 12 02:01:33 2026 -0800

    net: hv_netvsc: reject RSS hash key programming without RX indirection table
    
    [ Upstream commit d23564955811da493f34412d7de60fa268c8cb50 ]
    
    RSS configuration requires a valid RX indirection table. When the device
    reports a single receive queue, rndis_filter_device_add() does not
    allocate an indirection table, accepting RSS hash key updates in this
    state leads to a hang.
    
    Fix this by gating netvsc_set_rxfh() on ndc->rx_table_sz and return
    -EOPNOTSUPP when the table is absent. This aligns set_rxfh with the device
    capabilities and prevents incorrect behavior.
    
    Fixes: 962f3fee83a4 ("netvsc: add ethtool ops to get/set RSS key")
    Signed-off-by: Aditya Garg <gargaditya@linux.microsoft.com>
    Reviewed-by: Dipayaan Roy <dipayanroy@linux.microsoft.com>
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Link: https://patch.msgid.link/1768212093-1594-1-git-send-email-gargaditya@linux.microsoft.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: octeon_ep_vf: fix free_irq dev_id mismatch in IRQ rollback [+ + +]
Author: Kery Qi <qikeyu2017@gmail.com>
Date:   Fri Jan 9 00:42:57 2026 +0800

    net: octeon_ep_vf: fix free_irq dev_id mismatch in IRQ rollback
    
    [ Upstream commit f93fc5d12d69012788f82151bee55fce937e1432 ]
    
    octep_vf_request_irqs() requests MSI-X queue IRQs with dev_id set to
    ioq_vector. If request_irq() fails part-way, the rollback loop calls
    free_irq() with dev_id set to 'oct', which does not match the original
    dev_id and may leave the irqaction registered.
    
    This can keep IRQ handlers alive while ioq_vector is later freed during
    unwind/teardown, leading to a use-after-free or crash when an interrupt
    fires.
    
    Fix the error path to free IRQs with the same ioq_vector dev_id used
    during request_irq().
    
    Fixes: 1cd3b407977c ("octeon_ep_vf: add Tx/Rx processing and interrupt support")
    Signed-off-by: Kery Qi <qikeyu2017@gmail.com>
    Link: https://patch.msgid.link/20260108164256.1749-2-qikeyu2017@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: update netdev_lock_{type,name} [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 8 09:32:44 2026 +0000

    net: update netdev_lock_{type,name}
    
    [ Upstream commit eb74c19fe10872ee1f29a8f90ca5ce943921afe9 ]
    
    Add missing entries in netdev_lock_type[] and netdev_lock_name[] :
    
    CAN, MCTP, RAWIP, CAIF, IP6GRE, 6LOWPAN, NETLINK, VSOCKMON,
    IEEE802154_MONITOR.
    
    Also add a WARN_ONCE() in netdev_lock_pos() to help future bug hunting
    next time a protocol is added without updating these arrays.
    
    Fixes: 1a33e10e4a95 ("net: partially revert dynamic lockdep key changes")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260108093244.830280-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS: Fix a deadlock involving nfs_release_folio() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Wed Dec 31 11:42:31 2025 -0500

    NFS: Fix a deadlock involving nfs_release_folio()
    
    [ Upstream commit cce0be6eb4971456b703aaeafd571650d314bcca ]
    
    Wang Zhaolong reports a deadlock involving NFSv4.1 state recovery
    waiting on kthreadd, which is attempting to reclaim memory by calling
    nfs_release_folio(). The latter cannot make progress due to state
    recovery being needed.
    
    It seems that the only safe thing to do here is to kick off a writeback
    of the folio, without waiting for completion, or else kicking off an
    asynchronous commit.
    
    Reported-by: Wang Zhaolong <wangzhaolong@huaweicloud.com>
    Fixes: 96780ca55e3c ("NFS: fix up nfs_release_folio() to try to release the page")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
null_blk: fix kmemleak by releasing references to fault configfs items [+ + +]
Author: Nilay Shroff <nilay@linux.ibm.com>
Date:   Tue Jan 13 12:27:22 2026 +0530

    null_blk: fix kmemleak by releasing references to fault configfs items
    
    commit 40b94ec7edbbb867c4e26a1a43d2b898f04b93c5 upstream.
    
    When CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION is enabled, the null-blk
    driver sets up fault injection support by creating the timeout_inject,
    requeue_inject, and init_hctx_fault_inject configfs items as children
    of the top-level nullbX configfs group.
    
    However, when the nullbX device is removed, the references taken to
    these fault-config configfs items are not released. As a result,
    kmemleak reports a memory leak, for example:
    
    unreferenced object 0xc00000021ff25c40 (size 32):
      comm "mkdir", pid 10665, jiffies 4322121578
      hex dump (first 32 bytes):
        69 6e 69 74 5f 68 63 74 78 5f 66 61 75 6c 74 5f  init_hctx_fault_
        69 6e 6a 65 63 74 00 88 00 00 00 00 00 00 00 00  inject..........
      backtrace (crc 1a018c86):
        __kmalloc_node_track_caller_noprof+0x494/0xbd8
        kvasprintf+0x74/0xf4
        config_item_set_name+0xf0/0x104
        config_group_init_type_name+0x48/0xfc
        fault_config_init+0x48/0xf0
        0xc0080000180559e4
        configfs_mkdir+0x304/0x814
        vfs_mkdir+0x49c/0x604
        do_mkdirat+0x314/0x3d0
        sys_mkdir+0xa0/0xd8
        system_call_exception+0x1b0/0x4f0
        system_call_vectored_common+0x15c/0x2ec
    
    Fix this by explicitly releasing the references to the fault-config
    configfs items when dropping the reference to the top-level nullbX
    configfs group.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Fixes: bb4c19e030f4 ("block: null_blk: make fault-injection dynamically configurable per device")
    Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-pci: disable secondary temp for Wodposit WPBSNM8 [+ + +]
Author: Ilikara Zheng <ilikara@aosc.io>
Date:   Mon Dec 8 21:23:40 2025 +0800

    nvme-pci: disable secondary temp for Wodposit WPBSNM8
    
    commit 340f4fc5508c2905a1f30de229e2a4b299d55735 upstream.
    
    Secondary temperature thresholds (temp2_{min,max}) were not reported
    properly on this NVMe SSD. This resulted in an error while attempting to
    read these values with sensors(1):
    
      ERROR: Can't get value of subfeature temp2_min: I/O error
      ERROR: Can't get value of subfeature temp2_max: I/O error
    
    Add the device to the nvme_id_table with the
    NVME_QUIRK_NO_SECONDARY_TEMP_THRESH flag to suppress access to all non-
    composite temperature thresholds.
    
    Cc: stable@vger.kernel.org
    Tested-by: Wu Haotian <rigoligo03@gmail.com>
    Signed-off-by: Ilikara Zheng <ilikara@aosc.io>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec [+ + +]
Author: Shivam Kumar <kumar.shivam43666@gmail.com>
Date:   Sat Dec 13 13:57:48 2025 -0500

    nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec
    
    [ Upstream commit 32b63acd78f577b332d976aa06b56e70d054cbba ]
    
    Commit efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    added ttag bounds checking and data_offset
    validation in nvmet_tcp_handle_h2c_data_pdu(), but it did not validate
    whether the command's data structures (cmd->req.sg and cmd->iov) have
    been properly initialized before processing H2C_DATA PDUs.
    
    The nvmet_tcp_build_pdu_iovec() function dereferences these pointers
    without NULL checks. This can be triggered by sending H2C_DATA PDU
    immediately after the ICREQ/ICRESP handshake, before
    sending a CONNECT command or NVMe write command.
    
    Attack vectors that trigger NULL pointer dereferences:
    1. H2C_DATA PDU sent before CONNECT → both pointers NULL
    2. H2C_DATA PDU for READ command → cmd->req.sg allocated, cmd->iov NULL
    3. H2C_DATA PDU for uninitialized command slot → both pointers NULL
    
    The fix validates both cmd->req.sg and cmd->iov before calling
    nvmet_tcp_build_pdu_iovec(). Both checks are required because:
    - Uninitialized commands: both NULL
    - READ commands: cmd->req.sg allocated, cmd->iov NULL
    - WRITE commands: both allocated
    
    Fixes: efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Shivam Kumar <kumar.shivam43666@gmail.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: fix PCIe subsystem reset controller state transition [+ + +]
Author: Nilay Shroff <nilay@linux.ibm.com>
Date:   Wed Jan 14 12:54:13 2026 +0530

    nvme: fix PCIe subsystem reset controller state transition
    
    commit 0edb475ac0a7d153318a24d4dca175a270a5cc4f upstream.
    
    The commit d2fe192348f9 (“nvme: only allow entering LIVE from CONNECTING
    state”) disallows controller state transitions directly from RESETTING
    to LIVE. However, the NVMe PCIe subsystem reset path relies on this
    transition to recover the controller on PowerPC (PPC) systems.
    
    On PPC systems, issuing a subsystem reset causes a temporary loss of
    communication with the NVMe adapter. A subsequent PCIe MMIO read then
    triggers EEH recovery, which restores the PCIe link and brings the
    controller back online. For EEH recovery to proceed correctly, the
    controller must transition back to the LIVE state.
    
    Due to the changes introduced by commit d2fe192348f9 (“nvme: only allow
    entering LIVE from CONNECTING state”), the controller can no longer
    transition directly from RESETTING to LIVE. As a result, EEH recovery
    exits prematurely, leaving the controller stuck in the RESETTING state.
    
    Fix this by explicitly transitioning the controller state from RESETTING
    to CONNECTING and then to LIVE. This satisfies the updated state
    transition rules and allows the controller to be successfully recovered
    on PPC systems following a PCIe subsystem reset.
    
    Cc: stable@vger.kernel.org
    Fixes: d2fe192348f9 ("nvme: only allow entering LIVE from CONNECTING state")
    Reviewed-by: Daniel Wagner <dwagner@suse.de>
    Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again) [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Date:   Wed Dec 24 12:55:34 2025 +0100

    phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again)
    
    [ Upstream commit fb21116099bbea1fc59efa9207e63c4be390ab72 ]
    
    "family" is an enum, thus cast of pointer on 64-bit compile test with
    clang W=1 causes:
    
      phy-bcm-ns-usb3.c:206:17: error: cast to smaller integer type 'enum bcm_ns_family' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast]
    
    This was already fixed in commit bd6e74a2f0a0 ("phy: broadcom: ns-usb3:
    fix Wvoid-pointer-to-enum-cast warning") but then got bad in commit
    21bf6fc47a1e ("phy: Use device_get_match_data()").
    
    Note that after various discussions the preferred cast is via "unsigned
    long", not "uintptr_t".
    
    Fixes: 21bf6fc47a1e ("phy: Use device_get_match_data()")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251224115533.154162-2-krzysztof.kozlowski@oss.qualcomm.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: drop probe registration printks [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Fri May 23 10:51:12 2025 +0200

    phy: drop probe registration printks
    
    [ Upstream commit 95463cbb4fe6489921fb8c72890113dca54ce83f ]
    
    Drivers should generally be quiet on successful probe, but this is not
    followed by some PHY drivers, for example:
    
            snps-eusb2-hsphy 88e1000.phy: Registered Snps-eUSB2 phy
            qcom-eusb2-repeater c432000.spmi:pmic@7:phy@fd00: Registered Qcom-eUSB2 repeater
            qcom-eusb2-repeater c432000.spmi:pmic@a:phy@fd00: Registered Qcom-eUSB2 repeater
            qcom-eusb2-repeater c432000.spmi:pmic@b:phy@fd00: Registered Qcom-eUSB2 repeater
            snps-eusb2-hsphy fd3000.phy: Registered Snps-eUSB2 phy
            snps-eusb2-hsphy fd9000.phy: Registered Snps-eUSB2 phy
            snps-eusb2-hsphy fde000.phy: Registered Snps-eUSB2 phy
            snps-eusb2-hsphy 88e0000.phy: Registered Snps-eUSB2 phy
            snps-eusb2-hsphy 88e2000.phy: Registered Snps-eUSB2 phy
    
    Drop (or demote to debug level) unnecessary registration info messages
    to make boot logs a little less noisy.
    
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Link: https://lore.kernel.org/r/20250523085112.11287-1-johan+linaro@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Stable-dep-of: 1ca52c0983c3 ("phy: qcom-qusb2: Fix NULL pointer dereference on early suspend")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: freescale: imx8m-pcie: assert phy reset during power on [+ + +]
Author: Rafael Beims <rafael.beims@toradex.com>
Date:   Tue Dec 23 12:02:54 2025 -0300

    phy: freescale: imx8m-pcie: assert phy reset during power on
    
    commit f2ec4723defbc66a50e0abafa830ae9f8bceb0d7 upstream.
    
    After U-Boot initializes PCIe with "pcie enum", Linux fails to detect
    an NVMe disk on some boot cycles with:
    
      phy phy-32f00000.pcie-phy.0: phy poweron failed --> -110
    
    Discussion with NXP identified that the iMX8MP PCIe PHY PLL may fail to
    lock when re-initialized without a reset cycle [1].
    
    The issue reproduces on 7% of tested hardware platforms, with a 30-40%
    failure rate per affected device across boot cycles.
    
    Insert a reset cycle in the power-on routine to ensure the PHY is
    initialized from a known state.
    
    [1] https://community.nxp.com/t5/i-MX-Processors/iMX8MP-PCIe-initialization-in-U-Boot/m-p/2248437#M242401
    
    Signed-off-by: Rafael Beims <rafael.beims@toradex.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251223150254.1075221-1-rafael@beims.me
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: fsl-imx8mq-usb: Clear the PCS_TX_SWING_FULL field before using it [+ + +]
Author: Stefano Radaelli <stefano.radaelli21@gmail.com>
Date:   Fri Dec 19 17:09:12 2025 +0100

    phy: fsl-imx8mq-usb: Clear the PCS_TX_SWING_FULL field before using it
    
    [ Upstream commit 8becf9179a4b45104a1701010ed666b55bf4b3a6 ]
    
    Clear the PCS_TX_SWING_FULL field mask before setting the new value
    in PHY_CTRL5 register. Without clearing the mask first, the OR operation
    could leave previously set bits, resulting in incorrect register
    configuration.
    
    Fixes: 63c85ad0cd81 ("phy: fsl-imx8mp-usb: add support for phy tuning")
    Suggested-by: Leonid Segal <leonids@variscite.com>
    Acked-by: Pierluigi Passaro <pierluigi.p@variscite.com>
    Signed-off-by: Stefano Radaelli <stefano.r@variscite.com>
    Reviewed-by: Xu Yang <xu.yang_2@nxp.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
    Link: https://patch.msgid.link/20251219160912.561431-1-stefano.r@variscite.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: phy-rockchip-inno-usb2: Use dev_err_probe() in the probe path [+ + +]
Author: Dragan Simic <dsimic@manjaro.org>
Date:   Tue Jan 20 20:38:55 2026 -0500

    phy: phy-rockchip-inno-usb2: Use dev_err_probe() in the probe path
    
    [ Upstream commit 40452520850683f6771094ca218ff206d1fcb022 ]
    
    Improve error handling in the probe path by using function dev_err_probe()
    instead of function dev_err(), where appropriate.
    
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://lore.kernel.org/r/d4ccd9fc278fb46ea868406bf77811ee507f0e4e.1725524803.git.dsimic@manjaro.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Stable-dep-of: e07dea3de508 ("phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: phy-snps-eusb2: refactor constructs names [+ + +]
Author: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
Date:   Sun May 4 17:45:21 2025 +0300

    phy: phy-snps-eusb2: refactor constructs names
    
    [ Upstream commit 93dbe9b5b3a265c7e5466c7b6ada439b01577de5 ]
    
    As the driver now resides outside the phy subdirectory under a different
    name, refactor all definitions, structures and functions to explicitly
    specify what code is Qualcomm-specific and what is not.
    
    Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20250504144527.1723980-5-ivo.ivanov.ivanov1@gmail.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Stable-dep-of: 1ca52c0983c3 ("phy: qcom-qusb2: Fix NULL pointer dereference on early suspend")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: qcom-qusb2: Fix NULL pointer dereference on early suspend [+ + +]
Author: Loic Poulain <loic.poulain@oss.qualcomm.com>
Date:   Fri Dec 19 09:56:40 2025 +0100

    phy: qcom-qusb2: Fix NULL pointer dereference on early suspend
    
    [ Upstream commit 1ca52c0983c34fca506921791202ed5bdafd5306 ]
    
    Enabling runtime PM before attaching the QPHY instance as driver data
    can lead to a NULL pointer dereference in runtime PM callbacks that
    expect valid driver data. There is a small window where the suspend
    callback may run after PM runtime enabling and before runtime forbid.
    This causes a sporadic crash during boot:
    
    ```
    Unable to handle kernel NULL pointer dereference at virtual address 00000000000000a1
    [...]
    CPU: 0 UID: 0 PID: 11 Comm: kworker/0:1 Not tainted 6.16.7+ #116 PREEMPT
    Workqueue: pm pm_runtime_work
    pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : qusb2_phy_runtime_suspend+0x14/0x1e0 [phy_qcom_qusb2]
    lr : pm_generic_runtime_suspend+0x2c/0x44
    [...]
    ```
    
    Attach the QPHY instance as driver data before enabling runtime PM to
    prevent NULL pointer dereference in runtime PM callbacks.
    
    Reorder pm_runtime_enable() and pm_runtime_forbid() to prevent a
    short window where an unnecessary runtime suspend can occur.
    
    Use the devres-managed version to ensure PM runtime is symmetrically
    disabled during driver removal for proper cleanup.
    
    Fixes: 891a96f65ac3 ("phy: qcom-qusb2: Add support for runtime PM")
    Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251219085640.114473-1-loic.poulain@oss.qualcomm.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Tue Jan 20 20:38:56 2026 -0500

    phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe()
    
    [ Upstream commit e07dea3de508cd6950c937cec42de7603190e1ca ]
    
    The for_each_available_child_of_node() calls of_node_put() to
    release child_np in each success loop. After breaking from the
    loop with the child_np has been released, the code will jump to
    the put_child label and will call the of_node_put() again if the
    devm_request_threaded_irq() fails. These cause a double free bug.
    
    Fix by returning directly to avoid the duplicate of_node_put().
    
    Fixes: ed2b5a8e6b98 ("phy: phy-rockchip-inno-usb2: support muxed interrupts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patch.msgid.link/20260109154626.2452034-1-vulab@iscas.ac.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: rockchip: inno-usb2: fix communication disruption in gadget mode [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Thu Nov 27 11:26:17 2025 +0100

    phy: rockchip: inno-usb2: fix communication disruption in gadget mode
    
    commit 7d8f725b79e35fa47e42c88716aad8711e1168d8 upstream.
    
    When the OTG USB port is used to power to SoC, configured as peripheral and
    used in gadget mode, communication stops without notice about 6 seconds
    after the gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The related code flow in the PHY driver code can be summarized as:
    
     * the first time chg_detect_work starts (6 seconds after gadget is
       configured and enumerated)
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, false); [Y]
    
     * rockchip_chg_detect_work() changes state and re-triggers itself a few
       times until it reaches the DETECTED state:
       -> rockchip_chg_detect_work():
           if chg_state is DETECTED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, true); [Z]
    
    At [Y] all existing communications stop. E.g. using a CDC serial gadget,
    the /dev/tty* devices are still present on both host and device, but no
    data is transferred anymore. The later call with a 'true' argument at [Z]
    does not restore it.
    
    Due to the lack of documentation, what chg_det.opmode does exactly is not
    clear, however by code inspection it seems reasonable that is disables
    something needed to keep the communication working, and testing proves that
    disabling these lines lets gadget mode keep working. So prevent changes to
    chg_det.opmode when there is a cable connected (VBUS present).
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: stable@vger.kernel.org
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Reviewed-by: Théo Lebrun <theo.lebrun@bootlin.com>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-2-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: rockchip: inno-usb2: fix disconnection in gadget mode [+ + +]
Author: Louis Chauvet <louis.chauvet@bootlin.com>
Date:   Thu Nov 27 11:26:16 2025 +0100

    phy: rockchip: inno-usb2: fix disconnection in gadget mode
    
    commit 028e8ca7b20fb7324f3e5db34ba8bd366d9d3acc upstream.
    
    When the OTG USB port is used to power the SoC, configured as peripheral
    and used in gadget mode, there is a disconnection about 6 seconds after the
    gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The problem happens because of the PHY driver code flow, summarized as:
    
     * UDC start code (triggered via configfs at any time after boot)
       -> phy_init
           -> rockchip_usb2phy_init
               -> schedule_delayed_work(otg_sm_work [A], 6 sec)
       -> phy_power_on
           -> rockchip_usb2phy_power_on
               -> enable clock
               -> rockchip_usb2phy_reset
    
     * Now the gadget interface is up and running.
    
     * 6 seconds later otg_sm_work starts [A]
       -> rockchip_usb2phy_otg_sm_work():
           if (B_IDLE state && VBUS present && ...):
               schedule_delayed_work(&rport->chg_work [B], 0);
    
     * immediately the chg_detect_work starts [B]
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
               if (!rport->suspended):
                   rockchip_usb2phy_power_off() <--- [X]
    
    At [X], the PHY is powered off, causing a disconnection. This quickly
    triggers a new connection and following re-enumeration, but any connection
    that had been established during the 6 seconds is broken.
    
    The code already checks for !rport->suspended (which, somewhat
    counter-intuitively, means the PHY is powered on), so add a guard for VBUS
    as well to avoid a disconnection when a cable is connected.
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: stable@vger.kernel.org
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
    Co-developed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Reviewed-by: Théo Lebrun <theo.lebrun@bootlin.com>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-1-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: stm32-usphyc: Fix off by one in probe() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Tue Dec 9 09:53:36 2025 +0300

    phy: stm32-usphyc: Fix off by one in probe()
    
    [ Upstream commit cabd25b57216ddc132efbcc31f972baa03aad15a ]
    
    The "index" variable is used as an index into the usbphyc->phys[] array
    which has usbphyc->nphys elements.  So if it is equal to usbphyc->nphys
    then it is one element out of bounds.  The "index" comes from the
    device tree so it's data that we trust and it's unlikely to be wrong,
    however it's obviously still worth fixing the bug.  Change the > to >=.
    
    Fixes: 94c358da3a05 ("phy: stm32: add support for STM32 USB PHY Controller (USBPHYC)")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Link: https://patch.msgid.link/aTfHcMJK1wFVnvEe@stanley.mountain
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7 [+ + +]
Author: Wayne Chang <waynec@nvidia.com>
Date:   Fri Dec 12 11:21:16 2025 +0800

    phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7
    
    commit b246caa68037aa495390a60d080acaeb84f45fff upstream.
    
    The USB2 Bias Pad Control register manages analog parameters for signal
    detection. Previously, the HS_DISCON_LEVEL relied on hardware reset
    values, which may lead to the detection failure.
    
    Explicitly configure HS_DISCON_LEVEL to 0x7. This ensures the disconnect
    threshold is sufficient to guarantee reliable detection.
    
    Fixes: bbf711682cd5 ("phy: tegra: xusb: Add Tegra186 support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Wayne Chang <waynec@nvidia.com>
    Link: https://patch.msgid.link/20251212032116.768307-1-waynec@nvidia.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: ti: da8xx-usb: Handle devm_pm_runtime_enable() errors [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Mon Nov 24 18:57:34 2025 +0800

    phy: ti: da8xx-usb: Handle devm_pm_runtime_enable() errors
    
    [ Upstream commit 08aa19de72110df8ac10c9e67349dd884eeed41d ]
    
    devm_pm_runtime_enable() can fail due to memory allocation. The current
    code ignores its return value after calling pm_runtime_set_active(),
    leaving the device in an inconsistent state if runtime PM initialization
    fails.
    
    Check the return value of devm_pm_runtime_enable() and return on
    failure. Also move the declaration of 'ret' to the function scope
    to support this check.
    
    Fixes: ee8e41b5044f ("phy: ti: phy-da8xx-usb: Add runtime PM support")
    Suggested-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patch.msgid.link/20251124105734.1027-1-vulab@iscas.ac.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

phy: ti: gmii-sel: fix regmap leak on probe failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Nov 27 14:48:34 2025 +0100

    phy: ti: gmii-sel: fix regmap leak on probe failure
    
    commit 4914d67da947031d6f645c81c74f7879e0844d5d upstream.
    
    The mmio regmap that may be allocated during probe is never freed.
    
    Switch to using the device managed allocator so that the regmap is
    released on probe failures (e.g. probe deferral) and on driver unbind.
    
    Fixes: 5ab90f40121a ("phy: ti: gmii-sel: Do not use syscon helper to build regmap")
    Cc: stable@vger.kernel.org      # 6.14
    Cc: Andrew Davis <afd@ti.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Andrew Davis <afd@ti.com>
    Link: https://patch.msgid.link/20251127134834.2030-1-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PM: EM: Fix incorrect description of the cost field in struct em_perf_state [+ + +]
Author: Yaxiong Tian <tianyaxiong@kylinos.cn>
Date:   Tue Dec 30 14:15:34 2025 +0800

    PM: EM: Fix incorrect description of the cost field in struct em_perf_state
    
    [ Upstream commit 54b603f2db6b95495bc33a8f2bde80f044baff9a ]
    
    Due to commit 1b600da51073 ("PM: EM: Optimize em_cpu_energy() and remove
    division"), the logic for energy consumption calculation has been modified.
    The actual calculation of cost is 10 * power * max_frequency / frequency
    instead of power * max_frequency / frequency.
    
    Therefore, the comment for cost has been updated to reflect the correct
    content.
    
    Fixes: 1b600da51073 ("PM: EM: Optimize em_cpu_energy() and remove division")
    Signed-off-by: Yaxiong Tian <tianyaxiong@kylinos.cn>
    Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
    [ rjw: Added Fixes: tag ]
    Link: https://patch.msgid.link/20251230061534.816894-1-tianyaxiong@kylinos.cn
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pnfs/blocklayout: Fix memory leak in bl_parse_scsi() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Thu Dec 25 08:45:26 2025 +0000

    pnfs/blocklayout: Fix memory leak in bl_parse_scsi()
    
    [ Upstream commit 5a74af51c3a6f4cd22c128b0c1c019f68fa90011 ]
    
    In bl_parse_scsi(), if the block device length is zero, the function
    returns immediately without releasing the file reference obtained via
    bl_open_path(), leading to a memory leak.
    
    Fix this by jumping to the out_blkdev_put label to ensure the file
    reference is properly released.
    
    Fixes: d76c769c8db4c ("pnfs/blocklayout: Don't add zero-length pnfs_block_dev")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Thu Dec 25 07:41:03 2025 +0000

    pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node()
    
    [ Upstream commit 0c728083654f0066f5e10a1d2b0bd0907af19a58 ]
    
    In nfs4_ff_alloc_deviceid_node(), if the allocation for ds_versions fails,
    the function jumps to the out_scratch label without freeing the already
    allocated dsaddrs list, leading to a memory leak.
    
    Fix this by jumping to the out_err_drain_dsaddrs label, which properly
    frees the dsaddrs list before cleaning up other resources.
    
    Fixes: d67ae825a59d6 ("pnfs/flexfiles: Add the FlexFile Layout Driver")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pNFS: Fix a deadlock when returning a delegation during open() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Dec 8 14:45:00 2025 -0500

    pNFS: Fix a deadlock when returning a delegation during open()
    
    [ Upstream commit 857bf9056291a16785ae3be1d291026b2437fc48 ]
    
    Ben Coddington reports seeing a hang in the following stack trace:
      0 [ffffd0b50e1774e0] __schedule at ffffffff9ca05415
      1 [ffffd0b50e177548] schedule at ffffffff9ca05717
      2 [ffffd0b50e177558] bit_wait at ffffffff9ca061e1
      3 [ffffd0b50e177568] __wait_on_bit at ffffffff9ca05cfb
      4 [ffffd0b50e1775c8] out_of_line_wait_on_bit at ffffffff9ca05ea5
      5 [ffffd0b50e177618] pnfs_roc at ffffffffc154207b [nfsv4]
      6 [ffffd0b50e1776b8] _nfs4_proc_delegreturn at ffffffffc1506586 [nfsv4]
      7 [ffffd0b50e177788] nfs4_proc_delegreturn at ffffffffc1507480 [nfsv4]
      8 [ffffd0b50e1777f8] nfs_do_return_delegation at ffffffffc1523e41 [nfsv4]
      9 [ffffd0b50e177838] nfs_inode_set_delegation at ffffffffc1524a75 [nfsv4]
     10 [ffffd0b50e177888] nfs4_process_delegation at ffffffffc14f41dd [nfsv4]
     11 [ffffd0b50e1778a0] _nfs4_opendata_to_nfs4_state at ffffffffc1503edf [nfsv4]
     12 [ffffd0b50e1778c0] _nfs4_open_and_get_state at ffffffffc1504e56 [nfsv4]
     13 [ffffd0b50e177978] _nfs4_do_open at ffffffffc15051b8 [nfsv4]
     14 [ffffd0b50e1779f8] nfs4_do_open at ffffffffc150559c [nfsv4]
     15 [ffffd0b50e177a80] nfs4_atomic_open at ffffffffc15057fb [nfsv4]
     16 [ffffd0b50e177ad0] nfs4_file_open at ffffffffc15219be [nfsv4]
     17 [ffffd0b50e177b78] do_dentry_open at ffffffff9c09e6ea
     18 [ffffd0b50e177ba8] vfs_open at ffffffff9c0a082e
     19 [ffffd0b50e177bd0] dentry_open at ffffffff9c0a0935
    
    The issue is that the delegreturn is being asked to wait for a layout
    return that cannot complete because a state recovery was initiated. The
    state recovery cannot complete until the open() finishes processing the
    delegations it was given.
    
    The solution is to propagate the existing flags that indicate a
    non-blocking call to the function pnfs_roc(), so that it knows not to
    wait in this situation.
    
    Reported-by: Benjamin Coddington <bcodding@hammerspace.com>
    Fixes: 29ade5db1293 ("pNFS: Wait on outstanding layoutreturns to complete in pnfs_roc()")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "gfs2: Fix use of bio_chain" [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Jan 12 11:47:35 2026 +0100

    Revert "gfs2: Fix use of bio_chain"
    
    commit 469d71512d135907bf5ea0972dfab8c420f57848 upstream.
    
    This reverts commit 8a157e0a0aa5143b5d94201508c0ca1bb8cfb941.
    
    That commit incorrectly assumed that the bio_chain() arguments were
    swapped in gfs2.  However, gfs2 intentionally constructs bio chains so
    that the first bio's bi_end_io callback is invoked when all bios in the
    chain have completed, unlike bio chains where the last bio's callback is
    invoked.
    
    Fixes: 8a157e0a0aa5 ("gfs2: Fix use of bio_chain")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: core: Fix error handler encryption support [+ + +]
Author: Brian Kao <powenkao@google.com>
Date:   Thu Dec 18 03:17:23 2025 +0000

    scsi: core: Fix error handler encryption support
    
    commit 9a49157deeb23581fc5c8189b486340d7343264a upstream.
    
    Some low-level drivers (LLD) access block layer crypto fields, such as
    rq->crypt_keyslot and rq->crypt_ctx within `struct request`, to
    configure hardware for inline encryption.  However, SCSI Error Handling
    (EH) commands (e.g., TEST UNIT READY, START STOP UNIT) should not
    involve any encryption setup.
    
    To prevent drivers from erroneously applying crypto settings during EH,
    this patch saves the original values of rq->crypt_keyslot and
    rq->crypt_ctx before an EH command is prepared via scsi_eh_prep_cmnd().
    These fields in the 'struct request' are then set to NULL.  The original
    values are restored in scsi_eh_restore_cmnd() after the EH command
    completes.
    
    This ensures that the block layer crypto context does not leak into EH
    command execution.
    
    Signed-off-by: Brian Kao <powenkao@google.com>
    Link: https://patch.msgid.link/20251218031726.2642834-1-powenkao@google.com
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/bpf: Test invalid narrower ctx load [+ + +]
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date:   Tue Jul 22 16:33:37 2025 +0200

    selftests/bpf: Test invalid narrower ctx load
    
    commit ba578b87fe2beef95b37264f8a98c0b505b93de9 upstream.
    
    This patch adds selftests to cover invalid narrower loads on the
    context. These used to cause kernel warnings before the previous patch.
    To trigger the warning, the load had to be aligned, to read an affected
    context field (ex., skb->sk), and not starting at the beginning of the
    field.
    
    The nine new cases all fail without the previous patch.
    
    Suggested-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://patch.msgid.link/44cd83ea9c6868079943f0a436c6efa850528cc1.1753194596.git.paul.chaignon@gmail.com
    Signed-off-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/landlock: Fix TCP bind(AF_UNSPEC) test case [+ + +]
Author: Matthieu Buffet <matthieu@buffet.re>
Date:   Mon Oct 27 20:07:24 2025 +0100

    selftests/landlock: Fix TCP bind(AF_UNSPEC) test case
    
    [ Upstream commit bd09d9a05cf04028f639e209b416bacaeffd4909 ]
    
    The nominal error code for bind(AF_UNSPEC) on an IPv6 socket
    is -EAFNOSUPPORT, not -EINVAL. -EINVAL is only returned when
    the supplied address struct is too short, which happens to be
    the case in current selftests because they treat AF_UNSPEC
    like IPv4 sockets do: as an alias for AF_INET (which is a
    16-byte struct instead of the 24 bytes required by IPv6
    sockets).
    
    Make the union large enough for any address (by adding struct
    sockaddr_storage to the union), and make AF_UNSPEC addresses
    large enough for any family.
    
    Test for -EAFNOSUPPORT instead, and add a dedicated test case
    for truncated inputs with -EINVAL.
    
    Fixes: a549d055a22e ("selftests/landlock: Add network tests")
    Signed-off-by: Matthieu Buffet <matthieu@buffet.re>
    Link: https://lore.kernel.org/r/20251027190726.626244-2-matthieu@buffet.re
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/landlock: Properly close a file descriptor [+ + +]
Author: Günther Noack <gnoack3000@gmail.com>
Date:   Thu Jan 1 14:40:58 2026 +0100

    selftests/landlock: Properly close a file descriptor
    
    [ Upstream commit 15e8d739fda1084d81f7d3813e9600eba6e0f134 ]
    
    Add a missing close(srv_fd) call, and use EXPECT_EQ() to check the
    result.
    
    Signed-off-by: Günther Noack <gnoack3000@gmail.com>
    Fixes: f83d51a5bdfe ("selftests/landlock: Check IOCTL restrictions for named UNIX domain sockets")
    Link: https://lore.kernel.org/r/20260101134102.25938-2-gnoack3000@gmail.com
    [mic: Use EXPECT_EQ() and update commit message]
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/landlock: Remove invalid unix socket bind() [+ + +]
Author: Matthieu Buffet <matthieu@buffet.re>
Date:   Mon Dec 1 01:36:31 2025 +0100

    selftests/landlock: Remove invalid unix socket bind()
    
    [ Upstream commit e1a57c33590a50a6639798e60a597af4a23b0340 ]
    
    Remove bind() call on a client socket that doesn't make sense.
    Since strlen(cli_un.sun_path) returns a random value depending on stack
    garbage, that many uninitialized bytes are read from the stack as an
    unix socket address. This creates random test failures due to the bind
    address being invalid or already in use if the same stack value comes up
    twice.
    
    Fixes: f83d51a5bdfe ("selftests/landlock: Check IOCTL restrictions for named UNIX domain sockets")
    Signed-off-by: Matthieu Buffet <matthieu@buffet.re>
    Reviewed-by: Günther Noack <gnoack@google.com>
    Link: https://lore.kernel.org/r/20251201003631.190817-1-matthieu@buffet.re
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: drv-net: fix RPS mask handling for high CPU numbers [+ + +]
Author: Gal Pressman <gal@nvidia.com>
Date:   Mon Jan 12 19:37:15 2026 +0200

    selftests: drv-net: fix RPS mask handling for high CPU numbers
    
    [ Upstream commit cf055f8c000445aa688c53a706ef4f580818eedb ]
    
    The RPS bitmask bounds check uses ~(RPS_MAX_CPUS - 1) which equals ~15 =
    0xfff0, only allowing CPUs 0-3.
    
    Change the mask to ~((1UL << RPS_MAX_CPUS) - 1) = ~0xffff to allow CPUs
    0-15.
    
    Fixes: 5ebfb4cc3048 ("selftests/net: toeplitz test")
    Reviewed-by: Nimrod Oren <noren@nvidia.com>
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260112173715.384843-3-gal@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcpm: allow looking for role_sw device in the main node [+ + +]
Author: Arnaud Ferraris <arnaud.ferraris@collabora.com>
Date:   Mon Jan 5 09:43:23 2026 +0100

    tcpm: allow looking for role_sw device in the main node
    
    commit 1366cd228b0c67b60a2c0c26ef37fe9f7cfedb7f upstream.
    
    If ports are defined in the tcpc main node, fwnode_usb_role_switch_get()
    returns an error, meaning usb_role_switch_get() (which would succeed)
    never gets a chance to run as port->role_sw isn't NULL, causing a
    regression on devices where this is the case.
    
    Fix this by turning the NULL check into IS_ERR_OR_NULL(), so
    usb_role_switch_get() can actually run and the device get properly probed.
    
    Fixes: 2d8713f807a4 ("tcpm: switch check for role_sw device with fw_node")
    Cc: stable <stable@kernel.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Dragan Simic <dsimic@manjaro.org>
    Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
    Link: https://patch.msgid.link/20260105-fix-ppp-power-v2-1-6924f5a41224@collabora.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
textsearch: describe @list member in ts_ops search [+ + +]
Author: Bagas Sanjaya <bagasdotme@gmail.com>
Date:   Fri Dec 19 08:40:05 2025 +0700

    textsearch: describe @list member in ts_ops search
    
    [ Upstream commit f26528478bb102c28e7ac0cbfc8ec8185afdafc7 ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/textsearch.h:49 struct member 'list' not described in 'ts_ops'
    
    Describe @list member to fix it.
    
    Link: https://lkml.kernel.org/r/20251219014006.16328-4-bagasdotme@gmail.com
    Fixes: 2de4ff7bd658 ("[LIB]: Textsearch infrastructure.")
    Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Cc: Thomas Graf <tgraf@suug.ch>
    Cc: "David S. Miller" <davem@davemloft.net>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor [+ + +]
Author: Johannes Brüderl <johannes.bruederl@gmail.com>
Date:   Sun Dec 7 10:02:20 2025 +0100

    usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
    
    commit 2740ac33c87b3d0dfa022efd6ba04c6261b1abbd upstream.
    
    Add USB_QUIRK_NO_BOS quirk flag to skip requesting the BOS descriptor
    for devices that cannot handle it.
    
    Add Elgato 4K X (0fd9:009b) to the quirk table. This device hangs when
    the BOS descriptor is requested at SuperSpeed Plus (10Gbps).
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220027
    Cc: stable <stable@kernel.org>
    Signed-off-by: Johannes Brüderl <johannes.bruederl@gmail.com>
    Link: https://patch.msgid.link/20251207090220.14807-1-johannes.bruederl@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: Check for USB4 IP_NAME [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Fri Jan 2 21:53:46 2026 +0000

    usb: dwc3: Check for USB4 IP_NAME
    
    commit 0ed91d47959cb7573c17e06487f0fb891d59dfb3 upstream.
    
    Synopsys renamed DWC_usb32 IP to DWC_usb4 as of IP version 1.30. No
    functional change except checking for the IP_NAME here. The driver will
    treat the new IP_NAME as if it's DWC_usb32. Additional features for USB4
    will be introduced and checked separately.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://patch.msgid.link/e6f1827754c7a7ddc5eb7382add20bfe3a9b312f.1767390747.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: OHCI/UHCI: Add soft dependencies on ehci_platform [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon Jan 12 16:48:02 2026 +0800

    USB: OHCI/UHCI: Add soft dependencies on ehci_platform
    
    commit 01ef7f1b8713a78ab1a9512cf8096d2474c70633 upstream.
    
    Commit 9beeee6584b9aa4f ("USB: EHCI: log a warning if ehci-hcd is not
    loaded first") said that ehci-hcd should be loaded before ohci-hcd and
    uhci-hcd. However, commit 05c92da0c52494ca ("usb: ohci/uhci - add soft
    dependencies on ehci_pci") only makes ohci-pci/uhci-pci depend on ehci-
    pci, which is not enough and we may still see the warnings in boot log.
    
    To eliminate the warnings we should make ohci-hcd/uhci-hcd depend on
    ehci-hcd. But Alan said that the warning introduced by 9beeee6584b9aa4f
    is bogus, we only need the soft dependencies in the PCI level rather
    than the HCD level.
    
    However, there is really another neccessary soft dependencies between
    ohci-platform/uhci-platform and ehci-platform, which is added by this
    patch. The boot logs are below.
    
    1. ohci-platform loaded before ehci-platform:
    
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 1
     ohci-platform 1f058000.usb: irq 28, io mem 0x1f058000
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after
     usb 1-4: new low-speed USB device number 2 using ohci-platform
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 2
     ehci-platform 1f050000.usb: irq 29, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     usb 1-4: device descriptor read/all, error -62
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 1-4: new low-speed USB device number 3 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb1/1-4/1-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    2. ehci-platform loaded before ohci-platform:
    
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 1
     ehci-platform 1f050000.usb: irq 28, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 2
     ohci-platform 1f058000.usb: irq 29, io mem 0x1f058000
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 2-4: new low-speed USB device number 2 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb2/2-4/2-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    In the later case, there is no re-connection for USB-1.0/1.1 devices,
    which is expected.
    
    Cc: stable <stable@kernel.org>
    Reported-by: Shengwen Xiao <atzlinux@sina.com>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://patch.msgid.link/20260112084802.1995923-1-chenhuacai@loongson.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: ftdi_sio: add support for PICAXE AXE027 cable [+ + +]
Author: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Date:   Wed Dec 10 18:01:17 2025 -0800

    USB: serial: ftdi_sio: add support for PICAXE AXE027 cable
    
    commit c0afe95e62984ceea171c3ea319beaf84a21181c upstream.
    
    The vendor provides instructions to write "0403 bd90" to
    /sys/bus/usb-serial/drivers/ftdi_sio/new_id; see:
    https://picaxe.com/docs/picaxe_linux_instructions.pdf
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit LE910 MBIM composition [+ + +]
Author: Ulrich Mohr <u.mohr@semex-engcon.com>
Date:   Tue Dec 9 21:08:41 2025 +0100

    USB: serial: option: add Telit LE910 MBIM composition
    
    commit 8af4274ab5999831f4757dfd5bd11665ba3b1569 upstream.
    
    Add support for Telit LE910 module when operating in MBIM composition
    with additional ttys. This USB product ID is used by the module
    when AT#USBCFG is set to 7.
    
    0x1252: MBIM + tty(NMEA) + tty(MODEM) + tty(MODEM) + SAP
    
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1252 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Ulrich Mohr <u.mohr@semex-engcon.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock/test: add a final full barrier after run all tests [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Thu Jan 8 12:44:19 2026 +0100

    vsock/test: add a final full barrier after run all tests
    
    [ Upstream commit c39a6a277e0e67ffff6a8efcbbf7e7e23ce9e38c ]
    
    If the last test fails, the other side still completes correctly,
    which could lead to false positives.
    
    Let's add a final barrier that ensures that the last test has finished
    correctly on both sides, but also that the two sides agree on the
    number of tests to be performed.
    
    Fixes: 2f65b44e199c ("VSOCK: add full barrier between test cases")
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://patch.msgid.link/20260108114419.52747-1-sgarzare@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/fpu: Clear XSTATE_BV[i] in guest XSAVE state whenever XFD[i]=1 [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Dec 31 16:43:15 2025 +0100

    x86/fpu: Clear XSTATE_BV[i] in guest XSAVE state whenever XFD[i]=1
    
    commit b45f721775947a84996deb5c661602254ce25ce6 upstream.
    
    When loading guest XSAVE state via KVM_SET_XSAVE, and when updating XFD in
    response to a guest WRMSR, clear XFD-disabled features in the saved (or to
    be restored) XSTATE_BV to ensure KVM doesn't attempt to load state for
    features that are disabled via the guest's XFD.  Because the kernel
    executes XRSTOR with the guest's XFD, saving XSTATE_BV[i]=1 with XFD[i]=1
    will cause XRSTOR to #NM and panic the kernel.
    
    E.g. if fpu_update_guest_xfd() sets XFD without clearing XSTATE_BV:
    
      ------------[ cut here ]------------
      WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#29: amx_test/848
      Modules linked in: kvm_intel kvm irqbypass
      CPU: 29 UID: 1000 PID: 848 Comm: amx_test Not tainted 6.19.0-rc2-ffa07f7fd437-x86_amx_nm_xfd_non_init-vm #171 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:exc_device_not_available+0x101/0x110
      Call Trace:
       <TASK>
       asm_exc_device_not_available+0x1a/0x20
      RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90
       switch_fpu_return+0x4a/0xb0
       kvm_arch_vcpu_ioctl_run+0x1245/0x1e40 [kvm]
       kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm]
       __x64_sys_ioctl+0x8f/0xd0
       do_syscall_64+0x62/0x940
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    This can happen if the guest executes WRMSR(MSR_IA32_XFD) to set XFD[18] = 1,
    and a host IRQ triggers kernel_fpu_begin() prior to the vmexit handler's
    call to fpu_update_guest_xfd().
    
    and if userspace stuffs XSTATE_BV[i]=1 via KVM_SET_XSAVE:
    
      ------------[ cut here ]------------
      WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#14: amx_test/867
      Modules linked in: kvm_intel kvm irqbypass
      CPU: 14 UID: 1000 PID: 867 Comm: amx_test Not tainted 6.19.0-rc2-2dace9faccd6-x86_amx_nm_xfd_non_init-vm #168 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:exc_device_not_available+0x101/0x110
      Call Trace:
       <TASK>
       asm_exc_device_not_available+0x1a/0x20
      RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90
       fpu_swap_kvm_fpstate+0x6b/0x120
       kvm_load_guest_fpu+0x30/0x80 [kvm]
       kvm_arch_vcpu_ioctl_run+0x85/0x1e40 [kvm]
       kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm]
       __x64_sys_ioctl+0x8f/0xd0
       do_syscall_64+0x62/0x940
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    The new behavior is consistent with the AMX architecture.  Per Intel's SDM,
    XSAVE saves XSTATE_BV as '0' for components that are disabled via XFD
    (and non-compacted XSAVE saves the initial configuration of the state
    component):
    
      If XSAVE, XSAVEC, XSAVEOPT, or XSAVES is saving the state component i,
      the instruction does not generate #NM when XCR0[i] = IA32_XFD[i] = 1;
      instead, it operates as if XINUSE[i] = 0 (and the state component was
      in its initial state): it saves bit i of XSTATE_BV field of the XSAVE
      header as 0; in addition, XSAVE saves the initial configuration of the
      state component (the other instructions do not save state component i).
    
    Alternatively, KVM could always do XRSTOR with XFD=0, e.g. by using
    a constant XFD based on the set of enabled features when XSAVEing for
    a struct fpu_guest.  However, having XSTATE_BV[i]=1 for XFD-disabled
    features can only happen in the above interrupt case, or in similar
    scenarios involving preemption on preemptible kernels, because
    fpu_swap_kvm_fpstate()'s call to save_fpregs_to_fpstate() saves the
    outgoing FPU state with the current XFD; and that is (on all but the
    first WRMSR to XFD) the guest XFD.
    
    Therefore, XFD can only go out of sync with XSTATE_BV in the above
    interrupt case, or in similar scenarios involving preemption on
    preemptible kernels, and it we can consider it (de facto) part of KVM
    ABI that KVM_GET_XSAVE returns XSTATE_BV[i]=0 for XFD-disabled features.
    
    Reported-by: Paolo Bonzini <pbonzini@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: 820a6ee944e7 ("kvm: x86: Add emulation for IA32_XFD", 2022-01-14)
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [Move clearing of XSTATE_BV from fpu_copy_uabi_to_guest_fpstate
     to kvm_vcpu_ioctl_x86_set_xsave. - Paolo]
    Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers [+ + +]
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Thu Nov 6 15:13:50 2025 -0800

    x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers
    
    commit 269031b15c1433ff39e30fa7ea3ab8f0be9d6ae2 upstream.
    
    Commit 7ffb791423c7 ("x86/kaslr: Reduce KASLR entropy on most x86 systems")
    is too narrow. The effect being mitigated in that commit is caused by
    ZONE_DEVICE which PCI_P2PDMA has a dependency. ZONE_DEVICE, in general,
    lets any physical address be added to the direct-map. I.e. not only ACPI
    hotplug ranges, CXL Memory Windows, or EFI Specific Purpose Memory, but
    also any PCI MMIO range for the DEVICE_PRIVATE and PCI_P2PDMA cases. Update
    the mitigation, limit KASLR entropy, to apply in all ZONE_DEVICE=y cases.
    
    Distro kernels typically have PCI_P2PDMA=y, so the practical exposure of
    this problem is limited to the PCI_P2PDMA=n case.
    
    A potential path to recover entropy would be to walk ACPI and determine the
    limits for hotplug and PCI MMIO before kernel_randomize_memory(). On
    smaller systems that could yield some KASLR address bits. This needs
    additional investigation to determine if some limited ACPI table scanning
    can happen this early without an open coded solution like
    arch/x86/boot/compressed/acpi.c needs to deploy.
    
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Logan Gunthorpe <logang@deltatee.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Fixes: 7ffb791423c7 ("x86/kaslr: Reduce KASLR entropy on most x86 systems")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Reviewed-by: Balbir Singh <balbirs@nvidia.com>
    Tested-by: Yasunori Goto <y-goto@fujitsu.com>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Link: http://patch.msgid.link/692e08b2516d4_261c1100a3@dwillia2-mobl4.notmuch
    Signed-off-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/resctrl: Add missing resctrl initialization for Hygon [+ + +]
Author: Xiaochen Shen <shenxiaochen@open-hieco.net>
Date:   Tue Dec 9 14:26:49 2025 +0800

    x86/resctrl: Add missing resctrl initialization for Hygon
    
    commit 6ee98aabdc700b5705e4f1833e2edc82a826b53b upstream.
    
    Hygon CPUs supporting Platform QoS features currently undergo partial resctrl
    initialization through resctrl_cpu_detect() in the Hygon BSP init helper and
    AMD/Hygon common initialization code. However, several critical data
    structures remain uninitialized for Hygon CPUs in the following paths:
    
     - get_mem_config()-> __rdt_get_mem_config_amd():
         rdt_resource::membw,alloc_capable
         hw_res::num_closid
    
     - rdt_init_res_defs()->rdt_init_res_defs_amd():
         rdt_resource::cache
         hw_res::msr_base,msr_update
    
    Add the missing AMD/Hygon common initialization to ensure proper Platform QoS
    functionality on Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251209062650.1536952-2-shenxiaochen@open-hieco.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/resctrl: Fix memory bandwidth counter width for Hygon [+ + +]
Author: Xiaochen Shen <shenxiaochen@open-hieco.net>
Date:   Tue Dec 9 14:26:50 2025 +0800

    x86/resctrl: Fix memory bandwidth counter width for Hygon
    
    commit 7517e899e1b87b4c22a92c7e40d8733c48e4ec3c upstream.
    
    The memory bandwidth calculation relies on reading the hardware counter
    and measuring the delta between samples. To ensure accurate measurement,
    the software reads the counter frequently enough to prevent it from
    rolling over twice between reads.
    
    The default Memory Bandwidth Monitoring (MBM) counter width is 24 bits.
    Hygon CPUs provide a 32-bit width counter, but they do not support the
    MBM capability CPUID leaf (0xF.[ECX=1]:EAX) to report the width offset
    (from 24 bits).
    
    Consequently, the kernel falls back to the 24-bit default counter width,
    which causes incorrect overflow handling on Hygon CPUs.
    
    Fix this by explicitly setting the counter width offset to 8 bits (resulting
    in a 32-bit total counter width) for Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <shenxiaochen@open-hieco.net>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Tony Luck <tony.luck@intel.com>
    Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251209062650.1536952-3-shenxiaochen@open-hieco.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm: Fix inner mode lookup in tunnel mode GSO segmentation [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Thu Nov 20 05:56:09 2025 +0200

    xfrm: Fix inner mode lookup in tunnel mode GSO segmentation
    
    [ Upstream commit 3d5221af9c7711b7aec8da1298c8fc393ef6183d ]
    
    Commit 61fafbee6cfe ("xfrm: Determine inner GSO type from packet inner
    protocol") attempted to fix GSO segmentation by reading the inner
    protocol from XFRM_MODE_SKB_CB(skb)->protocol. This was incorrect
    because the field holds the inner L4 protocol (TCP/UDP) instead of the
    required tunnel protocol. Also, the memory location (shared by
    XFRM_SKB_CB(skb) which could be overwritten by xfrm_replay_overflow())
    is prone to corruption. This combination caused the kernel to select
    the wrong inner mode and get the wrong address family.
    
    The correct value is in xfrm_offload(skb)->proto, which is set from
    the outer tunnel header's protocol field by esp[4|6]_gso_encap(). It
    is initialized by xfrm[4|6]_tunnel_encap_add() to either IPPROTO_IPIP
    or IPPROTO_IPV6, using xfrm_af2proto() and correctly reflects the
    inner packet's address family.
    
    Fixes: 61fafbee6cfe ("xfrm: Determine inner GSO type from packet inner protocol")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: set ipv4 no_pmtu_disc flag only on output sa when direction is set [+ + +]
Author: Antony Antony <antony.antony@secunet.com>
Date:   Thu Dec 11 11:30:27 2025 +0100

    xfrm: set ipv4 no_pmtu_disc flag only on output sa when direction is set
    
    [ Upstream commit c196def07bbc6e8306d7a274433913444b0db20a ]
    
    The XFRM_STATE_NOPMTUDISC flag is only meaningful for output SAs, but
    it was being applied regardless of the SA direction when the sysctl
    ip_no_pmtu_disc is enabled. This can unintentionally affect input SAs.
    
    Limit setting XFRM_STATE_NOPMTUDISC to output SAs when the SA direction
    is configured.
    
    Closes: https://github.com/strongswan/strongswan/issues/2946
    Fixes: a4a87fa4e96c ("xfrm: Add Direction to the SA in or out")
    Signed-off-by: Antony Antony <antony.antony@secunet.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfs: Fix the return value of xfs_rtcopy_summary() [+ + +]
Author: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
Date:   Mon Jan 12 15:35:23 2026 +0530

    xfs: Fix the return value of xfs_rtcopy_summary()
    
    commit 6b2d155366581705a848833a9b626bfea41d5a8d upstream.
    
    xfs_rtcopy_summary() should return the appropriate error code
    instead of always returning 0. The caller of this function which is
    xfs_growfs_rt_bmblock() is already handling the error.
    
    Fixes: e94b53ff699c ("xfs: cache last bitmap block in realtime allocator")
    Signed-off-by: Nirjhar Roy (IBM) <nirjhar.roy.lists@gmail.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org # v6.7
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: set max_agbno to allow sparse alloc of last full inode chunk [+ + +]
Author: Brian Foster <bfoster@redhat.com>
Date:   Fri Jan 9 12:49:05 2026 -0500

    xfs: set max_agbno to allow sparse alloc of last full inode chunk
    
    commit c360004c0160dbe345870f59f24595519008926f upstream.
    
    Sparse inode cluster allocation sets min/max agbno values to avoid
    allocating an inode cluster that might map to an invalid inode
    chunk. For example, we can't have an inode record mapped to agbno 0
    or that extends past the end of a runt AG of misaligned size.
    
    The initial calculation of max_agbno is unnecessarily conservative,
    however. This has triggered a corner case allocation failure where a
    small runt AG (i.e. 2063 blocks) is mostly full save for an extent
    to the EOFS boundary: [2050,13]. max_agbno is set to 2048 in this
    case, which happens to be the offset of the last possible valid
    inode chunk in the AG. In practice, we should be able to allocate
    the 4-block cluster at agbno 2052 to map to the parent inode record
    at agbno 2048, but the max_agbno value precludes it.
    
    Note that this can result in filesystem shutdown via dirty trans
    cancel on stable kernels prior to commit 9eb775968b68 ("xfs: walk
    all AGs if TRYLOCK passed to xfs_alloc_vextent_iterate_ags") because
    the tail AG selection by the allocator sets t_highest_agno on the
    transaction. If the inode allocator spins around and finds an inode
    chunk with free inodes in an earlier AG, the subsequent dir name
    creation path may still fail to allocate due to the AG restriction
    and cancel.
    
    To avoid this problem, update the max_agbno calculation to the agbno
    prior to the last chunk aligned agbno in the AG. This is not
    necessarily the last valid allocation target for a sparse chunk, but
    since inode chunks (i.e. records) are chunk aligned and sparse
    allocs are cluster sized/aligned, this allows the sb_spino_align
    alignment restriction to take over and round down the max effective
    agbno to within the last valid inode chunk in the AG.
    
    Note that even though the allocator improvements in the
    aforementioned commit seem to avoid this particular dirty trans
    cancel situation, the max_agbno logic improvement still applies as
    we should be able to allocate from an AG that has been appropriately
    selected. The more important target for this patch however are
    older/stable kernels prior to this allocator rework/improvement.
    
    Cc: stable@vger.kernel.org # v4.2
    Fixes: 56d1115c9bc7 ("xfs: allocate sparse inode chunks on full chunk allocation failure")
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>