Index: /branches/rel_apv_10_7_0_21_nic_debug/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c
===================================================================
--- /branches/rel_apv_10_7_0_21_nic_debug/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c	(revision 38545)
+++ /branches/rel_apv_10_7_0_21_nic_debug/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c	(working copy)
@@ -893,7 +893,7 @@
 i40evf_stop_queues(struct rte_eth_dev *dev)
 {
 	int i;
-
+        sleep(2);
 	/* Stop TX queues first */
 	for (i = 0; i < dev->data->nb_tx_queues; i++) {
 		if (i40evf_dev_tx_queue_stop(dev, i) != 0) {
@@ -1410,9 +1410,30 @@
 }
 
 static int
-i40evf_reset_vf(struct i40e_hw *hw)
+i40evf_check_vf_reset_done(struct i40e_hw *hw)
 {
 	int i, reset;
+	for (i = 0; i < MAX_RESET_WAIT_CNT; i++) {
+		reset = rd32(hw, I40E_VFGEN_RSTAT) &
+			I40E_VFGEN_RSTAT_VFR_STATE_MASK;
+		reset = reset >> I40E_VFGEN_RSTAT_VFR_STATE_SHIFT;
+		if (I40E_VFR_COMPLETED == reset || I40E_VFR_VFACTIVE == reset)
+			break;
+		else
+			rte_delay_ms(50);
+	}
+
+	if (i >= MAX_RESET_WAIT_CNT) {
+		PMD_INIT_LOG(ERR, "Reset VF NIC failed");
+		return -1;
+	}
+	return 0;
+}
+
+static int
+i40evf_reset_vf(struct i40e_hw *hw)
+{
+	int ret;
 
 	if (i40e_vf_reset(hw) != I40E_SUCCESS) {
 		PMD_INIT_LOG(ERR, "Reset VF NIC failed");
@@ -1428,7 +1449,7 @@
 	  * COMPLETE is set. So, for vf, we'll try to wait a long time.
 	  */
 	rte_delay_ms(200);
-
+#if 0
 	for (i = 0; i < MAX_RESET_WAIT_CNT; i++) {
 		reset = rd32(hw, I40E_VFGEN_RSTAT) &
 			I40E_VFGEN_RSTAT_VFR_STATE_MASK;
@@ -1443,6 +1464,12 @@
 		PMD_INIT_LOG(ERR, "Reset VF NIC failed");
 		return -1;
 	}
+#endif
+	ret = i40evf_check_vf_reset_done(hw);
+	if (ret) {
+		PMD_INIT_LOG(ERR, "%s :VF reset stil in progress.", __func__);
+		return ret;
+	}
 
 	return 0;
 }
@@ -1464,6 +1491,12 @@
 		goto err;
 	}
 
+	err = i40evf_check_vf_reset_done(hw);
+	if (err) {
+		PMD_INIT_LOG(ERR, "%s :VF reset stil in progress.", __func__);
+		goto err;
+        }
+
 	i40e_init_adminq_parameter(hw);
 	err = i40e_init_adminq(hw);
 	if (err) {
