get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 48868,
    "url": "http://patches.dpdk.org/api/patches/48868/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20181214131846.22439-11-mk@semihalf.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": "<20181214131846.22439-11-mk@semihalf.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181214131846.22439-11-mk@semihalf.com",
    "date": "2018-12-14T13:18:36",
    "name": "[10/20] net/ena: reset should not reconfigure queues",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "7088431cdf9890e4606188b4d36c70b1891f8385",
    "submitter": {
        "id": 786,
        "url": "http://patches.dpdk.org/api/people/786/?format=api",
        "name": "Michal Krawczyk",
        "email": "mk@semihalf.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/20181214131846.22439-11-mk@semihalf.com/mbox/",
    "series": [
        {
            "id": 2783,
            "url": "http://patches.dpdk.org/api/series/2783/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=2783",
            "date": "2018-12-14T13:18:26",
            "name": "net/ena: ENAv2 release",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/2783/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/48868/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/48868/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 1C4B21BBEA;\n\tFri, 14 Dec 2018 14:19:22 +0100 (CET)",
            "from mail-lj1-f196.google.com (mail-lj1-f196.google.com\n\t[209.85.208.196]) by dpdk.org (Postfix) with ESMTP id 8EB511BB91\n\tfor <dev@dpdk.org>; Fri, 14 Dec 2018 14:19:10 +0100 (CET)",
            "by mail-lj1-f196.google.com with SMTP id 83-v6so4853422ljf.10\n\tfor <dev@dpdk.org>; Fri, 14 Dec 2018 05:19:10 -0800 (PST)",
            "from mkPC.semihalf.local (31-172-191-173.noc.fibertech.net.pl.\n\t[31.172.191.173]) by smtp.gmail.com with ESMTPSA id\n\to25sm873884lfd.29.2018.12.14.05.19.08\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 14 Dec 2018 05:19:09 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=semihalf-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=AnpAtvdvPTKaDBtDTJ2qmFSz2k3ARGPx/Y/PGrheWck=;\n\tb=jfIZLtikHIEXo0Lgs3jFOxP8gCKkojfCoAkrFZQg9kGzApE0yGmyf7clRHwjCvwgNn\n\tamBhrR5S5tf4XIrhzc6+4EKiqw2+tF8T4NCTsWQILQPN5ih0aHZjbbR2/jEtmz6i/4wA\n\tiQRxrzTweOMB4Y5HL5i+jsX/9huAlJdje6gODoLO9pa1nbe7MX7Rv4ydNqIeQaXu6DFc\n\teXRvunYXLnkmc5G2dwZMonlJBTAQ1xDDXwT2OYOVlmGqyeHKsnVEHmBEhk2+YVn5OjSo\n\tCj1Yxl2bIIMKdsiZUasL7ZSh2HCVeozR/4qADKQuSaZ7Ne1h9qQdaV0LX9mniTdQGzjq\n\t8tDA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=AnpAtvdvPTKaDBtDTJ2qmFSz2k3ARGPx/Y/PGrheWck=;\n\tb=pKCdG/lTJ2gFpMRV1z/spGdV2zdinCPaBxIcmOZsPzUvtl0VIPE0iqu9H8NpeNT8b8\n\tPeODO5xb3tf0xqGi3LjJwQtfF/wq1erngD7L0AVVe5muhZCb6IaE5B412BQASL/4Mqn1\n\tRvbNBwQPvtd2JDmCuBEbFBR/7x3ldC0mFZMWsyU/3obgy5WLN6rti5yxnubW4+XYjDGD\n\tlQN+v16hdrXee8mGJlQnYdWhOeAUNrBuCVsb1khNO0XJ/WqCWEn6LSV3Xr/oMMQojEyr\n\tnntYJncEKrfMuB1TtSPhnRwGhaGuKzRVMiTGv16Fq0bJNMPCGCtijtTOkUkYFuEVmmk7\n\ttCTA==",
        "X-Gm-Message-State": "AA+aEWajvKPVtlKidVCAzIaaRbwp0HtaQHPIgHl7QrBWHFUYMlo0zmw3\n\tn4PJ3xWR0aiKzVIuFgg+uZZvghq7AiM=",
        "X-Google-Smtp-Source": "AFSGD/UimBG+PNS4a760COBbhv1Ii3Pv0dCIe7cp/kEdQyFKR5kXjZL7tB6JN2kpSLwgxV8gbyobLA==",
        "X-Received": "by 2002:a2e:98c9:: with SMTP id\n\ts9-v6mr1569493ljj.166.1544793549805; \n\tFri, 14 Dec 2018 05:19:09 -0800 (PST)",
        "From": "Michal Krawczyk <mk@semihalf.com>",
        "To": "dev@dpdk.org",
        "Cc": "gtzalik@dpdk.org, mw@dpdk.org, matua@amazon.com, rk@semihalf.com,\n\tstable@dpdk.org",
        "Date": "Fri, 14 Dec 2018 14:18:36 +0100",
        "Message-Id": "<20181214131846.22439-11-mk@semihalf.com>",
        "X-Mailer": "git-send-email 2.14.1",
        "In-Reply-To": "<20181214131846.22439-1-mk@semihalf.com>",
        "References": "<20181214131846.22439-1-mk@semihalf.com>",
        "Subject": "[dpdk-dev] [PATCH 10/20] net/ena: reset should not reconfigure\n\tqueues",
        "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": "From: Rafal Kozik <rk@semihalf.com>\n\nReset function should return the port to initial state, in which no Tx\nand Rx queues are setup. Then application should reconfigure the queues.\n\nAccording to DPDK documentation the rte_eth_dev_reset() itself is a\ngeneric function which only does some hardware reset operations through\ncalling dev_unint() and dev_init().\n\nena_com_dev_reset which perform NIC registers reset should be called\nduring stop.\n\nFixes: 2081d5e2e92d (\"net/ena: add reset routine\")\nCc: stable@dpdk.org\n\nSigned-off-by: Rafal Kozik <rk@semihalf.com>\nAcked-by: Michal Krawczyk <mk@semihalf.com>\n---\n drivers/net/ena/ena_ethdev.c | 108 +++++++++++++++----------------------------\n 1 file changed, 38 insertions(+), 70 deletions(-)",
    "diff": "diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex deb97151d..3715619a7 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -262,6 +262,8 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev,\n static int ena_get_sset_count(struct rte_eth_dev *dev, int sset);\n static void ena_interrupt_handler_rte(void *cb_arg);\n static void ena_timer_wd_callback(struct rte_timer *timer, void *arg);\n+static void ena_destroy_device(struct rte_eth_dev *eth_dev);\n+static int eth_ena_dev_init(struct rte_eth_dev *eth_dev);\n \n static const struct eth_dev_ops ena_dev_ops = {\n \t.dev_configure        = ena_dev_configure,\n@@ -546,65 +548,14 @@ static void ena_close(struct rte_eth_dev *dev)\n static int\n ena_dev_reset(struct rte_eth_dev *dev)\n {\n-\tstruct rte_mempool *mb_pool_rx[ENA_MAX_NUM_QUEUES];\n-\tstruct rte_eth_dev *eth_dev;\n-\tstruct rte_pci_device *pci_dev;\n-\tstruct rte_intr_handle *intr_handle;\n-\tstruct ena_com_dev *ena_dev;\n-\tstruct ena_com_dev_get_features_ctx get_feat_ctx;\n-\tstruct ena_adapter *adapter;\n-\tint nb_queues;\n-\tint rc, i;\n-\tbool wd_state;\n-\n-\tadapter = (struct ena_adapter *)(dev->data->dev_private);\n-\tena_dev = &adapter->ena_dev;\n-\teth_dev = adapter->rte_dev;\n-\tpci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n-\tintr_handle = &pci_dev->intr_handle;\n-\tnb_queues = eth_dev->data->nb_rx_queues;\n-\n-\tena_com_set_admin_running_state(ena_dev, false);\n+\tint rc = 0;\n \n-\trc = ena_com_dev_reset(ena_dev, adapter->reset_reason);\n+\tena_destroy_device(dev);\n+\trc = eth_ena_dev_init(dev);\n \tif (rc)\n-\t\tRTE_LOG(ERR, PMD, \"Device reset failed\\n\");\n-\n-\tfor (i = 0; i < nb_queues; i++)\n-\t\tmb_pool_rx[i] = adapter->rx_ring[i].mb_pool;\n-\n-\tena_rx_queue_release_all(eth_dev);\n-\tena_tx_queue_release_all(eth_dev);\n-\n-\trte_intr_disable(intr_handle);\n-\n-\tena_com_abort_admin_commands(ena_dev);\n-\tena_com_wait_for_abort_completion(ena_dev);\n-\tena_com_admin_destroy(ena_dev);\n-\tena_com_mmio_reg_read_request_destroy(ena_dev);\n-\n-\trc = ena_device_init(ena_dev, &get_feat_ctx, &wd_state);\n-\tif (rc) {\n \t\tPMD_INIT_LOG(CRIT, \"Cannot initialize device\\n\");\n-\t\treturn rc;\n-\t}\n-\tadapter->wd_state = wd_state;\n-\n-\trte_intr_enable(intr_handle);\n-\tena_com_set_admin_polling_mode(ena_dev, false);\n-\tena_com_admin_aenq_enable(ena_dev);\n-\n-\tfor (i = 0; i < nb_queues; ++i)\n-\t\tena_rx_queue_setup(eth_dev, i, adapter->rx_ring[i].ring_size, 0,\n-\t\t\tNULL, mb_pool_rx[i]);\n \n-\tfor (i = 0; i < nb_queues; ++i)\n-\t\tena_tx_queue_setup(eth_dev, i, adapter->tx_ring[i].ring_size, 0,\n-\t\t\tNULL);\n-\n-\tadapter->trigger_reset = false;\n-\n-\treturn 0;\n+\treturn rc;\n }\n \n static int ena_rss_reta_update(struct rte_eth_dev *dev,\n@@ -774,11 +725,6 @@ static void ena_rx_queue_release(void *queue)\n {\n \tstruct ena_ring *ring = (struct ena_ring *)queue;\n \n-\tena_assert_msg(ring->configured,\n-\t\t       \"API violation - releasing not configured queue\");\n-\tena_assert_msg(ring->adapter->state != ENA_ADAPTER_STATE_RUNNING,\n-\t\t       \"API violation\");\n-\n \t/* Free ring resources */\n \tif (ring->rx_buffer_info)\n \t\trte_free(ring->rx_buffer_info);\n@@ -802,11 +748,6 @@ static void ena_tx_queue_release(void *queue)\n {\n \tstruct ena_ring *ring = (struct ena_ring *)queue;\n \n-\tena_assert_msg(ring->configured,\n-\t\t       \"API violation. Releasing not configured queue\");\n-\tena_assert_msg(ring->adapter->state != ENA_ADAPTER_STATE_RUNNING,\n-\t\t       \"API violation\");\n-\n \t/* Free ring resources */\n \tif (ring->push_buf_intermediate_buf)\n \t\trte_free(ring->push_buf_intermediate_buf);\n@@ -1146,11 +1087,19 @@ static void ena_stop(struct rte_eth_dev *dev)\n {\n \tstruct ena_adapter *adapter =\n \t\t(struct ena_adapter *)(dev->data->dev_private);\n+\tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n+\tint rc;\n \n \trte_timer_stop_sync(&adapter->timer_wd);\n \tena_queue_stop_all(dev, ENA_RING_TYPE_TX);\n \tena_queue_stop_all(dev, ENA_RING_TYPE_RX);\n \n+\tif (adapter->trigger_reset) {\n+\t\trc = ena_com_dev_reset(ena_dev, adapter->reset_reason);\n+\t\tif (rc)\n+\t\t\tRTE_LOG(ERR, PMD, \"Device reset failed rc=%d\\n\", rc);\n+\t}\n+\n \tadapter->state = ENA_ADAPTER_STATE_STOPPED;\n }\n \n@@ -1908,24 +1857,43 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)\n \treturn rc;\n }\n \n-static int eth_ena_dev_uninit(struct rte_eth_dev *eth_dev)\n+static void ena_destroy_device(struct rte_eth_dev *eth_dev)\n {\n \tstruct ena_adapter *adapter =\n \t\t(struct ena_adapter *)(eth_dev->data->dev_private);\n+\tstruct ena_com_dev *ena_dev = &adapter->ena_dev;\n \n-\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n-\t\treturn 0;\n+\tif (adapter->state == ENA_ADAPTER_STATE_FREE)\n+\t\treturn;\n+\n+\tena_com_set_admin_running_state(ena_dev, false);\n \n \tif (adapter->state != ENA_ADAPTER_STATE_CLOSED)\n \t\tena_close(eth_dev);\n \n+\tena_com_delete_debug_area(ena_dev);\n+\tena_com_delete_host_info(ena_dev);\n+\n+\tena_com_abort_admin_commands(ena_dev);\n+\tena_com_wait_for_abort_completion(ena_dev);\n+\tena_com_admin_destroy(ena_dev);\n+\tena_com_mmio_reg_read_request_destroy(ena_dev);\n+\n+\tadapter->state = ENA_ADAPTER_STATE_FREE;\n+}\n+\n+static int eth_ena_dev_uninit(struct rte_eth_dev *eth_dev)\n+{\n+\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n+\t\treturn 0;\n+\n+\tena_destroy_device(eth_dev);\n+\n \teth_dev->dev_ops = NULL;\n \teth_dev->rx_pkt_burst = NULL;\n \teth_dev->tx_pkt_burst = NULL;\n \teth_dev->tx_pkt_prepare = NULL;\n \n-\tadapter->state = ENA_ADAPTER_STATE_FREE;\n-\n \treturn 0;\n }\n \n",
    "prefixes": [
        "10/20"
    ]
}