From: Greg Kroah-Hartman Date: Mon, 3 Nov 2025 01:38:13 +0000 (+0900) Subject: 6.1-stable patches X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=48cda75648d99fe6d386c648397348bc3935189d;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches 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 --- 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 index 0000000000..f6c7686e2a --- /dev/null +++ b/queue-6.1/can-gs_usb-increase-max-interface-to-u8_max.patch @@ -0,0 +1,117 @@ +From stable+bounces-189964-greg=kroah.com@vger.kernel.org Mon Oct 27 21:45:18 2025 +From: Celeste Liu +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 , Runcheng Lu , Vincent Mailhol , Marc Kleine-Budde +Message-ID: <20251027123230.661960-2-uwu@coelacanthus.name> + +From: Celeste Liu + +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 +Cc: stable@vger.kernel.org +Reviewed-by: Vincent Mailhol +Signed-off-by: Celeste Liu +Link: https://patch.msgid.link/20250930-gs-usb-max-if-v5-1-863330bf6666@coelacanthus.name +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..f758073742 --- /dev/null +++ b/queue-6.1/mptcp-change-first-as-a-parameter.patch @@ -0,0 +1,91 @@ +From stable+bounces-192078-greg=kroah.com@vger.kernel.org Mon Nov 3 04:00:09 2025 +From: Sasha Levin +Date: Sun, 2 Nov 2025 14:00:02 -0500 +Subject: mptcp: change 'first' as a parameter +To: stable@vger.kernel.org +Cc: Geliang Tang , Mat Martineau , Jakub Kicinski , Sasha Levin +Message-ID: <20251102190003.3553215-1-sashal@kernel.org> + +From: Geliang Tang + +[ 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 +Signed-off-by: Geliang Tang +Signed-off-by: Mat Martineau +Signed-off-by: Jakub Kicinski +Stable-dep-of: 27b0e701d387 ("mptcp: drop bogus optimization in __mptcp_check_push()") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..3874418449 --- /dev/null +++ b/queue-6.1/mptcp-drop-bogus-optimization-in-__mptcp_check_push.patch @@ -0,0 +1,109 @@ +From stable+bounces-192079-greg=kroah.com@vger.kernel.org Mon Nov 3 04:00:17 2025 +From: Sasha Levin +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 , Geliang Tang , Mat Martineau , "Matthieu Baerts (NGI0)" , Jakub Kicinski , Sasha Levin +Message-ID: <20251102190003.3553215-2-sashal@kernel.org> + +From: Paolo Abeni + +[ 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 +Reviewed-by: Geliang Tang +Tested-by: Geliang Tang +Reviewed-by: Mat Martineau +Signed-off-by: Matthieu Baerts (NGI0) +Link: https://patch.msgid.link/20251028-net-mptcp-send-timeout-v1-1-38ffff5a9ec8@kernel.org +Signed-off-by: Jakub Kicinski +[ split upstream __subflow_push_pending change across __mptcp_push_pending and __mptcp_subflow_push_pending ] +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..24a769f28d --- /dev/null +++ b/queue-6.1/net-phy-dp83867-disable-eee-support-as-not-implemented.patch @@ -0,0 +1,55 @@ +From stable+bounces-192086-greg=kroah.com@vger.kernel.org Mon Nov 3 05:15:36 2025 +From: Sasha Levin +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 , Andrew Lunn , Jakub Kicinski , Sasha Levin +Message-ID: <20251102201527.3587707-1-sashal@kernel.org> + +From: Emanuele Ghidoli + +[ 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 +Reviewed-by: Andrew Lunn +Link: https://patch.msgid.link/20251023144857.529566-1-ghidoliemanuele@gmail.com +Signed-off-by: Jakub Kicinski +[ replaced phy_disable_eee() call with direct eee_broken_modes assignment ] +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..409bb82fa1 --- /dev/null +++ b/queue-6.1/reapply-revert-drm-amd-display-enable-freesync-video-mode-by-default.patch @@ -0,0 +1,74 @@ +From 8c227a5050c07450c4585832a9a35659b39c4bf1 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 27 Feb 2024 13:08:12 -0500 +Subject: Reapply "Revert drm/amd/display: Enable Freesync Video Mode by default" + +From: Alex Deucher + +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 +Signed-off-by: Alex Deucher +[ 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 +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..11c45a0390 --- /dev/null +++ b/queue-6.1/s390-pci-restore-irq-unconditionally-for-the-zpci-device.patch @@ -0,0 +1,87 @@ +From stable+bounces-192102-greg=kroah.com@vger.kernel.org Mon Nov 3 08:43:42 2025 +From: Sasha Levin +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 , stable@vger.kernnel.org, Niklas Schnelle , Matthew Rosato , Heiko Carstens , Sasha Levin +Message-ID: <20251102234336.3659237-1-sashal@kernel.org> + +From: Farhan Ali + +[ 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 +Reviewed-by: Matthew Rosato +Signed-off-by: Farhan Ali +Signed-off-by: Heiko Carstens +[ adjusted bitfield context ] +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + 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; + } + diff --git a/queue-6.1/series b/queue-6.1/series index 6734977623..fb1e12d65b 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -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