get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 76271,
    "url": "http://patches.dpdk.org/api/patches/76271/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/ceb95db6242808b5f5e568a0da60c91a3bc2d9a6.1598979347.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": "<ceb95db6242808b5f5e568a0da60c91a3bc2d9a6.1598979347.git.rahul.lakkireddy@chelsio.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/ceb95db6242808b5f5e568a0da60c91a3bc2d9a6.1598979347.git.rahul.lakkireddy@chelsio.com",
    "date": "2020-09-01T17:16:26",
    "name": "[2/2] net/cxgbe: release port resources during port close",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "126e43d39c14f668d08c1ae049d7b2589d45b0b9",
    "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/ceb95db6242808b5f5e568a0da60c91a3bc2d9a6.1598979347.git.rahul.lakkireddy@chelsio.com/mbox/",
    "series": [
        {
            "id": 11881,
            "url": "http://patches.dpdk.org/api/series/11881/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11881",
            "date": "2020-09-01T17:16:24",
            "name": "net/cxgbe: release port resources during port close",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11881/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/76271/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/76271/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 0823DA04AC;\n\tTue,  1 Sep 2020 19:31:06 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 465C61C0D4;\n\tTue,  1 Sep 2020 19:30:56 +0200 (CEST)",
            "from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8])\n by dpdk.org (Postfix) with ESMTP id 91A5A1C0B0\n for <dev@dpdk.org>; Tue,  1 Sep 2020 19:30:54 +0200 (CEST)",
            "from localhost (scalar.blr.asicdesigners.com [10.193.185.94])\n by stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id 081HUqsU013787;\n Tue, 1 Sep 2020 10:30:52 -0700"
        ],
        "From": "Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>",
        "To": "dev@dpdk.org",
        "Cc": "kaara.satwik@chelsio.com",
        "Date": "Tue,  1 Sep 2020 22:46:26 +0530",
        "Message-Id": "\n <ceb95db6242808b5f5e568a0da60c91a3bc2d9a6.1598979347.git.rahul.lakkireddy@chelsio.com>",
        "X-Mailer": "git-send-email 2.5.3",
        "In-Reply-To": [
            "<cover.1598979347.git.rahul.lakkireddy@chelsio.com>",
            "<cover.1598979347.git.rahul.lakkireddy@chelsio.com>"
        ],
        "References": [
            "<cover.1598979347.git.rahul.lakkireddy@chelsio.com>",
            "<cover.1598979347.git.rahul.lakkireddy@chelsio.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH 2/2] net/cxgbe: release port resources during\n\tport close",
        "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": "Enable RTE_ETH_DEV_CLOSE_REMOVE during PCI probe for all ports\nenumerated under the PF. Free up the underlying port Virtual\nIdentifier (VI) and associated resources during port close.\nOnce all the ports under the PF are closed, free up the PF-wide\nshared resources. Invoke port close function of all ports under\nthe PF, in PCI remove too.\n\nSigned-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>\n---\n drivers/net/cxgbe/cxgbe_ethdev.c   | 28 ++++++++++++++++++++++++----\n drivers/net/cxgbe/cxgbe_main.c     | 12 ++----------\n drivers/net/cxgbe/cxgbevf_ethdev.c |  8 +++++---\n drivers/net/cxgbe/cxgbevf_main.c   |  2 ++\n 4 files changed, 33 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c\nindex 913af2df7..60d325723 100644\n--- a/drivers/net/cxgbe/cxgbe_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbe_ethdev.c\n@@ -317,16 +317,34 @@ int cxgbe_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu)\n  */\n void cxgbe_dev_close(struct rte_eth_dev *eth_dev)\n {\n-\tstruct port_info *pi = eth_dev->data->dev_private;\n+\tstruct port_info *temp_pi, *pi = eth_dev->data->dev_private;\n \tstruct adapter *adapter = pi->adapter;\n+\tu8 i;\n \n \tCXGBE_FUNC_TRACE();\n \n \tif (!(adapter->flags & FULL_INIT_DONE))\n \t\treturn;\n \n+\tif (!pi->viid)\n+\t\treturn;\n+\n \tcxgbe_down(pi);\n \tt4_sge_eth_release_queues(pi);\n+\tt4_free_vi(adapter, adapter->mbox, adapter->pf, 0, pi->viid);\n+\tpi->viid = 0;\n+\n+\t/* Free up the adapter-wide resources only after all the ports\n+\t * under this PF have been closed.\n+\t */\n+\tfor_each_port(adapter, i) {\n+\t\ttemp_pi = adap2pinfo(adapter, i);\n+\t\tif (temp_pi->viid)\n+\t\t\treturn;\n+\t}\n+\n+\tcxgbe_close(adapter);\n+\trte_free(adapter);\n }\n \n /* Start the device.\n@@ -1204,11 +1222,13 @@ static int eth_cxgbe_dev_init(struct rte_eth_dev *eth_dev)\n \n static int eth_cxgbe_dev_uninit(struct rte_eth_dev *eth_dev)\n {\n-\tstruct port_info *pi = eth_dev->data->dev_private;\n-\tstruct adapter *adap = pi->adapter;\n+\tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n+\tuint16_t port_id;\n \n \t/* Free up other ports and all resources */\n-\tcxgbe_close(adap);\n+\tRTE_ETH_FOREACH_DEV_OF(port_id, &pci_dev->device)\n+\t\trte_eth_dev_close(port_id);\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/net/cxgbe/cxgbe_main.c b/drivers/net/cxgbe/cxgbe_main.c\nindex 2656369c5..d0a64229c 100644\n--- a/drivers/net/cxgbe/cxgbe_main.c\n+++ b/drivers/net/cxgbe/cxgbe_main.c\n@@ -1975,9 +1975,6 @@ int cxgbe_down(struct port_info *pi)\n  */\n void cxgbe_close(struct adapter *adapter)\n {\n-\tstruct port_info *pi;\n-\tint i;\n-\n \tif (adapter->flags & FULL_INIT_DONE) {\n \t\ttid_free(&adapter->tids);\n \t\tt4_cleanup_mpstcam(adapter);\n@@ -1988,13 +1985,6 @@ void cxgbe_close(struct adapter *adapter)\n \t\t\tt4_intr_disable(adapter);\n \t\tt4_sge_tx_monitor_stop(adapter);\n \t\tt4_free_sge_resources(adapter);\n-\t\tfor_each_port(adapter, i) {\n-\t\t\tpi = adap2pinfo(adapter, i);\n-\t\t\tif (pi->viid != 0)\n-\t\t\t\tt4_free_vi(adapter, adapter->mbox,\n-\t\t\t\t\t   adapter->pf, 0, pi->viid);\n-\t\t\trte_eth_dev_release_port(pi->eth_dev);\n-\t\t}\n \t\tadapter->flags &= ~FULL_INIT_DONE;\n \t}\n \n@@ -2156,6 +2146,8 @@ int cxgbe_probe(struct adapter *adapter)\n \t\t\tgoto out_free;\n \t\t}\n \n+\t\tpi->eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;\n+\n \t\tif (i > 0) {\n \t\t\t/* First port will be notified by upper layer */\n \t\t\trte_eth_dev_probing_finish(eth_dev);\ndiff --git a/drivers/net/cxgbe/cxgbevf_ethdev.c b/drivers/net/cxgbe/cxgbevf_ethdev.c\nindex 4165ba986..b3c885d6e 100644\n--- a/drivers/net/cxgbe/cxgbevf_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbevf_ethdev.c\n@@ -181,11 +181,13 @@ static int eth_cxgbevf_dev_init(struct rte_eth_dev *eth_dev)\n \n static int eth_cxgbevf_dev_uninit(struct rte_eth_dev *eth_dev)\n {\n-\tstruct port_info *pi = eth_dev->data->dev_private;\n-\tstruct adapter *adap = pi->adapter;\n+\tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n+\tuint16_t port_id;\n \n \t/* Free up other ports and all resources */\n-\tcxgbe_close(adap);\n+\tRTE_ETH_FOREACH_DEV_OF(port_id, &pci_dev->device)\n+\t\trte_eth_dev_close(port_id);\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/net/cxgbe/cxgbevf_main.c b/drivers/net/cxgbe/cxgbevf_main.c\nindex 66fb92375..9fe0ec6f6 100644\n--- a/drivers/net/cxgbe/cxgbevf_main.c\n+++ b/drivers/net/cxgbe/cxgbevf_main.c\n@@ -261,6 +261,8 @@ int cxgbevf_probe(struct adapter *adapter)\n \t\t\tgoto out_free;\n \t\t}\n \n+\t\tpi->eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;\n+\n \t\tif (i > 0) {\n \t\t\t/* First port will be notified by upper layer */\n \t\t\trte_eth_dev_probing_finish(eth_dev);\n",
    "prefixes": [
        "2/2"
    ]
}