Thread (5 messages) 5 messages, 5 authors, 2025-07-08

RE: [Intel-wired-lan] [PATCH] [v2] ethernet: intel: fix building with large NR_CPUS

From: Loktionov, Aleksandr <hidden>
Date: 2025-06-20 19:12:30
Also in: intel-wired-lan, lkml

-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Arnd Bergmann
Sent: Friday, June 20, 2025 7:31 PM
To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
Przemyslaw [off-list ref]; Andrew Lunn
[off-list ref]; David S. Miller [off-list ref]; Eric
Dumazet [off-list ref]; Jakub Kicinski [off-list ref]; Paolo
Abeni [off-list ref]
Cc: Arnd Bergmann <arnd@arndb.de>; Simon Horman <horms@kernel.org>;
Dr. David Alan Gilbert [off-list ref]; Loktionov, Aleksandr
[off-list ref]; Dawid Osuchowski
[off-list ref]; Jagielski, Jedrzej
[off-list ref]; Polchlopek, Mateusz
[off-list ref]; Kwapulinski, Piotr
[off-list ref]; Mrozowicz, SlawomirX
[off-list ref]; Martyna Szapar-Mudlaw
[off-list ref]; intel-wired-
lan@lists.osuosl.org; netdev@vger.kernel.org; linux-
kernel@vger.kernel.org
Subject: [Intel-wired-lan] [PATCH] [v2] ethernet: intel: fix building
with large NR_CPUS

From: Arnd Bergmann <arnd@arndb.de>

With large values of CONFIG_NR_CPUS, three Intel ethernet drivers fail
to compile like:

In function ‘i40e_free_q_vector’,
    inlined from ‘i40e_vsi_alloc_q_vectors’ at
drivers/net/ethernet/intel/i40e/i40e_main.c:12112:3:
  571 |         _compiletime_assert(condition, msg,
__compiletime_assert_, __COUNTER__)
include/linux/rcupdate.h:1084:17: note: in expansion of macro
‘BUILD_BUG_ON’
 1084 |                 BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >=
4096);    \
drivers/net/ethernet/intel/i40e/i40e_main.c:5113:9: note: in expansion
of macro ‘kfree_rcu’
 5113 |         kfree_rcu(q_vector, rcu);
      |         ^~~~~~~~~

The problem is that the 'rcu' member in 'q_vector' is too far from the
start of the structure. Move this member before the CPU mask instead,
in all three drivers.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Aleksandr Loktionov <redacted>
quoted hunk ↗ jump to hunk
---
v2: move rcu to just after the napi_struct [Alexander Lobakin]
---
 drivers/net/ethernet/intel/fm10k/fm10k.h | 3 ++-
 drivers/net/ethernet/intel/i40e/i40e.h   | 2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 ++-
 3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h
b/drivers/net/ethernet/intel/fm10k/fm10k.h
index 6119a4108838..65a2816142d9 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -189,13 +189,14 @@ struct fm10k_q_vector {
 	struct fm10k_ring_container rx, tx;

 	struct napi_struct napi;
+	struct rcu_head rcu;	/* to avoid race with update stats on free
*/
+
 	cpumask_t affinity_mask;
 	char name[IFNAMSIZ + 9];

 #ifdef CONFIG_DEBUG_FS
 	struct dentry *dbg_q_vector;
 #endif /* CONFIG_DEBUG_FS */
-	struct rcu_head rcu;	/* to avoid race with update stats on free
*/

 	/* for dynamic allocation of rings associated with this
q_vector */
 	struct fm10k_ring ring[] ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h
b/drivers/net/ethernet/intel/i40e/i40e.h
index 54d5fdc303ca..c429252859d3 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -946,6 +946,7 @@ struct i40e_q_vector {
 	u16 reg_idx;		/* register index of the interrupt */

 	struct napi_struct napi;
+	struct rcu_head rcu;	/* to avoid race with update stats on free
*/

 	struct i40e_ring_container rx;
 	struct i40e_ring_container tx;
@@ -956,7 +957,6 @@ struct i40e_q_vector {
 	cpumask_t affinity_mask;
 	struct irq_affinity_notify affinity_notify;

-	struct rcu_head rcu;	/* to avoid race with update stats on free
*/
 	char name[I40E_INT_NAME_STR_LEN];
 	bool arm_wb_state;
 	bool in_busy_poll;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index c6772cd2d802..3f9521d4e899 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -507,9 +507,10 @@ struct ixgbe_q_vector {
 	struct ixgbe_ring_container rx, tx;

 	struct napi_struct napi;
+	struct rcu_head rcu;	/* to avoid race with update stats on free
*/
+
 	cpumask_t affinity_mask;
 	int numa_node;
-	struct rcu_head rcu;	/* to avoid race with update stats on free
*/
 	char name[IFNAMSIZ + 9];

 	/* for dynamic allocation of rings associated with this
q_vector */
--
2.39.5
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help