> -----Original Message----- > From: Li, Xiaoyun > Sent: Tuesday, August 15, 2017 11:34 AM > To: Xing, Beilei <beilei.x...@intel.com> > Cc: Wu, Jingjing <jingjing...@intel.com>; dev@dpdk.org; Li, Xiaoyun > <xiaoyun...@intel.com>; sta...@dpdk.org > Subject: [PATCH] net/i40e: fix PF notify issue when VF is not up > > This patch stops PF from sending message to VF when VF's ARQ and ATQ isn't
Abbreviation is not easy to understand, how about changing ARQ and ATQ with admin queue? > enabled, namely VF isn't up and modifies VF state to active when VF reset is > completed. > > Fixes: 4861cde46116 ("i40e: new poll mode driver") > Cc: sta...@dpdk.org > > Signed-off-by: Xiaoyun Li <xiaoyun...@intel.com> > --- > drivers/net/i40e/i40e_pf.c | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index > 100f8dc..c40f40a 100644 > --- a/drivers/net/i40e/i40e_pf.c > +++ b/drivers/net/i40e/i40e_pf.c > @@ -167,6 +167,9 @@ i40e_pf_host_vf_reset(struct i40e_pf_vf *vf, bool > do_hw_reset) > PMD_DRV_LOG(ERR, "VF reset timeout"); > return -ETIMEDOUT; > } > + > + vf->state = I40E_VF_ACTIVE; > + > /* This is not first time to do reset, do cleanup job first */ > if (vf->vsi) { > /* Disable queues */ > @@ -1224,8 +1227,22 @@ i40e_notify_vf_link_status(struct rte_eth_dev > *dev, struct i40e_pf_vf *vf) > break; > } > > - i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_EVENT, > - I40E_SUCCESS, (uint8_t *)&event, sizeof(event)); > + uint32_t tval, rval; > + uint16_t vf_id; > + struct i40e_hw *hw; Move the above variable up to the begin of the function. > + > + hw = I40E_PF_TO_HW(vf->pf); > + vf_id = vf->vf_idx; > + > + tval = I40E_READ_REG(hw, I40E_VF_ATQLEN(vf_id)); > + rval = I40E_READ_REG(hw, I40E_VF_ARQLEN(vf_id)); > + > + if (tval & I40E_VF_ATQLEN_ATQLEN_MASK || > + tval & I40E_VF_ATQLEN_ATQENABLE_MASK || > + rval & I40E_VF_ARQLEN_ARQLEN_MASK || > + rval & I40E_VF_ARQLEN_ARQENABLE_MASK) > + i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_EVENT, > + I40E_SUCCESS, (uint8_t *)&event, sizeof(event)); > } > > void > -- > 2.7.4