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

Reply via email to