ice: cleanup in VSI config/deconfig code
authorMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Wed, 21 Dec 2022 11:38:15 +0000 (12:38 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 3 Feb 2023 17:54:18 +0000 (09:54 -0800)
Do few small cleanups:

1) Rename the function to reflect that it doesn't configure all things
related to VSI. ice_vsi_cfg_lan() better fits to what function is doing.

ice_vsi_cfg() can be use to name function that will configure whole VSI.

2) Remove unused ethtype field from VSI. There is no need to set
ethtype here, because it is never used.

3) Remove unnecessary check for ICE_VSI_CHNL. There is check for
ICE_VSI_CHNL in ice_vsi_get_qs, so there is no need to check it before
calling the function.

4) Simplify ice_vsi_alloc() call. There is no need to check the type of
VSI before calling ice_vsi_alloc(). For ICE_VSI_CHNL vf is always NULL
(ice_vsi_setup() is called with vf=NULL).
For ICE_VSI_VF or ICE_VSI_CTRL ch is always NULL and for other VSI types
ch and vf are always NULL.

5) Remove unnecessary call to ice_vsi_dis_irq(). ice_vsi_dis_irq() will
be called in ice_vsi_close() flow (ice_vsi_close() -> ice_vsi_down() ->
ice_vsi_dis_irq()). Remove unnecessary call.

6) Don't remove specific filters in release. All hw filters are removed
in ice_fltr_remove_alli(), which is always called in VSI release flow.
There is no need to remove only ethertype filters before calling
ice_fltr_remove_all().

7) Rename ice_vsi_clear() to ice_vsi_free(). As ice_vsi_clear() only
free memory allocated in ice_vsi_alloc() rename it to ice_vsi_free()
which better shows what function is doing.

8) Free coalesce param in rebuild. There is potential memory leak if
configuration of VSI lan fails. Free coalesce to avoid it.

Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice.h
drivers/net/ethernet/intel/ice/ice_ethtool.c
drivers/net/ethernet/intel/ice/ice_lib.c
drivers/net/ethernet/intel/ice/ice_lib.h
drivers/net/ethernet/intel/ice/ice_main.c

index e8558c044155fd5f77df5264ed626f7405e7330a..3f8ee7c6f087682c1add5ea36cc4857d5978b9db 100644 (file)
@@ -353,7 +353,6 @@ struct ice_vsi {
 
        struct ice_vf *vf;              /* VF associated with this VSI */
 
-       u16 ethtype;                    /* Ethernet protocol for pause frame */
        u16 num_gfltr;
        u16 num_bfltr;
 
@@ -889,7 +888,7 @@ ice_fetch_u64_stats_per_ring(struct u64_stats_sync *syncp,
 int ice_up(struct ice_vsi *vsi);
 int ice_down(struct ice_vsi *vsi);
 int ice_down_up(struct ice_vsi *vsi);
-int ice_vsi_cfg(struct ice_vsi *vsi);
+int ice_vsi_cfg_lan(struct ice_vsi *vsi);
 struct ice_vsi *ice_lb_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi);
 int ice_vsi_determine_xdp_res(struct ice_vsi *vsi);
 int ice_prepare_xdp_rings(struct ice_vsi *vsi, struct bpf_prog *prog);
index baaeb7564b4b9aa9a8cd22d1b3c191829b3025fc..6f03e9fe331a002ee7e992193e213249e7f7c057 100644 (file)
@@ -656,7 +656,7 @@ static int ice_lbtest_prepare_rings(struct ice_vsi *vsi)
        if (status)
                goto err_setup_rx_ring;
 
-       status = ice_vsi_cfg(vsi);
+       status = ice_vsi_cfg_lan(vsi);
        if (status)
                goto err_setup_rx_ring;
 
index 301c1efe08b45a765a3289afbc24f456890f65f6..b3f03f9932d2ffe26955b18c706739051a9650c4 100644 (file)
@@ -348,7 +348,7 @@ static void ice_vsi_free_arrays(struct ice_vsi *vsi)
 }
 
 /**
- * ice_vsi_clear - clean up and deallocate the provided VSI
+ * ice_vsi_free - clean up and deallocate the provided VSI
  * @vsi: pointer to VSI being cleared
  *
  * This deallocates the VSI's queue resources, removes it from the PF's
@@ -356,7 +356,7 @@ static void ice_vsi_free_arrays(struct ice_vsi *vsi)
  *
  * Returns 0 on success, negative on failure
  */
-int ice_vsi_clear(struct ice_vsi *vsi)
+int ice_vsi_free(struct ice_vsi *vsi)
 {
        struct ice_pf *pf = NULL;
        struct device *dev;
@@ -2668,12 +2668,7 @@ ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
        struct ice_vsi *vsi;
        int ret, i;
 
-       if (vsi_type == ICE_VSI_CHNL)
-               vsi = ice_vsi_alloc(pf, vsi_type, ch, NULL);
-       else if (vsi_type == ICE_VSI_VF || vsi_type == ICE_VSI_CTRL)
-               vsi = ice_vsi_alloc(pf, vsi_type, NULL, vf);
-       else
-               vsi = ice_vsi_alloc(pf, vsi_type, NULL, NULL);
+       vsi = ice_vsi_alloc(pf, vsi_type, ch, vf);
 
        if (!vsi) {
                dev_err(dev, "could not allocate VSI\n");
@@ -2682,17 +2677,13 @@ ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
 
        vsi->port_info = pi;
        vsi->vsw = pf->first_sw;
-       if (vsi->type == ICE_VSI_PF)
-               vsi->ethtype = ETH_P_PAUSE;
 
        ice_alloc_fd_res(vsi);
 
-       if (vsi_type != ICE_VSI_CHNL) {
-               if (ice_vsi_get_qs(vsi)) {
-                       dev_err(dev, "Failed to allocate queues. vsi->idx = %d\n",
-                               vsi->idx);
-                       goto unroll_vsi_alloc;
-               }
+       if (ice_vsi_get_qs(vsi)) {
+               dev_err(dev, "Failed to allocate queues. vsi->idx = %d\n",
+                       vsi->idx);
+               goto unroll_vsi_alloc;
        }
 
        /* set RSS capabilities */
@@ -2857,7 +2848,7 @@ unroll_get_qs:
 unroll_vsi_alloc:
        if (vsi_type == ICE_VSI_VF)
                ice_enable_lag(pf->lag);
-       ice_vsi_clear(vsi);
+       ice_vsi_free(vsi);
 
        return NULL;
 }
@@ -3181,9 +3172,6 @@ int ice_vsi_release(struct ice_vsi *vsi)
        if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
                ice_rss_clean(vsi);
 
-       /* Disable VSI and free resources */
-       if (vsi->type != ICE_VSI_LB)
-               ice_vsi_dis_irq(vsi);
        ice_vsi_close(vsi);
 
        /* SR-IOV determines needed MSIX resources all at once instead of per
@@ -3199,18 +3187,12 @@ int ice_vsi_release(struct ice_vsi *vsi)
                pf->num_avail_sw_msix += vsi->num_q_vectors;
        }
 
-       if (!ice_is_safe_mode(pf)) {
-               if (vsi->type == ICE_VSI_PF) {
-                       ice_fltr_remove_eth(vsi, ETH_P_PAUSE, ICE_FLTR_TX,
-                                           ICE_DROP_PACKET);
-                       ice_cfg_sw_lldp(vsi, true, false);
-                       /* The Rx rule will only exist to remove if the LLDP FW
-                        * engine is currently stopped
-                        */
-                       if (!test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
-                               ice_cfg_sw_lldp(vsi, false, false);
-               }
-       }
+       /* The Rx rule will only exist to remove if the LLDP FW
+        * engine is currently stopped
+        */
+       if (!ice_is_safe_mode(pf) && vsi->type == ICE_VSI_PF &&
+           !test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
+               ice_cfg_sw_lldp(vsi, false, false);
 
        if (ice_is_vsi_dflt_vsi(vsi))
                ice_clear_dflt_vsi(vsi);
@@ -3247,7 +3229,7 @@ int ice_vsi_release(struct ice_vsi *vsi)
         * for ex: during rmmod.
         */
        if (!ice_is_reset_in_progress(pf->state))
-               ice_vsi_clear(vsi);
+               ice_vsi_free(vsi);
 
        return 0;
 }
@@ -3601,6 +3583,7 @@ int ice_vsi_rebuild(struct ice_vsi *vsi, bool init_vsi)
                        ret = -EIO;
                        goto err_vectors;
                } else {
+                       kfree(coalesce);
                        return ice_schedule_reset(pf, ICE_RESET_PFR);
                }
        }
@@ -3623,7 +3606,7 @@ err_rings:
                vsi->netdev = NULL;
        }
 err_vsi:
-       ice_vsi_clear(vsi);
+       ice_vsi_free(vsi);
        set_bit(ICE_RESET_FAILED, pf->state);
        kfree(coalesce);
        return ret;
index dcdf69a693e9172688f3a38ffa40263a1b2ea23e..6203114b805cb550d89f23c77e25a3eb074e5008 100644 (file)
@@ -42,7 +42,7 @@ void ice_cfg_sw_lldp(struct ice_vsi *vsi, bool tx, bool create);
 int ice_set_link(struct ice_vsi *vsi, bool ena);
 
 void ice_vsi_delete(struct ice_vsi *vsi);
-int ice_vsi_clear(struct ice_vsi *vsi);
+int ice_vsi_free(struct ice_vsi *vsi);
 
 int ice_vsi_cfg_tc(struct ice_vsi *vsi, u8 ena_tc);
 
index 384679042bfa26d67fb18b054d0c93cc4c8d4563..703a732c421d671a29afb0490aebc96618d69022 100644 (file)
@@ -6128,12 +6128,12 @@ static int ice_vsi_vlan_setup(struct ice_vsi *vsi)
 }
 
 /**
- * ice_vsi_cfg - Setup the VSI
+ * ice_vsi_cfg_lan - Setup the VSI lan related config
  * @vsi: the VSI being configured
  *
  * Return 0 on success and negative value on error
  */
-int ice_vsi_cfg(struct ice_vsi *vsi)
+int ice_vsi_cfg_lan(struct ice_vsi *vsi)
 {
        int err;
 
@@ -6349,7 +6349,7 @@ int ice_up(struct ice_vsi *vsi)
 {
        int err;
 
-       err = ice_vsi_cfg(vsi);
+       err = ice_vsi_cfg_lan(vsi);
        if (!err)
                err = ice_up_complete(vsi);
 
@@ -6917,7 +6917,7 @@ int ice_vsi_open_ctrl(struct ice_vsi *vsi)
        if (err)
                goto err_setup_rx;
 
-       err = ice_vsi_cfg(vsi);
+       err = ice_vsi_cfg_lan(vsi);
        if (err)
                goto err_setup_rx;
 
@@ -6971,7 +6971,7 @@ int ice_vsi_open(struct ice_vsi *vsi)
        if (err)
                goto err_setup_rx;
 
-       err = ice_vsi_cfg(vsi);
+       err = ice_vsi_cfg_lan(vsi);
        if (err)
                goto err_setup_rx;
 
@@ -8405,7 +8405,7 @@ static void ice_remove_q_channels(struct ice_vsi *vsi, bool rem_fltr)
                ice_vsi_delete(ch->ch_vsi);
 
                /* Delete VSI from PF and HW VSI arrays */
-               ice_vsi_clear(ch->ch_vsi);
+               ice_vsi_free(ch->ch_vsi);
 
                /* free the channel */
                kfree(ch);