Changelog in Linux kernel 6.13.5

 
acct: block access to kernel internal filesystems [+ + +]
Author: Christian Brauner <[email protected]>
Date:   Tue Feb 11 18:16:00 2025 +0100

    acct: block access to kernel internal filesystems
    
    commit 890ed45bde808c422c3c27d3285fc45affa0f930 upstream.
    
    There's no point in allowing anything kernel internal nor procfs or
    sysfs.
    
    Link: https://lore.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Amir Goldstein <[email protected]>
    Reported-by: Zicheng Qu <[email protected]>
    Cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

acct: perform last write from workqueue [+ + +]
Author: Christian Brauner <[email protected]>
Date:   Tue Feb 11 18:15:59 2025 +0100

    acct: perform last write from workqueue
    
    commit 56d5f3eba3f5de0efdd556de4ef381e109b973a9 upstream.
    
    In [1] it was reported that the acct(2) system call can be used to
    trigger NULL deref in cases where it is set to write to a file that
    triggers an internal lookup. This can e.g., happen when pointing acc(2)
    to /sys/power/resume. At the point the where the write to this file
    happens the calling task has already exited and called exit_fs(). A
    lookup will thus trigger a NULL-deref when accessing current->fs.
    
    Reorganize the code so that the the final write happens from the
    workqueue but with the caller's credentials. This preserves the
    (strange) permission model and has almost no regression risk.
    
    This api should stop to exist though.
    
    Link: https://lore.kernel.org/r/[email protected] [1]
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Zicheng Qu <[email protected]>
    Cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ALSA: hda/cirrus: Correct the full scale volume set logic [+ + +]
Author: Vitaly Rodionov <[email protected]>
Date:   Fri Feb 14 21:07:28 2025 +0000

    ALSA: hda/cirrus: Correct the full scale volume set logic
    
    [ Upstream commit 08b613b9e2ba431db3bd15cb68ca72472a50ef5c ]
    
    This patch corrects the full-scale volume setting logic. On certain
    platforms, the full-scale volume bit is required. The current logic
    mistakenly sets this bit and incorrectly clears reserved bit 0, causing
    the headphone output to be muted.
    
    Fixes: 342b6b610ae2 ("ALSA: hda/cs8409: Fix Full Scale Volume setting for all variants")
    Signed-off-by: Vitaly Rodionov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/conexant: Add quirk for HP ProBook 450 G4 mute LED [+ + +]
Author: John Veness <[email protected]>
Date:   Mon Feb 17 12:15:50 2025 +0000

    ALSA: hda/conexant: Add quirk for HP ProBook 450 G4 mute LED
    
    commit 6d1f86610f23b0bc334d6506a186f21a98f51392 upstream.
    
    Allows the LED on the dedicated mute button on the HP ProBook 450 G4
    laptop to change colour correctly.
    
    Signed-off-by: John Veness <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Fixup ALC225 depop procedure [+ + +]
Author: Kailang Yang <[email protected]>
Date:   Wed Feb 12 14:40:46 2025 +0800

    ALSA: hda/realtek: Fixup ALC225 depop procedure
    
    [ Upstream commit 174448badb4409491bfba2e6b46f7aa078741c5e ]
    
    Headset MIC will no function when power_save=0.
    
    Fixes: 1fd50509fe14 ("ALSA: hda/realtek: Update ALC225 depop procedure")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219743
    Signed-off-by: Kailang Yang <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda: Add error check for snd_ctl_rename_id() in snd_hda_create_dig_out_ctls() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Thu Feb 13 15:45:43 2025 +0800

    ALSA: hda: Add error check for snd_ctl_rename_id() in snd_hda_create_dig_out_ctls()
    
    commit 822b7ec657e99b44b874e052d8540d8b54fe8569 upstream.
    
    Check the return value of snd_ctl_rename_id() in
    snd_hda_create_dig_out_ctls(). Ensure that failures
    are properly handled.
    
    [ Note: the error cannot happen practically because the only error
      condition in snd_ctl_rename_id() is the missing ID, but this is a
      rename, hence it must be present.  But for the code consistency,
      it's safer to have always the proper return check -- tiwai ]
    
    Fixes: 5c219a340850 ("ALSA: hda: Fix kctl->id initialization")
    Cc: [email protected] # 6.4+
    Signed-off-by: Wentao Liang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: seq: Drop UMP events when no UMP-conversion is set [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Feb 17 18:00:30 2025 +0100

    ALSA: seq: Drop UMP events when no UMP-conversion is set
    
    [ Upstream commit e77aa4b2eaa7fb31b2a7a50214ecb946b2a8b0f6 ]
    
    When a destination client is a user client in the legacy MIDI mode and
    it sets the no-UMP-conversion flag, currently the all UMP events are
    still passed as-is.  But this may confuse the user-space, because the
    event packet size is different from the legacy mode.
    
    Since we cannot handle UMP events in user clients unless it's running
    in the UMP client mode, we should filter out those events instead of
    accepting blindly.  This patch addresses it by slightly adjusting the
    conditions for UMP event handling at the event delivery time.
    
    Fixes: 329ffe11a014 ("ALSA: seq: Allow suppressing UMP conversions")
    Link: https://lore.kernel.org/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: dts: rockchip: adjust SMMU interrupt type on rk3588 [+ + +]
Author: Patrick Wildt <[email protected]>
Date:   Mon Feb 10 22:37:29 2025 +0100

    arm64: dts: rockchip: adjust SMMU interrupt type on rk3588
    
    [ Upstream commit 8546cfd08aa4b982acd2357403a1f15495d622ec ]
    
    The SMMU architecture requires wired interrupts to be edge triggered,
    which does not align with the DT description for the RK3588.  This leads
    to interrupt storms, as the SMMU continues to hold the pin high and only
    pulls it down for a short amount when issuing an IRQ.  Update the DT
    description to be in line with the spec and perceived reality.
    
    Signed-off-by: Patrick Wildt <[email protected]>
    Fixes: cd81d3a0695c ("arm64: dts: rockchip: add rk3588 pcie and php IOMMUs")
    Reviewed-by: Niklas Cassel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts [+ + +]
Author: Tianling Shen <[email protected]>
Date:   Sun Jan 19 17:11:54 2025 +0800

    arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts
    
    commit a6a7cba17c544fb95d5a29ab9d9ed4503029cb29 upstream.
    
    In general the delay should be added by the PHY instead of the MAC,
    and this improves network stability on some boards which seem to
    need different delay.
    
    Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 Plus LTS")
    Cc: [email protected] # 6.6+
    Signed-off-by: Tianling Shen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: rockchip: Disable DMA for uart5 on px30-ringneck [+ + +]
Author: Lukasz Czechowski <[email protected]>
Date:   Tue Jan 21 13:56:04 2025 +0100

    arm64: dts: rockchip: Disable DMA for uart5 on px30-ringneck
    
    commit 5ae4dca718eacd0a56173a687a3736eb7e627c77 upstream.
    
    UART controllers without flow control seem to behave unstable
    in case DMA is enabled. The issues were indicated in the message:
    https://lore.kernel.org/linux-arm-kernel/CAMdYzYpXtMocCtCpZLU_xuWmOp2Ja_v0Aj0e6YFNRA-yV7u14g@mail.gmail.com/
    In case of PX30-uQ7 Ringneck SoM, it was noticed that after couple
    of hours of UART communication, the CPU stall was occurring,
    leading to the system becoming unresponsive.
    After disabling the DMA, extensive UART communication tests for
    up to two weeks were performed, and no issues were further
    observed.
    The flow control pins for uart5 are not available on PX30-uQ7
    Ringneck, as configured by pinctrl-0, so the DMA nodes were
    removed on SoM dtsi.
    
    Cc: [email protected]
    Fixes: c484cf93f61b ("arm64: dts: rockchip: add PX30-µQ7 (Ringneck) SoM with Haikou baseboard")
    Reviewed-by: Quentin Schulz <[email protected]>
    Signed-off-by: Lukasz Czechowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: rockchip: Fix broken tsadc pinctrl names for rk3588 [+ + +]
Author: Alexander Shiyan <[email protected]>
Date:   Thu Jan 30 08:38:49 2025 +0300

    arm64: dts: rockchip: Fix broken tsadc pinctrl names for rk3588
    
    commit 5c8f9a05336cf5cadbd57ad461621b386aadb762 upstream.
    
    The tsadc driver does not handle pinctrl "gpio" and "otpout".
    Let's use the correct pinctrl names "default" and "sleep".
    Additionally, Alexey Charkov's testing [1] has established that
    it is necessary for pinctrl state to reference the &tsadc_shut_org
    configuration rather than &tsadc_shut for the driver to function correctly.
    
    [1] https://lkml.org/lkml/2025/1/24/966
    
    Fixes: 32641b8ab1a5 ("arm64: dts: rockchip: add rk3588 thermal sensor")
    Cc: [email protected]
    Reviewed-by: Dragan Simic <[email protected]>
    Signed-off-by: Alexander Shiyan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: rockchip: fix fixed-regulator renames on rk3399-gru devices [+ + +]
Author: Heiko Stuebner <[email protected]>
Date:   Thu Jan 16 15:36:31 2025 +0100

    arm64: dts: rockchip: fix fixed-regulator renames on rk3399-gru devices
    
    [ Upstream commit 2f9eb5262e63396a315c7da34a6c80c5d335df9f ]
    
    rk3399-gru chromebooks have a regulator chains where one named regulator
    supplies multiple regulators pp900-usb pp900_pcie that supply
    the named peripherals.
    
    The dtsi used somewhat creative structure to describe that in creating
    the base node 3 times with different phandles and describing the EC
    dependency in a comment.
    
    This didn't register in the recent regulator-node renaming, as the
    additional nodes were empty, so adapt the missing node names for now.
    
    Fixes: 5c96e6330197 ("arm64: dts: rockchip: adapt regulator nodenames to preferred form")
    Tested-by: Vicente Bergas <[email protected]>
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Fix lcdpwr_en pin for Cool Pi GenBook [+ + +]
Author: Andy Yan <[email protected]>
Date:   Mon Jan 13 18:47:34 2025 +0800

    arm64: dts: rockchip: Fix lcdpwr_en pin for Cool Pi GenBook
    
    [ Upstream commit a1d939055a22be06d8c12bf53afb258b9d38575f ]
    
    According to the schematic, the lcdpwr_en pin is GPIO0_C4,
    not GPIO1_C4.
    
    Fixes: 4a8c1161b843 ("arm64: dts: rockchip: Add support for rk3588 based Cool Pi CM5 GenBook")
    Signed-off-by: Andy Yan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: rockchip: Move uart5 pin configuration to px30 ringneck SoM [+ + +]
Author: Lukasz Czechowski <[email protected]>
Date:   Tue Jan 21 13:56:03 2025 +0100

    arm64: dts: rockchip: Move uart5 pin configuration to px30 ringneck SoM
    
    commit 4eee627ea59304cdd66c5d4194ef13486a6c44fc upstream.
    
    In the PX30-uQ7 (Ringneck) SoM, the hardware CTS and RTS pins for
    uart5 cannot be used for the UART CTS/RTS, because they are already
    allocated for different purposes. CTS pin is routed to SUS_S3#
    signal, while RTS pin is used internally and is not available on
    Q7 connector. Move definition of the pinctrl-0 property from
    px30-ringneck-haikou.dts to px30-ringneck.dtsi.
    
    This commit is a dependency to next commit in the patch series,
    that disables DMA for uart5.
    
    Cc: [email protected]
    Reviewed-by: Quentin Schulz <[email protected]>
    Signed-off-by: Lukasz Czechowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arp: switch to dev_getbyhwaddr() in arp_req_set_public() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Tue Feb 18 05:49:31 2025 -0800

    arp: switch to dev_getbyhwaddr() in arp_req_set_public()
    
    [ Upstream commit 4eae0ee0f1e6256d0b0b9dd6e72f1d9cf8f72e08 ]
    
    The arp_req_set_public() function is called with the rtnl lock held,
    which provides enough synchronization protection. This makes the RCU
    variant of dev_getbyhwaddr() unnecessary. Switch to using the simpler
    dev_getbyhwaddr() function since we already have the required rtnl
    locking.
    
    This change helps maintain consistency in the networking code by using
    the appropriate helper function for the existing locking context.
    Since we're not holding the RCU read lock in arp_req_set_public()
    existing code could trigger false positive locking warnings.
    
    Fixes: 941666c2e3e0 ("net: RCU conversion of dev_getbyhwaddr() and arp_ioctl()")
    Suggested-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: fsl_micfil: Enable default case in micfil_set_quality() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Jan 16 06:24:36 2025 -0800

    ASoC: fsl_micfil: Enable default case in micfil_set_quality()
    
    commit a8c9a453387640dbe45761970f41301a6985e7fa upstream.
    
    If 'micfil->quality' received from micfil_quality_set() somehow ends
    up with an unpredictable value, switch() operator will fail to
    initialize local variable qsel before regmap_update_bits() tries
    to utilize it.
    
    While it is unlikely, play it safe and enable a default case that
    returns -EINVAL error.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: bea1d61d5892 ("ASoC: fsl_micfil: rework quality setting")
    Cc: [email protected]
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: imx-audmix: remove cpu_mclk which is from cpu dai device [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Thu Feb 13 15:05:18 2025 +0800

    ASoC: imx-audmix: remove cpu_mclk which is from cpu dai device
    
    [ Upstream commit 571b69f2f9b1ec7cf7d0e9b79e52115a87a869c4 ]
    
    When defer probe happens, there may be below error:
    
    platform 59820000.sai: Resources present before probing
    
    The cpu_mclk clock is from the cpu dai device, if it is not released,
    then the cpu dai device probe will fail for the second time.
    
    The cpu_mclk is used to get rate for rate constraint, rate constraint
    may be specific for each platform, which is not necessary for machine
    driver, so remove it.
    
    Fixes: b86ef5367761 ("ASoC: fsl: Add Audio Mixer machine driver")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: rockchip: i2s-tdm: fix shift config for SND_SOC_DAIFMT_DSP_[AB] [+ + +]
Author: John Keeping <[email protected]>
Date:   Tue Feb 4 16:13:10 2025 +0000

    ASoC: rockchip: i2s-tdm: fix shift config for SND_SOC_DAIFMT_DSP_[AB]
    
    [ Upstream commit 6b24e67b4056ba83b1e95e005b7e50fdb1cc6cf4 ]
    
    Commit 2f45a4e289779 ("ASoC: rockchip: i2s_tdm: Fixup config for
    SND_SOC_DAIFMT_DSP_A/B") applied a partial change to fix the
    configuration for DSP A and DSP B formats.
    
    The shift control also needs updating to set the correct offset for
    frame data compared to LRCK.  Set the correct values.
    
    Fixes: 081068fd64140 ("ASoC: rockchip: add support for i2s-tdm controller")
    Signed-off-by: John Keeping <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Thu Feb 6 10:46:42 2025 +0200

    ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers
    
    [ Upstream commit 6fd60136d256b3b948333ebdb3835f41a95ab7ef ]
    
    Other, non DAI copier widgets could have the same  stream name (sname) as
    the ALH copier and in that case the copier->data is NULL, no alh_data is
    attached, which could lead to NULL pointer dereference.
    We could check for this NULL pointer in sof_ipc4_prepare_copier_module()
    and avoid the crash, but a similar loop in sof_ipc4_widget_setup_comp_dai()
    will miscalculate the ALH device count, causing broken audio.
    
    The correct fix is to harden the matching logic by making sure that the
    1. widget is a DAI widget - so dai = w->private is valid
    2. the dai (and thus the copier) is ALH copier
    
    Fixes: a150345aa758 ("ASoC: SOF: ipc4-topology: add SoundWire/ALH aggregation support")
    Reported-by: Seppo Ingalsuo <[email protected]>
    Link: https://github.com/thesofproject/sof/pull/9652
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Liam Girdwood <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: pcm: Clear the susbstream pointer to NULL on close [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Wed Feb 5 15:52:32 2025 +0200

    ASoC: SOF: pcm: Clear the susbstream pointer to NULL on close
    
    commit 46c7b901e2a03536df5a3cb40b3b26e2be505df6 upstream.
    
    The spcm->stream[substream->stream].substream is set during open and was
    left untouched. After the first PCM stream it will never be NULL and we
    have code which checks for substream NULLity as indication if the stream is
    active or not.
    For the compressed cstream pointer the same has been done, this change will
    correct the handling of PCM streams.
    
    Fixes: 090349a9feba ("ASoC: SOF: Add support for compress API for stream data/offset")
    Cc: [email protected]
    Reported-by: Curtis Malainey <[email protected]>
    Closes: https://github.com/thesofproject/linux/pull/5214
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Daniel Baluta <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Curtis Malainey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: SOF: stream-ipc: Check for cstream nullity in sof_ipc_msg_data() [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Wed Feb 5 15:52:31 2025 +0200

    ASoC: SOF: stream-ipc: Check for cstream nullity in sof_ipc_msg_data()
    
    commit d8d99c3b5c485f339864aeaa29f76269cc0ea975 upstream.
    
    The nullity of sps->cstream should be checked similarly as it is done in
    sof_set_stream_data_offset() function.
    Assuming that it is not NULL if sps->stream is NULL is incorrect and can
    lead to NULL pointer dereference.
    
    Fixes: 090349a9feba ("ASoC: SOF: Add support for compress API for stream data/offset")
    Cc: [email protected]
    Reported-by: Curtis Malainey <[email protected]>
    Closes: https://github.com/thesofproject/linux/pull/5214
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Daniel Baluta <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Curtis Malainey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: qca: Fix poor RF performance for WCN6855 [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Mon Jan 13 22:43:23 2025 +0800

    Bluetooth: qca: Fix poor RF performance for WCN6855
    
    [ Upstream commit a2fad248947d702ed3dcb52b8377c1a3ae201e44 ]
    
    For WCN6855, board ID specific NVM needs to be downloaded once board ID
    is available, but the default NVM is always downloaded currently.
    
    The wrong NVM causes poor RF performance, and effects user experience
    for several types of laptop with WCN6855 on the market.
    
    Fix by downloading board ID specific NVM if board ID is available.
    
    Fixes: 095327fede00 ("Bluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855")
    Cc: [email protected] # 6.4
    Signed-off-by: Zijun Hu <[email protected]>
    Tested-by: Johan Hovold <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Tested-by: Steev Klimaszewski <[email protected]> #Thinkpad X13s
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: qca: Update firmware-name to support board specific nvm [+ + +]
Author: Cheng Jiang <[email protected]>
Date:   Tue Jan 7 17:26:49 2025 +0800

    Bluetooth: qca: Update firmware-name to support board specific nvm
    
    [ Upstream commit a4c5a468c6329bde7dfd46bacff2cbf5f8a8152e ]
    
    Different connectivity boards may be attached to the same platform. For
    example, QCA6698-based boards can support either a two-antenna or
    three-antenna solution, both of which work on the sa8775p-ride platform.
    Due to differences in connectivity boards and variations in RF
    performance from different foundries, different NVM configurations are
    used based on the board ID.
    
    Therefore, in the firmware-name property, if the NVM file has an
    extension, the NVM file will be used. Otherwise, the system will first
    try the .bNN (board ID) file, and if that fails, it will fall back to
    the .bin file.
    
    Possible configurations:
    firmware-name = "QCA6698/hpnv21";
    firmware-name = "QCA6698/hpnv21.bin";
    
    Signed-off-by: Cheng Jiang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: a2fad248947d ("Bluetooth: qca: Fix poor RF performance for WCN6855")
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, test_run: Fix use-after-free issue in eth_skb_pkt_type() [+ + +]
Author: Shigeru Yoshida <[email protected]>
Date:   Wed Jan 22 00:06:42 2025 +0900

    bpf, test_run: Fix use-after-free issue in eth_skb_pkt_type()
    
    [ Upstream commit 6b3d638ca897e099fa99bd6d02189d3176f80a47 ]
    
    KMSAN reported a use-after-free issue in eth_skb_pkt_type()[1]. The
    cause of the issue was that eth_skb_pkt_type() accessed skb's data
    that didn't contain an Ethernet header. This occurs when
    bpf_prog_test_run_xdp() passes an invalid value as the user_data
    argument to bpf_test_init().
    
    Fix this by returning an error when user_data is less than ETH_HLEN in
    bpf_test_init(). Additionally, remove the check for "if (user_size >
    size)" as it is unnecessary.
    
    [1]
    BUG: KMSAN: use-after-free in eth_skb_pkt_type include/linux/etherdevice.h:627 [inline]
    BUG: KMSAN: use-after-free in eth_type_trans+0x4ee/0x980 net/ethernet/eth.c:165
     eth_skb_pkt_type include/linux/etherdevice.h:627 [inline]
     eth_type_trans+0x4ee/0x980 net/ethernet/eth.c:165
     __xdp_build_skb_from_frame+0x5a8/0xa50 net/core/xdp.c:635
     xdp_recv_frames net/bpf/test_run.c:272 [inline]
     xdp_test_run_batch net/bpf/test_run.c:361 [inline]
     bpf_test_run_xdp_live+0x2954/0x3330 net/bpf/test_run.c:390
     bpf_prog_test_run_xdp+0x148e/0x1b10 net/bpf/test_run.c:1318
     bpf_prog_test_run+0x5b7/0xa30 kernel/bpf/syscall.c:4371
     __sys_bpf+0x6a6/0xe20 kernel/bpf/syscall.c:5777
     __do_sys_bpf kernel/bpf/syscall.c:5866 [inline]
     __se_sys_bpf kernel/bpf/syscall.c:5864 [inline]
     __x64_sys_bpf+0xa4/0xf0 kernel/bpf/syscall.c:5864
     x64_sys_call+0x2ea0/0x3d90 arch/x86/include/generated/asm/syscalls_64.h:322
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xd9/0x1d0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
     free_pages_prepare mm/page_alloc.c:1056 [inline]
     free_unref_page+0x156/0x1320 mm/page_alloc.c:2657
     __free_pages+0xa3/0x1b0 mm/page_alloc.c:4838
     bpf_ringbuf_free kernel/bpf/ringbuf.c:226 [inline]
     ringbuf_map_free+0xff/0x1e0 kernel/bpf/ringbuf.c:235
     bpf_map_free kernel/bpf/syscall.c:838 [inline]
     bpf_map_free_deferred+0x17c/0x310 kernel/bpf/syscall.c:862
     process_one_work kernel/workqueue.c:3229 [inline]
     process_scheduled_works+0xa2b/0x1b60 kernel/workqueue.c:3310
     worker_thread+0xedf/0x1550 kernel/workqueue.c:3391
     kthread+0x535/0x6b0 kernel/kthread.c:389
     ret_from_fork+0x6e/0x90 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
    CPU: 1 UID: 0 PID: 17276 Comm: syz.1.16450 Not tainted 6.12.0-05490-g9bb88c659673 #8
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
    
    Fixes: be3d72a2896c ("bpf: move user_size out of bpf_test_init")
    Reported-by: syzkaller <[email protected]>
    Suggested-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Shigeru Yoshida <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: avoid holding freeze_mutex during mmap operation [+ + +]
Author: Andrii Nakryiko <[email protected]>
Date:   Tue Jan 28 17:22:46 2025 -0800

    bpf: avoid holding freeze_mutex during mmap operation
    
    [ Upstream commit bc27c52eea189e8f7492d40739b7746d67b65beb ]
    
    We use map->freeze_mutex to prevent races between map_freeze() and
    memory mapping BPF map contents with writable permissions. The way we
    naively do this means we'll hold freeze_mutex for entire duration of all
    the mm and VMA manipulations, which is completely unnecessary. This can
    potentially also lead to deadlocks, as reported by syzbot in [0].
    
    So, instead, hold freeze_mutex only during writeability checks, bump
    (proactively) "write active" count for the map, unlock the mutex and
    proceed with mmap logic. And only if something went wrong during mmap
    logic, then undo that "write active" counter increment.
    
      [0] https://lore.kernel.org/bpf/[email protected]/
    
    Fixes: fc9702273e2e ("bpf: Add mmap() support for BPF_MAP_TYPE_ARRAY")
    Reported-by: [email protected]
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Disable non stream socket for strparser [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Wed Jan 22 18:09:15 2025 +0800

    bpf: Disable non stream socket for strparser
    
    [ Upstream commit 5459cce6bf49e72ee29be21865869c2ac42419f5 ]
    
    Currently, only TCP supports strparser, but sockmap doesn't intercept
    non-TCP connections to attach strparser. For example, with UDP, although
    the read/write handlers are replaced, strparser is not executed due to
    the lack of a read_sock operation.
    
    Furthermore, in udp_bpf_recvmsg(), it checks whether the psock has data,
    and if not, it falls back to the native UDP read interface, making
    UDP + strparser appear to read correctly. According to its commit history,
    this behavior is unexpected.
    
    Moreover, since UDP lacks the concept of streams, we intercept it directly.
    
    Fixes: 1fa1fe8ff161 ("bpf, sockmap: Test shutdown() correctly exits epoll and recv()=0")
    Signed-off-by: Jiayuan Chen <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Acked-by: Jakub Sitnicki <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix deadlock when freeing cgroup storage [+ + +]
Author: Abel Wu <[email protected]>
Date:   Sat Dec 21 14:10:16 2024 +0800

    bpf: Fix deadlock when freeing cgroup storage
    
    [ Upstream commit c78f4afbd962f43a3989f45f3ca04300252b19b5 ]
    
    The following commit
    bc235cdb423a ("bpf: Prevent deadlock from recursive bpf_task_storage_[get|delete]")
    first introduced deadlock prevention for fentry/fexit programs attaching
    on bpf_task_storage helpers. That commit also employed the logic in map
    free path in its v6 version.
    
    Later bpf_cgrp_storage was first introduced in
    c4bcfb38a95e ("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs")
    which faces the same issue as bpf_task_storage, instead of its busy
    counter, NULL was passed to bpf_local_storage_map_free() which opened
    a window to cause deadlock:
    
            <TASK>
                    (acquiring local_storage->lock)
            _raw_spin_lock_irqsave+0x3d/0x50
            bpf_local_storage_update+0xd1/0x460
            bpf_cgrp_storage_get+0x109/0x130
            bpf_prog_a4d4a370ba857314_cgrp_ptr+0x139/0x170
            ? __bpf_prog_enter_recur+0x16/0x80
            bpf_trampoline_6442485186+0x43/0xa4
            cgroup_storage_ptr+0x9/0x20
                    (holding local_storage->lock)
            bpf_selem_unlink_storage_nolock.constprop.0+0x135/0x160
            bpf_selem_unlink_storage+0x6f/0x110
            bpf_local_storage_map_free+0xa2/0x110
            bpf_map_free_deferred+0x5b/0x90
            process_one_work+0x17c/0x390
            worker_thread+0x251/0x360
            kthread+0xd2/0x100
            ret_from_fork+0x34/0x50
            ret_from_fork_asm+0x1a/0x30
            </TASK>
    
    Progs:
     - A: SEC("fentry/cgroup_storage_ptr")
       - cgid (BPF_MAP_TYPE_HASH)
            Record the id of the cgroup the current task belonging
            to in this hash map, using the address of the cgroup
            as the map key.
       - cgrpa (BPF_MAP_TYPE_CGRP_STORAGE)
            If current task is a kworker, lookup the above hash
            map using function parameter @owner as the key to get
            its corresponding cgroup id which is then used to get
            a trusted pointer to the cgroup through
            bpf_cgroup_from_id(). This trusted pointer can then
            be passed to bpf_cgrp_storage_get() to finally trigger
            the deadlock issue.
     - B: SEC("tp_btf/sys_enter")
       - cgrpb (BPF_MAP_TYPE_CGRP_STORAGE)
            The only purpose of this prog is to fill Prog A's
            hash map by calling bpf_cgrp_storage_get() for as
            many userspace tasks as possible.
    
    Steps to reproduce:
     - Run A;
     - while (true) { Run B; Destroy B; }
    
    Fix this issue by passing its busy counter to the free procedure so
    it can be properly incremented before storage/smap locking.
    
    Fixes: c4bcfb38a95e ("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs")
    Signed-off-by: Abel Wu <[email protected]>
    Acked-by: Martin KaFai Lau <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix softlockup in arena_map_free on 64k page kernel [+ + +]
Author: Alan Maguire <[email protected]>
Date:   Wed Feb 5 17:00:59 2025 +0000

    bpf: Fix softlockup in arena_map_free on 64k page kernel
    
    [ Upstream commit 517e8a7835e8cfb398a0aeb0133de50e31cae32b ]
    
    On an aarch64 kernel with CONFIG_PAGE_SIZE_64KB=y,
    arena_htab tests cause a segmentation fault and soft lockup.
    The same failure is not observed with 4k pages on aarch64.
    
    It turns out arena_map_free() is calling
    apply_to_existing_page_range() with the address returned by
    bpf_arena_get_kern_vm_start().  If this address is not page-aligned
    the code ends up calling apply_to_pte_range() with that unaligned
    address causing soft lockup.
    
    Fix it by round up GUARD_SZ to PAGE_SIZE << 1 so that the
    division by 2 in bpf_arena_get_kern_vm_start() returns
    a page-aligned value.
    
    Fixes: 317460317a02 ("bpf: Introduce bpf_arena.")
    Reported-by: Colm Harrington <[email protected]>
    Suggested-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Alan Maguire <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: skip non exist keys in generic_map_lookup_batch [+ + +]
Author: Yan Zhai <[email protected]>
Date:   Sun Feb 9 23:22:35 2025 -0800

    bpf: skip non exist keys in generic_map_lookup_batch
    
    [ Upstream commit 5644c6b50ffee0a56c1e01430a8c88e34decb120 ]
    
    The generic_map_lookup_batch currently returns EINTR if it fails with
    ENOENT and retries several times on bpf_map_copy_value. The next batch
    would start from the same location, presuming it's a transient issue.
    This is incorrect if a map can actually have "holes", i.e.
    "get_next_key" can return a key that does not point to a valid value. At
    least the array of maps type may contain such holes legitly. Right now
    these holes show up, generic batch lookup cannot proceed any more. It
    will always fail with EINTR errors.
    
    Rather, do not retry in generic_map_lookup_batch. If it finds a non
    existing element, skip to the next key. This simple solution comes with
    a price that transient errors may not be recovered, and the iteration
    might cycle back to the first key under parallel deletion. For example,
    Hou Tao <[email protected]> pointed out a following scenario:
    
    For LPM trie map:
    (1) ->map_get_next_key(map, prev_key, key) returns a valid key
    
    (2) bpf_map_copy_value() return -ENOMENT
    It means the key must be deleted concurrently.
    
    (3) goto next_key
    It swaps the prev_key and key
    
    (4) ->map_get_next_key(map, prev_key, key) again
    prev_key points to a non-existing key, for LPM trie it will treat just
    like prev_key=NULL case, the returned key will be duplicated.
    
    With the retry logic, the iteration can continue to the key next to the
    deleted one. But if we directly skip to the next key, the iteration loop
    would restart from the first key for the lpm_trie type.
    
    However, not all races may be recovered. For example, if current key is
    deleted after instead of before bpf_map_copy_value, or if the prev_key
    also gets deleted, then the loop will still restart from the first key
    for lpm_tire anyway. For generic lookup it might be better to stay
    simple, i.e. just skip to the next key. To guarantee that the output
    keys are not duplicated, it is better to implement map type specific
    batch operations, which can properly lock the trie and synchronize with
    concurrent mutators.
    
    Fixes: cb4d03ab499d ("bpf: Add generic support for lookup batch op")
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Signed-off-by: Yan Zhai <[email protected]>
    Acked-by: Hou Tao <[email protected]>
    Link: https://lore.kernel.org/r/85618439eea75930630685c467ccefeac0942e2b.1739171594.git.yan@cloudflare.com
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: unify VM_WRITE vs VM_MAYWRITE use in BPF map mmaping logic [+ + +]
Author: Andrii Nakryiko <[email protected]>
Date:   Tue Jan 28 17:22:45 2025 -0800

    bpf: unify VM_WRITE vs VM_MAYWRITE use in BPF map mmaping logic
    
    [ Upstream commit 98671a0fd1f14e4a518ee06b19037c20014900eb ]
    
    For all BPF maps we ensure that VM_MAYWRITE is cleared when
    memory-mapping BPF map contents as initially read-only VMA. This is
    because in some cases BPF verifier relies on the underlying data to not
    be modified afterwards by user space, so once something is mapped
    read-only, it shouldn't be re-mmap'ed as read-write.
    
    As such, it's not necessary to check VM_MAYWRITE in bpf_map_mmap() and
    map->ops->map_mmap() callbacks: VM_WRITE should be consistently set for
    read-write mappings, and if VM_WRITE is not set, there is no way for
    user space to upgrade read-only mapping to read-write one.
    
    This patch cleans up this VM_WRITE vs VM_MAYWRITE handling within
    bpf_map_mmap(), which is an entry point for any BPF map mmap()-ing
    logic. We also drop unnecessary sanitization of VM_MAYWRITE in BPF
    ringbuf's map_mmap() callback implementation, as it is already performed
    by common code in bpf_map_mmap().
    
    Note, though, that in bpf_map_mmap_{open,close}() callbacks we can't
    drop VM_MAYWRITE use, because it's possible (and is outside of
    subsystem's control) to have initially read-write memory mapping, which
    is subsequently dropped to read-only by user space through mprotect().
    In such case, from BPF verifier POV it's read-write data throughout the
    lifetime of BPF map, and is counted as "active writer".
    
    But its VMAs will start out as VM_WRITE|VM_MAYWRITE, then mprotect() can
    change it to just VM_MAYWRITE (and no VM_WRITE), so when its finally
    munmap()'ed and bpf_map_mmap_close() is called, vm_flags will be just
    VM_MAYWRITE, but we still need to decrement active writer count with
    bpf_map_write_active_dec() as it's still considered to be a read-write
    mapping by the rest of BPF subsystem.
    
    Similar reasoning applies to bpf_map_mmap_open(), which is called
    whenever mmap(), munmap(), and/or mprotect() forces mm subsystem to
    split original VMA into multiple discontiguous VMAs.
    
    Memory-mapping handling is a bit tricky, yes.
    
    Cc: Jann Horn <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Stable-dep-of: bc27c52eea18 ("bpf: avoid holding freeze_mutex during mmap operation")
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: fix double accounting race when btrfs_run_delalloc_range() failed [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Thu Dec 12 16:43:55 2024 +1030

    btrfs: fix double accounting race when btrfs_run_delalloc_range() failed
    
    [ Upstream commit 72dad8e377afa50435940adfb697e070d3556670 ]
    
    [BUG]
    When running btrfs with block size (4K) smaller than page size (64K,
    aarch64), there is a very high chance to crash the kernel at
    generic/750, with the following messages:
    (before the call traces, there are 3 extra debug messages added)
    
      BTRFS warning (device dm-3): read-write for sector size 4096 with page size 65536 is experimental
      BTRFS info (device dm-3): checking UUID tree
      hrtimer: interrupt took 5451385 ns
      BTRFS error (device dm-3): cow_file_range failed, root=4957 inode=257 start=1605632 len=69632: -28
      BTRFS error (device dm-3): run_delalloc_nocow failed, root=4957 inode=257 start=1605632 len=69632: -28
      BTRFS error (device dm-3): failed to run delalloc range, root=4957 ino=257 folio=1572864 submit_bitmap=8-15 start=1605632 len=69632: -28
      ------------[ cut here ]------------
      WARNING: CPU: 2 PID: 3020984 at ordered-data.c:360 can_finish_ordered_extent+0x370/0x3b8 [btrfs]
      CPU: 2 UID: 0 PID: 3020984 Comm: kworker/u24:1 Tainted: G           OE      6.13.0-rc1-custom+ #89
      Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
      Hardware name: QEMU KVM Virtual Machine, BIOS unknown 2/2/2022
      Workqueue: events_unbound btrfs_async_reclaim_data_space [btrfs]
      pc : can_finish_ordered_extent+0x370/0x3b8 [btrfs]
      lr : can_finish_ordered_extent+0x1ec/0x3b8 [btrfs]
      Call trace:
       can_finish_ordered_extent+0x370/0x3b8 [btrfs] (P)
       can_finish_ordered_extent+0x1ec/0x3b8 [btrfs] (L)
       btrfs_mark_ordered_io_finished+0x130/0x2b8 [btrfs]
       extent_writepage+0x10c/0x3b8 [btrfs]
       extent_write_cache_pages+0x21c/0x4e8 [btrfs]
       btrfs_writepages+0x94/0x160 [btrfs]
       do_writepages+0x74/0x190
       filemap_fdatawrite_wbc+0x74/0xa0
       start_delalloc_inodes+0x17c/0x3b0 [btrfs]
       btrfs_start_delalloc_roots+0x17c/0x288 [btrfs]
       shrink_delalloc+0x11c/0x280 [btrfs]
       flush_space+0x288/0x328 [btrfs]
       btrfs_async_reclaim_data_space+0x180/0x228 [btrfs]
       process_one_work+0x228/0x680
       worker_thread+0x1bc/0x360
       kthread+0x100/0x118
       ret_from_fork+0x10/0x20
      ---[ end trace 0000000000000000 ]---
      BTRFS critical (device dm-3): bad ordered extent accounting, root=4957 ino=257 OE offset=1605632 OE len=16384 to_dec=16384 left=0
      BTRFS critical (device dm-3): bad ordered extent accounting, root=4957 ino=257 OE offset=1622016 OE len=12288 to_dec=12288 left=0
      Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
      BTRFS critical (device dm-3): bad ordered extent accounting, root=4957 ino=257 OE offset=1634304 OE len=8192 to_dec=4096 left=0
      CPU: 1 UID: 0 PID: 3286940 Comm: kworker/u24:3 Tainted: G        W  OE      6.13.0-rc1-custom+ #89
      Hardware name: QEMU KVM Virtual Machine, BIOS unknown 2/2/2022
      Workqueue:  btrfs_work_helper [btrfs] (btrfs-endio-write)
      pstate: 404000c5 (nZcv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : process_one_work+0x110/0x680
      lr : worker_thread+0x1bc/0x360
      Call trace:
       process_one_work+0x110/0x680 (P)
       worker_thread+0x1bc/0x360 (L)
       worker_thread+0x1bc/0x360
       kthread+0x100/0x118
       ret_from_fork+0x10/0x20
      Code: f84086a1 f9000fe1 53041c21 b9003361 (f9400661)
      ---[ end trace 0000000000000000 ]---
      Kernel panic - not syncing: Oops: Fatal exception
      SMP: stopping secondary CPUs
      SMP: failed to stop secondary CPUs 2-3
      Dumping ftrace buffer:
         (ftrace buffer empty)
      Kernel Offset: 0x275bb9540000 from 0xffff800080000000
      PHYS_OFFSET: 0xffff8fbba0000000
      CPU features: 0x100,00000070,00801250,8201720b
    
    [CAUSE]
    The above warning is triggered immediately after the delalloc range
    failure, this happens in the following sequence:
    
    - Range [1568K, 1636K) is dirty
    
       1536K  1568K     1600K    1636K  1664K
       |      |/////////|////////|      |
    
      Where 1536K, 1600K and 1664K are page boundaries (64K page size)
    
    - Enter extent_writepage() for page 1536K
    
    - Enter run_delalloc_nocow() with locked page 1536K and range
      [1568K, 1636K)
      This is due to the inode having preallocated extents.
    
    - Enter cow_file_range() with locked page 1536K and range
      [1568K, 1636K)
    
    - btrfs_reserve_extent() only reserved two extents
      The main loop of cow_file_range() only reserved two data extents,
    
      Now we have:
    
       1536K  1568K        1600K    1636K  1664K
       |      |<-->|<--->|/|///////|      |
                   1584K  1596K
      Range [1568K, 1596K) has an ordered extent reserved.
    
    - btrfs_reserve_extent() failed inside cow_file_range() for file offset
      1596K
      This is already a bug in our space reservation code, but for now let's
      focus on the error handling path.
    
      Now cow_file_range() returned -ENOSPC.
    
    - btrfs_run_delalloc_range() do error cleanup <<< ROOT CAUSE
      Call btrfs_cleanup_ordered_extents() with locked folio 1536K and range
      [1568K, 1636K)
    
      Function btrfs_cleanup_ordered_extents() normally needs to skip the
      ranges inside the folio, as it will normally be cleaned up by
      extent_writepage().
    
      Such split error handling is already problematic in the first place.
    
      What's worse is the folio range skipping itself, which is not taking
      subpage cases into consideration at all, it will only skip the range
      if the page start >= the range start.
      In our case, the page start < the range start, since for subpage cases
      we can have delalloc ranges inside the folio but not covering the
      folio.
    
      So it doesn't skip the page range at all.
      This means all the ordered extents, both [1568K, 1584K) and
      [1584K, 1596K) will be marked as IOERR.
    
      And these two ordered extents have no more pending ios, they are marked
      finished, and *QUEUED* to be deleted from the io tree.
    
    - extent_writepage() do error cleanup
      Call btrfs_mark_ordered_io_finished() for the range [1536K, 1600K).
    
      Although ranges [1568K, 1584K) and [1584K, 1596K) are finished, the
      deletion from io tree is async, it may or may not happen at this
      time.
    
      If the ranges have not yet been removed, we will do double cleaning on
      those ranges, triggering the above ordered extent warnings.
    
    In theory there are other bugs, like the cleanup in extent_writepage()
    can cause double accounting on ranges that are submitted asynchronously
    (compression for example).
    
    But that's much harder to trigger because normally we do not mix regular
    and compression delalloc ranges.
    
    [FIX]
    The folio range split is already buggy and not subpage compatible, it
    was introduced a long time ago where subpage support was not even considered.
    
    So instead of splitting the ordered extents cleanup into the folio range
    and out of folio range, do all the cleanup inside writepage_delalloc().
    
    - Pass @NULL as locked_folio for btrfs_cleanup_ordered_extents() in
      btrfs_run_delalloc_range()
    
    - Skip the btrfs_cleanup_ordered_extents() if writepage_delalloc()
      failed
    
      So all ordered extents are only cleaned up by
      btrfs_run_delalloc_range().
    
    - Handle the ranges that already have ordered extents allocated
      If part of the folio already has ordered extent allocated, and
      btrfs_run_delalloc_range() failed, we also need to cleanup that range.
    
    Now we have a concentrated error handling for ordered extents during
    btrfs_run_delalloc_range().
    
    Fixes: d1051d6ebf8e ("btrfs: Fix error handling in btrfs_cleanup_ordered_extents")
    CC: [email protected] # 5.15+
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 8bf334beb349 ("btrfs: fix double accounting race when extent_writepage_io() failed")
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: fix double accounting race when extent_writepage_io() failed [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Thu Dec 12 16:43:56 2024 +1030

    btrfs: fix double accounting race when extent_writepage_io() failed
    
    [ Upstream commit 8bf334beb3496da3c3fbf3daf3856f7eec70dacc ]
    
    [BUG]
    If submit_one_sector() failed inside extent_writepage_io() for sector
    size < page size cases (e.g. 4K sector size and 64K page size), then
    we can hit double ordered extent accounting error.
    
    This should be very rare, as submit_one_sector() only fails when we
    failed to grab the extent map, and such extent map should exist inside
    the memory and has been pinned.
    
    [CAUSE]
    For example we have the following folio layout:
    
        0  4K          32K    48K   60K 64K
        |//|           |//////|     |///|
    
    Where |///| is the dirty range we need to writeback. The 3 different
    dirty ranges are submitted for regular COW.
    
    Now we hit the following sequence:
    
    - submit_one_sector() returned 0 for [0, 4K)
    
    - submit_one_sector() returned 0 for [32K, 48K)
    
    - submit_one_sector() returned error for [60K, 64K)
    
    - btrfs_mark_ordered_io_finished() called for the whole folio
      This will mark the following ranges as finished:
      * [0, 4K)
      * [32K, 48K)
        Both ranges have their IO already submitted, this cleanup will
        lead to double accounting.
    
      * [60K, 64K)
        That's the correct cleanup.
    
    The only good news is, this error is only theoretical, as the target
    extent map is always pinned, thus we should directly grab it from
    memory, other than reading it from the disk.
    
    [FIX]
    Instead of calling btrfs_mark_ordered_io_finished() for the whole folio
    range, which can touch ranges we should not touch, instead
    move the error handling inside extent_writepage_io().
    
    So that we can cleanup exact sectors that ought to be submitted but failed.
    
    This provides much more accurate cleanup, avoiding the double accounting.
    
    CC: [email protected] # 5.15+
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: use btrfs_inode in extent_writepage() [+ + +]
Author: David Sterba <[email protected]>
Date:   Thu Jan 9 11:24:17 2025 +0100

    btrfs: use btrfs_inode in extent_writepage()
    
    [ Upstream commit 011a9a1f244656cc3cbde47edba2b250f794d440 ]
    
    As extent_writepage() is internal helper we should use our inode type,
    so change it from struct inode.
    
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 8bf334beb349 ("btrfs: fix double accounting race when extent_writepage_io() failed")
    Signed-off-by: Sasha Levin <[email protected]>

 
Drivers: hv: vmbus: Log on missing offers if any [+ + +]
Author: John Starks <[email protected]>
Date:   Thu Jan 2 13:07:11 2025 +0000

    Drivers: hv: vmbus: Log on missing offers if any
    
    commit fcf5203e289ca0ef75a18ce74a9eb716f7f1f569 upstream.
    
    When resuming from hibernation, log any channels that were present
    before hibernation but now are gone.
    In general, the boot-time devices configured for a resuming VM should be
    the same as the devices in the VM at the time of hibernation. It's
    uncommon for the configuration to have been changed such that offers
    are missing. Changing the configuration violates the rules for
    hibernation anyway.
    The cleanup of missing channels is not straight-forward and dependent
    on individual device driver functionality and implementation,
    so it can be added in future with separate changes.
    
    Signed-off-by: John Starks <[email protected]>
    Co-developed-by: Naman Jain <[email protected]>
    Signed-off-by: Naman Jain <[email protected]>
    Reviewed-by: Easwar Hariharan <[email protected]>
    Reviewed-by: Saurabh Sengar <[email protected]>
    Reviewed-by: Michael Kelley <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Wei Liu <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
drm/amd/display: Correct register address in dcn35 [+ + +]
Author: loanchen <[email protected]>
Date:   Wed Jan 15 17:43:29 2025 +0800

    drm/amd/display: Correct register address in dcn35
    
    [ Upstream commit f88192d2335b5a911fcfa09338cc00624571ec5e ]
    
    [Why]
    the offset address of mmCLK5_spll_field_8 was incorrect for dcn35
    which causes SSC not to be enabled.
    
    Reviewed-by: Charlene Liu <[email protected]>
    Signed-off-by: Lo-An Chen <[email protected]>
    Signed-off-by: Zaeem Mohamed <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: update dcn351 used clock offset [+ + +]
Author: Charlene Liu <[email protected]>
Date:   Fri Nov 29 17:18:50 2024 -0500

    drm/amd/display: update dcn351 used clock offset
    
    [ Upstream commit a1fc2837f4960e84e9375e12292584ad2ae472da ]
    
    [why]
    hw register offset delta
    
    Reviewed-by: Martin Leung <[email protected]>
    Signed-off-by: Charlene Liu <[email protected]>
    Signed-off-by: Aurabindo Pillai <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Stable-dep-of: f88192d2335b ("drm/amd/display: Correct register address in dcn35")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/gfx9: manually control gfxoff for CS on RV [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Tue Jan 28 11:55:22 2025 -0500

    drm/amdgpu/gfx9: manually control gfxoff for CS on RV
    
    commit b35eb9128ebeec534eed1cefd6b9b1b7282cf5ba upstream.
    
    When mesa started using compute queues more often
    we started seeing additional hangs with compute queues.
    Disabling gfxoff seems to mitigate that.  Manually
    control gfxoff and gfx pg with command submissions to avoid
    any issues related to gfxoff.  KFD already does the same
    thing for these chips.
    
    v2: limit to compute
    v3: limit to APUs
    v4: limit to Raven/PCO
    v5: only update the compute ring_funcs
    v6: Disable GFX PG
    v7: adjust order
    
    Reviewed-by: Lijo Lazar <[email protected]>
    Suggested-by: Błażej Szczygieł <[email protected]>
    Suggested-by: Sergey Kovalenko <[email protected]>
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/3861
    Link: https://lists.freedesktop.org/archives/amd-gfx/2025-January/119116.html
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected] # 6.12.x
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: bump version for RV/PCO compute fix [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jan 31 13:53:40 2025 -0500

    drm/amdgpu: bump version for RV/PCO compute fix
    
    commit 55ed2b1b50d029dd7e49a35f6628ca64db6d75d8 upstream.
    
    Bump the driver version for RV/PCO compute stability fix
    so mesa can use this check to enable compute queues on
    RV/PCO.
    
    Reviewed-by: Lijo Lazar <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected] # 6.12.x
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler [+ + +]
Author: Lancelot SIX <[email protected]>
Date:   Tue Jan 28 19:16:49 2025 +0000

    drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler
    
    [ Upstream commit d584198a6fe4c51f4aa88ad72f258f8961a0f11c ]
    
    It is possible for some waves in a workgroup to finish their save
    sequence before the group leader has had time to capture the workgroup
    barrier state.  When this happens, having those waves exit do impact the
    barrier state.  As a consequence, the state captured by the group leader
    is invalid, and is eventually incorrectly restored.
    
    This patch proposes to have all waves in a workgroup wait for each other
    at the end of their save sequence (just before calling s_endpgm_saved).
    
    Signed-off-by: Lancelot SIX <[email protected]>
    Reviewed-by: Jay Cornwall <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected] # 6.12.x
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdkfd: Move gfx12 trap handler to separate file [+ + +]
Author: Jay Cornwall <[email protected]>
Date:   Wed Oct 2 16:12:35 2024 -0500

    drm/amdkfd: Move gfx12 trap handler to separate file
    
    [ Upstream commit 62498e797aeb2bfa92a823ee1a8253f96d1cbe3f ]
    
    gfx12 derivatives will have substantially different trap handler
    implementations from gfx10/gfx11. Add a separate source file for
    gfx12+ and remove unneeded conditional code.
    
    No functional change.
    
    v2: Revert copyright date to 2018, minor comment fixes
    
    Signed-off-by: Jay Cornwall <[email protected]>
    Reviewed-by: Lancelot Six <[email protected]>
    Cc: Jonathan Kim <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Stable-dep-of: d584198a6fe4 ("drm/amdkfd: Ensure consistent barrier state saved in gfx12 trap handler")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/i915/ddi: Fix HDMI port width programming in DDI_BUF_CTL [+ + +]
Author: Imre Deak <[email protected]>
Date:   Fri Feb 14 16:19:52 2025 +0200

    drm/i915/ddi: Fix HDMI port width programming in DDI_BUF_CTL
    
    commit 166ce267ae3f96e439d8ccc838e8ec4d8b4dab73 upstream.
    
    Fix the port width programming in the DDI_BUF_CTL register on MTLP+,
    where this had an off-by-one error.
    
    Cc: <[email protected]> # v6.5+
    Fixes: b66a8abaa48a ("drm/i915/display/mtl: Fill port width in DDI_BUF_/TRANS_DDI_FUNC_/PORT_BUF_CTL for HDMI")
    Reviewed-by: Jani Nikula <[email protected]>
    Signed-off-by: Imre Deak <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit b2ecdabe46d23db275f94cd7c46ca414a144818b)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/dp: Fix error handling during 128b/132b link training [+ + +]
Author: Imre Deak <[email protected]>
Date:   Tue Feb 18 00:38:27 2025 +0200

    drm/i915/dp: Fix error handling during 128b/132b link training
    
    commit b9275eabe31e6679ae12c46a4a0a18d622db4570 upstream.
    
    At the end of a 128b/132b link training sequence, the HW expects the
    transcoder training pattern to be set to TPS2 and from that to normal
    mode (disabling the training pattern). Transitioning from TPS1 directly
    to normal mode leaves the transcoder in a stuck state, resulting in
    page-flip timeouts later in the modeset sequence.
    
    Atm, in case of a failure during link training, the transcoder may be
    still set to output the TPS1 pattern. Later the transcoder is then set
    from TPS1 directly to normal mode in intel_dp_stop_link_train(), leading
    to modeset failures later as described above. Fix this by setting the
    training patter to TPS2, if the link training failed at any point.
    
    The clue in the specification about the above HW behavior is the
    explicit mention that TPS2 must be set after the link training sequence
    (and there isn't a similar requirement specified for the 8b/10b link
    training), see the Bspec links below.
    
    v2: Add bspec aspect/link to the commit log. (Jani)
    
    Bspec: 54128, 65448, 68849
    Cc: [email protected] # v5.18+
    Cc: Jani Nikula <[email protected]>
    Signed-off-by: Imre Deak <[email protected]>
    Acked-by: Jani Nikula <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Rodrigo Vivi <[email protected]>
    (cherry picked from commit 8b4bbaf8ddc1f68f3ee96a706f65fdb1bcd9d355)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/dsi: Use TRANS_DDI_FUNC_CTL's own port width macro [+ + +]
Author: Imre Deak <[email protected]>
Date:   Fri Feb 14 16:19:51 2025 +0200

    drm/i915/dsi: Use TRANS_DDI_FUNC_CTL's own port width macro
    
    commit 879f70382ff3e92fc854589ada3453e3f5f5b601 upstream.
    
    The format of the port width field in the DDI_BUF_CTL and the
    TRANS_DDI_FUNC_CTL registers are different starting with MTL, where the
    x3 lane mode for HDMI FRL has a different encoding in the two registers.
    To account for this use the TRANS_DDI_FUNC_CTL's own port width macro.
    
    Cc: <[email protected]> # v6.5+
    Fixes: b66a8abaa48a ("drm/i915/display/mtl: Fill port width in DDI_BUF_/TRANS_DDI_FUNC_/PORT_BUF_CTL for HDMI")
    Reviewed-by: Jani Nikula <[email protected]>
    Signed-off-by: Imre Deak <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 76120b3a304aec28fef4910204b81a12db8974da)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/gt: Use spin_lock_irqsave() in interruptible context [+ + +]
Author: Krzysztof Karas <[email protected]>
Date:   Thu Jan 16 10:40:46 2025 +0000

    drm/i915/gt: Use spin_lock_irqsave() in interruptible context
    
    commit e49477f7f78598295551d486ecc7f020d796432e upstream.
    
    spin_lock/unlock() functions used in interrupt contexts could
    result in a deadlock, as seen in GitLab issue #13399,
    which occurs when interrupt comes in while holding a lock.
    
    Try to remedy the problem by saving irq state before spin lock
    acquisition.
    
    v2: add irqs' state save/restore calls to all locks/unlocks in
     signal_irq_work() execution (Maciej)
    
    v3: use with spin_lock_irqsave() in guc_lrc_desc_unpin() instead
     of other lock/unlock calls and add Fixes and Cc tags (Tvrtko);
     change title and commit message
    
    Fixes: 2f2cc53b5fe7 ("drm/i915/guc: Close deregister-context race against CT-loss")
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13399
    Signed-off-by: Krzysztof Karas <[email protected]>
    Cc: <[email protected]> # v6.9+
    Reviewed-by: Maciej Patelczyk <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/pusppq5ybyszau2oocboj3mtj5x574gwij323jlclm5zxvimmu@mnfg6odxbpsv
    (cherry picked from commit c088387ddd6482b40f21ccf23db1125e8fa4af7e)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915: Make sure all planes in use by the joiner have their crtc included [+ + +]
Author: Ville Syrjälä <[email protected]>
Date:   Wed Feb 12 18:43:21 2025 +0200

    drm/i915: Make sure all planes in use by the joiner have their crtc included
    
    commit 07fb70d82e0df085980246bf17bc12537588795f upstream.
    
    Any active plane needs to have its crtc included in the atomic
    state. For planes enabled via uapi that is all handler in the core.
    But when we use a plane for joiner the uapi code things the plane
    is disabled and therefore doesn't have a crtc. So we need to pull
    those in by hand. We do it first thing in
    intel_joiner_add_affected_crtcs() so that any newly added crtc will
    subsequently pull in all of its joined crtcs as well.
    
    The symptoms from failing to do this are:
    - duct tape in the form of commit 1d5b09f8daf8 ("drm/i915: Fix NULL
      ptr deref by checking new_crtc_state")
    - the plane's hw state will get overwritten by the disabled
      uapi state if it can't find the uapi counterpart plane in
      the atomic state from where it should copy the correct state
    
    Cc: [email protected]
    Reviewed-by: Maarten Lankhorst <[email protected]>
    Signed-off-by: Ville Syrjälä <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 91077d1deb5374eb8be00fb391710f00e751dc4b)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/dp: account for widebus and yuv420 during mode validation [+ + +]
Author: Abhinav Kumar <[email protected]>
Date:   Thu Feb 6 11:46:36 2025 -0800

    drm/msm/dp: account for widebus and yuv420 during mode validation
    
    commit df9cf852ca3099feb8fed781bdd5d3863af001c8 upstream.
    
    Widebus allows the DP controller to operate in 2 pixel per clock mode.
    The mode validation logic validates the mode->clock against the max
    DP pixel clock. However the max DP pixel clock limit assumes widebus
    is already enabled. Adjust the mode validation logic to only compare
    the adjusted pixel clock which accounts for widebus against the max DP
    pixel clock. Also fix the mode validation logic for YUV420 modes as in
    that case as well, only half the pixel clock is needed.
    
    Cc: [email protected]
    Fixes: 757a2f36ab09 ("drm/msm/dp: enable widebus feature for display port")
    Fixes: 6db6e5606576 ("drm/msm/dp: change clock related programming for YUV420 over DP")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Tested-by: Dale Whinham <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/635789/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/dpu: Disable dither in phys encoder cleanup [+ + +]
Author: Jessica Zhang <[email protected]>
Date:   Tue Feb 11 19:59:19 2025 -0800

    drm/msm/dpu: Disable dither in phys encoder cleanup
    
    commit f063ac6b55df03ed25996bdc84d9e1c50147cfa1 upstream.
    
    Disable pingpong dither in dpu_encoder_helper_phys_cleanup().
    
    This avoids the issue where an encoder unknowingly uses dither after
    reserving a pingpong block that was previously bound to an encoder that
    had enabled dither.
    
    Cc: [email protected]
    Reported-by: Dmitry Baryshkov <[email protected]>
    Closes: https://lore.kernel.org/all/jr7zbj5w7iq4apg3gofuvcwf4r2swzqjk7sshwcdjll4mn6ctt@l2n3qfpujg3q/
    Signed-off-by: Jessica Zhang <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Fixes: 3c128638a07d ("drm/msm/dpu: add support for dither block in display")
    Patchwork: https://patchwork.freedesktop.org/patch/636517/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/msm/dpu: Don't leak bits_per_component into random DSC_ENC fields [+ + +]
Author: Marijn Suijten <[email protected]>
Date:   Tue Feb 11 00:19:32 2025 +0100

    drm/msm/dpu: Don't leak bits_per_component into random DSC_ENC fields
    
    [ Upstream commit 144429831f447223253a0e4376489f84ff37d1a7 ]
    
    What used to be the input_10_bits boolean - feeding into the lowest
    bit of DSC_ENC - on MSM downstream turned into an accidental OR with
    the full bits_per_component number when it was ported to the upstream
    kernel.
    
    On typical bpc=8 setups we don't notice this because line_buf_depth is
    always an odd value (it contains bpc+1) and will also set the 4th bit
    after left-shifting by 3 (hence this |= bits_per_component is a no-op).
    
    Now that guards are being removed to allow more bits_per_component
    values besides 8 (possible since commit 49fd30a7153b ("drm/msm/dsi: use
    DRM DSC helpers for DSC setup")), a bpc of 10 will instead clash with
    the 5th bit which is convert_rgb.  This is "fortunately" also always set
    to true by MSM's dsi_populate_dsc_params() already, but once a bpc of 12
    starts being used it'll write into simple_422 which is normally false.
    
    To solve all these overlaps, simply replicate downstream code and only
    set this lowest bit if bits_per_component is equal to 10.  It is unclear
    why DSC requires this only for bpc=10 but not bpc=12, and also notice
    that this lowest bit wasn't set previously despite having a panel and
    patch on the list using it without any mentioned issues.
    
    Fixes: c110cfd1753e ("drm/msm/disp/dpu1: Add support for DSC")
    Signed-off-by: Marijn Suijten <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/636311/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: enable DPU_WB_INPUT_CTRL for DPU 5.x [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sat Dec 14 00:14:18 2024 +0200

    drm/msm/dpu: enable DPU_WB_INPUT_CTRL for DPU 5.x
    
    [ Upstream commit af0a4a2090cce732c70ad6c5f4145b43f39e3fe9 ]
    
    Several DPU 5.x platforms are supposed to be using DPU_WB_INPUT_CTRL,
    to bind WB and PINGPONG blocks, but they do not. Change those platforms
    to use WB_SM8250_MASK, which includes that bit.
    
    Fixes: 1f5bcc4316b3 ("drm/msm/dpu: enable writeback on SC8108X")
    Fixes: ab2b03d73a66 ("drm/msm/dpu: enable writeback on SM6125")
    Fixes: 47cebb740a83 ("drm/msm/dpu: enable writeback on SM8150")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/628876/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: skip watchdog timer programming through TOP on >= SM8450 [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sat Dec 14 00:14:17 2024 +0200

    drm/msm/dpu: skip watchdog timer programming through TOP on >= SM8450
    
    [ Upstream commit 2f69e54584475ac85ea0e3407c9198ac7c6ea8ad ]
    
    The SM8450 and later chips have DPU_MDP_PERIPH_0_REMOVED feature bit
    set, which means that those platforms have dropped some of the
    registers, including the WD TIMER-related ones. Stop providing the
    callback to program WD timer on those platforms.
    
    Fixes: 100d7ef6995d ("drm/msm/dpu: add support for SM8450")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/628874/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dsi/phy: Do not overwite PHY_CMN_CLK_CFG1 when choosing bitclk source [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Feb 14 16:08:43 2025 +0100

    drm/msm/dsi/phy: Do not overwite PHY_CMN_CLK_CFG1 when choosing bitclk source
    
    [ Upstream commit 73f69c6be2a9f22c31c775ec03c6c286bfe12cfa ]
    
    PHY_CMN_CLK_CFG1 register has four fields being used in the driver: DSI
    clock divider, source of bitclk and two for enabling the DSI PHY PLL
    clocks.
    
    dsi_7nm_set_usecase() sets only the source of bitclk, so should leave
    all other bits untouched.  Use newly introduced
    dsi_pll_cmn_clk_cfg1_update() to update respective bits without
    overwriting the rest.
    
    While shuffling the code, define and use PHY_CMN_CLK_CFG1 bitfields to
    make the code more readable and obvious.
    
    Fixes: 1ef7c99d145c ("drm/msm/dsi: add support for 7nm DSI PHY/PLL")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/637380/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dsi/phy: Protect PHY_CMN_CLK_CFG0 updated from driver side [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Feb 14 16:08:41 2025 +0100

    drm/msm/dsi/phy: Protect PHY_CMN_CLK_CFG0 updated from driver side
    
    [ Upstream commit 588257897058a0b1aa47912db4fe93c6ff5e3887 ]
    
    PHY_CMN_CLK_CFG0 register is updated by the PHY driver and by two
    divider clocks from Common Clock Framework:
    devm_clk_hw_register_divider_parent_hw().  Concurrent access by the
    clocks side is protected with spinlock, however driver's side in
    restoring state is not.  Restoring state is called from
    msm_dsi_phy_enable(), so there could be a path leading to concurrent and
    conflicting updates with clock framework.
    
    Add missing lock usage on the PHY driver side, encapsulated in its own
    function so the code will be still readable.
    
    While shuffling the code, define and use PHY_CMN_CLK_CFG0 bitfields to
    make the code more readable and obvious.
    
    Fixes: 1ef7c99d145c ("drm/msm/dsi: add support for 7nm DSI PHY/PLL")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/637376/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dsi/phy: Protect PHY_CMN_CLK_CFG1 against clock driver [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Feb 14 16:08:42 2025 +0100

    drm/msm/dsi/phy: Protect PHY_CMN_CLK_CFG1 against clock driver
    
    [ Upstream commit 5a97bc924ae0804b8dbf627e357acaa5ef761483 ]
    
    PHY_CMN_CLK_CFG1 register is updated by the PHY driver and by a mux
    clock from Common Clock Framework:
    devm_clk_hw_register_mux_parent_hws().  There could be a path leading to
    concurrent and conflicting updates between PHY driver and clock
    framework, e.g. changing the mux and enabling PLL clocks.
    
    Add dedicated spinlock to be sure all PHY_CMN_CLK_CFG1 updates are
    synchronized.
    
    While shuffling the code, define and use PHY_CMN_CLK_CFG1 bitfields to
    make the code more readable and obvious.
    
    Fixes: 1ef7c99d145c ("drm/msm/dsi: add support for 7nm DSI PHY/PLL")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/637378/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: Avoid rounding up to one jiffy [+ + +]
Author: Rob Clark <[email protected]>
Date:   Mon Jan 13 07:48:41 2025 -0800

    drm/msm: Avoid rounding up to one jiffy
    
    [ Upstream commit 669c285620231786fffe9d87ab432e08a6ed922b ]
    
    If userspace is trying to achieve a timeout of zero, let 'em have it.
    Only round up if the timeout is greater than zero.
    
    Fixes: 4969bccd5f4e ("drm/msm: Avoid rounding down to zero jiffies")
    Signed-off-by: Rob Clark <[email protected]>
    Reviewed-by: Akhil P Oommen <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/632264/
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/nouveau/pmu: Fix gp10b firmware guard [+ + +]
Author: Aaron Kling <[email protected]>
Date:   Tue Feb 18 03:28:03 2025 -0600

    drm/nouveau/pmu: Fix gp10b firmware guard
    
    [ Upstream commit 3dbc0215e3c502a9f3221576da0fdc9847fb9721 ]
    
    Most kernel configs enable multiple Tegra SoC generations, causing this
    typo to go unnoticed. But in the case where a kernel config is strictly
    for Tegra186, this is a problem.
    
    Fixes: 989863d7cbe5 ("drm/nouveau/pmu: select implementation based on available firmware")
    Signed-off-by: Aaron Kling <[email protected]>
    Signed-off-by: Danilo Krummrich <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/irq: Separate MSI and MSI-X flows [+ + +]
Author: Ilia Levi <[email protected]>
Date:   Fri Dec 13 09:25:35 2024 +0200

    drm/xe/irq: Separate MSI and MSI-X flows
    
    [ Upstream commit da889070be7b26b91e8b90f072687ca437d3ed7b ]
    
    A new flow is added for devices that support MSI-X:
    - MSI-X vector 0 is used for GuC-to-host interrupt
    - MSI-X vector 1 (aka default MSI-X) is used for HW engines
    
    The default MSI-X will be passed to the HW engines in a subsequent
    patch.
    
    Signed-off-by: Ilia Levi <[email protected]>
    Reviewed-by: Piotr Piórkowski <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Stable-dep-of: 0c455f3a1229 ("drm/xe: Fix error handling in xe_irq_install()")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe: Fix error handling in xe_irq_install() [+ + +]
Author: Lucas De Marchi <[email protected]>
Date:   Thu Feb 13 11:28:59 2025 -0800

    drm/xe: Fix error handling in xe_irq_install()
    
    [ Upstream commit 0c455f3a12298e9c89a78d2f3327e15e52c0adc5 ]
    
    When devm_add_action_or_reset() fails, it already calls the function
    passed as parameter and that function is already free'ing the irqs.
    Drop the goto and just return.
    
    The caller, xe_device_probe(), should also do the same thing instead of
    wrongly doing `goto err` and calling the unrelated xe_display_fini()
    function.
    
    Fixes: 14d25d8d684d ("drm/xe: change old msi irq api to a new one")
    Reviewed-by: Rodrigo Vivi <[email protected]>
    Reviewed-by: Himal Prasad Ghimiray <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Lucas De Marchi <[email protected]>
    (cherry picked from commit 121b214cdf10d4129b64f2b1f31807154c74ae55)
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Make irq enabled flag atomic [+ + +]
Author: Ilia Levi <[email protected]>
Date:   Tue Dec 10 19:35:06 2024 +0200

    drm/xe: Make irq enabled flag atomic
    
    [ Upstream commit 4d79a1266d4cc3c967bc8823502466cad1ac8514 ]
    
    The irq.enabled flag was protected by a spin lock (irq.lock).
    By making it atomic we no longer need to wait for the spin lock in
    irq handlers. This will become especially useful for MSI-X irq
    handlers to prevent lock contention between different interrupts.
    
    Signed-off-by: Ilia Levi <[email protected]>
    Reviewed-by: Rodrigo Vivi <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Rodrigo Vivi <[email protected]>
    Stable-dep-of: 0c455f3a1229 ("drm/xe: Fix error handling in xe_irq_install()")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm: panel: jd9365da-h3: fix reset signal polarity [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Fri Sep 27 09:53:05 2024 -0400

    drm: panel: jd9365da-h3: fix reset signal polarity
    
    commit a8972d5a49b408248294b5ecbdd0a085e4726349 upstream.
    
    In jadard_prepare() a reset pulse is generated with the following
    statements (delays ommited for clarity):
    
        gpiod_set_value(jadard->reset, 1); --> Deassert reset
        gpiod_set_value(jadard->reset, 0); --> Assert reset for 10ms
        gpiod_set_value(jadard->reset, 1); --> Deassert reset
    
    However, specifying second argument of "0" to gpiod_set_value() means to
    deassert the GPIO, and "1" means to assert it. If the reset signal is
    defined as GPIO_ACTIVE_LOW in the DTS, the above statements will
    incorrectly generate the reset pulse (inverted) and leave it asserted
    (LOW) at the end of jadard_prepare().
    
    Fix reset behavior by inverting gpiod_set_value() second argument
    in jadard_prepare(). Also modify second argument to devm_gpiod_get()
    in jadard_dsi_probe() to assert the reset when probing.
    
    Do not modify it in jadard_unprepare() as it is already properly
    asserted with "1", which seems to be the intended behavior.
    
    Fixes: 6b818c533dd8 ("drm: panel: Add Jadard JD9365DA-H3 DSI panel")
    Cc: [email protected]
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm: select DRM_KMS_HELPER from DRM_GEM_SHMEM_HELPER [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Jan 22 10:02:03 2025 +0100

    drm: select DRM_KMS_HELPER from DRM_GEM_SHMEM_HELPER
    
    commit c40ca9ef7c5c9bbb0d2f7774c87417cc4f1713bf upstream.
    
    In the combination of DRM_KMS_HELPER=m, DRM_GEM_SHMEM_HELPER=y, DRM_FBDEV_EMULATION=y,
    The shmem code fails to link against the KMS helpers:
    
    x86_64-linux-ld: vmlinux.o: in function `drm_fbdev_shmem_driver_fbdev_probe':
    (.text+0xeec601): undefined reference to `drm_fb_helper_alloc_info'
    x86_64-linux-ld: (.text+0xeec633): undefined reference to `drm_fb_helper_fill_info'
    x86_64-linux-ld: vmlinux.o: in function `drm_fbdev_shmem_get_page':
    drm_fbdev_shmem.c:(.text+0xeec7d2): undefined reference to `drm_gem_fb_get_obj'
    x86_64-linux-ld: vmlinux.o: in function `drm_fbdev_shmem_fb_mmap':
    drm_fbdev_shmem.c:(.text+0xeec9f6): undefined reference to `drm_gem_fb_get_obj'
    x86_64-linux-ld: vmlinux.o: in function `drm_fbdev_shmem_defio_imageblit':
    (.rodata+0x5b2288): undefined reference to `drm_fb_helper_check_var'
    x86_64-linux-ld: (.rodata+0x5b2290): undefined reference to `drm_fb_helper_set_par'
    
    This can happen for a number of device drivers that select DRM_GEM_SHMEM_HELPER
    without also selecting DRM_KMS_HELPER. To work around this, add another select
    that forces DRM_KMS_HELPER to be built-in rather than a loadable module, but
    only if FBDEV emulation is also enabled. DRM_TTM_HELPER and DRM_GEM_DMA_HELPER
    look like they have the same problem in theory even if there is no possible
    configuration that shows it. For consistency, do the same change to those.
    
    Closes: https://lore.kernel.org/all/[email protected]
    Reported-by: Marc Kleine-Budde <[email protected]>
    Tested-by: Marc Kleine-Budde <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Cc: NoisyCoil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drop_monitor: fix incorrect initialization order [+ + +]
Author: Gavrilov Ilia <[email protected]>
Date:   Thu Feb 13 15:20:55 2025 +0000

    drop_monitor: fix incorrect initialization order
    
    commit 07b598c0e6f06a0f254c88dafb4ad50f8a8c6eea upstream.
    
    Syzkaller reports the following bug:
    
    BUG: spinlock bad magic on CPU#1, syz-executor.0/7995
     lock: 0xffff88805303f3e0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
    CPU: 1 PID: 7995 Comm: syz-executor.0 Tainted: G            E     5.10.209+ #1
    Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
    Call Trace:
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x119/0x179 lib/dump_stack.c:118
     debug_spin_lock_before kernel/locking/spinlock_debug.c:83 [inline]
     do_raw_spin_lock+0x1f6/0x270 kernel/locking/spinlock_debug.c:112
     __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:117 [inline]
     _raw_spin_lock_irqsave+0x50/0x70 kernel/locking/spinlock.c:159
     reset_per_cpu_data+0xe6/0x240 [drop_monitor]
     net_dm_cmd_trace+0x43d/0x17a0 [drop_monitor]
     genl_family_rcv_msg_doit+0x22f/0x330 net/netlink/genetlink.c:739
     genl_family_rcv_msg net/netlink/genetlink.c:783 [inline]
     genl_rcv_msg+0x341/0x5a0 net/netlink/genetlink.c:800
     netlink_rcv_skb+0x14d/0x440 net/netlink/af_netlink.c:2497
     genl_rcv+0x29/0x40 net/netlink/genetlink.c:811
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x54b/0x800 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x914/0xe00 net/netlink/af_netlink.c:1916
     sock_sendmsg_nosec net/socket.c:651 [inline]
     __sock_sendmsg+0x157/0x190 net/socket.c:663
     ____sys_sendmsg+0x712/0x870 net/socket.c:2378
     ___sys_sendmsg+0xf8/0x170 net/socket.c:2432
     __sys_sendmsg+0xea/0x1b0 net/socket.c:2461
     do_syscall_64+0x30/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x62/0xc7
    RIP: 0033:0x7f3f9815aee9
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f3f972bf0c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f3f9826d050 RCX: 00007f3f9815aee9
    RDX: 0000000020000000 RSI: 0000000020001300 RDI: 0000000000000007
    RBP: 00007f3f981b63bd R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 000000000000006e R14: 00007f3f9826d050 R15: 00007ffe01ee6768
    
    If drop_monitor is built as a kernel module, syzkaller may have time
    to send a netlink NET_DM_CMD_START message during the module loading.
    This will call the net_dm_monitor_start() function that uses
    a spinlock that has not yet been initialized.
    
    To fix this, let's place resource initialization above the registration
    of a generic netlink family.
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with Syzkaller.
    
    Fixes: 9a8afc8d3962 ("Network Drop Monitor: Adding drop monitor implementation & Netlink protocol")
    Cc: [email protected]
    Signed-off-by: Ilia Gavrilov <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/qcom: Correct interrupt enable register configuration [+ + +]
Author: Komal Bajaj <[email protected]>
Date:   Tue Nov 19 12:16:08 2024 +0530

    EDAC/qcom: Correct interrupt enable register configuration
    
    commit c158647c107358bf1be579f98e4bb705c1953292 upstream.
    
    The previous implementation incorrectly configured the cmn_interrupt_2_enable
    register for interrupt handling. Using cmn_interrupt_2_enable to configure
    Tag, Data RAM ECC interrupts would lead to issues like double handling of the
    interrupts (EL1 and EL3) as cmn_interrupt_2_enable is meant to be configured
    for interrupts which needs to be handled by EL3.
    
    EL1 LLCC EDAC driver needs to use cmn_interrupt_0_enable register to configure
    Tag, Data RAM ECC interrupts instead of cmn_interrupt_2_enable.
    
    Fixes: 27450653f1db ("drivers: edac: Add EDAC driver support for QCOM SoCs")
    Signed-off-by: Komal Bajaj <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware: arm_scmi: imx: Correct tx size of scmi_imx_misc_ctrl_set [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Jan 23 14:34:41 2025 +0800

    firmware: arm_scmi: imx: Correct tx size of scmi_imx_misc_ctrl_set
    
    [ Upstream commit ab027c488fc4a1fff0a5b712d4bdb2d2d324e8f8 ]
    
    'struct scmi_imx_misc_ctrl_set_in' has a zero length array in the end,
    The sizeof will not count 'value[]', and hence Tx size will be smaller
    than actual size for Tx,and SCMI firmware will flag this as protocol
    error.
    
    Fix this by enlarge the Tx size with 'num * sizeof(__le32)' to count in
    the size of data.
    
    Fixes: 61c9f03e22fc ("firmware: arm_scmi: Add initial support for i.MX MISC protocol")
    Reviewed-by: Jacky Bai <[email protected]>
    Tested-by: Shengjiu Wang <[email protected]>
    Acked-by: Jason Liu <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Message-Id: <[email protected]>
    (sudeep.holla: Commit rewording and replace hardcoded sizeof(__le32) value)
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: imx: IMX_SCMI_MISC_DRV should depend on ARCH_MXC [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Wed Feb 5 15:41:43 2025 +0100

    firmware: imx: IMX_SCMI_MISC_DRV should depend on ARCH_MXC
    
    [ Upstream commit be6686b823b30a69b1f71bde228ce042c78a1941 ]
    
    The i.MX System Controller Management Interface firmware is only present
    on Freescale i.MX SoCs.  Hence add a dependency on ARCH_MXC, to prevent
    asking the user about this driver when configuring a kernel without
    Freescale i.MX platform support.
    
    Fixes: 514b2262ade48a05 ("firmware: arm_scmi: Fix i.MX build dependency")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Fabio Estevam <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
flow_dissector: Fix handling of mixed port and port-range keys [+ + +]
Author: Cong Wang <[email protected]>
Date:   Mon Feb 17 20:32:07 2025 -0800

    flow_dissector: Fix handling of mixed port and port-range keys
    
    [ Upstream commit 3e5796862c692ea608d96f0a1437f9290f44953a ]
    
    This patch fixes a bug in TC flower filter where rules combining a
    specific destination port with a source port range weren't working
    correctly.
    
    The specific case was when users tried to configure rules like:
    
    tc filter add dev ens38 ingress protocol ip flower ip_proto udp \
    dst_port 5000 src_port 2000-3000 action drop
    
    The root cause was in the flow dissector code. While both
    FLOW_DISSECTOR_KEY_PORTS and FLOW_DISSECTOR_KEY_PORTS_RANGE flags
    were being set correctly in the classifier, the __skb_flow_dissect_ports()
    function was only populating one of them: whichever came first in
    the enum check. This meant that when the code needed both a specific
    port and a port range, one of them would be left as 0, causing the
    filter to not match packets as expected.
    
    Fix it by removing the either/or logic and instead checking and
    populating both key types independently when they're in use.
    
    Fixes: 8ffb055beae5 ("cls_flower: Fix the behavior using port ranges with hw-offload")
    Reported-by: Qiang Zhang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAPx+-5uvFxkhkz4=j_Xuwkezjn9U6kzKTD5jz4tZ9msSJ0fOJA@mail.gmail.com/
    Cc: Yoshiki Komachi <[email protected]>
    Cc: Jamal Hadi Salim <[email protected]>
    Cc: Jiri Pirko <[email protected]>
    Signed-off-by: Cong Wang <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

flow_dissector: Fix port range key handling in BPF conversion [+ + +]
Author: Cong Wang <[email protected]>
Date:   Mon Feb 17 20:32:09 2025 -0800

    flow_dissector: Fix port range key handling in BPF conversion
    
    [ Upstream commit 69ab34f705fbfabcace64b5d53bb7a4450fac875 ]
    
    Fix how port range keys are handled in __skb_flow_bpf_to_target() by:
    - Separating PORTS and PORTS_RANGE key handling
    - Using correct key_ports_range structure for range keys
    - Properly initializing both key types independently
    
    This ensures port range information is correctly stored in its dedicated
    structure rather than incorrectly using the regular ports key structure.
    
    Fixes: 59fb9b62fb6c ("flow_dissector: Fix to use new variables for port ranges in bpf hook")
    Reported-by: Qiang Zhang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAPx+-5uvFxkhkz4=j_Xuwkezjn9U6kzKTD5jz4tZ9msSJ0fOJA@mail.gmail.com/
    Cc: Yoshiki Komachi <[email protected]>
    Cc: Jamal Hadi Salim <[email protected]>
    Cc: Jiri Pirko <[email protected]>
    Signed-off-by: Cong Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ftrace: Correct preemption accounting for function tracing. [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Thu Feb 20 15:07:49 2025 +0100

    ftrace: Correct preemption accounting for function tracing.
    
    commit 57b76bedc5c52c66968183b5ef57234894c25ce7 upstream.
    
    The function tracer should record the preemption level at the point when
    the function is invoked. If the tracing subsystem decrement the
    preemption counter it needs to correct this before feeding the data into
    the trace buffer. This was broken in the commit cited below while
    shifting the preempt-disabled section.
    
    Use tracing_gen_ctx_dec() which properly subtracts one from the
    preemption counter on a preemptible kernel.
    
    Cc: [email protected]
    Cc: Wander Lairson Costa <[email protected]>
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: ce5e48036c9e7 ("ftrace: disable preemption when recursion locked")
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Tested-by: Wander Lairson Costa <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ftrace: Do not add duplicate entries in subops manager ops [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Thu Feb 20 15:20:11 2025 -0500

    ftrace: Do not add duplicate entries in subops manager ops
    
    commit 8eb4b09e0bbd30981305643229fe7640ad41b667 upstream.
    
    Check if a function is already in the manager ops of a subops. A manager
    ops contains multiple subops, and if two or more subops are tracing the
    same function, the manager ops only needs a single entry in its hash.
    
    Cc: [email protected]
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: Sven Schnelle <[email protected]>
    Cc: Vasily Gorbik <[email protected]>
    Cc: Alexander Gordeev <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 4f554e955614f ("ftrace: Add ftrace_set_filter_ips function")
    Tested-by: Heiko Carstens <[email protected]>
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ftrace: Fix accounting of adding subops to a manager ops [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Thu Feb 20 15:20:10 2025 -0500

    ftrace: Fix accounting of adding subops to a manager ops
    
    commit 38b14061947fa546491656e3f5e388d4fedf8dba upstream.
    
    Function graph uses a subops and manager ops mechanism to attach to
    ftrace.  The manager ops connects to ftrace and the functions it connects
    to is defined by a list of subops that it manages.
    
    The function hash that defines what the above ops attaches to limits the
    functions to attach if the hash has any content. If the hash is empty, it
    means to trace all functions.
    
    The creation of the manager ops hash is done by iterating over all the
    subops hashes. If any of the subops hashes is empty, it means that the
    manager ops hash must trace all functions as well.
    
    The issue is in the creation of the manager ops. When a second subops is
    attached, a new hash is created by starting it as NULL and adding the
    subops one at a time. But the NULL ops is mistaken as an empty hash, and
    once an empty hash is found, it stops the loop of subops and just enables
    all functions.
    
      # echo "f:myevent1 kernel_clone" >> /sys/kernel/tracing/dynamic_events
      # cat /sys/kernel/tracing/enabled_functions
    kernel_clone (1)                tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    
      # echo "f:myevent2 schedule_timeout" >> /sys/kernel/tracing/dynamic_events
      # cat /sys/kernel/tracing/enabled_functions
    trace_initcall_start_cb (1)             tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    run_init_process (1)            tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    try_to_run_init_process (1)             tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    x86_pmu_show_pmu_cap (1)                tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    cleanup_rapl_pmus (1)                   tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    uncore_free_pcibus_map (1)              tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    uncore_types_exit (1)                   tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    uncore_pci_exit.part.0 (1)              tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    kvm_shutdown (1)                tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    vmx_dump_msrs (1)               tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    vmx_cleanup_l1d_flush (1)               tramp: 0xffffffffc0309000 (ftrace_graph_func+0x0/0x60) ->ftrace_graph_func+0x0/0x60
    [..]
    
    Fix this by initializing the new hash to NULL and if the hash is NULL do
    not treat it as an empty hash but instead allocate by copying the content
    of the first sub ops. Then on subsequent iterations, the new hash will not
    be NULL, but the content of the previous subops. If that first subops
    attached to all functions, then new hash may assume that the manager ops
    also needs to attach to all functions.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: Heiko Carstens <[email protected]>
    Cc: Sven Schnelle <[email protected]>
    Cc: Vasily Gorbik <[email protected]>
    Cc: Alexander Gordeev <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 5fccc7552ccbc ("ftrace: Add subops logic to allow one ops to manage many")
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
geneve: Fix use-after-free in geneve_find_dev(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Thu Feb 13 13:33:54 2025 +0900

    geneve: Fix use-after-free in geneve_find_dev().
    
    [ Upstream commit 9593172d93b9f91c362baec4643003dc29802929 ]
    
    syzkaller reported a use-after-free in geneve_find_dev() [0]
    without repro.
    
    geneve_configure() links struct geneve_dev.next to
    net_generic(net, geneve_net_id)->geneve_list.
    
    The net here could differ from dev_net(dev) if IFLA_NET_NS_PID,
    IFLA_NET_NS_FD, or IFLA_TARGET_NETNSID is set.
    
    When dev_net(dev) is dismantled, geneve_exit_batch_rtnl() finally
    calls unregister_netdevice_queue() for each dev in the netns,
    and later the dev is freed.
    
    However, its geneve_dev.next is still linked to the backend UDP
    socket netns.
    
    Then, use-after-free will occur when another geneve dev is created
    in the netns.
    
    Let's call geneve_dellink() instead in geneve_destroy_tunnels().
    
    [0]:
    BUG: KASAN: slab-use-after-free in geneve_find_dev drivers/net/geneve.c:1295 [inline]
    BUG: KASAN: slab-use-after-free in geneve_configure+0x234/0x858 drivers/net/geneve.c:1343
    Read of size 2 at addr ffff000054d6ee24 by task syz.1.4029/13441
    
    CPU: 1 UID: 0 PID: 13441 Comm: syz.1.4029 Not tainted 6.13.0-g0ad9617c78ac #24 dc35ca22c79fb82e8e7bc5c9c9adafea898b1e3d
    Hardware name: linux,dummy-virt (DT)
    Call trace:
     show_stack+0x38/0x50 arch/arm64/kernel/stacktrace.c:466 (C)
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0xbc/0x108 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x16c/0x6f0 mm/kasan/report.c:489
     kasan_report+0xc0/0x120 mm/kasan/report.c:602
     __asan_report_load2_noabort+0x20/0x30 mm/kasan/report_generic.c:379
     geneve_find_dev drivers/net/geneve.c:1295 [inline]
     geneve_configure+0x234/0x858 drivers/net/geneve.c:1343
     geneve_newlink+0xb8/0x128 drivers/net/geneve.c:1634
     rtnl_newlink_create+0x23c/0x868 net/core/rtnetlink.c:3795
     __rtnl_newlink net/core/rtnetlink.c:3906 [inline]
     rtnl_newlink+0x1054/0x1630 net/core/rtnetlink.c:4021
     rtnetlink_rcv_msg+0x61c/0x918 net/core/rtnetlink.c:6911
     netlink_rcv_skb+0x1dc/0x398 net/netlink/af_netlink.c:2543
     rtnetlink_rcv+0x34/0x50 net/core/rtnetlink.c:6938
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x618/0x838 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x5fc/0x8b0 net/netlink/af_netlink.c:1892
     sock_sendmsg_nosec net/socket.c:713 [inline]
     __sock_sendmsg net/socket.c:728 [inline]
     ____sys_sendmsg+0x410/0x6f8 net/socket.c:2568
     ___sys_sendmsg+0x178/0x1d8 net/socket.c:2622
     __sys_sendmsg net/socket.c:2654 [inline]
     __do_sys_sendmsg net/socket.c:2659 [inline]
     __se_sys_sendmsg net/socket.c:2657 [inline]
     __arm64_sys_sendmsg+0x12c/0x1c8 net/socket.c:2657
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x90/0x278 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x13c/0x250 arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x54/0x70 arch/arm64/kernel/syscall.c:151
     el0_svc+0x4c/0xa8 arch/arm64/kernel/entry-common.c:744
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:762
     el0t_64_sync+0x198/0x1a0 arch/arm64/kernel/entry.S:600
    
    Allocated by task 13247:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x30/0x68 mm/kasan/common.c:68
     kasan_save_alloc_info+0x44/0x58 mm/kasan/generic.c:568
     poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
     __kasan_kmalloc+0x84/0xa0 mm/kasan/common.c:394
     kasan_kmalloc include/linux/kasan.h:260 [inline]
     __do_kmalloc_node mm/slub.c:4298 [inline]
     __kmalloc_node_noprof+0x2a0/0x560 mm/slub.c:4304
     __kvmalloc_node_noprof+0x9c/0x230 mm/util.c:645
     alloc_netdev_mqs+0xb8/0x11a0 net/core/dev.c:11470
     rtnl_create_link+0x2b8/0xb50 net/core/rtnetlink.c:3604
     rtnl_newlink_create+0x19c/0x868 net/core/rtnetlink.c:3780
     __rtnl_newlink net/core/rtnetlink.c:3906 [inline]
     rtnl_newlink+0x1054/0x1630 net/core/rtnetlink.c:4021
     rtnetlink_rcv_msg+0x61c/0x918 net/core/rtnetlink.c:6911
     netlink_rcv_skb+0x1dc/0x398 net/netlink/af_netlink.c:2543
     rtnetlink_rcv+0x34/0x50 net/core/rtnetlink.c:6938
     netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
     netlink_unicast+0x618/0x838 net/netlink/af_netlink.c:1348
     netlink_sendmsg+0x5fc/0x8b0 net/netlink/af_netlink.c:1892
     sock_sendmsg_nosec net/socket.c:713 [inline]
     __sock_sendmsg net/socket.c:728 [inline]
     ____sys_sendmsg+0x410/0x6f8 net/socket.c:2568
     ___sys_sendmsg+0x178/0x1d8 net/socket.c:2622
     __sys_sendmsg net/socket.c:2654 [inline]
     __do_sys_sendmsg net/socket.c:2659 [inline]
     __se_sys_sendmsg net/socket.c:2657 [inline]
     __arm64_sys_sendmsg+0x12c/0x1c8 net/socket.c:2657
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x90/0x278 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x13c/0x250 arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x54/0x70 arch/arm64/kernel/syscall.c:151
     el0_svc+0x4c/0xa8 arch/arm64/kernel/entry-common.c:744
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:762
     el0t_64_sync+0x198/0x1a0 arch/arm64/kernel/entry.S:600
    
    Freed by task 45:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x30/0x68 mm/kasan/common.c:68
     kasan_save_free_info+0x58/0x70 mm/kasan/generic.c:582
     poison_slab_object mm/kasan/common.c:247 [inline]
     __kasan_slab_free+0x48/0x68 mm/kasan/common.c:264
     kasan_slab_free include/linux/kasan.h:233 [inline]
     slab_free_hook mm/slub.c:2353 [inline]
     slab_free mm/slub.c:4613 [inline]
     kfree+0x140/0x420 mm/slub.c:4761
     kvfree+0x4c/0x68 mm/util.c:688
     netdev_release+0x94/0xc8 net/core/net-sysfs.c:2065
     device_release+0x98/0x1c0
     kobject_cleanup lib/kobject.c:689 [inline]
     kobject_release lib/kobject.c:720 [inline]
     kref_put include/linux/kref.h:65 [inline]
     kobject_put+0x2b0/0x438 lib/kobject.c:737
     netdev_run_todo+0xe5c/0xfc8 net/core/dev.c:11185
     rtnl_unlock+0x20/0x38 net/core/rtnetlink.c:151
     cleanup_net+0x4fc/0x8c0 net/core/net_namespace.c:648
     process_one_work+0x700/0x1398 kernel/workqueue.c:3236
     process_scheduled_works kernel/workqueue.c:3317 [inline]
     worker_thread+0x8c4/0xe10 kernel/workqueue.c:3398
     kthread+0x4bc/0x608 kernel/kthread.c:464
     ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:862
    
    The buggy address belongs to the object at ffff000054d6e000
     which belongs to the cache kmalloc-cg-4k of size 4096
    The buggy address is located 3620 bytes inside of
     freed 4096-byte region [ffff000054d6e000, ffff000054d6f000)
    
    The buggy address belongs to the physical page:
    page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x94d68
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff000016276181
    flags: 0x3fffe0000000040(head|node=0|zone=0|lastcpupid=0x1ffff)
    page_type: f5(slab)
    raw: 03fffe0000000040 ffff0000c000f500 dead000000000122 0000000000000000
    raw: 0000000000000000 0000000000040004 00000001f5000000 ffff000016276181
    head: 03fffe0000000040 ffff0000c000f500 dead000000000122 0000000000000000
    head: 0000000000000000 0000000000040004 00000001f5000000 ffff000016276181
    head: 03fffe0000000003 fffffdffc1535a01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff000054d6ed00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff000054d6ed80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff000054d6ee00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                   ^
     ffff000054d6ee80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff000054d6ef00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: 2d07dc79fe04 ("geneve: add initial netdev driver for GENEVE tunnels")
    Reported-by: syzkaller <[email protected]>
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

geneve: Suppress list corruption splat in geneve_destroy_tunnels(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Feb 17 12:37:05 2025 -0800

    geneve: Suppress list corruption splat in geneve_destroy_tunnels().
    
    [ Upstream commit 62fab6eef61f245dc8797e3a6a5b890ef40e8628 ]
    
    As explained in the previous patch, iterating for_each_netdev() and
    gn->geneve_list during ->exit_batch_rtnl() could trigger ->dellink()
    twice for the same device.
    
    If CONFIG_DEBUG_LIST is enabled, we will see a list_del() corruption
    splat in the 2nd call of geneve_dellink().
    
    Let's remove for_each_netdev() in geneve_destroy_tunnels() and delegate
    that part to default_device_exit_batch().
    
    Fixes: 9593172d93b9 ("geneve: Fix use-after-free in geneve_find_dev().")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: vf610: add locking to gpio direction functions [+ + +]
Author: Johan Korsnes <[email protected]>
Date:   Mon Feb 17 10:16:43 2025 +0100

    gpio: vf610: add locking to gpio direction functions
    
    commit 4e667a1968099c6deadee2313ecd648f8f0a8956 upstream.
    
    Add locking to `vf610_gpio_direction_input|output()` functions. Without
    this locking, a race condition exists between concurrent calls to these
    functions, potentially leading to incorrect GPIO direction settings.
    
    To verify the correctness of this fix, a `trylock` patch was applied,
    where after a couple of reboots the race was confirmed. I.e., one user
    had to wait before acquiring the lock. With this patch the race has not
    been encountered. It's worth mentioning that any type of debugging
    (printing, tracing, etc.) would "resolve"/hide the issue.
    
    Fixes: 659d8a62311f ("gpio: vf610: add imx7ulp support")
    Signed-off-by: Johan Korsnes <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Reviewed-by: Haibo Chen <[email protected]>
    Cc: Bartosz Golaszewski <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpiolib: protect gpio_chip with SRCU in array_info paths in multi get/set [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Sat Feb 15 10:56:55 2025 +0100

    gpiolib: protect gpio_chip with SRCU in array_info paths in multi get/set
    
    commit 81570d6a7ad37033c7895811551a5a9023706eda upstream.
    
    During the locking rework in GPIOLIB, we omitted one important use-case,
    namely: setting and getting values for GPIO descriptor arrays with
    array_info present.
    
    This patch does two things: first it makes struct gpio_array store the
    address of the underlying GPIO device and not chip. Next: it protects
    the chip with SRCU from removal in gpiod_get_array_value_complex() and
    gpiod_set_array_value_complex().
    
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gtp: Suppress list corruption splat in gtp_net_exit_batch_rtnl(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Feb 17 12:37:04 2025 -0800

    gtp: Suppress list corruption splat in gtp_net_exit_batch_rtnl().
    
    [ Upstream commit 4ccacf86491d33d2486b62d4d44864d7101b299d ]
    
    Brad Spengler reported the list_del() corruption splat in
    gtp_net_exit_batch_rtnl(). [0]
    
    Commit eb28fd76c0a0 ("gtp: Destroy device along with udp socket's netns
    dismantle.") added the for_each_netdev() loop in gtp_net_exit_batch_rtnl()
    to destroy devices in each netns as done in geneve and ip tunnels.
    
    However, this could trigger ->dellink() twice for the same device during
    ->exit_batch_rtnl().
    
    Say we have two netns A & B and gtp device B that resides in netns B but
    whose UDP socket is in netns A.
    
      1. cleanup_net() processes netns A and then B.
    
      2. gtp_net_exit_batch_rtnl() finds the device B while iterating
         netns A's gn->gtp_dev_list and calls ->dellink().
    
      [ device B is not yet unlinked from netns B
        as unregister_netdevice_many() has not been called. ]
    
      3. gtp_net_exit_batch_rtnl() finds the device B while iterating
         netns B's for_each_netdev() and calls ->dellink().
    
    gtp_dellink() cleans up the device's hash table, unlinks the dev from
    gn->gtp_dev_list, and calls unregister_netdevice_queue().
    
    Basically, calling gtp_dellink() multiple times is fine unless
    CONFIG_DEBUG_LIST is enabled.
    
    Let's remove for_each_netdev() in gtp_net_exit_batch_rtnl() and
    delegate the destruction to default_device_exit_batch() as done
    in bareudp.
    
    [0]:
    list_del corruption, ffff8880aaa62c00->next (autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc00/0x1000 [slab object]) is LIST_POISON1 (ffffffffffffff02) (prev is 0xffffffffffffff04)
    kernel BUG at lib/list_debug.c:58!
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN
    CPU: 1 UID: 0 PID: 1804 Comm: kworker/u8:7 Tainted: G                T   6.12.13-grsec-full-20250211091339 #1
    Tainted: [T]=RANDSTRUCT
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Workqueue: netns cleanup_net
    RIP: 0010:[<ffffffff84947381>] __list_del_entry_valid_or_report+0x141/0x200 lib/list_debug.c:58
    Code: c2 76 91 31 c0 e8 9f b1 f7 fc 0f 0b 4d 89 f0 48 c7 c1 02 ff ff ff 48 89 ea 48 89 ee 48 c7 c7 e0 c2 76 91 31 c0 e8 7f b1 f7 fc <0f> 0b 4d 89 e8 48 c7 c1 04 ff ff ff 48 89 ea 48 89 ee 48 c7 c7 60
    RSP: 0018:fffffe8040b4fbd0 EFLAGS: 00010283
    RAX: 00000000000000cc RBX: dffffc0000000000 RCX: ffffffff818c4054
    RDX: ffffffff84947381 RSI: ffffffff818d1512 RDI: 0000000000000000
    RBP: ffff8880aaa62c00 R08: 0000000000000001 R09: fffffbd008169f32
    R10: fffffe8040b4f997 R11: 0000000000000001 R12: a1988d84f24943e4
    R13: ffffffffffffff02 R14: ffffffffffffff04 R15: ffff8880aaa62c08
    RBX: kasan shadow of 0x0
    RCX: __wake_up_klogd.part.0+0x74/0xe0 kernel/printk/printk.c:4554
    RDX: __list_del_entry_valid_or_report+0x141/0x200 lib/list_debug.c:58
    RSI: vprintk+0x72/0x100 kernel/printk/printk_safe.c:71
    RBP: autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc00/0x1000 [slab object]
    RSP: process kstack fffffe8040b4fbd0+0x7bd0/0x8000 [kworker/u8:7+netns 1804 ]
    R09: kasan shadow of process kstack fffffe8040b4f990+0x7990/0x8000 [kworker/u8:7+netns 1804 ]
    R10: process kstack fffffe8040b4f997+0x7997/0x8000 [kworker/u8:7+netns 1804 ]
    R15: autoslab_size_M_dev_P_net_core_dev_11127_8_1328_8_S_4096_A_64_n_139+0xc08/0x1000 [slab object]
    FS:  0000000000000000(0000) GS:ffff888116000000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000748f5372c000 CR3: 0000000015408000 CR4: 00000000003406f0 shadow CR4: 00000000003406f0
    Stack:
     0000000000000000 ffffffff8a0c35e7 ffffffff8a0c3603 ffff8880aaa62c00
     ffff8880aaa62c00 0000000000000004 ffff88811145311c 0000000000000005
     0000000000000001 ffff8880aaa62000 fffffe8040b4fd40 ffffffff8a0c360d
    Call Trace:
     <TASK>
     [<ffffffff8a0c360d>] __list_del_entry_valid include/linux/list.h:131 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] __list_del_entry include/linux/list.h:248 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] list_del include/linux/list.h:262 [inline] fffffe8040b4fc28
     [<ffffffff8a0c360d>] gtp_dellink+0x16d/0x360 drivers/net/gtp.c:1557 fffffe8040b4fc28
     [<ffffffff8a0d0404>] gtp_net_exit_batch_rtnl+0x124/0x2c0 drivers/net/gtp.c:2495 fffffe8040b4fc88
     [<ffffffff8e705b24>] cleanup_net+0x5a4/0xbe0 net/core/net_namespace.c:635 fffffe8040b4fcd0
     [<ffffffff81754c97>] process_one_work+0xbd7/0x2160 kernel/workqueue.c:3326 fffffe8040b4fd88
     [<ffffffff81757195>] process_scheduled_works kernel/workqueue.c:3407 [inline] fffffe8040b4fec0
     [<ffffffff81757195>] worker_thread+0x6b5/0xfa0 kernel/workqueue.c:3488 fffffe8040b4fec0
     [<ffffffff817782a0>] kthread+0x360/0x4c0 kernel/kthread.c:397 fffffe8040b4ff78
     [<ffffffff814d8594>] ret_from_fork+0x74/0xe0 arch/x86/kernel/process.c:172 fffffe8040b4ffb8
     [<ffffffff8110f509>] ret_from_fork_asm+0x29/0xc0 arch/x86/entry/entry_64.S:399 fffffe8040b4ffe8
     </TASK>
    Modules linked in:
    
    Fixes: eb28fd76c0a0 ("gtp: Destroy device along with udp socket's netns dismantle.")
    Reported-by: Brad Spengler <[email protected]>
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gve: set xdp redirect target only when it is available [+ + +]
Author: Joshua Washington <[email protected]>
Date:   Fri Feb 14 14:43:59 2025 -0800

    gve: set xdp redirect target only when it is available
    
    commit 415cadd505464d9a11ff5e0f6e0329c127849da5 upstream.
    
    Before this patch the NETDEV_XDP_ACT_NDO_XMIT XDP feature flag is set by
    default as part of driver initialization, and is never cleared. However,
    this flag differs from others in that it is used as an indicator for
    whether the driver is ready to perform the ndo_xdp_xmit operation as
    part of an XDP_REDIRECT. Kernel helpers
    xdp_features_(set|clear)_redirect_target exist to convey this meaning.
    
    This patch ensures that the netdev is only reported as a redirect target
    when XDP queues exist to forward traffic.
    
    Fixes: 39a7f4aa3e4a ("gve: Add XDP REDIRECT support for GQI-QPL format")
    Cc: [email protected]
    Reviewed-by: Praveen Kaligineedi <[email protected]>
    Reviewed-by: Jeroen de Borst <[email protected]>
    Signed-off-by: Joshua Washington <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ibmvnic: Don't reference skb after sending to VIOS [+ + +]
Author: Nick Child <[email protected]>
Date:   Fri Feb 14 09:52:33 2025 -0600

    ibmvnic: Don't reference skb after sending to VIOS
    
    [ Upstream commit bdf5d13aa05ec314d4385b31ac974d6c7e0997c9 ]
    
    Previously, after successfully flushing the xmit buffer to VIOS,
    the tx_bytes stat was incremented by the length of the skb.
    
    It is invalid to access the skb memory after sending the buffer to
    the VIOS because, at any point after sending, the VIOS can trigger
    an interrupt to free this memory. A race between reading skb->len
    and freeing the skb is possible (especially during LPM) and will
    result in use-after-free:
     ==================================================================
     BUG: KASAN: slab-use-after-free in ibmvnic_xmit+0x75c/0x1808 [ibmvnic]
     Read of size 4 at addr c00000024eb48a70 by task hxecom/14495
     <...>
     Call Trace:
     [c000000118f66cf0] [c0000000018cba6c] dump_stack_lvl+0x84/0xe8 (unreliable)
     [c000000118f66d20] [c0000000006f0080] print_report+0x1a8/0x7f0
     [c000000118f66df0] [c0000000006f08f0] kasan_report+0x128/0x1f8
     [c000000118f66f00] [c0000000006f2868] __asan_load4+0xac/0xe0
     [c000000118f66f20] [c0080000046eac84] ibmvnic_xmit+0x75c/0x1808 [ibmvnic]
     [c000000118f67340] [c0000000014be168] dev_hard_start_xmit+0x150/0x358
     <...>
     Freed by task 0:
     kasan_save_stack+0x34/0x68
     kasan_save_track+0x2c/0x50
     kasan_save_free_info+0x64/0x108
     __kasan_mempool_poison_object+0x148/0x2d4
     napi_skb_cache_put+0x5c/0x194
     net_tx_action+0x154/0x5b8
     handle_softirqs+0x20c/0x60c
     do_softirq_own_stack+0x6c/0x88
     <...>
     The buggy address belongs to the object at c00000024eb48a00 which
      belongs to the cache skbuff_head_cache of size 224
    ==================================================================
    
    Fixes: 032c5e82847a ("Driver for IBM System i/p VNIC protocol")
    Signed-off-by: Nick Child <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io_uring/rw: forbid multishot async reads [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Wed Feb 19 01:33:37 2025 +0000

    io_uring/rw: forbid multishot async reads
    
    commit 67b0025d19f99fb9fbb8b62e6975553c183f3a16 upstream.
    
    At the moment we can't sanely handle queuing an async request from a
    multishot context, so disable them. It shouldn't matter as pollable
    files / socekts don't normally do async.
    
    Patching it in __io_read() is not the cleanest way, but it's simpler
    than other options, so let's fix it there and clean up on top.
    
    Cc: [email protected]
    Reported-by: chase xd <[email protected]>
    Fixes: fc68fcda04910 ("io_uring/rw: add support for IORING_OP_READ_MULTISHOT")
    Signed-off-by: Pavel Begunkov <[email protected]>
    Link: https://lore.kernel.org/r/7d51732c125159d17db4fe16f51ec41b936973f8.1739919038.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring: prevent opcode speculation [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Fri Feb 14 22:48:15 2025 +0000

    io_uring: prevent opcode speculation
    
    commit 1e988c3fe1264708f4f92109203ac5b1d65de50b upstream.
    
    sqe->opcode is used for different tables, make sure we santitise it
    against speculations.
    
    Cc: [email protected]
    Fixes: d3656344fea03 ("io_uring: add lookup table for various opcode needs")
    Signed-off-by: Pavel Begunkov <[email protected]>
    Reviewed-by: Li Zetao <[email protected]>
    Link: https://lore.kernel.org/r/7eddbf31c8ca0a3947f8ed98271acc2b4349c016.1739568408.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/gic-v3: Fix rk3399 workaround when secure interrupts are enabled [+ + +]
Author: Marc Zyngier <[email protected]>
Date:   Sat Feb 15 18:52:41 2025 +0000

    irqchip/gic-v3: Fix rk3399 workaround when secure interrupts are enabled
    
    commit 4cb77793842a351b39a030f77caebace3524840e upstream.
    
    Christoph reports that their rk3399 system dies since commit 773c05f417fa1
    ("irqchip/gic-v3: Work around insecure GIC integrations").
    
    It appears that some rk3399 have secure payloads, and that the firmware
    sets SCR_EL3.FIQ==1. Obivously, disabling security in that configuration
    leads to even more problems.
    
    Revisit the workaround by:
    
      - making it rk3399 specific
      - checking whether Group-0 is available, which is a good proxy
        for SCR_EL3.FIQ being 0
      - either apply the workaround if Group-0 is available, or disable
        pseudo-NMIs if not
    
    Note that this doesn't mean that the secure side is able to receive
    interrupts, as all interrupts are made non-secure anyway.
    
    Clearly, nobody ever tested secure interrupts on this platform.
    
    Fixes: 773c05f417fa1 ("irqchip/gic-v3: Work around insecure GIC integrations")
    Reported-by: Christoph Fritz <[email protected]>
    Signed-off-by: Marc Zyngier <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Tested-by: Christoph Fritz <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Closes: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/jcore-aic, clocksource/drivers/jcore: Fix jcore-pit interrupt request [+ + +]
Author: Artur Rojek <[email protected]>
Date:   Sun Feb 16 18:55:45 2025 +0100

    irqchip/jcore-aic, clocksource/drivers/jcore: Fix jcore-pit interrupt request
    
    [ Upstream commit d7e3fd658248f257006227285095d190e70ee73a ]
    
    The jcore-aic irqchip does not have separate interrupt numbers reserved for
    cpu-local vs global interrupts. Therefore the device drivers need to
    request the given interrupt as per CPU interrupt.
    
    69a9dcbd2d65 ("clocksource/drivers/jcore: Use request_percpu_irq()")
    converted the clocksource driver over to request_percpu_irq(), but failed
    to do add all the required changes, resulting in a failure to register PIT
    interrupts.
    
    Fix this by:
    
     1) Explicitly mark the interrupt via irq_set_percpu_devid() in
        jcore_pit_init().
    
     2) Enable and disable the per CPU interrupt in the CPU hotplug callbacks.
    
     3) Pass the correct per-cpu cookie to the irq handler by using
        handle_percpu_devid_irq() instead of handle_percpu_irq() in
        handle_jcore_irq().
    
    [ tglx: Massage change log ]
    
    Fixes: 69a9dcbd2d65 ("clocksource/drivers/jcore: Use request_percpu_irq()")
    Signed-off-by: Artur Rojek <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Acked-by: Uros Bizjak <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
lib/iov_iter: fix import_iovec_ubuf iovec management [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Fri Jan 31 14:13:15 2025 +0000

    lib/iov_iter: fix import_iovec_ubuf iovec management
    
    commit f4b78260fc678ccd7169f32dc9f3bfa3b93931c7 upstream.
    
    import_iovec() says that it should always be fine to kfree the iovec
    returned in @iovp regardless of the error code.  __import_iovec_ubuf()
    never reallocates it and thus should clear the pointer even in cases when
    copy_iovec_*() fail.
    
    Link: https://lkml.kernel.org/r/378ae26923ffc20fd5e41b4360d673bf47b1775b.1738332461.git.asml.silence@gmail.com
    Fixes: 3b2deb0e46da ("iov_iter: import single vector iovecs as ITER_UBUF")
    Signed-off-by: Pavel Begunkov <[email protected]>
    Reviewed-by: Jens Axboe <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.13.5 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Feb 27 04:34:22 2025 -0800

    Linux 6.13.5
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: FLorian Fainelli <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Slade Watkins <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-By: Achill Gilgenast <[email protected]>
    Tested-by: Luna Jernberg <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
md/raid*: Fix the set_queue_limits implementations [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Wed Feb 12 09:11:07 2025 -0800

    md/raid*: Fix the set_queue_limits implementations
    
    [ Upstream commit fbe8f2fa971c537571994a0df532c511c4fb5537 ]
    
    queue_limits_cancel_update() must only be called if
    queue_limits_start_update() is called first. Remove the
    queue_limits_cancel_update() calls from the raid*_set_limits() functions
    because there is no corresponding queue_limits_start_update() call.
    
    Cc: Christoph Hellwig <[email protected]>
    Fixes: c6e56cf6b2e7 ("block: move integrity information into queue_limits")
    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/linux-raid/[email protected]/
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm,madvise,hugetlb: check for 0-length range after end address adjustment [+ + +]
Author: Ricardo Cañuelo Navarro <[email protected]>
Date:   Mon Feb 3 08:52:06 2025 +0100

    mm,madvise,hugetlb: check for 0-length range after end address adjustment
    
    commit 2ede647a6fde3e54a6bfda7cf01c716649655900 upstream.
    
    Add a sanity check to madvise_dontneed_free() to address a corner case in
    madvise where a race condition causes the current vma being processed to
    be backed by a different page size.
    
    During a madvise(MADV_DONTNEED) call on a memory region registered with a
    userfaultfd, there's a period of time where the process mm lock is
    temporarily released in order to send a UFFD_EVENT_REMOVE and let
    userspace handle the event.  During this time, the vma covering the
    current address range may change due to an explicit mmap done concurrently
    by another thread.
    
    If, after that change, the memory region, which was originally backed by
    4KB pages, is now backed by hugepages, the end address is rounded down to
    a hugepage boundary to avoid data loss (see "Fixes" below).  This rounding
    may cause the end address to be truncated to the same address as the
    start.
    
    Make this corner case follow the same semantics as in other similar cases
    where the requested region has zero length (ie.  return 0).
    
    This will make madvise_walk_vmas() continue to the next vma in the range
    (this time holding the process mm lock) which, due to the prev pointer
    becoming stale because of the vma change, will be the same hugepage-backed
    vma that was just checked before.  The next time madvise_dontneed_free()
    runs for this vma, if the start address isn't aligned to a hugepage
    boundary, it'll return -EINVAL, which is also in line with the madvise
    api.
    
    From userspace perspective, madvise() will return EINVAL because the start
    address isn't aligned according to the new vma alignment requirements
    (hugepage), even though it was correctly page-aligned when the call was
    issued.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 8ebe0a5eaaeb ("mm,madvise,hugetlb: fix unexpected data loss with MADV_DONTNEED on hugetlbfs")
    Signed-off-by: Ricardo Cañuelo Navarro <[email protected]>
    Reviewed-by: Oscar Salvador <[email protected]>
    Cc: Florent Revest <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/migrate_device: don't add folio to be freed to LRU in migrate_device_finalize() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Mon Feb 10 17:13:17 2025 +0100

    mm/migrate_device: don't add folio to be freed to LRU in migrate_device_finalize()
    
    commit 41cddf83d8b00f29fd105e7a0777366edc69a5cf upstream.
    
    If migration succeeded, we called
    folio_migrate_flags()->mem_cgroup_migrate() to migrate the memcg from the
    old to the new folio.  This will set memcg_data of the old folio to 0.
    
    Similarly, if migration failed, memcg_data of the dst folio is left unset.
    
    If we call folio_putback_lru() on such folios (memcg_data == 0), we will
    add the folio to be freed to the LRU, making memcg code unhappy.  Running
    the hmm selftests:
    
      # ./hmm-tests
      ...
      #  RUN           hmm.hmm_device_private.migrate ...
      [  102.078007][T14893] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x7ff27d200 pfn:0x13cc00
      [  102.079974][T14893] anon flags: 0x17ff00000020018(uptodate|dirty|swapbacked|node=0|zone=2|lastcpupid=0x7ff)
      [  102.082037][T14893] raw: 017ff00000020018 dead000000000100 dead000000000122 ffff8881353896c9
      [  102.083687][T14893] raw: 00000007ff27d200 0000000000000000 00000001ffffffff 0000000000000000
      [  102.085331][T14893] page dumped because: VM_WARN_ON_ONCE_FOLIO(!memcg && !mem_cgroup_disabled())
      [  102.087230][T14893] ------------[ cut here ]------------
      [  102.088279][T14893] WARNING: CPU: 0 PID: 14893 at ./include/linux/memcontrol.h:726 folio_lruvec_lock_irqsave+0x10e/0x170
      [  102.090478][T14893] Modules linked in:
      [  102.091244][T14893] CPU: 0 UID: 0 PID: 14893 Comm: hmm-tests Not tainted 6.13.0-09623-g6c216bc522fd #151
      [  102.093089][T14893] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
      [  102.094848][T14893] RIP: 0010:folio_lruvec_lock_irqsave+0x10e/0x170
      [  102.096104][T14893] Code: ...
      [  102.099908][T14893] RSP: 0018:ffffc900236c37b0 EFLAGS: 00010293
      [  102.101152][T14893] RAX: 0000000000000000 RBX: ffffea0004f30000 RCX: ffffffff8183f426
      [  102.102684][T14893] RDX: ffff8881063cb880 RSI: ffffffff81b8117f RDI: ffff8881063cb880
      [  102.104227][T14893] RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000000
      [  102.105757][T14893] R10: 0000000000000001 R11: 0000000000000002 R12: ffffc900236c37d8
      [  102.107296][T14893] R13: ffff888277a2bcb0 R14: 000000000000001f R15: 0000000000000000
      [  102.108830][T14893] FS:  00007ff27dbdd740(0000) GS:ffff888277a00000(0000) knlGS:0000000000000000
      [  102.110643][T14893] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  102.111924][T14893] CR2: 00007ff27d400000 CR3: 000000010866e000 CR4: 0000000000750ef0
      [  102.113478][T14893] PKRU: 55555554
      [  102.114172][T14893] Call Trace:
      [  102.114805][T14893]  <TASK>
      [  102.115397][T14893]  ? folio_lruvec_lock_irqsave+0x10e/0x170
      [  102.116547][T14893]  ? __warn.cold+0x110/0x210
      [  102.117461][T14893]  ? folio_lruvec_lock_irqsave+0x10e/0x170
      [  102.118667][T14893]  ? report_bug+0x1b9/0x320
      [  102.119571][T14893]  ? handle_bug+0x54/0x90
      [  102.120494][T14893]  ? exc_invalid_op+0x17/0x50
      [  102.121433][T14893]  ? asm_exc_invalid_op+0x1a/0x20
      [  102.122435][T14893]  ? __wake_up_klogd.part.0+0x76/0xd0
      [  102.123506][T14893]  ? dump_page+0x4f/0x60
      [  102.124352][T14893]  ? folio_lruvec_lock_irqsave+0x10e/0x170
      [  102.125500][T14893]  folio_batch_move_lru+0xd4/0x200
      [  102.126577][T14893]  ? __pfx_lru_add+0x10/0x10
      [  102.127505][T14893]  __folio_batch_add_and_move+0x391/0x720
      [  102.128633][T14893]  ? __pfx_lru_add+0x10/0x10
      [  102.129550][T14893]  folio_putback_lru+0x16/0x80
      [  102.130564][T14893]  migrate_device_finalize+0x9b/0x530
      [  102.131640][T14893]  dmirror_migrate_to_device.constprop.0+0x7c5/0xad0
      [  102.133047][T14893]  dmirror_fops_unlocked_ioctl+0x89b/0xc80
    
    Likely, nothing else goes wrong: putting the last folio reference will
    remove the folio from the LRU again.  So besides memcg complaining, adding
    the folio to be freed to the LRU is just an unnecessary step.
    
    The new flow resembles what we have in migrate_folio_move(): add the dst
    to the lru, remove migration ptes, unlock and unref dst.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 8763cb45ab96 ("mm/migrate: new memory migration helper for use with device memory")
    Signed-off-by: David Hildenbrand <[email protected]>
    Cc: Jérôme Glisse <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/zswap: fix inconsistency when zswap_store_page() fails [+ + +]
Author: Hyeonggon Yoo <[email protected]>
Date:   Wed Jan 29 19:08:44 2025 +0900

    mm/zswap: fix inconsistency when zswap_store_page() fails
    
    commit 63895d20d63b446f5049a963983489319c2ea3e2 upstream.
    
    Commit b7c0ccdfbafd ("mm: zswap: support large folios in zswap_store()")
    skips charging any zswap entries when it failed to zswap the entire folio.
    
    However, when some base pages are zswapped but it failed to zswap the
    entire folio, the zswap operation is rolled back.  When freeing zswap
    entries for those pages, zswap_entry_free() uncharges the zswap entries
    that were not previously charged, causing zswap charging to become
    inconsistent.
    
    This inconsistency triggers two warnings with following steps:
      # On a machine with 64GiB of RAM and 36GiB of zswap
      $ stress-ng --bigheap 2 # wait until the OOM-killer kills stress-ng
      $ sudo reboot
    
      The two warnings are:
        in mm/memcontrol.c:163, function obj_cgroup_release():
          WARN_ON_ONCE(nr_bytes & (PAGE_SIZE - 1));
    
        in mm/page_counter.c:60, function page_counter_cancel():
          if (WARN_ONCE(new < 0, "page_counter underflow: %ld nr_pages=%lu\n",
              new, nr_pages))
    
    zswap_stored_pages also becomes inconsistent in the same way.
    
    As suggested by Kanchana, increment zswap_stored_pages and charge zswap
    entries within zswap_store_page() when it succeeds.  This way,
    zswap_entry_free() will decrement the counter and uncharge the entries
    when it failed to zswap the entire folio.
    
    While this could potentially be optimized by batching objcg charging and
    incrementing the counter, let's focus on fixing the bug this time and
    leave the optimization for later after some evaluation.
    
    After resolving the inconsistency, the warnings disappear.
    
    [[email protected]: refactor zswap_store_page()]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: b7c0ccdfbafd ("mm: zswap: support large folios in zswap_store()")
    Co-developed-by: Kanchana P Sridhar <[email protected]>
    Signed-off-by: Kanchana P Sridhar <[email protected]>
    Signed-off-by: Hyeonggon Yoo <[email protected]>
    Acked-by: Yosry Ahmed <[email protected]>
    Acked-by: Nhat Pham <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: rawnand: cadence: fix error code in cadence_nand_init() [+ + +]
Author: Niravkumar L Rabara <[email protected]>
Date:   Mon Feb 10 13:35:49 2025 +0800

    mtd: rawnand: cadence: fix error code in cadence_nand_init()
    
    commit 2b9df00cded911e2ca2cfae5c45082166b24f8aa upstream.
    
    Replace dma_request_channel() with dma_request_chan_by_mask() and use
    helper functions to return proper error code instead of fixed -EBUSY.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: [email protected]
    Signed-off-by: Niravkumar L Rabara <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: cadence: fix incorrect device in dma_unmap_single [+ + +]
Author: Niravkumar L Rabara <[email protected]>
Date:   Mon Feb 10 13:35:51 2025 +0800

    mtd: rawnand: cadence: fix incorrect device in dma_unmap_single
    
    commit f37d135b42cb484bdecee93f56b9f483214ede78 upstream.
    
    dma_map_single is using physical/bus device (DMA) but dma_unmap_single
    is using framework device(NAND controller), which is incorrect.
    Fixed dma_unmap_single to use correct physical/bus device.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: [email protected]
    Signed-off-by: Niravkumar L Rabara <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: cadence: use dma_map_resource for sdma address [+ + +]
Author: Niravkumar L Rabara <[email protected]>
Date:   Mon Feb 10 13:35:50 2025 +0800

    mtd: rawnand: cadence: use dma_map_resource for sdma address
    
    commit d76d22b5096c5b05208fd982b153b3f182350b19 upstream.
    
    Remap the slave DMA I/O resources to enhance driver portability.
    Using a physical address causes DMA translation failure when the
    ARM SMMU is enabled.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: [email protected]
    Signed-off-by: Niravkumar L Rabara <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: sst: Fix SST write failure [+ + +]
Author: Amit Kumar Mahapatra <[email protected]>
Date:   Thu Feb 13 11:15:46 2025 +0530

    mtd: spi-nor: sst: Fix SST write failure
    
    commit 539bd20352832b9244238a055eb169ccf1c41ff6 upstream.
    
    'commit 18bcb4aa54ea ("mtd: spi-nor: sst: Factor out common write operation
    to `sst_nor_write_data()`")' introduced a bug where only one byte of data
    is written, regardless of the number of bytes passed to
    sst_nor_write_data(), causing a kernel crash during the write operation.
    Ensure the correct number of bytes are written as passed to
    sst_nor_write_data().
    
    Call trace:
    [   57.400180] ------------[ cut here ]------------
    [   57.404842] While writing 2 byte written 1 bytes
    [   57.409493] WARNING: CPU: 0 PID: 737 at drivers/mtd/spi-nor/sst.c:187 sst_nor_write_data+0x6c/0x74
    [   57.418464] Modules linked in:
    [   57.421517] CPU: 0 UID: 0 PID: 737 Comm: mtd_debug Not tainted 6.12.0-g5ad04afd91f9 #30
    [   57.429517] Hardware name: Xilinx Versal A2197 Processor board revA - x-prc-02 revA (DT)
    [   57.437600] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   57.444557] pc : sst_nor_write_data+0x6c/0x74
    [   57.448911] lr : sst_nor_write_data+0x6c/0x74
    [   57.453264] sp : ffff80008232bb40
    [   57.456570] x29: ffff80008232bb40 x28: 0000000000010000 x27: 0000000000000001
    [   57.463708] x26: 000000000000ffff x25: 0000000000000000 x24: 0000000000000000
    [   57.470843] x23: 0000000000010000 x22: ffff80008232bbf0 x21: ffff000816230000
    [   57.477978] x20: ffff0008056c0080 x19: 0000000000000002 x18: 0000000000000006
    [   57.485112] x17: 0000000000000000 x16: 0000000000000000 x15: ffff80008232b580
    [   57.492246] x14: 0000000000000000 x13: ffff8000816d1530 x12: 00000000000004a4
    [   57.499380] x11: 000000000000018c x10: ffff8000816fd530 x9 : ffff8000816d1530
    [   57.506515] x8 : 00000000fffff7ff x7 : ffff8000816fd530 x6 : 0000000000000001
    [   57.513649] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
    [   57.520782] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0008049b0000
    [   57.527916] Call trace:
    [   57.530354]  sst_nor_write_data+0x6c/0x74
    [   57.534361]  sst_nor_write+0xb4/0x18c
    [   57.538019]  mtd_write_oob_std+0x7c/0x88
    [   57.541941]  mtd_write_oob+0x70/0xbc
    [   57.545511]  mtd_write+0x68/0xa8
    [   57.548733]  mtdchar_write+0x10c/0x290
    [   57.552477]  vfs_write+0xb4/0x3a8
    [   57.555791]  ksys_write+0x74/0x10c
    [   57.559189]  __arm64_sys_write+0x1c/0x28
    [   57.563109]  invoke_syscall+0x54/0x11c
    [   57.566856]  el0_svc_common.constprop.0+0xc0/0xe0
    [   57.571557]  do_el0_svc+0x1c/0x28
    [   57.574868]  el0_svc+0x30/0xcc
    [   57.577921]  el0t_64_sync_handler+0x120/0x12c
    [   57.582276]  el0t_64_sync+0x190/0x194
    [   57.585933] ---[ end trace 0000000000000000 ]---
    
    Cc: [email protected]
    Fixes: 18bcb4aa54ea ("mtd: spi-nor: sst: Factor out common write operation to `sst_nor_write_data()`")
    Signed-off-by: Amit Kumar Mahapatra <[email protected]>
    Reviewed-by: Pratyush Yadav <[email protected]>
    Reviewed-by: Tudor Ambarus <[email protected]>
    Reviewed-by: Bence Csókás <[email protected]>
    [[email protected]: add Cc stable tag]
    Signed-off-by: Pratyush Yadav <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/sched: cls_api: fix error handling causing NULL dereference [+ + +]
Author: Pierre Riteau <[email protected]>
Date:   Thu Feb 13 23:36:10 2025 +0100

    net/sched: cls_api: fix error handling causing NULL dereference
    
    [ Upstream commit 071ed42cff4fcdd89025d966d48eabef59913bf2 ]
    
    tcf_exts_miss_cookie_base_alloc() calls xa_alloc_cyclic() which can
    return 1 if the allocation succeeded after wrapping. This was treated as
    an error, with value 1 returned to caller tcf_exts_init_ex() which sets
    exts->actions to NULL and returns 1 to caller fl_change().
    
    fl_change() treats err == 1 as success, calling tcf_exts_validate_ex()
    which calls tcf_action_init() with exts->actions as argument, where it
    is dereferenced.
    
    Example trace:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    CPU: 114 PID: 16151 Comm: handler114 Kdump: loaded Not tainted 5.14.0-503.16.1.el9_5.x86_64 #1
    RIP: 0010:tcf_action_init+0x1f8/0x2c0
    Call Trace:
     tcf_action_init+0x1f8/0x2c0
     tcf_exts_validate_ex+0x175/0x190
     fl_change+0x537/0x1120 [cls_flower]
    
    Fixes: 80cd22c35c90 ("net/sched: cls_api: Support hardware miss to tc action")
    Signed-off-by: Pierre Riteau <[email protected]>
    Reviewed-by: Michal Swiatkowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: Add non-RCU dev_getbyhwaddr() helper [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Tue Feb 18 05:49:30 2025 -0800

    net: Add non-RCU dev_getbyhwaddr() helper
    
    [ Upstream commit 4b5a28b38c4a0106c64416a1b2042405166b26ce ]
    
    Add dedicated helper for finding devices by hardware address when
    holding rtnl_lock, similar to existing dev_getbyhwaddr_rcu(). This prevents
    PROVE_LOCKING warnings when rtnl_lock is held but RCU read lock is not.
    
    Extract common address comparison logic into dev_addr_cmp().
    
    The context about this change could be found in the following
    discussion:
    
    Link: https://lore.kernel.org/all/20250206-scarlet-ermine-of-improvement-1fcac5@leitao/
    
    Cc: [email protected]
    Cc: [email protected]
    Suggested-by: Eric Dumazet <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4eae0ee0f1e6 ("arp: switch to dev_getbyhwaddr() in arp_req_set_public()")
    Signed-off-by: Sasha Levin <[email protected]>

net: Add rx_skb of kfree_skb to raw_tp_null_args[]. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Fri Jan 31 19:01:42 2025 -0800

    net: Add rx_skb of kfree_skb to raw_tp_null_args[].
    
    [ Upstream commit 5da7e15fb5a12e78de974d8908f348e279922ce9 ]
    
    Yan Zhai reported a BPF prog could trigger a null-ptr-deref [0]
    in trace_kfree_skb if the prog does not check if rx_sk is NULL.
    
    Commit c53795d48ee8 ("net: add rx_sk to trace_kfree_skb") added
    rx_sk to trace_kfree_skb, but rx_sk is optional and could be NULL.
    
    Let's add kfree_skb to raw_tp_null_args[] to let the BPF verifier
    validate such a prog and prevent the issue.
    
    Now we fail to load such a prog:
    
      libbpf: prog 'drop': -- BEGIN PROG LOAD LOG --
      0: R1=ctx() R10=fp0
      ; int BPF_PROG(drop, struct sk_buff *skb, void *location, @ kfree_skb_sk_null.bpf.c:21
      0: (79) r3 = *(u64 *)(r1 +24)
      func 'kfree_skb' arg3 has btf_id 5253 type STRUCT 'sock'
      1: R1=ctx() R3_w=trusted_ptr_or_null_sock(id=1)
      ; bpf_printk("sk: %d, %d\n", sk, sk->__sk_common.skc_family); @ kfree_skb_sk_null.bpf.c:24
      1: (69) r4 = *(u16 *)(r3 +16)
      R3 invalid mem access 'trusted_ptr_or_null_'
      processed 2 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
      -- END PROG LOAD LOG --
    
    Note this fix requires commit 838a10bd2ebf ("bpf: Augment raw_tp
    arguments with PTR_MAYBE_NULL").
    
    [0]:
    BUG: kernel NULL pointer dereference, address: 0000000000000010
     PF: supervisor read access in kernel mode
     PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    PREEMPT SMP
    RIP: 0010:bpf_prog_5e21a6db8fcff1aa_drop+0x10/0x2d
    Call Trace:
     <TASK>
     ? __die+0x1f/0x60
     ? page_fault_oops+0x148/0x420
     ? search_bpf_extables+0x5b/0x70
     ? fixup_exception+0x27/0x2c0
     ? exc_page_fault+0x75/0x170
     ? asm_exc_page_fault+0x22/0x30
     ? bpf_prog_5e21a6db8fcff1aa_drop+0x10/0x2d
     bpf_trace_run4+0x68/0xd0
     ? unix_stream_connect+0x1f4/0x6f0
     sk_skb_reason_drop+0x90/0x120
     unix_stream_connect+0x1f4/0x6f0
     __sys_connect+0x7f/0xb0
     __x64_sys_connect+0x14/0x20
     do_syscall_64+0x47/0xc30
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Fixes: c53795d48ee8 ("net: add rx_sk to trace_kfree_skb")
    Reported-by: Yan Zhai <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Tested-by: Yan Zhai <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: allow small head cache usage with large MAX_SKB_FRAGS values [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Tue Feb 18 19:29:39 2025 +0100

    net: allow small head cache usage with large MAX_SKB_FRAGS values
    
    [ Upstream commit 14ad6ed30a10afbe91b0749d6378285f4225d482 ]
    
    Sabrina reported the following splat:
    
        WARNING: CPU: 0 PID: 1 at net/core/dev.c:6935 netif_napi_add_weight_locked+0x8f2/0xba0
        Modules linked in:
        CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.14.0-rc1-net-00092-g011b03359038 #996
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
        RIP: 0010:netif_napi_add_weight_locked+0x8f2/0xba0
        Code: e8 c3 e6 6a fe 48 83 c4 28 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc c7 44 24 10 ff ff ff ff e9 8f fb ff ff e8 9e e6 6a fe <0f> 0b e9 d3 fe ff ff e8 92 e6 6a fe 48 8b 04 24 be ff ff ff ff 48
        RSP: 0000:ffffc9000001fc60 EFLAGS: 00010293
        RAX: 0000000000000000 RBX: ffff88806ce48128 RCX: 1ffff11001664b9e
        RDX: ffff888008f00040 RSI: ffffffff8317ca42 RDI: ffff88800b325cb6
        RBP: ffff88800b325c40 R08: 0000000000000001 R09: ffffed100167502c
        R10: ffff88800b3a8163 R11: 0000000000000000 R12: ffff88800ac1c168
        R13: ffff88800ac1c168 R14: ffff88800ac1c168 R15: 0000000000000007
        FS:  0000000000000000(0000) GS:ffff88806ce00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: ffff888008201000 CR3: 0000000004c94001 CR4: 0000000000370ef0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        Call Trace:
        <TASK>
        gro_cells_init+0x1ba/0x270
        xfrm_input_init+0x4b/0x2a0
        xfrm_init+0x38/0x50
        ip_rt_init+0x2d7/0x350
        ip_init+0xf/0x20
        inet_init+0x406/0x590
        do_one_initcall+0x9d/0x2e0
        do_initcalls+0x23b/0x280
        kernel_init_freeable+0x445/0x490
        kernel_init+0x20/0x1d0
        ret_from_fork+0x46/0x80
        ret_from_fork_asm+0x1a/0x30
        </TASK>
        irq event stamp: 584330
        hardirqs last  enabled at (584338): [<ffffffff8168bf87>] __up_console_sem+0x77/0xb0
        hardirqs last disabled at (584345): [<ffffffff8168bf6c>] __up_console_sem+0x5c/0xb0
        softirqs last  enabled at (583242): [<ffffffff833ee96d>] netlink_insert+0x14d/0x470
        softirqs last disabled at (583754): [<ffffffff8317c8cd>] netif_napi_add_weight_locked+0x77d/0xba0
    
    on kernel built with MAX_SKB_FRAGS=45, where SKB_WITH_OVERHEAD(1024)
    is smaller than GRO_MAX_HEAD.
    
    Such built additionally contains the revert of the single page frag cache
    so that napi_get_frags() ends up using the page frag allocator, triggering
    the splat.
    
    Note that the underlying issue is independent from the mentioned
    revert; address it ensuring that the small head cache will fit either TCP
    and GRO allocation and updating napi_alloc_skb() and __netdev_alloc_skb()
    to select kmalloc() usage for any allocation fitting such cache.
    
    Reported-by: Sabrina Dubroca <[email protected]>
    Suggested-by: Eric Dumazet <[email protected]>
    Fixes: 3948b05950fd ("net: introduce a config option to tweak MAX_SKB_FRAGS")
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: axienet: Set mac_managed_pm [+ + +]
Author: Nick Hu <[email protected]>
Date:   Mon Feb 17 13:58:42 2025 +0800

    net: axienet: Set mac_managed_pm
    
    [ Upstream commit a370295367b55662a32a4be92565fe72a5aa79bb ]
    
    The external PHY will undergo a soft reset twice during the resume process
    when it wake up from suspend. The first reset occurs when the axienet
    driver calls phylink_of_phy_connect(), and the second occurs when
    mdio_bus_phy_resume() invokes phy_init_hw(). The second soft reset of the
    external PHY does not reinitialize the internal PHY, which causes issues
    with the internal PHY, resulting in the PHY link being down. To prevent
    this, setting the mac_managed_pm flag skips the mdio_bus_phy_resume()
    function.
    
    Fixes: a129b41fe0a8 ("Revert "net: phy: dp83867: perform soft reset and retain established link"")
    Signed-off-by: Nick Hu <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: pse-pd: Avoid setting max_uA in regulator constraints [+ + +]
Author: Kory Maincent <[email protected]>
Date:   Fri Jan 10 10:40:21 2025 +0100

    net: pse-pd: Avoid setting max_uA in regulator constraints
    
    [ Upstream commit 675d0e3cacc3ae7c29294a5f6a820187f862ad8b ]
    
    Setting the max_uA constraint in the regulator API imposes a current
    limit during the regulator registration process. This behavior conflicts
    with preserving the maximum PI power budget configuration across reboots.
    
    Instead, compare the desired current limit to MAX_PI_CURRENT in the
    pse_pi_set_current_limit() function to ensure proper handling of the
    power budget.
    
    Acked-by: Oleksij Rempel <[email protected]>
    Signed-off-by: Kory Maincent <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: f6093c5ec74d ("net: pse-pd: pd692x0: Fix power limit retrieval")
    Signed-off-by: Sasha Levin <[email protected]>

net: pse-pd: Fix deadlock in current limit functions [+ + +]
Author: Kory Maincent <[email protected]>
Date:   Wed Feb 12 16:17:51 2025 +0100

    net: pse-pd: Fix deadlock in current limit functions
    
    commit 488fb6effe03e20f38d34da7425de77bbd3e2665 upstream.
    
    Fix a deadlock in pse_pi_get_current_limit and pse_pi_set_current_limit
    caused by consecutive mutex_lock calls. One in the function itself and
    another in pse_pi_get_voltage.
    
    Resolve the issue by using the unlocked version of pse_pi_get_voltage
    instead.
    
    Fixes: e0a5e2bba38a ("net: pse-pd: Use power limit at driver side instead of current limit")
    Signed-off-by: Kory Maincent <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: pse-pd: pd692x0: Fix power limit retrieval [+ + +]
Author: Kory Maincent <[email protected]>
Date:   Mon Feb 17 14:48:11 2025 +0100

    net: pse-pd: pd692x0: Fix power limit retrieval
    
    [ Upstream commit f6093c5ec74d5cc495f89bd359253d9c738d04d9 ]
    
    Fix incorrect data offset read in the pd692x0_pi_get_pw_limit callback.
    The issue was previously unnoticed as it was only used by the regulator
    API and not thoroughly tested, since the PSE is mainly controlled via
    ethtool.
    
    The function became actively used by ethtool after commit 3e9dbfec4998
    ("net: pse-pd: Split ethtool_get_status into multiple callbacks"),
    which led to the discovery of this issue.
    
    Fix it by using the correct data offset.
    
    Fixes: a87e699c9d33 ("net: pse-pd: pd692x0: Enhance with new current limit and voltage read callbacks")
    Signed-off-by: Kory Maincent <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: pse-pd: Use power limit at driver side instead of current limit [+ + +]
Author: Kory Maincent <[email protected]>
Date:   Fri Jan 10 10:40:26 2025 +0100

    net: pse-pd: Use power limit at driver side instead of current limit
    
    [ Upstream commit e0a5e2bba38aa61a900934b45d6e846e0a6d7524 ]
    
    The regulator framework uses current limits, but the PSE standard and
    known PSE controllers rely on power limits. Instead of converting
    current to power within each driver, perform the conversion in the PSE
    core. This avoids redundancy in driver implementation and aligns better
    with the standard, simplifying driver development.
    
    Remove at the same time the _pse_ethtool_get_status() function which is
    not needed anymore.
    
    Acked-by: Oleksij Rempel <[email protected]>
    Signed-off-by: Kory Maincent <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: f6093c5ec74d ("net: pse-pd: pd692x0: Fix power limit retrieval")
    Signed-off-by: Sasha Levin <[email protected]>

 
nfp: bpf: Add check for nfp_app_ctrl_msg_alloc() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Feb 18 11:04:09 2025 +0800

    nfp: bpf: Add check for nfp_app_ctrl_msg_alloc()
    
    commit 878e7b11736e062514e58f3b445ff343e6705537 upstream.
    
    Add check for the return value of nfp_app_ctrl_msg_alloc() in
    nfp_bpf_cmsg_alloc() to prevent null pointer dereference.
    
    Fixes: ff3d43f7568c ("nfp: bpf: implement helpers for FW map ops")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nouveau/svm: fix missing folio unlock + put after make_device_exclusive_range() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Fri Jan 24 19:15:23 2025 +0100

    nouveau/svm: fix missing folio unlock + put after make_device_exclusive_range()
    
    [ Upstream commit b3fefbb30a1691533cb905006b69b2a474660744 ]
    
    In case we have to retry the loop, we are missing to unlock+put the
    folio. In that case, we will keep failing make_device_exclusive_range()
    because we cannot grab the folio lock, and even return from the function
    with the folio locked and referenced, effectively never succeeding the
    make_device_exclusive_range().
    
    While at it, convert the other unlock+put to use a folio as well.
    
    This was found by code inspection.
    
    Fixes: 8f187163eb89 ("nouveau/svm: implement atomic SVM access")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Alistair Popple <[email protected]>
    Tested-by: Alistair Popple <[email protected]>
    Signed-off-by: Danilo Krummrich <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme-tcp: fix connect failure on receiving partial ICResp PDU [+ + +]
Author: Caleb Sander Mateos <[email protected]>
Date:   Fri Jan 24 11:43:10 2025 -0700

    nvme-tcp: fix connect failure on receiving partial ICResp PDU
    
    [ Upstream commit 578539e0969028f711c34d9a4565931edfe1d730 ]
    
    nvme_tcp_init_connection() attempts to receive an ICResp PDU but only
    checks that the return value from recvmsg() is non-negative. If the
    sender closes the TCP connection or sends fewer than 128 bytes, this
    check will pass even though the full PDU wasn't received.
    
    Ensure the full ICResp PDU is received by checking that recvmsg()
    returns the expected 128 bytes.
    
    Additionally set the MSG_WAITALL flag for recvmsg(), as a sender could
    split the ICResp over multiple TCP frames. Without MSG_WAITALL,
    recvmsg() could return prematurely with only part of the PDU.
    
    Fixes: 3f2304f8c6d6 ("nvme-tcp: add NVMe over TCP host driver")
    Signed-off-by: Caleb Sander Mateos <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme/ioctl: add missing space in err message [+ + +]
Author: Caleb Sander Mateos <[email protected]>
Date:   Thu Feb 13 10:05:14 2025 -0700

    nvme/ioctl: add missing space in err message
    
    [ Upstream commit 487a3ea7b1b8ba2ca7d2c2bb3c3594dc360d6261 ]
    
    nvme_validate_passthru_nsid() logs an err message whose format string is
    split over 2 lines. There is a missing space between the two pieces,
    resulting in log lines like "... does not match nsid (1)of namespace".
    Add the missing space between ")" and "of". Also combine the format
    string pieces onto a single line to make the err message easier to grep.
    
    Fixes: e7d4b5493a2d ("nvme: factor out a nvme_validate_passthru_nsid helper")
    Signed-off-by: Caleb Sander Mateos <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: tcp: Fix compilation warning with W=1 [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Thu Feb 13 15:52:31 2025 +0900

    nvme: tcp: Fix compilation warning with W=1
    
    [ Upstream commit cd513e0434c3e736c549bc99bf7982658b25114d ]
    
    When compiling with W=1, a warning result for the function
    nvme_tcp_set_queue_io_cpu():
    
    host/tcp.c:1578: warning: Function parameter or struct member 'queue'
    not described in 'nvme_tcp_set_queue_io_cpu'
    host/tcp.c:1578: warning: expecting prototype for Track the number of
    queues assigned to each cpu using a global per(). Prototype was for
    nvme_tcp_set_queue_io_cpu() instead
    
    Avoid this warning by using the regular comment format for the function
    nvme_tcp_set_queue_io_cpu() instead of the kdoc comment format.
    
    Fixes: 32193789878c ("nvme-tcp: Fix I/O queue cpu spreading for multiple controllers")
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet: Fix crash when a namespace is disabled [+ + +]
Author: Hannes Reinecke <[email protected]>
Date:   Fri Feb 7 13:41:34 2025 +0100

    nvmet: Fix crash when a namespace is disabled
    
    [ Upstream commit 4082326807072b71496501b6a0c55ffe8d5092a5 ]
    
    The namespace percpu counter protects pending I/O, and we can
    only safely diable the namespace once the counter drop to zero.
    Otherwise we end up with a crash when running blktests/nvme/058
    (eg for loop transport):
    
    [ 2352.930426] [  T53909] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000005: 0000 [#1] PREEMPT SMP KASAN PTI
    [ 2352.930431] [  T53909] KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
    [ 2352.930434] [  T53909] CPU: 3 UID: 0 PID: 53909 Comm: kworker/u16:5 Tainted: G        W          6.13.0-rc6 #232
    [ 2352.930438] [  T53909] Tainted: [W]=WARN
    [ 2352.930440] [  T53909] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
    [ 2352.930443] [  T53909] Workqueue: nvmet-wq nvme_loop_execute_work [nvme_loop]
    [ 2352.930449] [  T53909] RIP: 0010:blkcg_set_ioprio+0x44/0x180
    
    as the queue is already torn down when calling submit_bio();
    
    So we need to init the percpu counter in nvmet_ns_enable(), and
    wait for it to drop to zero in nvmet_ns_disable() to avoid having
    I/O pending after the namespace has been disabled.
    
    Fixes: 74d16965d7ac ("nvmet-loop: avoid using mutex in IO hotpath")
    
    Signed-off-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Nilay Shroff <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Tested-by: Shin'ichiro Kawasaki <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PCI: Export pci_intx_unmanaged() and pcim_intx() [+ + +]
Author: Philipp Stanner <[email protected]>
Date:   Mon Dec 9 14:06:23 2024 +0100

    PCI: Export pci_intx_unmanaged() and pcim_intx()
    
    [ Upstream commit f546e8033d8f3e45d49622f04ca2fde650b80f6d ]
    
    pci_intx() is a hybrid function which sometimes performs devres operations,
    depending on whether pcim_enable_device() has been used to enable the
    pci_dev. This sometimes-managed nature of the function is problematic.
    Notably, it causes the function to allocate under some circumstances which
    makes it unusable from interrupt context.
    
    Export pcim_intx() (which is always managed) and rename __pcim_intx()
    (which is never managed) to pci_intx_unmanaged() and export it as well.
    
    Then all callers of pci_intx() can be ported to the version they need,
    depending whether they use pci_enable_device() or pcim_enable_device().
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Philipp Stanner <[email protected]>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Stable-dep-of: d555ed45a5a1 ("PCI: Restore original INTX_DISABLE bit by pcim_intx()")
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Remove devres from pci_intx() [+ + +]
Author: Philipp Stanner <[email protected]>
Date:   Mon Dec 9 14:06:33 2024 +0100

    PCI: Remove devres from pci_intx()
    
    [ Upstream commit dfa2f4d5f9e5d757700cefa8ee480099889f1c69 ]
    
    pci_intx() is a hybrid function which can sometimes be managed through
    devres. This hybrid nature is undesirable.
    
    Since all users of pci_intx() have by now been ported either to
    always-managed pcim_intx() or never-managed pci_intx_unmanaged(), the
    devres functionality can be removed from pci_intx().
    
    Consequently, pci_intx_unmanaged() is now redundant, because pci_intx()
    itself is now unmanaged.
    
    Remove the devres functionality from pci_intx(). Have all users of
    pci_intx_unmanaged() call pci_intx(). Remove pci_intx_unmanaged().
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Philipp Stanner <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Acked-by: Paolo Abeni <[email protected]>
    Stable-dep-of: d555ed45a5a1 ("PCI: Restore original INTX_DISABLE bit by pcim_intx()")
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Restore original INTX_DISABLE bit by pcim_intx() [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Oct 31 14:42:56 2024 +0100

    PCI: Restore original INTX_DISABLE bit by pcim_intx()
    
    [ Upstream commit d555ed45a5a10a813528c7685f432369d536ae3d ]
    
    pcim_intx() tries to restore the INTx bit at removal via devres, but there
    is a chance that it restores a wrong value.
    
    Because the value to be restored is blindly assumed to be the negative of
    the enable argument, when a driver calls pcim_intx() unnecessarily for the
    already enabled state, it'll restore to the disabled state in turn.  That
    is, the function assumes the case like:
    
      // INTx == 1
      pcim_intx(pdev, 0); // old INTx value assumed to be 1 -> correct
    
    but it might be like the following, too:
    
      // INTx == 0
      pcim_intx(pdev, 0); // old INTx value assumed to be 1 -> wrong
    
    Also, when a driver calls pcim_intx() multiple times with different enable
    argument values, the last one will win no matter what value it is.  This
    can lead to inconsistency, e.g.
    
      // INTx == 1
      pcim_intx(pdev, 0); // OK
      ...
      pcim_intx(pdev, 1); // now old INTx wrongly assumed to be 0
    
    This patch addresses those inconsistencies by saving the original INTx
    state at the first pcim_intx() call.  For that, get_or_create_intx_devres()
    is folded into pcim_intx() caller side; it allows us to simply check the
    already allocated devres and record the original INTx along with the
    devres_alloc() call.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: 25216afc9db5 ("PCI: Add managed pcim_intx()")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Philipp Stanner <[email protected]>
    Cc: [email protected]      # v6.11+
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/x86/intel: Fix event constraints for LNC [+ + +]
Author: Kan Liang <[email protected]>
Date:   Wed Feb 19 06:10:05 2025 -0800

    perf/x86/intel: Fix event constraints for LNC
    
    commit 782cffeec9ad96daa64ffb2d527b2a052fb02552 upstream.
    
    According to the latest event list, update the event constraint tables
    for Lion Cove core.
    
    The general rule (the event codes < 0x90 are restricted to counters
    0-3.) has been removed. There is no restriction for most of the
    performance monitoring events.
    
    Fixes: a932aa0e868f ("perf/x86: Add Lunar Lake and Arrow Lake support")
    Reported-by: Amiri Khalil <[email protected]>
    Signed-off-by: Kan Liang <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: [email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform: cznic: CZNIC_PLATFORMS should depend on ARCH_MVEBU [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Fri Feb 14 09:31:29 2025 +0100

    platform: cznic: CZNIC_PLATFORMS should depend on ARCH_MVEBU
    
    [ Upstream commit dd0f05b98925111f4530d7dab774398cdb32e9e3 ]
    
    CZ.NIC's Turris devices are based on Marvell EBU SoCs.  Hence add a
    dependency on ARCH_MVEBU, to prevent asking the user about these drivers
    when configuring a kernel that cannot run on an affected CZ.NIC Turris
    system.
    
    Fixes: 992f1a3d4e88498d ("platform: cznic: Add preliminary support for Turris Omnia MCU")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
power: supply: axp20x_battery: Fix fault handling for AXP717 [+ + +]
Author: Chris Morgan <[email protected]>
Date:   Fri Jan 31 17:14:51 2025 -0600

    power: supply: axp20x_battery: Fix fault handling for AXP717
    
    [ Upstream commit 98380110bd48fbfd6a798ee11fffff893d36062c ]
    
    Correct the fault handling for the AXP717 by changing the i2c write
    from regmap_update_bits() to regmap_write_bits(). The update bits
    function does not work properly on a RW1C register where we must
    write a 1 back to an existing register to clear it.
    
    Additionally, as part of this testing I confirmed the behavior of
    errors reappearing, so remove comment about assumptions.
    
    Fixes: 6625767049c2 ("power: supply: axp20x_battery: add support for AXP717")
    Signed-off-by: Chris Morgan <[email protected]>
    Reviewed-by: Chen-Yu Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

power: supply: da9150-fg: fix potential overflow [+ + +]
Author: Andrey Vatoropin <[email protected]>
Date:   Thu Jan 30 09:00:34 2025 +0000

    power: supply: da9150-fg: fix potential overflow
    
    [ Upstream commit 3fb3cb4350befc4f901c54e0cb4a2a47b1302e08 ]
    
    Size of variable sd_gain equals four bytes - DA9150_QIF_SD_GAIN_SIZE.
    Size of variable shunt_val equals two bytes - DA9150_QIF_SHUNT_VAL_SIZE.
    
    The expression sd_gain * shunt_val is currently being evaluated using
    32-bit arithmetic. So during the multiplication an overflow may occur.
    
    As the value of type 'u64' is used as storage for the eventual result, put
    ULL variable at the first position of each expression in order to give the
    compiler complete information about the proper arithmetic to use. According
    to C99 the guaranteed width for a variable of type 'unsigned long long' >=
    64 bits.
    
    Remove the explicit cast to u64 as it is meaningless.
    
    Just for the sake of consistency, perform the similar trick with another
    expression concerning 'iavg'.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a419b4fd9138 ("power: Add support for DA9150 Fuel-Gauge")
    Signed-off-by: Andrey Vatoropin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/64s: Rewrite __real_pte() and __rpte_to_hidx() as static inline [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Sun Jan 12 19:24:46 2025 +0100

    powerpc/64s: Rewrite __real_pte() and __rpte_to_hidx() as static inline
    
    [ Upstream commit 61bcc752d1b81fde3cae454ff20c1d3c359df500 ]
    
    Rewrite __real_pte() and __rpte_to_hidx() as static inline in order to
    avoid following warnings/errors when building with 4k page size:
    
              CC      arch/powerpc/mm/book3s64/hash_tlb.o
            arch/powerpc/mm/book3s64/hash_tlb.c: In function 'hpte_need_flush':
            arch/powerpc/mm/book3s64/hash_tlb.c:49:16: error: variable 'offset' set but not used [-Werror=unused-but-set-variable]
               49 |         int i, offset;
                  |                ^~~~~~
    
              CC      arch/powerpc/mm/book3s64/hash_native.o
            arch/powerpc/mm/book3s64/hash_native.c: In function 'native_flush_hash_range':
            arch/powerpc/mm/book3s64/hash_native.c:782:29: error: variable 'index' set but not used [-Werror=unused-but-set-variable]
              782 |         unsigned long hash, index, hidx, shift, slot;
                  |                             ^~~~~
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: ff31e105464d ("powerpc/mm/hash64: Store the slot information at the right offset for hugetlb")
    Signed-off-by: Christophe Leroy <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/e0d340a5b7bd478ecbf245d826e6ab2778b74e06.1736706263.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/code-patching: Disable KASAN report during patching via temporary mm [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Mon Feb 3 11:14:57 2025 +0100

    powerpc/code-patching: Disable KASAN report during patching via temporary mm
    
    [ Upstream commit dc9c5166c3cb044f8a001e397195242fd6796eee ]
    
    Erhard reports the following KASAN hit on Talos II (power9) with kernel 6.13:
    
    [   12.028126] ==================================================================
    [   12.028198] BUG: KASAN: user-memory-access in copy_to_kernel_nofault+0x8c/0x1a0
    [   12.028260] Write of size 8 at addr 0000187e458f2000 by task systemd/1
    
    [   12.028346] CPU: 87 UID: 0 PID: 1 Comm: systemd Tainted: G                T  6.13.0-P9-dirty #3
    [   12.028408] Tainted: [T]=RANDSTRUCT
    [   12.028446] Hardware name: T2P9D01 REV 1.01 POWER9 0x4e1202 opal:skiboot-bc106a0 PowerNV
    [   12.028500] Call Trace:
    [   12.028536] [c000000008dbf3b0] [c000000001656a48] dump_stack_lvl+0xbc/0x110 (unreliable)
    [   12.028609] [c000000008dbf3f0] [c0000000006e2fc8] print_report+0x6b0/0x708
    [   12.028666] [c000000008dbf4e0] [c0000000006e2454] kasan_report+0x164/0x300
    [   12.028725] [c000000008dbf600] [c0000000006e54d4] kasan_check_range+0x314/0x370
    [   12.028784] [c000000008dbf640] [c0000000006e6310] __kasan_check_write+0x20/0x40
    [   12.028842] [c000000008dbf660] [c000000000578e8c] copy_to_kernel_nofault+0x8c/0x1a0
    [   12.028902] [c000000008dbf6a0] [c0000000000acfe4] __patch_instructions+0x194/0x210
    [   12.028965] [c000000008dbf6e0] [c0000000000ade80] patch_instructions+0x150/0x590
    [   12.029026] [c000000008dbf7c0] [c0000000001159bc] bpf_arch_text_copy+0x6c/0xe0
    [   12.029085] [c000000008dbf800] [c000000000424250] bpf_jit_binary_pack_finalize+0x40/0xc0
    [   12.029147] [c000000008dbf830] [c000000000115dec] bpf_int_jit_compile+0x3bc/0x930
    [   12.029206] [c000000008dbf990] [c000000000423720] bpf_prog_select_runtime+0x1f0/0x280
    [   12.029266] [c000000008dbfa00] [c000000000434b18] bpf_prog_load+0xbb8/0x1370
    [   12.029324] [c000000008dbfb70] [c000000000436ebc] __sys_bpf+0x5ac/0x2e00
    [   12.029379] [c000000008dbfd00] [c00000000043a228] sys_bpf+0x28/0x40
    [   12.029435] [c000000008dbfd20] [c000000000038eb4] system_call_exception+0x334/0x610
    [   12.029497] [c000000008dbfe50] [c00000000000c270] system_call_vectored_common+0xf0/0x280
    [   12.029561] --- interrupt: 3000 at 0x3fff82f5cfa8
    [   12.029608] NIP:  00003fff82f5cfa8 LR: 00003fff82f5cfa8 CTR: 0000000000000000
    [   12.029660] REGS: c000000008dbfe80 TRAP: 3000   Tainted: G                T   (6.13.0-P9-dirty)
    [   12.029735] MSR:  900000000280f032 <SF,HV,VEC,VSX,EE,PR,FP,ME,IR,DR,RI>  CR: 42004848  XER: 00000000
    [   12.029855] IRQMASK: 0
                   GPR00: 0000000000000169 00003fffdcf789a0 00003fff83067100 0000000000000005
                   GPR04: 00003fffdcf78a98 0000000000000090 0000000000000000 0000000000000008
                   GPR08: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
                   GPR12: 0000000000000000 00003fff836ff7e0 c000000000010678 0000000000000000
                   GPR16: 0000000000000000 0000000000000000 00003fffdcf78f28 00003fffdcf78f90
                   GPR20: 0000000000000000 0000000000000000 0000000000000000 00003fffdcf78f80
                   GPR24: 00003fffdcf78f70 00003fffdcf78d10 00003fff835c7239 00003fffdcf78bd8
                   GPR28: 00003fffdcf78a98 0000000000000000 0000000000000000 000000011f547580
    [   12.030316] NIP [00003fff82f5cfa8] 0x3fff82f5cfa8
    [   12.030361] LR [00003fff82f5cfa8] 0x3fff82f5cfa8
    [   12.030405] --- interrupt: 3000
    [   12.030444] ==================================================================
    
    Commit c28c15b6d28a ("powerpc/code-patching: Use temporary mm for
    Radix MMU") is inspired from x86 but unlike x86 is doesn't disable
    KASAN reports during patching. This wasn't a problem at the begining
    because __patch_mem() is not instrumented.
    
    Commit 465cabc97b42 ("powerpc/code-patching: introduce
    patch_instructions()") use copy_to_kernel_nofault() to copy several
    instructions at once. But when using temporary mm the destination is
    not regular kernel memory but a kind of kernel-like memory located
    in user address space. Because it is not in kernel address space it is
    not covered by KASAN shadow memory. Since commit e4137f08816b ("mm,
    kasan, kmsan: instrument copy_from/to_kernel_nofault") KASAN reports
    bad accesses from copy_to_kernel_nofault(). Here a bad access to user
    memory is reported because KASAN detects the lack of shadow memory and
    the address is below TASK_SIZE.
    
    Do like x86 in commit b3fd8e83ada0 ("x86/alternatives: Use temporary
    mm for text poking") and disable KASAN reports during patching when
    using temporary mm.
    
    Reported-by: Erhard Furtner <[email protected]>
    Close: https://lore.kernel.org/all/20250201151435.48400261@yea/
    Fixes: 465cabc97b42 ("powerpc/code-patching: introduce patch_instructions()")
    Signed-off-by: Christophe Leroy <[email protected]>
    Acked-by: Michael Ellerman <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/1c05b2a1b02ad75b981cfc45927e0b4a90441046.1738577687.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

powerpc/code-patching: Fix KASAN hit by not flagging text patching area as VM_ALLOC [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Wed Feb 12 07:46:28 2025 +0100

    powerpc/code-patching: Fix KASAN hit by not flagging text patching area as VM_ALLOC
    
    [ Upstream commit d262a192d38e527faa5984629aabda2e0d1c4f54 ]
    
    Erhard reported the following KASAN hit while booting his PowerMac G4
    with a KASAN-enabled kernel 6.13-rc6:
    
      BUG: KASAN: vmalloc-out-of-bounds in copy_to_kernel_nofault+0xd8/0x1c8
      Write of size 8 at addr f1000000 by task chronyd/1293
    
      CPU: 0 UID: 123 PID: 1293 Comm: chronyd Tainted: G        W          6.13.0-rc6-PMacG4 #2
      Tainted: [W]=WARN
      Hardware name: PowerMac3,6 7455 0x80010303 PowerMac
      Call Trace:
      [c2437590] [c1631a84] dump_stack_lvl+0x70/0x8c (unreliable)
      [c24375b0] [c0504998] print_report+0xdc/0x504
      [c2437610] [c050475c] kasan_report+0xf8/0x108
      [c2437690] [c0505a3c] kasan_check_range+0x24/0x18c
      [c24376a0] [c03fb5e4] copy_to_kernel_nofault+0xd8/0x1c8
      [c24376c0] [c004c014] patch_instructions+0x15c/0x16c
      [c2437710] [c00731a8] bpf_arch_text_copy+0x60/0x7c
      [c2437730] [c0281168] bpf_jit_binary_pack_finalize+0x50/0xac
      [c2437750] [c0073cf4] bpf_int_jit_compile+0xb30/0xdec
      [c2437880] [c0280394] bpf_prog_select_runtime+0x15c/0x478
      [c24378d0] [c1263428] bpf_prepare_filter+0xbf8/0xc14
      [c2437990] [c12677ec] bpf_prog_create_from_user+0x258/0x2b4
      [c24379d0] [c027111c] do_seccomp+0x3dc/0x1890
      [c2437ac0] [c001d8e0] system_call_exception+0x2dc/0x420
      [c2437f30] [c00281ac] ret_from_syscall+0x0/0x2c
      --- interrupt: c00 at 0x5a1274
      NIP:  005a1274 LR: 006a3b3c CTR: 005296c8
      REGS: c2437f40 TRAP: 0c00   Tainted: G        W           (6.13.0-rc6-PMacG4)
      MSR:  0200f932 <VEC,EE,PR,FP,ME,IR,DR,RI>  CR: 24004422  XER: 00000000
    
      GPR00: 00000166 af8f3fa0 a7ee3540 00000001 00000000 013b6500 005a5858 0200f932
      GPR08: 00000000 00001fe9 013d5fc8 005296c8 2822244c 00b2fcd8 00000000 af8f4b57
      GPR16: 00000000 00000001 00000000 00000000 00000000 00000001 00000000 00000002
      GPR24: 00afdbb0 00000000 00000000 00000000 006e0004 013ce060 006e7c1c 00000001
      NIP [005a1274] 0x5a1274
      LR [006a3b3c] 0x6a3b3c
      --- interrupt: c00
    
      The buggy address belongs to the virtual mapping at
       [f1000000, f1002000) created by:
       text_area_cpu_up+0x20/0x190
    
      The buggy address belongs to the physical page:
      page: refcount:1 mapcount:0 mapping:00000000 index:0x0 pfn:0x76e30
      flags: 0x80000000(zone=2)
      raw: 80000000 00000000 00000122 00000000 00000000 00000000 ffffffff 00000001
      raw: 00000000
      page dumped because: kasan: bad access detected
    
      Memory state around the buggy address:
       f0ffff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       f0ffff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      >f1000000: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
                 ^
       f1000080: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
       f1000100: f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
      ==================================================================
    
    f8 corresponds to KASAN_VMALLOC_INVALID which means the area is not
    initialised hence not supposed to be used yet.
    
    Powerpc text patching infrastructure allocates a virtual memory area
    using get_vm_area() and flags it as VM_ALLOC. But that flag is meant
    to be used for vmalloc() and vmalloc() allocated memory is not
    supposed to be used before a call to __vmalloc_node_range() which is
    never called for that area.
    
    That went undetected until commit e4137f08816b ("mm, kasan, kmsan:
    instrument copy_from/to_kernel_nofault")
    
    The area allocated by text_area_cpu_up() is not vmalloc memory, it is
    mapped directly on demand when needed by map_kernel_page(). There is
    no VM flag corresponding to such usage, so just pass no flag. That way
    the area will be unpoisonned and usable immediately.
    
    Reported-by: Erhard Furtner <[email protected]>
    Closes: https://lore.kernel.org/all/20250112135832.57c92322@yea/
    Fixes: 37bc3e5fd764 ("powerpc/lib/code-patching: Use alternate map for patch_instruction()")
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/06621423da339b374f48c0886e3a5db18e896be8.1739342693.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

 
rust: cleanup unnecessary casts [+ + +]
Author: Gary Guo <[email protected]>
Date:   Fri Sep 13 22:29:25 2024 +0100

    rust: cleanup unnecessary casts
    
    commit 9b98be76855f14bd5180b59c1ac646b5add98f33 upstream.
    
    With `long` mapped to `isize`, `size_t`/`__kernel_size_t` mapped to
    `usize` and `char` mapped to `u8`, many of the existing casts are no
    longer necessary.
    
    Signed-off-by: Gary Guo <[email protected]>
    Reviewed-by: Alice Ryhl <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ Moved `uaccess` changes to the previous commit, since they were
      irrefutable patterns that Rust >= 1.82.0 warns about. Removed a
      couple casts that now use `c""` literals. Rebased on top of
      `rust-next`. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: finish using custom FFI integer types [+ + +]
Author: Miguel Ojeda <[email protected]>
Date:   Sun Dec 15 22:43:53 2024 +0100

    rust: finish using custom FFI integer types
    
    commit 27c7518e7f1ccaaa43eb5f25dc362779d2dc2ccb upstream.
    
    In the last kernel cycle we migrated most of the `core::ffi` cases in
    commit d072acda4862 ("rust: use custom FFI integer types"):
    
        Currently FFI integer types are defined in libcore. This commit
        creates the `ffi` crate and asks bindgen to use that crate for FFI
        integer types instead of `core::ffi`.
    
        This commit is preparatory and no type changes are made in this
        commit yet.
    
    Finish now the few remaining/new cases so that we perform the actual
    remapping in the next commit as planned.
    
    Acked-by: Jocelyn Falempe <[email protected]> # drm
    Link: https://lore.kernel.org/rust-for-linux/CANiq72m_rg42SvZK=bF2f0yEoBLVA33UBhiAsv8THhVu=G2dPA@mail.gmail.com/
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: map `long` to `isize` and `char` to `u8` [+ + +]
Author: Gary Guo <[email protected]>
Date:   Fri Sep 13 22:29:24 2024 +0100

    rust: map `long` to `isize` and `char` to `u8`
    
    commit 1bae8729e50a900f41e9a1c17ae81113e4cf62b8 upstream.
    
    The following FFI types are replaced compared to `core::ffi`:
    
    1. `char` type is now always mapped to `u8`, since kernel uses
       `-funsigned-char` on the C code. `core::ffi` maps it to platform
       default ABI, which can be either signed or unsigned.
    
    2. `long` is now always mapped to `isize`. It's very common in the
       kernel to use `long` to represent a pointer-sized integer, and in
       fact `intptr_t` is a typedef of `long` in the kernel. Enforce this
       mapping rather than mapping to `i32/i64` depending on platform can
       save us a lot of unnecessary casts.
    
    Signed-off-by: Gary Guo <[email protected]>
    Reviewed-by: Alice Ryhl <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ Moved `uaccess` changes from the next commit, since they were
      irrefutable patterns that Rust >= 1.82.0 warns about. Reworded
      slightly and reformatted a few documentation comments. Rebased on
      top of `rust-next`. Added the removal of two casts to avoid Clippy
      warnings. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/boot: Fix ESSA detection [+ + +]
Author: Heiko Carstens <[email protected]>
Date:   Tue Feb 18 12:11:34 2025 +0100

    s390/boot: Fix ESSA detection
    
    commit c3a589fd9fcbf295a7402a4b188dc9277d505f4f upstream.
    
    The cmma_test_essa() inline assembly uses tmp as input and output, however
    tmp is specified as output only, which allows the compiler to optimize the
    initialization of tmp away.
    
    Therefore the ESSA detection may or may not work depending on previous
    contents of the register that the compiler selected for tmp.
    
    Fix this by using the correct constraint modifier.
    
    Fixes: 468a3bc2b7b9 ("s390/cmma: move parsing of cmma kernel parameter to early boot code")
    Cc: [email protected]
    Signed-off-by: Heiko Carstens <[email protected]>
    Reviewed-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/ism: add release function for struct device [+ + +]
Author: Julian Ruess <[email protected]>
Date:   Fri Feb 14 13:01:37 2025 +0100

    s390/ism: add release function for struct device
    
    [ Upstream commit 915e34d5ad35a6a9e56113f852ade4a730fb88f0 ]
    
    According to device_release() in /drivers/base/core.c,
    a device without a release function is a broken device
    and must be fixed.
    
    The current code directly frees the device after calling device_add()
    without waiting for other kernel parts to release their references.
    Thus, a reference could still be held to a struct device,
    e.g., by sysfs, leading to potential use-after-free
    issues if a proper release function is not set.
    
    Fixes: 8c81ba20349d ("net/smc: De-tangle ism and smc device initialization")
    Reviewed-by: Alexandra Winter <[email protected]>
    Reviewed-by: Wenjia Zhang <[email protected]>
    Signed-off-by: Julian Ruess <[email protected]>
    Signed-off-by: Alexandra Winter <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched: Compact RSEQ concurrency IDs with reduced threads and affinity [+ + +]
Author: Mathieu Desnoyers <[email protected]>
Date:   Mon Feb 10 16:32:50 2025 +0100

    sched: Compact RSEQ concurrency IDs with reduced threads and affinity
    
    [ Upstream commit 02d954c0fdf91845169cdacc7405b120f90afe01 ]
    
    When a process reduces its number of threads or clears bits in its CPU
    affinity mask, the mm_cid allocation should eventually converge towards
    smaller values.
    
    However, the change introduced by:
    
    commit 7e019dcc470f ("sched: Improve cache locality of RSEQ concurrency
    IDs for intermittent workloads")
    
    adds a per-mm/CPU recent_cid which is never unset unless a thread
    migrates.
    
    This is a tradeoff between:
    
    A) Preserving cache locality after a transition from many threads to few
       threads, or after reducing the hamming weight of the allowed CPU mask.
    
    B) Making the mm_cid upper bounds wrt nr threads and allowed CPU mask
       easy to document and understand.
    
    C) Allowing applications to eventually react to mm_cid compaction after
       reduction of the nr threads or allowed CPU mask, making the tracking
       of mm_cid compaction easier by shrinking it back towards 0 or not.
    
    D) Making sure applications that periodically reduce and then increase
       again the nr threads or allowed CPU mask still benefit from good
       cache locality with mm_cid.
    
    Introduce the following changes:
    
    * After shrinking the number of threads or reducing the number of
      allowed CPUs, reduce the value of max_nr_cid so expansion of CID
      allocation will preserve cache locality if the number of threads or
      allowed CPUs increase again.
    
    * Only re-use a recent_cid if it is within the max_nr_cid upper bound,
      else find the first available CID.
    
    Fixes: 7e019dcc470f ("sched: Improve cache locality of RSEQ concurrency IDs for intermittent workloads")
    Signed-off-by: Mathieu Desnoyers <[email protected]>
    Signed-off-by: Gabriele Monaco <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Gabriele Monaco <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: sh-sci: Clean sci_ports[0] after at earlycon exit [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Thu Jan 16 20:22:48 2025 +0200

    serial: sh-sci: Clean sci_ports[0] after at earlycon exit
    
    [ Upstream commit 5f1017069933489add0c08659673443c9905659e ]
    
    The early_console_setup() function initializes sci_ports[0].port with an
    object of type struct uart_port obtained from the struct earlycon_device
    passed as an argument to early_console_setup().
    
    Later, during serial port probing, the serial port used as earlycon
    (e.g., port A) might be remapped to a different position in the sci_ports[]
    array, and a different serial port (e.g., port B) might be assigned to slot
    0. For example:
    
    sci_ports[0] = port B
    sci_ports[X] = port A
    
    In this scenario, the new port mapped at index zero (port B) retains the
    data associated with the earlycon configuration. Consequently, after the
    Linux boot process, any access to the serial port now mapped to
    sci_ports[0] (port B) will block the original earlycon port (port A).
    
    To address this, introduce an early_console_exit() function to clean up
    sci_ports[0] when earlycon is exited.
    
    To prevent the cleanup of sci_ports[0] while the serial device is still
    being used by earlycon, introduce the struct sci_port::probing flag and
    account for it in early_console_exit().
    
    Fixes: 0b0cced19ab1 ("serial: sh-sci: Add CONFIG_SERIAL_EARLYCON support")
    Cc: [email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 651dee03696e ("serial: sh-sci: Increment the runtime usage counter for the earlycon device")
    Signed-off-by: Sasha Levin <[email protected]>

serial: sh-sci: Increment the runtime usage counter for the earlycon device [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Thu Jan 16 20:22:49 2025 +0200

    serial: sh-sci: Increment the runtime usage counter for the earlycon device
    
    [ Upstream commit 651dee03696e1dfde6d9a7e8664bbdcd9a10ea7f ]
    
    In the sh-sci driver, serial ports are mapped to the sci_ports[] array,
    with earlycon mapped at index zero.
    
    The uart_add_one_port() function eventually calls __device_attach(),
    which, in turn, calls pm_request_idle(). The identified code path is as
    follows:
    
    uart_add_one_port() ->
      serial_ctrl_register_port() ->
        serial_core_register_port() ->
          serial_core_port_device_add() ->
            serial_base_port_add() ->
              device_add() ->
                bus_probe_device() ->
                  device_initial_probe() ->
                    __device_attach() ->
                      // ...
                      if (dev->p->dead) {
                        // ...
                      } else if (dev->driver) {
                        // ...
                      } else {
                        // ...
                        pm_request_idle(dev);
                        // ...
                      }
    
    The earlycon device clocks are enabled by the bootloader. However, the
    pm_request_idle() call in __device_attach() disables the SCI port clocks
    while earlycon is still active.
    
    The earlycon write function, serial_console_write(), calls
    sci_poll_put_char() via serial_console_putchar(). If the SCI port clocks
    are disabled, writing to earlycon may sometimes cause the SR.TDFE bit to
    remain unset indefinitely, causing the while loop in sci_poll_put_char()
    to never exit. On single-core SoCs, this can result in the system being
    blocked during boot when this issue occurs.
    
    To resolve this, increment the runtime PM usage counter for the earlycon
    SCI device before registering the UART port.
    
    Fixes: 0b0cced19ab1 ("serial: sh-sci: Add CONFIG_SERIAL_EARLYCON support")
    Cc: [email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

serial: sh-sci: Move runtime PM enable to sci_probe_single() [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Thu Jan 16 20:22:46 2025 +0200

    serial: sh-sci: Move runtime PM enable to sci_probe_single()
    
    [ Upstream commit 239f11209e5f282e16f5241b99256e25dd0614b6 ]
    
    Relocate the runtime PM enable operation to sci_probe_single(). This change
    prepares the codebase for upcoming fixes.
    
    While at it, replace the existing logic with a direct call to
    devm_pm_runtime_enable() and remove sci_cleanup_single(). The
    devm_pm_runtime_enable() function automatically handles disabling runtime
    PM during driver removal.
    
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 651dee03696e ("serial: sh-sci: Increment the runtime usage counter for the earlycon device")
    Signed-off-by: Sasha Levin <[email protected]>

 
smb: client: Add check for next_buffer in receive_encrypted_standard() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Mon Feb 17 15:20:38 2025 +0800

    smb: client: Add check for next_buffer in receive_encrypted_standard()
    
    commit 860ca5e50f73c2a1cef7eefc9d39d04e275417f7 upstream.
    
    Add check for the return value of cifs_buf_get() and cifs_small_buf_get()
    in receive_encrypted_standard() to prevent null pointer dereference.
    
    Fixes: eec04ea11969 ("smb: client: fix OOB in receive_encrypted_standard()")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: fix chmod(2) regression with ATTR_READONLY [+ + +]
Author: Paulo Alcantara <[email protected]>
Date:   Sun Feb 16 18:02:47 2025 -0300

    smb: client: fix chmod(2) regression with ATTR_READONLY
    
    commit 654292a0b264e9b8c51b98394146218a21612aa1 upstream.
    
    When the user sets a file or directory as read-only (e.g. ~S_IWUGO),
    the client will set the ATTR_READONLY attribute by sending an
    SMB2_SET_INFO request to the server in cifs_setattr_{,nounix}(), but
    cifsInodeInfo::cifsAttrs will be left unchanged as the client will
    only update the new file attributes in the next call to
    {smb311_posix,cifs}_get_inode_info() with the new metadata filled in
    @data parameter.
    
    Commit a18280e7fdea ("smb: cilent: set reparse mount points as
    automounts") mistakenly removed the @data NULL check when calling
    is_inode_cache_good(), which broke the above case as the new
    ATTR_READONLY attribute would end up not being updated on files with a
    read lease.
    
    Fix this by updating the inode whenever we have cached metadata in
    @data parameter.
    
    Reported-by: Horst Reiterer <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]
    Fixes: a18280e7fdea ("smb: cilent: set reparse mount points as automounts")
    Cc: [email protected]
    Signed-off-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: loongson: loongson2_guts: Add check for devm_kstrdup() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Feb 20 16:17:14 2025 +0800

    soc: loongson: loongson2_guts: Add check for devm_kstrdup()
    
    commit e31e3f6c0ce473f7ce1e70d54ac8e3ed190509f8 upstream.
    
    Add check for the return value of devm_kstrdup() in
    loongson2_guts_probe() to catch potential exception.
    
    Fixes: b82621ac8450 ("soc: loongson: add GUTS driver for loongson-2 platforms")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sockmap, vsock: For connectible sockets allow only connected [+ + +]
Author: Michal Luczaj <[email protected]>
Date:   Thu Feb 13 12:58:49 2025 +0100

    sockmap, vsock: For connectible sockets allow only connected
    
    [ Upstream commit 8fb5bb169d17cdd12c2dcc2e96830ed487d77a0f ]
    
    sockmap expects all vsocks to have a transport assigned, which is expressed
    in vsock_proto::psock_update_sk_prot(). However, there is an edge case
    where an unconnected (connectible) socket may lose its previously assigned
    transport. This is handled with a NULL check in the vsock/BPF recv path.
    
    Another design detail is that listening vsocks are not supposed to have any
    transport assigned at all. Which implies they are not supported by the
    sockmap. But this is complicated by the fact that a socket, before
    switching to TCP_LISTEN, may have had some transport assigned during a
    failed connect() attempt. Hence, we may end up with a listening vsock in a
    sockmap, which blows up quickly:
    
    KASAN: null-ptr-deref in range [0x0000000000000120-0x0000000000000127]
    CPU: 7 UID: 0 PID: 56 Comm: kworker/7:0 Not tainted 6.14.0-rc1+
    Workqueue: vsock-loopback vsock_loopback_work
    RIP: 0010:vsock_read_skb+0x4b/0x90
    Call Trace:
     sk_psock_verdict_data_ready+0xa4/0x2e0
     virtio_transport_recv_pkt+0x1ca8/0x2acc
     vsock_loopback_work+0x27d/0x3f0
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x35a/0x700
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
    
    For connectible sockets, instead of relying solely on the state of
    vsk->transport, tell sockmap to only allow those representing established
    connections. This aligns with the behaviour for AF_INET and AF_UNIX.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <[email protected]>
    Acked-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp: adjust rcvq_space after updating scaling ratio [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon Feb 17 15:29:05 2025 -0800

    tcp: adjust rcvq_space after updating scaling ratio
    
    [ Upstream commit f5da7c45188eea71394bf445655cae2df88a7788 ]
    
    Since commit under Fixes we set the window clamp in accordance
    to newly measured rcvbuf scaling_ratio. If the scaling_ratio
    decreased significantly we may put ourselves in a situation
    where windows become smaller than rcvq_space, preventing
    tcp_rcv_space_adjust() from increasing rcvbuf.
    
    The significant decrease of scaling_ratio is far more likely
    since commit 697a6c8cec03 ("tcp: increase the default TCP scaling ratio"),
    which increased the "default" scaling ratio from ~30% to 50%.
    
    Hitting the bad condition depends a lot on TCP tuning, and
    drivers at play. One of Meta's workloads hits it reliably
    under following conditions:
     - default rcvbuf of 125k
     - sender MTU 1500, receiver MTU 5000
     - driver settles on scaling_ratio of 78 for the config above.
    Initial rcvq_space gets calculated as TCP_INIT_CWND * tp->advmss
    (10 * 5k = 50k). Once we find out the true scaling ratio and
    MSS we clamp the windows to 38k. Triggering the condition also
    depends on the message sequence of this workload. I can't repro
    the problem with simple iperf or TCP_RR-style tests.
    
    Fixes: a2cbb1603943 ("tcp: Update window clamping condition")
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Neal Cardwell <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: drop secpath at the same time as we currently drop dst [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Mon Feb 17 11:23:35 2025 +0100

    tcp: drop secpath at the same time as we currently drop dst
    
    [ Upstream commit 9b6412e6979f6f9e0632075f8f008937b5cd4efd ]
    
    Xiumei reported hitting the WARN in xfrm6_tunnel_net_exit while
    running tests that boil down to:
     - create a pair of netns
     - run a basic TCP test over ipcomp6
     - delete the pair of netns
    
    The xfrm_state found on spi_byaddr was not deleted at the time we
    delete the netns, because we still have a reference on it. This
    lingering reference comes from a secpath (which holds a ref on the
    xfrm_state), which is still attached to an skb. This skb is not
    leaked, it ends up on sk_receive_queue and then gets defer-free'd by
    skb_attempt_defer_free.
    
    The problem happens when we defer freeing an skb (push it on one CPU's
    defer_list), and don't flush that list before the netns is deleted. In
    that case, we still have a reference on the xfrm_state that we don't
    expect at this point.
    
    We already drop the skb's dst in the TCP receive path when it's no
    longer needed, so let's also drop the secpath. At this point,
    tcp_filter has already called into the LSM hooks that may require the
    secpath, so it should not be needed anymore. However, in some of those
    places, the MPTCP extension has just been attached to the skb, so we
    cannot simply drop all extensions.
    
    Fixes: 68822bdf76f1 ("net: generalize skb freeing deferral to per-cpu lists")
    Reported-by: Xiumei Mu <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/5055ba8f8f72bdcb602faa299faca73c280b7735.1739743613.git.sd@queasysnail.net
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tee: optee: Fix supplicant wait loop [+ + +]
Author: Sumit Garg <[email protected]>
Date:   Tue Feb 4 13:04:18 2025 +0530

    tee: optee: Fix supplicant wait loop
    
    commit 70b0d6b0a199c5a3ee6c72f5e61681ed6f759612 upstream.
    
    OP-TEE supplicant is a user-space daemon and it's possible for it
    be hung or crashed or killed in the middle of processing an OP-TEE
    RPC call. It becomes more complicated when there is incorrect shutdown
    ordering of the supplicant process vs the OP-TEE client application which
    can eventually lead to system hang-up waiting for the closure of the
    client application.
    
    Allow the client process waiting in kernel for supplicant response to
    be killed rather than indefinitely waiting in an unkillable state. Also,
    a normal uninterruptible wait should not have resulted in the hung-task
    watchdog getting triggered, but the endless loop would.
    
    This fixes issues observed during system reboot/shutdown when supplicant
    got hung for some reason or gets crashed/killed which lead to client
    getting hung in an unkillable state. It in turn lead to system being in
    hung up state requiring hard power off/on to recover.
    
    Fixes: 4fb0a5eb364d ("tee: add OP-TEE driver")
    Suggested-by: Arnd Bergmann <[email protected]>
    Cc: [email protected]
    Signed-off-by: Sumit Garg <[email protected]>
    Reviewed-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Jens Wiklander <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing: Fix using ret variable in tracing_set_tracer() [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Mon Jan 6 11:11:43 2025 -0500

    tracing: Fix using ret variable in tracing_set_tracer()
    
    commit 22bec11a569983f39c6061cb82279e7de9e3bdfc upstream.
    
    When the function tracing_set_tracer() switched over to using the guard()
    infrastructure, it did not need to save the 'ret' variable and would just
    return the value when an error arised, instead of setting ret and jumping
    to an out label.
    
    When CONFIG_TRACER_SNAPSHOT is enabled, it had code that expected the
    "ret" variable to be initialized to zero and had set 'ret' while holding
    an arch_spin_lock() (not used by guard), and then upon releasing the lock
    it would check 'ret' and exit if set. But because ret was only set when an
    error occurred while holding the locks, 'ret' would be used uninitialized
    if there was no error. The code in the CONFIG_TRACER_SNAPSHOT block should
    be self contain. Make sure 'ret' is also set when no error occurred.
    
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Fixes: d33b10c0c73ad ("tracing: Switch trace.c code over to use guard()")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tracing: Have the error of __tracing_resize_ring_buffer() passed to user [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Thu Feb 13 13:41:32 2025 -0500

    tracing: Have the error of __tracing_resize_ring_buffer() passed to user
    
    [ Upstream commit 60b8f711143de7cd9c0f55be0fe7eb94b19eb5c7 ]
    
    Currently if __tracing_resize_ring_buffer() returns an error, the
    tracing_resize_ringbuffer() returns -ENOMEM. But it may not be a memory
    issue that caused the function to fail. If the ring buffer is memory
    mapped, then the resizing of the ring buffer will be disabled. But if the
    user tries to resize the buffer, it will get an -ENOMEM returned, which is
    confusing because there is plenty of memory. The actual error returned was
    -EBUSY, which would make much more sense to the user.
    
    Cc: [email protected]
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Vincent Donnefort <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 117c39200d9d7 ("ring-buffer: Introducing ring-buffer mapping functions")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tracing: Switch trace.c code over to use guard() [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Tue Dec 24 22:14:13 2024 -0500

    tracing: Switch trace.c code over to use guard()
    
    [ Upstream commit d33b10c0c73adca00f72bf4a153a07b7f5f34715 ]
    
    There are several functions in trace.c that have "goto out;" or
    equivalent on error in order to release locks or free values that were
    allocated. This can be error prone or just simply make the code more
    complex.
    
    Switch every location that ends with unlocking a mutex or freeing on error
    over to using the guard(mutex)() and __free() infrastructure to let the
    compiler worry about releasing locks. This makes the code easier to read
    and understand.
    
    There's one place that should probably return an error but instead return
    0. This does not change the return as the only changes are to do the
    conversion without changing the logic. Fixing that location will have to
    come later.
    
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Stable-dep-of: 60b8f711143d ("tracing: Have the error of __tracing_resize_ring_buffer() passed to user")
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: gadget: f_midi: f_midi_complete to call queue_work [+ + +]
Author: Jill Donahue <[email protected]>
Date:   Tue Feb 11 10:48:05 2025 -0700

    USB: gadget: f_midi: f_midi_complete to call queue_work
    
    [ Upstream commit 4ab37fcb42832cdd3e9d5e50653285ca84d6686f ]
    
    When using USB MIDI, a lock is attempted to be acquired twice through a
    re-entrant call to f_midi_transmit, causing a deadlock.
    
    Fix it by using queue_work() to schedule the inner f_midi_transmit() via
    a high priority work queue from the completion handler.
    
    Link: https://lore.kernel.org/all/CAArt=LjxU0fUZOj06X+5tkeGT+6RbXzpWg1h4t4Fwa_KGVAX6g@mail.gmail.com/
    Fixes: d5daf49b58661 ("USB: gadget: midi: add midi function driver")
    Cc: stable <[email protected]>
    Signed-off-by: Jill Donahue <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock/bpf: Warn on socket without transport [+ + +]
Author: Michal Luczaj <[email protected]>
Date:   Thu Feb 13 12:58:50 2025 +0100

    vsock/bpf: Warn on socket without transport
    
    [ Upstream commit 857ae05549ee2542317e7084ecaa5f8536634dd9 ]
    
    In the spirit of commit 91751e248256 ("vsock: prevent null-ptr-deref in
    vsock_*[has_data|has_space]"), armorize the "impossible" cases with a
    warning.
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Signed-off-by: Michal Luczaj <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock/virtio: fix variables initialization during resuming [+ + +]
Author: Junnan Wu <[email protected]>
Date:   Fri Feb 14 09:22:00 2025 +0800

    vsock/virtio: fix variables initialization during resuming
    
    [ Upstream commit 55eff109e76a14e5ed10c8c3c3978d20a35e2a4d ]
    
    When executing suspend to ram twice in a row,
    the `rx_buf_nr` and `rx_buf_max_nr` increase to three times vq->num_free.
    Then after virtqueue_get_buf and `rx_buf_nr` decreased
    in function virtio_transport_rx_work,
    the condition to fill rx buffer
    (rx_buf_nr < rx_buf_max_nr / 2) will never be met.
    
    It is because that `rx_buf_nr` and `rx_buf_max_nr`
    are initialized only in virtio_vsock_probe(),
    but they should be reset whenever virtqueues are recreated,
    like after a suspend/resume.
    
    Move the `rx_buf_nr` and `rx_buf_max_nr` initialization in
    virtio_vsock_vqs_init(), so we are sure that they are properly
    initialized, every time we initialize the virtqueues, either when we
    load the driver or after a suspend/resume.
    
    To prevent erroneous atomic load operations on the `queued_replies`
    in the virtio_transport_send_pkt_work() function
    which may disrupt the scheduling of vsock->rx_work
    when transmitting reply-required socket packets,
    this atomic variable must undergo synchronized initialization
    alongside the preceding two variables after a suspend/resume.
    
    Fixes: bd50c5dc182b ("vsock/virtio: add support for device suspend/resume")
    Link: https://lore.kernel.org/virtualization/[email protected]/
    Co-developed-by: Ying Gao <[email protected]>
    Signed-off-by: Ying Gao <[email protected]>
    Signed-off-by: Junnan Wu <[email protected]>
    Reviewed-by: Luigi Leonardi <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfs: fix online repair probing when CONFIG_XFS_ONLINE_REPAIR=n [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Sun Feb 2 16:50:14 2025 -0800

    xfs: fix online repair probing when CONFIG_XFS_ONLINE_REPAIR=n
    
    commit 66314e9a57a050f95cb0ebac904f5ab047a8926e upstream.
    
    I received a report from the release engineering side of the house that
    xfs_scrub without the -n flag (aka fix it mode) would try to fix a
    broken filesystem even on a kernel that doesn't have online repair built
    into it:
    
     # xfs_scrub -dTvn /mnt/test
     EXPERIMENTAL xfs_scrub program in use! Use at your own risk!
     Phase 1: Find filesystem geometry.
     /mnt/test: using 1 threads to scrub.
     Phase 1: Memory used: 132k/0k (108k/25k), time:  0.00/ 0.00/ 0.00s
     <snip>
     Phase 4: Repair filesystem.
     <snip>
     Info: /mnt/test/some/victimdir directory entries: Attempting repair. (repair.c line 351)
     Corruption: /mnt/test/some/victimdir directory entries: Repair unsuccessful; offline repair required. (repair.c line 204)
    
    Source: https://blogs.oracle.com/linux/post/xfs-online-filesystem-repair
    
    It is strange that xfs_scrub doesn't refuse to run, because the kernel
    is supposed to return EOPNOTSUPP if we actually needed to run a repair,
    and xfs_io's repair subcommand will perror that.  And yet:
    
     # xfs_io -x -c 'repair probe' /mnt/test
     #
    
    The first problem is commit dcb660f9222fd9 (4.15) which should have had
    xchk_probe set the CORRUPT OFLAG so that any of the repair machinery
    will get called at all.
    
    It turns out that some refactoring that happened in the 6.6-6.8 era
    broke the operation of this corner case.  What we *really* want to
    happen is that all the predicates that would steer xfs_scrub_metadata()
    towards calling xrep_attempt() should function the same way that they do
    when repair is compiled in; and then xrep_attempt gets to return the
    fatal EOPNOTSUPP error code that causes the probe to fail.
    
    Instead, commit 8336a64eb75cba (6.6) started the failwhale swimming by
    hoisting OFLAG checking logic into a helper whose non-repair stub always
    returns false, causing scrub to return "repair not needed" when in fact
    the repair is not supported.  Prior to that commit, the oflag checking
    that was open-coded in scrub.c worked correctly.
    
    Similarly, in commit 4bdfd7d15747b1 (6.8) we hoisted the IFLAG_REPAIR
    and ALREADY_FIXED logic into a helper whose non-repair stub always
    returns false, so we never enter the if test body that would have called
    xrep_attempt, let alone fail to decode the OFLAGs correctly.
    
    The final insult (yes, we're doing The Naked Gun now) is commit
    48a72f60861f79 (6.8) in which we hoisted the "are we going to try a
    repair?" predicate into yet another function with a non-repair stub
    always returns false.
    
    Fix xchk_probe to trigger xrep_probe if repair is enabled, or return
    EOPNOTSUPP directly if it is not.  For all the other scrub types, we
    need to fix the header predicates so that the ->repair functions (which
    are all xrep_notsupported) get called to return EOPNOTSUPP.  Commit
    48a72 is tagged here because the scrub code prior to LTS 6.12 are
    incomplete and not worth patching.
    
    Reported-by: David Flynn <[email protected]>
    Cc: <[email protected]> # v6.8
    Fixes: 8336a64eb75c ("xfs: don't complain about unfixed metadata when repairs were injected")
    Signed-off-by: "Darrick J. Wong" <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>