Commit 589dd714 authored by Michal Swiatkowski's avatar Michal Swiatkowski Committed by Tony Nguyen
Browse files

ice: remove unused recipe bookkeeping data



Remove root_buf from recipe struct. Its only usage was in ice_find_recp(),
where if recipe had an inverse action, it was skipped, but actually the
driver never adds inverse actions, so effectively it was pointless.

Without root_buf, the recipe data element in ice_add_sw_recipe() does
not need to be persistent and can also be automatically deallocated with
__free, which nicely simplifies unroll.

Signed-off-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: default avatarMarcin Szycik <marcin.szycik@linux.intel.com>
Tested-by: default avatarSujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 3125eb55
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -993,7 +993,6 @@ static void ice_cleanup_fltr_mgmt_struct(struct ice_hw *hw)
				devm_kfree(ice_hw_to_dev(hw), lst_itr);
			}
		}
		devm_kfree(ice_hw_to_dev(hw), recps[i].root_buf);
	}
	ice_rm_all_sw_replay_rule_info(hw);
	devm_kfree(ice_hw_to_dev(hw), sw->recp_list);
+15 −40
Original line number Diff line number Diff line
@@ -2445,13 +2445,6 @@ ice_get_recp_frm_fw(struct ice_hw *hw, struct ice_sw_recipe *recps, u8 rid,
	lkup_exts->n_val_words = fv_word_idx;
	recps[rid].big_recp = (num_recps > 1);
	recps[rid].n_grp_count = (u8)num_recps;
	recps[rid].root_buf = devm_kmemdup(ice_hw_to_dev(hw), tmp,
					   recps[rid].n_grp_count * sizeof(*recps[rid].root_buf),
					   GFP_KERNEL);
	if (!recps[rid].root_buf) {
		status = -ENOMEM;
		goto err_unroll;
	}

	/* Copy result indexes */
	bitmap_copy(recps[rid].res_idxs, result_bm, ICE_MAX_FV_WORDS);
@@ -4768,11 +4761,6 @@ ice_find_recp(struct ice_hw *hw, struct ice_prot_lkup_ext *lkup_exts,
				continue;
		}

		/* Skip inverse action recipes */
		if (recp[i].root_buf && recp[i].root_buf->content.act_ctrl &
		    ICE_AQ_RECIPE_ACT_INV_ACT)
			continue;

		/* if number of words we are looking for match */
		if (lkup_exts->n_val_words == recp[i].lkup_exts.n_val_words) {
			struct ice_fv_word *ar = recp[i].lkup_exts.fv_words;
@@ -5081,9 +5069,9 @@ static int
ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
		  unsigned long *profiles)
{
	struct ice_aqc_recipe_data_elem *buf __free(kfree) = NULL;
	DECLARE_BITMAP(result_idx_bm, ICE_MAX_FV_WORDS);
	struct ice_aqc_recipe_content *content;
	struct ice_aqc_recipe_data_elem *buf;
	struct ice_recp_grp_entry *entry;
	u16 free_res_idx;
	u8 chain_idx;
@@ -5112,12 +5100,9 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
	if (rm->n_grp_count > ICE_MAX_CHAIN_RECIPE)
		return -ENOSPC;

	buf = devm_kcalloc(ice_hw_to_dev(hw), rm->n_grp_count, sizeof(*buf),
			   GFP_KERNEL);
	if (!buf) {
		status = -ENOMEM;
		goto err_mem;
	}
	buf = kcalloc(rm->n_grp_count, sizeof(*buf), GFP_KERNEL);
	if (!buf)
		return -ENOMEM;

	bitmap_zero(rm->r_bitmap, ICE_MAX_NUM_RECIPES);

@@ -5130,7 +5115,7 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,

		status = ice_alloc_recipe(hw, &entry->rid);
		if (status)
			goto err_unroll;
			return status;

		content = &buf[recps].content;

@@ -5160,8 +5145,7 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
			 */
			if (chain_idx >= ICE_MAX_FV_WORDS) {
				ice_debug(hw, ICE_DBG_SW, "No chain index available\n");
				status = -ENOSPC;
				goto err_unroll;
				return -ENOSPC;
			}

			entry->chain_idx = chain_idx;
@@ -5215,7 +5199,7 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
		 */
		status = ice_alloc_recipe(hw, &rid);
		if (status)
			goto err_unroll;
			return status;

		content = &buf[recps].content;

@@ -5228,10 +5212,9 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
		last_chain_entry = devm_kzalloc(ice_hw_to_dev(hw),
						sizeof(*last_chain_entry),
						GFP_KERNEL);
		if (!last_chain_entry) {
			status = -ENOMEM;
			goto err_unroll;
		}
		if (!last_chain_entry)
			return -ENOMEM;

		last_chain_entry->rid = rid;
		memset(&content->lkup_indx, 0, sizeof(content->lkup_indx));
		/* All recipes use look-up index 0 to match switch ID. */
@@ -5265,12 +5248,12 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
	}
	status = ice_acquire_change_lock(hw, ICE_RES_WRITE);
	if (status)
		goto err_unroll;
		return status;

	status = ice_aq_add_recipe(hw, buf, rm->n_grp_count, NULL);
	ice_release_change_lock(hw);
	if (status)
		goto err_unroll;
		return status;

	/* Every recipe that just got created add it to the recipe
	 * book keeping list
@@ -5288,10 +5271,8 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
				idx_found = true;
			}

		if (!idx_found) {
			status = -EIO;
			goto err_unroll;
		}
		if (!idx_found)
			return -EIO;

		recp = &sw->recp_list[entry->rid];
		is_root = (rm->root_rid == entry->rid);
@@ -5327,13 +5308,8 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm,
		recp->allow_pass_l2 = rm->allow_pass_l2;
		recp->recp_created = true;
	}
	rm->root_buf = buf;
	return status;

err_unroll:
err_mem:
	devm_kfree(ice_hw_to_dev(hw), buf);
	return status;
	return 0;
}

/**
@@ -5632,7 +5608,6 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
		devm_kfree(ice_hw_to_dev(hw), fvit);
	}

	devm_kfree(ice_hw_to_dev(hw), rm->root_buf);
	kfree(rm);

err_free_lkup_exts:
+0 −2
Original line number Diff line number Diff line
@@ -274,8 +274,6 @@ struct ice_sw_recipe {

	struct list_head rg_list;

	/* AQ buffer associated with this recipe */
	struct ice_aqc_recipe_data_elem *root_buf;
	/* This struct saves the fv_words for a given lookup */
	struct ice_prot_lkup_ext lkup_exts;
};