Commit b4a01ace authored by Simei Su's avatar Simei Su Committed by Tony Nguyen

ice: fix wrong fallback logic for FDIR

When adding a FDIR filter, if ice_vc_fdir_set_irq_ctx returns failure,
the inserted fdir entry will not be removed and if ice_vc_fdir_write_fltr
returns failure, the fdir context info for irq handler will not be cleared
which may lead to inconsistent or memory leak issue. This patch refines
failure cases to resolve this issue.

Fixes: 1f7ea1cd ("ice: Enable FDIR Configure for AVF")
Signed-off-by: default avatarSimei Su <simei.su@intel.com>
Tested-by: default avatarRafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 218c5973
...@@ -1871,7 +1871,7 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg) ...@@ -1871,7 +1871,7 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg)
v_ret = VIRTCHNL_STATUS_SUCCESS; v_ret = VIRTCHNL_STATUS_SUCCESS;
stat->status = VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE; stat->status = VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE;
dev_dbg(dev, "VF %d: set FDIR context failed\n", vf->vf_id); dev_dbg(dev, "VF %d: set FDIR context failed\n", vf->vf_id);
goto err_free_conf; goto err_rem_entry;
} }
ret = ice_vc_fdir_write_fltr(vf, conf, true, is_tun); ret = ice_vc_fdir_write_fltr(vf, conf, true, is_tun);
...@@ -1880,15 +1880,16 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg) ...@@ -1880,15 +1880,16 @@ int ice_vc_add_fdir_fltr(struct ice_vf *vf, u8 *msg)
stat->status = VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE; stat->status = VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE;
dev_err(dev, "VF %d: writing FDIR rule failed, ret:%d\n", dev_err(dev, "VF %d: writing FDIR rule failed, ret:%d\n",
vf->vf_id, ret); vf->vf_id, ret);
goto err_rem_entry; goto err_clr_irq;
} }
exit: exit:
kfree(stat); kfree(stat);
return ret; return ret;
err_rem_entry: err_clr_irq:
ice_vc_fdir_clear_irq_ctx(vf); ice_vc_fdir_clear_irq_ctx(vf);
err_rem_entry:
ice_vc_fdir_remove_entry(vf, conf, conf->flow_id); ice_vc_fdir_remove_entry(vf, conf, conf->flow_id);
err_free_conf: err_free_conf:
devm_kfree(dev, conf); devm_kfree(dev, conf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment