]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 3 Nov 2025 01:38:13 +0000 (10:38 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 3 Nov 2025 01:38:13 +0000 (10:38 +0900)
added patches:
can-gs_usb-increase-max-interface-to-u8_max.patch
mptcp-change-first-as-a-parameter.patch
mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch
net-phy-dp83867-disable-eee-support-as-not-implemented.patch
reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch
s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch

queue-6.1/can-gs_usb-increase-max-interface-to-u8_max.patch [new file with mode: 0644]
queue-6.1/mptcp-change-first-as-a-parameter.patch [new file with mode: 0644]
queue-6.1/mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch [new file with mode: 0644]
queue-6.1/net-phy-dp83867-disable-eee-support-as-not-implemented.patch [new file with mode: 0644]
queue-6.1/reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch [new file with mode: 0644]
queue-6.1/s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/can-gs_usb-increase-max-interface-to-u8_max.patch b/queue-6.1/can-gs_usb-increase-max-interface-to-u8_max.patch
new file mode 100644 (file)
index 0000000..f6c7686
--- /dev/null
@@ -0,0 +1,117 @@
+From stable+bounces-189964-greg=kroah.com@vger.kernel.org Mon Oct 27 21:45:18 2025
+From: Celeste Liu <uwu@coelacanthus.name>
+Date: Mon, 27 Oct 2025 20:32:31 +0800
+Subject: can: gs_usb: increase max interface to U8_MAX
+To: stable@vger.kernel.org
+Cc: Celeste Liu <uwu@coelacanthus.name>, Runcheng Lu <runcheng.lu@hpmicro.com>, Vincent Mailhol <mailhol@kernel.org>, Marc Kleine-Budde <mkl@pengutronix.de>
+Message-ID: <20251027123230.661960-2-uwu@coelacanthus.name>
+
+From: Celeste Liu <uwu@coelacanthus.name>
+
+commit 2a27f6a8fb5722223d526843040f747e9b0e8060 upstream
+
+This issue was found by Runcheng Lu when develop HSCanT USB to CAN FD
+converter[1]. The original developers may have only 3 interfaces
+device to test so they write 3 here and wait for future change.
+
+During the HSCanT development, we actually used 4 interfaces, so the
+limitation of 3 is not enough now. But just increase one is not
+future-proofed. Since the channel index type in gs_host_frame is u8,
+just make canch[] become a flexible array with a u8 index, so it
+naturally constraint by U8_MAX and avoid statically allocate 256
+pointer for every gs_usb device.
+
+[1]: https://github.com/cherry-embedded/HSCanT-hardware
+
+Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
+Reported-by: Runcheng Lu <runcheng.lu@hpmicro.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
+Signed-off-by: Celeste Liu <uwu@coelacanthus.name>
+Link: https://patch.msgid.link/20250930-gs-usb-max-if-v5-1-863330bf6666@coelacanthus.name
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/can/usb/gs_usb.c |   21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
+
+--- a/drivers/net/can/usb/gs_usb.c
++++ b/drivers/net/can/usb/gs_usb.c
+@@ -277,10 +277,6 @@ struct gs_host_frame {
+ #define GS_MAX_TX_URBS 10
+ /* Only launch a max of GS_MAX_RX_URBS usb requests at a time. */
+ #define GS_MAX_RX_URBS 30
+-/* Maximum number of interfaces the driver supports per device.
+- * Current hardware only supports 3 interfaces. The future may vary.
+- */
+-#define GS_MAX_INTF 3
+ struct gs_tx_context {
+       struct gs_can *dev;
+@@ -318,14 +314,15 @@ struct gs_can {
+ /* usb interface struct */
+ struct gs_usb {
+-      struct gs_can *canch[GS_MAX_INTF];
+       struct usb_anchor rx_submitted;
+       struct usb_device *udev;
+       unsigned int hf_size_rx;
+       u8 active_channels;
++      u8 channel_cnt;
+       unsigned int pipe_in;
+       unsigned int pipe_out;
++      struct gs_can *canch[];
+ };
+ /* 'allocate' a tx context.
+@@ -550,7 +547,7 @@ static void gs_usb_receive_bulk_callback
+       }
+       /* device reports out of range channel id */
+-      if (hf->channel >= GS_MAX_INTF)
++      if (hf->channel >= parent->channel_cnt)
+               goto device_detach;
+       dev = parent->canch[hf->channel];
+@@ -653,7 +650,7 @@ resubmit_urb:
+       /* USB failure take down all interfaces */
+       if (rc == -ENODEV) {
+ device_detach:
+-              for (rc = 0; rc < GS_MAX_INTF; rc++) {
++              for (rc = 0; rc < parent->channel_cnt; rc++) {
+                       if (parent->canch[rc])
+                               netif_device_detach(parent->canch[rc]->netdev);
+               }
+@@ -1374,17 +1371,19 @@ static int gs_usb_probe(struct usb_inter
+       icount = dconf.icount + 1;
+       dev_info(&intf->dev, "Configuring for %u interfaces\n", icount);
+-      if (icount > GS_MAX_INTF) {
++      if (icount > type_max(typeof(parent->channel_cnt))) {
+               dev_err(&intf->dev,
+                       "Driver cannot handle more that %u CAN interfaces\n",
+-                      GS_MAX_INTF);
++                      type_max(typeof(parent->channel_cnt)));
+               return -EINVAL;
+       }
+-      parent = kzalloc(sizeof(*parent), GFP_KERNEL);
++      parent = kzalloc(struct_size(parent, canch, icount), GFP_KERNEL);
+       if (!parent)
+               return -ENOMEM;
++      parent->channel_cnt = icount;
++
+       init_usb_anchor(&parent->rx_submitted);
+       usb_set_intfdata(intf, parent);
+@@ -1445,7 +1444,7 @@ static void gs_usb_disconnect(struct usb
+               return;
+       }
+-      for (i = 0; i < GS_MAX_INTF; i++)
++      for (i = 0; i < parent->channel_cnt; i++)
+               if (parent->canch[i])
+                       gs_destroy_candev(parent->canch[i]);
diff --git a/queue-6.1/mptcp-change-first-as-a-parameter.patch b/queue-6.1/mptcp-change-first-as-a-parameter.patch
new file mode 100644 (file)
index 0000000..f758073
--- /dev/null
@@ -0,0 +1,91 @@
+From stable+bounces-192078-greg=kroah.com@vger.kernel.org Mon Nov  3 04:00:09 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun,  2 Nov 2025 14:00:02 -0500
+Subject: mptcp: change 'first' as a parameter
+To: stable@vger.kernel.org
+Cc: Geliang Tang <geliang.tang@suse.com>, Mat Martineau <mathew.j.martineau@linux.intel.com>, Jakub Kicinski <kuba@kernel.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20251102190003.3553215-1-sashal@kernel.org>
+
+From: Geliang Tang <geliang.tang@suse.com>
+
+[ Upstream commit 73a0052a61f98354f39f461e03f1a7e513b84578 ]
+
+The function mptcp_subflow_process_delegated() uses the input ssk first,
+while __mptcp_check_push() invokes the packet scheduler first.
+
+So this patch adds a new parameter named 'first' for the function
+__mptcp_subflow_push_pending() to deal with these two cases separately.
+
+With this change, the code that invokes the packet scheduler in the
+function __mptcp_check_push() can be removed, and replaced by invoking
+__mptcp_subflow_push_pending() directly.
+
+Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
+Signed-off-by: Geliang Tang <geliang.tang@suse.com>
+Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Stable-dep-of: 27b0e701d387 ("mptcp: drop bogus optimization in __mptcp_check_push()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/mptcp/protocol.c |   20 ++++++--------------
+ 1 file changed, 6 insertions(+), 14 deletions(-)
+
+--- a/net/mptcp/protocol.c
++++ b/net/mptcp/protocol.c
+@@ -1706,7 +1706,7 @@ out:
+               mptcp_check_send_data_fin(sk);
+ }
+-static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk)
++static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk, bool first)
+ {
+       struct mptcp_sock *msk = mptcp_sk(sk);
+       struct mptcp_sendmsg_info info = {
+@@ -1715,7 +1715,6 @@ static void __mptcp_subflow_push_pending
+       struct mptcp_data_frag *dfrag;
+       struct sock *xmit_ssk;
+       int len, copied = 0;
+-      bool first = true;
+       info.flags = 0;
+       while ((dfrag = mptcp_send_head(sk))) {
+@@ -1725,8 +1724,7 @@ static void __mptcp_subflow_push_pending
+               while (len > 0) {
+                       int ret = 0;
+-                      /* the caller already invoked the packet scheduler,
+-                       * check for a different subflow usage only after
++                      /* check for a different subflow usage only after
+                        * spooling the first chunk of data
+                        */
+                       xmit_ssk = first ? ssk : mptcp_subflow_get_send(mptcp_sk(sk));
+@@ -3501,16 +3499,10 @@ void __mptcp_check_push(struct sock *sk,
+       if (!mptcp_send_head(sk))
+               return;
+-      if (!sock_owned_by_user(sk)) {
+-              struct sock *xmit_ssk = mptcp_subflow_get_send(mptcp_sk(sk));
+-
+-              if (xmit_ssk == ssk)
+-                      __mptcp_subflow_push_pending(sk, ssk);
+-              else if (xmit_ssk)
+-                      mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk), MPTCP_DELEGATE_SEND);
+-      } else {
++      if (!sock_owned_by_user(sk))
++              __mptcp_subflow_push_pending(sk, ssk, false);
++      else
+               __set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->cb_flags);
+-      }
+ }
+ #define MPTCP_FLAGS_PROCESS_CTX_NEED (BIT(MPTCP_PUSH_PENDING) | \
+@@ -3605,7 +3597,7 @@ void mptcp_subflow_process_delegated(str
+       if (status & BIT(MPTCP_DELEGATE_SEND)) {
+               mptcp_data_lock(sk);
+               if (!sock_owned_by_user(sk))
+-                      __mptcp_subflow_push_pending(sk, ssk);
++                      __mptcp_subflow_push_pending(sk, ssk, true);
+               else
+                       __set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->cb_flags);
+               mptcp_data_unlock(sk);
diff --git a/queue-6.1/mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch b/queue-6.1/mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch
new file mode 100644 (file)
index 0000000..3874418
--- /dev/null
@@ -0,0 +1,109 @@
+From stable+bounces-192079-greg=kroah.com@vger.kernel.org Mon Nov  3 04:00:17 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun,  2 Nov 2025 14:00:03 -0500
+Subject: mptcp: drop bogus optimization in __mptcp_check_push()
+To: stable@vger.kernel.org
+Cc: Paolo Abeni <pabeni@redhat.com>, Geliang Tang <geliang@kernel.org>, Mat Martineau <martineau@kernel.org>, "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, Jakub Kicinski <kuba@kernel.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20251102190003.3553215-2-sashal@kernel.org>
+
+From: Paolo Abeni <pabeni@redhat.com>
+
+[ Upstream commit 27b0e701d3872ba59c5b579a9e8a02ea49ad3d3b ]
+
+Accessing the transmit queue without owning the msk socket lock is
+inherently racy, hence __mptcp_check_push() could actually quit early
+even when there is pending data.
+
+That in turn could cause unexpected tx lock and timeout.
+
+Dropping the early check avoids the race, implicitly relaying on later
+tests under the relevant lock. With such change, all the other
+mptcp_send_head() call sites are now under the msk socket lock and we
+can additionally drop the now unneeded annotation on the transmit head
+pointer accesses.
+
+Fixes: 6e628cd3a8f7 ("mptcp: use mptcp release_cb for delayed tasks")
+Cc: stable@vger.kernel.org
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Reviewed-by: Geliang Tang <geliang@kernel.org>
+Tested-by: Geliang Tang <geliang@kernel.org>
+Reviewed-by: Mat Martineau <martineau@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Link: https://patch.msgid.link/20251028-net-mptcp-send-timeout-v1-1-38ffff5a9ec8@kernel.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+[ split upstream __subflow_push_pending change across __mptcp_push_pending and __mptcp_subflow_push_pending ]
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/mptcp/protocol.c |   13 +++++--------
+ net/mptcp/protocol.h |    2 +-
+ 2 files changed, 6 insertions(+), 9 deletions(-)
+
+--- a/net/mptcp/protocol.c
++++ b/net/mptcp/protocol.c
+@@ -1101,7 +1101,7 @@ static void __mptcp_clean_una(struct soc
+                       if (WARN_ON_ONCE(!msk->recovery))
+                               break;
+-                      WRITE_ONCE(msk->first_pending, mptcp_send_next(sk));
++                      msk->first_pending = mptcp_send_next(sk);
+               }
+               dfrag_clear(sk, dfrag);
+@@ -1691,7 +1691,7 @@ void __mptcp_push_pending(struct sock *s
+                       mptcp_update_post_push(msk, dfrag, ret);
+               }
+-              WRITE_ONCE(msk->first_pending, mptcp_send_next(sk));
++              msk->first_pending = mptcp_send_next(sk);
+       }
+       /* at this point we held the socket lock for the last subflow we used */
+@@ -1747,7 +1747,7 @@ static void __mptcp_subflow_push_pending
+                       mptcp_update_post_push(msk, dfrag, ret);
+               }
+-              WRITE_ONCE(msk->first_pending, mptcp_send_next(sk));
++              msk->first_pending = mptcp_send_next(sk);
+       }
+ out:
+@@ -1917,7 +1917,7 @@ static int mptcp_sendmsg(struct sock *sk
+                       get_page(dfrag->page);
+                       list_add_tail(&dfrag->list, &msk->rtx_queue);
+                       if (!msk->first_pending)
+-                              WRITE_ONCE(msk->first_pending, dfrag);
++                              msk->first_pending = dfrag;
+               }
+               pr_debug("msk=%p dfrag at seq=%llu len=%u sent=%u new=%d\n", msk,
+                        dfrag->data_seq, dfrag->data_len, dfrag->already_sent,
+@@ -2915,7 +2915,7 @@ static void __mptcp_clear_xmit(struct so
+       struct mptcp_sock *msk = mptcp_sk(sk);
+       struct mptcp_data_frag *dtmp, *dfrag;
+-      WRITE_ONCE(msk->first_pending, NULL);
++      msk->first_pending = NULL;
+       list_for_each_entry_safe(dfrag, dtmp, &msk->rtx_queue, list)
+               dfrag_clear(sk, dfrag);
+ }
+@@ -3496,9 +3496,6 @@ void __mptcp_data_acked(struct sock *sk)
+ void __mptcp_check_push(struct sock *sk, struct sock *ssk)
+ {
+-      if (!mptcp_send_head(sk))
+-              return;
+-
+       if (!sock_owned_by_user(sk))
+               __mptcp_subflow_push_pending(sk, ssk, false);
+       else
+--- a/net/mptcp/protocol.h
++++ b/net/mptcp/protocol.h
+@@ -360,7 +360,7 @@ static inline struct mptcp_data_frag *mp
+ {
+       const struct mptcp_sock *msk = mptcp_sk(sk);
+-      return READ_ONCE(msk->first_pending);
++      return msk->first_pending;
+ }
+ static inline struct mptcp_data_frag *mptcp_send_next(struct sock *sk)
diff --git a/queue-6.1/net-phy-dp83867-disable-eee-support-as-not-implemented.patch b/queue-6.1/net-phy-dp83867-disable-eee-support-as-not-implemented.patch
new file mode 100644 (file)
index 0000000..24a769f
--- /dev/null
@@ -0,0 +1,55 @@
+From stable+bounces-192086-greg=kroah.com@vger.kernel.org Mon Nov  3 05:15:36 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun,  2 Nov 2025 15:15:27 -0500
+Subject: net: phy: dp83867: Disable EEE support as not implemented
+To: stable@vger.kernel.org
+Cc: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>, Andrew Lunn <andrew@lunn.ch>, Jakub Kicinski <kuba@kernel.org>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20251102201527.3587707-1-sashal@kernel.org>
+
+From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
+
+[ Upstream commit 84a905290cb4c3d9a71a9e3b2f2e02e031e7512f ]
+
+While the DP83867 PHYs report EEE capability through their feature
+registers, the actual hardware does not support EEE (see Links).
+When the connected MAC enables EEE, it causes link instability and
+communication failures.
+
+The issue is reproducible with a iMX8MP and relevant stmmac ethernet port.
+Since the introduction of phylink-managed EEE support in the stmmac driver,
+EEE is now enabled by default, leading to issues on systems using the
+DP83867 PHY.
+
+Call phy_disable_eee during phy initialization to prevent EEE from being
+enabled on DP83867 PHYs.
+
+Link: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1445244/dp83867ir-dp83867-disable-eee-lpi
+Link: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/658638/dp83867ir-eee-energy-efficient-ethernet
+Fixes: 2a10154abcb7 ("net: phy: dp83867: Add TI dp83867 phy")
+Cc: stable@vger.kernel.org
+Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Link: https://patch.msgid.link/20251023144857.529566-1-ghidoliemanuele@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+[ replaced phy_disable_eee() call with direct eee_broken_modes assignment ]
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/phy/dp83867.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/net/phy/dp83867.c
++++ b/drivers/net/phy/dp83867.c
+@@ -743,6 +743,12 @@ static int dp83867_config_init(struct ph
+                       return ret;
+       }
++      /* Although the DP83867 reports EEE capability through the
++       * MDIO_PCS_EEE_ABLE and MDIO_AN_EEE_ADV registers, the feature
++       * is not actually implemented in hardware.
++       */
++      phydev->eee_broken_modes = MDIO_EEE_100TX | MDIO_EEE_1000T;
++
+       if (phy_interface_is_rgmii(phydev) ||
+           phydev->interface == PHY_INTERFACE_MODE_SGMII) {
+               val = phy_read(phydev, MII_DP83867_PHYCTRL);
diff --git a/queue-6.1/reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch b/queue-6.1/reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch
new file mode 100644 (file)
index 0000000..409bb82
--- /dev/null
@@ -0,0 +1,74 @@
+From 8c227a5050c07450c4585832a9a35659b39c4bf1 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 27 Feb 2024 13:08:12 -0500
+Subject: Reapply "Revert drm/amd/display: Enable Freesync Video Mode by default"
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+This reverts commit 11b92df8a2f7f4605ccc764ce6ae4a72760674df.
+
+This conflicts with how compositors want to handle VRR.  Now
+that compositors actually handle VRR, we probably don't need
+freesync video.
+
+Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2985
+Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+[ Salvatore Bonaccorso: Adjust context due to missing 3e094a287526
+  ("drm/amd/display: Use drm_connector in create_stream_for_sink") in
+  6.1.y stable series ]
+Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -6044,7 +6044,8 @@ create_stream_for_sink(struct amdgpu_dm_
+                */
+               DRM_DEBUG_DRIVER("No preferred mode found\n");
+       } else {
+-              recalculate_timing = is_freesync_video_mode(&mode, aconnector);
++              recalculate_timing = amdgpu_freesync_vid_mode &&
++                               is_freesync_video_mode(&mode, aconnector);
+               if (recalculate_timing) {
+                       freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
+                       drm_mode_copy(&saved_mode, &mode);
+@@ -7147,7 +7148,7 @@ static void amdgpu_dm_connector_add_free
+       struct amdgpu_dm_connector *amdgpu_dm_connector =
+               to_amdgpu_dm_connector(connector);
+-      if (!edid)
++      if (!(amdgpu_freesync_vid_mode && edid))
+               return;
+       if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10)
+@@ -9160,7 +9161,8 @@ static int dm_update_crtc_state(struct a
+                * TODO: Refactor this function to allow this check to work
+                * in all conditions.
+                */
+-              if (dm_new_crtc_state->stream &&
++              if (amdgpu_freesync_vid_mode &&
++                  dm_new_crtc_state->stream &&
+                   is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state))
+                       goto skip_modeset;
+@@ -9200,7 +9202,7 @@ static int dm_update_crtc_state(struct a
+               }
+               /* Now check if we should set freesync video mode */
+-              if (dm_new_crtc_state->stream &&
++              if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream &&
+                   dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) &&
+                   dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream) &&
+                   is_timing_unchanged_for_freesync(new_crtc_state,
+@@ -9213,7 +9215,7 @@ static int dm_update_crtc_state(struct a
+                       set_freesync_fixed_config(dm_new_crtc_state);
+                       goto skip_modeset;
+-              } else if (aconnector &&
++              } else if (amdgpu_freesync_vid_mode && aconnector &&
+                          is_freesync_video_mode(&new_crtc_state->mode,
+                                                 aconnector)) {
+                       struct drm_display_mode *high_mode;
diff --git a/queue-6.1/s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch b/queue-6.1/s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch
new file mode 100644 (file)
index 0000000..11c45a0
--- /dev/null
@@ -0,0 +1,87 @@
+From stable+bounces-192102-greg=kroah.com@vger.kernel.org Mon Nov  3 08:43:42 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun,  2 Nov 2025 18:43:36 -0500
+Subject: s390/pci: Restore IRQ unconditionally for the zPCI device
+To: stable@vger.kernel.org
+Cc: Farhan Ali <alifm@linux.ibm.com>, stable@vger.kernnel.org, Niklas Schnelle <schnelle@linux.ibm.com>, Matthew Rosato <mjrosato@linux.ibm.com>, Heiko Carstens <hca@linux.ibm.com>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20251102234336.3659237-1-sashal@kernel.org>
+
+From: Farhan Ali <alifm@linux.ibm.com>
+
+[ Upstream commit b45873c3f09153d1ad9b3a7bf9e5c0b0387fd2ea ]
+
+Commit c1e18c17bda6 ("s390/pci: add zpci_set_irq()/zpci_clear_irq()"),
+introduced the zpci_set_irq() and zpci_clear_irq(), to be used while
+resetting a zPCI device.
+
+Commit da995d538d3a ("s390/pci: implement reset_slot for hotplug
+slot"), mentions zpci_clear_irq() being called in the path for
+zpci_hot_reset_device().  But that is not the case anymore and these
+functions are not called outside of this file. Instead
+zpci_hot_reset_device() relies on zpci_disable_device() also clearing
+the IRQs, but misses to reset the zdev->irqs_registered flag.
+
+However after a CLP disable/enable reset, the device's IRQ are
+unregistered, but the flag zdev->irq_registered does not get cleared. It
+creates an inconsistent state and so arch_restore_msi_irqs() doesn't
+correctly restore the device's IRQ. This becomes a problem when a PCI
+driver tries to restore the state of the device through
+pci_restore_state(). Restore IRQ unconditionally for the device and remove
+the irq_registered flag as its redundant.
+
+Fixes: c1e18c17bda6 ("s390/pci: add zpci_set_irq()/zpci_clear_irq()")
+Cc: stable@vger.kernnel.org
+Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
+Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
+Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+[ adjusted bitfield context ]
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/s390/include/asm/pci.h |    1 -
+ arch/s390/pci/pci_irq.c     |    9 +--------
+ 2 files changed, 1 insertion(+), 9 deletions(-)
+
+--- a/arch/s390/include/asm/pci.h
++++ b/arch/s390/include/asm/pci.h
+@@ -136,7 +136,6 @@ struct zpci_dev {
+       u8              has_resources   : 1;
+       u8              is_physfn       : 1;
+       u8              util_str_avail  : 1;
+-      u8              irqs_registered : 1;
+       u8              reserved        : 2;
+       unsigned int    devfn;          /* DEVFN part of the RID*/
+--- a/arch/s390/pci/pci_irq.c
++++ b/arch/s390/pci/pci_irq.c
+@@ -107,9 +107,6 @@ static int zpci_set_irq(struct zpci_dev
+       else
+               rc = zpci_set_airq(zdev);
+-      if (!rc)
+-              zdev->irqs_registered = 1;
+-
+       return rc;
+ }
+@@ -123,9 +120,6 @@ static int zpci_clear_irq(struct zpci_de
+       else
+               rc = zpci_clear_airq(zdev);
+-      if (!rc)
+-              zdev->irqs_registered = 0;
+-
+       return rc;
+ }
+@@ -427,8 +421,7 @@ bool arch_restore_msi_irqs(struct pci_de
+ {
+       struct zpci_dev *zdev = to_zpci(pdev);
+-      if (!zdev->irqs_registered)
+-              zpci_set_irq(zdev);
++      zpci_set_irq(zdev);
+       return true;
+ }
index 6734977623f96b7abf23670db954676804d9f8e8..fb1e12d65be71dc7668f7eac04da4a2be0a5f941 100644 (file)
@@ -56,3 +56,9 @@ drm-amd-pm-powerplay-smumgr-fix-pciebootlinklevel-va.patch-16017
 block-fix-op_is_zone_mgmt-to-handle-req_op_zone_reset_all.patch
 block-make-req_op_zone_open-a-write-operation.patch
 regmap-slimbus-fix-bus_context-pointer-in-regmap-init-calls.patch
+reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch
+s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch
+net-phy-dp83867-disable-eee-support-as-not-implemented.patch
+mptcp-change-first-as-a-parameter.patch
+mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch
+can-gs_usb-increase-max-interface-to-u8_max.patch