net/bnxt: fix memory leak during queue restart
[dpdk.git] / drivers / net / bnxt / bnxt_hwrm.c
index 09a7328..b0a7835 100644 (file)
@@ -221,6 +221,8 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
                        rc = -EINVAL; \
                else if (rc == HWRM_ERR_CODE_CMD_NOT_SUPPORTED) \
                        rc = -ENOTSUP; \
+               else if (rc == HWRM_ERR_CODE_HOT_RESET_PROGRESS) \
+                       rc = -EAGAIN; \
                else if (rc > 0) \
                        rc = -EIO; \
                return rc; \
@@ -249,6 +251,8 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
                        rc = -EINVAL; \
                else if (rc == HWRM_ERR_CODE_CMD_NOT_SUPPORTED) \
                        rc = -ENOTSUP; \
+               else if (rc == HWRM_ERR_CODE_HOT_RESET_PROGRESS) \
+                       rc = -EAGAIN; \
                else if (rc > 0) \
                        rc = -EIO; \
                return rc; \
@@ -1104,7 +1108,7 @@ int bnxt_hwrm_ver_get(struct bnxt *bp, uint32_t timeout)
        dev_caps_cfg = rte_le_to_cpu_32(resp->dev_caps_cfg);
 
        if (bp->max_resp_len != max_resp_len) {
-               sprintf(type, "bnxt_hwrm_%04x:%02x:%02x:%02x",
+               sprintf(type, "bnxt_hwrm_" PCI_PRI_FMT,
                        bp->pdev->addr.domain, bp->pdev->addr.bus,
                        bp->pdev->addr.devid, bp->pdev->addr.function);
 
@@ -1139,7 +1143,7 @@ int bnxt_hwrm_ver_get(struct bnxt *bp, uint32_t timeout)
             (dev_caps_cfg &
              HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_REQUIRED)) ||
            bp->hwrm_max_ext_req_len > HWRM_MAX_REQ_LEN) {
-               sprintf(type, "bnxt_hwrm_short_%04x:%02x:%02x:%02x",
+               sprintf(type, "bnxt_hwrm_short_" PCI_PRI_FMT,
                        bp->pdev->addr.domain, bp->pdev->addr.bus,
                        bp->pdev->addr.devid, bp->pdev->addr.function);
 
@@ -2472,13 +2476,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
                if (BNXT_HAS_RING_GRPS(bp))
                        bp->grp_info[queue_index].rx_fw_ring_id =
                                                        INVALID_HW_RING_ID;
-               memset(rxr->rx_desc_ring, 0,
-                      rxr->rx_ring_struct->ring_size *
-                      sizeof(*rxr->rx_desc_ring));
-               memset(rxr->rx_buf_ring, 0,
-                      rxr->rx_ring_struct->ring_size *
-                      sizeof(*rxr->rx_buf_ring));
-               rxr->rx_prod = 0;
        }
        ring = rxr->ag_ring_struct;
        if (ring->fw_ring_id != INVALID_HW_RING_ID) {
@@ -2486,11 +2483,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
                                    BNXT_CHIP_THOR(bp) ?
                                    HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG :
                                    HWRM_RING_FREE_INPUT_RING_TYPE_RX);
-               ring->fw_ring_id = INVALID_HW_RING_ID;
-               memset(rxr->ag_buf_ring, 0,
-                      rxr->ag_ring_struct->ring_size *
-                      sizeof(*rxr->ag_buf_ring));
-               rxr->ag_prod = 0;
                if (BNXT_HAS_RING_GRPS(bp))
                        bp->grp_info[queue_index].ag_fw_ring_id =
                                                        INVALID_HW_RING_ID;
@@ -2574,7 +2566,7 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp)
        struct rte_pci_device *pdev = bp->pdev;
        char type[RTE_MEMZONE_NAMESIZE];
 
-       sprintf(type, "bnxt_hwrm_%04x:%02x:%02x:%02x", pdev->addr.domain,
+       sprintf(type, "bnxt_hwrm_" PCI_PRI_FMT, pdev->addr.domain,
                pdev->addr.bus, pdev->addr.devid, pdev->addr.function);
        bp->max_resp_len = HWRM_MAX_RESP_LEN;
        bp->hwrm_cmd_resp_addr = rte_malloc(type, bp->max_resp_len, 0);
@@ -3090,6 +3082,9 @@ int bnxt_hwrm_port_mac_qcfg(struct bnxt *bp)
 
        bp->port_svif = BNXT_SVIF_INVALID;
 
+       if (!BNXT_PF(bp))
+               return 0;
+
        HWRM_PREP(&req, HWRM_PORT_MAC_QCFG, BNXT_USE_CHIMP_MB);
 
        rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
@@ -5072,16 +5067,6 @@ int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp)
        if (!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
                return 0;
 
-       if (!info) {
-               info = rte_zmalloc("bnxt_hwrm_error_recovery_qcfg",
-                                  sizeof(*info), 0);
-               bp->recovery_info = info;
-               if (info == NULL)
-                       return -ENOMEM;
-       } else {
-               memset(info, 0, sizeof(*info));
-       }
-
        HWRM_PREP(&req, HWRM_ERROR_RECOVERY_QCFG, BNXT_USE_CHIMP_MB);
 
        rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);