ethdev: remove detachable device flag
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 643879e..8c9926b 100644 (file)
@@ -436,7 +436,11 @@ static void bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
        dev_info->min_rx_bufsize = 1;
        dev_info->max_rx_pktlen = BNXT_MAX_MTU + ETHER_HDR_LEN + ETHER_CRC_LEN
                                  + VLAN_TAG_SIZE;
-       dev_info->rx_offload_capa = 0;
+       dev_info->rx_offload_capa = DEV_RX_OFFLOAD_VLAN_STRIP |
+                                       DEV_RX_OFFLOAD_IPV4_CKSUM |
+                                       DEV_RX_OFFLOAD_UDP_CKSUM |
+                                       DEV_RX_OFFLOAD_TCP_CKSUM |
+                                       DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
        dev_info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT |
                                        DEV_TX_OFFLOAD_IPV4_CKSUM |
                                        DEV_TX_OFFLOAD_TCP_CKSUM |
@@ -570,6 +574,11 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
        int vlan_mask = 0;
        int rc;
 
+       if (bp->rx_cp_nr_rings > RTE_ETHDEV_QUEUE_STAT_CNTRS) {
+               RTE_LOG(ERR, PMD,
+                       "RxQ cnt %d > CONFIG_RTE_ETHDEV_QUEUE_STAT_CNTRS %d\n",
+                       bp->rx_cp_nr_rings, RTE_ETHDEV_QUEUE_STAT_CNTRS);
+       }
        bp->dev_stopped = 0;
 
        rc = bnxt_init_nic(bp);
@@ -653,13 +662,14 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,
        uint64_t pool_mask = eth_dev->data->mac_pool_sel[index];
        struct bnxt_vnic_info *vnic;
        struct bnxt_filter_info *filter, *temp_filter;
-       int i;
+       uint32_t pool = RTE_MIN(MAX_FF_POOLS, ETH_64_POOLS);
+       uint32_t i;
 
        /*
         * Loop through all VNICs from the specified filter flow pools to
         * remove the corresponding MAC addr filter
         */
-       for (i = 0; i < MAX_FF_POOLS; i++) {
+       for (i = 0; i < pool; i++) {
                if (!(pool_mask & (1ULL << i)))
                        continue;
 
@@ -1718,10 +1728,12 @@ bnxt_match_and_validate_ether_filter(struct bnxt *bp,
                RTE_LOG(ERR, PMD, "unsupported ether_type(0x%04x) in"
                        " ethertype filter.", efilter->ether_type);
                *ret = -EINVAL;
+               goto exit;
        }
        if (efilter->queue >= bp->rx_nr_rings) {
                RTE_LOG(ERR, PMD, "Invalid queue %d\n", efilter->queue);
                *ret = -EINVAL;
+               goto exit;
        }
 
        vnic0 = STAILQ_FIRST(&bp->ff_pool[0]);
@@ -1729,6 +1741,7 @@ bnxt_match_and_validate_ether_filter(struct bnxt *bp,
        if (vnic == NULL) {
                RTE_LOG(ERR, PMD, "Invalid queue %d\n", efilter->queue);
                *ret = -EINVAL;
+               goto exit;
        }
 
        if (efilter->flags & RTE_ETHTYPE_FLAGS_DROP) {
@@ -1757,6 +1770,7 @@ bnxt_match_and_validate_ether_filter(struct bnxt *bp,
        if (match)
                *ret = -EEXIST;
 
+exit:
        return mfilter;
 }
 
@@ -2025,6 +2039,11 @@ bnxt_cfg_ntuple_filter(struct bnxt *bp,
                        goto free_filter;
                STAILQ_INSERT_TAIL(&vnic->filter, bfilter, next);
        } else {
+               if (mfilter == NULL) {
+                       /* This should not happen. But for Coverity! */
+                       ret = -ENOENT;
+                       goto free_filter;
+               }
                ret = bnxt_hwrm_clear_ntuple_filter(bp, mfilter);
 
                STAILQ_REMOVE(&vnic->filter, mfilter, bnxt_filter_info,
@@ -2781,7 +2800,6 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev)
                RTE_LOG(INFO, PMD, "%s\n", bnxt_version);
 
        rte_eth_copy_pci_info(eth_dev, pci_dev);
-       eth_dev->data->dev_flags |= RTE_ETH_DEV_DETACHABLE;
 
        bp = eth_dev->data->dev_private;