From nobody Wed Feb 11 03:02:43 2026 Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net [185.136.64.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D546C38885C for ; Tue, 10 Feb 2026 16:28:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.64.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770740914; cv=none; b=DMx+KF/VPLMzNU/gazeTK+f4mbj0pmkJBIrsb3XQPvSV2aebz21yz0glygZ2r7qRW0kyaKM4rGI0z9Ef+SH7IkmnooMv5vA8KFzyCYCFv5v18r0t29OYJGLFfhIuYymKbApC6uw+6VGWPH3+ht8AoAKJ9zHX9fKY3+N6jzQKtaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770740914; c=relaxed/simple; bh=sXhiHZI8mZNgaETEribil7t3+7ffWQhDIkyHb1maeag=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QGoYVbqgka/pghyPQW9Eo9l0BwLrjUDNheAPOxX5iviucmSL4HlUVyjYAOjVSURqAL9bwBqXx9WR+sx+9EU+dbukViNSGdCkqunihaYnlJgCxQEDi3dRP9sK06/hWPasVH8Szwgz6/AEHMM3MAxSQ0ig5KoHs3/HZc12dOn2QRQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (2048-bit key) header.d=siemens.com header.i=florian.bezdeka@siemens.com header.b=BD7WBtmG; arc=none smtp.client-ip=185.136.64.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=siemens.com header.i=florian.bezdeka@siemens.com header.b="BD7WBtmG" Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 20260210162820c10ca5a42800020791 for ; Tue, 10 Feb 2026 17:28:20 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=florian.bezdeka@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=Ag+Cq1k6g10bvY3OzWqdpR/d9e2z2DN2pf65+hTvlr8=; b=BD7WBtmGTpMp/fh+Fk4hZkgs9F6Gdlr/YcgQZmHQ4Q3t3VX5lBMhVZx3gCpfsZVzDItC4A zUSp7INR5ACKSAIcl7U0qvgh49ZGs2FezZJVjgKyOKjd01tMCWBE3ybIygkx/QlvnU9aNBaT zL9V5H7fnqOjVrA3Yt8vrB8Yejteh9IfXkyA0hEyjDJAh+4xBDYuWDj0VGScuwnF8d3L6fbl cU5sF7atUCAnPsv9psAksHFSaf2w0mFiS0kwY0EItrpwDMZglGhm9cfnDPuYtPQHJe8+Y3We r09oKlSiKT0jqodCne1qWXoWJJvzcuzEfDhTQh/SeZi4pVPZ6sgcGt7A==; From: Florian Bezdeka Date: Tue, 10 Feb 2026 17:28:14 +0100 Subject: [PATCH net-next 1/2] net: stmmac: intel: Fix IRQ vector leak Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260210-flo-net-stmmac-default-affinity-core-v1-1-4e76612444e1@siemens.com> References: <20260210-flo-net-stmmac-default-affinity-core-v1-0-4e76612444e1@siemens.com> In-Reply-To: <20260210-flo-net-stmmac-default-affinity-core-v1-0-4e76612444e1@siemens.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , Ong Boon Leong , Voon Weifeng Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Florian Bezdeka X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-68982:519-21489:flowmailer The IRQ vectors allocated in stmmac_config_multi_msi() or stmmac_config_single_msi() where never cleaned up. Fixes: b42446b9b37b ("stmmac: intel: add support for multi-vector msi and m= si-x") Signed-off-by: Florian Bezdeka --- drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c b/drivers/ne= t/ethernet/stmicro/stmmac/dwmac-intel.c index aad1be1ec4c11c3da8a1f56cdc200250b7f2d1d9..48e6d61064bd57afe90d3b83cbb= 3f2fe5351166a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c @@ -1327,6 +1327,7 @@ static int intel_eth_pci_probe(struct pci_dev *pdev, err_alloc_irq: clk_disable_unprepare(plat->stmmac_clk); clk_unregister_fixed_rate(plat->stmmac_clk); + pci_free_irq_vectors(pdev); return ret; } =20 @@ -1346,6 +1347,7 @@ static void intel_eth_pci_remove(struct pci_dev *pdev) =20 clk_disable_unprepare(priv->plat->stmmac_clk); clk_unregister_fixed_rate(priv->plat->stmmac_clk); + pci_free_irq_vectors(pdev); } =20 #define PCI_DEVICE_ID_INTEL_QUARK 0x0937 --=20 2.53.0 From nobody Wed Feb 11 03:02:43 2026 Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net [185.136.64.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46873389471 for ; Tue, 10 Feb 2026 16:28:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.64.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770740912; cv=none; b=N+T8VG1L2wBxrt52dD9Zl+IObgzymbw5X0XE2kssfHu8Lk8LjHE3+7BlpL9bYQmM2YS21INvPR4qYOw5ADW8IuoVQMPwPZPAA29bHjUQe8Hot0RpU5Korj16Sw8aHV3oWZ+Cwr9AKXuiVyuqXg26PtgW9x1DlRnjt4hNVLYhlUE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770740912; c=relaxed/simple; bh=9dVHwjmKyNlHsudCe1oojVY9+0RY8+Xw1de9VCNal9E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DkJJGyHb/UrfFEEHJnvcHrJRfNryWtPvjkFnrhrZd54V6UHkZw4wUGplHifn/12nYGoB2zLBmSf5dkEtQ5/J4iexCQdCJOArvO++RjPy4PTsXrBR8wWChrdQG0eTsVB0rGmFEsJYoF/qwB07lCNmE2VtMCyT58RBFAEWskOiZMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (2048-bit key) header.d=siemens.com header.i=florian.bezdeka@siemens.com header.b=iMabUuwe; arc=none smtp.client-ip=185.136.64.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=siemens.com header.i=florian.bezdeka@siemens.com header.b="iMabUuwe" Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 20260210162820f93b3c2dc600020716 for ; Tue, 10 Feb 2026 17:28:20 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=florian.bezdeka@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=2RZd2m1rYBzhb6+CUkIcXbLtyHMbbg4kS3QJRa4t3tA=; b=iMabUuweSHnhFWaYI+3wNaaJ+BRwEI/KPAbztyzS8JD3v4ZYDbtjHJb/7NlKj3SleKSbmm Y1O23MoVjO5K4hU1Z8vfYIB3RMGHDf5bZfRw3hU6um2BPgwzTJAnBBAuLyx2vHy/bwIXXB90 qEtq4I6mHYhiDlrPOtMMxhpRNsRSXW01A+pI7dvHtsQJH0gjGRZp3b/Bz1ItDd+MU5OL0BX3 v11jJpgJXquLKC/JCLqvF6DMik9kIL126+fTQrtOzUHe0qO0mTpyVjomldQQPGbgGQP93jf2 3AlMJ08R1RDQJGTuNWSQAohxPS6rFZ0dGyGyPB1yMC6dbUUywXlzLQfQ==; From: Florian Bezdeka Date: Tue, 10 Feb 2026 17:28:15 +0100 Subject: [PATCH net-next 2/2] net: stmmac: Use cpumask_local_spread() for IRQ spreading Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260210-flo-net-stmmac-default-affinity-core-v1-2-4e76612444e1@siemens.com> References: <20260210-flo-net-stmmac-default-affinity-core-v1-0-4e76612444e1@siemens.com> In-Reply-To: <20260210-flo-net-stmmac-default-affinity-core-v1-0-4e76612444e1@siemens.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , Ong Boon Leong , Voon Weifeng Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Florian Bezdeka X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-68982:519-21489:flowmailer The stmmac driver was previously implementing a self-made IRQ spreading mechanism based on num_online_cpus(). By migrating to cpumask_local_spread() the spreading gets NUMA aware. In addition, most drivers seem to use cpumask_local_spread(), aligning / harmonizing a bit more. Signed-off-by: Florian Bezdeka --- drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 ++ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 41 +++++++++++++++++++= ---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/eth= ernet/stmicro/stmmac/stmmac.h index 012b0a477255df73b2e145b62e09eeb2133e827a..52b75df2b71239aab5b1d5138b7= 8d6c5310b9c5b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h @@ -329,6 +329,8 @@ struct stmmac_priv { int sfty_ue_irq; int rx_irq[MTL_MAX_RX_QUEUES]; int tx_irq[MTL_MAX_TX_QUEUES]; + cpumask_var_t rx_affinity[MTL_MAX_RX_QUEUES]; + cpumask_var_t tx_affinity[MTL_MAX_TX_QUEUES]; /*irq name */ char int_name_mac[IFNAMSIZ + 9]; char int_name_wol[IFNAMSIZ + 9]; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/ne= t/ethernet/stmicro/stmmac/stmmac_main.c index a379221b96a348e20f2afb0f44540cfba2f2477a..ddbfc0774143d0353c83988b2df= ffa75132bd0ee 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -3739,6 +3739,8 @@ static int stmmac_request_irq_multi_msi(struct net_de= vice *dev) enum request_irq_err irq_err; int irq_idx =3D 0; char *int_name; + int numa_node; + int cpu; int ret; int i; =20 @@ -3845,6 +3847,7 @@ static int stmmac_request_irq_multi_msi(struct net_de= vice *dev) } =20 /* Request Rx MSI irq */ + numa_node =3D dev_to_node(&priv->dev->dev); for (i =3D 0; i < priv->plat->rx_queues_to_use; i++) { if (i >=3D MTL_MAX_RX_QUEUES) break; @@ -3864,8 +3867,10 @@ static int stmmac_request_irq_multi_msi(struct net_d= evice *dev) irq_idx =3D i; goto irq_error; } - irq_set_affinity_hint(priv->rx_irq[i], - cpumask_of(i % num_online_cpus())); + + cpu =3D cpumask_local_spread(i, numa_node); + cpumask_set_cpu(cpu, priv->rx_affinity[i]); + irq_set_affinity_hint(priv->rx_irq[i], priv->rx_affinity[i]); } =20 /* Request Tx MSI irq */ @@ -3888,8 +3893,10 @@ static int stmmac_request_irq_multi_msi(struct net_d= evice *dev) irq_idx =3D i; goto irq_error; } - irq_set_affinity_hint(priv->tx_irq[i], - cpumask_of(i % num_online_cpus())); + + cpu =3D cpumask_local_spread(i, numa_node); + cpumask_set_cpu(cpu, priv->tx_affinity[i]); + irq_set_affinity_hint(priv->tx_irq[i], priv->tx_affinity[i]); } =20 return 0; @@ -7653,6 +7660,14 @@ struct plat_stmmacenet_data *stmmac_plat_dat_alloc(s= truct device *dev) } EXPORT_SYMBOL_GPL(stmmac_plat_dat_alloc); =20 +static void stmmac_free_affinity(cpumask_var_t *m, unsigned int n) +{ + unsigned int i; + + for (i =3D 0; i < n; i++) + free_cpumask_var(m[i]); +} + static int __stmmac_dvr_probe(struct device *device, struct plat_stmmacenet_data *plat_dat, struct stmmac_resources *res) @@ -7699,10 +7714,21 @@ static int __stmmac_dvr_probe(struct device *device, priv->sfty_irq =3D res->sfty_irq; priv->sfty_ce_irq =3D res->sfty_ce_irq; priv->sfty_ue_irq =3D res->sfty_ue_irq; - for (i =3D 0; i < MTL_MAX_RX_QUEUES; i++) + for (i =3D 0; i < MTL_MAX_RX_QUEUES; i++) { priv->rx_irq[i] =3D res->rx_irq[i]; - for (i =3D 0; i < MTL_MAX_TX_QUEUES; i++) + if (!zalloc_cpumask_var(&priv->rx_affinity[i], GFP_KERNEL)) { + stmmac_free_affinity(priv->rx_affinity, i); + return -ENOMEM; + } + } + for (i =3D 0; i < MTL_MAX_TX_QUEUES; i++) { priv->tx_irq[i] =3D res->tx_irq[i]; + if (!zalloc_cpumask_var(&priv->tx_affinity[i], GFP_KERNEL)) { + stmmac_free_affinity(priv->rx_affinity, MTL_MAX_RX_QUEUES); + stmmac_free_affinity(priv->tx_affinity, i); + return -ENOMEM; + } + } =20 if (!is_zero_ether_addr(res->mac)) eth_hw_addr_set(priv->dev, res->mac); @@ -8023,6 +8049,9 @@ void stmmac_dvr_remove(struct device *dev) pm_runtime_disable(dev); pm_runtime_put_noidle(dev); =20 + stmmac_free_affinity(priv->rx_affinity, MTL_MAX_RX_QUEUES); + stmmac_free_affinity(priv->tx_affinity, MTL_MAX_TX_QUEUES); + if (priv->plat->exit) priv->plat->exit(dev, priv->plat->bsp_priv); } --=20 2.53.0