get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 58909,
    "url": "http://patches.dpdk.org/api/patches/58909/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/0177d1cfdbab24bb28c3ceff0e46bd9edaa6f311.1567799552.git.rahul.lakkireddy@chelsio.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": "<0177d1cfdbab24bb28c3ceff0e46bd9edaa6f311.1567799552.git.rahul.lakkireddy@chelsio.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/0177d1cfdbab24bb28c3ceff0e46bd9edaa6f311.1567799552.git.rahul.lakkireddy@chelsio.com",
    "date": "2019-09-06T21:52:29",
    "name": "[08/12] net/cxgbe: separate VF only devargs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c16e0ce88b8ae7a7f4244f9283eaafb61e7a404f",
    "submitter": {
        "id": 241,
        "url": "http://patches.dpdk.org/api/people/241/?format=api",
        "name": "Rahul Lakkireddy",
        "email": "rahul.lakkireddy@chelsio.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/0177d1cfdbab24bb28c3ceff0e46bd9edaa6f311.1567799552.git.rahul.lakkireddy@chelsio.com/mbox/",
    "series": [
        {
            "id": 6317,
            "url": "http://patches.dpdk.org/api/series/6317/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=6317",
            "date": "2019-09-06T21:52:21",
            "name": "net/cxgbe: bug fixes and updates for CXGBE/CXGBEVF PMD",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/6317/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/58909/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/58909/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 011141F4C7;\n\tSat,  7 Sep 2019 00:00:07 +0200 (CEST)",
            "from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8])\n\tby dpdk.org (Postfix) with ESMTP id C17001F4B3\n\tfor <dev@dpdk.org>; Sat,  7 Sep 2019 00:00:05 +0200 (CEST)",
            "from localhost (scalar.blr.asicdesigners.com [10.193.185.94])\n\tby stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id x86LxxVh004211; \n\tFri, 6 Sep 2019 15:00:00 -0700"
        ],
        "From": "Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>",
        "To": "dev@dpdk.org",
        "Cc": "nirranjan@chelsio.com",
        "Date": "Sat,  7 Sep 2019 03:22:29 +0530",
        "Message-Id": "<0177d1cfdbab24bb28c3ceff0e46bd9edaa6f311.1567799552.git.rahul.lakkireddy@chelsio.com>",
        "X-Mailer": "git-send-email 2.5.3",
        "In-Reply-To": [
            "<cover.1567799552.git.rahul.lakkireddy@chelsio.com>",
            "<cover.1567799552.git.rahul.lakkireddy@chelsio.com>"
        ],
        "References": [
            "<cover.1567799552.git.rahul.lakkireddy@chelsio.com>",
            "<cover.1567799552.git.rahul.lakkireddy@chelsio.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH 08/12] net/cxgbe: separate VF only devargs",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Rework devargs parsing logic to separate VF only args.\n\nSigned-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>\n---\n doc/guides/nics/cxgbe.rst          |  6 +++\n drivers/net/cxgbe/base/adapter.h   |  7 +++\n drivers/net/cxgbe/cxgbe.h          |  9 ++--\n drivers/net/cxgbe/cxgbe_ethdev.c   |  5 +-\n drivers/net/cxgbe/cxgbe_main.c     | 75 +++++++++++++++++++-----------\n drivers/net/cxgbe/cxgbevf_ethdev.c |  6 +++\n 6 files changed, 76 insertions(+), 32 deletions(-)",
    "diff": "diff --git a/doc/guides/nics/cxgbe.rst b/doc/guides/nics/cxgbe.rst\nindex fc74b571c..6e6767194 100644\n--- a/doc/guides/nics/cxgbe.rst\n+++ b/doc/guides/nics/cxgbe.rst\n@@ -118,12 +118,18 @@ be passed as part of EAL arguments. For example,\n \n    testpmd -w 02:00.4,keep_ovlan=1 -- -i\n \n+Common Runtime Options\n+----------------------\n+\n - ``keep_ovlan`` (default **0**)\n \n   Toggle behavior to keep/strip outer VLAN in Q-in-Q packets. If\n   enabled, the outer VLAN tag is preserved in Q-in-Q packets. Otherwise,\n   the outer VLAN tag is stripped in Q-in-Q packets.\n \n+CXGBE VF Only Runtime Options\n+-----------------------------\n+\n - ``force_link_up`` (default **0**)\n \n   When set to 1, CXGBEVF PMD always forces link as up for all VFs on\ndiff --git a/drivers/net/cxgbe/base/adapter.h b/drivers/net/cxgbe/base/adapter.h\nindex e548f9f63..68bd5a9cc 100644\n--- a/drivers/net/cxgbe/base/adapter.h\n+++ b/drivers/net/cxgbe/base/adapter.h\n@@ -299,6 +299,11 @@ struct mbox_entry {\n \n TAILQ_HEAD(mbox_list, mbox_entry);\n \n+struct adapter_devargs {\n+\tbool keep_ovlan;\n+\tbool force_link_up;\n+};\n+\n struct adapter {\n \tstruct rte_pci_device *pdev;       /* associated rte pci device */\n \tstruct rte_eth_dev *eth_dev;       /* first port's rte eth device */\n@@ -331,6 +336,8 @@ struct adapter {\n \tstruct mpstcam_table *mpstcam;\n \n \tstruct tid_info tids;     /* Info used to access TID related tables */\n+\n+\tstruct adapter_devargs devargs;\n };\n \n /**\ndiff --git a/drivers/net/cxgbe/cxgbe.h b/drivers/net/cxgbe/cxgbe.h\nindex 3f97fa58b..3a50502b7 100644\n--- a/drivers/net/cxgbe/cxgbe.h\n+++ b/drivers/net/cxgbe/cxgbe.h\n@@ -50,8 +50,11 @@\n \t\t\t   DEV_RX_OFFLOAD_SCATTER)\n \n \n-#define CXGBE_DEVARG_KEEP_OVLAN \"keep_ovlan\"\n-#define CXGBE_DEVARG_FORCE_LINK_UP \"force_link_up\"\n+/* Common PF and VF devargs */\n+#define CXGBE_DEVARG_CMN_KEEP_OVLAN \"keep_ovlan\"\n+\n+/* VF only devargs */\n+#define CXGBE_DEVARG_VF_FORCE_LINK_UP \"force_link_up\"\n \n bool cxgbe_force_linkup(struct adapter *adap);\n int cxgbe_probe(struct adapter *adapter);\n@@ -76,7 +79,7 @@ int cxgbe_setup_rss(struct port_info *pi);\n void cxgbe_enable_rx_queues(struct port_info *pi);\n void cxgbe_print_port_info(struct adapter *adap);\n void cxgbe_print_adapter_info(struct adapter *adap);\n-int cxgbe_get_devargs(struct rte_devargs *devargs, const char *key);\n+void cxgbe_process_devargs(struct adapter *adap);\n void cxgbe_configure_max_ethqsets(struct adapter *adapter);\n \n #endif /* _CXGBE_H_ */\ndiff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c\nindex b78f190f9..8a2c2ca11 100644\n--- a/drivers/net/cxgbe/cxgbe_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbe_ethdev.c\n@@ -1189,6 +1189,8 @@ static int eth_cxgbe_dev_init(struct rte_eth_dev *eth_dev)\n \tadapter->eth_dev = eth_dev;\n \tpi->adapter = adapter;\n \n+\tcxgbe_process_devargs(adapter);\n+\n \terr = cxgbe_probe(adapter);\n \tif (err) {\n \t\tdev_err(adapter, \"%s: cxgbe probe failed with err %d\\n\",\n@@ -1236,8 +1238,7 @@ RTE_PMD_REGISTER_PCI(net_cxgbe, rte_cxgbe_pmd);\n RTE_PMD_REGISTER_PCI_TABLE(net_cxgbe, cxgb4_pci_tbl);\n RTE_PMD_REGISTER_KMOD_DEP(net_cxgbe, \"* igb_uio | uio_pci_generic | vfio-pci\");\n RTE_PMD_REGISTER_PARAM_STRING(net_cxgbe,\n-\t\t\t      CXGBE_DEVARG_KEEP_OVLAN \"=<0|1> \"\n-\t\t\t      CXGBE_DEVARG_FORCE_LINK_UP \"=<0|1> \");\n+\t\t\t      CXGBE_DEVARG_CMN_KEEP_OVLAN \"=<0|1> \");\n \n RTE_INIT(cxgbe_init_log)\n {\ndiff --git a/drivers/net/cxgbe/cxgbe_main.c b/drivers/net/cxgbe/cxgbe_main.c\nindex c3e6b9557..6a6137f06 100644\n--- a/drivers/net/cxgbe/cxgbe_main.c\n+++ b/drivers/net/cxgbe/cxgbe_main.c\n@@ -669,19 +669,25 @@ void cxgbe_print_port_info(struct adapter *adap)\n \t}\n }\n \n-static int\n-check_devargs_handler(__rte_unused const char *key, const char *value,\n-\t\t      __rte_unused void *opaque)\n+static int check_devargs_handler(const char *key, const char *value, void *p)\n {\n-\tif (strcmp(value, \"1\"))\n-\t\treturn -1;\n+\tif (!strncmp(key, CXGBE_DEVARG_CMN_KEEP_OVLAN, strlen(key)) ||\n+\t    !strncmp(key, CXGBE_DEVARG_VF_FORCE_LINK_UP, strlen(key))) {\n+\t\tif (!strncmp(value, \"1\", 1)) {\n+\t\t\tbool *dst_val = (bool *)p;\n+\n+\t\t\t*dst_val = true;\n+\t\t}\n+\t}\n \n \treturn 0;\n }\n \n-int cxgbe_get_devargs(struct rte_devargs *devargs, const char *key)\n+static int cxgbe_get_devargs(struct rte_devargs *devargs, const char *key,\n+\t\t\t     void *p)\n {\n \tstruct rte_kvargs *kvlist;\n+\tint ret = 0;\n \n \tif (!devargs)\n \t\treturn 0;\n@@ -690,24 +696,44 @@ int cxgbe_get_devargs(struct rte_devargs *devargs, const char *key)\n \tif (!kvlist)\n \t\treturn 0;\n \n-\tif (!rte_kvargs_count(kvlist, key)) {\n-\t\trte_kvargs_free(kvlist);\n-\t\treturn 0;\n-\t}\n+\tif (!rte_kvargs_count(kvlist, key))\n+\t\tgoto out;\n \n-\tif (rte_kvargs_process(kvlist, key,\n-\t\t\t       check_devargs_handler, NULL) < 0) {\n-\t\trte_kvargs_free(kvlist);\n-\t\treturn 0;\n-\t}\n+\tret = rte_kvargs_process(kvlist, key, check_devargs_handler, p);\n+\n+out:\n \trte_kvargs_free(kvlist);\n \n-\treturn 1;\n+\treturn ret;\n+}\n+\n+static void cxgbe_get_devargs_int(struct adapter *adap, int *dst,\n+\t\t\t\t  const char *key, int default_value)\n+{\n+\tstruct rte_pci_device *pdev = adap->pdev;\n+\tint ret, devarg_value = default_value;\n+\n+\t*dst = default_value;\n+\tif (!pdev)\n+\t\treturn;\n+\n+\tret = cxgbe_get_devargs(pdev->device.devargs, key, &devarg_value);\n+\tif (ret)\n+\t\treturn;\n+\n+\t*dst = devarg_value;\n+}\n+\n+void cxgbe_process_devargs(struct adapter *adap)\n+{\n+\tcxgbe_get_devargs_int(adap, &adap->devargs.keep_ovlan,\n+\t\t\t      CXGBE_DEVARG_CMN_KEEP_OVLAN, 0);\n+\tcxgbe_get_devargs_int(adap, &adap->devargs.force_link_up,\n+\t\t\t      CXGBE_DEVARG_VF_FORCE_LINK_UP, 0);\n }\n \n static void configure_vlan_types(struct adapter *adapter)\n {\n-\tstruct rte_pci_device *pdev = adapter->pdev;\n \tint i;\n \n \tfor_each_port(adapter, i) {\n@@ -742,9 +768,8 @@ static void configure_vlan_types(struct adapter *adapter)\n \t\t\t\t F_OVLAN_EN2 | F_IVLAN_EN);\n \t}\n \n-\tif (cxgbe_get_devargs(pdev->device.devargs, CXGBE_DEVARG_KEEP_OVLAN))\n-\t\tt4_tp_wr_bits_indirect(adapter, A_TP_INGRESS_CONFIG,\n-\t\t\t\t       V_RM_OVLAN(1), V_RM_OVLAN(0));\n+\tt4_tp_wr_bits_indirect(adapter, A_TP_INGRESS_CONFIG, V_RM_OVLAN(1),\n+\t\t\t       V_RM_OVLAN(!adapter->devargs.keep_ovlan));\n }\n \n static void configure_pcie_ext_tag(struct adapter *adapter)\n@@ -1323,14 +1348,10 @@ void t4_os_portmod_changed(const struct adapter *adap, int port_id)\n \n bool cxgbe_force_linkup(struct adapter *adap)\n {\n-\tstruct rte_pci_device *pdev = adap->pdev;\n-\n \tif (is_pf4(adap))\n-\t\treturn false;\t/* force_linkup not required for pf driver*/\n-\tif (!cxgbe_get_devargs(pdev->device.devargs,\n-\t\t\t       CXGBE_DEVARG_FORCE_LINK_UP))\n-\t\treturn false;\n-\treturn true;\n+\t\treturn false;\t/* force_linkup not required for pf driver */\n+\n+\treturn adap->devargs.force_link_up;\n }\n \n /**\ndiff --git a/drivers/net/cxgbe/cxgbevf_ethdev.c b/drivers/net/cxgbe/cxgbevf_ethdev.c\nindex 60e96aa4e..cc0938b43 100644\n--- a/drivers/net/cxgbe/cxgbevf_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbevf_ethdev.c\n@@ -162,6 +162,9 @@ static int eth_cxgbevf_dev_init(struct rte_eth_dev *eth_dev)\n \tadapter->pdev = pci_dev;\n \tadapter->eth_dev = eth_dev;\n \tpi->adapter = adapter;\n+\n+\tcxgbe_process_devargs(adapter);\n+\n \terr = cxgbevf_probe(adapter);\n \tif (err) {\n \t\tdev_err(adapter, \"%s: cxgbevf probe failed with err %d\\n\",\n@@ -208,3 +211,6 @@ static struct rte_pci_driver rte_cxgbevf_pmd = {\n RTE_PMD_REGISTER_PCI(net_cxgbevf, rte_cxgbevf_pmd);\n RTE_PMD_REGISTER_PCI_TABLE(net_cxgbevf, cxgb4vf_pci_tbl);\n RTE_PMD_REGISTER_KMOD_DEP(net_cxgbevf, \"* igb_uio | vfio-pci\");\n+RTE_PMD_REGISTER_PARAM_STRING(net_cxgbevf,\n+\t\t\t      CXGBE_DEVARG_CMN_KEEP_OVLAN \"=<0|1> \"\n+\t\t\t      CXGBE_DEVARG_VF_FORCE_LINK_UP \"=<0|1> \");\n",
    "prefixes": [
        "08/12"
    ]
}