get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 101279,
    "url": "https://patches.dpdk.org/api/patches/101279/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20211012211845.71121-4-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20211012211845.71121-4-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211012211845.71121-4-ajit.khaparde@broadcom.com",
    "date": "2021-10-12T21:18:45",
    "name": "[v4,3/3] net/bnxt: enhance support for RSS action",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "78fa66015ce620fceedc94ad590b8b1ff94a79a8",
    "submitter": {
        "id": 501,
        "url": "https://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "https://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20211012211845.71121-4-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 19575,
            "url": "https://patches.dpdk.org/api/series/19575/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=19575",
            "date": "2021-10-12T21:18:42",
            "name": "patchset for bnxt PMD",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/19575/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/101279/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/101279/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 5CC0DA0C4D;\n\tTue, 12 Oct 2021 23:20:25 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5B89341154;\n\tTue, 12 Oct 2021 23:20:16 +0200 (CEST)",
            "from mail-pl1-f181.google.com (mail-pl1-f181.google.com\n [209.85.214.181])\n by mails.dpdk.org (Postfix) with ESMTP id A3EDC4113A\n for <dev@dpdk.org>; Tue, 12 Oct 2021 23:20:11 +0200 (CEST)",
            "by mail-pl1-f181.google.com with SMTP id g9so370820plo.12\n for <dev@dpdk.org>; Tue, 12 Oct 2021 14:20:11 -0700 (PDT)",
            "from localhost.localdomain ([136.52.99.246])\n by smtp.gmail.com with ESMTPSA id ls7sm4084941pjb.16.2021.10.12.14.20.09\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Tue, 12 Oct 2021 14:20:09 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version; bh=7W5HflzflfBzWFvQJwwmDJzARtj33I86bdRBEVyjWis=;\n b=GJi1ijG9dLAlWzcMNe/iFZRFCD2jssLy96rEvw5FN1Og/HsxgVUeJ/yY3tsG11rK0T\n /ecoYICmW/hPlJEoKXa9lV6W+FqeROIsGzQLuz3E/xwocTQCssZVZihpDumXRvEbg6zk\n ZLZp7R4rn8yxouIrBZfHJdbZpIbLXR7Dc8UTs=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20210112;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references:mime-version;\n bh=7W5HflzflfBzWFvQJwwmDJzARtj33I86bdRBEVyjWis=;\n b=sc/eMijrYn7TQS8Vrv880cFITCwpDlF/zTxyy3NydO0kh/JDQ9LEyM7L2m64u64qYF\n nFqoQ+l9VTF/6/FdOfnjTLpS0XJTj+djbM0UkdOX1V0RaaB8bBVoE1rU0SzlkMSBEqWy\n Hkwk+8xJ3StDtclhPZD9v2CSNEjWGkUv4d9RxTq8m5LPsT3SsYe20oQyH5PMvyWx2mVW\n Z3XIklHMi+zkZ8iBIBI12IxrgQoAjLrrfpHAZasmSuDAEWQExub5NE8q54chKgB7l4/y\n tPEwTlwamRxGCZ97TPb0j3s/sUdKy98oPMw5Huf/EYYc23AJkacyYxXttU3t6OjARL4+\n KDeQ==",
        "X-Gm-Message-State": "AOAM532tq5VUp05xHlP6pQqtwbPvgv4YJkLuHscVCQl3W61Nu9tDnJAm\n f2dGxeSsta4NCfChM2KL3jn+DlW5LmQbl6CtmIMRt0tkNV0XQmNEU6t8DQA70SzoWWmW7E9TU+R\n L1S/GkKX6dYD4Jiumk3KdCezJ9YRkU60bpHv1o66GPl1ACNZG388MEks9ezu0/G4=",
        "X-Google-Smtp-Source": "\n ABdhPJyMP9QyVx9TR6yy0bSm4jhm7WWk0E889+5+olQmhxwSZoQKgqhSeh0cYIhsRo28SfPUWLh4GA==",
        "X-Received": "by 2002:a17:90a:ba09:: with SMTP id\n s9mr9029735pjr.42.1634073610471;\n Tue, 12 Oct 2021 14:20:10 -0700 (PDT)",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, Lance Richardson <lance.richardson@broadcom.com>,\n Kalesh AP <kalesh-anakkur.purayil@broadcom.com>",
        "Date": "Tue, 12 Oct 2021 14:18:45 -0700",
        "Message-Id": "<20211012211845.71121-4-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.30.1 (Apple Git-130)",
        "In-Reply-To": "<20211012211845.71121-1-ajit.khaparde@broadcom.com>",
        "References": "<dbe8f02f-461a-0806-923d-122d23ee6cac@intel.com>\n <20211012211845.71121-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"0000000000001e34c805ce2e69d3\"",
        "X-Content-Filtered-By": "Mailman/MimeDel 2.1.29",
        "Subject": "[dpdk-dev] [PATCH v4 3/3] net/bnxt: enhance support for RSS action",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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": "Enhance support for RSS action in the non-TruFlow path.\nThis will allow the user or application to update the RSS settings\nusing RTE_FLOW API.\n\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\nReviewed-by: Lance Richardson <lance.richardson@broadcom.com>\nReviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>\n---\n drivers/net/bnxt/bnxt_filter.h |   1 +\n drivers/net/bnxt/bnxt_flow.c   | 196 ++++++++++++++++++++++++++++++++-\n 2 files changed, 196 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h\nindex 8bae0c4c72..587932c96f 100644\n--- a/drivers/net/bnxt/bnxt_filter.h\n+++ b/drivers/net/bnxt/bnxt_filter.h\n@@ -43,6 +43,7 @@ struct bnxt_filter_info {\n #define HWRM_CFA_EM_FILTER\t1\n #define HWRM_CFA_NTUPLE_FILTER\t2\n #define HWRM_CFA_TUNNEL_REDIRECT_FILTER\t3\n+#define HWRM_CFA_CONFIG\t\t4\n \tuint8_t                 filter_type;\n \tuint32_t                dst_id;\n \ndiff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex 59489b591a..b2ebb5634e 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -738,6 +738,10 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp,\n \tfilter->enables = en;\n \tfilter->valid_flags = valid_flags;\n \n+\t/* Items parsed but no filter to create in HW. */\n+\tif (filter->enables == 0 && filter->valid_flags == 0)\n+\t\tfilter->filter_type = HWRM_CFA_CONFIG;\n+\n \treturn 0;\n }\n \n@@ -1070,6 +1074,167 @@ bnxt_update_filter_flags_en(struct bnxt_filter_info *filter,\n \t\tfilter1, filter->fw_l2_filter_id, filter->l2_ref_cnt);\n }\n \n+/* Valid actions supported along with RSS are count and mark. */\n+static int\n+bnxt_validate_rss_action(const struct rte_flow_action actions[])\n+{\n+\tfor (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {\n+\t\tswitch (actions->type) {\n+\t\tcase RTE_FLOW_ACTION_TYPE_VOID:\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_RSS:\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_MARK:\n+\t\t\tbreak;\n+\t\tcase RTE_FLOW_ACTION_TYPE_COUNT:\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\treturn -ENOTSUP;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+bnxt_get_vnic(struct bnxt *bp, uint32_t group)\n+{\n+\tint vnic_id = 0;\n+\n+\t/* For legacy NS3 based implementations,\n+\t * group_id will be mapped to a VNIC ID.\n+\t */\n+\tif (BNXT_STINGRAY(bp))\n+\t\tvnic_id = group;\n+\n+\t/* Non NS3 cases, group_id will be ignored.\n+\t * Setting will be configured on default VNIC.\n+\t */\n+\treturn vnic_id;\n+}\n+\n+static int\n+bnxt_vnic_rss_cfg_update(struct bnxt *bp,\n+\t\t\t struct bnxt_vnic_info *vnic,\n+\t\t\t const struct rte_flow_action *act,\n+\t\t\t struct rte_flow_error *error)\n+{\n+\tconst struct rte_flow_action_rss *rss;\n+\tunsigned int rss_idx, i;\n+\tuint16_t hash_type;\n+\tuint64_t types;\n+\tint rc;\n+\n+\trss = (const struct rte_flow_action_rss *)act->conf;\n+\n+\t/* Currently only Toeplitz hash is supported. */\n+\tif (rss->func != RTE_ETH_HASH_FUNCTION_DEFAULT &&\n+\t    rss->func != RTE_ETH_HASH_FUNCTION_TOEPLITZ) {\n+\t\trte_flow_error_set(error,\n+\t\t\t\t   ENOTSUP,\n+\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t   act,\n+\t\t\t\t   \"Unsupported RSS hash function\");\n+\t\trc = -rte_errno;\n+\t\tgoto ret;\n+\t}\n+\n+\t/* key_len should match the hash key supported by hardware */\n+\tif (rss->key_len != 0 && rss->key_len != HW_HASH_KEY_SIZE) {\n+\t\trte_flow_error_set(error,\n+\t\t\t\t   EINVAL,\n+\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t   act,\n+\t\t\t\t   \"Incorrect hash key parameters\");\n+\t\trc = -rte_errno;\n+\t\tgoto ret;\n+\t}\n+\n+\t/* Currently RSS hash on inner and outer headers are supported.\n+\t * 0 => Default setting\n+\t * 1 => Inner\n+\t * 2 => Outer\n+\t */\n+\tif (rss->level > 2) {\n+\t\trte_flow_error_set(error,\n+\t\t\t\t   ENOTSUP,\n+\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t   act,\n+\t\t\t\t   \"Unsupported hash level\");\n+\t\trc = -rte_errno;\n+\t\tgoto ret;\n+\t}\n+\n+\tif ((rss->queue_num == 0 && rss->queue != NULL) ||\n+\t    (rss->queue_num != 0 && rss->queue == NULL)) {\n+\t\trte_flow_error_set(error,\n+\t\t\t\t   EINVAL,\n+\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t   act,\n+\t\t\t\t   \"Invalid queue config specified\");\n+\t\trc = -rte_errno;\n+\t\tgoto ret;\n+\t}\n+\n+\t/* If RSS types is 0, use a best effort configuration */\n+\ttypes = rss->types ? rss->types : ETH_RSS_IPV4;\n+\n+\thash_type = bnxt_rte_to_hwrm_hash_types(types);\n+\n+\t/* If requested types can't be supported, leave existing settings */\n+\tif (hash_type)\n+\t\tvnic->hash_type = hash_type;\n+\n+\tvnic->hash_mode =\n+\t\tbnxt_rte_to_hwrm_hash_level(bp, rss->types, rss->level);\n+\n+\t/* Update RSS key only if key_len != 0 */\n+\tif (rss->key_len != 0)\n+\t\tmemcpy(vnic->rss_hash_key, rss->key, rss->key_len);\n+\n+\tif (rss->queue_num == 0)\n+\t\tgoto skip_rss_table;\n+\n+\t/* Validate Rx queues */\n+\tfor (i = 0; i < rss->queue_num; i++) {\n+\t\tPMD_DRV_LOG(DEBUG, \"RSS action Queue %d\\n\", rss->queue[i]);\n+\n+\t\tif (rss->queue[i] >= bp->rx_nr_rings ||\n+\t\t    !bp->rx_queues[rss->queue[i]]) {\n+\t\t\trte_flow_error_set(error,\n+\t\t\t\t\t   EINVAL,\n+\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t\t   act,\n+\t\t\t\t\t   \"Invalid queue ID for RSS\");\n+\t\t\trc = -rte_errno;\n+\t\t\tgoto ret;\n+\t\t}\n+\t}\n+\n+\t/* Prepare the indirection table */\n+\tfor (rss_idx = 0; rss_idx < HW_HASH_INDEX_SIZE; rss_idx++) {\n+\t\tstruct bnxt_rx_queue *rxq;\n+\t\tuint32_t idx;\n+\n+\t\tidx = rss->queue[rss_idx % rss->queue_num];\n+\n+\t\tif (BNXT_CHIP_P5(bp)) {\n+\t\t\trxq = bp->rx_queues[idx];\n+\t\t\tvnic->rss_table[rss_idx * 2] =\n+\t\t\t\trxq->rx_ring->rx_ring_struct->fw_ring_id;\n+\t\t\tvnic->rss_table[rss_idx * 2 + 1] =\n+\t\t\t\trxq->cp_ring->cp_ring_struct->fw_ring_id;\n+\t\t} else {\n+\t\t\tvnic->rss_table[rss_idx] = vnic->fw_grp_ids[idx];\n+\t\t}\n+\t}\n+\n+skip_rss_table:\n+\trc = bnxt_hwrm_vnic_rss_cfg(bp, vnic);\n+ret:\n+\treturn rc;\n+}\n+\n static int\n bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\t\t     const struct rte_flow_item pattern[],\n@@ -1329,13 +1494,38 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\tfilter->flow_id = filter1->flow_id;\n \t\tbreak;\n \tcase RTE_FLOW_ACTION_TYPE_RSS:\n+\t\trc = bnxt_validate_rss_action(actions);\n+\t\tif (rc != 0) {\n+\t\t\trte_flow_error_set(error,\n+\t\t\t\t\t   EINVAL,\n+\t\t\t\t\t   RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t\t   act,\n+\t\t\t\t\t   \"Invalid actions specified with RSS\");\n+\t\t\trc = -rte_errno;\n+\t\t\tgoto ret;\n+\t\t}\n+\n \t\trss = (const struct rte_flow_action_rss *)act->conf;\n \n-\t\tvnic_id = attr->group;\n+\t\tvnic_id = bnxt_get_vnic(bp, attr->group);\n \n \t\tBNXT_VALID_VNIC_OR_RET(bp, vnic_id);\n \t\tvnic = &bp->vnic_info[vnic_id];\n \n+\t\t/*\n+\t\t * For non NS3 cases, rte_flow_items will not be considered\n+\t\t * for RSS updates.\n+\t\t */\n+\t\tif (filter->filter_type == HWRM_CFA_CONFIG) {\n+\t\t\t/* RSS config update requested */\n+\t\t\trc = bnxt_vnic_rss_cfg_update(bp, vnic, act, error);\n+\t\t\tif (rc != 0)\n+\t\t\t\treturn -rte_errno;\n+\n+\t\t\tfilter->dst_id = vnic->fw_vnic_id;\n+\t\t\tbreak;\n+\t\t}\n+\n \t\t/* Check if requested RSS config matches RSS config of VNIC\n \t\t * only if it is not a fresh VNIC configuration.\n \t\t * Otherwise the existing VNIC configuration can be used.\n@@ -2006,6 +2196,10 @@ _bnxt_flow_destroy(struct bnxt *bp,\n \t\t\treturn ret;\n \t}\n \n+\t/* For config type, there is no filter in HW. Finish cleanup here */\n+\tif (filter->filter_type == HWRM_CFA_CONFIG)\n+\t\tgoto done;\n+\n \tret = bnxt_match_filter(bp, filter);\n \tif (ret == 0)\n \t\tPMD_DRV_LOG(ERR, \"Could not find matching flow\\n\");\n",
    "prefixes": [
        "v4",
        "3/3"
    ]
}