net/i40e: fix PF notify issue when VF is not up
authorXiaoyun Li <xiaoyun.li@intel.com>
Tue, 15 Aug 2017 07:39:36 +0000 (15:39 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:47 +0000 (02:49 +0200)
This patch stops PF from sending message to VF when VF's admin queue
isn't enabled, namely VF isn't up.

Fixes: 4861cde46116 ("i40e: new poll mode driver")
Cc: stable@dpdk.org
Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
drivers/net/i40e/i40e_pf.c

index 100f8dc..fe89027 100644 (file)
@@ -1192,7 +1192,10 @@ send_msg:
 void
 i40e_notify_vf_link_status(struct rte_eth_dev *dev, struct i40e_pf_vf *vf)
 {
+       struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);
        struct virtchnl_pf_event event;
+       uint16_t vf_id = vf->vf_idx;
+       uint32_t tval, rval;
 
        event.event = VIRTCHNL_EVENT_LINK_CHANGE;
        event.event_data.link_event.link_status =
@@ -1224,8 +1227,15 @@ 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));
+       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