From: Arnd Bergmann <[email protected]> Date: Fri, 20 Jun 2025 13:11:17 +0200
> From: Arnd Bergmann <[email protected]> > > 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 <[email protected]> > --- > drivers/net/ethernet/intel/fm10k/fm10k.h | 2 +- > drivers/net/ethernet/intel/i40e/i40e.h | 2 +- > drivers/net/ethernet/intel/ixgbe/ixgbe.h | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h > b/drivers/net/ethernet/intel/fm10k/fm10k.h > index 6119a4108838..757a6fd81b7b 100644 > --- a/drivers/net/ethernet/intel/fm10k/fm10k.h > +++ b/drivers/net/ethernet/intel/fm10k/fm10k.h > @@ -187,6 +187,7 @@ struct fm10k_q_vector { > u32 __iomem *itr; /* pointer to ITR register for this vector */ > u16 v_idx; /* index of q_vector within interface array */ > struct fm10k_ring_container rx, tx; > + struct rcu_head rcu; /* to avoid race with update stats on free */ > > struct napi_struct napi; I'd place it *after* ::napi as the latter is hot and better to still be near rx/tx etc. Same for the rest of the drivers. Thanks, Olek
