[dpdk-dev,v2] net/i40e: vf add/del mac error log issue

Message ID 1500454871-36369-1-git-send-email-jia.guo@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Guo, Jia July 19, 2017, 9:01 a.m. UTC
  when i40e vf close, it would stop vf at first, if vf had been stopped,
that would result of duplicating to add/del mac address, then the failed
of executing admin queue command info would exposure. The patch fix that
by add vf stop status check and sync up the vf mac number when add/del.

Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
v2->v1: fix complie error issue and coding style issue
---
 drivers/net/i40e/i40e_ethdev.c    |  6 +++++-
 drivers/net/i40e/i40e_ethdev_vf.c | 17 +++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)
  

Comments

Xing, Beilei July 19, 2017, 11:11 a.m. UTC | #1
> -----Original Message-----
> From: Guo, Jia
> Sent: Wednesday, July 19, 2017 5:01 PM
> To: Xing, Beilei <beilei.xing@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>
> Cc: dev@dpdk.org; Guo, Jia <jia.guo@intel.com>
> Subject: [PATCH v2] net/i40e: vf add/del mac error log issue
> 
> when i40e vf close, it would stop vf at first, if vf had been stopped, that
> would result of duplicating to add/del mac address, then the failed of
> executing admin queue command info would exposure. The patch fix that by
> add vf stop status check and sync up the vf mac number when add/del.
> 
> Signed-off-by: Jeff Guo <jia.guo@intel.com>

Acked-by: Beilei Xing <beilei.xing@intel.com>
  
Ferruh Yigit July 19, 2017, 11:47 a.m. UTC | #2
On 7/19/2017 12:11 PM, Xing, Beilei wrote:
> 
> 
>> -----Original Message-----
>> From: Guo, Jia
>> Sent: Wednesday, July 19, 2017 5:01 PM
>> To: Xing, Beilei <beilei.xing@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>
>> Cc: dev@dpdk.org; Guo, Jia <jia.guo@intel.com>
>> Subject: [PATCH v2] net/i40e: vf add/del mac error log issue
>>
>> when i40e vf close, it would stop vf at first, if vf had been stopped, that
>> would result of duplicating to add/del mac address, then the failed of
>> executing admin queue command info would exposure. The patch fix that by
>> add vf stop status check and sync up the vf mac number when add/del.
>>
>> Signed-off-by: Jeff Guo <jia.guo@intel.com>
> 
> Acked-by: Beilei Xing <beilei.xing@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 97a73e1..4ed9619 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -2051,12 +2051,15 @@  static void
 i40e_dev_stop(struct rte_eth_dev *dev)
 {
 	struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
+	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct i40e_vsi *main_vsi = pf->main_vsi;
 	struct i40e_mirror_rule *p_mirror;
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
 	int i;
 
+	if (hw->adapter_stopped == 1)
+		return;
 	/* Disable all queues */
 	i40e_dev_switch_queues(pf, FALSE);
 
@@ -2101,6 +2104,8 @@  i40e_dev_stop(struct rte_eth_dev *dev)
 
 	/* reset hierarchy commit */
 	pf->tm_conf.committed = false;
+
+	hw->adapter_stopped = 1;
 }
 
 static void
@@ -2116,7 +2121,6 @@  i40e_dev_close(struct rte_eth_dev *dev)
 	PMD_INIT_FUNC_TRACE();
 
 	i40e_dev_stop(dev);
-	hw->adapter_stopped = 1;
 	i40e_dev_free_queues(dev);
 
 	/* Disable interrupt */
diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index dc6c794..a21cfdb 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -906,6 +906,8 @@  i40evf_add_mac_addr(struct rte_eth_dev *dev,
 	if (err)
 		PMD_DRV_LOG(ERR, "fail to execute command "
 			    "OP_ADD_ETHER_ADDRESS");
+	else
+		vf->vsi.mac_num++;
 
 	return err;
 }
@@ -944,6 +946,8 @@  i40evf_del_mac_addr_by_addr(struct rte_eth_dev *dev,
 	if (err)
 		PMD_DRV_LOG(ERR, "fail to execute command "
 			    "OP_DEL_ETHER_ADDRESS");
+	else
+		vf->vsi.mac_num--;
 	return;
 }
 
@@ -2058,10 +2062,16 @@  i40evf_add_del_all_mac_addr(struct rte_eth_dev *dev, bool add)
 		args.out_buffer = vf->aq_resp;
 		args.out_size = I40E_AQ_BUF_SZ;
 		err = i40evf_execute_vf_cmd(dev, &args);
-		if (err)
+		if (err) {
 			PMD_DRV_LOG(ERR, "fail to execute command %s",
 				    add ? "OP_ADD_ETHER_ADDRESS" :
 				    "OP_DEL_ETHER_ADDRESS");
+		} else {
+			if (add)
+				vf->vsi.mac_num++;
+			else
+				vf->vsi.mac_num--;
+		}
 		rte_free(list);
 		begin = next_begin;
 	} while (begin < I40E_NUM_MACADDR_MAX);
@@ -2140,9 +2150,12 @@  i40evf_dev_stop(struct rte_eth_dev *dev)
 {
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
+	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev);
 
 	PMD_INIT_FUNC_TRACE();
 
+	if (hw->adapter_stopped == 1)
+		return;
 	i40evf_stop_queues(dev);
 	i40evf_disable_queues_intr(dev);
 	i40e_dev_clear_queues(dev);
@@ -2155,6 +2168,7 @@  i40evf_dev_stop(struct rte_eth_dev *dev)
 	}
 	/* remove all mac addrs */
 	i40evf_add_del_all_mac_addr(dev, FALSE);
+	hw->adapter_stopped = 1;
 
 }
 
@@ -2342,7 +2356,6 @@  i40evf_dev_close(struct rte_eth_dev *dev)
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
 
 	i40evf_dev_stop(dev);
-	hw->adapter_stopped = 1;
 	i40e_dev_free_queues(dev);
 	i40evf_reset_vf(hw);
 	i40e_shutdown_adminq(hw);