[v2] net/iavf: fix invalid cmd after pf reset
Checks
Commit Message
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.guo@intel.com>
Tested-by: Xu, HailinX <hailinx.xu@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(-)
Comments
> -----Original Message-----
> From: Guo, Jia <jia.guo@intel.com>
> Sent: Friday, September 11, 2020 6:19 PM
> To: Wu, Jingjing <jingjing.wu@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>;
> Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org; Guo, Jia <jia.guo@intel.com>; Xu; Xu, HailinX
> <hailinx.xu@intel.com>
> Subject: [PATCH v2] net/iavf: fix invalid cmd after pf reset
>
> 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.guo@intel.com>
> Tested-by: Xu, HailinX <hailinx.xu@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
Applied to dpdk-next-net-intel.
Thanks
Qi
@@ -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;
@@ -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);
@@ -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");
@@ -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;