get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 43511,
    "url": "http://patches.dpdk.org/api/patches/43511/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180801215952.25326-1-stephen@networkplumber.org/",
    "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": "<20180801215952.25326-1-stephen@networkplumber.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180801215952.25326-1-stephen@networkplumber.org",
    "date": "2018-08-01T21:59:52",
    "name": "[RFC] mlx5: fix error unwind in device start",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "59f0b95361688063fed12d0873a39e9505849de2",
    "submitter": {
        "id": 27,
        "url": "http://patches.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180801215952.25326-1-stephen@networkplumber.org/mbox/",
    "series": [
        {
            "id": 864,
            "url": "http://patches.dpdk.org/api/series/864/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=864",
            "date": "2018-08-01T21:59:52",
            "name": "[RFC] mlx5: fix error unwind in device start",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/864/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/43511/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/43511/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 4F6E71B3A5;\n\tWed,  1 Aug 2018 23:59:57 +0200 (CEST)",
            "from mail-pl0-f65.google.com (mail-pl0-f65.google.com\n\t[209.85.160.65]) by dpdk.org (Postfix) with ESMTP id C2F3A1B296\n\tfor <dev@dpdk.org>; Wed,  1 Aug 2018 23:59:55 +0200 (CEST)",
            "by mail-pl0-f65.google.com with SMTP id d5-v6so56414pll.4\n\tfor <dev@dpdk.org>; Wed, 01 Aug 2018 14:59:55 -0700 (PDT)",
            "from xeon-e3.wavecable.com (204-195-22-127.wavecable.com.\n\t[204.195.22.127]) by smtp.gmail.com with ESMTPSA id\n\th132-v6sm74459pfc.100.2018.08.01.14.59.53\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 01 Aug 2018 14:59:54 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=networkplumber-org.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id;\n\tbh=sC8clQkZR4wfb6bMeYDiHpDu6eAUVoJLguVPni/1TSI=;\n\tb=QMWYFhw1jXJ7AaRnAHoOiLIQPJwG9j4K4bSnf+nGEavdf+IYurkFTZe9AfS7z7y1EW\n\tQ5ZC9pOqlflNYeta6AtLS4H9oQZ7k83lgVh0ndiX7aFd/pfx0M9o53OICtPpOL9o8Ojk\n\t/KaDrvKm0hAee88AMyAq5IXN3lvaTTQaAtjcCv1UlNeiQ/aANdEf+Bsx0ctw8dtpPjVt\n\tQCEG9my0HEVSX51wpk+rwZ3C/l8zANzQliaunCu5CLG4FyeTkF1IkubcB9tLIpCfViiV\n\t/QiEEw6U+rLslqVSVMErWEg4YwtofaDotK9mUGcZhN8TOrJLbjRTzbefM9jvpN8m7nSF\n\t7J4w==",
        "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;\n\tbh=sC8clQkZR4wfb6bMeYDiHpDu6eAUVoJLguVPni/1TSI=;\n\tb=V+u2jSbNUAz2RRNb+IsJCEFGAXdYwxFN5BMO2haJPWAOssEsjkx7cmeGyTC5vJ3tsd\n\t/aJ1pBSp60xHXEfqsse/rLVl22f/xBQbjMyyOFJS4pTuKzQhFY+9veGwXOOotpfYb25O\n\tj5GYfTjKudrXuJgbikoS/hf5eFM7Dyl/gAPS3isY5MnmVVEemuVxMfdsr6RfZEsmyMLD\n\tzM7OZLLXYSq4a9/sUDK5bXx3v5efGZhC++mHjM00rxQ399B3YvRYlr94h2XgKqAEDVoP\n\tJYZfx0iyI+Iwv9+U4+t6ADPU2T4Ekl7LZCq9oMdosqjZfxJUENahXU1gOCQJxVPQj+dC\n\t54jg==",
        "X-Gm-Message-State": "AOUpUlEI12VahSy/Nb7PKd6vnSfmWfJXtQIuEaW7rECdiZWBZDT4YRmN\n\tG3wdewSr1nTk1rof5MxHvGaUDw==",
        "X-Google-Smtp-Source": "AAOMgpduecjG0T64FLl2AqG+2ckgZZyQdvJqlC6gK0xZNiHbMkcbUooud01H2QrEfpuFpQCxKmgqxQ==",
        "X-Received": "by 2002:a17:902:6802:: with SMTP id\n\th2-v6mr86566plk.113.1533160794858; \n\tWed, 01 Aug 2018 14:59:54 -0700 (PDT)",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "shahafs@mellanox.com,\n\tyskoh@mellanox.com",
        "Cc": "dev@dpdk.org, Stephen Hemminger <stephen@networkplumber.org>,\n\tStephen Hemminger <sthemmin@microsoft.com>",
        "Date": "Wed,  1 Aug 2018 14:59:52 -0700",
        "Message-Id": "<20180801215952.25326-1-stephen@networkplumber.org>",
        "X-Mailer": "git-send-email 2.18.0",
        "Subject": "[dpdk-dev] [RFC] mlx5: fix error unwind in device start",
        "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": "The error handling in start of the mlx5 driver is buggy.\nFor example, if setting up the flows fails the device driver\nwill then get stuck in mlx5_flow_rxq_flags_clear waiting\nfor something that will never happen.\n\nThe problem is that the code jumps to a common error label\nand does unwind for portions of the driver which have not\nbeen setup.\n\nThis suggested patch breaks it into different labels with\neach failure path only unwinding what was done.\n\nAlso, the ethdev driver should not be manipulating the\ndev_started flag directly. That is handled by the common\nethdev layer.\n\nThe patch works for the success case, but furthur testing\nis needed to actually exercise all the error paths.\nThis is left as exercise for the maintainers.\n\nSigned-off-by: Stephen Hemminger <sthemmin@microsoft.com>\n---\n drivers/net/mlx5/mlx5_trigger.c | 26 +++++++++++++-------------\n 1 file changed, 13 insertions(+), 13 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c\nindex e2a9bb703261..79a7b233986a 100644\n--- a/drivers/net/mlx5/mlx5_trigger.c\n+++ b/drivers/net/mlx5/mlx5_trigger.c\n@@ -171,42 +171,42 @@ mlx5_dev_start(struct rte_eth_dev *dev)\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"port %u Rx queue allocation failed: %s\",\n \t\t\tdev->data->port_id, strerror(rte_errno));\n-\t\tmlx5_txq_stop(dev);\n-\t\treturn -rte_errno;\n+\t\tgoto error_txq_stop;\n \t}\n-\tdev->data->dev_started = 1;\n+\n \tret = mlx5_rx_intr_vec_enable(dev);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"port %u Rx interrupt vector creation failed\",\n \t\t\tdev->data->port_id);\n-\t\tgoto error;\n+\t\tgoto error_rxq_stop;\n \t}\n \tmlx5_xstats_init(dev);\n \tret = mlx5_traffic_enable(dev);\n \tif (ret) {\n \t\tDRV_LOG(DEBUG, \"port %u failed to set defaults flows\",\n \t\t\tdev->data->port_id);\n-\t\tgoto error;\n+\t\tgoto error_intr_vec_disable;\n \t}\n \tret = mlx5_flow_start(dev, &priv->flows);\n \tif (ret) {\n \t\tDRV_LOG(DEBUG, \"port %u failed to set flows\",\n \t\t\tdev->data->port_id);\n-\t\tgoto error;\n+\t\tgoto error_traffic_disable;\n \t}\n+\n \tdev->tx_pkt_burst = mlx5_select_tx_function(dev);\n \tdev->rx_pkt_burst = mlx5_select_rx_function(dev);\n \tmlx5_dev_interrupt_handler_install(dev);\n \treturn 0;\n-error:\n-\tret = rte_errno; /* Save rte_errno before cleanup. */\n-\t/* Rollback. */\n-\tdev->data->dev_started = 0;\n-\tmlx5_flow_stop(dev, &priv->flows);\n+\n+error_traffic_disable:\n \tmlx5_traffic_disable(dev);\n-\tmlx5_txq_stop(dev);\n+error_intr_vec_disable:\n+\tmlx5_rx_intr_vec_disable(dev);\n+error_rxq_stop:\n \tmlx5_rxq_stop(dev);\n-\trte_errno = ret; /* Restore rte_errno. */\n+error_txq_stop:\n+\tmlx5_txq_stop(dev);\n \treturn -rte_errno;\n }\n \n",
    "prefixes": [
        "RFC"
    ]
}