get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 72332,
    "url": "https://patches.dpdk.org/api/patches/72332/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200627100050.19688-15-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": "<20200627100050.19688-15-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200627100050.19688-15-ajit.khaparde@broadcom.com",
    "date": "2020-06-27T10:00:39",
    "name": "[v4,14/25] net/bnxt: add a devarg to set max flow count",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "1e5347fcf4e256fc4173a4f46afbcef1ed9e326d",
    "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/20200627100050.19688-15-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 10645,
            "url": "https://patches.dpdk.org/api/series/10645/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10645",
            "date": "2020-06-27T10:00:25",
            "name": "bnxt patches",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/10645/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/72332/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/72332/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 351F5A0522;\n\tSat, 27 Jun 2020 12:03:40 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 087EA1C0AF;\n\tSat, 27 Jun 2020 12:01:34 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 5983B1BF7D\n for <dev@dpdk.org>; Sat, 27 Jun 2020 12:01:00 +0200 (CEST)",
            "from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net\n [10.75.242.48])\n by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id A1B5D30C0FB;\n Sat, 27 Jun 2020 03:00:59 -0700 (PDT)",
            "from localhost.localdomain (unknown [10.230.185.215])\n by mail-irv-17.broadcom.com (Postfix) with ESMTP id 1EF4B14008D;\n Sat, 27 Jun 2020 03:00:59 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com A1B5D30C0FB",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1593252059;\n bh=qtdhanwLXbmWwvG5GQBG/YpqGb1zMfbkgtlUedwg6uc=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=lLmyYVe/akF85KhMuI510PxaqYG/9edp8Kzeubjk0DxBQso8JMlEPIYZHBQkL8MvE\n jelE6LFyEiiDO1qeB0j1LsOGK9xwJAuNwUTbJ3VOCWHsj6KJrO6Kiahgkvu3lgUEDj\n saz0K0oCxWJ06T+baj3Psn1ZdTCdSDHetsIabIuw=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Shuanglin Wang <shuanglin.wang@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>,\n Kishore Padmanabha <kishore.padmanabha@broadcom.com>",
        "Date": "Sat, 27 Jun 2020 03:00:39 -0700",
        "Message-Id": "<20200627100050.19688-15-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)",
        "In-Reply-To": "<20200627100050.19688-1-ajit.khaparde@broadcom.com>",
        "References": "<20200612125024.15989-1-somnath.kotur@broadcom.com>\n <20200627100050.19688-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=y",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v4 14/25] net/bnxt: add a devarg to set max flow\n\tcount",
        "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": "From: Shuanglin Wang <shuanglin.wang@broadcom.com>\n\nUser could set max flow count by passing a devarg\n\"-w 0000:0d:00.0,max_num_kflows=64\" to a DPDK application;\nThe value must be not less than 32K and be power-of-2;\nthe default value is 32K.\n\nSigned-off-by: Shuanglin Wang <shuanglin.wang@broadcom.com>\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\nReviewed-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nReviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h            |  1 +\n drivers/net/bnxt/bnxt_ethdev.c     | 62 +++++++++++++++++++++++++++++-\n drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 35 +++++++++++++++++\n 3 files changed, 96 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex 2c3aef6b2..79e9b288d 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -725,6 +725,7 @@ struct bnxt {\n \tstruct bnxt_ulp_context\t*ulp_ctx;\n \tstruct bnxt_flow_stat_info *flow_stat;\n \tuint8_t\t\t\tflow_xstat;\n+\tuint16_t\t\tmax_num_kflows;\n };\n \n #define BNXT_FC_TIMER\t1 /* Timer freq in Sec Flow Counters */\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex e8b4c058a..7022f6d52 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -129,9 +129,11 @@ static const struct rte_pci_id bnxt_pci_id_map[] = {\n \n #define BNXT_DEVARG_TRUFLOW\t\"host-based-truflow\"\n #define BNXT_DEVARG_FLOW_XSTAT\t\"flow-xstat\"\n+#define BNXT_DEVARG_MAX_NUM_KFLOWS  \"max-num-kflows\"\n static const char *const bnxt_dev_args[] = {\n \tBNXT_DEVARG_TRUFLOW,\n \tBNXT_DEVARG_FLOW_XSTAT,\n+\tBNXT_DEVARG_MAX_NUM_KFLOWS,\n \tNULL\n };\n \n@@ -147,6 +149,19 @@ static const char *const bnxt_dev_args[] = {\n  */\n #define\tBNXT_DEVARG_FLOW_XSTAT_INVALID(flow_xstat)\t((flow_xstat) > 1)\n \n+/*\n+ * max_num_kflows must be >= 32\n+ * and must be a power-of-2 supported value\n+ * return: 1 -> invalid\n+ *         0 -> valid\n+ */\n+static int bnxt_devarg_max_num_kflow_invalid(uint16_t max_num_kflows)\n+{\n+\tif (max_num_kflows < 32 || !rte_is_power_of_2(max_num_kflows))\n+\t\treturn 1;\n+\treturn 0;\n+}\n+\n static int bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask);\n static void bnxt_print_link_info(struct rte_eth_dev *eth_dev);\n static int bnxt_dev_uninit(struct rte_eth_dev *eth_dev);\n@@ -5390,6 +5405,42 @@ bnxt_parse_devarg_flow_xstat(__rte_unused const char *key,\n \treturn 0;\n }\n \n+static int\n+bnxt_parse_devarg_max_num_kflows(__rte_unused const char *key,\n+\t\t\t\t\tconst char *value, void *opaque_arg)\n+{\n+\tstruct bnxt *bp = opaque_arg;\n+\tunsigned long max_num_kflows;\n+\tchar *end = NULL;\n+\n+\tif (!value || !opaque_arg) {\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\"Invalid parameter passed to max_num_kflows devarg.\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tmax_num_kflows = strtoul(value, &end, 10);\n+\tif (end == NULL || *end != '\\0' ||\n+\t\t(max_num_kflows == ULONG_MAX && errno == ERANGE)) {\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\"Invalid parameter passed to max_num_kflows devarg.\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (bnxt_devarg_max_num_kflow_invalid(max_num_kflows)) {\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\"Invalid value passed to max_num_kflows devarg.\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tbp->max_num_kflows = max_num_kflows;\n+\tif (bp->max_num_kflows)\n+\t\tPMD_DRV_LOG(INFO, \"max_num_kflows set as %ldK.\\n\",\n+\t\t\t\tmax_num_kflows);\n+\n+\treturn 0;\n+}\n+\n static void\n bnxt_parse_dev_args(struct bnxt *bp, struct rte_devargs *devargs)\n {\n@@ -5404,18 +5455,25 @@ bnxt_parse_dev_args(struct bnxt *bp, struct rte_devargs *devargs)\n \n \t/*\n \t * Handler for \"truflow\" devarg.\n-\t * Invoked as for ex: \"-w 0000:00:0d.0,host-based-truflow=1”\n+\t * Invoked as for ex: \"-w 0000:00:0d.0,host-based-truflow=1\"\n \t */\n \trte_kvargs_process(kvlist, BNXT_DEVARG_TRUFLOW,\n \t\t\t   bnxt_parse_devarg_truflow, bp);\n \n \t/*\n \t * Handler for \"flow_xstat\" devarg.\n-\t * Invoked as for ex: \"-w 0000:00:0d.0,flow_xstat=1”\n+\t * Invoked as for ex: \"-w 0000:00:0d.0,flow_xstat=1\"\n \t */\n \trte_kvargs_process(kvlist, BNXT_DEVARG_FLOW_XSTAT,\n \t\t\t   bnxt_parse_devarg_flow_xstat, bp);\n \n+\t/*\n+\t * Handler for \"max_num_kflows\" devarg.\n+\t * Invoked as for ex: \"-w 000:00:0d.0,max_num_kflows=32\"\n+\t */\n+\trte_kvargs_process(kvlist, BNXT_DEVARG_MAX_NUM_KFLOWS,\n+\t\t\t   bnxt_parse_devarg_max_num_kflows, bp);\n+\n \trte_kvargs_free(kvlist);\n }\n \ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\nindex 872c1aba4..00e21fa22 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n@@ -276,6 +276,38 @@ ulp_ctx_init(struct bnxt *bp,\n \treturn rc;\n }\n \n+/* The function to initialize ulp dparms with devargs */\n+static int32_t\n+ulp_dparms_init(struct bnxt *bp,\n+\t\tstruct bnxt_ulp_context *ulp_ctx)\n+{\n+\tstruct bnxt_ulp_device_params *dparms;\n+\tuint32_t dev_id;\n+\n+\tif (!bp->max_num_kflows)\n+\t\treturn -EINVAL;\n+\n+\tif (bnxt_ulp_cntxt_dev_id_get(ulp_ctx, &dev_id)) {\n+\t\tBNXT_TF_DBG(DEBUG, \"Failed to get device id\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdparms = bnxt_ulp_device_params_get(dev_id);\n+\tif (!dparms) {\n+\t\tBNXT_TF_DBG(DEBUG, \"Failed to get device parms\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* num_flows = max_num_kflows * 1024 */\n+\tdparms->num_flows = bp->max_num_kflows * 1024;\n+\t/* GFID =  2 * num_flows */\n+\tdparms->gfid_entries = dparms->num_flows * 2;\n+\tBNXT_TF_DBG(DEBUG, \"Set the number of flows = %\"PRIu64\"\\n\",\n+\t\t    dparms->num_flows);\n+\n+\treturn 0;\n+}\n+\n static int32_t\n ulp_ctx_attach(struct bnxt_ulp_context *ulp_ctx,\n \t       struct bnxt_ulp_session_state *session)\n@@ -497,6 +529,9 @@ bnxt_ulp_init(struct bnxt *bp)\n \t\tgoto jump_to_error;\n \t}\n \n+\t/* Initialize ulp dparms with values devargs passed */\n+\trc = ulp_dparms_init(bp, bp->ulp_ctx);\n+\n \t/* create the port database */\n \trc = ulp_port_db_init(bp->ulp_ctx);\n \tif (rc) {\n",
    "prefixes": [
        "v4",
        "14/25"
    ]
}