get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 119549,
    "url": "https://patches.dpdk.org/api/patches/119549/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20221108093045.445821-1-dsosnowski@nvidia.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20221108093045.445821-1-dsosnowski@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221108093045.445821-1-dsosnowski@nvidia.com",
    "date": "2022-11-08T09:30:45",
    "name": "app/testpmd: flush flow templates when port is removed",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "274d8a8e330ca584c77c65e971d5c303262ec044",
    "submitter": {
        "id": 2386,
        "url": "https://patches.dpdk.org/api/people/2386/?format=api",
        "name": "Dariusz Sosnowski",
        "email": "dsosnowski@nvidia.com"
    },
    "delegate": {
        "id": 3961,
        "url": "https://patches.dpdk.org/api/users/3961/?format=api",
        "username": "arybchenko",
        "first_name": "Andrew",
        "last_name": "Rybchenko",
        "email": "andrew.rybchenko@oktetlabs.ru"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20221108093045.445821-1-dsosnowski@nvidia.com/mbox/",
    "series": [
        {
            "id": 25620,
            "url": "https://patches.dpdk.org/api/series/25620/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=25620",
            "date": "2022-11-08T09:30:45",
            "name": "app/testpmd: flush flow templates when port is removed",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/25620/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/119549/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/119549/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 BD239A0540;\n\tTue,  8 Nov 2022 10:32:01 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5F94C410EA;\n\tTue,  8 Nov 2022 10:32:01 +0100 (CET)",
            "from NAM11-CO1-obe.outbound.protection.outlook.com\n (mail-co1nam11on2047.outbound.protection.outlook.com [40.107.220.47])\n by mails.dpdk.org (Postfix) with ESMTP id B5A16400D7\n for <dev@dpdk.org>; Tue,  8 Nov 2022 10:31:59 +0100 (CET)",
            "from DS7P222CA0013.NAMP222.PROD.OUTLOOK.COM (2603:10b6:8:2e::22) by\n CY5PR12MB6526.namprd12.prod.outlook.com (2603:10b6:930:31::20) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.5791.26; Tue, 8 Nov 2022 09:31:57 +0000",
            "from DM6NAM11FT100.eop-nam11.prod.protection.outlook.com\n (2603:10b6:8:2e:cafe::65) by DS7P222CA0013.outlook.office365.com\n (2603:10b6:8:2e::22) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27 via Frontend\n Transport; Tue, 8 Nov 2022 09:31:57 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n DM6NAM11FT100.mail.protection.outlook.com (10.13.172.247) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.5791.20 via Frontend Transport; Tue, 8 Nov 2022 09:31:57 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Tue, 8 Nov 2022\n 01:31:47 -0800",
            "from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com\n (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Tue, 8 Nov 2022\n 01:31:45 -0800"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=aEbhiSxbhz5yo7/AeuDZ8nUFqrRDQ8poftCJIIKW8OxwJxF/GOYxIpWZnk40pCBzV8t8oIhJvAFkWDcq5rVTwFrmClkGGayAqCVr2IRGDwZ6y+3z0UycrYnuP9dz/77BjvZP/Pg9F+aIcVIA4U0fwgaXTGLszYn38RO0Oay0ts1gFy1wP7b50DIfRfgXY/gTZWXKmYyhVJkI2D+5OmOnte0S6L0D59PPAMMkCdNf23FFeNWC/DjnQb3qCoHPz7WmbLJGsGjVd5GWPJZ0jw87eTuwHFaf2D0nWnscDmIzdoOwP5ggokkIK6Do8Vq4fQVg+yQeK7YdpMTIkJfQlDiVjQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=S3j3w9C2g58MFHkHVE9QB84FOVfl0DxOdcswV1xwprI=;\n b=El9/bOjknxBKuBl1y0wQF2Gr9k0pdzhqBb537fcTDuyavTaC4ZCmrUmhjsTwLowlw3aFdvAdfrSxOVQm48TUZg4Vk/2ChlHwCi07mu+Fg2Stq9Gv7oiS1oZ0xmilc9X/UxOH9nqVZ4PcfNONlxkYjuW/6M+BImQGbG07xgfoEK5Vc1gG9NPWEI6wj/1zlbIBLN653G2r4VvXkMNnBef2IywkfWkk425TL/GfGg9fgQOVCnu5vtzkb2+k278k8yrmP3tJ9ixdcphnqQtKh6rZsRKixzhm+NjGDNJ73xc6yNV3sUGeOYt1eJc+fiNRUGRnVjewOiit3Occnl9ZonSNJg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) smtp.rcpttodomain=intel.com smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=S3j3w9C2g58MFHkHVE9QB84FOVfl0DxOdcswV1xwprI=;\n b=n7dSmghhqpS6NujP7zhJLs8L4Ngq9zDJSbrx3Wx4ykDTXWeQ5axasRrCbWLey2LoItW+7he/fPNfSnSXIWd4rvSgzp2Apx8yAclZhMDGKjL3p9xasEhl3moE2OyCC5aAgn3ZOIOXm6waJEuSMXRyj1gE2dS9NYk4vB8Vy4mpQs4L4S+xTuxe615KoFufps61hi+DnXJcBIqAcZhi2uQl1Kn9tQ9mLMyFe3Qy+2B3OP9tmELwT62pVCw+0a0uqbIRQvVi5LnrpBbg20QIwvUnDP6D6xu0aos7FY4ZrkBj53rvwdJc7aBwDn/1m7j6YtYpLfp972que2JinllgdzJ0SQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Dariusz Sosnowski <dsosnowski@nvidia.com>",
        "To": "Aman Singh <aman.deep.singh@intel.com>, Yuying Zhang\n <yuying.zhang@intel.com>",
        "CC": "<dev@dpdk.org>, Ori Kam <orika@nvidia.com>, Suanming Mou\n <suanmingm@nvidia.com>",
        "Subject": "[PATCH] app/testpmd: flush flow templates when port is removed",
        "Date": "Tue, 8 Nov 2022 09:30:45 +0000",
        "Message-ID": "<20221108093045.445821-1-dsosnowski@nvidia.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.231.35]",
        "X-ClientProxiedBy": "rnnvmail203.nvidia.com (10.129.68.9) To\n rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "DM6NAM11FT100:EE_|CY5PR12MB6526:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "eb46909a-07aa-46a1-1924-08dac16c14ee",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 6cmjl9ifJ671Ezu9TKXC+Sc+UzBFUZujFzkwvGpt9MNZnG/zXP0B5WMZPrvd4QxBs80kgspNi4rdUoTHj5EkKwhwO2fHgT9gK0TZRkbv+TJvN2z4rzEntktFuJwt/ZUPL2iavkEpiGvqiWxJTlvt5J3f1moA+B1L9BUXIQyA3jn3rtvRoqP3wFXB7Jk4F6EANhDgdosnAMaOFPoAyhZckL+GAFM0Q1QIPjopjoWGhyrVV20NklvPNOW+YMCfdIQ18bxrj2TfIyu2+SRjkuF2yXBcI1qPSBGEvHBLN10CKzSSa+HcsNRsnPpcjFVGYxKk5H2xcLYlAsbpkUnDf6Pu4UkrGUf0GbcjP6a9Ifkmz3VehNJ5jDdctVVTWX7Vwm3PTH17/0AhHRBlz3gWdLmPlfYsInNRcuPa9W2OO0xfxPbP8AJmBNTwMTx6+E8j4GuxCT4PHOBOTvXl4RDyvs7l49fUcHLDz3J2+R6mpateYSIEwUPzLC5pnJaeft0ZfFfDnM5ShcnpjUe7I0wy+C+cSTuvYy3MoOrHH/d4CIj+8IW9mUh10ZwZC9sXiBlpQJ7/5oF0dlCXFQn7QBAf4aLaUULKS6jVKSRSLFGhYWsTdPdTVPYNEEd0jKadUwvCzsC9jXV3/Bs89oyMR2ICWVoHpiVsm82kzIGAsaW97r6K9UEOhGChz4VMkeqHwTwX6BttBjSxxAkpq8/Q2moPGuiCEKfqvWqwFwkTDEdKkToVFM0ecs3zt3UotsIo7ldP09xDUCAA39xkc2d2F27ZVH09Qg==",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE;\n SFS:(13230022)(4636009)(396003)(376002)(136003)(39860400002)(346002)(451199015)(40470700004)(36840700001)(46966006)(36756003)(7636003)(86362001)(82740400003)(47076005)(2906002)(5660300002)(1076003)(26005)(186003)(83380400001)(36860700001)(336012)(426003)(16526019)(7696005)(2616005)(6286002)(8676002)(4326008)(316002)(110136005)(70586007)(70206006)(41300700001)(356005)(8936002)(82310400005)(40480700001)(40460700003)(54906003)(55016003)(107886003)(478600001);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "08 Nov 2022 09:31:57.6561 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n eb46909a-07aa-46a1-1924-08dac16c14ee",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n DM6NAM11FT100.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY5PR12MB6526",
        "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": "From: Suanming Mou <suanmingm@nvidia.com>\n\nThis patch adds explicit flushing of template tables,\npattern and actions templates, when a port is closed or\ndetached.\n\nSigned-off-by: Suanming Mou <suanmingm@nvidia.com>\n---\n app/test-pmd/config.c  | 111 +++++++++++++++++++++++++++++++++++++++++\n app/test-pmd/testpmd.c |   3 ++\n app/test-pmd/testpmd.h |   3 ++\n 3 files changed, 117 insertions(+)",
    "diff": "diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex e8a1b77c2a..234d534d10 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -2293,6 +2293,42 @@ port_flow_pattern_template_destroy(portid_t port_id, uint32_t n,\n \treturn ret;\n }\n \n+/** Flush pattern template */\n+int\n+port_flow_pattern_template_flush(portid_t port_id)\n+{\n+\tstruct rte_port *port;\n+\tstruct port_template **tmp;\n+\tint ret = 0;\n+\n+\tif (port_id_is_invalid(port_id, ENABLED_WARN) ||\n+\t    port_id == (portid_t)RTE_PORT_ALL)\n+\t\treturn -EINVAL;\n+\tport = &ports[port_id];\n+\ttmp = &port->pattern_templ_list;\n+\twhile (*tmp) {\n+\t\tstruct rte_flow_error error;\n+\t\tstruct port_template *pit = *tmp;\n+\n+\t\t/*\n+\t\t * Poisoning to make sure PMDs update it in case\n+\t\t * of error.\n+\t\t */\n+\t\tmemset(&error, 0x33, sizeof(error));\n+\t\tif (pit->template.pattern_template &&\n+\t\t    rte_flow_pattern_template_destroy(port_id,\n+\t\t\tpit->template.pattern_template, &error)) {\n+\t\t\tprintf(\"Pattern template #%u not destroyed\\n\", pit->id);\n+\t\t\tret = port_flow_complain(&error);\n+\t\t\ttmp = &pit->next;\n+\t\t} else {\n+\t\t\t*tmp = pit->next;\n+\t\t\tfree(pit);\n+\t\t}\n+\t}\n+\treturn ret;\n+}\n+\n /** Create actions template */\n int\n port_flow_actions_template_create(portid_t port_id, uint32_t id,\n@@ -2373,6 +2409,43 @@ port_flow_actions_template_destroy(portid_t port_id, uint32_t n,\n \treturn ret;\n }\n \n+/** Flush actions template */\n+int\n+port_flow_actions_template_flush(portid_t port_id)\n+{\n+\tstruct rte_port *port;\n+\tstruct port_template **tmp;\n+\tint ret = 0;\n+\n+\tif (port_id_is_invalid(port_id, ENABLED_WARN) ||\n+\t    port_id == (portid_t)RTE_PORT_ALL)\n+\t\treturn -EINVAL;\n+\tport = &ports[port_id];\n+\ttmp = &port->actions_templ_list;\n+\twhile (*tmp) {\n+\t\tstruct rte_flow_error error;\n+\t\tstruct port_template *pat = *tmp;\n+\n+\t\t/*\n+\t\t * Poisoning to make sure PMDs update it in case\n+\t\t * of error.\n+\t\t */\n+\t\tmemset(&error, 0x33, sizeof(error));\n+\n+\t\tif (pat->template.actions_template &&\n+\t\t    rte_flow_actions_template_destroy(port_id,\n+\t\t\tpat->template.actions_template, &error)) {\n+\t\t\tret = port_flow_complain(&error);\n+\t\t\tprintf(\"Actions template #%u not destroyed\\n\", pat->id);\n+\t\t\ttmp = &pat->next;\n+\t\t} else {\n+\t\t\t*tmp = pat->next;\n+\t\t\tfree(pat);\n+\t\t}\n+\t}\n+\treturn ret;\n+}\n+\n /** Create table */\n int\n port_flow_template_table_create(portid_t port_id, uint32_t id,\n@@ -2501,6 +2574,44 @@ port_flow_template_table_destroy(portid_t port_id,\n \treturn ret;\n }\n \n+/** Flush table */\n+int\n+port_flow_template_table_flush(portid_t port_id)\n+{\n+\tstruct rte_port *port;\n+\tstruct port_table **tmp;\n+\tint ret = 0;\n+\n+\tif (port_id_is_invalid(port_id, ENABLED_WARN) ||\n+\t    port_id == (portid_t)RTE_PORT_ALL)\n+\t\treturn -EINVAL;\n+\tport = &ports[port_id];\n+\ttmp = &port->table_list;\n+\twhile (*tmp) {\n+\t\tstruct rte_flow_error error;\n+\t\tstruct port_table *pt = *tmp;\n+\n+\t\t/*\n+\t\t * Poisoning to make sure PMDs update it in case\n+\t\t * of error.\n+\t\t */\n+\t\tmemset(&error, 0x33, sizeof(error));\n+\n+\t\tif (pt->table &&\n+\t\t    rte_flow_template_table_destroy(port_id,\n+\t\t\t\t\t\t   pt->table,\n+\t\t\t\t\t\t   &error)) {\n+\t\t\tret = port_flow_complain(&error);\n+\t\t\tprintf(\"Template table #%u not destroyed\\n\", pt->id);\n+\t\t\ttmp = &pt->next;\n+\t\t} else {\n+\t\t\t*tmp = pt->next;\n+\t\t\tfree(pt);\n+\t\t}\n+\t}\n+\treturn ret;\n+}\n+\n /** Enqueue create flow rule operation. */\n int\n port_queue_flow_create(portid_t port_id, queueid_t queue_id,\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex bf589c4e8d..6c5a3555b8 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -3212,6 +3212,9 @@ flush_port_owned_resources(portid_t pi)\n \tmcast_addr_pool_destroy(pi);\n \tport_flow_flush(pi);\n \tport_flex_item_flush(pi);\n+\tport_flow_template_table_flush(pi);\n+\tport_flow_pattern_template_flush(pi);\n+\tport_flow_actions_template_flush(pi);\n \tport_action_handle_flush(pi);\n }\n \ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex 93fdb9d331..277d4091ab 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -907,18 +907,21 @@ int port_flow_pattern_template_create(portid_t port_id, uint32_t id,\n \t\t\t\t      const struct rte_flow_item *pattern);\n int port_flow_pattern_template_destroy(portid_t port_id, uint32_t n,\n \t\t\t\t       const uint32_t *template);\n+int port_flow_pattern_template_flush(portid_t port_id);\n int port_flow_actions_template_create(portid_t port_id, uint32_t id,\n \t\t\t\t      const struct rte_flow_actions_template_attr *attr,\n \t\t\t\t      const struct rte_flow_action *actions,\n \t\t\t\t      const struct rte_flow_action *masks);\n int port_flow_actions_template_destroy(portid_t port_id, uint32_t n,\n \t\t\t\t       const uint32_t *template);\n+int port_flow_actions_template_flush(portid_t port_id);\n int port_flow_template_table_create(portid_t port_id, uint32_t id,\n \t\t   const struct rte_flow_template_table_attr *table_attr,\n \t\t   uint32_t nb_pattern_templates, uint32_t *pattern_templates,\n \t\t   uint32_t nb_actions_templates, uint32_t *actions_templates);\n int port_flow_template_table_destroy(portid_t port_id,\n \t\t\t    uint32_t n, const uint32_t *table);\n+int port_flow_template_table_flush(portid_t port_id);\n int port_queue_flow_create(portid_t port_id, queueid_t queue_id,\n \t\t\t   bool postpone, uint32_t table_id,\n \t\t\t   uint32_t pattern_idx, uint32_t actions_idx,\n",
    "prefixes": []
}