get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 124636,
    "url": "http://patches.dpdk.org/api/patches/124636/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1677718068-2412-11-git-send-email-roretzla@linux.microsoft.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": "<1677718068-2412-11-git-send-email-roretzla@linux.microsoft.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1677718068-2412-11-git-send-email-roretzla@linux.microsoft.com",
    "date": "2023-03-02T00:47:41",
    "name": "[10/17] net/mlx5: use previous value atomic fetch operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3bb227c4e531a757e0a660303b6eb29c353e5679",
    "submitter": {
        "id": 2077,
        "url": "http://patches.dpdk.org/api/people/2077/?format=api",
        "name": "Tyler Retzlaff",
        "email": "roretzla@linux.microsoft.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1677718068-2412-11-git-send-email-roretzla@linux.microsoft.com/mbox/",
    "series": [
        {
            "id": 27214,
            "url": "http://patches.dpdk.org/api/series/27214/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=27214",
            "date": "2023-03-02T00:47:32",
            "name": "use __atomic operations returning previous value",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/27214/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/124636/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/124636/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 16A1141DAF;\n\tThu,  2 Mar 2023 01:49:42 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1BE4F42D3B;\n\tThu,  2 Mar 2023 01:48:22 +0100 (CET)",
            "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id 920A841156\n for <dev@dpdk.org>; Thu,  2 Mar 2023 01:48:03 +0100 (CET)",
            "by linux.microsoft.com (Postfix, from userid 1086)\n id 649B720BBF92; Wed,  1 Mar 2023 16:48:02 -0800 (PST)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com 649B720BBF92",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1677718082;\n bh=HY8ilW01qnKduRPYqlNbTXC0gqtafSQMDA2hCR+8S1U=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=XvPZ5PcDqkJ56aQNj1pqaFgZG6bIaJrpxqsSVMhLfgGbJ5eUYZ3aexpOZumtOCO9T\n KcIQ9/Ip3Wco0SAm9Tk6RckSkKj3rOw+FBBBlnOEsxoQLM3whKpTqMlPNk5ZNiH+9Z\n BNIGirjsXqFiUWAVlDhiG3cvlqVViM+es8YKB8ek=",
        "From": "Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "To": "dev@dpdk.org",
        "Cc": "Honnappa.Nagarahalli@arm.com, thomas@monjalon.net,\n Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "Subject": "[PATCH 10/17] net/mlx5: use previous value atomic fetch operations",
        "Date": "Wed,  1 Mar 2023 16:47:41 -0800",
        "Message-Id": "<1677718068-2412-11-git-send-email-roretzla@linux.microsoft.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1677718068-2412-1-git-send-email-roretzla@linux.microsoft.com>",
        "References": "<1677718068-2412-1-git-send-email-roretzla@linux.microsoft.com>",
        "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"
    },
    "content": "Use __atomic_fetch_{add,and,or,sub,xor} instead of\n__atomic_{add,and,or,sub,xor}_fetch when we have no interest in the\nresult of the operation.\n\nReduces unnecessary codegen that provided the result of the atomic\noperation that was not used.\n\nChange brings closer alignment with atomics available in C11 standard\nand will reduce review effort when they are integrated.\n\nSigned-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>\n---\n drivers/net/mlx5/linux/mlx5_verbs.c |  2 +-\n drivers/net/mlx5/mlx5_flow.c        |  6 +++---\n drivers/net/mlx5/mlx5_flow_dv.c     |  4 ++--\n drivers/net/mlx5/mlx5_flow_flex.c   |  6 +++---\n drivers/net/mlx5/mlx5_flow_hw.c     | 10 +++++-----\n drivers/net/mlx5/mlx5_flow_meter.c  | 20 ++++++++++----------\n drivers/net/mlx5/mlx5_rx.h          |  2 +-\n 7 files changed, 25 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c\nindex 67a7bec..c722613 100644\n--- a/drivers/net/mlx5/linux/mlx5_verbs.c\n+++ b/drivers/net/mlx5/linux/mlx5_verbs.c\n@@ -1159,7 +1159,7 @@\n \t\tclaim_zero(mlx5_glue->destroy_cq(sh->self_lb.ibv_cq));\n \t\tsh->self_lb.ibv_cq = NULL;\n \t}\n-\t(void)__atomic_sub_fetch(&sh->self_lb.refcnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_sub(&sh->self_lb.refcnt, 1, __ATOMIC_RELAXED);\n \treturn -rte_errno;\n #else\n \tRTE_SET_USED(dev);\ndiff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c\nindex a6a426c..1c51b29 100644\n--- a/drivers/net/mlx5/mlx5_flow.c\n+++ b/drivers/net/mlx5/mlx5_flow.c\n@@ -4451,7 +4451,7 @@ struct mlx5_translated_action_handle {\n \t\t\tshared_rss = mlx5_ipool_get\n \t\t\t\t(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],\n \t\t\t\t\t\t\t\t\t   idx);\n-\t\t\t__atomic_add_fetch(&shared_rss->refcnt, 1,\n+\t\t\t__atomic_fetch_add(&shared_rss->refcnt, 1,\n \t\t\t\t\t   __ATOMIC_RELAXED);\n \t\t\treturn idx;\n \t\tdefault:\n@@ -7295,7 +7295,7 @@ struct mlx5_list_entry *\n \tif (tunnel) {\n \t\tflow->tunnel = 1;\n \t\tflow->tunnel_id = tunnel->tunnel_id;\n-\t\t__atomic_add_fetch(&tunnel->refctn, 1, __ATOMIC_RELAXED);\n+\t\t__atomic_fetch_add(&tunnel->refctn, 1, __ATOMIC_RELAXED);\n \t\tmlx5_free(default_miss_ctx.queue);\n \t}\n \tmlx5_flow_pop_thread_workspace();\n@@ -7306,7 +7306,7 @@ struct mlx5_list_entry *\n \tflow_mreg_del_copy_action(dev, flow);\n \tflow_drv_destroy(dev, flow);\n \tif (rss_desc->shared_rss)\n-\t\t__atomic_sub_fetch(&((struct mlx5_shared_action_rss *)\n+\t\t__atomic_fetch_sub(&((struct mlx5_shared_action_rss *)\n \t\t\tmlx5_ipool_get\n \t\t\t(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],\n \t\t\trss_desc->shared_rss))->refcnt, 1, __ATOMIC_RELAXED);\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex f93dd40..0233cde 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -15143,7 +15143,7 @@ struct mlx5_list_entry *\n \n \tshared_rss = mlx5_ipool_get\n \t\t\t(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS], srss);\n-\t__atomic_sub_fetch(&shared_rss->refcnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_sub(&shared_rss->refcnt, 1, __ATOMIC_RELAXED);\n }\n \n void\n@@ -15734,7 +15734,7 @@ struct mlx5_list_entry *\n \t/* Update queue with indirect table queue memoyr. */\n \torigin->queue = shared_rss->ind_tbl->queues;\n \trte_spinlock_init(&shared_rss->action_rss_sl);\n-\t__atomic_add_fetch(&shared_rss->refcnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_add(&shared_rss->refcnt, 1, __ATOMIC_RELAXED);\n \trte_spinlock_lock(&priv->shared_act_sl);\n \tILIST_INSERT(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],\n \t\t     &priv->rss_shared_actions, idx, shared_rss, next);\ndiff --git a/drivers/net/mlx5/mlx5_flow_flex.c b/drivers/net/mlx5/mlx5_flow_flex.c\nindex 35f2a99..a825274 100644\n--- a/drivers/net/mlx5/mlx5_flow_flex.c\n+++ b/drivers/net/mlx5/mlx5_flow_flex.c\n@@ -301,7 +301,7 @@\n \t\treturn ret;\n \t}\n \tif (acquire)\n-\t\t__atomic_add_fetch(&flex->refcnt, 1, __ATOMIC_RELEASE);\n+\t\t__atomic_fetch_add(&flex->refcnt, 1, __ATOMIC_RELEASE);\n \treturn ret;\n }\n \n@@ -336,7 +336,7 @@\n \t\trte_errno = -EINVAL;\n \t\treturn -EINVAL;\n \t}\n-\t__atomic_sub_fetch(&flex->refcnt, 1, __ATOMIC_RELEASE);\n+\t__atomic_fetch_sub(&flex->refcnt, 1, __ATOMIC_RELEASE);\n \treturn 0;\n }\n \n@@ -1220,7 +1220,7 @@ struct rte_flow_item_flex_handle *\n \t}\n \tflex->devx_fp = container_of(ent, struct mlx5_flex_parser_devx, entry);\n \t/* Mark initialized flex item valid. */\n-\t__atomic_add_fetch(&flex->refcnt, 1, __ATOMIC_RELEASE);\n+\t__atomic_fetch_add(&flex->refcnt, 1, __ATOMIC_RELEASE);\n \treturn (struct rte_flow_item_flex_handle *)flex;\n \n error:\ndiff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c\nindex a9c7045..159ebb5 100644\n--- a/drivers/net/mlx5/mlx5_flow_hw.c\n+++ b/drivers/net/mlx5/mlx5_flow_hw.c\n@@ -1406,7 +1406,7 @@ static rte_be32_t vlan_hdr_to_be32(const struct rte_flow_action *actions)\n \t\t\t\tgoto err;\n \t\t\tacts->rule_acts[action_pos].action =\n \t\t\t\tpriv->hw_tag[!!attr->group];\n-\t\t\t__atomic_add_fetch(&priv->hws_mark_refcnt, 1, __ATOMIC_RELAXED);\n+\t\t\t__atomic_fetch_add(&priv->hws_mark_refcnt, 1, __ATOMIC_RELAXED);\n \t\t\tflow_hw_rxq_flag_set(dev, true);\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN:\n@@ -3162,13 +3162,13 @@ static rte_be32_t vlan_hdr_to_be32(const struct rte_flow_action *actions)\n at_error:\n \twhile (i--) {\n \t\t__flow_hw_action_template_destroy(dev, &tbl->ats[i].acts);\n-\t\t__atomic_sub_fetch(&action_templates[i]->refcnt,\n+\t\t__atomic_fetch_sub(&action_templates[i]->refcnt,\n \t\t\t\t   1, __ATOMIC_RELAXED);\n \t}\n \ti = nb_item_templates;\n it_error:\n \twhile (i--)\n-\t\t__atomic_sub_fetch(&item_templates[i]->refcnt,\n+\t\t__atomic_fetch_sub(&item_templates[i]->refcnt,\n \t\t\t\t   1, __ATOMIC_RELAXED);\n error:\n \terr = rte_errno;\n@@ -3361,11 +3361,11 @@ static rte_be32_t vlan_hdr_to_be32(const struct rte_flow_action *actions)\n \t}\n \tLIST_REMOVE(table, next);\n \tfor (i = 0; i < table->nb_item_templates; i++)\n-\t\t__atomic_sub_fetch(&table->its[i]->refcnt,\n+\t\t__atomic_fetch_sub(&table->its[i]->refcnt,\n \t\t\t\t   1, __ATOMIC_RELAXED);\n \tfor (i = 0; i < table->nb_action_templates; i++) {\n \t\t__flow_hw_action_template_destroy(dev, &table->ats[i].acts);\n-\t\t__atomic_sub_fetch(&table->ats[i].action_template->refcnt,\n+\t\t__atomic_fetch_sub(&table->ats[i].action_template->refcnt,\n \t\t\t\t   1, __ATOMIC_RELAXED);\n \t}\n \tmlx5dr_matcher_destroy(table->matcher);\ndiff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c\nindex 08f8aad..cb26a12 100644\n--- a/drivers/net/mlx5/mlx5_flow_meter.c\n+++ b/drivers/net/mlx5/mlx5_flow_meter.c\n@@ -1788,7 +1788,7 @@ struct mlx5_flow_meter_policy *\n \t\t\tNULL, \"Meter profile id not valid.\");\n \t/* Meter policy must exist. */\n \tif (params->meter_policy_id == priv->sh->mtrmng->def_policy_id) {\n-\t\t__atomic_add_fetch\n+\t\t__atomic_fetch_add\n \t\t\t(&priv->sh->mtrmng->def_policy_ref_cnt,\n \t\t\t1, __ATOMIC_RELAXED);\n \t\tdomain_bitmap = MLX5_MTR_ALL_DOMAIN_BIT;\n@@ -1870,7 +1870,7 @@ struct mlx5_flow_meter_policy *\n \tfm->is_enable = params->meter_enable;\n \tfm->shared = !!shared;\n \tfm->color_aware = !!params->use_prev_mtr_color;\n-\t__atomic_add_fetch(&fm->profile->ref_cnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_add(&fm->profile->ref_cnt, 1, __ATOMIC_RELAXED);\n \tif (params->meter_policy_id == priv->sh->mtrmng->def_policy_id) {\n \t\tfm->def_policy = 1;\n \t\tfm->flow_ipool = mlx5_ipool_create(&flow_ipool_cfg);\n@@ -1899,7 +1899,7 @@ struct mlx5_flow_meter_policy *\n \t}\n \tfm->active_state = params->meter_enable;\n \tif (mtr_policy)\n-\t\t__atomic_add_fetch(&mtr_policy->ref_cnt, 1, __ATOMIC_RELAXED);\n+\t\t__atomic_fetch_add(&mtr_policy->ref_cnt, 1, __ATOMIC_RELAXED);\n \treturn 0;\n error:\n \tmlx5_flow_destroy_mtr_tbls(dev, fm);\n@@ -1994,8 +1994,8 @@ struct mlx5_flow_meter_policy *\n \t\t\tRTE_MTR_ERROR_TYPE_UNSPECIFIED,\n \t\t\tNULL, \"Failed to create devx meter.\");\n \tfm->active_state = params->meter_enable;\n-\t__atomic_add_fetch(&fm->profile->ref_cnt, 1, __ATOMIC_RELAXED);\n-\t__atomic_add_fetch(&policy->ref_cnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_add(&fm->profile->ref_cnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_add(&policy->ref_cnt, 1, __ATOMIC_RELAXED);\n \treturn 0;\n }\n \n@@ -2017,7 +2017,7 @@ struct mlx5_flow_meter_policy *\n \tif (fmp == NULL)\n \t\treturn -1;\n \t/* Update dependencies. */\n-\t__atomic_sub_fetch(&fmp->ref_cnt, 1, __ATOMIC_RELAXED);\n+\t__atomic_fetch_sub(&fmp->ref_cnt, 1, __ATOMIC_RELAXED);\n \tfm->profile = NULL;\n \t/* Remove from list. */\n \tif (!priv->sh->meter_aso_en) {\n@@ -2035,14 +2035,14 @@ struct mlx5_flow_meter_policy *\n \t}\n \tmlx5_flow_destroy_mtr_tbls(dev, fm);\n \tif (fm->def_policy)\n-\t\t__atomic_sub_fetch(&priv->sh->mtrmng->def_policy_ref_cnt,\n+\t\t__atomic_fetch_sub(&priv->sh->mtrmng->def_policy_ref_cnt,\n \t\t\t\t1, __ATOMIC_RELAXED);\n \tif (priv->sh->meter_aso_en) {\n \t\tif (!fm->def_policy) {\n \t\t\tmtr_policy = mlx5_flow_meter_policy_find(dev,\n \t\t\t\t\t\tfm->policy_id, NULL);\n \t\t\tif (mtr_policy)\n-\t\t\t\t__atomic_sub_fetch(&mtr_policy->ref_cnt,\n+\t\t\t\t__atomic_fetch_sub(&mtr_policy->ref_cnt,\n \t\t\t\t\t\t1, __ATOMIC_RELAXED);\n \t\t\tfm->policy_id = 0;\n \t\t}\n@@ -2146,12 +2146,12 @@ struct mlx5_flow_meter_policy *\n \t\t\t\t\t  RTE_MTR_ERROR_TYPE_UNSPECIFIED,\n \t\t\t\t\t  NULL, \"Meter object is being used.\");\n \t/* Destroy the meter profile. */\n-\t__atomic_sub_fetch(&fm->profile->ref_cnt,\n+\t__atomic_fetch_sub(&fm->profile->ref_cnt,\n \t\t\t\t\t\t1, __ATOMIC_RELAXED);\n \t/* Destroy the meter policy. */\n \tpolicy = mlx5_flow_meter_policy_find(dev,\n \t\t\tfm->policy_id, NULL);\n-\t__atomic_sub_fetch(&policy->ref_cnt,\n+\t__atomic_fetch_sub(&policy->ref_cnt,\n \t\t\t\t\t\t1, __ATOMIC_RELAXED);\n \tmemset(fm, 0, sizeof(struct mlx5_flow_meter_info));\n \treturn 0;\ndiff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h\nindex 6b42e27..ba62398 100644\n--- a/drivers/net/mlx5/mlx5_rx.h\n+++ b/drivers/net/mlx5/mlx5_rx.h\n@@ -539,7 +539,7 @@ uint16_t mlx5_rx_burst_mprq_vec(void *dpdk_rxq, struct rte_mbuf **pkts,\n \t\tvoid *buf_addr;\n \n \t\t/* Increment the refcnt of the whole chunk. */\n-\t\t__atomic_add_fetch(&buf->refcnt, 1, __ATOMIC_RELAXED);\n+\t\t__atomic_fetch_add(&buf->refcnt, 1, __ATOMIC_RELAXED);\n \t\tMLX5_ASSERT(__atomic_load_n(&buf->refcnt,\n \t\t\t    __ATOMIC_RELAXED) <= strd_n + 1);\n \t\tbuf_addr = RTE_PTR_SUB(addr, RTE_PKTMBUF_HEADROOM);\n",
    "prefixes": [
        "10/17"
    ]
}