net/bnxt: fix default MAC check
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index b58a875..820005c 100644 (file)
@@ -627,6 +627,9 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
                 * resource reservation. This will ensure the resource counts
                 * are calculated correctly.
                 */
+
+               pthread_mutex_lock(&bp->def_cp_lock);
+
                if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {
                        bnxt_disable_int(bp);
                        bnxt_free_cp_ring(bp, bp->async_cp_ring);
@@ -635,15 +638,20 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
                rc = bnxt_hwrm_func_reserve_vf_resc(bp, false);
                if (rc) {
                        PMD_DRV_LOG(ERR, "HWRM resource alloc fail:%x\n", rc);
+                       pthread_mutex_unlock(&bp->def_cp_lock);
                        return -ENOSPC;
                }
 
                if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) {
                        rc = bnxt_alloc_async_cp_ring(bp);
-                       if (rc)
+                       if (rc) {
+                               pthread_mutex_unlock(&bp->def_cp_lock);
                                return rc;
+                       }
                        bnxt_enable_int(bp);
                }
+
+               pthread_mutex_unlock(&bp->def_cp_lock);
        } else {
                /* legacy driver needs to get updated values */
                rc = bnxt_hwrm_func_qcaps(bp);
@@ -1015,7 +1023,7 @@ static int bnxt_add_mac_filter(struct bnxt *bp, struct bnxt_vnic_info *vnic,
         * hw-vlan-filter is turned OFF from ON, default
         * MAC filter should be restored
         */
-       if (filter->dflt)
+       if (index == 0 && filter->dflt)
                return 0;
 
        filter = bnxt_alloc_filter(bp);
@@ -1314,9 +1322,6 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev,
                        vnic->rss_table[i] =
                            vnic->fw_grp_ids[reta_conf[idx].reta[sft]];
                }
-
-               vnic->rss_table[i] =
-                   vnic->fw_grp_ids[reta_conf[idx].reta[sft]];
        }
 
        bnxt_hwrm_vnic_rss_cfg(bp, vnic);
@@ -2166,8 +2171,7 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
                struct bnxt_vnic_info *vnic = &bp->vnic_info[i];
                uint16_t size = 0;
 
-               vnic->mru = new_mtu + RTE_ETHER_HDR_LEN +
-                               RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE * 2;
+               vnic->mru = BNXT_VNIC_MRU(new_mtu);
                rc = bnxt_hwrm_vnic_cfg(bp, vnic);
                if (rc)
                        break;
@@ -4585,8 +4589,14 @@ bnxt_init_locks(struct bnxt *bp)
        int err;
 
        err = pthread_mutex_init(&bp->flow_lock, NULL);
-       if (err)
+       if (err) {
                PMD_DRV_LOG(ERR, "Unable to initialize flow_lock\n");
+               return err;
+       }
+
+       err = pthread_mutex_init(&bp->def_cp_lock, NULL);
+       if (err)
+               PMD_DRV_LOG(ERR, "Unable to initialize def_cp_lock\n");
        return err;
 }
 
@@ -4735,6 +4745,7 @@ static void
 bnxt_uninit_locks(struct bnxt *bp)
 {
        pthread_mutex_destroy(&bp->flow_lock);
+       pthread_mutex_destroy(&bp->def_cp_lock);
 }
 
 static int