Delete the driver CPU affinity info and use the core's napi config
instead.

Signed-off-by: Ahmed Zaki <ahmed.z...@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h      |  3 --
 drivers/net/ethernet/intel/ice/ice_base.c |  7 +---
 drivers/net/ethernet/intel/ice/ice_lib.c  |  6 ---
 drivers/net/ethernet/intel/ice/ice_main.c | 47 ++---------------------
 4 files changed, 5 insertions(+), 58 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h 
b/drivers/net/ethernet/intel/ice/ice.h
index 2a6de2115193..9a5f8919d1a4 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -475,9 +475,6 @@ struct ice_q_vector {
        struct ice_ring_container rx;
        struct ice_ring_container tx;
 
-       cpumask_t affinity_mask;
-       struct irq_affinity_notify affinity_notify;
-
        struct ice_channel *ch;
 
        char name[ICE_INT_NAME_STR_LEN];
diff --git a/drivers/net/ethernet/intel/ice/ice_base.c 
b/drivers/net/ethernet/intel/ice/ice_base.c
index 0e862f20427a..5901795f3b62 100644
--- a/drivers/net/ethernet/intel/ice/ice_base.c
+++ b/drivers/net/ethernet/intel/ice/ice_base.c
@@ -147,10 +147,6 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 
v_idx)
        q_vector->reg_idx = q_vector->irq.index;
        q_vector->vf_reg_idx = q_vector->irq.index;
 
-       /* only set affinity_mask if the CPU is online */
-       if (cpu_online(v_idx))
-               cpumask_set_cpu(v_idx, &q_vector->affinity_mask);
-
        /* This will not be called in the driver load path because the netdev
         * will not be created yet. All other cases with register the NAPI
         * handler here (i.e. resume, reset/rebuild, etc.)
@@ -276,7 +272,8 @@ static void ice_cfg_xps_tx_ring(struct ice_tx_ring *ring)
        if (test_and_set_bit(ICE_TX_XPS_INIT_DONE, ring->xps_state))
                return;
 
-       netif_set_xps_queue(ring->netdev, &ring->q_vector->affinity_mask,
+       netif_set_xps_queue(ring->netdev,
+                           &ring->q_vector->napi.config->affinity_mask,
                            ring->q_index);
 }
 
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c 
b/drivers/net/ethernet/intel/ice/ice_lib.c
index 916b072ab718..46a2762dd083 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -2605,12 +2605,6 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
                      vsi->q_vectors[i]->num_ring_rx))
                        continue;
 
-               /* clear the affinity notifier in the IRQ descriptor */
-               if (!IS_ENABLED(CONFIG_RFS_ACCEL))
-                       irq_set_affinity_notifier(irq_num, NULL);
-
-               /* clear the affinity_hint in the IRQ descriptor */
-               irq_update_affinity_hint(irq_num, NULL);
                synchronize_irq(irq_num);
                devm_free_irq(ice_pf_to_dev(pf), irq_num, vsi->q_vectors[i]);
        }
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c 
b/drivers/net/ethernet/intel/ice/ice_main.c
index d7037de29545..094403f2bf55 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2527,34 +2527,6 @@ int ice_schedule_reset(struct ice_pf *pf, enum 
ice_reset_req reset)
        return 0;
 }
 
-/**
- * ice_irq_affinity_notify - Callback for affinity changes
- * @notify: context as to what irq was changed
- * @mask: the new affinity mask
- *
- * This is a callback function used by the irq_set_affinity_notifier function
- * so that we may register to receive changes to the irq affinity masks.
- */
-static void
-ice_irq_affinity_notify(struct irq_affinity_notify *notify,
-                       const cpumask_t *mask)
-{
-       struct ice_q_vector *q_vector =
-               container_of(notify, struct ice_q_vector, affinity_notify);
-
-       cpumask_copy(&q_vector->affinity_mask, mask);
-}
-
-/**
- * ice_irq_affinity_release - Callback for affinity notifier release
- * @ref: internal core kernel usage
- *
- * This is a callback function used by the irq_set_affinity_notifier function
- * to inform the current notification subscriber that they will no longer
- * receive notifications.
- */
-static void ice_irq_affinity_release(struct kref __always_unused *ref) {}
-
 /**
  * ice_vsi_ena_irq - Enable IRQ for the given VSI
  * @vsi: the VSI being configured
@@ -2618,19 +2590,6 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, 
char *basename)
                                   err);
                        goto free_q_irqs;
                }
-
-               /* register for affinity change notifications */
-               if (!IS_ENABLED(CONFIG_RFS_ACCEL)) {
-                       struct irq_affinity_notify *affinity_notify;
-
-                       affinity_notify = &q_vector->affinity_notify;
-                       affinity_notify->notify = ice_irq_affinity_notify;
-                       affinity_notify->release = ice_irq_affinity_release;
-                       irq_set_affinity_notifier(irq_num, affinity_notify);
-               }
-
-               /* assign the mask for this irq */
-               irq_update_affinity_hint(irq_num, &q_vector->affinity_mask);
        }
 
        err = ice_set_cpu_rx_rmap(vsi);
@@ -2646,9 +2605,6 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char 
*basename)
 free_q_irqs:
        while (vector--) {
                irq_num = vsi->q_vectors[vector]->irq.virq;
-               if (!IS_ENABLED(CONFIG_RFS_ACCEL))
-                       irq_set_affinity_notifier(irq_num, NULL);
-               irq_update_affinity_hint(irq_num, NULL);
                devm_free_irq(dev, irq_num, &vsi->q_vectors[vector]);
        }
        return err;
@@ -3689,6 +3645,9 @@ void ice_set_netdev_features(struct net_device *netdev)
         */
        netdev->hw_features |= NETIF_F_RXFCS;
 
+       /* Allow core to manage IRQs affinity */
+       netif_set_affinity_auto(netdev);
+
        netif_set_tso_max_size(netdev, ICE_MAX_TSO_SIZE);
 }
 
-- 
2.43.0

Reply via email to