From: Greg Kroah-Hartman Date: Mon, 9 Mar 2026 15:20:19 +0000 (+0100) Subject: 6.19-stable patches X-Git-Tag: v6.19.7~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=51552d92875361c674906ea1fc97e8926a39ff8c;p=thirdparty%2Fkernel%2Fstable-queue.git 6.19-stable patches added patches: drm-amd-display-use-gfp_atomic-in-dc_create_stream_for_sink.patch net-stmmac-remove-support-for-lpi_intr_o.patch --- diff --git a/queue-6.19/drm-amd-display-use-gfp_atomic-in-dc_create_stream_for_sink.patch b/queue-6.19/drm-amd-display-use-gfp_atomic-in-dc_create_stream_for_sink.patch new file mode 100644 index 0000000000..6f7a4bdae0 --- /dev/null +++ b/queue-6.19/drm-amd-display-use-gfp_atomic-in-dc_create_stream_for_sink.patch @@ -0,0 +1,37 @@ +From 28dfe4317541e57fe52f9a290394cd29c348228b Mon Sep 17 00:00:00 2001 +From: Natalie Vock +Date: Mon, 23 Feb 2026 12:45:37 +0100 +Subject: drm/amd/display: Use GFP_ATOMIC in dc_create_stream_for_sink + +From: Natalie Vock + +commit 28dfe4317541e57fe52f9a290394cd29c348228b upstream. + +This can be called while preemption is disabled, for example by +dcn32_internal_validate_bw which is called with the FPU active. + +Fixes "BUG: scheduling while atomic" messages I encounter on my Navi31 +machine. + +Signed-off-by: Natalie Vock +Signed-off-by: Alex Deucher +(cherry picked from commit b42dae2ebc5c84a68de63ec4ffdfec49362d53f1) +Cc: stable@vger.kernel.org +[ Context ] +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +@@ -169,7 +169,7 @@ struct dc_stream_state *dc_create_stream + if (sink == NULL) + return NULL; + +- stream = kzalloc(sizeof(struct dc_stream_state), GFP_KERNEL); ++ stream = kzalloc(sizeof(struct dc_stream_state), GFP_ATOMIC); + if (stream == NULL) + goto alloc_fail; + diff --git a/queue-6.19/net-stmmac-remove-support-for-lpi_intr_o.patch b/queue-6.19/net-stmmac-remove-support-for-lpi_intr_o.patch new file mode 100644 index 0000000000..ef88d71b05 --- /dev/null +++ b/queue-6.19/net-stmmac-remove-support-for-lpi_intr_o.patch @@ -0,0 +1,211 @@ +From 14eb64db8ff07b58a35b98375f446d9e20765674 Mon Sep 17 00:00:00 2001 +From: "Russell King (Oracle)" +Date: Tue, 3 Feb 2026 16:50:41 +0000 +Subject: net: stmmac: remove support for lpi_intr_o + +From: Russell King (Oracle) + +commit 14eb64db8ff07b58a35b98375f446d9e20765674 upstream. + +The dwmac databook for v3.74a states that lpi_intr_o is a sideband +signal which should be used to ungate the application clock, and this +signal is synchronous to the receive clock. The receive clock can run +at 2.5, 25 or 125MHz depending on the media speed, and can stop under +the control of the link partner. This means that the time it takes to +clear is dependent on the negotiated media speed, and thus can be 8, +40, or 400ns after reading the LPI control and status register. + +It has been observed with some aggressive link partners, this clock +can stop while lpi_intr_o is still asserted, meaning that the signal +remains asserted for an indefinite period that the local system has +no direct control over. + +The LPI interrupts will still be signalled through the main interrupt +path in any case, and this path is not dependent on the receive clock. + +This, since we do not gate the application clock, and the chances of +adding clock gating in the future are slim due to the clocks being +ill-defined, lpi_intr_o serves no useful purpose. Remove the code which +requests the interrupt, and all associated code. + +Reported-by: Ovidiu Panait +Tested-by: Ovidiu Panait # Renesas RZ/V2H board +Signed-off-by: Russell King (Oracle) +Link: https://patch.msgid.link/E1vnJbt-00000007YYN-28nm@rmk-PC.armlinux.org.uk +Signed-off-by: Jakub Kicinski +Signed-off-by: Ovidiu Panait +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/stmicro/stmmac/common.h | 1 + drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 4 -- + drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 7 --- + drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 - + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 36 ------------------ + drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 8 ---- + include/linux/stmmac.h | 1 + 7 files changed, 59 deletions(-) + +--- a/drivers/net/ethernet/stmicro/stmmac/common.h ++++ b/drivers/net/ethernet/stmicro/stmmac/common.h +@@ -390,7 +390,6 @@ enum request_irq_err { + REQ_IRQ_ERR_SFTY, + REQ_IRQ_ERR_SFTY_UE, + REQ_IRQ_ERR_SFTY_CE, +- REQ_IRQ_ERR_LPI, + REQ_IRQ_ERR_WOL, + REQ_IRQ_ERR_MAC, + REQ_IRQ_ERR_NO, +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +@@ -719,7 +719,6 @@ static int intel_mgbe_common_data(struct + + /* Setup MSI vector offset specific to Intel mGbE controller */ + plat->msi_mac_vec = 29; +- plat->msi_lpi_vec = 28; + plat->msi_sfty_ce_vec = 27; + plat->msi_sfty_ue_vec = 26; + plat->msi_rx_base_vec = 0; +@@ -1177,8 +1176,6 @@ static int stmmac_config_multi_msi(struc + res->irq = pci_irq_vector(pdev, plat->msi_mac_vec); + if (plat->msi_wol_vec < STMMAC_MSI_VEC_MAX) + res->wol_irq = pci_irq_vector(pdev, plat->msi_wol_vec); +- if (plat->msi_lpi_vec < STMMAC_MSI_VEC_MAX) +- res->lpi_irq = pci_irq_vector(pdev, plat->msi_lpi_vec); + if (plat->msi_sfty_ce_vec < STMMAC_MSI_VEC_MAX) + res->sfty_ce_irq = pci_irq_vector(pdev, plat->msi_sfty_ce_vec); + if (plat->msi_sfty_ue_vec < STMMAC_MSI_VEC_MAX) +@@ -1294,7 +1291,6 @@ static int intel_eth_pci_probe(struct pc + */ + plat->msi_mac_vec = STMMAC_MSI_VEC_MAX; + plat->msi_wol_vec = STMMAC_MSI_VEC_MAX; +- plat->msi_lpi_vec = STMMAC_MSI_VEC_MAX; + plat->msi_sfty_ce_vec = STMMAC_MSI_VEC_MAX; + plat->msi_sfty_ue_vec = STMMAC_MSI_VEC_MAX; + plat->msi_rx_base_vec = STMMAC_MSI_VEC_MAX; +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +@@ -443,13 +443,6 @@ static int loongson_dwmac_dt_config(stru + res->wol_irq = res->irq; + } + +- res->lpi_irq = of_irq_get_byname(np, "eth_lpi"); +- if (res->lpi_irq < 0) { +- dev_err(&pdev->dev, "IRQ eth_lpi not found\n"); +- ret = -ENODEV; +- goto err_put_node; +- } +- + ret = device_get_phy_mode(&pdev->dev); + if (ret < 0) { + dev_err(&pdev->dev, "phy_mode not found\n"); +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h +@@ -31,7 +31,6 @@ struct stmmac_resources { + void __iomem *addr; + u8 mac[ETH_ALEN]; + int wol_irq; +- int lpi_irq; + int irq; + int sfty_irq; + int sfty_ce_irq; +@@ -297,7 +296,6 @@ struct stmmac_priv { + int wol_irq; + u32 gmii_address_bus_config; + struct timer_list eee_ctrl_timer; +- int lpi_irq; + u32 tx_lpi_timer; + bool tx_lpi_clk_stop; + bool eee_enabled; +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +@@ -3712,10 +3712,6 @@ static void stmmac_free_irq(struct net_d + free_irq(priv->sfty_ce_irq, dev); + fallthrough; + case REQ_IRQ_ERR_SFTY_CE: +- if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) +- free_irq(priv->lpi_irq, dev); +- fallthrough; +- case REQ_IRQ_ERR_LPI: + if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) + free_irq(priv->wol_irq, dev); + fallthrough; +@@ -3773,24 +3769,6 @@ static int stmmac_request_irq_multi_msi( + } + } + +- /* Request the LPI IRQ in case of another line +- * is used for LPI +- */ +- if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) { +- int_name = priv->int_name_lpi; +- sprintf(int_name, "%s:%s", dev->name, "lpi"); +- ret = request_irq(priv->lpi_irq, +- stmmac_mac_interrupt, +- 0, int_name, dev); +- if (unlikely(ret < 0)) { +- netdev_err(priv->dev, +- "%s: alloc lpi MSI %d (error: %d)\n", +- __func__, priv->lpi_irq, ret); +- irq_err = REQ_IRQ_ERR_LPI; +- goto irq_error; +- } +- } +- + /* Request the common Safety Feature Correctible/Uncorrectible + * Error line in case of another line is used + */ +@@ -3930,19 +3908,6 @@ static int stmmac_request_irq_single(str + } + } + +- /* Request the IRQ lines */ +- if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) { +- ret = request_irq(priv->lpi_irq, stmmac_interrupt, +- IRQF_SHARED, dev->name, dev); +- if (unlikely(ret < 0)) { +- netdev_err(priv->dev, +- "%s: ERROR: allocating the LPI IRQ %d (%d)\n", +- __func__, priv->lpi_irq, ret); +- irq_err = REQ_IRQ_ERR_LPI; +- goto irq_error; +- } +- } +- + /* Request the common Safety Feature Correctible/Uncorrectible + * Error line in case of another line is used + */ +@@ -7709,7 +7674,6 @@ static int __stmmac_dvr_probe(struct dev + + priv->dev->irq = res->irq; + priv->wol_irq = res->wol_irq; +- priv->lpi_irq = res->lpi_irq; + priv->sfty_irq = res->sfty_irq; + priv->sfty_ce_irq = res->sfty_ce_irq; + priv->sfty_ue_irq = res->sfty_ue_irq; +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -725,14 +725,6 @@ int stmmac_get_platform_resources(struct + stmmac_res->wol_irq = stmmac_res->irq; + } + +- stmmac_res->lpi_irq = +- platform_get_irq_byname_optional(pdev, "eth_lpi"); +- if (stmmac_res->lpi_irq < 0) { +- if (stmmac_res->lpi_irq == -EPROBE_DEFER) +- return -EPROBE_DEFER; +- dev_info(&pdev->dev, "IRQ eth_lpi not found\n"); +- } +- + stmmac_res->sfty_irq = + platform_get_irq_byname_optional(pdev, "sfty"); + if (stmmac_res->sfty_irq < 0) { +--- a/include/linux/stmmac.h ++++ b/include/linux/stmmac.h +@@ -299,7 +299,6 @@ struct plat_stmmacenet_data { + int int_snapshot_num; + int msi_mac_vec; + int msi_wol_vec; +- int msi_lpi_vec; + int msi_sfty_ce_vec; + int msi_sfty_ue_vec; + int msi_rx_base_vec; diff --git a/queue-6.19/series b/queue-6.19/series index 0977bb9f2c..3080ca1d4c 100644 --- a/queue-6.19/series +++ b/queue-6.19/series @@ -172,3 +172,5 @@ arm-clean-up-the-memset64-c-wrapper.patch platform-x86-hp-bioscfg-support-allocations-of-larger-data.patch bluetooth-fix-cis-host-feature-condition.patch ipmi-fix-use-after-free-and-list-corruption-on-sender-error.patch +net-stmmac-remove-support-for-lpi_intr_o.patch +drm-amd-display-use-gfp_atomic-in-dc_create_stream_for_sink.patch