get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 96199,
    "url": "http://patchwork.dpdk.org/api/patches/96199/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210722095433.1898589-3-andrew.rybchenko@oktetlabs.ru/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20210722095433.1898589-3-andrew.rybchenko@oktetlabs.ru>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210722095433.1898589-3-andrew.rybchenko@oktetlabs.ru",
    "date": "2021-07-22T09:54:24",
    "name": "[v2,02/11] net/sfc: fix reading adapter state without locking",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6745c3def52609b7d4337a1b2da14083af2efcd4",
    "submitter": {
        "id": 2013,
        "url": "http://patchwork.dpdk.org/api/people/2013/?format=api",
        "name": "Andrew Rybchenko",
        "email": "Andrew.Rybchenko@oktetlabs.ru"
    },
    "delegate": {
        "id": 24651,
        "url": "http://patchwork.dpdk.org/api/users/24651/?format=api",
        "username": "dmarchand",
        "first_name": "David",
        "last_name": "Marchand",
        "email": "david.marchand@redhat.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20210722095433.1898589-3-andrew.rybchenko@oktetlabs.ru/mbox/",
    "series": [
        {
            "id": 17954,
            "url": "http://patchwork.dpdk.org/api/series/17954/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=17954",
            "date": "2021-07-22T09:54:22",
            "name": "net/sfc: provide Rx/Tx doorbells stats",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/17954/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/96199/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/96199/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 6371AA0C4E;\n\tThu, 22 Jul 2021 11:55:01 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C6420410E1;\n\tThu, 22 Jul 2021 11:54:56 +0200 (CEST)",
            "from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113])\n by mails.dpdk.org (Postfix) with ESMTP id 7B4AA410E4;\n Thu, 22 Jul 2021 11:54:55 +0200 (CEST)",
            "by shelob.oktetlabs.ru (Postfix, from userid 122)\n id 52ECF7F6D2; Thu, 22 Jul 2021 12:54:55 +0300 (MSK)",
            "from aros.oktetlabs.ru (aros.oktetlabs.ru [192.168.38.17])\n by shelob.oktetlabs.ru (Postfix) with ESMTP id AC02C7F596;\n Thu, 22 Jul 2021 12:54:44 +0300 (MSK)"
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on shelob.oktetlabs.ru",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=0.8 required=5.0 tests=ALL_TRUSTED,\n DKIM_ADSP_DISCARD,\n URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2",
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru AC02C7F596",
        "Authentication-Results": "shelob.oktetlabs.ru/AC02C7F596; dkim=none;\n dkim-atps=neutral",
        "From": "Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>",
        "To": "dev@dpdk.org, Robert Stonehouse <rstonehouse@solarflare.com>,\n Andrew Lee <alee@solarflare.com>",
        "Cc": "David Marchand <david.marchand@redhat.com>,\n Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>, stable@dpdk.org,\n Andy Moreton <amoreton@xilinx.com>",
        "Date": "Thu, 22 Jul 2021 12:54:24 +0300",
        "Message-Id": "<20210722095433.1898589-3-andrew.rybchenko@oktetlabs.ru>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20210722095433.1898589-1-andrew.rybchenko@oktetlabs.ru>",
        "References": "<20210604144225.287678-1-andrew.rybchenko@oktetlabs.ru>\n <20210722095433.1898589-1-andrew.rybchenko@oktetlabs.ru>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v2 02/11] net/sfc: fix reading adapter state\n without locking",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>\n\nUpdate MAC stats function reads adapter state with MAC stats locking\nbut without adapter locking. Add adapter locking before calling this\nfunction and remove MAC stats locking since there's no point to have\nit together with adapter locking. The second place MAC stats locking\nis used is MAC stats reset function. It's called with adapter being\nalready locked so there's no point to use MAC stats locking anymore.\n\nFixes: 1caab2f1e68 (\"net/sfc: add basic statistics\")\nCc: stable@dpdk.org\n\nSigned-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>\nSigned-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>\nReviewed-by: Andy Moreton <amoreton@xilinx.com>\n---\n drivers/net/sfc/sfc.h        |  1 -\n drivers/net/sfc/sfc_ethdev.c | 28 ++++++++++++++++++++--------\n drivers/net/sfc/sfc_port.c   |  9 +++------\n 3 files changed, 23 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h\nindex 546739bd4a..c7b0e5a30d 100644\n--- a/drivers/net/sfc/sfc.h\n+++ b/drivers/net/sfc/sfc.h\n@@ -130,7 +130,6 @@ struct sfc_port {\n \tunsigned int\t\t\tnb_mcast_addrs;\n \tuint8_t\t\t\t\t*mcast_addrs;\n \n-\trte_spinlock_t\t\t\tmac_stats_lock;\n \tuint64_t\t\t\t*mac_stats_buf;\n \tunsigned int\t\t\tmac_stats_nb_supported;\n \tefsys_mem_t\t\t\tmac_stats_dma_mem;\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex d4ac61ff76..d5417e5e65 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -613,7 +613,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n \tuint64_t *mac_stats;\n \tint ret;\n \n-\trte_spinlock_lock(&port->mac_stats_lock);\n+\tsfc_adapter_lock(sa);\n \n \tret = sfc_port_update_mac_stats(sa);\n \tif (ret != 0)\n@@ -686,7 +686,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n \t}\n \n unlock:\n-\trte_spinlock_unlock(&port->mac_stats_lock);\n+\tsfc_adapter_unlock(sa);\n \tSFC_ASSERT(ret >= 0);\n \treturn -ret;\n }\n@@ -698,12 +698,15 @@ sfc_stats_reset(struct rte_eth_dev *dev)\n \tstruct sfc_port *port = &sa->port;\n \tint rc;\n \n+\tsfc_adapter_lock(sa);\n+\n \tif (sa->state != SFC_ADAPTER_STARTED) {\n \t\t/*\n \t\t * The operation cannot be done if port is not started; it\n \t\t * will be scheduled to be done during the next port start\n \t\t */\n \t\tport->mac_stats_reset_pending = B_TRUE;\n+\t\tsfc_adapter_unlock(sa);\n \t\treturn 0;\n \t}\n \n@@ -711,6 +714,8 @@ sfc_stats_reset(struct rte_eth_dev *dev)\n \tif (rc != 0)\n \t\tsfc_err(sa, \"failed to reset statistics (rc = %d)\", rc);\n \n+\tsfc_adapter_unlock(sa);\n+\n \tSFC_ASSERT(rc >= 0);\n \treturn -rc;\n }\n@@ -726,7 +731,7 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,\n \tunsigned int i;\n \tint nstats = 0;\n \n-\trte_spinlock_lock(&port->mac_stats_lock);\n+\tsfc_adapter_lock(sa);\n \n \trc = sfc_port_update_mac_stats(sa);\n \tif (rc != 0) {\n@@ -748,7 +753,7 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,\n \t}\n \n unlock:\n-\trte_spinlock_unlock(&port->mac_stats_lock);\n+\tsfc_adapter_unlock(sa);\n \n \treturn nstats;\n }\n@@ -789,7 +794,7 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,\n \tint ret;\n \tint rc;\n \n-\trte_spinlock_lock(&port->mac_stats_lock);\n+\tsfc_adapter_lock(sa);\n \n \tif (unlikely(values == NULL) ||\n \t    unlikely(ids == NULL && n < port->mac_stats_nb_supported)) {\n@@ -819,7 +824,7 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,\n \tret = nb_written;\n \n unlock:\n-\trte_spinlock_unlock(&port->mac_stats_lock);\n+\tsfc_adapter_unlock(sa);\n \n \treturn ret;\n }\n@@ -835,9 +840,14 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,\n \tunsigned int nb_written = 0;\n \tunsigned int i;\n \n+\tsfc_adapter_lock(sa);\n+\n \tif (unlikely(xstats_names == NULL) ||\n-\t    unlikely((ids == NULL) && (size < port->mac_stats_nb_supported)))\n-\t\treturn port->mac_stats_nb_supported;\n+\t    unlikely((ids == NULL) && (size < port->mac_stats_nb_supported))) {\n+\t\tnb_supported = port->mac_stats_nb_supported;\n+\t\tsfc_adapter_unlock(sa);\n+\t\treturn nb_supported;\n+\t}\n \n \tfor (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < size); ++i) {\n \t\tif (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i))\n@@ -853,6 +863,8 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev,\n \t\t++nb_supported;\n \t}\n \n+\tsfc_adapter_unlock(sa);\n+\n \treturn nb_written;\n }\n \ndiff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c\nindex ac117f9c48..cdc0f94f19 100644\n--- a/drivers/net/sfc/sfc_port.c\n+++ b/drivers/net/sfc/sfc_port.c\n@@ -43,7 +43,7 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa)\n \tunsigned int nb_attempts = 0;\n \tint rc;\n \n-\tSFC_ASSERT(rte_spinlock_is_locked(&port->mac_stats_lock));\n+\tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \n \tif (sa->state != SFC_ADAPTER_STARTED)\n \t\treturn EINVAL;\n@@ -103,14 +103,13 @@ sfc_port_reset_sw_stats(struct sfc_adapter *sa)\n int\n sfc_port_reset_mac_stats(struct sfc_adapter *sa)\n {\n-\tstruct sfc_port *port = &sa->port;\n \tint rc;\n \n-\trte_spinlock_lock(&port->mac_stats_lock);\n+\tSFC_ASSERT(sfc_adapter_is_locked(sa));\n+\n \trc = efx_mac_stats_clear(sa->nic);\n \tif (rc == 0)\n \t\tsfc_port_reset_sw_stats(sa);\n-\trte_spinlock_unlock(&port->mac_stats_lock);\n \n \treturn rc;\n }\n@@ -416,8 +415,6 @@ sfc_port_attach(struct sfc_adapter *sa)\n \t\tgoto fail_mcast_addr_list_buf_alloc;\n \t}\n \n-\trte_spinlock_init(&port->mac_stats_lock);\n-\n \trc = ENOMEM;\n \tport->mac_stats_buf = rte_calloc_socket(\"mac_stats_buf\", EFX_MAC_NSTATS,\n \t\t\t\t\t\tsizeof(uint64_t), 0,\n",
    "prefixes": [
        "v2",
        "02/11"
    ]
}