X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_flow.c;h=a8f5d91fc414d1b01d6a4baa297c68c386118555;hb=31d7dded033fc061950312253919237dde07ac63;hp=499dcdf6b8efaf78bcf40e9d62b5baa70ae17205;hpb=87aefef133e3d670be365efdaa620f36d97ee4bd;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 499dcdf6b8..a8f5d91fc4 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2014-2018 Broadcom + * Copyright(c) 2014-2021 Broadcom * All rights reserved. */ @@ -554,7 +554,7 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp, } /* Check if VNI is masked. */ - if (vxlan_spec && vxlan_mask) { + if (vxlan_mask != NULL) { vni_masked = !!memcmp(vxlan_mask->vni, vni_mask, RTE_DIM(vni_mask)); @@ -1056,6 +1056,13 @@ start: } PMD_DRV_LOG(DEBUG, "Queue index %d\n", act_q->index); + if (use_ntuple && !BNXT_RFS_NEEDS_VNIC(bp)) { + filter->flags = + HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_RFS_RING_IDX; + filter->dst_id = act_q->index; + goto skip_vnic_alloc; + } + vnic_id = attr->group; if (!vnic_id) { PMD_DRV_LOG(DEBUG, "Group id is 0\n"); @@ -1127,7 +1134,7 @@ use_vnic: PMD_DRV_LOG(DEBUG, "Setting vnic ff_idx %d\n", vnic->ff_pool_idx); filter->dst_id = vnic->fw_vnic_id; - +skip_vnic_alloc: /* For ntuple filter, create the L2 filter with default VNIC. * The user specified redirect queue will be set while creating * the ntuple filter in hardware. @@ -1365,6 +1372,8 @@ use_vnic: if (vnic->rx_queue_cnt > 1) { vnic->hash_type = bnxt_rte_to_hwrm_hash_types(rss->types); + vnic->hash_mode = + bnxt_rte_to_hwrm_hash_level(bp, rss->types, rss->level); if (!rss->key_len) { /* If hash key has not been specified, @@ -1806,7 +1815,10 @@ bnxt_flow_create(struct rte_eth_dev *dev, } } - vnic = find_matching_vnic(bp, filter); + if (BNXT_RFS_NEEDS_VNIC(bp)) + vnic = find_matching_vnic(bp, filter); + else + vnic = BNXT_GET_DEFAULT_VNIC(bp); done: if (!ret || update_flow) { flow->filter = filter; @@ -1816,9 +1828,6 @@ done: goto free_flow; } - STAILQ_INSERT_TAIL(&vnic->filter, filter, next); - PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); - STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); if (filter->valid_flags & BNXT_FLOW_MARK_FLAG) { PMD_DRV_LOG(DEBUG, "Mark action: mark id 0x%x, flow id 0x%x\n", @@ -1833,15 +1842,21 @@ done: RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "Flow with mark id exists"); + bnxt_clear_one_vnic_filter(bp, filter); goto free_filter; } bp->mark_table[flow_id].valid = true; bp->mark_table[flow_id].mark_id = filter->mark; } + + STAILQ_INSERT_TAIL(&vnic->filter, filter, next); + STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); + if (BNXT_FLOW_XSTATS_EN(bp)) bp->flow_stat->flow_count++; bnxt_release_flow_lock(bp); bnxt_setup_flow_counter(bp); + PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); return flow; } @@ -1940,11 +1955,7 @@ _bnxt_flow_destroy(struct bnxt *bp, filter->flow_id = 0; } - if (filter->filter_type == HWRM_CFA_EM_FILTER) - ret = bnxt_hwrm_clear_em_filter(bp, filter); - if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER) - ret = bnxt_hwrm_clear_ntuple_filter(bp, filter); - ret = bnxt_hwrm_clear_l2_filter(bp, filter); + ret = bnxt_clear_one_vnic_filter(bp, filter); done: if (!ret) {