> -----Original Message----- > From: Li, Xiaoyun > Sent: Friday, July 28, 2017 7:40 PM > To: Wu, Jingjing <jingjing...@intel.com> > Cc: dev@dpdk.org; Li, Xiaoyun <xiaoyun...@intel.com>; sta...@dpdk.org > Subject: [PATCH v2] net/i40e: fix PF notify issue when VF not up > > This patch modifies PF notify error to warning when not starting > up VF 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> > --- > v2 changes: > * add VF state modification when VF reset is done. > --- > drivers/net/i40e/i40e_pf.c | 33 +++++++++++++++++++-------------- > 1 file changed, 19 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c > index b4cf57f..5d5d24a 100644 > --- a/drivers/net/i40e/i40e_pf.c > +++ b/drivers/net/i40e/i40e_pf.c > @@ -152,22 +152,23 @@ i40e_pf_host_vf_reset(struct i40e_pf_vf *vf, bool > do_hw_reset) > val |= I40E_VPGEN_VFRTRIG_VFSWR_MASK; > I40E_WRITE_REG(hw, I40E_VPGEN_VFRTRIG(vf_id), val); > I40E_WRITE_FLUSH(hw); > - } > > #define VFRESET_MAX_WAIT_CNT 100 > - /* Wait until VF reset is done */ > - for (i = 0; i < VFRESET_MAX_WAIT_CNT; i++) { > - rte_delay_us(10); > - val = I40E_READ_REG(hw, I40E_VPGEN_VFRSTAT(vf_id)); > - if (val & I40E_VPGEN_VFRSTAT_VFRD_MASK) > - break; > - } > + /* Wait until VF reset is done */ > + for (i = 0; i < VFRESET_MAX_WAIT_CNT; i++) { > + rte_delay_us(10); > + val = I40E_READ_REG(hw, I40E_VPGEN_VFRSTAT(vf_id)); > + if (val & I40E_VPGEN_VFRSTAT_VFRD_MASK) { > + vf->state = I40E_VF_ACTIVE; > + break; > + } > + } > > - if (i >= VFRESET_MAX_WAIT_CNT) { > - PMD_DRV_LOG(ERR, "VF reset timeout"); > - return -ETIMEDOUT; > + if (i >= VFRESET_MAX_WAIT_CNT) { > + PMD_DRV_LOG(ERR, "VF reset timeout"); > + return -ETIMEDOUT; > + } It's much clearer to add "vf->state = I40E_VF_ACTIVE;" here but not above. > } > - > /* This is not first time to do reset, do cleanup job first */ > if (vf->vsi) { > /* Disable queues */ > @@ -267,8 +268,12 @@ i40e_pf_host_send_msg_to_vf(struct i40e_pf_vf *vf, > ret = i40e_aq_send_msg_to_vf(hw, abs_vf_id, opcode, retval, > msg, msglen, NULL); > if (ret) { > - PMD_INIT_LOG(ERR, "Fail to send message to VF, err %u", > - hw->aq.asq_last_status); > + if (vf->state == I40E_VF_INACTIVE) > + PMD_DRV_LOG(WARNING, "Warning! VF %u is inactive now!", > + abs_vf_id); How about just don't send msg to inactive VF but not print warning?
> + else > + PMD_INIT_LOG(ERR, "Fail to send message to VF, err %u", > + hw->aq.asq_last_status); > } > > return ret; > -- > 2.7.4