If PF reset is finished but VF reset is pending, VF should no need to send any invalid cmd to PF. That would avoid mass unexpected behaviors affecting the robust.
Fixes: 22b123a36d07 ("net/avf: initialize PMD") Fixes: 9e03acd726cf ("net/iavf: fix flow access") Signed-off-by: Jeff Guo <jia....@intel.com> Tested-by: Xu, HailinX <hailinx...@intel.com> --- v2->v1: rebase patch. --- drivers/net/iavf/iavf.h | 2 +- drivers/net/iavf/iavf_ethdev.c | 2 ++ drivers/net/iavf/iavf_hash.c | 8 ++++++++ drivers/net/iavf/iavf_vchnl.c | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h index 9ad331ee9..3198d85b3 100644 --- a/drivers/net/iavf/iavf.h +++ b/drivers/net/iavf/iavf.h @@ -134,7 +134,7 @@ struct iavf_info { uint16_t mc_addrs_num; /* Multicast mac addresses number */ struct iavf_vsi vsi; - bool vf_reset; + bool vf_reset; /* true for VF reset pending, false for no VF reset */ uint64_t flags; uint8_t *rss_lut; diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 8e1d8a8d3..8fe81409c 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -1288,6 +1288,8 @@ iavf_init_vf(struct rte_eth_dev *dev) } } + vf->vf_reset = false; + return 0; err_rss: rte_free(vf->rss_key); diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index ff77d7135..ddc6df849 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -457,6 +457,9 @@ iavf_hash_init(struct iavf_adapter *ad) struct iavf_flow_parser *parser; int ret; + if (vf->vf_reset) + return -EIO; + if (!vf->vf_res) return -EINVAL; @@ -967,6 +970,11 @@ iavf_hash_destroy(__rte_unused struct iavf_adapter *ad, static void iavf_hash_uninit(struct iavf_adapter *ad) { + struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); + + if (vf->vf_reset) + return; + if (iavf_hash_default_set(ad, false)) PMD_DRV_LOG(ERR, "fail to delete default RSS"); diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c index 34c31a153..1871ba299 100644 --- a/drivers/net/iavf/iavf_vchnl.c +++ b/drivers/net/iavf/iavf_vchnl.c @@ -77,6 +77,9 @@ iavf_execute_vf_cmd(struct iavf_adapter *adapter, struct iavf_cmd_info *args) if (_atomic_set_cmd(vf, args->ops)) return -1; + if (vf->vf_reset) + return -EIO; + ret = iavf_aq_send_msg_to_pf(hw, args->ops, IAVF_SUCCESS, args->in_args, args->in_args_size, NULL); if (ret) { @@ -187,6 +190,7 @@ iavf_handle_pf_event_msg(struct rte_eth_dev *dev, uint8_t *msg, switch (pf_msg->event) { case VIRTCHNL_EVENT_RESET_IMPENDING: PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_RESET_IMPENDING event"); + vf->vf_reset = true; _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET, NULL); break; -- 2.20.1