get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/71438/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 71438,
    "url": "http://patches.dpdk.org/api/patches/71438/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200612132934.16488-47-somnath.kotur@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200612132934.16488-47-somnath.kotur@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200612132934.16488-47-somnath.kotur@broadcom.com",
    "date": "2020-06-12T13:29:30",
    "name": "[46/50] net/bnxt: create default flow rules for the VF-rep conduit",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5d5527d7631debe4f4374409b3333ad085461924",
    "submitter": {
        "id": 908,
        "url": "http://patches.dpdk.org/api/people/908/?format=api",
        "name": "Somnath Kotur",
        "email": "somnath.kotur@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200612132934.16488-47-somnath.kotur@broadcom.com/mbox/",
    "series": [
        {
            "id": 10436,
            "url": "http://patches.dpdk.org/api/series/10436/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=10436",
            "date": "2020-06-12T13:28:44",
            "name": "add features for host-based flow management",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/10436/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/71438/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/71438/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 71F74A00BE;\n\tFri, 12 Jun 2020 15:51:51 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 4B0F91D406;\n\tFri, 12 Jun 2020 15:35:10 +0200 (CEST)",
            "from relay.smtp.broadcom.com (relay.smtp.broadcom.com\n [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 5C91E1BEB4\n for <dev@dpdk.org>; Fri, 12 Jun 2020 15:35:06 +0200 (CEST)",
            "from dhcp-10-123-153-55.dhcp.broadcom.net\n (dhcp-10-123-153-55.dhcp.broadcom.net [10.123.153.55])\n by relay.smtp.broadcom.com (Postfix) with ESMTP id 32FB61BD80C;\n Fri, 12 Jun 2020 06:35:04 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 32FB61BD80C",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1591968906;\n bh=685OGSSxCgUCcSJaMABPshmPEF+8K4dtf8bWun4KRho=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=NrZMfx6RhRBFKMvwjGiZ12WsBRlMWRdtNOkVJoHsdRGVB0g1yDwkhP8bVZalCDTkt\n Qd06inRpDYIdGDNJvq78qeeZ7YwW9QCr19dE6TGeTwngS6yVjb/eXNWZw+0VYPoJW8\n t6MKB0JiY0ySddN/T2ei2mynTs6rElot4nOrUVJw=",
        "From": "Somnath Kotur <somnath.kotur@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com",
        "Date": "Fri, 12 Jun 2020 18:59:30 +0530",
        "Message-Id": "<20200612132934.16488-47-somnath.kotur@broadcom.com>",
        "X-Mailer": "git-send-email 2.10.1.613.g2cc2e70",
        "In-Reply-To": "<20200612132934.16488-1-somnath.kotur@broadcom.com>",
        "References": "<20200612132934.16488-1-somnath.kotur@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 46/50] net/bnxt: create default flow rules for\n\tthe VF-rep conduit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Invoked 3 new APIs for the default flow create/destroy and to get\nthe action ptr for a default flow.\nChanged ulp_intf_update() to accept rte_eth_dev as input and invoke\nthe same from the VF rep start function.\nULP Mark Manager will indicate if the cfa_code returned in the\nRx completion descriptor was for one of the default flow rules\ncreated for the VF representor conduit. The mark_id returned\nin such a case would be the VF rep's DPDK Port id, which can be\nused to get the corresponding rte_eth_dev struct in bnxt_vf_recv\n\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h      |   4 +-\n drivers/net/bnxt/bnxt_reps.c | 134 ++++++++++++++++++++++++++++++-------------\n drivers/net/bnxt/bnxt_reps.h |   3 +-\n drivers/net/bnxt/bnxt_rxr.c  |  24 ++++----\n drivers/net/bnxt/bnxt_txq.h  |   1 +\n 5 files changed, 111 insertions(+), 55 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex 32acced..f16bf33 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -806,8 +806,10 @@ struct bnxt_vf_representor {\n \tuint16_t\t\tfw_fid;\n \tuint16_t\t\tdflt_vnic_id;\n \tuint16_t\t\tsvif;\n-\tuint16_t\t\ttx_cfa_action;\n+\tuint32_t\t\tvfr_tx_cfa_action;\n \tuint16_t\t\trx_cfa_code;\n+\tuint32_t\t\trep2vf_flow_id;\n+\tuint32_t\t\tvf2rep_flow_id;\n \t/* Private data store of associated PF/Trusted VF */\n \tstruct rte_eth_dev\t*parent_dev;\n \tuint8_t\t\t\tmac_addr[RTE_ETHER_ADDR_LEN];\ndiff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c\nindex b6964ab..584846a 100644\n--- a/drivers/net/bnxt/bnxt_reps.c\n+++ b/drivers/net/bnxt/bnxt_reps.c\n@@ -12,6 +12,9 @@\n #include \"bnxt_txr.h\"\n #include \"bnxt_hwrm.h\"\n #include \"hsi_struct_def_dpdk.h\"\n+#include \"bnxt_tf_common.h\"\n+#include \"ulp_port_db.h\"\n+#include \"ulp_flow_db.h\"\n \n static const struct eth_dev_ops bnxt_vf_rep_dev_ops = {\n \t.dev_infos_get = bnxt_vf_rep_dev_info_get_op,\n@@ -29,30 +32,20 @@ static const struct eth_dev_ops bnxt_vf_rep_dev_ops = {\n };\n \n uint16_t\n-bnxt_vfr_recv(struct bnxt *bp, uint16_t cfa_code, uint16_t queue_id,\n-\t      struct rte_mbuf *mbuf)\n+bnxt_vfr_recv(uint16_t port_id, uint16_t queue_id, struct rte_mbuf *mbuf)\n {\n \tstruct bnxt_sw_rx_bd *prod_rx_buf;\n \tstruct bnxt_rx_ring_info *rep_rxr;\n \tstruct bnxt_rx_queue *rep_rxq;\n \tstruct rte_eth_dev *vfr_eth_dev;\n \tstruct bnxt_vf_representor *vfr_bp;\n-\tuint16_t vf_id;\n \tuint16_t mask;\n \tuint8_t que;\n \n-\tvf_id = bp->cfa_code_map[cfa_code];\n-\t/* cfa_code is invalid OR vf_id > MAX REP. Assume normal Rx */\n-\tif (vf_id == BNXT_VF_IDX_INVALID || vf_id > BNXT_MAX_VF_REPS)\n-\t\treturn 1;\n-\tvfr_eth_dev = bp->rep_info[vf_id].vfr_eth_dev;\n+\tvfr_eth_dev = &rte_eth_devices[port_id];\n \tif (!vfr_eth_dev)\n \t\treturn 1;\n \tvfr_bp = vfr_eth_dev->data->dev_private;\n-\tif (vfr_bp->rx_cfa_code != cfa_code) {\n-\t\t/* cfa_code not meant for this VF rep!!?? */\n-\t\treturn 1;\n-\t}\n \t/* If rxq_id happens to be > max rep_queue, use rxq0 */\n \tque = queue_id < BNXT_MAX_VF_REP_RINGS ? queue_id : 0;\n \trep_rxq = vfr_bp->rx_queues[que];\n@@ -127,7 +120,7 @@ bnxt_vf_rep_tx_burst(void *tx_queue,\n \tpthread_mutex_lock(&parent->rep_info->vfr_lock);\n \tptxq = parent->tx_queues[qid];\n \n-\tptxq->tx_cfa_action = vf_rep_bp->tx_cfa_action;\n+\tptxq->vfr_tx_cfa_action = vf_rep_bp->vfr_tx_cfa_action;\n \n \tfor (i = 0; i < nb_pkts; i++) {\n \t\tvf_rep_bp->tx_bytes[qid] += tx_pkts[i]->pkt_len;\n@@ -135,7 +128,7 @@ bnxt_vf_rep_tx_burst(void *tx_queue,\n \t}\n \n \trc = bnxt_xmit_pkts(ptxq, tx_pkts, nb_pkts);\n-\tptxq->tx_cfa_action = 0;\n+\tptxq->vfr_tx_cfa_action = 0;\n \tpthread_mutex_unlock(&parent->rep_info->vfr_lock);\n \n \treturn rc;\n@@ -252,10 +245,67 @@ int bnxt_vf_rep_link_update_op(struct rte_eth_dev *eth_dev, int wait_to_compl)\n \treturn rc;\n }\n \n-static int bnxt_vfr_alloc(struct bnxt_vf_representor *vfr)\n+static int bnxt_tf_vfr_alloc(struct rte_eth_dev *vfr_ethdev)\n+{\n+\tint rc;\n+\tstruct bnxt_vf_representor *vfr = vfr_ethdev->data->dev_private;\n+\tstruct rte_eth_dev *parent_dev = vfr->parent_dev;\n+\tstruct bnxt *parent_bp = parent_dev->data->dev_private;\n+\tuint16_t vfr_port_id = vfr_ethdev->data->port_id;\n+\tstruct ulp_tlv_param param_list[] = {\n+\t\t{\n+\t\t\t.type = BNXT_ULP_DF_PARAM_TYPE_DEV_PORT_ID,\n+\t\t\t.length = 2,\n+\t\t\t.value = {(vfr_port_id >> 8) & 0xff, vfr_port_id & 0xff}\n+\t\t},\n+\t\t{\n+\t\t\t.type = BNXT_ULP_DF_PARAM_TYPE_LAST,\n+\t\t\t.length = 0,\n+\t\t\t.value = {0}\n+\t\t}\n+\t};\n+\n+\tulp_port_db_dev_port_intf_update(parent_bp->ulp_ctx, vfr_ethdev);\n+\n+\trc = ulp_default_flow_create(parent_dev, param_list,\n+\t\t\t\t     BNXT_ULP_DF_TPL_VFREP_TO_VF,\n+\t\t\t\t     &vfr->rep2vf_flow_id);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(DEBUG,\n+\t\t\t    \"Default flow rule creation for VFR->VF failed!\\n\");\n+\t\treturn -EIO;\n+\t}\n+\n+\tBNXT_TF_DBG(DEBUG, \"*** Default flow rule created for VFR->VF! ***\\n\");\n+\tBNXT_TF_DBG(DEBUG, \"rep2vf_flow_id = %d\\n\", vfr->rep2vf_flow_id);\n+\trc = ulp_default_flow_db_cfa_action_get(parent_bp->ulp_ctx,\n+\t\t\t\t\t\tvfr->rep2vf_flow_id,\n+\t\t\t\t\t\t&vfr->vfr_tx_cfa_action);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(DEBUG,\n+\t\t\t    \"Failed to get action_ptr for VFR->VF dflt rule\\n\");\n+\t\treturn -EIO;\n+\t}\n+\tBNXT_TF_DBG(DEBUG, \"tx_cfa_action = %d\\n\", vfr->vfr_tx_cfa_action);\n+\trc = ulp_default_flow_create(parent_dev, param_list,\n+\t\t\t\t     BNXT_ULP_DF_TPL_VF_TO_VFREP,\n+\t\t\t\t     &vfr->vf2rep_flow_id);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(DEBUG,\n+\t\t\t    \"Default flow rule creation for VF->VFR failed!\\n\");\n+\t\treturn -EIO;\n+\t}\n+\n+\tBNXT_TF_DBG(DEBUG, \"*** Default flow rule created for VF->VFR! ***\\n\");\n+\tBNXT_TF_DBG(DEBUG, \"vfr2rep_flow_id = %d\\n\", vfr->vf2rep_flow_id);\n+\n+\treturn 0;\n+}\n+\n+static int bnxt_vfr_alloc(struct rte_eth_dev *vfr_ethdev)\n {\n \tint rc = 0;\n-\tstruct bnxt *parent_bp;\n+\tstruct bnxt_vf_representor *vfr = vfr_ethdev->data->dev_private;\n \n \tif (!vfr || !vfr->parent_dev) {\n \t\tPMD_DRV_LOG(ERR,\n@@ -263,10 +313,8 @@ static int bnxt_vfr_alloc(struct bnxt_vf_representor *vfr)\n \t\treturn -ENOMEM;\n \t}\n \n-\tparent_bp = vfr->parent_dev->data->dev_private;\n-\n \t/* Check if representor has been already allocated in FW */\n-\tif (vfr->tx_cfa_action && vfr->rx_cfa_code)\n+\tif (vfr->vfr_tx_cfa_action && vfr->rx_cfa_code)\n \t\treturn 0;\n \n \t/*\n@@ -274,24 +322,14 @@ static int bnxt_vfr_alloc(struct bnxt_vf_representor *vfr)\n \t * Otherwise the FW will create the VF-rep rules with\n \t * default drop action.\n \t */\n-\n-\t/*\n-\t * This is where we need to replace invoking an HWRM cmd\n-\t * with the new TFLIB ULP API to do more/less the same job\n-\trc = bnxt_hwrm_cfa_vfr_alloc(parent_bp,\n-\t\t\t\t     vfr->vf_id,\n-\t\t\t\t     &vfr->tx_cfa_action,\n-\t\t\t\t     &vfr->rx_cfa_code);\n-\t */\n-\tif (!rc) {\n-\t\tparent_bp->cfa_code_map[vfr->rx_cfa_code] = vfr->vf_id;\n+\trc = bnxt_tf_vfr_alloc(vfr_ethdev);\n+\tif (!rc)\n \t\tPMD_DRV_LOG(DEBUG, \"allocated representor %d in FW\\n\",\n \t\t\t    vfr->vf_id);\n-\t} else {\n+\telse\n \t\tPMD_DRV_LOG(ERR,\n \t\t\t    \"Failed to alloc representor %d in FW\\n\",\n \t\t\t    vfr->vf_id);\n-\t}\n \n \treturn rc;\n }\n@@ -312,7 +350,7 @@ int bnxt_vf_rep_dev_start_op(struct rte_eth_dev *eth_dev)\n \tstruct bnxt_vf_representor *rep_bp = eth_dev->data->dev_private;\n \tint rc;\n \n-\trc = bnxt_vfr_alloc(rep_bp);\n+\trc = bnxt_vfr_alloc(eth_dev);\n \n \tif (!rc) {\n \t\teth_dev->rx_pkt_burst = &bnxt_vf_rep_rx_burst;\n@@ -327,6 +365,25 @@ int bnxt_vf_rep_dev_start_op(struct rte_eth_dev *eth_dev)\n \treturn rc;\n }\n \n+static int bnxt_tf_vfr_free(struct bnxt_vf_representor *vfr)\n+{\n+\tint rc = 0;\n+\n+\trc = ulp_default_flow_destroy(vfr->parent_dev,\n+\t\t\t\t      vfr->rep2vf_flow_id);\n+\tif (rc)\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t    \"default flow destroy failed rep2vf flowid: %d\\n\",\n+\t\t\t    vfr->rep2vf_flow_id);\n+\trc = ulp_default_flow_destroy(vfr->parent_dev,\n+\t\t\t\t      vfr->vf2rep_flow_id);\n+\tif (rc)\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t    \"default flow destroy failed vf2rep flowid: %d\\n\",\n+\t\t\t    vfr->vf2rep_flow_id);\n+\treturn 0;\n+}\n+\n static int bnxt_vfr_free(struct bnxt_vf_representor *vfr)\n {\n \tint rc = 0;\n@@ -341,15 +398,10 @@ static int bnxt_vfr_free(struct bnxt_vf_representor *vfr)\n \tparent_bp = vfr->parent_dev->data->dev_private;\n \n \t/* Check if representor has been already freed in FW */\n-\tif (!vfr->tx_cfa_action && !vfr->rx_cfa_code)\n+\tif (!vfr->vfr_tx_cfa_action && !vfr->rx_cfa_code)\n \t\treturn 0;\n \n-\t/*\n-\t * This is where we need to replace invoking an HWRM cmd\n-\t * with the new TFLIB ULP API to do more/less the same job\n-\trc = bnxt_hwrm_cfa_vfr_free(parent_bp,\n-\t\t\t\t    vfr->vf_id);\n-\t */\n+\trc = bnxt_tf_vfr_free(vfr);\n \tif (rc) {\n \t\tPMD_DRV_LOG(ERR,\n \t\t\t    \"Failed to free representor %d in FW\\n\",\n@@ -360,7 +412,7 @@ static int bnxt_vfr_free(struct bnxt_vf_representor *vfr)\n \tparent_bp->cfa_code_map[vfr->rx_cfa_code] = BNXT_VF_IDX_INVALID;\n \tPMD_DRV_LOG(DEBUG, \"freed representor %d in FW\\n\",\n \t\t    vfr->vf_id);\n-\tvfr->tx_cfa_action = 0;\n+\tvfr->vfr_tx_cfa_action = 0;\n \tvfr->rx_cfa_code = 0;\n \n \treturn rc;\ndiff --git a/drivers/net/bnxt/bnxt_reps.h b/drivers/net/bnxt/bnxt_reps.h\nindex c8a3c7d..dd8eeb9 100644\n--- a/drivers/net/bnxt/bnxt_reps.h\n+++ b/drivers/net/bnxt/bnxt_reps.h\n@@ -13,8 +13,7 @@\n #define BNXT_VF_IDX_INVALID             0xffff\n \n uint16_t\n-bnxt_vfr_recv(struct bnxt *bp, uint16_t cfa_code, uint16_t queue_id,\n-\t      struct rte_mbuf *mbuf);\n+bnxt_vfr_recv(uint16_t port_id, uint16_t queue_id, struct rte_mbuf *mbuf);\n int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params);\n int bnxt_vf_representor_uninit(struct rte_eth_dev *eth_dev);\n int bnxt_vf_rep_dev_info_get_op(struct rte_eth_dev *eth_dev,\ndiff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 0ecf199..6405887 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -403,9 +403,9 @@ bnxt_get_rx_ts_thor(struct bnxt *bp, uint32_t rx_ts_cmpl)\n }\n #endif\n \n-static void\n+static uint32_t\n bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1,\n-\t\t\t  struct rte_mbuf *mbuf)\n+\t\t\t  struct rte_mbuf *mbuf, uint32_t *vfr_flag)\n {\n \tuint32_t cfa_code;\n \tuint32_t meta_fmt;\n@@ -414,7 +414,6 @@ bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1,\n \tuint32_t mark_id;\n \tuint32_t flags2;\n \tuint32_t gfid_support = 0;\n-\tuint32_t vfr_flag;\n \tint rc;\n \n \tif (BNXT_GFID_ENABLED(bp))\n@@ -484,19 +483,21 @@ bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1,\n \t}\n \n \trc = ulp_mark_db_mark_get(bp->ulp_ctx, gfid,\n-\t\t\t\t  cfa_code, &vfr_flag, &mark_id);\n+\t\t\t\t  cfa_code, vfr_flag, &mark_id);\n \tif (!rc) {\n \t\t/* Got the mark, write it to the mbuf and return */\n \t\tmbuf->hash.fdir.hi = mark_id;\n \t\tmbuf->udata64 = (cfa_code & 0xffffffffull) << 32;\n \t\tmbuf->hash.fdir.id = rxcmp1->cfa_code;\n \t\tmbuf->ol_flags |= PKT_RX_FDIR | PKT_RX_FDIR_ID;\n-\t\treturn;\n+\t\treturn mark_id;\n \t}\n \n skip_mark:\n \tmbuf->hash.fdir.hi = 0;\n \tmbuf->hash.fdir.id = 0;\n+\n+\treturn 0;\n }\n \n void bnxt_set_mark_in_mbuf(struct bnxt *bp,\n@@ -552,7 +553,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tint rc = 0;\n \tuint8_t agg_buf = 0;\n \tuint16_t cmp_type;\n-\tuint32_t flags2_f = 0;\n+\tuint32_t flags2_f = 0, vfr_flag = 0, mark_id = 0;\n \tuint16_t flags_type;\n \tstruct bnxt *bp = rxq->bp;\n \n@@ -631,7 +632,8 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \t}\n \n \tif (BNXT_TRUFLOW_EN(bp))\n-\t\tbnxt_ulp_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf);\n+\t\tmark_id = bnxt_ulp_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf,\n+\t\t\t\t\t\t    &vfr_flag);\n \telse\n \t\tbnxt_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf);\n \n@@ -735,10 +737,10 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n rx:\n \t*rx_pkt = mbuf;\n \n-\tif ((BNXT_VF_IS_TRUSTED(rxq->bp) || BNXT_PF(rxq->bp)) &&\n-\t    rxq->bp->cfa_code_map && rxcmp1->cfa_code) {\n-\t\tif (!bnxt_vfr_recv(rxq->bp, rxcmp1->cfa_code, rxq->queue_id,\n-\t\t\t\t   mbuf)) {\n+\tif (BNXT_TRUFLOW_EN(bp) &&\n+\t    (BNXT_VF_IS_TRUSTED(bp) || BNXT_PF(bp)) &&\n+\t    vfr_flag) {\n+\t\tif (!bnxt_vfr_recv(mark_id, rxq->queue_id, mbuf)) {\n \t\t\t/* Now return an error so that nb_rx_pkts is not\n \t\t\t * incremented.\n \t\t\t * This packet was meant to be given to the representor.\ndiff --git a/drivers/net/bnxt/bnxt_txq.h b/drivers/net/bnxt/bnxt_txq.h\nindex 69ff89a..a1ab3f3 100644\n--- a/drivers/net/bnxt/bnxt_txq.h\n+++ b/drivers/net/bnxt/bnxt_txq.h\n@@ -30,6 +30,7 @@ struct bnxt_tx_queue {\n \tint\t\t\tindex;\n \tint\t\t\ttx_wake_thresh;\n \tuint32_t                tx_cfa_action;\n+\tuint32_t\t\tvfr_tx_cfa_action;\n \tstruct bnxt_tx_ring_info\t*tx_ring;\n \n \tunsigned int\t\tcp_nr_rings;\n",
    "prefixes": [
        "46/50"
    ]
}