get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 123201,
    "url": "http://patchwork.dpdk.org/api/patches/123201/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20230207063254.401538-5-adwivedi@marvell.com/",
    "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": "<20230207063254.401538-5-adwivedi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230207063254.401538-5-adwivedi@marvell.com",
    "date": "2023-02-07T06:32:52",
    "name": "[v9,4/6] ethdev: add trace points for flow",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "443a315be25b01040ebbcec1e39b0ae15ef1d646",
    "submitter": {
        "id": 1561,
        "url": "http://patchwork.dpdk.org/api/people/1561/?format=api",
        "name": "Ankur Dwivedi",
        "email": "adwivedi@marvell.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20230207063254.401538-5-adwivedi@marvell.com/mbox/",
    "series": [
        {
            "id": 26834,
            "url": "http://patchwork.dpdk.org/api/series/26834/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=26834",
            "date": "2023-02-07T06:32:48",
            "name": "add trace points in ethdev library",
            "version": 9,
            "mbox": "http://patchwork.dpdk.org/series/26834/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/123201/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/123201/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 ED6B141C2A;\n\tTue,  7 Feb 2023 07:37:42 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DC1D4427E9;\n\tTue,  7 Feb 2023 07:37:42 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 5DAA742B8E\n for <dev@dpdk.org>; Tue,  7 Feb 2023 07:37:41 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 3171EnXe013612; Mon, 6 Feb 2023 22:35:14 -0800",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nhqrth9t7-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 06 Feb 2023 22:35:13 -0800",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.42;\n Mon, 6 Feb 2023 22:35:11 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.42 via Frontend\n Transport; Mon, 6 Feb 2023 22:35:10 -0800",
            "from localhost.localdomain (unknown [10.28.36.185])\n by maili.marvell.com (Postfix) with ESMTP id D1E943F7043;\n Mon,  6 Feb 2023 22:34:48 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=Tg4TkRINtsCM99im8162k0IiunHvMs3UPq4Q9vGJws8=;\n b=cPAq8rGkBBy4xYoGI/qtkPwSRRhGR5ocTEHkg+vD9UkWzzfb1x13V2g+cKFKnQa6N39c\n otgqEtnl41FEtnk8TDk+dfkElg4APhsGviRlVIRWdetxayiTpCwFtGYCiYpJK+sHjE6S\n ap6iNaGapFDT8zApyy8SX3knx/0uAjpJVy+VOBH1dWS6J0sdIoMnhySok61uvFrfelxK\n sAD661B45J1FCaPASGOGkMl5XTe7qc5rF8Qz+SQHfICvCags9PNSZ1ZgTgL+MOSJJvg7\n Q225Ofe70ceXqf3yoUQl1Pu9GGPlx/knrqRFEv4+dw4Ckdl5WhdFFYGVLpRay//KsdGm Gg==",
        "From": "Ankur Dwivedi <adwivedi@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas@monjalon.net>, <david.marchand@redhat.com>, <mdr@ashroe.eu>,\n <orika@nvidia.com>, <ferruh.yigit@amd.com>, <chas3@att.com>,\n <humin29@huawei.com>, <linville@tuxdriver.com>,\n <ciara.loftus@intel.com>, <qi.z.zhang@intel.com>, <mw@semihalf.com>,\n <mk@semihalf.com>, <shaibran@amazon.com>, <evgenys@amazon.com>,\n <igorch@amazon.com>, <chandu@amd.com>, <irusskikh@marvell.com>,\n <shepard.siegel@atomicrules.com>, <ed.czeck@atomicrules.com>,\n <john.miller@atomicrules.com>, <ajit.khaparde@broadcom.com>,\n <somnath.kotur@broadcom.com>, <jerinj@marvell.com>,\n <mczekaj@marvell.com>, <sthotton@marvell.com>,\n <srinivasan@marvell.com>, <hkalra@marvell.com>,\n <rahul.lakkireddy@chelsio.com>, <johndale@cisco.com>,\n <hyonkim@cisco.com>, <liudongdong3@huawei.com>,\n <yisen.zhuang@huawei.com>, <xuanziyang2@huawei.com>,\n <cloud.wangxiaoyun@huawei.com>, <zhouguoyang@huawei.com>,\n <simei.su@intel.com>, <wenjun1.wu@intel.com>, <qiming.yang@intel.com>,\n <Yuying.Zhang@intel.com>, <beilei.xing@intel.com>,\n <xiao.w.wang@intel.com>, <jingjing.wu@intel.com>,\n <junfeng.guo@intel.com>, <rosen.xu@intel.com>,\n <ndabilpuram@marvell.com>, <kirankumark@marvell.com>,\n <skori@marvell.com>, <skoteshwar@marvell.com>, <lironh@marvell.com>,\n <zr@semihalf.com>, <radhac@marvell.com>, <vburru@marvell.com>,\n <sedara@marvell.com>, <matan@nvidia.com>, <viacheslavo@nvidia.com>,\n <longli@microsoft.com>, <spinler@cesnet.cz>,\n <chaoyong.he@corigine.com>, <niklas.soderlund@corigine.com>,\n <hemant.agrawal@nxp.com>, <sachin.saxena@oss.nxp.com>,\n <g.singh@nxp.com>, <apeksha.gupta@nxp.com>, <sachin.saxena@nxp.com>,\n <aboyer@pensando.io>, <rmody@marvell.com>, <shshaikh@marvell.com>,\n <dsinghrawat@marvell.com>, <andrew.rybchenko@oktetlabs.ru>,\n <jiawenwu@trustnetic.com>, <jianwang@trustnetic.com>,\n <jbehrens@vmware.com>, <maxime.coquelin@redhat.com>,\n <chenbo.xia@intel.com>, <steven.webster@windriver.com>,\n <matt.peters@windriver.com>, <bruce.richardson@intel.com>,\n <mtetsuyah@gmail.com>, <grive@u256.net>, <jasvinder.singh@intel.com>,\n <cristian.dumitrescu@intel.com>, <jgrajcia@cisco.com>,\n <mb@smartsharesystems.com>, Ankur Dwivedi <adwivedi@marvell.com>",
        "Subject": "[PATCH v9 4/6] ethdev: add trace points for flow",
        "Date": "Tue, 7 Feb 2023 12:02:52 +0530",
        "Message-ID": "<20230207063254.401538-5-adwivedi@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230207063254.401538-1-adwivedi@marvell.com>",
        "References": "<20230206115810.308574-1-adwivedi@marvell.com>\n <20230207063254.401538-1-adwivedi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "nVk2me607dkKFwWmOsG5IUXeVVHBKkbr",
        "X-Proofpoint-ORIG-GUID": "nVk2me607dkKFwWmOsG5IUXeVVHBKkbr",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1\n definitions=2023-02-06_07,2023-02-06_03,2022-06-22_01",
        "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": "Adds trace points for rte_flow specific functions in ethdev lib.\n\nSigned-off-by: Ankur Dwivedi <adwivedi@marvell.com>\n---\n lib/ethdev/ethdev_trace.h        | 502 +++++++++++++++++++++++++++++++\n lib/ethdev/ethdev_trace_points.c | 117 +++++++\n lib/ethdev/rte_flow.c            | 356 +++++++++++++++++-----\n 3 files changed, 896 insertions(+), 79 deletions(-)",
    "diff": "diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h\nindex 9039446b5f..0604c0290e 100644\n--- a/lib/ethdev/ethdev_trace.h\n+++ b/lib/ethdev/ethdev_trace.h\n@@ -1401,6 +1401,277 @@ RTE_TRACE_POINT(\n \trte_trace_point_emit_int(ret);\n )\n \n+RTE_TRACE_POINT(\n+\trte_flow_trace_dynf_metadata_register,\n+\tRTE_TRACE_POINT_ARGS(int offset, uint64_t flag),\n+\trte_trace_point_emit_int(offset);\n+\trte_trace_point_emit_u64(flag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_validate,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tconst struct rte_flow_action *actions, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flush,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_conv,\n+\tRTE_TRACE_POINT_ARGS(enum rte_flow_conv_op op, const void *dst,\n+\t\tsize_t size, const void *src, int ret),\n+\trte_trace_point_emit_int(op);\n+\trte_trace_point_emit_ptr(dst);\n+\trte_trace_point_emit_size_t(size);\n+\trte_trace_point_emit_ptr(src);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_copy,\n+\tRTE_TRACE_POINT_ARGS(struct rte_flow_desc *fd, size_t len,\n+\t\tconst struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *items,\n+\t\tconst struct rte_flow_action *actions, int ret),\n+\trte_trace_point_emit_ptr(fd);\n+\trte_trace_point_emit_size_t(len);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_int(items->type);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_int(actions->type);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_decap_set,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_action **actions,\n+\t\tconst uint32_t *num_of_actions, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(tunnel);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(num_of_actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_match,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_item **items,\n+\t\tconst uint32_t *num_of_items, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(tunnel);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_ptr(num_of_items);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_action_decap_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_action *actions, uint32_t num_of_actions,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_u32(num_of_actions);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_item_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_item *items, uint32_t num_of_items,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(items);\n+\trte_trace_point_emit_u32(num_of_items);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flex_item_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_item_flex_conf *conf,\n+\t\tconst struct rte_flow_item_flex_handle *handle),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_int(conf->tunnel);\n+\trte_trace_point_emit_int(conf->nb_samples);\n+\trte_trace_point_emit_int(conf->nb_inputs);\n+\trte_trace_point_emit_int(conf->nb_outputs);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flex_item_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_item_flex_handle *handle, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_info_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_port_info *port_info,\n+\t\tconst struct rte_flow_queue_info *queue_info, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_info);\n+\trte_trace_point_emit_u32(port_info->max_nb_queues);\n+\trte_trace_point_emit_u32(port_info->max_nb_counters);\n+\trte_trace_point_emit_u32(port_info->max_nb_aging_objects);\n+\trte_trace_point_emit_u32(port_info->max_nb_meters);\n+\trte_trace_point_emit_u32(port_info->max_nb_conn_tracks);\n+\trte_trace_point_emit_u32(port_info->supported_flags);\n+\trte_trace_point_emit_ptr(queue_info);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_configure,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_port_attr *port_attr,\n+\t\tuint16_t nb_queue,\n+\t\tconst struct rte_flow_queue_attr **queue_attr, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_attr);\n+\trte_trace_point_emit_u32(port_attr->nb_counters);\n+\trte_trace_point_emit_u32(port_attr->nb_aging_objects);\n+\trte_trace_point_emit_u32(port_attr->nb_meters);\n+\trte_trace_point_emit_u32(port_attr->nb_conn_tracks);\n+\trte_trace_point_emit_u32(port_attr->flags);\n+\trte_trace_point_emit_u16(nb_queue);\n+\trte_trace_point_emit_ptr(queue_attr);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pattern_template_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_pattern_template_attr *template_attr,\n+\t\tconst struct rte_flow_item *pattern, const void *tmplate),\n+\tuint8_t relaxed_matching = template_attr->relaxed_matching;\n+\tuint8_t ingress = template_attr->ingress;\n+\tuint8_t egress = template_attr->egress;\n+\tuint8_t transfer = template_attr->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_u8(relaxed_matching);\n+\trte_trace_point_emit_u8(ingress);\n+\trte_trace_point_emit_u8(egress);\n+\trte_trace_point_emit_u8(transfer);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(tmplate);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pattern_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_pattern_template *pattern_template,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(pattern_template);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_actions_template_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_actions_template_attr *template_attr,\n+\t\tconst struct rte_flow_action *actions,\n+\t\tconst struct rte_flow_action *masks, const void *tmplate),\n+\tuint8_t ingress = template_attr->ingress;\n+\tuint8_t egress = template_attr->egress;\n+\tuint8_t transfer = template_attr->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_u8(ingress);\n+\trte_trace_point_emit_u8(egress);\n+\trte_trace_point_emit_u8(transfer);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(masks);\n+\trte_trace_point_emit_ptr(tmplate);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_actions_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_actions_template *actions_template,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(actions_template);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_template_table_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_template_table_attr *table_attr,\n+\t\tstruct rte_flow_pattern_template **pattern_templates,\n+\t\tuint8_t nb_pattern_templates,\n+\t\tstruct rte_flow_actions_template **actions_templates,\n+\t\tuint8_t nb_actions_templates,\n+\t\tconst struct rte_flow_template_table *table),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(table_attr);\n+\trte_trace_point_emit_u32(table_attr->nb_flows);\n+\trte_trace_point_emit_ptr(pattern_templates);\n+\trte_trace_point_emit_u8(nb_pattern_templates);\n+\trte_trace_point_emit_ptr(actions_templates);\n+\trte_trace_point_emit_u8(nb_actions_templates);\n+\trte_trace_point_emit_ptr(table);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_template_table_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_template_table *template_table, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_table);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_async_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow *flow, const void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_push,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n /* Fast path trace points */\n \n /* Called in loop in examples/qos_sched and examples/distributor */\n@@ -1528,6 +1799,237 @@ RTE_TRACE_POINT_FP(\n \trte_trace_point_emit_int(ret);\n )\n \n+/* Called in loop in app/test-flow-perf */\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_flow_attr *attr,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tconst struct rte_flow_action *actions,\n+\t\tconst struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(attr->group);\n+\trte_trace_point_emit_u32(attr->priority);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+/* Called in loop in app/test-flow-perf */\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_flow *flow,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_flow *flow,\n+\t\tconst struct rte_flow_action *action, const void *data,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_int(action->type);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_isolate,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int set, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(set);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_aged_flows,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, void **contexts,\n+\t\tuint32_t nb_contexts, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(contexts);\n+\trte_trace_point_emit_u32(nb_contexts);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_q_aged_flows,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tvoid **contexts, uint32_t nb_contexts, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(contexts);\n+\trte_trace_point_emit_u32(nb_contexts);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_indir_action_conf *conf,\n+\t\tconst struct rte_flow_action *action,\n+\t\tconst struct rte_flow_action_handle *handle),\n+\tuint8_t ingress = conf->ingress;\n+\tuint8_t egress = conf->egress;\n+\tuint8_t transfer = conf->transfer;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_u8(ingress);\n+\trte_trace_point_emit_u8(egress);\n+\trte_trace_point_emit_u8(transfer);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_int(action->type);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_action_handle *handle, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_update,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_action_handle *handle,\n+\t\tconst void *update, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(update);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_action_handle_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst struct rte_flow_action_handle *handle,\n+\t\tconst void *data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_get_restore_info,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_mbuf *m,\n+\t\tconst struct rte_flow_restore_info *info, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(m);\n+\trte_trace_point_emit_ptr(info);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_pick_transfer_proxy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const uint16_t *proxy_port_id,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(proxy_port_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_template_table *template_table,\n+\t\tconst struct rte_flow_item *pattern,\n+\t\tuint8_t pattern_template_index,\n+\t\tconst struct rte_flow_action *actions,\n+\t\tuint8_t actions_template_index,\n+\t\tconst void *user_data, const struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(template_table);\n+\trte_trace_point_emit_ptr(pattern);\n+\trte_trace_point_emit_u8(pattern_template_index);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_u8(actions_template_index);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_pull,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_result *res, uint16_t n_res, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(res);\n+\trte_trace_point_emit_u16(n_res);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_create,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_indir_action_conf *indir_action_conf,\n+\t\tconst struct rte_flow_action *action,\n+\t\tconst void *user_data,\n+\t\tconst struct rte_flow_action_handle *handle),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(indir_action_conf);\n+\trte_trace_point_emit_ptr(action);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_action_handle *action_handle,\n+\t\tconst void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_update,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_action_handle *action_handle,\n+\t\tconst void *update, const void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(update);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_flow_trace_async_action_handle_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tconst struct rte_flow_op_attr *op_attr,\n+\t\tconst struct rte_flow_action_handle *action_handle,\n+\t\tconst void *data, const void *user_data, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+\trte_trace_point_emit_ptr(op_attr);\n+\trte_trace_point_emit_ptr(action_handle);\n+\trte_trace_point_emit_ptr(data);\n+\trte_trace_point_emit_ptr(user_data);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c\nindex 7a08104dc9..b8cbb285de 100644\n--- a/lib/ethdev/ethdev_trace_points.c\n+++ b/lib/ethdev/ethdev_trace_points.c\n@@ -474,3 +474,120 @@ RTE_TRACE_POINT_REGISTER(rte_eth_trace_cman_config_set,\n \n RTE_TRACE_POINT_REGISTER(rte_eth_trace_cman_config_get,\n \tlib.ethdev.cman_config_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_copy,\n+\tlib.ethdev.flow.copy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_create,\n+\tlib.ethdev.flow.create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_destroy,\n+\tlib.ethdev.flow.destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flush,\n+\tlib.ethdev.flow.flush)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_isolate,\n+\tlib.ethdev.flow.isolate)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_query,\n+\tlib.ethdev.flow.query)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_validate,\n+\tlib.ethdev.flow.validate)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_conv,\n+\tlib.ethdev.flow.conv)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_dynf_metadata_register,\n+\tlib.ethdev.dynf_metadata_register)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_aged_flows,\n+\tlib.ethdev.flow.get_aged_flows)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_q_aged_flows,\n+\tlib.ethdev.flow.get_q_aged_flows)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_decap_set,\n+\tlib.ethdev.flow.tunnel_decap_set)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_match,\n+\tlib.ethdev.flow.tunnel_match)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_get_restore_info,\n+\tlib.ethdev.flow.get_restore_info)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_action_decap_release,\n+\tlib.ethdev.flow.tunnel_action_decap_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_tunnel_item_release,\n+\tlib.ethdev.flow.tunnel_item_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_create,\n+\tlib.ethdev.flow.action_handle_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_destroy,\n+\tlib.ethdev.flow.action_handle_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_update,\n+\tlib.ethdev.flow.action_handle_update)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_action_handle_query,\n+\tlib.ethdev.flow.action_handle_query)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flex_item_create,\n+\tlib.ethdev.flow.flex_item_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_flex_item_release,\n+\tlib.ethdev.flow.flex_item_release)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pick_transfer_proxy,\n+\tlib.ethdev.flow.pick_transfer_proxy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_info_get,\n+\tlib.ethdev.flow.info_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_configure,\n+\tlib.ethdev.flow.configure)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pattern_template_create,\n+\tlib.ethdev.flow.pattern_template_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pattern_template_destroy,\n+\tlib.ethdev.flow.pattern_template_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_actions_template_create,\n+\tlib.ethdev.flow.actions_template_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_actions_template_destroy,\n+\tlib.ethdev.flow.actions_template_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_create,\n+\tlib.ethdev.flow.template_table_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_destroy,\n+\tlib.ethdev.flow.template_table_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create,\n+\tlib.ethdev.flow.async_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_destroy,\n+\tlib.ethdev.flow.async_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_push,\n+\tlib.ethdev.flow.push)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_pull,\n+\tlib.ethdev.flow.pull)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_create,\n+\tlib.ethdev.flow.async_action_handle_create)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_destroy,\n+\tlib.ethdev.flow.async_action_handle_destroy)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_update,\n+\tlib.ethdev.flow.async_action_handle_update)\n+\n+RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_action_handle_query,\n+\tlib.ethdev.flow.async.action.handle.query)\ndiff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c\nindex 4da581146e..e52dcb1760 100644\n--- a/lib/ethdev/rte_flow.c\n+++ b/lib/ethdev/rte_flow.c\n@@ -16,6 +16,8 @@\n #include \"rte_flow_driver.h\"\n #include \"rte_flow.h\"\n \n+#include \"ethdev_trace.h\"\n+\n /* Mbuf dynamic field name for metadata. */\n int32_t rte_flow_dynf_metadata_offs = -1;\n \n@@ -277,6 +279,9 @@ rte_flow_dynf_metadata_register(void)\n \t\tgoto error;\n \trte_flow_dynf_metadata_offs = offset;\n \trte_flow_dynf_metadata_mask = RTE_BIT64(flag);\n+\n+\trte_flow_trace_dynf_metadata_register(offset, RTE_BIT64(flag));\n+\n \treturn 0;\n \n error:\n@@ -363,7 +368,11 @@ rte_flow_validate(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->validate(dev, attr, pattern, actions, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_validate(port_id, attr, pattern, actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -390,6 +399,9 @@ rte_flow_create(uint16_t port_id,\n \t\tfts_exit(dev);\n \t\tif (flow == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_create(port_id, attr, pattern, actions, flow);\n+\n \t\treturn flow;\n \t}\n \trte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -413,7 +425,11 @@ rte_flow_destroy(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->destroy(dev, flow, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_destroy(port_id, flow, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -435,7 +451,11 @@ rte_flow_flush(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->flush(dev, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_flush(port_id, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -460,7 +480,11 @@ rte_flow_query(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->query(dev, flow, action, data, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_query(port_id, flow, action, data, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -483,7 +507,11 @@ rte_flow_isolate(uint16_t port_id,\n \t\tfts_enter(dev);\n \t\tret = ops->isolate(dev, set, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_isolate(port_id, set, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOSYS,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1004,39 +1032,57 @@ rte_flow_conv(enum rte_flow_conv_op op,\n \t      const void *src,\n \t      struct rte_flow_error *error)\n {\n+\tint ret;\n+\n \tswitch (op) {\n \t\tconst struct rte_flow_attr *attr;\n \n \tcase RTE_FLOW_CONV_OP_NONE:\n-\t\treturn 0;\n+\t\tret = 0;\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ATTR:\n \t\tattr = src;\n \t\tif (size > sizeof(*attr))\n \t\t\tsize = sizeof(*attr);\n \t\trte_memcpy(dst, attr, size);\n-\t\treturn sizeof(*attr);\n+\t\tret = sizeof(*attr);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ITEM:\n-\t\treturn rte_flow_conv_pattern(dst, size, src, 1, error);\n+\t\tret = rte_flow_conv_pattern(dst, size, src, 1, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ACTION:\n-\t\treturn rte_flow_conv_actions(dst, size, src, 1, error);\n+\t\tret = rte_flow_conv_actions(dst, size, src, 1, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_PATTERN:\n-\t\treturn rte_flow_conv_pattern(dst, size, src, 0, error);\n+\t\tret = rte_flow_conv_pattern(dst, size, src, 0, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ACTIONS:\n-\t\treturn rte_flow_conv_actions(dst, size, src, 0, error);\n+\t\tret = rte_flow_conv_actions(dst, size, src, 0, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_RULE:\n-\t\treturn rte_flow_conv_rule(dst, size, src, error);\n+\t\tret = rte_flow_conv_rule(dst, size, src, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ITEM_NAME:\n-\t\treturn rte_flow_conv_name(0, 0, dst, size, src, error);\n+\t\tret = rte_flow_conv_name(0, 0, dst, size, src, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ACTION_NAME:\n-\t\treturn rte_flow_conv_name(1, 0, dst, size, src, error);\n+\t\tret = rte_flow_conv_name(1, 0, dst, size, src, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ITEM_NAME_PTR:\n-\t\treturn rte_flow_conv_name(0, 1, dst, size, src, error);\n+\t\tret = rte_flow_conv_name(0, 1, dst, size, src, error);\n+\t\tbreak;\n \tcase RTE_FLOW_CONV_OP_ACTION_NAME_PTR:\n-\t\treturn rte_flow_conv_name(1, 1, dst, size, src, error);\n-\t}\n-\treturn rte_flow_error_set\n+\t\tret = rte_flow_conv_name(1, 1, dst, size, src, error);\n+\t\tbreak;\n+\tdefault:\n+\t\tret = rte_flow_error_set\n \t\t(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,\n \t\t \"unknown object conversion operation\");\n+\t}\n+\n+\trte_flow_trace_conv(op, dst, size, src, ret);\n+\n+\treturn ret;\n }\n \n /** Store a full rte_flow description. */\n@@ -1088,6 +1134,9 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,\n \t\t\t.actions = dst_size ? dst->actions : NULL,\n \t\t   }),\n \t\t   len > sizeof(*desc) ? sizeof(*desc) : len);\n+\n+\trte_flow_trace_copy(desc, len, attr, items, actions, ret);\n+\n \treturn ret;\n }\n \n@@ -1126,7 +1175,11 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,\n \t\tfts_enter(dev);\n \t\tret = ops->get_aged_flows(dev, contexts, nb_contexts, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_get_aged_flows(port_id, contexts, nb_contexts, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1148,7 +1201,12 @@ rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,\n \t\tret = ops->get_q_aged_flows(dev, queue_id, contexts,\n \t\t\t\t\t    nb_contexts, error);\n \t\tfts_exit(dev);\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_get_q_aged_flows(port_id, queue_id, contexts,\n+\t\t\t\t\t\tnb_contexts, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1176,6 +1234,9 @@ rte_flow_action_handle_create(uint16_t port_id,\n \t\t\t\t\t   conf, action, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_action_handle_create(port_id, conf, action, handle);\n+\n \treturn handle;\n }\n \n@@ -1195,7 +1256,11 @@ rte_flow_action_handle_destroy(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_destroy(&rte_eth_devices[port_id],\n \t\t\t\t\t handle, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_destroy(port_id, handle, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1215,7 +1280,11 @@ rte_flow_action_handle_update(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_update(&rte_eth_devices[port_id], handle,\n \t\t\t\t\tupdate, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_update(port_id, handle, update, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1235,7 +1304,11 @@ rte_flow_action_handle_query(uint16_t port_id,\n \t\t\t\t\t  NULL, rte_strerror(ENOSYS));\n \tret = ops->action_handle_query(&rte_eth_devices[port_id], handle,\n \t\t\t\t       data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_action_handle_query(port_id, handle, data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1247,14 +1320,20 @@ rte_flow_tunnel_decap_set(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_decap_set)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_decap_set(dev, tunnel, actions,\n-\t\t\t\t\t\t      num_of_actions, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_decap_set(dev, tunnel, actions,\n+\t\t\t\t\t\t     num_of_actions, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_decap_set(port_id, tunnel, actions,\n+\t\t\t\t\t\tnum_of_actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1270,14 +1349,20 @@ rte_flow_tunnel_match(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_match)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_match(dev, tunnel, items,\n-\t\t\t\t\t\t  num_of_items, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_match(dev, tunnel, items,\n+\t\t\t\t\t\t num_of_items, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_match(port_id, tunnel, items, num_of_items,\n+\t\t\t\t\t    ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1292,14 +1377,19 @@ rte_flow_get_restore_info(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->get_restore_info)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->get_restore_info(dev, m, restore_info,\n-\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->get_restore_info(dev, m, restore_info,\n+\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_get_restore_info(port_id, m, restore_info, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1314,15 +1404,21 @@ rte_flow_tunnel_action_decap_release(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_action_decap_release)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_action_decap_release(dev, actions,\n-\t\t\t\t\t\t\t\t num_of_actions,\n-\t\t\t\t\t\t\t\t error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_action_decap_release(dev, actions,\n+\t\t\t\t\t\t\t\tnum_of_actions,\n+\t\t\t\t\t\t\t\terror),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_action_decap_release(port_id, actions,\n+\t\t\t\t\t\t\t   num_of_actions, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1337,14 +1433,19 @@ rte_flow_tunnel_item_release(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_item_release)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->tunnel_item_release(dev, items,\n-\t\t\t\t\t\t\t num_of_items, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->tunnel_item_release(dev, items,\n+\t\t\t\t\t\t\tnum_of_items, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_tunnel_item_release(port_id, items, num_of_items, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1357,6 +1458,7 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,\n {\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tif (unlikely(ops == NULL))\n \t\treturn -rte_errno;\n@@ -1368,9 +1470,13 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,\n \n \tdev = &rte_eth_devices[port_id];\n \n-\treturn flow_err(port_id,\n-\t\t\tops->pick_transfer_proxy(dev, proxy_port_id, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->pick_transfer_proxy(dev, proxy_port_id, error),\n+\t\t       error);\n+\n+\trte_flow_trace_pick_transfer_proxy(port_id, proxy_port_id, ret);\n+\n+\treturn ret;\n }\n \n struct rte_flow_item_flex_handle *\n@@ -1393,6 +1499,9 @@ rte_flow_flex_item_create(uint16_t port_id,\n \thandle = ops->flex_item_create(dev, conf, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_flex_item_create(port_id, conf, handle);\n+\n \treturn handle;\n }\n \n@@ -1410,7 +1519,11 @@ rte_flow_flex_item_release(uint16_t port_id,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n \t\t\t\t\t  NULL, rte_strerror(ENOTSUP));\n \tret = ops->flex_item_release(dev, handle, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_flex_item_release(port_id, handle, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1421,6 +1534,7 @@ rte_flow_info_get(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n@@ -1435,9 +1549,13 @@ rte_flow_info_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \tif (likely(!!ops->info_get)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->info_get(dev, port_info, queue_info, error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->info_get(dev, port_info, queue_info, error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_info_get(port_id, port_info, queue_info, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1481,7 +1599,11 @@ rte_flow_configure(uint16_t port_id,\n \t\tret = ops->configure(dev, port_attr, nb_queue, queue_attr, error);\n \t\tif (ret == 0)\n \t\t\tdev->data->flow_configured = 1;\n-\t\treturn flow_err(port_id, ret, error);\n+\t\tret = flow_err(port_id, ret, error);\n+\n+\t\trte_flow_trace_configure(port_id, port_attr, nb_queue, queue_attr, ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1532,6 +1654,10 @@ rte_flow_pattern_template_create(uint16_t port_id,\n \t\t\t\t\t\t\tpattern, error);\n \t\tif (template == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_pattern_template_create(port_id, template_attr,\n+\t\t\t\t\t\t       pattern, template);\n+\n \t\treturn template;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1547,17 +1673,23 @@ rte_flow_pattern_template_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(pattern_template == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->pattern_template_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->pattern_template_destroy(dev,\n-\t\t\t\t\t\t\t      pattern_template,\n-\t\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->pattern_template_destroy(dev,\n+\t\t\t\t\t\t\t     pattern_template,\n+\t\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_pattern_template_destroy(port_id, pattern_template,\n+\t\t\t\t\t\t\tret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1618,6 +1750,10 @@ rte_flow_actions_template_create(uint16_t port_id,\n \t\t\t\t\t\t\tactions, masks, error);\n \t\tif (template == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_actions_template_create(port_id, template_attr, actions,\n+\t\t\t\t\t\t       masks, template);\n+\n \t\treturn template;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1633,17 +1769,23 @@ rte_flow_actions_template_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(actions_template == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->actions_template_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->actions_template_destroy(dev,\n-\t\t\t\t\t\t\t      actions_template,\n-\t\t\t\t\t\t\t      error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->actions_template_destroy(dev,\n+\t\t\t\t\t\t\t     actions_template,\n+\t\t\t\t\t\t\t     error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_actions_template_destroy(port_id, actions_template,\n+\t\t\t\t\t\t\tret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1708,6 +1850,13 @@ rte_flow_template_table_create(uint16_t port_id,\n \t\t\t\t\terror);\n \t\tif (table == NULL)\n \t\t\tflow_err(port_id, -rte_errno, error);\n+\n+\t\trte_flow_trace_template_table_create(port_id, table_attr,\n+\t\t\t\t\t\t     pattern_templates,\n+\t\t\t\t\t\t     nb_pattern_templates,\n+\t\t\t\t\t\t     actions_templates,\n+\t\t\t\t\t\t     nb_actions_templates, table);\n+\n \t\treturn table;\n \t}\n \trte_flow_error_set(error, ENOTSUP,\n@@ -1723,17 +1872,23 @@ rte_flow_template_table_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(template_table == NULL))\n \t\treturn 0;\n \tif (likely(!!ops->template_table_destroy)) {\n-\t\treturn flow_err(port_id,\n-\t\t\t\tops->template_table_destroy(dev,\n-\t\t\t\t\t\t\t    template_table,\n-\t\t\t\t\t\t\t    error),\n-\t\t\t\terror);\n+\t\tret = flow_err(port_id,\n+\t\t\t       ops->template_table_destroy(dev,\n+\t\t\t\t\t\t\t   template_table,\n+\t\t\t\t\t\t\t   error),\n+\t\t\t       error);\n+\n+\t\trte_flow_trace_template_table_destroy(port_id, template_table,\n+\t\t\t\t\t\t      ret);\n+\n+\t\treturn ret;\n \t}\n \treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1763,6 +1918,11 @@ rte_flow_async_create(uint16_t port_id,\n \t\t\t\t user_data, error);\n \tif (flow == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_async_create(port_id, queue_id, op_attr, template_table,\n+\t\t\t\t    pattern, pattern_template_index, actions,\n+\t\t\t\t    actions_template_index, user_data, flow);\n+\n \treturn flow;\n }\n \n@@ -1776,12 +1936,18 @@ rte_flow_async_destroy(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n-\treturn flow_err(port_id,\n-\t\t\tops->async_destroy(dev, queue_id,\n-\t\t\t\t\t   op_attr, flow,\n-\t\t\t\t\t   user_data, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->async_destroy(dev, queue_id,\n+\t\t\t\t\t  op_attr, flow,\n+\t\t\t\t\t  user_data, error),\n+\t\t       error);\n+\n+\trte_flow_trace_async_destroy(port_id, queue_id, op_attr, flow,\n+\t\t\t\t     user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1791,10 +1957,15 @@ rte_flow_push(uint16_t port_id,\n {\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n+\tint ret;\n \n-\treturn flow_err(port_id,\n-\t\t\tops->push(dev, queue_id, error),\n-\t\t\terror);\n+\tret = flow_err(port_id,\n+\t\t       ops->push(dev, queue_id, error),\n+\t\t       error);\n+\n+\trte_flow_trace_push(port_id, queue_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1807,9 +1978,14 @@ rte_flow_pull(uint16_t port_id,\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n+\tint rc;\n \n \tret = ops->pull(dev, queue_id, res, n_res, error);\n-\treturn ret ? ret : flow_err(port_id, ret, error);\n+\trc = ret ? ret : flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_pull(port_id, queue_id, res, n_res, rc);\n+\n+\treturn rc;\n }\n \n struct rte_flow_action_handle *\n@@ -1829,6 +2005,11 @@ rte_flow_async_action_handle_create(uint16_t port_id,\n \t\t\t\t\t     indir_action_conf, action, user_data, error);\n \tif (handle == NULL)\n \t\tflow_err(port_id, -rte_errno, error);\n+\n+\trte_flow_trace_async_action_handle_create(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t  indir_action_conf, action,\n+\t\t\t\t\t\t  user_data, handle);\n+\n \treturn handle;\n }\n \n@@ -1846,7 +2027,12 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,\n \n \tret = ops->async_action_handle_destroy(dev, queue_id, op_attr,\n \t\t\t\t\t   action_handle, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_destroy(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t   action_handle, user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1864,7 +2050,13 @@ rte_flow_async_action_handle_update(uint16_t port_id,\n \n \tret = ops->async_action_handle_update(dev, queue_id, op_attr,\n \t\t\t\t\t  action_handle, update, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_update(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t  action_handle, update,\n+\t\t\t\t\t\t  user_data, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1882,5 +2074,11 @@ rte_flow_async_action_handle_query(uint16_t port_id,\n \n \tret = ops->async_action_handle_query(dev, queue_id, op_attr,\n \t\t\t\t\t  action_handle, data, user_data, error);\n-\treturn flow_err(port_id, ret, error);\n+\tret = flow_err(port_id, ret, error);\n+\n+\trte_flow_trace_async_action_handle_query(port_id, queue_id, op_attr,\n+\t\t\t\t\t\t action_handle, data, user_data,\n+\t\t\t\t\t\t ret);\n+\n+\treturn ret;\n }\n",
    "prefixes": [
        "v9",
        "4/6"
    ]
}