Skip to content

Commit deab38f

Browse files
azaki1kuba-moo
authored andcommitted
idpf: use napi's irq affinity
Delete the driver CPU affinity info and use the core's napi config instead. Signed-off-by: Ahmed Zaki <ahmed.zaki@intel.com> Link: https://patch.msgid.link/20250224232228.990783-6-ahmed.zaki@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 4063af2 commit deab38f

File tree

3 files changed

+10
-19
lines changed

3 files changed

+10
-19
lines changed

drivers/net/ethernet/intel/idpf/idpf_lib.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,7 @@ static int idpf_cfg_netdev(struct idpf_vport *vport)
814814
netdev->hw_features |= dflt_features | offloads;
815815
netdev->hw_enc_features |= dflt_features | offloads;
816816
idpf_set_ethtool_ops(netdev);
817+
netif_set_affinity_auto(netdev);
817818
SET_NETDEV_DEV(netdev, &adapter->pdev->dev);
818819

819820
/* carrier off on init to avoid Tx hangs */

drivers/net/ethernet/intel/idpf/idpf_txrx.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3551,8 +3551,6 @@ void idpf_vport_intr_rel(struct idpf_vport *vport)
35513551
q_vector->tx = NULL;
35523552
kfree(q_vector->rx);
35533553
q_vector->rx = NULL;
3554-
3555-
free_cpumask_var(q_vector->affinity_mask);
35563554
}
35573555

35583556
kfree(vport->q_vectors);
@@ -3579,8 +3577,6 @@ static void idpf_vport_intr_rel_irq(struct idpf_vport *vport)
35793577
vidx = vport->q_vector_idxs[vector];
35803578
irq_num = adapter->msix_entries[vidx].vector;
35813579

3582-
/* clear the affinity_mask in the IRQ descriptor */
3583-
irq_set_affinity_hint(irq_num, NULL);
35843580
kfree(free_irq(irq_num, q_vector));
35853581
}
35863582
}
@@ -3768,8 +3764,6 @@ static int idpf_vport_intr_req_irq(struct idpf_vport *vport)
37683764
"Request_irq failed, error: %d\n", err);
37693765
goto free_q_irqs;
37703766
}
3771-
/* assign the mask for this irq */
3772-
irq_set_affinity_hint(irq_num, q_vector->affinity_mask);
37733767
}
37743768

37753769
return 0;
@@ -4181,7 +4175,8 @@ static int idpf_vport_intr_init_vec_idx(struct idpf_vport *vport)
41814175
static void idpf_vport_intr_napi_add_all(struct idpf_vport *vport)
41824176
{
41834177
int (*napi_poll)(struct napi_struct *napi, int budget);
4184-
u16 v_idx;
4178+
u16 v_idx, qv_idx;
4179+
int irq_num;
41854180

41864181
if (idpf_is_queue_model_split(vport->txq_model))
41874182
napi_poll = idpf_vport_splitq_napi_poll;
@@ -4190,12 +4185,12 @@ static void idpf_vport_intr_napi_add_all(struct idpf_vport *vport)
41904185

41914186
for (v_idx = 0; v_idx < vport->num_q_vectors; v_idx++) {
41924187
struct idpf_q_vector *q_vector = &vport->q_vectors[v_idx];
4188+
qv_idx = vport->q_vector_idxs[v_idx];
4189+
irq_num = vport->adapter->msix_entries[qv_idx].vector;
41934190

4194-
netif_napi_add(vport->netdev, &q_vector->napi, napi_poll);
4195-
4196-
/* only set affinity_mask if the CPU is online */
4197-
if (cpu_online(v_idx))
4198-
cpumask_set_cpu(v_idx, q_vector->affinity_mask);
4191+
netif_napi_add_config(vport->netdev, &q_vector->napi,
4192+
napi_poll, v_idx);
4193+
netif_napi_set_irq(&q_vector->napi, irq_num);
41994194
}
42004195
}
42014196

@@ -4239,9 +4234,6 @@ int idpf_vport_intr_alloc(struct idpf_vport *vport)
42394234
q_vector->rx_intr_mode = IDPF_ITR_DYNAMIC;
42404235
q_vector->rx_itr_idx = VIRTCHNL2_ITR_IDX_0;
42414236

4242-
if (!zalloc_cpumask_var(&q_vector->affinity_mask, GFP_KERNEL))
4243-
goto error;
4244-
42454237
q_vector->tx = kcalloc(txqs_per_vector, sizeof(*q_vector->tx),
42464238
GFP_KERNEL);
42474239
if (!q_vector->tx)

drivers/net/ethernet/intel/idpf/idpf_txrx.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ struct idpf_intr_reg {
382382
* @rx_intr_mode: Dynamic ITR or not
383383
* @rx_itr_idx: RX ITR index
384384
* @v_idx: Vector index
385-
* @affinity_mask: CPU affinity mask
386385
*/
387386
struct idpf_q_vector {
388387
__cacheline_group_begin_aligned(read_mostly);
@@ -419,13 +418,12 @@ struct idpf_q_vector {
419418
__cacheline_group_begin_aligned(cold);
420419
u16 v_idx;
421420

422-
cpumask_var_t affinity_mask;
423421
__cacheline_group_end_aligned(cold);
424422
};
425423
libeth_cacheline_set_assert(struct idpf_q_vector, 120,
426424
24 + sizeof(struct napi_struct) +
427425
2 * sizeof(struct dim),
428-
8 + sizeof(cpumask_var_t));
426+
8);
429427

430428
struct idpf_rx_queue_stats {
431429
u64_stats_t packets;
@@ -921,7 +919,7 @@ static inline int idpf_q_vector_to_mem(const struct idpf_q_vector *q_vector)
921919
if (!q_vector)
922920
return NUMA_NO_NODE;
923921

924-
cpu = cpumask_first(q_vector->affinity_mask);
922+
cpu = cpumask_first(&q_vector->napi.config->affinity_mask);
925923

926924
return cpu < nr_cpu_ids ? cpu_to_mem(cpu) : NUMA_NO_NODE;
927925
}

0 commit comments

Comments
 (0)