[dpdk-dev] [v2 06/15] bnxt: Add support for port hotplug

Ajit Khaparde ajit.khaparde at broadcom.com
Mon Sep 26 18:18:52 CEST 2016


This patch adds support for port hotplug framework.

Signed-off-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
---
 drivers/net/bnxt/bnxt_cpr.c    |  3 +++
 drivers/net/bnxt/bnxt_ethdev.c | 24 ++++++++++++++++++++----
 drivers/net/bnxt/bnxt_filter.c |  3 +++
 drivers/net/bnxt/bnxt_vnic.c   |  3 +++
 4 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c
index 60c277a..e9f9741 100644
--- a/drivers/net/bnxt/bnxt_cpr.c
+++ b/drivers/net/bnxt/bnxt_cpr.c
@@ -124,6 +124,9 @@ void bnxt_free_def_cp_ring(struct bnxt *bp)
 {
 	struct bnxt_cp_ring_info *cpr = bp->def_cp_ring;
 
+	if (cpr == NULL)
+		return;
+
 	bnxt_free_ring(cpr->cp_ring_struct);
 	rte_free(cpr->cp_ring_struct);
 	rte_free(cpr);
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 110ec2a..bd1ffc0 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -478,7 +478,14 @@ static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
 	bnxt_free_tx_mbufs(bp);
 	bnxt_free_rx_mbufs(bp);
 	bnxt_free_mem(bp);
-	rte_free(eth_dev->data->mac_addrs);
+	if (eth_dev->data->mac_addrs != NULL) {
+		rte_free(eth_dev->data->mac_addrs);
+		eth_dev->data->mac_addrs = NULL;
+	}
+	if (bp->grp_info != NULL) {
+		rte_free(bp->grp_info);
+		bp->grp_info = NULL;
+	}
 }
 
 /* Unload the driver, release resources */
@@ -1084,12 +1091,20 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) {
 	struct bnxt *bp = eth_dev->data->dev_private;
 	int rc;
 
-	if (eth_dev->data->mac_addrs)
+	if (eth_dev->data->mac_addrs != NULL) {
 		rte_free(eth_dev->data->mac_addrs);
-	if (bp->grp_info)
+		eth_dev->data->mac_addrs = NULL;
+	}
+	if (bp->grp_info != NULL) {
 		rte_free(bp->grp_info);
+		bp->grp_info = NULL;
+	}
 	rc = bnxt_hwrm_func_driver_unregister(bp, 0);
 	bnxt_free_hwrm_resources(bp);
+	eth_dev->dev_ops = NULL;
+	eth_dev->rx_pkt_burst = NULL;
+	eth_dev->tx_pkt_burst = NULL;
+
 	return rc;
 }
 
@@ -1097,7 +1112,8 @@ static struct eth_driver bnxt_rte_pmd = {
 	.pci_drv = {
 		    .name = "rte_" DRV_MODULE_NAME "_pmd",
 		    .id_table = bnxt_pci_id_map,
-		    .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
+		    .drv_flags = RTE_PCI_DRV_NEED_MAPPING |
+			    RTE_PCI_DRV_DETACHABLE,
 		    },
 	.eth_dev_init = bnxt_dev_init,
 	.eth_dev_uninit = bnxt_dev_uninit,
diff --git a/drivers/net/bnxt/bnxt_filter.c b/drivers/net/bnxt/bnxt_filter.c
index f03a1dc..df1042c 100644
--- a/drivers/net/bnxt/bnxt_filter.c
+++ b/drivers/net/bnxt/bnxt_filter.c
@@ -118,6 +118,9 @@ void bnxt_free_filter_mem(struct bnxt *bp)
 	uint16_t max_filters, i;
 	int rc = 0;
 
+	if (bp->filter_info == NULL)
+		return;
+
 	/* Ensure that all filters are freed */
 	if (BNXT_PF(bp)) {
 		struct bnxt_pf_info *pf = &bp->pf;
diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c
index c04c4c7..6297e87 100644
--- a/drivers/net/bnxt/bnxt_vnic.c
+++ b/drivers/net/bnxt/bnxt_vnic.c
@@ -229,6 +229,9 @@ void bnxt_free_vnic_mem(struct bnxt *bp)
 	struct bnxt_vnic_info *vnic;
 	uint16_t max_vnics, i;
 
+	if (bp->vnic_info == NULL)
+		return;
+
 	if (BNXT_PF(bp)) {
 		struct bnxt_pf_info *pf = &bp->pf;
 
-- 
2.4.3



More information about the dev mailing list