get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 127892,
    "url": "http://patches.dpdk.org/api/patches/127892/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230601195538.8265-20-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": "<20230601195538.8265-20-ivan.malov@arknetworks.am>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230601195538.8265-20-ivan.malov@arknetworks.am",
    "date": "2023-06-01T19:55:23",
    "name": "[19/34] net/sfc: prepare MAE outer rules for action rule indirection",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6017b9e5f983ef1c3a89a2955e2009abfb5c9b9d",
    "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/20230601195538.8265-20-ivan.malov@arknetworks.am/mbox/",
    "series": [
        {
            "id": 28307,
            "url": "http://patches.dpdk.org/api/series/28307/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=28307",
            "date": "2023-06-01T19:55:04",
            "name": "net/sfc: support HW conntrack assistance",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/28307/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/127892/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/127892/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 DEDF442C07;\n\tThu,  1 Jun 2023 21:57:52 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id CC67242F8E;\n\tThu,  1 Jun 2023 21:56:04 +0200 (CEST)",
            "from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80])\n by mails.dpdk.org (Postfix) with ESMTP id 7E17E42D5C\n for <dev@dpdk.org>; Thu,  1 Jun 2023 21:55:51 +0200 (CEST)",
            "from localhost.localdomain (unknown [78.109.69.146])\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 080BCE12CB;\n Thu,  1 Jun 2023 23:55:50 +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 19/34] net/sfc: prepare MAE outer rules for action rule\n indirection",
        "Date": "Thu,  1 Jun 2023 23:55:23 +0400",
        "Message-Id": "<20230601195538.8265-20-ivan.malov@arknetworks.am>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20230601195538.8265-1-ivan.malov@arknetworks.am>",
        "References": "<20230601195538.8265-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": "Flows provided by match-action engine (MAE) will be reworked\nby the next patch to make action rule (AR) entries shareable.\nTo ensure correct AR specification comparison on attach path,\naugment the way outer rules (OR) are handled, namely, how OR\nIDs are indicated in a AR specification on parse and disable.\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 | 44 ++++++++++++++++++++++++++++-----------\n 1 file changed, 32 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c\nindex 74614fe9a5..3d9680f070 100644\n--- a/drivers/net/sfc/sfc_mae.c\n+++ b/drivers/net/sfc/sfc_mae.c\n@@ -397,8 +397,10 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,\n \n static void\n sfc_mae_outer_rule_disable(struct sfc_adapter *sa,\n-\t\t\t   struct sfc_mae_outer_rule *rule)\n+\t\t\t   struct sfc_mae_outer_rule *rule,\n+\t\t\t   efx_mae_match_spec_t *match_spec_action)\n {\n+\tefx_mae_rule_id_t invalid_rule_id = { .id = EFX_MAE_RSRC_ID_INVALID };\n \tstruct sfc_mae_fw_rsrc *fw_rsrc;\n \tint rc;\n \n@@ -409,6 +411,18 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa,\n \n \tfw_rsrc = &rule->fw_rsrc;\n \n+\tif (match_spec_action == NULL)\n+\t\tgoto skip_action_rule;\n+\n+\trc = efx_mae_match_spec_outer_rule_id_set(match_spec_action,\n+\t\t\t\t\t\t  &invalid_rule_id);\n+\tif (rc != 0) {\n+\t\tsfc_err(sa, \"cannot restore match on invalid outer rule ID: %s\",\n+\t\t\tstrerror(rc));\n+\t\treturn;\n+\t}\n+\n+skip_action_rule:\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@@ -2459,7 +2473,7 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa,\n \t\t\t   struct sfc_mae_outer_rule **rulep,\n \t\t\t   struct rte_flow_error *error)\n {\n-\tefx_mae_rule_id_t invalid_rule_id = { .id = EFX_MAE_RSRC_ID_INVALID };\n+\tefx_mae_rule_id_t or_id = { .id = EFX_MAE_RSRC_ID_INVALID };\n \tint rc;\n \n \tif (ctx->internal) {\n@@ -2506,13 +2520,20 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa,\n \t/* The spec has now been tracked by the outer rule entry. */\n \tctx->match_spec_outer = NULL;\n \n+\tor_id.id = (*rulep)->fw_rsrc.rule_id.id;\n+\n no_or_id:\n \tswitch (ctx->ft_rule_type) {\n \tcase SFC_FT_RULE_NONE:\n \t\tbreak;\n \tcase SFC_FT_RULE_TUNNEL:\n-\t\t/* No action rule */\n-\t\treturn 0;\n+\t\t/*\n+\t\t * Workaround. TUNNEL flows are not supposed to involve\n+\t\t * MAE action rules, but, due to the currently limited\n+\t\t * HW/FW implementation, action rules are still needed.\n+\t\t * See sfc_mae_rule_parse_pattern().\n+\t\t */\n+\t\tbreak;\n \tcase SFC_FT_RULE_SWITCH:\n \t\t/*\n \t\t * Match on recirculation ID rather than\n@@ -2538,14 +2559,13 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa,\n \t * outer rule table. Set OR_ID match field to 0xffffffff/0xffffffff\n \t * in the action rule specification; this ensures correct behaviour.\n \t *\n-\t * If, on the other hand, this flow does have an outer rule, its ID\n-\t * may be unknown at the moment (not yet allocated), but OR_ID mask\n-\t * has to be set to 0xffffffff anyway for correct class comparisons.\n-\t * When the outer rule has been allocated, this match field will be\n-\t * overridden by sfc_mae_outer_rule_enable() to use the right value.\n+\t * If, however, this flow does have an outer rule, OR_ID match must\n+\t * be set to the currently known value for that outer rule. It will\n+\t * be either 0xffffffff or some valid ID, depending on whether this\n+\t * outer rule is currently active (adapter state is STARTED) or not.\n \t */\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+\t\t\t\t\t\t  &or_id);\n \tif (rc != 0) {\n \t\tsfc_mae_outer_rule_del(sa, *rulep);\n \t\t*rulep = NULL;\n@@ -4172,7 +4192,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-\tsfc_mae_outer_rule_disable(sa, outer_rule);\n+\tsfc_mae_outer_rule_disable(sa, outer_rule, spec_mae->match_spec);\n \n fail_outer_rule_enable:\n \treturn rc;\n@@ -4207,7 +4227,7 @@ sfc_mae_flow_remove(struct sfc_adapter *sa,\n \tsfc_mae_action_set_disable(sa, action_set);\n \n skip_action_rule:\n-\tsfc_mae_outer_rule_disable(sa, outer_rule);\n+\tsfc_mae_outer_rule_disable(sa, outer_rule, spec_mae->match_spec);\n \n \treturn 0;\n }\n",
    "prefixes": [
        "19/34"
    ]
}