get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 128301,
    "url": "http://patches.dpdk.org/api/patches/128301/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230607130245.8048-13-ivan.malov@arknetworks.am/",
    "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": "<20230607130245.8048-13-ivan.malov@arknetworks.am>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230607130245.8048-13-ivan.malov@arknetworks.am",
    "date": "2023-06-07T13:02:23",
    "name": "[v4,12/34] net/sfc: make entry pointer optional in MAE resource helpers",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "4305528778b076892107c878cbca25a70f6ae597",
    "submitter": {
        "id": 2962,
        "url": "http://patches.dpdk.org/api/people/2962/?format=api",
        "name": "Ivan Malov",
        "email": "ivan.malov@arknetworks.am"
    },
    "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/20230607130245.8048-13-ivan.malov@arknetworks.am/mbox/",
    "series": [
        {
            "id": 28390,
            "url": "http://patches.dpdk.org/api/series/28390/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=28390",
            "date": "2023-06-07T13:02:11",
            "name": "net/sfc: support HW conntrack assistance",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/28390/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/128301/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/128301/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 61E7942C4D;\n\tWed,  7 Jun 2023 15:04:41 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DD5E742D63;\n\tWed,  7 Jun 2023 15:03:01 +0200 (CEST)",
            "from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80])\n by mails.dpdk.org (Postfix) with ESMTP id BDEBD42D3B\n for <dev@dpdk.org>; Wed,  7 Jun 2023 15:02:53 +0200 (CEST)",
            "from localhost.localdomain (unknown [78.109.69.83])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by agw.arknetworks.am (Postfix) with ESMTPSA id 489B5E12D1;\n Wed,  7 Jun 2023 17:02:53 +0400 (+04)"
        ],
        "From": "Ivan Malov <ivan.malov@arknetworks.am>",
        "To": "dev@dpdk.org",
        "Cc": "Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Ferruh Yigit <ferruh.yigit@amd.com>, Andy Moreton <amoreton@xilinx.com>",
        "Subject": "[PATCH v4 12/34] net/sfc: make entry pointer optional in MAE resource\n helpers",
        "Date": "Wed,  7 Jun 2023 17:02:23 +0400",
        "Message-Id": "<20230607130245.8048-13-ivan.malov@arknetworks.am>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20230607130245.8048-1-ivan.malov@arknetworks.am>",
        "References": "<20230601195538.8265-1-ivan.malov@arknetworks.am>\n <20230607130245.8048-1-ivan.malov@arknetworks.am>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "Keep NULL object check in one place rather than repeat it in\nall of the callers. That should make the code easier on eyes.\nFuture code for additional object types will follow this way.\n\nSigned-off-by: Ivan Malov <ivan.malov@arknetworks.am>\nReviewed-by: Andy Moreton <amoreton@xilinx.com>\n---\n drivers/net/sfc/sfc_mae.c | 78 ++++++++++++++++++++++++++-------------\n 1 file changed, 52 insertions(+), 26 deletions(-)",
    "diff": "diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c\nindex e5e9257998..1928d58779 100644\n--- a/drivers/net/sfc/sfc_mae.c\n+++ b/drivers/net/sfc/sfc_mae.c\n@@ -402,6 +402,9 @@ sfc_mae_outer_rule_del(struct sfc_adapter *sa,\n {\n \tstruct sfc_mae *mae = &sa->mae;\n \n+\tif (rule == NULL)\n+\t\treturn;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \tSFC_ASSERT(rule->refcnt != 0);\n \n@@ -429,11 +432,16 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,\n \t\t\t  struct sfc_mae_outer_rule *rule,\n \t\t\t  efx_mae_match_spec_t *match_spec_action)\n {\n-\tstruct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc;\n+\tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tint rc;\n \n+\tif (rule == NULL)\n+\t\treturn 0;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \n+\tfw_rsrc = &rule->fw_rsrc;\n+\n \tif (fw_rsrc->refcnt == 0) {\n \t\tSFC_ASSERT(fw_rsrc->rule_id.id == EFX_MAE_RSRC_ID_INVALID);\n \t\tSFC_ASSERT(rule->match_spec != NULL);\n@@ -480,11 +488,16 @@ static void\n sfc_mae_outer_rule_disable(struct sfc_adapter *sa,\n \t\t\t   struct sfc_mae_outer_rule *rule)\n {\n-\tstruct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc;\n+\tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tint rc;\n \n+\tif (rule == NULL)\n+\t\treturn;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \n+\tfw_rsrc = &rule->fw_rsrc;\n+\n \tif (fw_rsrc->rule_id.id == EFX_MAE_RSRC_ID_INVALID ||\n \t    fw_rsrc->refcnt == 0) {\n \t\tsfc_err(sa, \"failed to disable outer_rule=%p: already disabled; OR_ID=0x%08x, refcnt=%u\",\n@@ -1057,6 +1070,9 @@ sfc_mae_action_set_del(struct sfc_adapter *sa,\n {\n \tstruct sfc_mae *mae = &sa->mae;\n \n+\tif (action_set == NULL)\n+\t\treturn;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \tSFC_ASSERT(action_set->refcnt != 0);\n \n@@ -1092,15 +1108,24 @@ static int\n sfc_mae_action_set_enable(struct sfc_adapter *sa,\n \t\t\t  struct sfc_mae_action_set *action_set)\n {\n-\tstruct sfc_mae_encap_header *encap_header = action_set->encap_header;\n-\tstruct sfc_mae_mac_addr *dst_mac_addr = action_set->dst_mac_addr;\n-\tstruct sfc_mae_mac_addr *src_mac_addr = action_set->src_mac_addr;\n-\tstruct sfc_mae_counter_id *counters = action_set->counters;\n-\tstruct sfc_mae_fw_rsrc *fw_rsrc = &action_set->fw_rsrc;\n+\tstruct sfc_mae_encap_header *encap_header;\n+\tstruct sfc_mae_mac_addr *dst_mac_addr;\n+\tstruct sfc_mae_mac_addr *src_mac_addr;\n+\tstruct sfc_mae_counter_id *counters;\n+\tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tint rc;\n \n+\tif (action_set == NULL)\n+\t\treturn 0;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \n+\tencap_header = action_set->encap_header;\n+\tdst_mac_addr = action_set->dst_mac_addr;\n+\tsrc_mac_addr = action_set->src_mac_addr;\n+\tcounters = action_set->counters;\n+\tfw_rsrc = &action_set->fw_rsrc;\n+\n \tif (fw_rsrc->refcnt == 0) {\n \t\tSFC_ASSERT(fw_rsrc->aset_id.id == EFX_MAE_RSRC_ID_INVALID);\n \t\tSFC_ASSERT(action_set->spec != NULL);\n@@ -1167,11 +1192,16 @@ static void\n sfc_mae_action_set_disable(struct sfc_adapter *sa,\n \t\t\t   struct sfc_mae_action_set *action_set)\n {\n-\tstruct sfc_mae_fw_rsrc *fw_rsrc = &action_set->fw_rsrc;\n+\tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tint rc;\n \n+\tif (action_set == NULL)\n+\t\treturn;\n+\n \tSFC_ASSERT(sfc_adapter_is_locked(sa));\n \n+\tfw_rsrc = &action_set->fw_rsrc;\n+\n \tif (fw_rsrc->aset_id.id == EFX_MAE_RSRC_ID_INVALID ||\n \t    fw_rsrc->refcnt == 0) {\n \t\tsfc_err(sa, \"failed to disable action_set=%p: already disabled; AS_ID=0x%08x, refcnt=%u\",\n@@ -1226,11 +1256,8 @@ sfc_mae_flow_cleanup(struct sfc_adapter *sa,\n \n \tSFC_ASSERT(spec_mae->rule_id.id == EFX_MAE_RSRC_ID_INVALID);\n \n-\tif (spec_mae->outer_rule != NULL)\n-\t\tsfc_mae_outer_rule_del(sa, spec_mae->outer_rule);\n-\n-\tif (spec_mae->action_set != NULL)\n-\t\tsfc_mae_action_set_del(sa, spec_mae->action_set);\n+\tsfc_mae_outer_rule_del(sa, spec_mae->outer_rule);\n+\tsfc_mae_action_set_del(sa, spec_mae->action_set);\n \n \tif (spec_mae->match_spec != NULL)\n \t\tefx_mae_match_spec_fini(sa->nic, spec_mae->match_spec);\n@@ -2575,9 +2602,7 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa,\n \trc = efx_mae_match_spec_outer_rule_id_set(ctx->match_spec_action,\n \t\t\t\t\t\t  &invalid_rule_id);\n \tif (rc != 0) {\n-\t\tif (*rulep != NULL)\n-\t\t\tsfc_mae_outer_rule_del(sa, *rulep);\n-\n+\t\tsfc_mae_outer_rule_del(sa, *rulep);\n \t\t*rulep = NULL;\n \n \t\treturn rte_flow_error_set(error, rc,\n@@ -3979,10 +4004,15 @@ static int\n sfc_mae_outer_rule_class_verify(struct sfc_adapter *sa,\n \t\t\t\tstruct sfc_mae_outer_rule *rule)\n {\n-\tstruct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc;\n \tstruct sfc_mae_outer_rule *entry;\n+\tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tstruct sfc_mae *mae = &sa->mae;\n \n+\tif (rule == NULL)\n+\t\treturn 0;\n+\n+\tfw_rsrc = &rule->fw_rsrc;\n+\n \tif (fw_rsrc->rule_id.id != EFX_MAE_RSRC_ID_INVALID) {\n \t\t/* An active rule is reused. It's class is wittingly valid. */\n \t\treturn 0;\n@@ -4069,11 +4099,9 @@ sfc_mae_flow_verify(struct sfc_adapter *sa,\n \tif (sa->state != SFC_ETHDEV_STARTED)\n \t\treturn EAGAIN;\n \n-\tif (outer_rule != NULL) {\n-\t\trc = sfc_mae_outer_rule_class_verify(sa, outer_rule);\n-\t\tif (rc != 0)\n-\t\t\treturn rc;\n-\t}\n+\trc = sfc_mae_outer_rule_class_verify(sa, outer_rule);\n+\tif (rc != 0)\n+\t\treturn rc;\n \n \treturn sfc_mae_action_rule_class_verify(sa, spec_mae);\n }\n@@ -4139,8 +4167,7 @@ sfc_mae_flow_insert(struct sfc_adapter *sa,\n \tsfc_mae_action_set_disable(sa, action_set);\n \n fail_action_set_enable:\n-\tif (outer_rule != NULL)\n-\t\tsfc_mae_outer_rule_disable(sa, outer_rule);\n+\tsfc_mae_outer_rule_disable(sa, outer_rule);\n \n fail_outer_rule_enable:\n \treturn rc;\n@@ -4175,8 +4202,7 @@ sfc_mae_flow_remove(struct sfc_adapter *sa,\n \tsfc_mae_action_set_disable(sa, action_set);\n \n skip_action_rule:\n-\tif (outer_rule != NULL)\n-\t\tsfc_mae_outer_rule_disable(sa, outer_rule);\n+\tsfc_mae_outer_rule_disable(sa, outer_rule);\n \n \treturn 0;\n }\n",
    "prefixes": [
        "v4",
        "12/34"
    ]
}