diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_switch.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_switch.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c index 67c965a3f5d2..834cbd3f7b31 100644 --- a/drivers/net/ethernet/intel/ice/ice_switch.c +++ b/drivers/net/ethernet/intel/ice/ice_switch.c @@ -1238,6 +1238,9 @@ ice_add_update_vsi_list(struct ice_hw *hw,  			ice_create_vsi_list_map(hw, &vsi_handle_arr[0], 2,  						vsi_list_id); +		if (!m_entry->vsi_list_info) +			return ICE_ERR_NO_MEMORY; +  		/* If this entry was large action then the large action needs  		 * to be updated to point to FWD to VSI list  		 */ @@ -2220,6 +2223,7 @@ ice_vsi_uses_fltr(struct ice_fltr_mgmt_list_entry *fm_entry, u16 vsi_handle)  	return ((fm_entry->fltr_info.fltr_act == ICE_FWD_TO_VSI &&  		 fm_entry->fltr_info.vsi_handle == vsi_handle) ||  		(fm_entry->fltr_info.fltr_act == ICE_FWD_TO_VSI_LIST && +		 fm_entry->vsi_list_info &&  		 (test_bit(vsi_handle, fm_entry->vsi_list_info->vsi_map))));  } @@ -2292,14 +2296,12 @@ ice_add_to_vsi_fltr_list(struct ice_hw *hw, u16 vsi_handle,  		return ICE_ERR_PARAM;  	list_for_each_entry(fm_entry, lkup_list_head, list_entry) { -		struct ice_fltr_info *fi; - -		fi = &fm_entry->fltr_info; -		if (!fi || !ice_vsi_uses_fltr(fm_entry, vsi_handle)) +		if (!ice_vsi_uses_fltr(fm_entry, vsi_handle))  			continue;  		status = ice_add_entry_to_vsi_fltr_list(hw, vsi_handle, -							vsi_list_head, fi); +							vsi_list_head, +							&fm_entry->fltr_info);  		if (status)  			return status;  	} @@ -2622,7 +2624,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle,  					  &remove_list_head);  	mutex_unlock(rule_lock);  	if (status) -		return; +		goto free_fltr_list;  	switch (lkup) {  	case ICE_SW_LKUP_MAC: @@ -2645,6 +2647,7 @@ ice_remove_vsi_lkup_fltr(struct ice_hw *hw, u16 vsi_handle,  		break;  	} +free_fltr_list:  	list_for_each_entry_safe(fm_entry, tmp, &remove_list_head, list_entry) {  		list_del(&fm_entry->list_entry);  		devm_kfree(ice_hw_to_dev(hw), fm_entry); |