Changelog in Linux kernel 6.12.11

 
ACPI: resource: acpi_dev_irq_override(): Check DMI match last [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Dec 28 17:52:53 2024 +0100

    ACPI: resource: acpi_dev_irq_override(): Check DMI match last
    
    [ Upstream commit cd4a7b2e6a2437a5502910c08128ea3bad55a80b ]
    
    acpi_dev_irq_override() gets called approx. 30 times during boot (15 legacy
    IRQs * 2 override_table entries). Of these 30 calls at max 1 will match
    the non DMI checks done by acpi_dev_irq_override(). The dmi_check_system()
    check is by far the most expensive check done by acpi_dev_irq_override(),
    make this call the last check done by acpi_dev_irq_override() so that it
    will be called at max 1 time instead of 30 times.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://patch.msgid.link/20241228165253.42584-1-hdegoede@redhat.com
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
afs: Fix merge preference rule failure condition [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Tue Jan 7 14:52:32 2025 +0000

    afs: Fix merge preference rule failure condition
    
    [ Upstream commit 17a4fde81d3a7478d97d15304a6d61094a10c2e3 ]
    
    syzbot reported a lock held when returning to userspace[1].  This is
    because if argc is less than 0 and the function returns directly, the held
    inode lock is not released.
    
    Fix this by store the error in ret and jump to done to clean up instead of
    returning directly.
    
    [dh: Modified Lizhi Xu's original patch to make it honour the error code
    from afs_split_string()]
    
    [1]
    WARNING: lock held when returning to user space!
    6.13.0-rc3-syzkaller-00209-g499551201b5f #0 Not tainted
    ------------------------------------------------
    syz-executor133/5823 is leaving the kernel with locks still held!
    1 lock held by syz-executor133/5823:
     #0: ffff888071cffc00 (&sb->s_type->i_mutex_key#9){++++}-{4:4}, at: inode_lock include/linux/fs.h:818 [inline]
     #0: ffff888071cffc00 (&sb->s_type->i_mutex_key#9){++++}-{4:4}, at: afs_proc_addr_prefs_write+0x2bb/0x14e0 fs/afs/addr_prefs.c:388
    
    Reported-by: syzbot+76f33569875eb708e575@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=76f33569875eb708e575
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/20241226012616.2348907-1-lizhi.xu@windriver.com/
    Link: https://lore.kernel.org/r/529850.1736261552@warthog.procyon.org.uk
    Tested-by: syzbot+76f33569875eb708e575@syzkaller.appspotmail.com
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek: Add support for Ayaneo System using CS35L41 HDA [+ + +]
Author: Stefan Binding <sbinding@opensource.cirrus.com>
Date:   Thu Jan 9 16:54:48 2025 +0000

    ALSA: hda/realtek: Add support for Ayaneo System using CS35L41 HDA
    
    commit de5afaddd5a7af6b9c48900741b410ca03e453ae upstream.
    
    Add support for Ayaneo Portable Game System.
    
    System use 2 CS35L41 Amps with HDA, using Internal boost, with I2C
    
    Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20250109165455.645810-1-sbinding@opensource.cirrus.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: fixup ASUS GA605W [+ + +]
Author: Luke D. Jones <luke@ljones.dev>
Date:   Sat Jan 11 15:27:53 2025 +1300

    ALSA: hda/realtek: fixup ASUS GA605W
    
    commit f67b1ef261f4370c48e3a7d19907de136be2d5bd upstream.
    
    The GA605W laptop has almost the exact same codec setup as the GA403
    and so the same quirks apply to it.
    
    Signed-off-by: Luke D. Jones <luke@ljones.dev>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20250111022754.177551-1-luke@ljones.dev
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: fixup ASUS H7606W [+ + +]
Author: Luke D. Jones <luke@ljones.dev>
Date:   Sat Jan 11 15:27:54 2025 +1300

    ALSA: hda/realtek: fixup ASUS H7606W
    
    commit 44a48b26639e591e53f6f72000c16576ce107274 upstream.
    
    The H7606W laptop has almost the exact same codec setup as the GA403
    and so the same quirks apply to it.
    
    Signed-off-by: Luke D. Jones <luke@ljones.dev>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20250111022754.177551-2-luke@ljones.dev
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
apparmor: allocate xmatch for nullpdb inside aa_alloc_null [+ + +]
Author: Ryan Lee <ryan.lee@canonical.com>
Date:   Wed Aug 21 11:01:56 2024 -0700

    apparmor: allocate xmatch for nullpdb inside aa_alloc_null
    
    commit 17d0d04f3c999e7784648bad70ce1766c3b49d69 upstream.
    
    attach->xmatch was not set when allocating a null profile, which is used in
    complain mode to allocate a learning profile. This was causing downstream
    failures in find_attach, which expected a valid xmatch but did not find
    one under a certain sequence of profile transitions in complain mode.
    
    This patch ensures the xmatch is set up properly for null profiles.
    
    Signed-off-by: Ryan Lee <ryan.lee@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Cc: Paul Kramme <kramme@digitalmanufaktur.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Fix bpf_sk_select_reuseport() memory leak [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Fri Jan 10 14:21:55 2025 +0100

    bpf: Fix bpf_sk_select_reuseport() memory leak
    
    [ Upstream commit b3af60928ab9129befa65e6df0310d27300942bf ]
    
    As pointed out in the original comment, lookup in sockmap can return a TCP
    ESTABLISHED socket. Such TCP socket may have had SO_ATTACH_REUSEPORT_EBPF
    set before it was ESTABLISHED. In other words, a non-NULL sk_reuseport_cb
    does not imply a non-refcounted socket.
    
    Drop sk's reference in both error paths.
    
    unreferenced object 0xffff888101911800 (size 2048):
      comm "test_progs", pid 44109, jiffies 4297131437
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        80 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace (crc 9336483b):
        __kmalloc_noprof+0x3bf/0x560
        __reuseport_alloc+0x1d/0x40
        reuseport_alloc+0xca/0x150
        reuseport_attach_prog+0x87/0x140
        sk_reuseport_attach_bpf+0xc8/0x100
        sk_setsockopt+0x1181/0x1990
        do_sock_setsockopt+0x12b/0x160
        __sys_setsockopt+0x7b/0xc0
        __x64_sys_setsockopt+0x1b/0x30
        do_syscall_64+0x93/0x180
        entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 64d85290d79c ("bpf: Allow bpf_map_lookup_elem for SOCKMAP and SOCKHASH")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Reviewed-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://patch.msgid.link/20250110-reuseport-memleak-v1-1-fa1ddab0adfe@rbox.co
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: add the missing error handling inside get_canonical_dev_path [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Jan 8 14:14:04 2025 +1030

    btrfs: add the missing error handling inside get_canonical_dev_path
    
    [ Upstream commit fe4de594f7a2e9bc49407de60fbd20809fad4192 ]
    
    Inside function get_canonical_dev_path(), we call d_path() to get the
    final device path.
    
    But d_path() can return error, and in that case the next strscpy() call
    will trigger an invalid memory access.
    
    Add back the missing error handling for d_path().
    
    Reported-by: Boris Burkov <boris@bur.io>
    Fixes: 7e06de7c83a7 ("btrfs: canonicalize the device path before adding it")
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cachefiles: Parse the "secctx" immediately [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Fri Dec 13 13:50:05 2024 +0000

    cachefiles: Parse the "secctx" immediately
    
    [ Upstream commit e5a8b6446c0d370716f193771ccacf3260a57534 ]
    
    Instead of storing an opaque string, call security_secctx_to_secid()
    right in the "secctx" command handler and store only the numeric
    "secid".  This eliminates an unnecessary string allocation and allows
    the daemon to receive errors when writing the "secctx" command instead
    of postponing the error to the "bind" command handler.  For example,
    if the kernel was built without `CONFIG_SECURITY`, "bind" will return
    `EOPNOTSUPP`, but the daemon doesn't know why.  With this patch, the
    "secctx" will instead return `EOPNOTSUPP` which is the right context
    for this error.
    
    This patch adds a boolean flag `have_secid` because I'm not sure if we
    can safely assume that zero is the special secid value for "not set".
    This appears to be true for SELinux, Smack and AppArmor, but since
    this attribute is not documented, I'm unable to derive a stable
    guarantee for that.
    
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/20241209141554.638708-1-max.kellermann@ionos.com/
    Link: https://lore.kernel.org/r/20241213135013.2964079-6-dhowells@redhat.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq: Move endif to the end of Kconfig file [+ + +]
Author: Viresh Kumar <viresh.kumar@linaro.org>
Date:   Fri Jan 10 11:23:10 2025 +0530

    cpufreq: Move endif to the end of Kconfig file
    
    [ Upstream commit 7e265fc04690d449a40b413b0348b15c748cea6f ]
    
    It is possible to enable few cpufreq drivers, without the framework
    being enabled. This happened due to a bug while moving the entries
    earlier. Fix it.
    
    Fixes: 7ee1378736f0 ("cpufreq: Move CPPC configs to common Kconfig and add RISC-V")
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
    Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
    Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
    Link: https://patch.msgid.link/84ac7a8fa72a8fe20487bb0a350a758bce060965.1736488384.git.viresh.kumar@linaro.org
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpuidle: teo: Update documentation after previous changes [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Fri Jan 10 13:48:10 2025 +0100

    cpuidle: teo: Update documentation after previous changes
    
    [ Upstream commit 5a597a19a2148d1c5cd987907a60c042ab0f62d5 ]
    
    After previous changes, the description of the teo governor in the
    documentation comment does not match the code any more, so update it
    as appropriate.
    
    Fixes: 449914398083 ("cpuidle: teo: Remove recent intercepts metric")
    Fixes: 2662342079f5 ("cpuidle: teo: Gather statistics regarding whether or not to stop the tick")
    Fixes: 6da8f9ba5a87 ("cpuidle: teo: Skip tick_nohz_get_sleep_length() call in some cases")
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Christian Loehle <christian.loehle@arm.com>
    Link: https://patch.msgid.link/6120335.lOV4Wx5bFT@rjwysocki.net
    [ rjw: Corrected 3 typos found by Christian ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Disable replay and psr while VRR is enabled [+ + +]
Author: Tom Chung <chiahsuan.chung@amd.com>
Date:   Thu Dec 5 23:20:45 2024 +0800

    drm/amd/display: Disable replay and psr while VRR is enabled
    
    commit 67edb81d6e9af43a0d58edf74630f82cfda4155d upstream.
    
    [Why]
    Replay and PSR will cause some video corruption while VRR is enabled.
    
    [How]
    1. Disable the Replay and PSR while VRR is enabled.
    2. Change the amdgpu_dm_crtc_vrr_active() parameter to const.
       Because the function will only read data from dm_crtc_state.
    
    Reviewed-by: Sun peng Li <sunpeng.li@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Roman Li <roman.li@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit d7879340e987b3056b8ae39db255b6c19c170a0d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Do not elevate mem_type change to full update [+ + +]
Author: Leo Li <sunpeng.li@amd.com>
Date:   Wed Dec 11 12:06:24 2024 -0500

    drm/amd/display: Do not elevate mem_type change to full update
    
    commit 35ca53b7b0f0ffd16c6675fd76abac9409cf83e0 upstream.
    
    [Why]
    
    There should not be any need to revalidate bandwidth on memory placement
    change, since the fb is expected to be pinned to DCN-accessable memory
    before scanout. For APU it's DRAM, and DGPU, it's VRAM. However, async
    flips + memory type change needs to be rejected.
    
    [How]
    
    Do not set lock_and_validation_needed on mem_type change. Instead,
    reject an async_flip request if the crtc's buffer(s) changed mem_type.
    
    This may fix stuttering/corruption experienced with PSR SU and PSR1
    panels, if the compositor allocates fbs in both VRAM carveout and GTT
    and flips between them.
    
    Fixes: a7c0cad0dc06 ("drm/amd/display: ensure async flips are only accepted for fast updates")
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Leo Li <sunpeng.li@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 4caacd1671b7a013ad04cd8b6398f002540bdd4d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Do not wait for PSR disable on vbl enable [+ + +]
Author: Leo Li <sunpeng.li@amd.com>
Date:   Mon Dec 9 12:58:33 2024 -0500

    drm/amd/display: Do not wait for PSR disable on vbl enable
    
    commit ff2e4d874726c549130308b6b46aa0f8a34e04cb upstream.
    
    [Why]
    
    Outside of a modeset/link configuration change, we should not have to
    wait for the panel to exit PSR. Depending on the panel and it's state,
    it may take multiple frames for it to exit PSR. Therefore, waiting in
    all scenarios may cause perceived stuttering, especially in combination
    with faster vblank shutdown.
    
    [How]
    
    PSR1 disable is hooked up to the vblank enable event, and vice versa. In
    case of vblank enable, do not wait for panel to exit PSR, but still wait
    in all other cases.
    
    We also avoid a call to unnecessarily change power_opts on disable -
    this ends up sending another command to dmcub fw.
    
    When testing against IGT, some crc tests like kms_plane_alpha_blend and
    amd_hotplug were failing due to CRC timeouts. This was found to be
    caused by the early return before HW has fully exited PSR1. Fix this by
    first making sure we grab a vblank reference, then waiting for panel to
    exit PSR1, before programming hw for CRC generation.
    
    Fixes: 58a261bfc967 ("drm/amd/display: use a more lax vblank enable policy for older ASICs")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3743
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Leo Li <sunpeng.li@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit aa6713fa2046f4c09bf3013dd1420ae15603ca6f)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix PSR-SU not support but still call the amdgpu_dm_psr_enable [+ + +]
Author: Tom Chung <chiahsuan.chung@amd.com>
Date:   Thu Dec 5 23:08:28 2024 +0800

    drm/amd/display: Fix PSR-SU not support but still call the amdgpu_dm_psr_enable
    
    commit b0a3e840ad287c33a86b5515d606451b7df86ad4 upstream.
    
    [Why]
    The enum DC_PSR_VERSION_SU_1 of psr_version is 1 and
    DC_PSR_VERSION_UNSUPPORTED is 0xFFFFFFFF.
    
    The original code may has chance trigger the amdgpu_dm_psr_enable()
    while psr version is set to DC_PSR_VERSION_UNSUPPORTED.
    
    [How]
    Modify the condition to psr->psr_version == DC_PSR_VERSION_SU_1
    
    Reviewed-by: Sun peng Li <sunpeng.li@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Roman Li <roman.li@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f765e7ce0417f8dc38479b4b495047c397c16902)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Validate mdoe under MST LCT=1 case as well [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Tue Dec 10 11:17:55 2024 +0800

    drm/amd/display: Validate mdoe under MST LCT=1 case as well
    
    commit b5cd418f016fb801be413fd52fe4711d2d13018c upstream.
    
    [Why & How]
    Currently in dm_dp_mst_is_port_support_mode(), when valdidating mode
    under dsc decoding at the last DP link config, we only validate the
    case when there is an UFP. However, if the MSTB LCT=1, there is no
    UFP.
    
    Under this case, use root_link_bw_in_kbps as the available bw to
    compare.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/3720
    Fixes: fa57924c76d9 ("drm/amd/display: Refactor function dm_dp_mst_is_port_support_mode()")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Jerry Zuo <jerry.zuo@amd.com>
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit a04d9534a8a75b2806c5321c387be450c364b55e)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/smu13: update powersave optimizations [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Jan 8 15:17:12 2025 -0500

    drm/amdgpu/smu13: update powersave optimizations
    
    commit 11510e67d0bd956878ab4ffa03c45766788092c1 upstream.
    
    Only apply when compute profile is selected.  This is
    the only supported configuration.  Selecting other
    profiles can lead to performane degradations.
    
    Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit d477e39532d725b1cdb3c8005c689c74ffbf3b94)
    Cc: stable@vger.kernel.org # 6.12.x
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: always sync the GFX pipe on ctx switch [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Dec 20 16:21:11 2024 +0100

    drm/amdgpu: always sync the GFX pipe on ctx switch
    
    commit af04b320c71c4b59971f021615876808a36e5038 upstream.
    
    That is needed to enforce isolation between contexts.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit def59436fb0d3ca0f211d14873d0273d69ebb405)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: disable gfxoff with the compute workload on gfx12 [+ + +]
Author: Kenneth Feng <kenneth.feng@amd.com>
Date:   Thu Jan 9 15:58:23 2025 +0800

    drm/amdgpu: disable gfxoff with the compute workload on gfx12
    
    commit 90505894c4ed581318836b792c57723df491cb91 upstream.
    
    Disable gfxoff with the compute workload on gfx12. This is a
    workaround for the opencl test failure.
    
    Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2affe2bbc997b3920045c2c434e480c81a5f9707)
    Cc: stable@vger.kernel.org # 6.12.x
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: fix fw attestation for MP0_14_0_{2/3} [+ + +]
Author: Gui Chengming <Jack.Gui@amd.com>
Date:   Tue Jan 7 17:09:08 2025 +0800

    drm/amdgpu: fix fw attestation for MP0_14_0_{2/3}
    
    commit bd275e6cfc972329d39c6406a3c6d2ba2aba7db6 upstream.
    
    FW attestation was disabled on MP0_14_0_{2/3}.
    
    V2:
    Move check into is_fw_attestation_support func. (Frank)
    Remove DRM_WARN log info. (Alex)
    Fix format. (Christian)
    
    Signed-off-by: Gui Chengming <Jack.Gui@amd.com>
    Reviewed-by: Frank.Min <Frank.Min@amd.com>
    Reviewed-by: Christian König <Christian.Koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 62952a38d9bcf357d5ffc97615c48b12c9cd627c)
    Cc: stable@vger.kernel.org # 6.12.x
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/fb: Relax clear color alignment to 64 bytes [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Fri Nov 29 08:50:11 2024 +0200

    drm/i915/fb: Relax clear color alignment to 64 bytes
    
    commit 1a5401ec3018c101c456cdbda2eaef9482db6786 upstream.
    
    Mesa changed its clear color alignment from 4k to 64 bytes
    without informing the kernel side about the change. This
    is now likely to cause framebuffer creation to fail.
    
    The only thing we do with the clear color buffer in i915 is:
    1. map a single page
    2. read out bytes 16-23 from said page
    3. unmap the page
    
    So the only requirement we really have is that those 8 bytes
    are all contained within one page. Thus we can deal with the
    Mesa regression by reducing the alignment requiment from 4k
    to the same 64 bytes in the kernel. We could even go as low as
    32 bytes, but IIRC 64 bytes is the hardware requirement on
    the 3D engine side so matching that seems sensible.
    
    Note that the Mesa alignment chages were partially undone
    so the regression itself was already fixed on userspace
    side.
    
    Cc: stable@vger.kernel.org
    Cc: Sagar Ghuge <sagar.ghuge@intel.com>
    Cc: Nanley Chery <nanley.g.chery@intel.com>
    Reported-by: Xi Ruoyao <xry111@xry111.site>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13057
    Closes: https://lore.kernel.org/all/45a5bba8de009347262d86a4acb27169d9ae0d9f.camel@xry111.site/
    Link: https://gitlab.freedesktop.org/mesa/mesa/-/commit/17f97a69c13832a6c1b0b3aad45b06f07d4b852f
    Link: https://gitlab.freedesktop.org/mesa/mesa/-/commit/888f63cf1baf34bc95e847a30a041dc7798edddb
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241129065014.8363-2-ville.syrjala@linux.intel.com
    Tested-by: Xi Ruoyao <xry111@xry111.site>
    Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
    (cherry picked from commit ed3a892e5e3d6b3f6eeb76db7c92a968aeb52f3d)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/nouveau/disp: Fix missing backlight control on Macbook 5,1 [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Jan 2 12:49:36 2025 +0100

    drm/nouveau/disp: Fix missing backlight control on Macbook 5,1
    
    commit 35243fc777566ccb3370e175cf591fea0f81f68c upstream.
    
    Macbook 5,1 with MCP79 lost its backlight control since the recent
    change for supporting GSP-RM; it rewrote the whole nv50 backlight
    control code and each display engine is supposed to have an entry for
    IOR bl callback, but it didn't cover mcp77.
    
    This patch adds the missing bl entry initialization for mcp77 display
    engine to recover the backlight control.
    
    Fixes: 2274ce7e3681 ("drm/nouveau/disp: add output backlight control methods")
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1223838
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250102114944.11499-1-tiwai@suse.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/tests: helpers: Fix compiler warning [+ + +]
Author: Yu-Chun Lin <eleanor15x@gmail.com>
Date:   Sun Jan 5 00:51:33 2025 +0800

    drm/tests: helpers: Fix compiler warning
    
    [ Upstream commit b9097e4c8bf3934e4e07e6f9b88741957fef351e ]
    
    Delete one line break to make the format correct, resolving the
    following warning during a W=1 build:
    
    >> drivers/gpu/drm/tests/drm_kunit_helpers.c:324: warning: bad line: for a KUnit test
    
    Fixes: caa714f86699 ("drm/tests: helpers: Add helper for drm_display_mode_from_cea_vic()")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202501032001.O6WY1VCW-lkp@intel.com/
    Reviewed-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Tested-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250104165134.1695864-1-eleanor15x@gmail.com
    Signed-off-by: Maxime Ripard <mripard@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/v3d: Ensure job pointer is set to NULL after job completion [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Mon Jan 13 12:47:40 2025 -0300

    drm/v3d: Ensure job pointer is set to NULL after job completion
    
    [ Upstream commit e4b5ccd392b92300a2b341705cc4805681094e49 ]
    
    After a job completes, the corresponding pointer in the device must
    be set to NULL. Failing to do so triggers a warning when unloading
    the driver, as it appears the job is still active. To prevent this,
    assign the job pointer to NULL after completing the job, indicating
    the job has finished.
    
    Fixes: 14d1d1908696 ("drm/v3d: Remove the bad signaled() implementation.")
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250113154741.67520-1-mcanal@igalia.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Add new keep_resv BO param [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Fri Jan 10 12:53:35 2025 -0600

    drm/vmwgfx: Add new keep_resv BO param
    
    [ Upstream commit b7d40627813799870e72729c6fc979a8a40d9ba6 ]
    
    Adds a new BO param that keeps the reservation locked after creation.
    This removes the need to re-reserve the BO after creation which is a
    waste of cycles.
    
    This also fixes a bug in vmw_prime_import_sg_table where the imported
    reservation is unlocked twice.
    
    Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
    Fixes: b32233acceff ("drm/vmwgfx: Fix prime import/export")
    Reviewed-by: Zack Rusin <zack.rusin@broadcom.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250110185335.15301-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/vmwgfx: Unreserve BO on error [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Tue Dec 10 13:55:35 2024 -0600

    drm/vmwgfx: Unreserve BO on error
    
    [ Upstream commit cb343ded122e0bf41e4b2a9f89386296451be109 ]
    
    Unlock BOs in reverse order.
    Add an acquire context so that lockdep doesn't complain.
    
    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://patchwork.freedesktop.org/patch/msgid/20241210195535.2074918-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/oa: Add missing VISACTL mux registers [+ + +]
Author: Ashutosh Dixit <ashutosh.dixit@intel.com>
Date:   Fri Jan 10 18:15:39 2025 -0800

    drm/xe/oa: Add missing VISACTL mux registers
    
    commit 79a21fc921d7aafaf69d00b4938435b81bf66022 upstream.
    
    Add missing VISACTL mux registers required for some OA
    config's (e.g. RenderPipeCtrl).
    
    Fixes: cdf02fe1a94a ("drm/xe/oa/uapi: Add/remove OA config perf ops")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
    Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250111021539.2920346-1-ashutosh.dixit@intel.com
    (cherry picked from commit c26f22dac3449d8a687237cdfc59a6445eb8f75a)
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe: Mark ComputeCS read mode as UC on iGPU [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Mon Jan 13 16:25:07 2025 -0800

    drm/xe: Mark ComputeCS read mode as UC on iGPU
    
    commit b1231ff7ea0689d04040a44864c265bc11612fa8 upstream.
    
    RING_CMD_CCTL read index should be UC on iGPU parts due to L3 caching
    structure. Having this as WB blocks ULLS from being enabled. Change to
    UC to unblock ULLS on iGPU.
    
    v2:
     - Drop internal communications commnet, bspec is updated
    
    Cc: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
    Cc: Michal Mrozek <michal.mrozek@intel.com>
    Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
    Cc: José Roberto de Souza <jose.souza@intel.com>
    Cc: stable@vger.kernel.org
    Fixes: 328e089bfb37 ("drm/xe: Leverage ComputeCS read L3 caching")
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Acked-by: Michal Mrozek <michal.mrozek@intel.com>
    Reviewed-by: Stuart Summers <stuart.summers@intel.com>
    Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250114002507.114087-1-matthew.brost@intel.com
    (cherry picked from commit 758debf35b9cda5450e40996991a6e4b222899bd)
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
efi/zboot: Limit compression options to GZIP and ZSTD [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Fri Dec 6 11:41:40 2024 +0100

    efi/zboot: Limit compression options to GZIP and ZSTD
    
    commit 0b2c29fb68f8bf3e87a9d88404aa6fdd486223e5 upstream.
    
    For historical reasons, the legacy decompressor code on various
    architectures supports 7 different compression types for the compressed
    kernel image.
    
    EFI zboot is not a compression library museum, and so the options can be
    limited to what is likely to be useful in practice:
    
    - GZIP is tried and tested, and is still one of the fastest at
      decompression time, although the compression ratio is not very high;
      moreover, Fedora is already shipping EFI zboot kernels for arm64 that
      use GZIP, and QEMU implements direct support for it when booting a
      kernel without firmware loaded;
    
    - ZSTD has a very high compression ratio (although not the highest), and
      is almost as fast as GZIP at decompression time.
    
    Reducing the number of options makes it less of a hassle for other
    consumers of the EFI zboot format (such as QEMU today, and kexec in the
    future) to support it transparently without having to carry 7 different
    decompression libraries.
    
    Acked-by: Gerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
eth: bnxt: always recalculate features after XDP clearing, fix null-deref [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jan 8 20:30:57 2025 -0800

    eth: bnxt: always recalculate features after XDP clearing, fix null-deref
    
    [ Upstream commit f0aa6a37a3dbb40b272df5fc6db93c114688adcd ]
    
    Recalculate features when XDP is detached.
    
    Before:
      # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp
      # ip li set dev eth0 xdp off
      # ethtool -k eth0 | grep gro
      rx-gro-hw: off [requested on]
    
    After:
      # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp
      # ip li set dev eth0 xdp off
      # ethtool -k eth0 | grep gro
      rx-gro-hw: on
    
    The fact that HW-GRO doesn't get re-enabled automatically is just
    a minor annoyance. The real issue is that the features will randomly
    come back during another reconfiguration which just happens to invoke
    netdev_update_features(). The driver doesn't handle reconfiguring
    two things at a time very robustly.
    
    Starting with commit 98ba1d931f61 ("bnxt_en: Fix RSS logic in
    __bnxt_reserve_rings()") we only reconfigure the RSS hash table
    if the "effective" number of Rx rings has changed. If HW-GRO is
    enabled "effective" number of rings is 2x what user sees.
    So if we are in the bad state, with HW-GRO re-enablement "pending"
    after XDP off, and we lower the rings by / 2 - the HW-GRO rings
    doing 2x and the ethtool -L doing / 2 may cancel each other out,
    and the:
    
      if (old_rx_rings != bp->hw_resc.resv_rx_rings &&
    
    condition in __bnxt_reserve_rings() will be false.
    The RSS map won't get updated, and we'll crash with:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000168
      RIP: 0010:__bnxt_hwrm_vnic_set_rss+0x13a/0x1a0
        bnxt_hwrm_vnic_rss_cfg_p5+0x47/0x180
        __bnxt_setup_vnic_p5+0x58/0x110
        bnxt_init_nic+0xb72/0xf50
        __bnxt_open_nic+0x40d/0xab0
        bnxt_open_nic+0x2b/0x60
        ethtool_set_channels+0x18c/0x1d0
    
    As we try to access a freed ring.
    
    The issue is present since XDP support was added, really, but
    prior to commit 98ba1d931f61 ("bnxt_en: Fix RSS logic in
    __bnxt_reserve_rings()") it wasn't causing major issues.
    
    Fixes: 1054aee82321 ("bnxt_en: Use NETIF_F_GRO_HW.")
    Fixes: 98ba1d931f61 ("bnxt_en: Fix RSS logic in __bnxt_reserve_rings()")
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Link: https://patch.msgid.link/20250109043057.2888953-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
filemap: avoid truncating 64-bit offset to 32 bits [+ + +]
Author: Marco Nelissen <marco.nelissen@gmail.com>
Date:   Thu Jan 2 11:04:11 2025 -0800

    filemap: avoid truncating 64-bit offset to 32 bits
    
    commit f505e6c91e7a22d10316665a86d79f84d9f0ba76 upstream.
    
    On 32-bit kernels, folio_seek_hole_data() was inadvertently truncating a
    64-bit value to 32 bits, leading to a possible infinite loop when writing
    to an xfs filesystem.
    
    Link: https://lkml.kernel.org/r/20250102190540.1356838-1-marco.nelissen@gmail.com
    Fixes: 54fa39ac2e00 ("iomap: use mapping_seek_hole_data")
    Signed-off-by: Marco Nelissen <marco.nelissen@gmail.com>
    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>

 
fs/proc: fix softlockup in __read_vmcore (part 2) [+ + +]
Author: Rik van Riel <riel@surriel.com>
Date:   Fri Jan 10 10:28:21 2025 -0500

    fs/proc: fix softlockup in __read_vmcore (part 2)
    
    commit cbc5dde0a461240046e8a41c43d7c3b76d5db952 upstream.
    
    Since commit 5cbcb62dddf5 ("fs/proc: fix softlockup in __read_vmcore") the
    number of softlockups in __read_vmcore at kdump time have gone down, but
    they still happen sometimes.
    
    In a memory constrained environment like the kdump image, a softlockup is
    not just a harmless message, but it can interfere with things like RCU
    freeing memory, causing the crashdump to get stuck.
    
    The second loop in __read_vmcore has a lot more opportunities for natural
    sleep points, like scheduling out while waiting for a data write to
    happen, but apparently that is not always enough.
    
    Add a cond_resched() to the second loop in __read_vmcore to (hopefully)
    get rid of the softlockups.
    
    Link: https://lkml.kernel.org/r/20250110102821.2a37581b@fangorn
    Fixes: 5cbcb62dddf5 ("fs/proc: fix softlockup in __read_vmcore")
    Signed-off-by: Rik van Riel <riel@surriel.com>
    Reported-by: Breno Leitao <leitao@debian.org>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/qnx6: Fix building with GCC 15 [+ + +]
Author: Brahmajit Das <brahmajit.xyz@gmail.com>
Date:   Sat Oct 5 01:21:32 2024 +0530

    fs/qnx6: Fix building with GCC 15
    
    [ Upstream commit 989e0cdc0f18a594b25cabc60426d29659aeaf58 ]
    
    qnx6_checkroot() had been using weirdly spelled initializer - it needed
    to initialize 3-element arrays of char and it used NUL-padded
    3-character string literals (i.e. 4-element initializers, with
    completely pointless zeroes at the end).
    
    That had been spotted by gcc-15[*]; prior to that gcc quietly dropped
    the 4th element of initializers.
    
    However, none of that had been needed in the first place - all this
    array is used for is checking that the first directory entry in root
    directory is "." and the second - "..".  The check had been expressed as
    a loop, using that match_root[] array.  Since there is no chance that we
    ever want to extend that list of entries, the entire thing is much too
    fancy for its own good; what we need is just a couple of explicit
    memcmp() and that's it.
    
    [*]: fs/qnx6/inode.c: In function ‘qnx6_checkroot’:
    fs/qnx6/inode.c:182:41: error: initializer-string for array of ‘char’ is too long [-Werror=unterminated-string-initialization]
      182 |         static char match_root[2][3] = {".\0\0", "..\0"};
          |                                         ^~~~~~~
    fs/qnx6/inode.c:182:50: error: initializer-string for array of ‘char’ is too long [-Werror=unterminated-string-initialization]
      182 |         static char match_root[2][3] = {".\0\0", "..\0"};
          |                                                  ^~~~~~
    
    Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
    Link: https://lore.kernel.org/r/20241004195132.1393968-1-brahmajit.xyz@gmail.com
    Acked-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: fix missing declaration of init_files [+ + +]
Author: Zhang Kunbo <zhangkunbo@huawei.com>
Date:   Tue Dec 17 07:18:36 2024 +0000

    fs: fix missing declaration of init_files
    
    [ Upstream commit 2b2fc0be98a828cf33a88a28e9745e8599fb05cf ]
    
    fs/file.c should include include/linux/init_task.h  for
     declaration of init_files. This fixes the sparse warning:
    
    fs/file.c:501:21: warning: symbol 'init_files' was not declared. Should it be static?
    
    Signed-off-by: Zhang Kunbo <zhangkunbo@huawei.com>
    Link: https://lore.kernel.org/r/20241217071836.2634868-1-zhangkunbo@huawei.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: sim: lock up configfs that an instantiated device depends on [+ + +]
Author: Koichiro Den <koichiro.den@canonical.com>
Date:   Fri Jan 3 23:18:29 2025 +0900

    gpio: sim: lock up configfs that an instantiated device depends on
    
    [ Upstream commit 8bd76b3d3f3af7ac2898b6a27ad90c444fec418f ]
    
    Once a sim device is instantiated and actively used, allowing rmdir for
    its configfs serves no purpose and can be confusing. Effectively,
    arbitrary users start depending on its existence.
    
    Make the subsystem itself depend on the configfs entry for a sim device
    while it is in active use.
    
    Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
    Link: https://lore.kernel.org/r/20250103141829.430662-5-koichiro.den@canonical.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: virtuser: lock up configfs that an instantiated device depends on [+ + +]
Author: Koichiro Den <koichiro.den@canonical.com>
Date:   Fri Jan 3 23:18:28 2025 +0900

    gpio: virtuser: lock up configfs that an instantiated device depends on
    
    [ Upstream commit c7c434c1dba955005f5161dae73f09c0a922cfa7 ]
    
    Once a virtuser device is instantiated and actively used, allowing rmdir
    for its configfs serves no purpose and can be confusing. Userspace
    interacts with the virtual consumer at arbitrary times, meaning it
    depends on its existence.
    
    Make the subsystem itself depend on the configfs entry for a virtuser
    device while it is in active use.
    
    Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
    Link: https://lore.kernel.org/r/20250103141829.430662-4-koichiro.den@canonical.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: xilinx: Convert gpio_lock to raw spinlock [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri Jan 10 11:33:54 2025 -0500

    gpio: xilinx: Convert gpio_lock to raw spinlock
    
    commit 9860370c2172704b6b4f0075a0c2a29fd84af96a upstream.
    
    irq_chip functions may be called in raw spinlock context. Therefore, we
    must also use a raw spinlock for our own internal locking.
    
    This fixes the following lockdep splat:
    
    [    5.349336] =============================
    [    5.353349] [ BUG: Invalid wait context ]
    [    5.357361] 6.13.0-rc5+ #69 Tainted: G        W
    [    5.363031] -----------------------------
    [    5.367045] kworker/u17:1/44 is trying to lock:
    [    5.371587] ffffff88018b02c0 (&chip->gpio_lock){....}-{3:3}, at: xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
    [    5.380079] other info that might help us debug this:
    [    5.385138] context-{5:5}
    [    5.387762] 5 locks held by kworker/u17:1/44:
    [    5.392123] #0: ffffff8800014958 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3204)
    [    5.402260] #1: ffffffc082fcbdd8 (deferred_probe_work){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3205)
    [    5.411528] #2: ffffff880172c900 (&dev->mutex){....}-{4:4}, at: __device_attach (drivers/base/dd.c:1006)
    [    5.419929] #3: ffffff88039c8268 (request_class#2){+.+.}-{4:4}, at: __setup_irq (kernel/irq/internals.h:156 kernel/irq/manage.c:1596)
    [    5.428331] #4: ffffff88039c80c8 (lock_class#2){....}-{2:2}, at: __setup_irq (kernel/irq/manage.c:1614)
    [    5.436472] stack backtrace:
    [    5.439359] CPU: 2 UID: 0 PID: 44 Comm: kworker/u17:1 Tainted: G        W          6.13.0-rc5+ #69
    [    5.448690] Tainted: [W]=WARN
    [    5.451656] Hardware name: xlnx,zynqmp (DT)
    [    5.455845] Workqueue: events_unbound deferred_probe_work_func
    [    5.461699] Call trace:
    [    5.464147] show_stack+0x18/0x24 C
    [    5.467821] dump_stack_lvl (lib/dump_stack.c:123)
    [    5.471501] dump_stack (lib/dump_stack.c:130)
    [    5.474824] __lock_acquire (kernel/locking/lockdep.c:4828 kernel/locking/lockdep.c:4898 kernel/locking/lockdep.c:5176)
    [    5.478758] lock_acquire (arch/arm64/include/asm/percpu.h:40 kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
    [    5.482429] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
    [    5.486797] xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
    [    5.490737] irq_enable (kernel/irq/internals.h:236 kernel/irq/chip.c:170 kernel/irq/chip.c:439 kernel/irq/chip.c:432 kernel/irq/chip.c:345)
    [    5.494060] __irq_startup (kernel/irq/internals.h:241 kernel/irq/chip.c:180 kernel/irq/chip.c:250)
    [    5.497645] irq_startup (kernel/irq/chip.c:270)
    [    5.501143] __setup_irq (kernel/irq/manage.c:1807)
    [    5.504728] request_threaded_irq (kernel/irq/manage.c:2208)
    
    Fixes: a32c7caea292 ("gpio: gpio-xilinx: Add interrupt support")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250110163354.2012654-1-sean.anderson@linux.dev
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gtp: Destroy device along with udp socket's netns dismantle. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jan 10 10:47:53 2025 +0900

    gtp: Destroy device along with udp socket's netns dismantle.
    
    [ Upstream commit eb28fd76c0a08a47b470677c6cef9dd1c60e92d1 ]
    
    gtp_newlink() links the device to a list in dev_net(dev) instead of
    src_net, where a udp tunnel socket is created.
    
    Even when src_net is removed, the device stays alive on dev_net(dev).
    Then, removing src_net triggers the splat below. [0]
    
    In this example, gtp0 is created in ns2, and the udp socket is created
    in ns1.
    
      ip netns add ns1
      ip netns add ns2
      ip -n ns1 link add netns ns2 name gtp0 type gtp role sgsn
      ip netns del ns1
    
    Let's link the device to the socket's netns instead.
    
    Now, gtp_net_exit_batch_rtnl() needs another netdev iteration to remove
    all gtp devices in the netns.
    
    [0]:
    ref_tracker: net notrefcnt@000000003d6e7d05 has 1/2 users at
         sk_alloc (./include/net/net_namespace.h:345 net/core/sock.c:2236)
         inet_create (net/ipv4/af_inet.c:326 net/ipv4/af_inet.c:252)
         __sock_create (net/socket.c:1558)
         udp_sock_create4 (net/ipv4/udp_tunnel_core.c:18)
         gtp_create_sock (./include/net/udp_tunnel.h:59 drivers/net/gtp.c:1423)
         gtp_create_sockets (drivers/net/gtp.c:1447)
         gtp_newlink (drivers/net/gtp.c:1507)
         rtnl_newlink (net/core/rtnetlink.c:3786 net/core/rtnetlink.c:3897 net/core/rtnetlink.c:4012)
         rtnetlink_rcv_msg (net/core/rtnetlink.c:6922)
         netlink_rcv_skb (net/netlink/af_netlink.c:2542)
         netlink_unicast (net/netlink/af_netlink.c:1321 net/netlink/af_netlink.c:1347)
         netlink_sendmsg (net/netlink/af_netlink.c:1891)
         ____sys_sendmsg (net/socket.c:711 net/socket.c:726 net/socket.c:2583)
         ___sys_sendmsg (net/socket.c:2639)
         __sys_sendmsg (net/socket.c:2669)
         do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
    
    WARNING: CPU: 1 PID: 60 at lib/ref_tracker.c:179 ref_tracker_dir_exit (lib/ref_tracker.c:179)
    Modules linked in:
    CPU: 1 UID: 0 PID: 60 Comm: kworker/u16:2 Not tainted 6.13.0-rc5-00147-g4c1224501e9d #5
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    Workqueue: netns cleanup_net
    RIP: 0010:ref_tracker_dir_exit (lib/ref_tracker.c:179)
    Code: 00 00 00 fc ff df 4d 8b 26 49 bd 00 01 00 00 00 00 ad de 4c 39 f5 0f 85 df 00 00 00 48 8b 74 24 08 48 89 df e8 a5 cc 12 02 90 <0f> 0b 90 48 8d 6b 44 be 04 00 00 00 48 89 ef e8 80 de 67 ff 48 89
    RSP: 0018:ff11000009a07b60 EFLAGS: 00010286
    RAX: 0000000000002bd3 RBX: ff1100000f4e1aa0 RCX: 1ffffffff0e40ac6
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8423ee3c
    RBP: ff1100000f4e1af0 R08: 0000000000000001 R09: fffffbfff0e395ae
    R10: 0000000000000001 R11: 0000000000036001 R12: ff1100000f4e1af0
    R13: dead000000000100 R14: ff1100000f4e1af0 R15: dffffc0000000000
    FS:  0000000000000000(0000) GS:ff1100006ce80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f9b2464bd98 CR3: 0000000005286005 CR4: 0000000000771ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn (kernel/panic.c:748)
     ? ref_tracker_dir_exit (lib/ref_tracker.c:179)
     ? report_bug (lib/bug.c:201 lib/bug.c:219)
     ? handle_bug (arch/x86/kernel/traps.c:285)
     ? exc_invalid_op (arch/x86/kernel/traps.c:309 (discriminator 1))
     ? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:621)
     ? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/irqflags.h:42 ./arch/x86/include/asm/irqflags.h:97 ./arch/x86/include/asm/irqflags.h:155 ./include/linux/spinlock_api_smp.h:151 kernel/locking/spinlock.c:194)
     ? ref_tracker_dir_exit (lib/ref_tracker.c:179)
     ? __pfx_ref_tracker_dir_exit (lib/ref_tracker.c:158)
     ? kfree (mm/slub.c:4613 mm/slub.c:4761)
     net_free (net/core/net_namespace.c:476 net/core/net_namespace.c:467)
     cleanup_net (net/core/net_namespace.c:664 (discriminator 3))
     process_one_work (kernel/workqueue.c:3229)
     worker_thread (kernel/workqueue.c:3304 kernel/workqueue.c:3391)
     kthread (kernel/kthread.c:389)
     ret_from_fork (arch/x86/kernel/process.c:147)
     ret_from_fork_asm (arch/x86/entry/entry_64.S:257)
     </TASK>
    
    Fixes: 459aa660eb1d ("gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)")
    Reported-by: Xiao Liang <shaw.leon@gmail.com>
    Closes: https://lore.kernel.org/netdev/20250104125732.17335-1-shaw.leon@gmail.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gtp: Use for_each_netdev_rcu() in gtp_genl_dump_pdp(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jan 10 10:47:52 2025 +0900

    gtp: Use for_each_netdev_rcu() in gtp_genl_dump_pdp().
    
    [ Upstream commit 46841c7053e6d25fb33e0534ef023833bf03e382 ]
    
    gtp_newlink() links the gtp device to a list in dev_net(dev).
    
    However, even after the gtp device is moved to another netns,
    it stays on the list but should be invisible.
    
    Let's use for_each_netdev_rcu() for netdev traversal in
    gtp_genl_dump_pdp().
    
    Note that gtp_dev_list is no longer used under RCU, so list
    helpers are converted to the non-RCU variant.
    
    Fixes: 459aa660eb1d ("gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)")
    Reported-by: Xiao Liang <shaw.leon@gmail.com>
    Closes: https://lore.kernel.org/netdev/CABAhCOQdBL6h9M2C+kd+bGivRJ9Q72JUxW+-gur0nub_=PmFPA@mail.gmail.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hfs: Sanity check the root record [+ + +]
Author: Leo Stone <leocstone@gmail.com>
Date:   Sat Nov 30 21:14:19 2024 -0800

    hfs: Sanity check the root record
    
    [ Upstream commit b905bafdea21a75d75a96855edd9e0b6051eee30 ]
    
    In the syzbot reproducer, the hfs_cat_rec for the root dir has type
    HFS_CDR_FIL after being read with hfs_bnode_read() in hfs_super_fill().
    This indicates it should be used as an hfs_cat_file, which is 102 bytes.
    Only the first 70 bytes of that struct are initialized, however,
    because the entrylength passed into hfs_bnode_read() is still the length of
    a directory record. This causes uninitialized values to be used later on,
    when the hfs_cat_rec union is treated as the larger hfs_cat_file struct.
    
    Add a check to make sure the retrieved record has the correct type
    for the root directory (HFS_CDR_DIR), and make sure we load the correct
    number of bytes for a directory record.
    
    Reported-by: syzbot+2db3c7526ba68f4ea776@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=2db3c7526ba68f4ea776
    Tested-by: syzbot+2db3c7526ba68f4ea776@syzkaller.appspotmail.com
    Tested-by: Leo Stone <leocstone@gmail.com>
    Signed-off-by: Leo Stone <leocstone@gmail.com>
    Link: https://lore.kernel.org/r/20241201051420.77858-1-leocstone@gmail.com
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hrtimers: Handle CPU state correctly on hotplug [+ + +]
Author: Koichiro Den <koichiro.den@canonical.com>
Date:   Fri Dec 20 22:44:21 2024 +0900

    hrtimers: Handle CPU state correctly on hotplug
    
    commit 2f8dea1692eef2b7ba6a256246ed82c365fdc686 upstream.
    
    Consider a scenario where a CPU transitions from CPUHP_ONLINE to halfway
    through a CPU hotunplug down to CPUHP_HRTIMERS_PREPARE, and then back to
    CPUHP_ONLINE:
    
    Since hrtimers_prepare_cpu() does not run, cpu_base.hres_active remains set
    to 1 throughout. However, during a CPU unplug operation, the tick and the
    clockevents are shut down at CPUHP_AP_TICK_DYING. On return to the online
    state, for instance CFS incorrectly assumes that the hrtick is already
    active, and the chance of the clockevent device to transition to oneshot
    mode is also lost forever for the CPU, unless it goes back to a lower state
    than CPUHP_HRTIMERS_PREPARE once.
    
    This round-trip reveals another issue; cpu_base.online is not set to 1
    after the transition, which appears as a WARN_ON_ONCE in enqueue_hrtimer().
    
    Aside of that, the bulk of the per CPU state is not reset either, which
    means there are dangling pointers in the worst case.
    
    Address this by adding a corresponding startup() callback, which resets the
    stale per CPU state and sets the online flag.
    
    [ tglx: Make the new callback unconditionally available, remove the online
            modification in the prepare() callback and clear the remaining
            state in the starting callback instead of the prepare callback ]
    
    Fixes: 5c0930ccaad5 ("hrtimers: Push pending hrtimers away from outgoing CPU earlier")
    Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20241220134421.3809834-1-koichiro.den@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (ltc2991) Fix mixed signed/unsigned in DIV_ROUND_CLOSEST [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Wed Jan 15 14:48:27 2025 -0600

    hwmon: (ltc2991) Fix mixed signed/unsigned in DIV_ROUND_CLOSEST
    
    [ Upstream commit e9b24deb84863c5a77dda5be57b6cb5bf4127b85 ]
    
    Fix use of DIV_ROUND_CLOSEST where a possibly negative value is divided
    by an unsigned type by casting the unsigned type to the signed type of
    the same size (st->r_sense_uohm[channel] has type of u32).
    
    The docs on the DIV_ROUND_CLOSEST macro explain that dividing a negative
    value by an unsigned type is undefined behavior. The actual behavior is
    that it converts both values to unsigned before doing the division, for
    example:
    
        int ret = DIV_ROUND_CLOSEST(-100, 3U);
    
    results in ret == 1431655732 instead of -33.
    
    Fixes: 2b9ea4262ae9 ("hwmon: Add driver for ltc2991")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20250115-hwmon-ltc2991-fix-div-round-closest-v1-1-b4929667e457@baylibre.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix division of negative numbers [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Tue Jan 14 15:45:52 2025 -0600

    hwmon: (tmp513) Fix division of negative numbers
    
    [ Upstream commit e2c68cea431d65292b592c9f8446c918d45fcf78 ]
    
    Fix several issues with division of negative numbers in the tmp513
    driver.
    
    The docs on the DIV_ROUND_CLOSEST macro explain that dividing a negative
    value by an unsigned type is undefined behavior. The driver was doing
    this in several places, i.e. data->shunt_uohms has type of u32. The
    actual "undefined" behavior is that it converts both values to unsigned
    before doing the division, for example:
    
        int ret = DIV_ROUND_CLOSEST(-100, 3U);
    
    results in ret == 1431655732 instead of -33.
    
    Furthermore the MILLI macro has a type of unsigned long. Multiplying a
    signed long by an unsigned long results in an unsigned long.
    
    So, we need to cast both MILLI and data data->shunt_uohms to long when
    using the DIV_ROUND_CLOSEST macro.
    
    Fixes: f07f9d2467f4 ("hwmon: (tmp513) Use SI constants from units.h")
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20250114-fix-si-prefix-macro-sign-bugs-v1-1-696fd8d10f00@baylibre.com
    [groeck: Drop some continuation lines]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: atr: Fix client detach [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Date:   Fri Nov 22 14:26:18 2024 +0200

    i2c: atr: Fix client detach
    
    commit cefc479cbb50399dec0c8e996f3539c48a1ee9dd upstream.
    
    i2c-atr catches the BUS_NOTIFY_DEL_DEVICE event on the bus and removes
    the translation by calling i2c_atr_detach_client().
    
    However, BUS_NOTIFY_DEL_DEVICE happens when the device is about to be
    removed from this bus, i.e. before removal, and thus before calling
    .remove() on the driver. If the driver happens to do any i2c
    transactions in its remove(), they will fail.
    
    Fix this by catching BUS_NOTIFY_REMOVED_DEVICE instead, thus removing
    the translation only after the device is actually removed.
    
    Fixes: a076a860acae ("media: i2c: add I2C Address Translator (ATR) support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
    Tested-by: Romain Gantois <romain.gantois@bootlin.com>
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: core: fix reference leak in i2c_register_adapter() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Wed Dec 11 12:08:03 2024 +0900

    i2c: core: fix reference leak in i2c_register_adapter()
    
    [ Upstream commit 3f8c4f5e9a57868fa107016c81165686d23325f2 ]
    
    The reference count of the device incremented in device_initialize() is
    not decremented when device_add() fails. Add a put_device() call before
    returning from the function.
    
    This bug was found by an experimental static analysis tool that I am
    developing.
    
    Fixes: 60f68597024d ("i2c: core: Setup i2c_adapter runtime-pm before calling device_add()")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: mux: demux-pinctrl: check initial mux selection, too [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Wed Jan 15 08:29:45 2025 +0100

    i2c: mux: demux-pinctrl: check initial mux selection, too
    
    [ Upstream commit ca89f73394daf92779ddaa37b42956f4953f3941 ]
    
    When misconfigured, the initial setup of the current mux channel can
    fail, too. It must be checked as well.
    
    Fixes: 50a5ba876908 ("i2c: mux: demux-pinctrl: add driver")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: rcar: fix NACK handling when being a target [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Wed Jan 15 13:36:23 2025 +0100

    i2c: rcar: fix NACK handling when being a target
    
    [ Upstream commit 093f70c134f70e4632b295240f07d2b50b74e247 ]
    
    When this controller is a target, the NACK handling had two issues.
    First, the return value from the backend was not checked on the initial
    WRITE_REQUESTED. So, the driver missed to send a NACK in this case.
    Also, the NACK always arrives one byte late on the bus, even in the
    WRITE_RECEIVED case. This seems to be a HW issue. We should then not
    rely on the backend to correctly NACK the superfluous byte as well. Fix
    both issues by introducing a flag which gets set whenever the backend
    requests a NACK and keep sending it until we get a STOP condition.
    
    Fixes: de20d1857dd6 ("i2c: rcar: add slave support")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: testunit: on errors, repeat NACK until STOP [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Wed Jan 15 17:23:47 2025 +0100

    i2c: testunit: on errors, repeat NACK until STOP
    
    [ Upstream commit 6ad30f7890423341f4b79329af1f9b9bb3cdec03 ]
    
    This backend requests a NACK from the controller driver when it detects
    an error. If that request gets ignored from some reason, subsequent
    accesses will wrongly be handled OK. To fix this, an error now changes
    the state machine, so the backend will report NACK until a STOP
    condition has been detected. This make the driver more robust against
    controllers which will sadly apply the NACK not to the current byte but
    the next one.
    
    Fixes: a8335c64c5f0 ("i2c: add slave testunit driver")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: Add correct PHY lane assignment [+ + +]
Author: Karol Kolacinski <karol.kolacinski@intel.com>
Date:   Tue Nov 5 13:29:16 2024 +0100

    ice: Add correct PHY lane assignment
    
    [ Upstream commit 258f5f905815979f15d5151d2ea4f20d8e057fe1 ]
    
    Driver always naively assumes, that for PTP purposes, PHY lane to
    configure is corresponding to PF ID.
    
    This is not true for some port configurations, e.g.:
    - 2x50G per quad, where lanes used are 0 and 2 on each quad, but PF IDs
      are 0 and 1
    - 100G per quad on 2 quads, where lanes used are 0 and 4, but PF IDs are
      0 and 1
    
    Use correct PHY lane assignment by getting and parsing port options.
    This is read from the NVM by the FW and provided to the driver with
    the indication of active port split.
    
    Remove ice_is_muxed_topo(), which is no longer needed.
    
    Fixes: 4409ea1726cb ("ice: Adjust PTP init for 2x50G E825C devices")
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Arkadiusz Kubalewski <Arkadiusz.kubalewski@intel.com>
    Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
    Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Add ice_get_ctrl_ptp() wrapper to simplify the code [+ + +]
Author: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
Date:   Wed Aug 21 15:09:54 2024 +0200

    ice: Add ice_get_ctrl_ptp() wrapper to simplify the code
    
    [ Upstream commit 97ed20a01f5b96e8738b53f56ae84b06953a2853 ]
    
    Add ice_get_ctrl_ptp() wrapper to simplify the PTP support code
    in the functions that do not use ctrl_pf directly.
    Add the control PF pointer to struct ice_adapter
    Rearrange fields in struct ice_adapter
    
    Signed-off-by: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Stable-dep-of: 258f5f905815 ("ice: Add correct PHY lane assignment")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Fix E825 initialization [+ + +]
Author: Karol Kolacinski <karol.kolacinski@intel.com>
Date:   Tue Nov 5 13:29:13 2024 +0100

    ice: Fix E825 initialization
    
    [ Upstream commit d79c304c76e9b30ff5527afc176b5c4f9f0374b6 ]
    
    Current implementation checks revision of all PHYs on all PFs, which is
    incorrect and may result in initialization failure. Check only the
    revision of the current PHY.
    
    Fixes: 7cab44f1c35f ("ice: Introduce ETH56G PHY model for E825C products")
    Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
    Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Fix ETH56G FC-FEC Rx offset value [+ + +]
Author: Karol Kolacinski <karol.kolacinski@intel.com>
Date:   Tue Nov 5 13:29:15 2024 +0100

    ice: Fix ETH56G FC-FEC Rx offset value
    
    [ Upstream commit 2e60560f1ec9b722f9c6699ec5d966f1732d14dd ]
    
    Fix ETH56G FC-FEC incorrect Rx offset value by changing it from -255.96
    to -469.26 ns.
    
    Those values are derived from HW spec and reflect internal delays.
    Hex value is a fixed point representation in Q23.9 format.
    
    Fixes: 7cab44f1c35f ("ice: Introduce ETH56G PHY model for E825C products")
    Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Fix quad registers read on E825 [+ + +]
Author: Karol Kolacinski <karol.kolacinski@intel.com>
Date:   Tue Nov 5 13:29:14 2024 +0100

    ice: Fix quad registers read on E825
    
    [ Upstream commit dc26548d729e5f732197d2b210fb77c745b01495 ]
    
    Quad registers are read/written incorrectly. E825 devices always use
    quad 0 address and differentiate between the PHYs by changing SBQ
    destination device (phy_0 or phy_0_peer).
    
    Add helpers for reading/writing PTP registers shared per quad and use
    correct quad address and SBQ destination device based on port.
    
    Fixes: 7cab44f1c35f ("ice: Introduce ETH56G PHY model for E825C products")
    Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
    Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Introduce ice_get_phy_model() wrapper [+ + +]
Author: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
Date:   Wed Aug 21 15:09:53 2024 +0200

    ice: Introduce ice_get_phy_model() wrapper
    
    [ Upstream commit 5e0776451d89eefe66b19e010e48ece1cca07e58 ]
    
    Introduce ice_get_phy_model() to improve code readability
    
    Signed-off-by: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Stable-dep-of: 258f5f905815 ("ice: Add correct PHY lane assignment")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Use ice_adapter for PTP shared data instead of auxdev [+ + +]
Author: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
Date:   Wed Aug 21 15:09:56 2024 +0200

    ice: Use ice_adapter for PTP shared data instead of auxdev
    
    [ Upstream commit e800654e85b5b27966fc6493201f5f8cf658beb6 ]
    
    Use struct ice_adapter to hold shared PTP data and control PTP
    related actions instead of auxbus. This allows significant code
    simplification and faster access to the container fields used in
    the PTP support code.
    
    Move the PTP port list to the ice_adapter container to simplify
    the code and avoid race conditions which could occur due to the
    synchronous nature of the initialization/access and
    certain memory saving can be achieved by moving PTP data into
    the ice_adapter itself.
    
    Signed-off-by: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Stable-dep-of: 258f5f905815 ("ice: Add correct PHY lane assignment")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iomap: avoid avoid truncating 64-bit offset to 32 bits [+ + +]
Author: Marco Nelissen <marco.nelissen@gmail.com>
Date:   Wed Jan 8 20:11:50 2025 -0800

    iomap: avoid avoid truncating 64-bit offset to 32 bits
    
    [ Upstream commit c13094b894de289514d84b8db56d1f2931a0bade ]
    
    on 32-bit kernels, iomap_write_delalloc_scan() was inadvertently using a
    32-bit position due to folio_next_index() returning an unsigned long.
    This could lead to an infinite loop when writing to an xfs filesystem.
    
    Signed-off-by: Marco Nelissen <marco.nelissen@gmail.com>
    Link: https://lore.kernel.org/r/20250109041253.2494374-1-marco.nelissen@gmail.com
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/gic-v3-its: Don't enable interrupts in its_irq_set_vcpu_affinity() [+ + +]
Author: Tomas Krcka <krckatom@amazon.de>
Date:   Mon Dec 30 15:08:25 2024 +0000

    irqchip/gic-v3-its: Don't enable interrupts in its_irq_set_vcpu_affinity()
    
    commit 35cb2c6ce7da545f3b5cb1e6473ad7c3a6f08310 upstream.
    
    The following call-chain leads to enabling interrupts in a nested interrupt
    disabled section:
    
    irq_set_vcpu_affinity()
      irq_get_desc_lock()
         raw_spin_lock_irqsave()   <--- Disable interrupts
      its_irq_set_vcpu_affinity()
         guard(raw_spinlock_irq)   <--- Enables interrupts when leaving the guard()
      irq_put_desc_unlock()        <--- Warns because interrupts are enabled
    
    This was broken in commit b97e8a2f7130, which replaced the original
    raw_spin_[un]lock() pair with guard(raw_spinlock_irq).
    
    Fix the issue by using guard(raw_spinlock).
    
    [ tglx: Massaged change log ]
    
    Fixes: b97e8a2f7130 ("irqchip/gic-v3-its: Fix potential race condition in its_vlpi_prop_update()")
    Signed-off-by: Tomas Krcka <krckatom@amazon.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20241230150825.62894-1-krckatom@amazon.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
irqchip/gic-v3: Handle CPU_PM_ENTER_FAILED correctly [+ + +]
Author: Yogesh Lal <quic_ylal@quicinc.com>
Date:   Fri Dec 20 15:09:07 2024 +0530

    irqchip/gic-v3: Handle CPU_PM_ENTER_FAILED correctly
    
    commit 0d62a49ab55c99e8deb4593b8d9f923de1ab5c18 upstream.
    
    When a CPU attempts to enter low power mode, it disables the redistributor
    and Group 1 interrupts and reinitializes the system registers upon wakeup.
    
    If the transition into low power mode fails, then the CPU_PM framework
    invokes the PM notifier callback with CPU_PM_ENTER_FAILED to allow the
    drivers to undo the state changes.
    
    The GIC V3 driver ignores CPU_PM_ENTER_FAILED, which leaves the GIC in
    disabled state.
    
    Handle CPU_PM_ENTER_FAILED in the same way as CPU_PM_EXIT to restore normal
    operation.
    
    [ tglx: Massage change log, add Fixes tag ]
    
    Fixes: 3708d52fc6bb ("irqchip: gic-v3: Implement CPU PM notifier")
    Signed-off-by: Yogesh Lal <quic_ylal@quicinc.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20241220093907.2747601-1-quic_ylal@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
irqchip: Plug a OF node reference leak in platform_irqchip_probe() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Sun Dec 15 12:39:45 2024 +0900

    irqchip: Plug a OF node reference leak in platform_irqchip_probe()
    
    commit 9322d1915f9d976ee48c09d800fbd5169bc2ddcc upstream.
    
    platform_irqchip_probe() leaks a OF node when irq_init_cb() fails. Fix it
    by declaring par_np with the __free(device_node) cleanup construct.
    
    This bug was found by an experimental static analysis tool that I am
    developing.
    
    Fixes: f8410e626569 ("irqchip: Add IRQCHIP_PLATFORM_DRIVER_BEGIN/END and IRQCHIP_MATCH helper macros")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20241215033945.3414223-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kheaders: Ignore silly-rename files [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Fri Dec 13 13:50:01 2024 +0000

    kheaders: Ignore silly-rename files
    
    [ Upstream commit 973b710b8821c3401ad7a25360c89e94b26884ac ]
    
    Tell tar to ignore silly-rename files (".__afs*" and ".nfs*") when building
    the header archive.  These occur when a file that is open is unlinked
    locally, but hasn't yet been closed.  Such files are visible to the user
    via the getdents() syscall and so programs may want to do things with them.
    
    During the kernel build, such files may be made during the processing of
    header files and the cleanup may get deferred by fput() which may result in
    tar seeing these files when it reads the directory, but they may have
    disappeared by the time it tries to open them, causing tar to fail with an
    error.  Further, we don't want to include them in the tarball if they still
    exist.
    
    With CONFIG_HEADERS_INSTALL=y, something like the following may be seen:
    
       find: './kernel/.tmp_cpio_dir/include/dt-bindings/reset/.__afs2080': No such file or directory
       tar: ./include/linux/greybus/.__afs3C95: File removed before we read it
    
    The find warning doesn't seem to cause a problem.
    
    Fix this by telling tar when called from in gen_kheaders.sh to exclude such
    files.  This only affects afs and nfs; cifs uses the Windows Hidden
    attribute to prevent the file from being seen.
    
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/20241213135013.2964079-2-dhowells@redhat.com
    cc: Masahiro Yamada <masahiroy@kernel.org>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    cc: linux-nfs@vger.kernel.org
    cc: linux-kernel@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.12.11 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jan 23 17:23:05 2025 +0100

    Linux 6.12.11
    
    Link: https://lore.kernel.org/r/20250121174523.429119852@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mac802154: check local interfaces before deleting sdata list [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Wed Nov 13 17:51:29 2024 +0800

    mac802154: check local interfaces before deleting sdata list
    
    [ Upstream commit eb09fbeb48709fe66c0d708aed81e910a577a30a ]
    
    syzkaller reported a corrupted list in ieee802154_if_remove. [1]
    
    Remove an IEEE 802.15.4 network interface after unregister an IEEE 802.15.4
    hardware device from the system.
    
    CPU0                                    CPU1
    ====                                    ====
    genl_family_rcv_msg_doit                ieee802154_unregister_hw
    ieee802154_del_iface                    ieee802154_remove_interfaces
    rdev_del_virtual_intf_deprecated        list_del(&sdata->list)
    ieee802154_if_remove
    list_del_rcu
    
    The net device has been unregistered, since the rcu grace period,
    unregistration must be run before ieee802154_if_remove.
    
    To avoid this issue, add a check for local->interfaces before deleting
    sdata list.
    
    [1]
    kernel BUG at lib/list_debug.c:58!
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 0 UID: 0 PID: 6277 Comm: syz-executor157 Not tainted 6.12.0-rc6-syzkaller-00005-g557329bcecc2 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    RIP: 0010:__list_del_entry_valid_or_report+0xf4/0x140 lib/list_debug.c:56
    Code: e8 a1 7e 00 07 90 0f 0b 48 c7 c7 e0 37 60 8c 4c 89 fe e8 8f 7e 00 07 90 0f 0b 48 c7 c7 40 38 60 8c 4c 89 fe e8 7d 7e 00 07 90 <0f> 0b 48 c7 c7 a0 38 60 8c 4c 89 fe e8 6b 7e 00 07 90 0f 0b 48 c7
    RSP: 0018:ffffc9000490f3d0 EFLAGS: 00010246
    RAX: 000000000000004e RBX: dead000000000122 RCX: d211eee56bb28d00
    RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
    RBP: ffff88805b278dd8 R08: ffffffff8174a12c R09: 1ffffffff2852f0d
    R10: dffffc0000000000 R11: fffffbfff2852f0e R12: dffffc0000000000
    R13: dffffc0000000000 R14: dead000000000100 R15: ffff88805b278cc0
    FS:  0000555572f94380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000056262e4a3000 CR3: 0000000078496000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     __list_del_entry_valid include/linux/list.h:124 [inline]
     __list_del_entry include/linux/list.h:215 [inline]
     list_del_rcu include/linux/rculist.h:157 [inline]
     ieee802154_if_remove+0x86/0x1e0 net/mac802154/iface.c:687
     rdev_del_virtual_intf_deprecated net/ieee802154/rdev-ops.h:24 [inline]
     ieee802154_del_iface+0x2c0/0x5c0 net/ieee802154/nl-phy.c:323
     genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
     genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
     genl_rcv_msg+0xb14/0xec0 net/netlink/genetlink.c:1210
     netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2551
     genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
     netlink_unicast_kernel net/netlink/af_netlink.c:1331 [inline]
     netlink_unicast+0x7f6/0x990 net/netlink/af_netlink.c:1357
     netlink_sendmsg+0x8e4/0xcb0 net/netlink/af_netlink.c:1901
     sock_sendmsg_nosec net/socket.c:729 [inline]
     __sock_sendmsg+0x221/0x270 net/socket.c:744
     ____sys_sendmsg+0x52a/0x7e0 net/socket.c:2607
     ___sys_sendmsg net/socket.c:2661 [inline]
     __sys_sendmsg+0x292/0x380 net/socket.c:2690
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Reported-and-tested-by: syzbot+985f827280dc3a6e7e92@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=985f827280dc3a6e7e92
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/20241113095129.1457225-1-lizhi.xu@windriver.com
    Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/kmemleak: fix percpu memory leak detection failure [+ + +]
Author: Guo Weikang <guoweikang.kernel@gmail.com>
Date:   Fri Dec 27 17:23:10 2024 +0800

    mm/kmemleak: fix percpu memory leak detection failure
    
    commit 76d5d4c53e68719c018691b19a961e78524a155c upstream.
    
    kmemleak_alloc_percpu gives an incorrect min_count parameter, causing
    percpu memory to be considered a gray object.
    
    Link: https://lkml.kernel.org/r/20241227092311.3572500-1-guoweikang.kernel@gmail.com
    Fixes: 8c8685928910 ("mm/kmemleak: use IS_ERR_PCPU() for pointer in the percpu address space")
    Signed-off-by: Guo Weikang <guoweikang.kernel@gmail.com>
    Acked-by: Uros Bizjak <ubizjak@gmail.com>
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Guo Weikang <guoweikang.kernel@gmail.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: clear uffd-wp PTE/PMD state on mremap() [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Jan 7 14:47:52 2025 +0000

    mm: clear uffd-wp PTE/PMD state on mremap()
    
    commit 0cef0bb836e3cfe00f08f9606c72abd72fe78ca3 upstream.
    
    When mremap()ing a memory region previously registered with userfaultfd as
    write-protected but without UFFD_FEATURE_EVENT_REMAP, an inconsistency in
    flag clearing leads to a mismatch between the vma flags (which have
    uffd-wp cleared) and the pte/pmd flags (which do not have uffd-wp
    cleared).  This mismatch causes a subsequent mprotect(PROT_WRITE) to
    trigger a warning in page_table_check_pte_flags() due to setting the pte
    to writable while uffd-wp is still set.
    
    Fix this by always explicitly clearing the uffd-wp pte/pmd flags on any
    such mremap() so that the values are consistent with the existing clearing
    of VM_UFFD_WP.  Be careful to clear the logical flag regardless of its
    physical form; a PTE bit, a swap PTE bit, or a PTE marker.  Cover PTE,
    huge PMD and hugetlb paths.
    
    Link: https://lkml.kernel.org/r/20250107144755.1871363-2-ryan.roberts@arm.com
    Co-developed-by: Mikołaj Lenczewski <miko.lenczewski@arm.com>
    Signed-off-by: Mikołaj Lenczewski <miko.lenczewski@arm.com>
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Closes: https://lore.kernel.org/linux-mm/810b44a8-d2ae-4107-b665-5a42eae2d948@arm.com/
    Fixes: 63b2d4174c4a ("userfaultfd: wp: add the writeprotect API to userfaultfd ioctl")
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: vmscan : pgdemote vmstat is not getting updated when MGLRU is enabled. [+ + +]
Author: Donet Tom <donettom@linux.ibm.com>
Date:   Thu Jan 9 00:05:39 2025 -0600

    mm: vmscan : pgdemote vmstat is not getting updated when MGLRU is enabled.
    
    commit bd3d56ffa2c450364acf02663ba88996da37079d upstream.
    
    When MGLRU is enabled, the pgdemote_kswapd, pgdemote_direct, and
    pgdemote_khugepaged stats in vmstat are not being updated.
    
    Commit f77f0c751478 ("mm,memcg: provide per-cgroup counters for NUMA
    balancing operations") moved the pgdemote vmstat update from
    demote_folio_list() to shrink_inactive_list(), which is in the normal LRU
    path.  As a result, the pgdemote stats are updated correctly for the
    normal LRU but not for MGLRU.
    
    To address this, we have added the pgdemote stat update in the
    evict_folios() function, which is in the MGLRU path.  With this patch, the
    pgdemote stats will now be updated correctly when MGLRU is enabled.
    
    Without this patch vmstat output when MGLRU is enabled
    ======================================================
    pgdemote_kswapd 0
    pgdemote_direct 0
    pgdemote_khugepaged 0
    
    With this patch vmstat output when MGLRU is enabled
    ===================================================
    pgdemote_kswapd 43234
    pgdemote_direct 4691
    pgdemote_khugepaged 0
    
    Link: https://lkml.kernel.org/r/20250109060540.451261-1-donettom@linux.ibm.com
    Fixes: f77f0c751478 ("mm,memcg: provide per-cgroup counters for NUMA balancing operations")
    Signed-off-by: Donet Tom <donettom@linux.ibm.com>
    Acked-by: Yu Zhao <yuzhao@google.com>
    Tested-by: Li Zhijian <lizhijian@fujitsu.com>
    Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
    Cc: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Kaiyang Zhao <kaiyang2@cs.cmu.edu>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Wei Xu <weixugc@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: be sure to send ack when mptcp-level window re-opens [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Jan 13 16:44:56 2025 +0100

    mptcp: be sure to send ack when mptcp-level window re-opens
    
    commit 2ca06a2f65310aeef30bb69b7405437a14766e4d upstream.
    
    mptcp_cleanup_rbuf() is responsible to send acks when the user-space
    reads enough data to update the receive windows significantly.
    
    It tries hard to avoid acquiring the subflow sockets locks by checking
    conditions similar to the ones implemented at the TCP level.
    
    To avoid too much code duplication - the MPTCP protocol can't reuse the
    TCP helpers as part of the relevant status is maintained into the msk
    socket - and multiple costly window size computation, mptcp_cleanup_rbuf
    uses a rough estimate for the most recently advertised window size:
    the MPTCP receive free space, as recorded as at last-ack time.
    
    Unfortunately the above does not allow mptcp_cleanup_rbuf() to detect
    a zero to non-zero win change in some corner cases, skipping the
    tcp_cleanup_rbuf call and leaving the peer stuck.
    
    After commit ea66758c1795 ("tcp: allow MPTCP to update the announced
    window"), MPTCP has actually cheap access to the announced window value.
    Use it in mptcp_cleanup_rbuf() for a more accurate ack generation.
    
    Fixes: e3859603ba13 ("mptcp: better msk receive window updates")
    Cc: stable@vger.kernel.org
    Reported-by: Jakub Kicinski <kuba@kernel.org>
    Closes: https://lore.kernel.org/20250107131845.5e5de3c5@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250113-net-mptcp-connect-st-flakes-v1-1-0d986ee7b1b6@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix spurious wake-up on under memory pressure [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Jan 13 16:44:57 2025 +0100

    mptcp: fix spurious wake-up on under memory pressure
    
    commit e226d9259dc4f5d2c19e6682ad1356fa97cf38f4 upstream.
    
    The wake-up condition currently implemented by mptcp_epollin_ready()
    is wrong, as it could mark the MPTCP socket as readable even when
    no data are present and the system is under memory pressure.
    
    Explicitly check for some data being available in the receive queue.
    
    Fixes: 5684ab1a0eff ("mptcp: give rcvlowat some love")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250113-net-mptcp-connect-st-flakes-v1-2-0d986ee7b1b6@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Clear port select structure when fail to create [+ + +]
Author: Mark Zhang <markzhang@nvidia.com>
Date:   Wed Jan 15 13:39:07 2025 +0200

    net/mlx5: Clear port select structure when fail to create
    
    [ Upstream commit 5641e82cb55b4ecbc6366a499300917d2f3e6790 ]
    
    Clear the port select structure on error so no stale values left after
    definers are destroyed. That's because the mlx5_lag_destroy_definers()
    always try to destroy all lag definers in the tt_map, so in the flow
    below lag definers get double-destroyed and cause kernel crash:
    
      mlx5_lag_port_sel_create()
        mlx5_lag_create_definers()
          mlx5_lag_create_definer()     <- Failed on tt 1
            mlx5_lag_destroy_definers() <- definers[tt=0] gets destroyed
      mlx5_lag_port_sel_create()
        mlx5_lag_create_definers()
          mlx5_lag_create_definer()     <- Failed on tt 0
            mlx5_lag_destroy_definers() <- definers[tt=0] gets double-destroyed
    
     Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
     Mem abort info:
       ESR = 0x0000000096000005
       EC = 0x25: DABT (current EL), IL = 32 bits
       SET = 0, FnV = 0
       EA = 0, S1PTW = 0
       FSC = 0x05: level 1 translation fault
     Data abort info:
       ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
       CM = 0, WnR = 0, TnD = 0, TagAccess = 0
       GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
     user pgtable: 64k pages, 48-bit VAs, pgdp=0000000112ce2e00
     [0000000000000008] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
     Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
     Modules linked in: iptable_raw bonding ip_gre ip6_gre gre ip6_tunnel tunnel6 geneve ip6_udp_tunnel udp_tunnel ipip tunnel4 ip_tunnel rdma_ucm(OE) rdma_cm(OE) iw_cm(OE) ib_ipoib(OE) ib_cm(OE) ib_umad(OE) mlx5_ib(OE) ib_uverbs(OE) mlx5_fwctl(OE) fwctl(OE) mlx5_core(OE) mlxdevm(OE) ib_core(OE) mlxfw(OE) memtrack(OE) mlx_compat(OE) openvswitch nsh nf_conncount psample xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xfrm_user xfrm_algo xt_addrtype iptable_filter iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter bridge stp llc netconsole overlay efi_pstore sch_fq_codel zram ip_tables crct10dif_ce qemu_fw_cfg fuse ipv6 crc_ccitt [last unloaded: mlx_compat(OE)]
      CPU: 3 UID: 0 PID: 217 Comm: kworker/u53:2 Tainted: G           OE      6.11.0+ #2
      Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
      Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
      Workqueue: mlx5_lag mlx5_do_bond_work [mlx5_core]
      pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : mlx5_del_flow_rules+0x24/0x2c0 [mlx5_core]
      lr : mlx5_lag_destroy_definer+0x54/0x100 [mlx5_core]
      sp : ffff800085fafb00
      x29: ffff800085fafb00 x28: ffff0000da0c8000 x27: 0000000000000000
      x26: ffff0000da0c8000 x25: ffff0000da0c8000 x24: ffff0000da0c8000
      x23: ffff0000c31f81a0 x22: 0400000000000000 x21: ffff0000da0c8000
      x20: 0000000000000000 x19: 0000000000000001 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffff8b0c9350
      x14: 0000000000000000 x13: ffff800081390d18 x12: ffff800081dc3cc0
      x11: 0000000000000001 x10: 0000000000000b10 x9 : ffff80007ab7304c
      x8 : ffff0000d00711f0 x7 : 0000000000000004 x6 : 0000000000000190
      x5 : ffff00027edb3010 x4 : 0000000000000000 x3 : 0000000000000000
      x2 : ffff0000d39b8000 x1 : ffff0000d39b8000 x0 : 0400000000000000
      Call trace:
       mlx5_del_flow_rules+0x24/0x2c0 [mlx5_core]
       mlx5_lag_destroy_definer+0x54/0x100 [mlx5_core]
       mlx5_lag_destroy_definers+0xa0/0x108 [mlx5_core]
       mlx5_lag_port_sel_create+0x2d4/0x6f8 [mlx5_core]
       mlx5_activate_lag+0x60c/0x6f8 [mlx5_core]
       mlx5_do_bond_work+0x284/0x5c8 [mlx5_core]
       process_one_work+0x170/0x3e0
       worker_thread+0x2d8/0x3e0
       kthread+0x11c/0x128
       ret_from_fork+0x10/0x20
      Code: a9025bf5 aa0003f6 a90363f7 f90023f9 (f9400400)
      ---[ end trace 0000000000000000 ]---
    
    Fixes: dc48516ec7d3 ("net/mlx5: Lag, add support to create definers for LAG")
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix a lockdep warning as part of the write combining test [+ + +]
Author: Yishai Hadas <yishaih@nvidia.com>
Date:   Wed Jan 15 13:39:05 2025 +0200

    net/mlx5: Fix a lockdep warning as part of the write combining test
    
    [ Upstream commit 1b10a519a45704d4b06ebd9245b272d145752c18 ]
    
    Fix a lockdep warning [1] observed during the write combining test.
    
    The warning indicates a potential nested lock scenario that could lead
    to a deadlock.
    
    However, this is a false positive alarm because the SF lock and its
    parent lock are distinct ones.
    
    The lockdep confusion arises because the locks belong to the same object
    class (i.e., struct mlx5_core_dev).
    
    To resolve this, the code has been refactored to avoid taking both
    locks. Instead, only the parent lock is acquired.
    
    [1]
    raw_ethernet_bw/2118 is trying to acquire lock:
    [  213.619032] ffff88811dd75e08 (&dev->wc_state_lock){+.+.}-{3:3}, at:
                   mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.620270]
    [  213.620270] but task is already holding lock:
    [  213.620943] ffff88810b585e08 (&dev->wc_state_lock){+.+.}-{3:3}, at:
                   mlx5_wc_support_get+0x10c/0x210 [mlx5_core]
    [  213.622045]
    [  213.622045] other info that might help us debug this:
    [  213.622778]  Possible unsafe locking scenario:
    [  213.622778]
    [  213.623465]        CPU0
    [  213.623815]        ----
    [  213.624148]   lock(&dev->wc_state_lock);
    [  213.624615]   lock(&dev->wc_state_lock);
    [  213.625071]
    [  213.625071]  *** DEADLOCK ***
    [  213.625071]
    [  213.625805]  May be due to missing lock nesting notation
    [  213.625805]
    [  213.626522] 4 locks held by raw_ethernet_bw/2118:
    [  213.627019]  #0: ffff88813f80d578 (&uverbs_dev->disassociate_srcu){.+.+}-{0:0},
                    at: ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
    [  213.628088]  #1: ffff88810fb23930 (&file->hw_destroy_rwsem){.+.+}-{3:3},
                    at: ib_init_ucontext+0x2d/0xf0 [ib_uverbs]
    [  213.629094]  #2: ffff88810fb23878 (&file->ucontext_lock){+.+.}-{3:3},
                    at: ib_init_ucontext+0x49/0xf0 [ib_uverbs]
    [  213.630106]  #3: ffff88810b585e08 (&dev->wc_state_lock){+.+.}-{3:3},
                    at: mlx5_wc_support_get+0x10c/0x210 [mlx5_core]
    [  213.631185]
    [  213.631185] stack backtrace:
    [  213.631718] CPU: 1 UID: 0 PID: 2118 Comm: raw_ethernet_bw Not tainted
                   6.12.0-rc7_internal_net_next_mlx5_89a0ad0 #1
    [  213.632722] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
                   rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [  213.633785] Call Trace:
    [  213.634099]
    [  213.634393]  dump_stack_lvl+0x7e/0xc0
    [  213.634806]  print_deadlock_bug+0x278/0x3c0
    [  213.635265]  __lock_acquire+0x15f4/0x2c40
    [  213.635712]  lock_acquire+0xcd/0x2d0
    [  213.636120]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.636722]  ? mlx5_ib_enable_lb+0x24/0xa0 [mlx5_ib]
    [  213.637277]  __mutex_lock+0x81/0xda0
    [  213.637697]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.638305]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.638902]  ? rcu_read_lock_sched_held+0x3f/0x70
    [  213.639400]  ? mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.640016]  mlx5_wc_support_get+0x18c/0x210 [mlx5_core]
    [  213.640615]  set_ucontext_resp+0x68/0x2b0 [mlx5_ib]
    [  213.641144]  ? debug_mutex_init+0x33/0x40
    [  213.641586]  mlx5_ib_alloc_ucontext+0x18e/0x7b0 [mlx5_ib]
    [  213.642145]  ib_init_ucontext+0xa0/0xf0 [ib_uverbs]
    [  213.642679]  ib_uverbs_handler_UVERBS_METHOD_GET_CONTEXT+0x95/0xc0
                    [ib_uverbs]
    [  213.643426]  ? _copy_from_user+0x46/0x80
    [  213.643878]  ib_uverbs_cmd_verbs+0xa6b/0xc80 [ib_uverbs]
    [  213.644426]  ? ib_uverbs_handler_UVERBS_METHOD_INVOKE_WRITE+0x130/0x130
                   [ib_uverbs]
    [  213.645213]  ? __lock_acquire+0xa99/0x2c40
    [  213.645675]  ? lock_acquire+0xcd/0x2d0
    [  213.646101]  ? ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
    [  213.646625]  ? reacquire_held_locks+0xcf/0x1f0
    [  213.647102]  ? do_user_addr_fault+0x45d/0x770
    [  213.647586]  ib_uverbs_ioctl+0xe0/0x170 [ib_uverbs]
    [  213.648102]  ? ib_uverbs_ioctl+0xc4/0x170 [ib_uverbs]
    [  213.648632]  __x64_sys_ioctl+0x4d3/0xaa0
    [  213.649060]  ? do_user_addr_fault+0x4a8/0x770
    [  213.649528]  do_syscall_64+0x6d/0x140
    [  213.649947]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [  213.650478] RIP: 0033:0x7fa179b0737b
    [  213.650893] Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d 4c
                   89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8
                   10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d
                   7d 2a 0f 00 f7 d8 64 89 01 48
    [  213.652619] RSP: 002b:00007ffd2e6d46e8 EFLAGS: 00000246 ORIG_RAX:
                   0000000000000010
    [  213.653390] RAX: ffffffffffffffda RBX: 00007ffd2e6d47f8 RCX:
                   00007fa179b0737b
    [  213.654084] RDX: 00007ffd2e6d47e0 RSI: 00000000c0181b01 RDI:
                   0000000000000003
    [  213.654767] RBP: 00007ffd2e6d47c0 R08: 00007fa1799be010 R09:
                   0000000000000002
    [  213.655453] R10: 00007ffd2e6d4960 R11: 0000000000000246 R12:
                   00007ffd2e6d487c
    [  213.656170] R13: 0000000000000027 R14: 0000000000000001 R15:
                   00007ffd2e6d4f70
    
    Fixes: d98995b4bf98 ("net/mlx5: Reimplement write combining test")
    Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
    Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix RDMA TX steering prio [+ + +]
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Wed Jan 15 13:39:04 2025 +0200

    net/mlx5: Fix RDMA TX steering prio
    
    [ Upstream commit c08d3e62b2e73e14da318a1d20b52d0486a28ee0 ]
    
    User added steering rules at RDMA_TX were being added to the first prio,
    which is the counters prio.
    Fix that so that they are correctly added to the BYPASS_PRIO instead.
    
    Fixes: 24670b1a3166 ("net/mlx5: Add support for RDMA TX steering")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: SF, Fix add port error handling [+ + +]
Author: Chris Mi <cmi@nvidia.com>
Date:   Wed Jan 15 13:39:06 2025 +0200

    net/mlx5: SF, Fix add port error handling
    
    [ Upstream commit 2011a2a18ef00b5b8e4b753acbe6451a8c5f2260 ]
    
    If failed to add SF, error handling doesn't delete the SF from the
    SF table. But the hw resources are deleted. So when unload driver,
    hw resources will be deleted again. Firmware will report syndrome
    0x68def3 which means "SF is not allocated can not deallocate".
    
    Fix it by delete SF from SF table if failed to add SF.
    
    Fixes: 2597ee190b4e ("net/mlx5: Call mlx5_sf_id_erase() once in mlx5_sf_dealloc()")
    Signed-off-by: Chris Mi <cmi@nvidia.com>
    Reviewed-by: Shay Drori <shayd@nvidia.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Always start IPsec sequence number from 1 [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Wed Jan 15 13:39:10 2025 +0200

    net/mlx5e: Always start IPsec sequence number from 1
    
    [ Upstream commit 7f95b0247764acd739d949ff247db4b76138e55a ]
    
    According to RFC4303, section "3.3.3. Sequence Number Generation",
    the first packet sent using a given SA will contain a sequence
    number of 1.
    
    This is applicable to both ESN and non-ESN mode, which was not covered
    in commit mentioned in Fixes line.
    
    Fixes: 3d42c8cc67a8 ("net/mlx5e: Ensure that IPsec sequence packet number starts from 1")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Fix inversion dependency warning while enabling IPsec tunnel [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Wed Jan 15 13:39:08 2025 +0200

    net/mlx5e: Fix inversion dependency warning while enabling IPsec tunnel
    
    [ Upstream commit 2c3688090f8a1f085230aa839cc63e4a7b977df0 ]
    
    Attempt to enable IPsec packet offload in tunnel mode in debug kernel
    generates the following kernel panic, which is happening due to two
    issues:
    1. In SA add section, the should be _bh() variant when marking SA mode.
    2. There is not needed flush_workqueue in SA delete routine. It is not
    needed as at this stage as it is removed from SADB and the running work
    will be canceled later in SA free.
    
     =====================================================
     WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
     6.12.0+ #4 Not tainted
     -----------------------------------------------------
     charon/1337 [HC0[0]:SC0[4]:HE1:SE0] is trying to acquire:
     ffff88810f365020 (&xa->xa_lock#24){+.+.}-{3:3}, at: mlx5e_xfrm_del_state+0xca/0x1e0 [mlx5_core]
    
     and this task is already holding:
     ffff88813e0f0d48 (&x->lock){+.-.}-{3:3}, at: xfrm_state_delete+0x16/0x30
     which would create a new lock dependency:
      (&x->lock){+.-.}-{3:3} -> (&xa->xa_lock#24){+.+.}-{3:3}
    
     but this new dependency connects a SOFTIRQ-irq-safe lock:
      (&x->lock){+.-.}-{3:3}
    
     ... which became SOFTIRQ-irq-safe at:
       lock_acquire+0x1be/0x520
       _raw_spin_lock_bh+0x34/0x40
       xfrm_timer_handler+0x91/0xd70
       __hrtimer_run_queues+0x1dd/0xa60
       hrtimer_run_softirq+0x146/0x2e0
       handle_softirqs+0x266/0x860
       irq_exit_rcu+0x115/0x1a0
       sysvec_apic_timer_interrupt+0x6e/0x90
       asm_sysvec_apic_timer_interrupt+0x16/0x20
       default_idle+0x13/0x20
       default_idle_call+0x67/0xa0
       do_idle+0x2da/0x320
       cpu_startup_entry+0x50/0x60
       start_secondary+0x213/0x2a0
       common_startup_64+0x129/0x138
    
     to a SOFTIRQ-irq-unsafe lock:
      (&xa->xa_lock#24){+.+.}-{3:3}
    
     ... which became SOFTIRQ-irq-unsafe at:
     ...
       lock_acquire+0x1be/0x520
       _raw_spin_lock+0x2c/0x40
       xa_set_mark+0x70/0x110
       mlx5e_xfrm_add_state+0xe48/0x2290 [mlx5_core]
       xfrm_dev_state_add+0x3bb/0xd70
       xfrm_add_sa+0x2451/0x4a90
       xfrm_user_rcv_msg+0x493/0x880
       netlink_rcv_skb+0x12e/0x380
       xfrm_netlink_rcv+0x6d/0x90
       netlink_unicast+0x42f/0x740
       netlink_sendmsg+0x745/0xbe0
       __sock_sendmsg+0xc5/0x190
       __sys_sendto+0x1fe/0x2c0
       __x64_sys_sendto+0xdc/0x1b0
       do_syscall_64+0x6d/0x140
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
     other info that might help us debug this:
    
      Possible interrupt unsafe locking scenario:
    
            CPU0                    CPU1
            ----                    ----
       lock(&xa->xa_lock#24);
                                    local_irq_disable();
                                    lock(&x->lock);
                                    lock(&xa->xa_lock#24);
       <Interrupt>
         lock(&x->lock);
    
      *** DEADLOCK ***
    
     2 locks held by charon/1337:
      #0: ffffffff87f8f858 (&net->xfrm.xfrm_cfg_mutex){+.+.}-{4:4}, at: xfrm_netlink_rcv+0x5e/0x90
      #1: ffff88813e0f0d48 (&x->lock){+.-.}-{3:3}, at: xfrm_state_delete+0x16/0x30
    
     the dependencies between SOFTIRQ-irq-safe lock and the holding lock:
     -> (&x->lock){+.-.}-{3:3} ops: 29 {
        HARDIRQ-ON-W at:
                         lock_acquire+0x1be/0x520
                         _raw_spin_lock_bh+0x34/0x40
                         xfrm_alloc_spi+0xc0/0xe60
                         xfrm_alloc_userspi+0x5f6/0xbc0
                         xfrm_user_rcv_msg+0x493/0x880
                         netlink_rcv_skb+0x12e/0x380
                         xfrm_netlink_rcv+0x6d/0x90
                         netlink_unicast+0x42f/0x740
                         netlink_sendmsg+0x745/0xbe0
                         __sock_sendmsg+0xc5/0x190
                         __sys_sendto+0x1fe/0x2c0
                         __x64_sys_sendto+0xdc/0x1b0
                         do_syscall_64+0x6d/0x140
                         entry_SYSCALL_64_after_hwframe+0x4b/0x53
        IN-SOFTIRQ-W at:
                         lock_acquire+0x1be/0x520
                         _raw_spin_lock_bh+0x34/0x40
                         xfrm_timer_handler+0x91/0xd70
                         __hrtimer_run_queues+0x1dd/0xa60
                         hrtimer_run_softirq+0x146/0x2e0
                         handle_softirqs+0x266/0x860
                         irq_exit_rcu+0x115/0x1a0
                         sysvec_apic_timer_interrupt+0x6e/0x90
                         asm_sysvec_apic_timer_interrupt+0x16/0x20
                         default_idle+0x13/0x20
                         default_idle_call+0x67/0xa0
                         do_idle+0x2da/0x320
                         cpu_startup_entry+0x50/0x60
                         start_secondary+0x213/0x2a0
                         common_startup_64+0x129/0x138
        INITIAL USE at:
                        lock_acquire+0x1be/0x520
                        _raw_spin_lock_bh+0x34/0x40
                        xfrm_alloc_spi+0xc0/0xe60
                        xfrm_alloc_userspi+0x5f6/0xbc0
                        xfrm_user_rcv_msg+0x493/0x880
                        netlink_rcv_skb+0x12e/0x380
                        xfrm_netlink_rcv+0x6d/0x90
                        netlink_unicast+0x42f/0x740
                        netlink_sendmsg+0x745/0xbe0
                        __sock_sendmsg+0xc5/0x190
                        __sys_sendto+0x1fe/0x2c0
                        __x64_sys_sendto+0xdc/0x1b0
                        do_syscall_64+0x6d/0x140
                        entry_SYSCALL_64_after_hwframe+0x4b/0x53
      }
      ... key      at: [<ffffffff87f9cd20>] __key.18+0x0/0x40
    
     the dependencies between the lock to be acquired
      and SOFTIRQ-irq-unsafe lock:
     -> (&xa->xa_lock#24){+.+.}-{3:3} ops: 9 {
        HARDIRQ-ON-W at:
                         lock_acquire+0x1be/0x520
                         _raw_spin_lock_bh+0x34/0x40
                         mlx5e_xfrm_add_state+0xc5b/0x2290 [mlx5_core]
                         xfrm_dev_state_add+0x3bb/0xd70
                         xfrm_add_sa+0x2451/0x4a90
                         xfrm_user_rcv_msg+0x493/0x880
                         netlink_rcv_skb+0x12e/0x380
                         xfrm_netlink_rcv+0x6d/0x90
                         netlink_unicast+0x42f/0x740
                         netlink_sendmsg+0x745/0xbe0
                         __sock_sendmsg+0xc5/0x190
                         __sys_sendto+0x1fe/0x2c0
                         __x64_sys_sendto+0xdc/0x1b0
                         do_syscall_64+0x6d/0x140
                         entry_SYSCALL_64_after_hwframe+0x4b/0x53
        SOFTIRQ-ON-W at:
                         lock_acquire+0x1be/0x520
                         _raw_spin_lock+0x2c/0x40
                         xa_set_mark+0x70/0x110
                         mlx5e_xfrm_add_state+0xe48/0x2290 [mlx5_core]
                         xfrm_dev_state_add+0x3bb/0xd70
                         xfrm_add_sa+0x2451/0x4a90
                         xfrm_user_rcv_msg+0x493/0x880
                         netlink_rcv_skb+0x12e/0x380
                         xfrm_netlink_rcv+0x6d/0x90
                         netlink_unicast+0x42f/0x740
                         netlink_sendmsg+0x745/0xbe0
                         __sock_sendmsg+0xc5/0x190
                         __sys_sendto+0x1fe/0x2c0
                         __x64_sys_sendto+0xdc/0x1b0
                         do_syscall_64+0x6d/0x140
                         entry_SYSCALL_64_after_hwframe+0x4b/0x53
        INITIAL USE at:
                        lock_acquire+0x1be/0x520
                        _raw_spin_lock_bh+0x34/0x40
                        mlx5e_xfrm_add_state+0xc5b/0x2290 [mlx5_core]
                        xfrm_dev_state_add+0x3bb/0xd70
                        xfrm_add_sa+0x2451/0x4a90
                        xfrm_user_rcv_msg+0x493/0x880
                        netlink_rcv_skb+0x12e/0x380
                        xfrm_netlink_rcv+0x6d/0x90
                        netlink_unicast+0x42f/0x740
                        netlink_sendmsg+0x745/0xbe0
                        __sock_sendmsg+0xc5/0x190
                        __sys_sendto+0x1fe/0x2c0
                        __x64_sys_sendto+0xdc/0x1b0
                        do_syscall_64+0x6d/0x140
                        entry_SYSCALL_64_after_hwframe+0x4b/0x53
      }
      ... key      at: [<ffffffffa078ff60>] __key.48+0x0/0xfffffffffff210a0 [mlx5_core]
      ... acquired at:
        __lock_acquire+0x30a0/0x5040
        lock_acquire+0x1be/0x520
        _raw_spin_lock_bh+0x34/0x40
        mlx5e_xfrm_del_state+0xca/0x1e0 [mlx5_core]
        xfrm_dev_state_delete+0x90/0x160
        __xfrm_state_delete+0x662/0xae0
        xfrm_state_delete+0x1e/0x30
        xfrm_del_sa+0x1c2/0x340
        xfrm_user_rcv_msg+0x493/0x880
        netlink_rcv_skb+0x12e/0x380
        xfrm_netlink_rcv+0x6d/0x90
        netlink_unicast+0x42f/0x740
        netlink_sendmsg+0x745/0xbe0
        __sock_sendmsg+0xc5/0x190
        __sys_sendto+0x1fe/0x2c0
        __x64_sys_sendto+0xdc/0x1b0
        do_syscall_64+0x6d/0x140
        entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
     stack backtrace:
     CPU: 7 UID: 0 PID: 1337 Comm: charon Not tainted 6.12.0+ #4
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
     Call Trace:
      <TASK>
      dump_stack_lvl+0x74/0xd0
      check_irq_usage+0x12e8/0x1d90
      ? print_shortest_lock_dependencies_backwards+0x1b0/0x1b0
      ? check_chain_key+0x1bb/0x4c0
      ? __lockdep_reset_lock+0x180/0x180
      ? check_path.constprop.0+0x24/0x50
      ? mark_lock+0x108/0x2fb0
      ? print_circular_bug+0x9b0/0x9b0
      ? mark_lock+0x108/0x2fb0
      ? print_usage_bug.part.0+0x670/0x670
      ? check_prev_add+0x1c4/0x2310
      check_prev_add+0x1c4/0x2310
      __lock_acquire+0x30a0/0x5040
      ? lockdep_set_lock_cmp_fn+0x190/0x190
      ? lockdep_set_lock_cmp_fn+0x190/0x190
      lock_acquire+0x1be/0x520
      ? mlx5e_xfrm_del_state+0xca/0x1e0 [mlx5_core]
      ? lockdep_hardirqs_on_prepare+0x400/0x400
      ? __xfrm_state_delete+0x5f0/0xae0
      ? lock_downgrade+0x6b0/0x6b0
      _raw_spin_lock_bh+0x34/0x40
      ? mlx5e_xfrm_del_state+0xca/0x1e0 [mlx5_core]
      mlx5e_xfrm_del_state+0xca/0x1e0 [mlx5_core]
      xfrm_dev_state_delete+0x90/0x160
      __xfrm_state_delete+0x662/0xae0
      xfrm_state_delete+0x1e/0x30
      xfrm_del_sa+0x1c2/0x340
      ? xfrm_get_sa+0x250/0x250
      ? check_chain_key+0x1bb/0x4c0
      xfrm_user_rcv_msg+0x493/0x880
      ? copy_sec_ctx+0x270/0x270
      ? check_chain_key+0x1bb/0x4c0
      ? lockdep_set_lock_cmp_fn+0x190/0x190
      ? lockdep_set_lock_cmp_fn+0x190/0x190
      netlink_rcv_skb+0x12e/0x380
      ? copy_sec_ctx+0x270/0x270
      ? netlink_ack+0xd90/0xd90
      ? netlink_deliver_tap+0xcd/0xb60
      xfrm_netlink_rcv+0x6d/0x90
      netlink_unicast+0x42f/0x740
      ? netlink_attachskb+0x730/0x730
      ? lock_acquire+0x1be/0x520
      netlink_sendmsg+0x745/0xbe0
      ? netlink_unicast+0x740/0x740
      ? __might_fault+0xbb/0x170
      ? netlink_unicast+0x740/0x740
      __sock_sendmsg+0xc5/0x190
      ? fdget+0x163/0x1d0
      __sys_sendto+0x1fe/0x2c0
      ? __x64_sys_getpeername+0xb0/0xb0
      ? do_user_addr_fault+0x856/0xe30
      ? lock_acquire+0x1be/0x520
      ? __task_pid_nr_ns+0x117/0x410
      ? lock_downgrade+0x6b0/0x6b0
      __x64_sys_sendto+0xdc/0x1b0
      ? lockdep_hardirqs_on_prepare+0x284/0x400
      do_syscall_64+0x6d/0x140
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
     RIP: 0033:0x7f7d31291ba4
     Code: 7d e8 89 4d d4 e8 4c 42 f7 ff 44 8b 4d d0 4c 8b 45 c8 89 c3 44 8b 55 d4 8b 7d e8 b8 2c 00 00 00 48 8b 55 d8 48 8b 75 e0 0f 05 <48> 3d 00 f0 ff ff 77 34 89 df 48 89 45 e8 e8 99 42 f7 ff 48 8b 45
     RSP: 002b:00007f7d2ccd94f0 EFLAGS: 00000297 ORIG_RAX: 000000000000002c
     RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f7d31291ba4
     RDX: 0000000000000028 RSI: 00007f7d2ccd96a0 RDI: 000000000000000a
     RBP: 00007f7d2ccd9530 R08: 00007f7d2ccd9598 R09: 000000000000000c
     R10: 0000000000000000 R11: 0000000000000297 R12: 0000000000000028
     R13: 00007f7d2ccd9598 R14: 00007f7d2ccd96a0 R15: 00000000000000e1
      </TASK>
    
    Fixes: 4c24272b4e2b ("net/mlx5e: Listen to ARP events to update IPsec L2 headers in tunnel mode")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Rely on reqid in IPsec tunnel mode [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Wed Jan 15 13:39:09 2025 +0200

    net/mlx5e: Rely on reqid in IPsec tunnel mode
    
    [ Upstream commit 25f23524dfa227959beb3b2c2c0f38e0222f4cfa ]
    
    All packet offloads SAs have reqid in it to make sure they have
    corresponding policy. While it is not strictly needed for transparent
    mode, it is extremely important in tunnel mode. In that mode, policy and
    SAs have different match criteria.
    
    Policy catches the whole subnet addresses, and SA catches the tunnel gateways
    addresses. The source address of such tunnel is not known during egress packet
    traversal in flow steering as it is added only after successful encryption.
    
    As reqid is required for packet offload and it is unique for every SA,
    we can safely rely on it only.
    
    The output below shows the configured egress policy and SA by strongswan:
    
    [leonro@vm ~]$ sudo ip x s
    src 192.169.101.2 dst 192.169.101.1
            proto esp spi 0xc88b7652 reqid 1 mode tunnel
            replay-window 0 flag af-unspec esn
            aead rfc4106(gcm(aes)) 0xe406a01083986e14d116488549094710e9c57bc6 128
            anti-replay esn context:
             seq-hi 0x0, seq 0x0, oseq-hi 0x0, oseq 0x0
             replay_window 1, bitmap-length 1
             00000000
            crypto offload parameters: dev eth2 dir out mode packet
    
    [leonro@064 ~]$ sudo ip x p
    src 192.170.0.0/16 dst 192.170.0.0/16
            dir out priority 383615 ptype main
            tmpl src 192.169.101.2 dst 192.169.101.1
                    proto esp spi 0xc88b7652 reqid 1 mode tunnel
            crypto offload parameters: dev eth2 mode packet
    
    Fixes: b3beba1fb404 ("net/mlx5e: Allow policies with reqid 0, to support IKE policy holes")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/ncsi: fix locking in Get MAC Address handling [+ + +]
Author: Paul Fertser <fercerpav@gmail.com>
Date:   Thu Jan 9 17:50:54 2025 +0300

    net/ncsi: fix locking in Get MAC Address handling
    
    commit 9e2bbab94b88295dcc57c7580393c9ee08d7314d upstream.
    
    Obtaining RTNL lock in a response handler is not allowed since it runs
    in an atomic softirq context. Postpone setting the MAC address by adding
    a dedicated step to the configuration FSM.
    
    Fixes: 790071347a0a ("net/ncsi: change from ndo_set_mac_address to dev_set_mac_address")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/20241129-potin-revert-ncsi-set-mac-addr-v1-1-94ea2cb596af@gmail.com
    Signed-off-by: Paul Fertser <fercerpav@gmail.com>
    Tested-by: Potin Lai <potin.lai.pt@gmail.com>
    Link: https://patch.msgid.link/20250109145054.30925-1-fercerpav@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field() [+ + +]
Author: Sudheer Kumar Doredla <s-doredla@ti.com>
Date:   Wed Jan 8 22:54:33 2025 +0530

    net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()
    
    [ Upstream commit 03d120f27d050336f7e7d21879891542c4741f81 ]
    
    CPSW ALE has 75-bit ALE entries stored across three 32-bit words.
    The cpsw_ale_get_field() and cpsw_ale_set_field() functions support
    ALE field entries spanning up to two words at the most.
    
    The cpsw_ale_get_field() and cpsw_ale_set_field() functions work as
    expected when ALE field spanned across word1 and word2, but fails when
    ALE field spanned across word2 and word3.
    
    For example, while reading the ALE field spanned across word2 and word3
    (i.e. bits 62 to 64), the word3 data shifted to an incorrect position
    due to the index becoming zero while flipping.
    The same issue occurred when setting an ALE entry.
    
    This issue has not been seen in practice but will be an issue in the future
    if the driver supports accessing ALE fields spanning word2 and word3
    
    Fix the methods to handle getting/setting fields spanning up to two words.
    
    Fixes: b685f1a58956 ("net: ethernet: ti: cpsw_ale: Fix cpsw_ale_get_field()/cpsw_ale_set_field()")
    Signed-off-by: Sudheer Kumar Doredla <s-doredla@ti.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Roger Quadros <rogerq@kernel.org>
    Reviewed-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Link: https://patch.msgid.link/20250108172433.311694-1-s-doredla@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: xgbe: re-add aneg to supported features in PHY quirks [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Sun Jan 12 22:59:59 2025 +0100

    net: ethernet: xgbe: re-add aneg to supported features in PHY quirks
    
    commit 6be7aca91009865d8c2b73589270224a6b6e67ab upstream.
    
    In 4.19, before the switch to linkmode bitmaps, PHY_GBIT_FEATURES
    included feature bits for aneg and TP/MII ports.
    
                                     SUPPORTED_TP | \
                                     SUPPORTED_MII)
    
                                     SUPPORTED_10baseT_Full)
    
                                     SUPPORTED_100baseT_Full)
    
                                     SUPPORTED_1000baseT_Full)
    
                                     PHY_100BT_FEATURES | \
                                     PHY_DEFAULT_FEATURES)
    
                                     PHY_1000BT_FEATURES)
    
    Referenced commit expanded PHY_GBIT_FEATURES, silently removing
    PHY_DEFAULT_FEATURES. The removed part can be re-added by using
    the new PHY_GBIT_FEATURES definition.
    Not clear to me is why nobody seems to have noticed this issue.
    
    I stumbled across this when checking what it takes to make
    phy_10_100_features_array et al private to phylib.
    
    Fixes: d0939c26c53a ("net: ethernet: xgbe: expand PHY_GBIT_FEAUTRES")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://patch.msgid.link/46521973-7738-4157-9f5e-0bb6f694acba@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: fec: handle page_pool_dev_alloc_pages error [+ + +]
Author: Kevin Groeneveld <kgroeneveld@lenbrook.com>
Date:   Mon Jan 13 10:48:45 2025 -0500

    net: fec: handle page_pool_dev_alloc_pages error
    
    [ Upstream commit 001ba0902046cb6c352494df610718c0763e77a5 ]
    
    The fec_enet_update_cbd function calls page_pool_dev_alloc_pages but did
    not handle the case when it returned NULL. There was a WARN_ON(!new_page)
    but it would still proceed to use the NULL pointer and then crash.
    
    This case does seem somewhat rare but when the system is under memory
    pressure it can happen. One case where I can duplicate this with some
    frequency is when writing over a smbd share to a SATA HDD attached to an
    imx6q.
    
    Setting /proc/sys/vm/min_free_kbytes to higher values also seems to solve
    the problem for my test case. But it still seems wrong that the fec driver
    ignores the memory allocation error and can crash.
    
    This commit handles the allocation error by dropping the current packet.
    
    Fixes: 95698ff6177b5 ("net: fec: using page pool to manage RX buffers")
    Signed-off-by: Kevin Groeneveld <kgroeneveld@lenbrook.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20250113154846.1765414-1-kgroeneveld@lenbrook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: make page_pool_ref_netmem work with net iovs [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Jan 8 14:06:22 2025 -0800

    net: make page_pool_ref_netmem work with net iovs
    
    [ Upstream commit cbc16bceea784210d585a42ac9f8f10ce62b300e ]
    
    page_pool_ref_netmem() should work with either netmem representation, but
    currently it casts to a page with netmem_to_page(), which will fail with
    net iovs. Use netmem_get_pp_ref_count_ref() instead.
    
    Fixes: 8ab79ed50cf1 ("page_pool: devmem support")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: David Wei <dw@davidwei.uk>
    Link: https://lore.kernel.org/20250108220644.3528845-2-dw@davidwei.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ravb: Fix max TX frame size for RZ/V2M [+ + +]
Author: Paul Barker <paul.barker.ct@bp.renesas.com>
Date:   Thu Jan 9 11:37:06 2025 +0000

    net: ravb: Fix max TX frame size for RZ/V2M
    
    [ Upstream commit e7e441a4100e4bc90b52f80494a28a9667993975 ]
    
    When tx_max_frame_size was added to struct ravb_hw_info, no value was
    set in ravb_rzv2m_hw_info so the default value of zero was used.
    
    The maximum MTU is set by subtracting from tx_max_frame_size to allow
    space for headers and frame checksums. As ndev->max_mtu is unsigned,
    this subtraction wraps around leading to a ridiculously large positive
    value that is obviously incorrect.
    
    Before tx_max_frame_size was introduced, the maximum MTU was based on
    rx_max_frame_size. So, we can restore the correct maximum MTU by copying
    the rx_max_frame_size value into tx_max_frame_size for RZ/V2M.
    
    Fixes: 1d63864299ca ("net: ravb: Fix maximum TX frame size for GbEth devices")
    Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Link: https://patch.msgid.link/20250109113706.1409149-1-paul.barker.ct@bp.renesas.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: xilinx: axienet: Fix IRQ coalescing packet count overflow [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Mon Jan 13 11:30:00 2025 -0500

    net: xilinx: axienet: Fix IRQ coalescing packet count overflow
    
    [ Upstream commit c17ff476f53afb30f90bb3c2af77de069c81a622 ]
    
    If coalesce_count is greater than 255 it will not fit in the register and
    will overflow. This can be reproduced by running
    
        # ethtool -C ethX rx-frames 256
    
    which will result in a timeout of 0us instead. Fix this by checking for
    invalid values and reporting an error.
    
    Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Link: https://patch.msgid.link/20250113163001.2335235-1-sean.anderson@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdev: avoid CFI problems with sock priv helpers [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jan 15 08:14:36 2025 -0800

    netdev: avoid CFI problems with sock priv helpers
    
    [ Upstream commit a50da36562cd62b41de9bef08edbb3e8af00f118 ]
    
    Li Li reports that casting away callback type may cause issues
    for CFI. Let's generate a small wrapper for each callback,
    to make sure compiler sees the anticipated types.
    
    Reported-by: Li Li <dualli@chromium.org>
    Link: https://lore.kernel.org/CANBPYPjQVqmzZ4J=rVQX87a9iuwmaetULwbK_5_3YWk2eGzkaA@mail.gmail.com
    Fixes: 170aafe35cb9 ("netdev: support binding dma-buf to netdevice")
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Reviewed-by: Mina Almasry <almasrymina@google.com>
    Link: https://patch.msgid.link/20250115161436.648646-1-kuba@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfs: Fix non-contiguous donation between completed reads [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Fri Dec 13 13:50:02 2024 +0000

    netfs: Fix non-contiguous donation between completed reads
    
    [ Upstream commit c8b90d40d5bba8e6fba457b8a7c10d3c0d467e37 ]
    
    When a read subrequest finishes, if it doesn't have sufficient coverage to
    complete the folio(s) covering either side of it, it will donate the excess
    coverage to the adjacent subrequests on either side, offloading
    responsibility for unlocking the folio(s) covered to them.
    
    Now, preference is given to donating down to a lower file offset over
    donating up because that check is done first - but there's no check that
    the lower subreq is actually contiguous, and so we can end up donating
    incorrectly.
    
    The scenario seen[1] is that an 8MiB readahead request spanning four 2MiB
    folios is split into eight 1MiB subreqs (numbered 1 through 8).  These
    terminate in the order 1,6,2,5,3,7,4,8.  What happens is:
    
            - 1 donates to 2
            - 6 donates to 5
            - 2 completes, unlocking the first folio (with 1).
            - 5 completes, unlocking the third folio (with 6).
            - 3 donates to 4
            - 7 donates to 4 incorrectly
            - 4 completes, unlocking the second folio (with 3), but can't use
              the excess from 7.
            - 8 donates to 4, also incorrectly.
    
    Fix this by preventing downward donation if the subreqs are not contiguous
    (in the example above, 7 donates to 4 across the gap left by 5 and 6).
    
    Reported-by: Shyam Prasad N <nspmangalore@gmail.com>
    Closes: https://lore.kernel.org/r/CANT5p=qBwjBm-D8soFVVtswGEfmMtQXVW83=TNfUtvyHeFQZBA@mail.gmail.com/
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/526707.1733224486@warthog.procyon.org.uk/ [1]
    Link: https://lore.kernel.org/r/20241213135013.2964079-3-dhowells@redhat.com
    cc: Steve French <sfrench@samba.org>
    cc: Paulo Alcantara <pc@manguebit.com>
    cc: Jeff Layton <jlayton@kernel.org>
    cc: linux-cifs@vger.kernel.org
    cc: netfs@lists.linux.dev
    cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfp: bpf: prevent integer overflow in nfp_bpf_event_output() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Jan 13 09:18:39 2025 +0300

    nfp: bpf: prevent integer overflow in nfp_bpf_event_output()
    
    [ Upstream commit 16ebb6f5b6295c9688749862a39a4889c56227f8 ]
    
    The "sizeof(struct cmsg_bpf_event) + pkt_size + data_size" math could
    potentially have an integer wrapping bug on 32bit systems.  Check for
    this and return an error.
    
    Fixes: 9816dd35ecec ("nfp: bpf: perf event output helpers support")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/6074805b-e78d-4b8a-bf05-e929b5377c28@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nouveau/fence: handle cross device fences properly [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Thu Jan 9 10:55:53 2025 +1000

    nouveau/fence: handle cross device fences properly
    
    commit 1f9910b41c857a892b83801feebdc7bdf38c5985 upstream.
    
    The fence sync logic doesn't handle a fence sync across devices
    as it tries to write to a channel offset from one device into
    the fence bo from a different device, which won't work so well.
    
    This patch fixes that to avoid using the sync path in the case
    where the fences come from different nouveau drm devices.
    
    This works fine on a single device as the fence bo is shared
    across the devices, and mapped into each channels vma space,
    the channel offsets are therefore okay to pass between sides,
    so one channel can sync on the seqnos from the other by using
    the offset into it's vma.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Ben Skeggs <bskeggs@nvidia.com>
    [ Fix compilation issue; remove version log from commit messsage.
      - Danilo ]
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250109005553.623947-1-airlied@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvmet: propagate npwg topology [+ + +]
Author: Luis Chamberlain <mcgrof@kernel.org>
Date:   Tue Dec 17 18:33:25 2024 -0800

    nvmet: propagate npwg topology
    
    [ Upstream commit b579d6fdc3a9149bb4d2b3133cc0767130ed13e6 ]
    
    Ensure we propagate npwg to the target as well instead
    of assuming its the same logical blocks per physical block.
    
    This ensures devices with large IUs information properly
    propagated on the target.
    
    Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
openvswitch: fix lockup on tx to unregistering netdev with carrier [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Thu Jan 9 13:21:24 2025 +0100

    openvswitch: fix lockup on tx to unregistering netdev with carrier
    
    [ Upstream commit 47e55e4b410f7d552e43011baa5be1aab4093990 ]
    
    Commit in a fixes tag attempted to fix the issue in the following
    sequence of calls:
    
        do_output
        -> ovs_vport_send
           -> dev_queue_xmit
              -> __dev_queue_xmit
                 -> netdev_core_pick_tx
                    -> skb_tx_hash
    
    When device is unregistering, the 'dev->real_num_tx_queues' goes to
    zero and the 'while (unlikely(hash >= qcount))' loop inside the
    'skb_tx_hash' becomes infinite, locking up the core forever.
    
    But unfortunately, checking just the carrier status is not enough to
    fix the issue, because some devices may still be in unregistering
    state while reporting carrier status OK.
    
    One example of such device is a net/dummy.  It sets carrier ON
    on start, but it doesn't implement .ndo_stop to set the carrier off.
    And it makes sense, because dummy doesn't really have a carrier.
    Therefore, while this device is unregistering, it's still easy to hit
    the infinite loop in the skb_tx_hash() from the OVS datapath.  There
    might be other drivers that do the same, but dummy by itself is
    important for the OVS ecosystem, because it is frequently used as a
    packet sink for tcpdump while debugging OVS deployments.  And when the
    issue is hit, the only way to recover is to reboot.
    
    Fix that by also checking if the device is running.  The running
    state is handled by the net core during unregistering, so it covers
    unregistering case better, and we don't really need to send packets
    to devices that are not running anyway.
    
    While only checking the running state might be enough, the carrier
    check is preserved.  The running and the carrier states seem disjoined
    throughout the code and different drivers.  And other core functions
    like __dev_direct_xmit() check both before attempting to transmit
    a packet.  So, it seems safer to check both flags in OVS as well.
    
    Fixes: 066b86787fa3 ("net: openvswitch: fix race on port output")
    Reported-by: Friedrich Weber <f.weber@proxmox.com>
    Closes: https://mail.openvswitch.org/pipermail/ovs-discuss/2025-January/053423.html
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Tested-by: Friedrich Weber <f.weber@proxmox.com>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/20250109122225.4034688-1-i.maximets@ovn.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pfcp: Destroy device along with udp socket's netns dismantle. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jan 10 10:47:54 2025 +0900

    pfcp: Destroy device along with udp socket's netns dismantle.
    
    [ Upstream commit ffc90e9ca61b0f619326a1417ff32efd6cc71ed2 ]
    
    pfcp_newlink() links the device to a list in dev_net(dev) instead
    of net, where a udp tunnel socket is created.
    
    Even when net is removed, the device stays alive on dev_net(dev).
    Then, removing net triggers the splat below. [0]
    
    In this example, pfcp0 is created in ns2, but the udp socket is
    created in ns1.
    
      ip netns add ns1
      ip netns add ns2
      ip -n ns1 link add netns ns2 name pfcp0 type pfcp
      ip netns del ns1
    
    Let's link the device to the socket's netns instead.
    
    Now, pfcp_net_exit() needs another netdev iteration to remove
    all pfcp devices in the netns.
    
    pfcp_dev_list is not used under RCU, so the list API is converted
    to the non-RCU variant.
    
    pfcp_net_exit() can be converted to .exit_batch_rtnl() in net-next.
    
    [0]:
    ref_tracker: net notrefcnt@00000000128b34dc has 1/1 users at
         sk_alloc (./include/net/net_namespace.h:345 net/core/sock.c:2236)
         inet_create (net/ipv4/af_inet.c:326 net/ipv4/af_inet.c:252)
         __sock_create (net/socket.c:1558)
         udp_sock_create4 (net/ipv4/udp_tunnel_core.c:18)
         pfcp_create_sock (drivers/net/pfcp.c:168)
         pfcp_newlink (drivers/net/pfcp.c:182 drivers/net/pfcp.c:197)
         rtnl_newlink (net/core/rtnetlink.c:3786 net/core/rtnetlink.c:3897 net/core/rtnetlink.c:4012)
         rtnetlink_rcv_msg (net/core/rtnetlink.c:6922)
         netlink_rcv_skb (net/netlink/af_netlink.c:2542)
         netlink_unicast (net/netlink/af_netlink.c:1321 net/netlink/af_netlink.c:1347)
         netlink_sendmsg (net/netlink/af_netlink.c:1891)
         ____sys_sendmsg (net/socket.c:711 net/socket.c:726 net/socket.c:2583)
         ___sys_sendmsg (net/socket.c:2639)
         __sys_sendmsg (net/socket.c:2669)
         do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83)
         entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    WARNING: CPU: 1 PID: 11 at lib/ref_tracker.c:179 ref_tracker_dir_exit (lib/ref_tracker.c:179)
    Modules linked in:
    CPU: 1 UID: 0 PID: 11 Comm: kworker/u16:0 Not tainted 6.13.0-rc5-00147-g4c1224501e9d #5
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    Workqueue: netns cleanup_net
    RIP: 0010:ref_tracker_dir_exit (lib/ref_tracker.c:179)
    Code: 00 00 00 fc ff df 4d 8b 26 49 bd 00 01 00 00 00 00 ad de 4c 39 f5 0f 85 df 00 00 00 48 8b 74 24 08 48 89 df e8 a5 cc 12 02 90 <0f> 0b 90 48 8d 6b 44 be 04 00 00 00 48 89 ef e8 80 de 67 ff 48 89
    RSP: 0018:ff11000007f3fb60 EFLAGS: 00010286
    RAX: 00000000000020ef RBX: ff1100000d6481e0 RCX: 1ffffffff0e40d82
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8423ee3c
    RBP: ff1100000d648230 R08: 0000000000000001 R09: fffffbfff0e395af
    R10: 0000000000000001 R11: 0000000000000000 R12: ff1100000d648230
    R13: dead000000000100 R14: ff1100000d648230 R15: dffffc0000000000
    FS:  0000000000000000(0000) GS:ff1100006ce80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00005620e1363990 CR3: 000000000eeb2002 CR4: 0000000000771ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn (kernel/panic.c:748)
     ? ref_tracker_dir_exit (lib/ref_tracker.c:179)
     ? report_bug (lib/bug.c:201 lib/bug.c:219)
     ? handle_bug (arch/x86/kernel/traps.c:285)
     ? exc_invalid_op (arch/x86/kernel/traps.c:309 (discriminator 1))
     ? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:621)
     ? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/irqflags.h:42 ./arch/x86/include/asm/irqflags.h:97 ./arch/x86/include/asm/irqflags.h:155 ./include/linux/spinlock_api_smp.h:151 kernel/locking/spinlock.c:194)
     ? ref_tracker_dir_exit (lib/ref_tracker.c:179)
     ? __pfx_ref_tracker_dir_exit (lib/ref_tracker.c:158)
     ? kfree (mm/slub.c:4613 mm/slub.c:4761)
     net_free (net/core/net_namespace.c:476 net/core/net_namespace.c:467)
     cleanup_net (net/core/net_namespace.c:664 (discriminator 3))
     process_one_work (kernel/workqueue.c:3229)
     worker_thread (kernel/workqueue.c:3304 kernel/workqueue.c:3391)
     kthread (kernel/kthread.c:389)
     ret_from_fork (arch/x86/kernel/process.c:147)
     ret_from_fork_asm (arch/x86/entry/entry_64.S:257)
      </TASK>
    
    Fixes: 76c8764ef36a ("pfcp: add PFCP module")
    Reported-by: Xiao Liang <shaw.leon@gmail.com>
    Closes: https://lore.kernel.org/netdev/20250104125732.17335-1-shaw.leon@gmail.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pktgen: Avoid out-of-bounds access in get_imix_entries [+ + +]
Author: Artem Chernyshev <artem.chernyshev@red-soft.ru>
Date:   Thu Jan 9 11:30:39 2025 +0300

    pktgen: Avoid out-of-bounds access in get_imix_entries
    
    [ Upstream commit 76201b5979768500bca362871db66d77cb4c225e ]
    
    Passing a sufficient amount of imix entries leads to invalid access to the
    pkt_dev->imix_entries array because of the incorrect boundary check.
    
    UBSAN: array-index-out-of-bounds in net/core/pktgen.c:874:24
    index 20 is out of range for type 'imix_pkt [20]'
    CPU: 2 PID: 1210 Comm: bash Not tainted 6.10.0-rc1 #121
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
    Call Trace:
    <TASK>
    dump_stack_lvl lib/dump_stack.c:117
    __ubsan_handle_out_of_bounds lib/ubsan.c:429
    get_imix_entries net/core/pktgen.c:874
    pktgen_if_write net/core/pktgen.c:1063
    pde_write fs/proc/inode.c:334
    proc_reg_write fs/proc/inode.c:346
    vfs_write fs/read_write.c:593
    ksys_write fs/read_write.c:644
    do_syscall_64 arch/x86/entry/common.c:83
    entry_SYSCALL_64_after_hwframe arch/x86/entry/entry_64.S:130
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 52a62f8603f9 ("pktgen: Parse internet mix (imix) input")
    Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru>
    [ fp: allow to fill the array completely; minor changelog cleanup ]
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86/intel: power-domains: Add Clearwater Forest support [+ + +]
Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date:   Fri Jan 3 07:52:53 2025 -0800

    platform/x86/intel: power-domains: Add Clearwater Forest support
    
    [ Upstream commit bee9a0838fd223823e5a6d85c055ab1691dc738e ]
    
    Add Clearwater Forest support (INTEL_ATOM_DARKMONT_X) to tpmi_cpu_ids
    to support domaid id mappings.
    
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://lore.kernel.org/r/20250103155255.1488139-1-srinivas.pandruvada@linux.intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: dell-uart-backlight: fix serdev race [+ + +]
Author: Chenyuan Yang <chenyuan0y@gmail.com>
Date:   Sat Jan 11 12:01:18 2025 -0600

    platform/x86: dell-uart-backlight: fix serdev race
    
    [ Upstream commit 1b2128aa2d45ab20b22548dcf4b48906298ca7fd ]
    
    The dell_uart_bl_serdev_probe() function calls devm_serdev_device_open()
    before setting the client ops via serdev_device_set_client_ops(). This
    ordering can trigger a NULL pointer dereference in the serdev controller's
    receive_buf handler, as it assumes serdev->ops is valid when
    SERPORT_ACTIVE is set.
    
    This is similar to the issue fixed in commit 5e700b384ec1
    ("platform/chrome: cros_ec_uart: properly fix race condition") where
    devm_serdev_device_open() was called before fully initializing the
    device.
    
    Fix the race by ensuring client ops are set before enabling the port via
    devm_serdev_device_open().
    
    Note, serdev_device_set_baudrate() and serdev_device_set_flow_control()
    calls should be after the devm_serdev_device_open() call.
    
    Fixes: 484bae9e4d6a ("platform/x86: Add new Dell UART backlight driver")
    Signed-off-by: Chenyuan Yang <chenyuan0y@gmail.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20250111180118.2274516-1-chenyuan0y@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: ISST: Add Clearwater Forest to support list [+ + +]
Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date:   Fri Jan 3 07:52:54 2025 -0800

    platform/x86: ISST: Add Clearwater Forest to support list
    
    [ Upstream commit cc1ff7bc1bb378e7c46992c977b605e97d908801 ]
    
    Add Clearwater Forest (INTEL_ATOM_DARKMONT_X) to SST support list by
    adding to isst_cpu_ids.
    
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://lore.kernel.org/r/20250103155255.1488139-2-srinivas.pandruvada@linux.intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: fix serdev race [+ + +]
Author: Chenyuan Yang <chenyuan0y@gmail.com>
Date:   Sat Jan 11 12:09:51 2025 -0600

    platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: fix serdev race
    
    [ Upstream commit 59616a91e5e74833b2008b56c66879857c616006 ]
    
    The yt2_1380_fc_serdev_probe() function calls devm_serdev_device_open()
    before setting the client ops via serdev_device_set_client_ops(). This
    ordering can trigger a NULL pointer dereference in the serdev controller's
    receive_buf handler, as it assumes serdev->ops is valid when
    SERPORT_ACTIVE is set.
    
    This is similar to the issue fixed in commit 5e700b384ec1
    ("platform/chrome: cros_ec_uart: properly fix race condition") where
    devm_serdev_device_open() was called before fully initializing the
    device.
    
    Fix the race by ensuring client ops are set before enabling the port via
    devm_serdev_device_open().
    
    Note, serdev_device_set_baudrate() and serdev_device_set_flow_control()
    calls should be after the devm_serdev_device_open() call.
    
    Fixes: b2ed33e8d486 ("platform/x86: Add lenovo-yoga-tab2-pro-1380-fastcharger driver")
    Signed-off-by: Chenyuan Yang <chenyuan0y@gmail.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20250111180951.2277757-1-chenyuan0y@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pmdomain: imx8mp-blk-ctrl: add missing loop break condition [+ + +]
Author: Xiaolei Wang <xiaolei.wang@windriver.com>
Date:   Wed Jan 15 09:41:18 2025 +0800

    pmdomain: imx8mp-blk-ctrl: add missing loop break condition
    
    commit 726efa92e02b460811e8bc6990dd742f03b645ea upstream.
    
    Currently imx8mp_blk_ctrl_remove() will continue the for loop
    until an out-of-bounds exception occurs.
    
    pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : dev_pm_domain_detach+0x8/0x48
    lr : imx8mp_blk_ctrl_shutdown+0x58/0x90
    sp : ffffffc084f8bbf0
    x29: ffffffc084f8bbf0 x28: ffffff80daf32ac0 x27: 0000000000000000
    x26: ffffffc081658d78 x25: 0000000000000001 x24: ffffffc08201b028
    x23: ffffff80d0db9490 x22: ffffffc082340a78 x21: 00000000000005b0
    x20: ffffff80d19bc180 x19: 000000000000000a x18: ffffffffffffffff
    x17: ffffffc080a39e08 x16: ffffffc080a39c98 x15: 4f435f464f006c72
    x14: 0000000000000004 x13: ffffff80d0172110 x12: 0000000000000000
    x11: ffffff80d0537740 x10: ffffff80d05376c0 x9 : ffffffc0808ed2d8
    x8 : ffffffc084f8bab0 x7 : 0000000000000000 x6 : 0000000000000000
    x5 : ffffff80d19b9420 x4 : fffffffe03466e60 x3 : 0000000080800077
    x2 : 0000000000000000 x1 : 0000000000000001 x0 : 0000000000000000
    Call trace:
     dev_pm_domain_detach+0x8/0x48
     platform_shutdown+0x2c/0x48
     device_shutdown+0x158/0x268
     kernel_restart_prepare+0x40/0x58
     kernel_kexec+0x58/0xe8
     __do_sys_reboot+0x198/0x258
     __arm64_sys_reboot+0x2c/0x40
     invoke_syscall+0x5c/0x138
     el0_svc_common.constprop.0+0x48/0xf0
     do_el0_svc+0x24/0x38
     el0_svc+0x38/0xc8
     el0t_64_sync_handler+0x120/0x130
     el0t_64_sync+0x190/0x198
    Code: 8128c2d0 ffffffc0 aa1e03e9 d503201f
    
    Fixes: 556f5cf9568a ("soc: imx: add i.MX8MP HSIO blk-ctrl")
    Cc: stable@vger.kernel.org
    Signed-off-by: Xiaolei Wang <xiaolei.wang@windriver.com>
    Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://lore.kernel.org/r/20250115014118.4086729-1-xiaolei.wang@windriver.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
poll_wait: add mb() to fix theoretical race between waitqueue_active() and .poll() [+ + +]
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Tue Jan 7 17:27:17 2025 +0100

    poll_wait: add mb() to fix theoretical race between waitqueue_active() and .poll()
    
    [ Upstream commit cacd9ae4bf801ff4125d8961bb9a3ba955e51680 ]
    
    As the comment above waitqueue_active() explains, it can only be used
    if both waker and waiter have mb()'s that pair with each other. However
    __pollwait() is broken in this respect.
    
    This is not pipe-specific, but let's look at pipe_poll() for example:
    
            poll_wait(...); // -> __pollwait() -> add_wait_queue()
    
            LOAD(pipe->head);
            LOAD(pipe->head);
    
    In theory these LOAD()'s can leak into the critical section inside
    add_wait_queue() and can happen before list_add(entry, wq_head), in this
    case pipe_poll() can race with wakeup_pipe_readers/writers which do
    
            smp_mb();
            if (waitqueue_active(wq_head))
                    wake_up_interruptible(wq_head);
    
    There are more __pollwait()-like functions (grep init_poll_funcptr), and
    it seems that at least ep_ptable_queue_proc() has the same problem, so the
    patch adds smp_mb() into poll_wait().
    
    Link: https://lore.kernel.org/all/20250102163320.GA17691@redhat.com/
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Link: https://lore.kernel.org/r/20250107162717.GA18922@redhat.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/bnxt_re: Fix to export port num to ib_query_qp [+ + +]
Author: Hongguang Gao <hongguang.gao@broadcom.com>
Date:   Wed Dec 11 14:09:30 2024 +0530

    RDMA/bnxt_re: Fix to export port num to ib_query_qp
    
    [ Upstream commit 34db8ec931b84d1426423f263b1927539e73b397 ]
    
    Current driver implementation doesn't populate the port_num
    field in query_qp. Adding the code to convert internal firmware
    port id to ibv defined port number and export it.
    
    Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Hongguang Gao <hongguang.gao@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/20241211083931.968831-5-kalesh-anakkur.purayil@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
reset: rzg2l-usbphy-ctrl: Assign proper of node to the allocated device [+ + +]
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Date:   Tue Nov 19 10:55:54 2024 +0200

    reset: rzg2l-usbphy-ctrl: Assign proper of node to the allocated device
    
    [ Upstream commit 1f8af9712413f456849fdf3f3a782cbe099476d7 ]
    
    The platform device named "rzg2l-usb-vbus-regulator", allocated by
    the rzg2l-usbphy-ctrl driver, is used to instantiate a regulator driver.
    This regulator driver is associated with a device tree (DT) node, which
    is a child of the rzg2l-usbphy-ctrl DT node. The regulator's DT node allows
    consumer nodes to reference the regulator and configure the regulator as
    needed.
    
    Starting with commit cd7a38c40b23 ("regulator: core: do not silently ignore
    provided init_data") the struct regulator_dev::dev::of_node is no longer
    populated using of_node_get(config->of_node) if the regulator does not
    provide init_data. Since the rzg2l-usb-vbus-regulator does not provide
    init_data, this behaviour causes the of_find_regulator_by_node() function
    to fails, resulting in errors when attempting to request the regulator.
    
    To fix this issue, call device_set_of_node_from_dev() for the
    "rzg2l-usb-vbus-regulator" platform device.
    
    Fixes: 84fbd6198766 ("regulator: Add Renesas RZ/G2L USB VBUS regulator driver")
    Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://lore.kernel.org/r/20241119085554.1035881-1-claudiu.beznea.uj@bp.renesas.com
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "drm/amd/display: Enable urgent latency adjustments for DCN35" [+ + +]
Author: Nicholas Susanto <Nicholas.Susanto@amd.com>
Date:   Thu Dec 19 14:15:37 2024 -0500

    Revert "drm/amd/display: Enable urgent latency adjustments for DCN35"
    
    commit 3412860cc4c0c484f53f91b371483e6e4440c3e5 upstream.
    
    Revert commit 284f141f5ce5 ("drm/amd/display: Enable urgent latency adjustments for DCN35")
    
    [Why & How]
    
    Urgent latency increase caused  2.8K OLED monitor caused it to
    block this panel support P0.
    
    Reverting this change does not reintroduce the netflix corruption issue
    which it fixed.
    
    Fixes: 284f141f5ce5 ("drm/amd/display: Enable urgent latency adjustments for DCN35")
    Reviewed-by: Charlene Liu <charlene.liu@amd.com>
    Signed-off-by: Nicholas Susanto <Nicholas.Susanto@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c7ccfc0d4241a834c25a9a9e1e78b388b4445d23)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "mtd: spi-nor: core: replace dummy buswidth from addr to data" [+ + +]
Author: Pratyush Yadav <pratyush@kernel.org>
Date:   Wed Jan 15 13:41:56 2025 +0000

    Revert "mtd: spi-nor: core: replace dummy buswidth from addr to data"
    
    [ Upstream commit d15638bf76ad47874ecb5dc386f0945fc0b2a875 ]
    
    This reverts commit 98d1fb94ce75f39febd456d6d3cbbe58b6678795.
    
    The commit uses data nbits instead of addr nbits for dummy phase. This
    causes a regression for all boards where spi-tx-bus-width is smaller
    than spi-rx-bus-width. It is a common pattern for boards to have
    spi-tx-bus-width == 1 and spi-rx-bus-width > 1. The regression causes
    all reads with a dummy phase to become unavailable for such boards,
    leading to a usually slower 0-dummy-cycle read being selected.
    
    Most controllers' supports_op hooks call spi_mem_default_supports_op().
    In spi_mem_default_supports_op(), spi_mem_check_buswidth() is called to
    check if the buswidths for the op can actually be supported by the
    board's wiring. This wiring information comes from (among other things)
    the spi-{tx,rx}-bus-width DT properties. Based on these properties,
    SPI_TX_* or SPI_RX_* flags are set by of_spi_parse_dt().
    spi_mem_check_buswidth() then uses these flags to make the decision
    whether an op can be supported by the board's wiring (in a way,
    indirectly checking against spi-{rx,tx}-bus-width).
    
    Now the tricky bit here is that spi_mem_check_buswidth() does:
    
            if (op->dummy.nbytes &&
                spi_check_buswidth_req(mem, op->dummy.buswidth, true))
                    return false;
    
    The true argument to spi_check_buswidth_req() means the op is treated as
    a TX op. For a board that has say 1-bit TX and 4-bit RX, a 4-bit dummy
    TX is considered as unsupported, and the op gets rejected.
    
    The commit being reverted uses the data buswidth for dummy buswidth. So
    for reads, the RX buswidth gets used for the dummy phase, uncovering
    this issue. In reality, a dummy phase is neither RX nor TX. As the name
    suggests, these are just dummy cycles that send or receive no data, and
    thus don't really need to have any buswidth at all.
    
    Ideally, dummy phases should not be checked against the board's wiring
    capabilities at all, and should only be sanity-checked for having a sane
    buswidth value. Since we are now at rc7 and such a change might
    introduce many unexpected bugs, revert the commit for now. It can be
    sent out later along with the spi_mem_check_buswidth() fix.
    
    Fixes: 98d1fb94ce75 ("mtd: spi-nor: core: replace dummy buswidth from addr to data")
    Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Closes: https://lore.kernel.org/linux-mtd/3342163.44csPzL39Z@steina-w/
    Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Signed-off-by: Pratyush Yadav <pratyush@kernel.org>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/fair: Fix update_cfs_group() vs DELAY_DEQUEUE [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Mon Jan 13 13:50:11 2025 +0100

    sched/fair: Fix update_cfs_group() vs DELAY_DEQUEUE
    
    [ Upstream commit 66951e4860d3c688bfa550ea4a19635b57e00eca ]
    
    Normally dequeue_entities() will continue to dequeue an empty group entity;
    except DELAY_DEQUEUE changes things -- it retains empty entities such that they
    might continue to compete and burn off some lag.
    
    However, doing this results in update_cfs_group() re-computing the cgroup
    weight 'slice' for an empty group, which it (rightly) figures isn't much at
    all. This in turn means that the delayed entity is not competing at the
    expected weight. Worse, the very low weight causes its lag to be inflated,
    which combined with avg_vruntime() using scale_load_down(), leads to artifacts.
    
    As such, don't adjust the weight for empty group entities and let them compete
    at their original weight.
    
    Fixes: 152e11f6df29 ("sched/fair: Implement delayed dequeue")
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20250110115720.GA17405@noisy.programming.kicks-ass.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched_ext: Fix dsq_local_on selftest [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Dec 24 14:09:15 2024 -1000

    sched_ext: Fix dsq_local_on selftest
    
    [ Upstream commit ce2b93fc1dfa1c82f2576aa571731c4e5dcc8dd7 ]
    
    The dsp_local_on selftest expects the scheduler to fail by trying to
    schedule an e.g. CPU-affine task to the wrong CPU. However, this isn't
    guaranteed to happen in the 1 second window that the test is running.
    Besides, it's odd to have this particular exception path tested when there
    are no other tests that verify that the interface is working at all - e.g.
    the test would pass if dsp_local_on interface is completely broken and fails
    on any attempt.
    
    Flip the test so that it verifies that the feature works. While at it, fix a
    typo in the info message.
    
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-by: Ihor Solodrai <ihor.solodrai@pm.me>
    Link: http://lkml.kernel.org/r/Z1n9v7Z6iNJ-wKmq@slm.duckdns.org
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched_ext: keep running prev when prev->scx.slice != 0 [+ + +]
Author: Henry Huang <henry.hj@antgroup.com>
Date:   Wed Jan 8 16:47:10 2025 +0800

    sched_ext: keep running prev when prev->scx.slice != 0
    
    [ Upstream commit 30dd3b13f9de612ef7328ccffcf1a07d0d40ab51 ]
    
    When %SCX_OPS_ENQ_LAST is set and prev->scx.slice != 0,
    @prev will be dispacthed into the local DSQ in put_prev_task_scx().
    However, pick_task_scx() is executed before put_prev_task_scx(),
    so it will not pick @prev.
    Set %SCX_RQ_BAL_KEEP in balance_one() to ensure that pick_task_scx()
    can pick @prev.
    
    Signed-off-by: Henry Huang <henry.hj@antgroup.com>
    Acked-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: ufs: core: Honor runtime/system PM levels if set by host controller drivers [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Date:   Thu Dec 19 22:20:42 2024 +0530

    scsi: ufs: core: Honor runtime/system PM levels if set by host controller drivers
    
    [ Upstream commit bb9850704c043e48c86cc9df90ee102e8a338229 ]
    
    Otherwise, the default levels will override the levels set by the host
    controller drivers.
    
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20241219-ufs-qcom-suspend-fix-v3-2-63c4b95a70b9@linaro.org
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scx: Fix maximal BPF selftest prog [+ + +]
Author: David Vernet <void@manifault.com>
Date:   Mon Dec 9 09:29:24 2024 -0600

    scx: Fix maximal BPF selftest prog
    
    [ Upstream commit b8f614207b0d5e4abd6df8d5cb3cc11f009d1d93 ]
    
    maximal.bpf.c is still dispatching to and consuming from SCX_DSQ_GLOBAL.
    Let's have it use its own DSQ to avoid any runtime errors.
    
    Signed-off-by: David Vernet <void@manifault.com>
    Tested-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/mm: set allocated memory to non-zero content in cow test [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Jan 7 14:25:53 2025 +0000

    selftests/mm: set allocated memory to non-zero content in cow test
    
    commit a32bf5bb7933fde6f39747499f8ec232b5b5400f upstream.
    
    After commit b1f202060afe ("mm: remap unused subpages to shared zeropage
    when splitting isolated thp"), cow test cases involving swapping out THPs
    via madvise(MADV_PAGEOUT) started to be skipped due to the subsequent
    check via pagemap determining that the memory was not actually swapped
    out.  Logs similar to this were emitted:
    
       ...
    
       # [RUN] Basic COW after fork() ... with swapped-out, PTE-mapped THP (16 kB)
       ok 2 # SKIP MADV_PAGEOUT did not work, is swap enabled?
       # [RUN] Basic COW after fork() ... with single PTE of swapped-out THP (16 kB)
       ok 3 # SKIP MADV_PAGEOUT did not work, is swap enabled?
       # [RUN] Basic COW after fork() ... with swapped-out, PTE-mapped THP (32 kB)
       ok 4 # SKIP MADV_PAGEOUT did not work, is swap enabled?
    
       ...
    
    The commit in question introduces the behaviour of scanning THPs and if
    their content is predominantly zero, it splits them and replaces the pages
    which are wholly zero with the zero page.  These cow test cases were
    getting caught up in this.
    
    So let's avoid that by filling the contents of all allocated memory with
    a non-zero value. With this in place, the tests are passing again.
    
    Link: https://lkml.kernel.org/r/20250107142555.1870101-1-ryan.roberts@arm.com
    Fixes: b1f202060afe ("mm: remap unused subpages to shared zeropage when splitting isolated thp")
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Usama Arif <usamaarif642@gmail.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/sched_ext: fix build after renames in sched_ext API [+ + +]
Author: Ihor Solodrai <ihor.solodrai@pm.me>
Date:   Thu Nov 21 21:40:17 2024 +0000

    selftests/sched_ext: fix build after renames in sched_ext API
    
    [ Upstream commit ef7009decc30eb2515a64253791d61b72229c119 ]
    
    The selftests are falining to build on current tip of bpf-next and
    sched_ext [1]. This has broken BPF CI [2] after merge from upstream.
    
    Use appropriate function names in the selftests according to the
    recent changes in the sched_ext API [3].
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=fc39fb56917bb3cb53e99560ca3612a84456ada2
    [2] https://github.com/kernel-patches/bpf/actions/runs/11959327258/job/33340923745
    [3] https://lore.kernel.org/all/20241109194853.580310-1-tj@kernel.org/
    
    Signed-off-by: Ihor Solodrai <ihor.solodrai@pm.me>
    Acked-by: Andrea Righi <arighi@nvidia.com>
    Acked-by: David Vernet <void@manifault.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: mptcp: avoid spurious errors on disconnect [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Jan 13 16:44:58 2025 +0100

    selftests: mptcp: avoid spurious errors on disconnect
    
    commit 218cc166321fb3cc8786677ffe0d09a78778a910 upstream.
    
    The disconnect test-case generates spurious errors:
    
      INFO: disconnect
      INFO: extra options: -I 3 -i /tmp/tmp.r43niviyoI
      01 ns1 MPTCP -> ns1 (10.0.1.1:10000      ) MPTCP (duration 140ms) [FAIL]
      file received by server does not match (in, out):
      Unexpected revents: POLLERR/POLLNVAL(19)
      -rw-r--r-- 1 root root 10028676 Jan 10 10:47 /tmp/tmp.r43niviyoI.disconnect
      Trailing bytes are:
      ��\����R���!8��u2��5N%
      -rw------- 1 root root 9992290 Jan 10 10:47 /tmp/tmp.Os4UbnWbI1
      Trailing bytes are:
      ��\����R���!8��u2��5N%
      02 ns1 MPTCP -> ns1 (dead:beef:1::1:10001) MPTCP (duration 206ms) [ OK ]
      03 ns1 MPTCP -> ns1 (dead:beef:1::1:10002) TCP   (duration  31ms) [ OK ]
      04 ns1 TCP   -> ns1 (dead:beef:1::1:10003) MPTCP (duration  26ms) [ OK ]
      [FAIL] Tests of the full disconnection have failed
      Time: 2 seconds
    
    The root cause is actually in the user-space bits: the test program
    currently disconnects as soon as all the pending data has been spooled,
    generating an FASTCLOSE. If such option reaches the peer before the
    latter has reached the closed status, the msk socket will report an
    error to the user-space, as per protocol specification, causing the
    above failure.
    
    Address the issue explicitly waiting for all the relevant sockets to
    reach a closed status before performing the disconnect.
    
    Fixes: 05be5e273c84 ("selftests: mptcp: add disconnect tests")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250113-net-mptcp-connect-st-flakes-v1-3-0d986ee7b1b6@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: tc-testing: reduce rshift value [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Jan 3 10:24:58 2025 -0800

    selftests: tc-testing: reduce rshift value
    
    [ Upstream commit e95274dfe86490ec2a5633035c24b2de6722841f ]
    
    After previous change rshift >= 32 is no longer allowed.
    Modify the test to use 31, the test doesn't seem to send
    any traffic so the exact value shouldn't matter.
    
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250103182458.1213486-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb: client: fix double free of TCP_Server_Info::hostname [+ + +]
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Tue Jan 14 12:48:48 2025 -0300

    smb: client: fix double free of TCP_Server_Info::hostname
    
    [ Upstream commit fa2f9906a7b333ba757a7dbae0713d8a5396186e ]
    
    When shutting down the server in cifs_put_tcp_session(), cifsd thread
    might be reconnecting to multiple DFS targets before it realizes it
    should exit the loop, so @server->hostname can't be freed as long as
    cifsd thread isn't done.  Otherwise the following can happen:
    
      RIP: 0010:__slab_free+0x223/0x3c0
      Code: 5e 41 5f c3 cc cc cc cc 4c 89 de 4c 89 cf 44 89 44 24 08 4c 89
      1c 24 e8 fb cf 8e 00 44 8b 44 24 08 4c 8b 1c 24 e9 5f fe ff ff <0f>
      0b 41 f7 45 08 00 0d 21 00 0f 85 2d ff ff ff e9 1f ff ff ff 80
      RSP: 0018:ffffb26180dbfd08 EFLAGS: 00010246
      RAX: ffff8ea34728e510 RBX: ffff8ea34728e500 RCX: 0000000000800068
      RDX: 0000000000800068 RSI: 0000000000000000 RDI: ffff8ea340042400
      RBP: ffffe112041ca380 R08: 0000000000000001 R09: 0000000000000000
      R10: 6170732e31303000 R11: 70726f632e786563 R12: ffff8ea34728e500
      R13: ffff8ea340042400 R14: ffff8ea34728e500 R15: 0000000000800068
      FS: 0000000000000000(0000) GS:ffff8ea66fd80000(0000)
      000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007ffc25376080 CR3: 000000012a2ba001 CR4:
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? show_trace_log_lvl+0x1c4/0x2df
       ? show_trace_log_lvl+0x1c4/0x2df
       ? __reconnect_target_unlocked+0x3e/0x160 [cifs]
       ? __die_body.cold+0x8/0xd
       ? die+0x2b/0x50
       ? do_trap+0xce/0x120
       ? __slab_free+0x223/0x3c0
       ? do_error_trap+0x65/0x80
       ? __slab_free+0x223/0x3c0
       ? exc_invalid_op+0x4e/0x70
       ? __slab_free+0x223/0x3c0
       ? asm_exc_invalid_op+0x16/0x20
       ? __slab_free+0x223/0x3c0
       ? extract_hostname+0x5c/0xa0 [cifs]
       ? extract_hostname+0x5c/0xa0 [cifs]
       ? __kmalloc+0x4b/0x140
       __reconnect_target_unlocked+0x3e/0x160 [cifs]
       reconnect_dfs_server+0x145/0x430 [cifs]
       cifs_handle_standard+0x1ad/0x1d0 [cifs]
       cifs_demultiplex_thread+0x592/0x730 [cifs]
       ? __pfx_cifs_demultiplex_thread+0x10/0x10 [cifs]
       kthread+0xdd/0x100
       ? __pfx_kthread+0x10/0x10
       ret_from_fork+0x29/0x50
       </TASK>
    
    Fixes: 7be3248f3139 ("cifs: To match file servers, make sure the server hostname matches")
    Reported-by: Jay Shin <jaeshin@redhat.com>
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: ti: pruss: Fix pruss APIs [+ + +]
Author: MD Danish Anwar <danishanwar@ti.com>
Date:   Fri Dec 20 15:35:07 2024 +0530

    soc: ti: pruss: Fix pruss APIs
    
    [ Upstream commit 202580b60229345dc2637099f10c8a8857c1fdc2 ]
    
    PRUSS APIs in pruss_driver.h produce lots of compilation errors when
    CONFIG_TI_PRUSS is not set.
    
    The errors and warnings,
    warning: returning 'void *' from a function with return type 'int' makes
            integer from pointer without a cast [-Wint-conversion]
    error: expected identifier or '(' before '{' token
    
    Fix these warnings and errors by fixing the return type of pruss APIs as
    well as removing the misplaced semicolon from pruss_cfg_xfr_enable()
    
    Fixes: 0211cc1e4fbb ("soc: ti: pruss: Add helper functions to set GPI mode, MII_RT_event and XFR")
    Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
    Reviewed-by: Roger Quadros <rogerq@kernel.org>
    Link: https://lore.kernel.org/r/20241220100508.1554309-2-danishanwar@ti.com
    Signed-off-by: Nishanth Menon <nm@ti.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
timers/migration: Enforce group initialization visibility to tree walkers [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Wed Jan 15 00:15:05 2025 +0100

    timers/migration: Enforce group initialization visibility to tree walkers
    
    commit de3ced72a79280fefd680e5e101d8b9f03cfa1d7 upstream.
    
    Commit 2522c84db513 ("timers/migration: Fix another race between hotplug
    and idle entry/exit") fixed yet another race between idle exit and CPU
    hotplug up leading to a wrong "0" value migrator assigned to the top
    level. However there is yet another situation that remains unhandled:
    
             [GRP0:0]
          migrator  = TMIGR_NONE
          active    = NONE
          groupmask = 1
          /     \      \
         0       1     2..7
       idle      idle   idle
    
    0) The system is fully idle.
    
             [GRP0:0]
          migrator  = CPU 0
          active    = CPU 0
          groupmask = 1
          /     \      \
         0       1     2..7
       active   idle   idle
    
    1) CPU 0 is activating. It has done the cmpxchg on the top's ->migr_state
    but it hasn't yet returned to __walk_groups().
    
             [GRP0:0]
          migrator  = CPU 0
          active    = CPU 0, CPU 1
          groupmask = 1
          /     \      \
         0       1     2..7
       active  active  idle
    
    2) CPU 1 is activating. CPU 0 stays the migrator (still stuck in
    __walk_groups(), delayed by #VMEXIT for example).
    
                        [GRP1:0]
                    migrator = TMIGR_NONE
                    active   = NONE
                    groupmask = 1
                 /                   \
             [GRP0:0]                  [GRP0:1]
          migrator  = CPU 0           migrator = TMIGR_NONE
          active    = CPU 0, CPU1     active   = NONE
          groupmask = 1               groupmask = 2
          /     \      \
         0       1     2..7                   8
       active  active  idle                !online
    
    3) CPU 8 is preparing to boot. CPUHP_TMIGR_PREPARE is being ran by CPU 1
    which has created the GRP0:1 and the new top GRP1:0 connected to GRP0:1
    and GRP0:0. CPU 1 hasn't yet propagated its activation up to GRP1:0.
    
                        [GRP1:0]
                   migrator = GRP0:0
                   active   = GRP0:0
                   groupmask = 1
                 /                   \
             [GRP0:0]                  [GRP0:1]
         migrator  = CPU 0           migrator = TMIGR_NONE
         active    = CPU 0, CPU1     active   = NONE
         groupmask = 1               groupmask = 2
         /     \      \
        0       1     2..7                   8
      active  active  idle                !online
    
    4) CPU 0 finally resumed after its #VMEXIT. It's in __walk_groups()
    returning from tmigr_cpu_active(). The new top GRP1:0 is visible and
    fetched and the pre-initialized groupmask of GRP0:0 is also visible.
    As a result tmigr_active_up() is called to GRP1:0 with GRP0:0 as active
    and migrator. CPU 0 is returning to __walk_groups() but suffers again
    a #VMEXIT.
    
                        [GRP1:0]
                   migrator = GRP0:0
                   active   = GRP0:0
                   groupmask = 1
                 /                   \
             [GRP0:0]                  [GRP0:1]
         migrator  = CPU 0           migrator = TMIGR_NONE
         active    = CPU 0, CPU1     active   = NONE
         groupmask = 1               groupmask = 2
         /     \      \
        0       1     2..7                   8
      active  active  idle                 !online
    
    5) CPU 1 propagates its activation of GRP0:0 to GRP1:0. This has no
       effect since CPU 0 did it already.
    
                        [GRP1:0]
                   migrator = GRP0:0
                   active   = GRP0:0, GRP0:1
                   groupmask = 1
                 /                   \
             [GRP0:0]                  [GRP0:1]
         migrator  = CPU 0           migrator = CPU 8
         active    = CPU 0, CPU1     active   = CPU 8
         groupmask = 1               groupmask = 2
         /     \      \                     \
        0       1     2..7                   8
      active  active  idle                 active
    
    6) CPU 1 links CPU 8 to its group. CPU 8 boots and goes through
       CPUHP_AP_TMIGR_ONLINE which propagates activation.
    
                                       [GRP2:0]
                                  migrator = TMIGR_NONE
                                  active   = NONE
                                  groupmask = 1
                                 /                \
                        [GRP1:0]                    [GRP1:1]
                   migrator = GRP0:0              migrator = TMIGR_NONE
                   active   = GRP0:0, GRP0:1      active   = NONE
                   groupmask = 1                  groupmask = 2
                 /                   \
             [GRP0:0]                  [GRP0:1]                [GRP0:2]
         migrator  = CPU 0           migrator = CPU 8        migrator = TMIGR_NONE
         active    = CPU 0, CPU1     active   = CPU 8        active   = NONE
         groupmask = 1               groupmask = 2           groupmask = 0
         /     \      \                     \
        0       1     2..7                   8                  64
      active  active  idle                 active             !online
    
    7) CPU 64 is booting. CPUHP_TMIGR_PREPARE is being ran by CPU 1
    which has created the GRP1:1, GRP0:2 and the new top GRP2:0 connected to
    GRP1:1 and GRP1:0. CPU 1 hasn't yet propagated its activation up to
    GRP2:0.
    
                                       [GRP2:0]
                                  migrator = 0 (!!!)
                                  active   = NONE
                                  groupmask = 1
                                 /                \
                        [GRP1:0]                    [GRP1:1]
                   migrator = GRP0:0              migrator = TMIGR_NONE
                   active   = GRP0:0, GRP0:1      active   = NONE
                   groupmask = 1                  groupmask = 2
                 /                   \
             [GRP0:0]                  [GRP0:1]                [GRP0:2]
         migrator  = CPU 0           migrator = CPU 8        migrator = TMIGR_NONE
         active    = CPU 0, CPU1     active   = CPU 8        active   = NONE
         groupmask = 1               groupmask = 2           groupmask = 0
         /     \      \                     \
        0       1     2..7                   8                  64
      active  active  idle                 active             !online
    
    8) CPU 0 finally resumed after its #VMEXIT. It's in __walk_groups()
    returning from tmigr_cpu_active(). The new top GRP2:0 is visible and
    fetched but the pre-initialized groupmask of GRP1:0 is not because no
    ordering made its initialization visible. As a result tmigr_active_up()
    may be called to GRP2:0 with a "0" child's groumask. Leaving the timers
    ignored for ever when the system is fully idle.
    
    The race is highly theoretical and perhaps impossible in practice but
    the groupmask of the child is not the only concern here as the whole
    initialization of the child is not guaranteed to be visible to any
    tree walker racing against hotplug (idle entry/exit, remote handling,
    etc...). Although the current code layout seem to be resilient to such
    hazards, this doesn't tell much about the future.
    
    Fix this with enforcing address dependency between group initialization
    and the write/read to the group's parent's pointer. Fortunately that
    doesn't involve any barrier addition in the fast paths.
    
    Fixes: 10a0e6f3d3db ("timers/migration: Move hierarchy setup into cpuhotplug prepare callback")
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20250114231507.21672-3-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

timers/migration: Fix another race between hotplug and idle entry/exit [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Wed Jan 15 00:15:04 2025 +0100

    timers/migration: Fix another race between hotplug and idle entry/exit
    
    commit b729cc1ec21a5899b7879ccfbe1786664928d597 upstream.
    
    Commit 10a0e6f3d3db ("timers/migration: Move hierarchy setup into
    cpuhotplug prepare callback") fixed a race between idle exit and CPU
    hotplug up leading to a wrong "0" value migrator assigned to the top
    level. However there is still a situation that remains unhandled:
    
             [GRP0:0]
            migrator  = TMIGR_NONE
            active    = NONE
            groupmask = 0
            /     \      \
           0       1     2..7
         idle      idle   idle
    
    0) The system is fully idle.
    
             [GRP0:0]
            migrator  = CPU 0
            active    = CPU 0
            groupmask = 0
            /     \      \
           0       1     2..7
         active   idle   idle
    
    1) CPU 0 is activating. It has done the cmpxchg on the top's ->migr_state
    but it hasn't yet returned to __walk_groups().
    
             [GRP0:0]
            migrator  = CPU 0
            active    = CPU 0, CPU 1
            groupmask = 0
            /     \      \
           0       1     2..7
         active  active  idle
    
    2) CPU 1 is activating. CPU 0 stays the migrator (still stuck in
    __walk_groups(), delayed by #VMEXIT for example).
    
                     [GRP1:0]
                  migrator = TMIGR_NONE
                  active   = NONE
                  groupmask = 0
                  /                  \
            [GRP0:0]                      [GRP0:1]
           migrator  = CPU 0           migrator = TMIGR_NONE
           active    = CPU 0, CPU1     active   = NONE
           groupmask = 2               groupmask = 1
           /     \      \
          0       1     2..7                   8
        active  active  idle              !online
    
    3) CPU 8 is preparing to boot. CPUHP_TMIGR_PREPARE is being ran by CPU 1
    which has created the GRP0:1 and the new top GRP1:0 connected to GRP0:1
    and GRP0:0. The groupmask of GRP0:0 is now 2. CPU 1 hasn't yet
    propagated its activation up to GRP1:0.
    
                     [GRP1:0]
                  migrator = 0 (!!!)
                  active   = NONE
                  groupmask = 0
                  /                  \
            [GRP0:0]                  [GRP0:1]
           migrator  = CPU 0           migrator = TMIGR_NONE
           active    = CPU 0, CPU1     active   = NONE
           groupmask = 2               groupmask = 1
           /     \      \
          0       1     2..7                   8
        active  active  idle                !online
    
    4) CPU 0 finally resumed after its #VMEXIT. It's in __walk_groups()
    returning from tmigr_cpu_active(). The new top GRP1:0 is visible and
    fetched but the freshly updated groupmask of GRP0:0 may not be visible
    due to lack of ordering! As a result tmigr_active_up() is called to
    GRP0:0 with a child's groupmask of "0". This buggy "0" groupmask then
    becomes the migrator for GRP1:0 forever. As a result, timers on a fully
    idle system get ignored.
    
    One possible fix would be to define TMIGR_NONE as "0" so that such a
    race would have no effect. And after all TMIGR_NONE doesn't need to be
    anything else. However this would leave an uncomfortable state machine
    where gears happen not to break by chance but are vulnerable to future
    modifications.
    
    Keep TMIGR_NONE as is instead and pre-initialize to "1" the groupmask of
    any newly created top level. This groupmask is guaranteed to be visible
    upon fetching the corresponding group for the 1st time:
    
    _ By the upcoming CPU thanks to CPU hotplug synchronization between the
      control CPU (BP) and the booting one (AP).
    
    _ By the control CPU since the groupmask and parent pointers are
      initialized locally.
    
    _ By all CPUs belonging to the same group than the control CPU because
      they must wait for it to ever become idle before needing to walk to
      the new top. The cmpcxhg() on ->migr_state then makes sure its
      groupmask is visible.
    
    With this pre-initialization, it is guaranteed that if a future top level
    is linked to an old one, it is walked through with a valid groupmask.
    
    Fixes: 10a0e6f3d3db ("timers/migration: Move hierarchy setup into cpuhotplug prepare callback")
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20250114231507.21672-2-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tools: fix atomic_set() definition to set the value correctly [+ + +]
Author: Suren Baghdasaryan <surenb@google.com>
Date:   Fri Dec 27 14:22:20 2024 -0800

    tools: fix atomic_set() definition to set the value correctly
    
    commit 4bbb6df62c54e6a2c1fcce4908df768f0cfa1e91 upstream.
    
    Currently vma test is failing because of the new vma_assert_attached()
    assertion.  The check is failing because previous refcount_set() inside
    vma_mark_attached() is a NoOp.  Fix the definition of atomic_set() to
    correctly set the value of the atomic.
    
    Link: https://lkml.kernel.org/r/20241227222220.1726384-1-surenb@google.com
    Fixes: 9325b8b5a1cb ("tools: add skeleton code for userland testing of VMA logic")
    Signed-off-by: Suren Baghdasaryan <surenb@google.com>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: gfp: Fix the GFP enum values shown for user space tracing tools [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Jan 16 16:41:24 2025 -0500

    tracing: gfp: Fix the GFP enum values shown for user space tracing tools
    
    commit 60295b944ff6805e677c48ae4178532b207d43be upstream.
    
    Tracing tools like perf and trace-cmd read the /sys/kernel/tracing/events/*/*/format
    files to know how to parse the data and also how to print it. For the
    "print fmt" portion of that file, if anything uses an enum that is not
    exported to the tracing system, user space will not be able to parse it.
    
    The GFP flags use to be defines, and defines get translated in the print
    fmt sections. But now they are converted to use enums, which is not.
    
    The mm_page_alloc trace event format use to have:
    
      print fmt: "page=%p pfn=0x%lx order=%d migratetype=%d gfp_flags=%s",
        REC->pfn != -1UL ? (((struct page *)vmemmap_base) + (REC->pfn)) : ((void
        *)0), REC->pfn != -1UL ? REC->pfn : 0, REC->order, REC->migratetype,
        (REC->gfp_flags) ? __print_flags(REC->gfp_flags, "|", {( unsigned
        long)(((((((( gfp_t)(0x400u|0x800u)) | (( gfp_t)0x40u) | (( gfp_t)0x80u) |
        (( gfp_t)0x100000u)) | (( gfp_t)0x02u)) | (( gfp_t)0x08u) | (( gfp_t)0)) |
        (( gfp_t)0x40000u) | (( gfp_t)0x80000u) | (( gfp_t)0x2000u)) & ~((
        gfp_t)(0x400u|0x800u))) | (( gfp_t)0x400u)), "GFP_TRANSHUGE"}, {( unsigned
        long)((((((( gfp_t)(0x400u|0x800u)) | (( gfp_t)0x40u) | (( gfp_t)0x80u) |
        (( gfp_t)0x100000u)) | (( gfp_t)0x02u)) | (( gfp_t)0x08u) | (( gfp_t)0)) ...
    
    Where the GFP values are shown and not their names. But after the GFP
    flags were converted to use enums, it has:
    
      print fmt: "page=%p pfn=0x%lx order=%d migratetype=%d gfp_flags=%s",
        REC->pfn != -1UL ? (vmemmap + (REC->pfn)) : ((void *)0), REC->pfn != -1UL
        ? REC->pfn : 0, REC->order, REC->migratetype, (REC->gfp_flags) ?
        __print_flags(REC->gfp_flags, "|", {( unsigned long)((((((((
        gfp_t)(((((1UL))) << (___GFP_DIRECT_RECLAIM_BIT))|((((1UL))) <<
        (___GFP_KSWAPD_RECLAIM_BIT)))) | (( gfp_t)((((1UL))) << (___GFP_IO_BIT)))
        | (( gfp_t)((((1UL))) << (___GFP_FS_BIT))) | (( gfp_t)((((1UL))) <<
        (___GFP_HARDWALL_BIT)))) | (( gfp_t)((((1UL))) << (___GFP_HIGHMEM_BIT))))
        | (( gfp_t)((((1UL))) << (___GFP_MOVABLE_BIT))) | (( gfp_t)0)) | ((
        gfp_t)((((1UL))) << (___GFP_COMP_BIT))) ...
    
    Where the enums names like ___GFP_KSWAPD_RECLAIM_BIT are shown and not their
    values. User space has no way to convert these names to their values and
    the output will fail to parse. What is shown is now:
    
      mm_page_alloc:  page=0xffffffff981685f3 pfn=0x1d1ac1 order=0 migratetype=1 gfp_flags=0x140cca
    
    The TRACE_DEFINE_ENUM() macro was created to handle enums in the print fmt
    files. This causes them to be replaced at boot up with the numbers, so
    that user space tooling can parse it. By using this macro, the output is
    back to the human readable:
    
      mm_page_alloc: page=0xffffffff981685f3 pfn=0x122233 order=0 migratetype=1 gfp_flags=GFP_HIGHUSER_MOVABLE|__GFP_COMP
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Veronika  Molnarova <vmolnaro@redhat.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20250116214438.749504792@goodmis.org
    Reported-by: Michael Petlan <mpetlan@redhat.com>
    Closes: https://lore.kernel.org/all/87be5f7c-1a0-dad-daa0-54e342efaea7@redhat.com/
    Fixes: 772dd0342727c ("mm: enumerate all gfp flags")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock/bpf: return early if transport is not assigned [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Jan 10 09:35:08 2025 +0100

    vsock/bpf: return early if transport is not assigned
    
    commit f6abafcd32f9cfc4b1a2f820ecea70773e26d423 upstream.
    
    Some of the core functions can only be called if the transport
    has been assigned.
    
    As Michal reported, a socket might have the transport at NULL,
    for example after a failed connect(), causing the following trace:
    
        BUG: kernel NULL pointer dereference, address: 00000000000000a0
        #PF: supervisor read access in kernel mode
        #PF: error_code(0x0000) - not-present page
        PGD 12faf8067 P4D 12faf8067 PUD 113670067 PMD 0
        Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
        CPU: 15 UID: 0 PID: 1198 Comm: a.out Not tainted 6.13.0-rc2+
        RIP: 0010:vsock_connectible_has_data+0x1f/0x40
        Call Trace:
         vsock_bpf_recvmsg+0xca/0x5e0
         sock_recvmsg+0xb9/0xc0
         __sys_recvfrom+0xb3/0x130
         __x64_sys_recvfrom+0x20/0x30
         do_syscall_64+0x93/0x180
         entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    So we need to check the `vsk->transport` in vsock_bpf_recvmsg(),
    especially for connected sockets (stream/seqpacket) as we already
    do in __vsock_connectible_recvmsg().
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Cc: stable@vger.kernel.org
    Reported-by: Michal Luczaj <mhal@rbox.co>
    Closes: https://lore.kernel.org/netdev/5ca20d4c-1017-49c2-9516-f6f75fd331e9@rbox.co/
    Tested-by: Michal Luczaj <mhal@rbox.co>
    Reported-by: syzbot+3affdbfc986ecd9200fd@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/677f84a8.050a0220.25a300.01b3.GAE@google.com/
    Tested-by: syzbot+3affdbfc986ecd9200fd@syzkaller.appspotmail.com
    Reviewed-by: Hyunwoo Kim <v4bel@theori.io>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock/virtio: cancel close work in the destructor [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Jan 10 09:35:09 2025 +0100

    vsock/virtio: cancel close work in the destructor
    
    commit df137da9d6d166e87e40980e36eb8e0bc90483ef upstream.
    
    During virtio_transport_release() we can schedule a delayed work to
    perform the closing of the socket before destruction.
    
    The destructor is called either when the socket is really destroyed
    (reference counter to zero), or it can also be called when we are
    de-assigning the transport.
    
    In the former case, we are sure the delayed work has completed, because
    it holds a reference until it completes, so the destructor will
    definitely be called after the delayed work is finished.
    But in the latter case, the destructor is called by AF_VSOCK core, just
    after the release(), so there may still be delayed work scheduled.
    
    Refactor the code, moving the code to delete the close work already in
    the do_close() to a new function. Invoke it during destruction to make
    sure we don't leave any pending work.
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Cc: stable@vger.kernel.org
    Reported-by: Hyunwoo Kim <v4bel@theori.io>
    Closes: https://lore.kernel.org/netdev/Z37Sh+utS+iV3+eb@v4bel-B760M-AORUS-ELITE-AX/
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Tested-by: Hyunwoo Kim <v4bel@theori.io>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vsock/virtio: discard packets if the transport changes [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Jan 10 09:35:07 2025 +0100

    vsock/virtio: discard packets if the transport changes
    
    commit 2cb7c756f605ec02ffe562fb26828e4bcc5fdfc1 upstream.
    
    If the socket has been de-assigned or assigned to another transport,
    we must discard any packets received because they are not expected
    and would cause issues when we access vsk->transport.
    
    A possible scenario is described by Hyunwoo Kim in the attached link,
    where after a first connect() interrupted by a signal, and a second
    connect() failed, we can find `vsk->transport` at NULL, leading to a
    NULL pointer dereference.
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Cc: stable@vger.kernel.org
    Reported-by: Hyunwoo Kim <v4bel@theori.io>
    Reported-by: Wongi Lee <qwerty@theori.io>
    Closes: https://lore.kernel.org/netdev/Z2LvdTTQR7dBmPb5@v4bel-B760M-AORUS-ELITE-AX/
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Hyunwoo Kim <v4bel@theori.io>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock: prevent null-ptr-deref in vsock_*[has_data|has_space] [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Jan 10 09:35:11 2025 +0100

    vsock: prevent null-ptr-deref in vsock_*[has_data|has_space]
    
    commit 91751e248256efc111e52e15115840c35d85abaf upstream.
    
    Recent reports have shown how we sometimes call vsock_*_has_data()
    when a vsock socket has been de-assigned from a transport (see attached
    links), but we shouldn't.
    
    Previous commits should have solved the real problems, but we may have
    more in the future, so to avoid null-ptr-deref, we can return 0
    (no space, no data available) but with a warning.
    
    This way the code should continue to run in a nearly consistent state
    and have a warning that allows us to debug future problems.
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/netdev/Z2K%2FI4nlHdfMRTZC@v4bel-B760M-AORUS-ELITE-AX/
    Link: https://lore.kernel.org/netdev/5ca20d4c-1017-49c2-9516-f6f75fd331e9@rbox.co/
    Link: https://lore.kernel.org/netdev/677f84a8.050a0220.25a300.01b3.GAE@google.com/
    Co-developed-by: Hyunwoo Kim <v4bel@theori.io>
    Signed-off-by: Hyunwoo Kim <v4bel@theori.io>
    Co-developed-by: Wongi Lee <qwerty@theori.io>
    Signed-off-by: Wongi Lee <qwerty@theori.io>
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Reviewed-by: Hyunwoo Kim <v4bel@theori.io>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vsock: reset socket state when de-assigning the transport [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Fri Jan 10 09:35:10 2025 +0100

    vsock: reset socket state when de-assigning the transport
    
    commit a24009bc9be60242651a21702609381b5092459e upstream.
    
    Transport's release() and destruct() are called when de-assigning the
    vsock transport. These callbacks can touch some socket state like
    sock flags, sk_state, and peer_shutdown.
    
    Since we are reassigning the socket to a new transport during
    vsock_connect(), let's reset these fields to have a clean state with
    the new transport.
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/asm: Make serialize() always_inline [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Wed Dec 18 11:09:18 2024 +0100

    x86/asm: Make serialize() always_inline
    
    [ Upstream commit ae02ae16b76160f0aeeae2c5fb9b15226d00a4ef ]
    
    In order to allow serialize() to be used from noinstr code, make it
    __always_inline.
    
    Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
    Closes: https://lore.kernel.org/oe-kbuild-all/202412181756.aJvzih2K-lkp@intel.com/
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20241218100918.22167-1-jgross@suse.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/fred: Fix the FRED RSP0 MSR out of sync with its per-CPU cache [+ + +]
Author: Xin Li (Intel) <xin@zytor.com>
Date:   Fri Jan 10 09:46:39 2025 -0800

    x86/fred: Fix the FRED RSP0 MSR out of sync with its per-CPU cache
    
    commit de31b3cd706347044e1a57d68c3a683d58e8cca4 upstream.
    
    The FRED RSP0 MSR is only used for delivering events when running
    userspace.  Linux leverages this property to reduce expensive MSR
    writes and optimize context switches.  The kernel only writes the
    MSR when about to run userspace *and* when the MSR has actually
    changed since the last time userspace ran.
    
    This optimization is implemented by maintaining a per-CPU cache of
    FRED RSP0 and then checking that against the value for the top of
    current task stack before running userspace.
    
    However cpu_init_fred_exceptions() writes the MSR without updating
    the per-CPU cache.  This means that the kernel might return to
    userspace with MSR_IA32_FRED_RSP0==0 when it needed to point to the
    top of current task stack.  This would induce a double fault (#DF),
    which is bad.
    
    A context switch after cpu_init_fred_exceptions() can paper over
    the issue since it updates the cached value.  That evidently
    happens most of the time explaining how this bug got through.
    
    Fix the bug through resynchronizing the FRED RSP0 MSR with its
    per-CPU cache in cpu_init_fred_exceptions().
    
    Fixes: fe85ee391966 ("x86/entry: Set FRED RSP0 on return to userspace instead of context switch")
    Signed-off-by: Xin Li (Intel) <xin@zytor.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Cc:stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20250110174639.1250829-1-xin%40zytor.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
zram: fix potential UAF of zram table [+ + +]
Author: Kairui Song <kasong@tencent.com>
Date:   Tue Jan 7 14:54:46 2025 +0800

    zram: fix potential UAF of zram table
    
    commit 212fe1c0df4a150fb6298db2cfff267ceaba5402 upstream.
    
    If zram_meta_alloc failed early, it frees allocated zram->table without
    setting it NULL.  Which will potentially cause zram_meta_free to access
    the table if user reset an failed and uninitialized device.
    
    Link: https://lkml.kernel.org/r/20250107065446.86928-1-ryncsn@gmail.com
    Fixes: 74363ec674cb ("zram: fix uninitialized ZRAM not releasing backing device")
    Signed-off-by: Kairui Song <kasong@tencent.com>
    Reviewed-by:  Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>