get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 114618,
    "url": "https://patches.dpdk.org/api/patches/114618/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20220804134430.6192-3-adwivedi@marvell.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": "<20220804134430.6192-3-adwivedi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220804134430.6192-3-adwivedi@marvell.com",
    "date": "2022-08-04T13:44:26",
    "name": "[2/6] ethdev: add trace points for flow",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "40732666d8745348539ce1baac2b8d5790be53a7",
    "submitter": {
        "id": 1561,
        "url": "https://patches.dpdk.org/api/people/1561/?format=api",
        "name": "Ankur Dwivedi",
        "email": "adwivedi@marvell.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/20220804134430.6192-3-adwivedi@marvell.com/mbox/",
    "series": [
        {
            "id": 24204,
            "url": "https://patches.dpdk.org/api/series/24204/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=24204",
            "date": "2022-08-04T13:44:24",
            "name": "add trace points in ethdev library",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/24204/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/114618/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/114618/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 6839DA00C4;\n\tThu,  4 Aug 2022 15:48:43 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 589BB42BD9;\n\tThu,  4 Aug 2022 15:48:43 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 31B5D4282B\n for <dev@dpdk.org>; Thu,  4 Aug 2022 15:48:41 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id\n 274C1Ovn021008;\n Thu, 4 Aug 2022 06:46:22 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3hqgf1xr3g-3\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Thu, 04 Aug 2022 06:46:22 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Thu, 4 Aug 2022 06:46:19 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Thu, 4 Aug 2022 06:46:19 -0700",
            "from hyd1349.t110.caveonetworks.com.com (unknown [10.29.45.13])\n by maili.marvell.com (Postfix) with ESMTP id 9BD373F7057;\n Thu,  4 Aug 2022 06:45:56 -0700 (PDT)"
        ],
        "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=dWVoIBRpp1ZDkNUhB/lEyifdGZQH4NYYhmbevyiCeZ4=;\n b=BQ+bVaAYVvnT1N65bFM1iJvj3qsR+4itu10Hwe/XRZFSPQMi9AIVYx9CmAvQy3xi8bj5\n XfoM1Yc3l94UB/rOLoZokiFpF9g6YV1azc0zopf+gb6Y/efA66cUW2ulccHoOMTwsXv5\n SsLLXC1MLCK9kEdSWRfuvoowmM9CfsZ42ahqLVSnI6Cx63AtfBghswRYk7f4+rfAVB+o\n V43tdhU8rFjSAqCv/Y/Xssso7WDnIPblF8o/0+L5CJwzFpPxmehcPjrVDnqMJYqsiL1l\n akalBM18UHzCQQVAJu/PQYGzzhIsevep6KgfD6J6eIBX96L5Mxa3EoDTJjILBts9B6uS lA==",
        "From": "Ankur Dwivedi <adwivedi@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas@monjalon.net>, <mdr@ashroe.eu>, <orika@nvidia.com>,\n <ferruh.yigit@xilinx.com>, <chas3@att.com>, <humin29@huawei.com>,\n <linville@tuxdriver.com>, <ciara.loftus@intel.com>,\n <qi.z.zhang@intel.com>, <mw@semihalf.com>, <mk@semihalf.com>,\n <shaibran@amazon.com>, <evgenys@amazon.com>, <igorch@amazon.com>,\n <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 <sthemmin@microsoft.com>, <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 Ankur Dwivedi <adwivedi@marvell.com>",
        "Subject": "[PATCH 2/6] ethdev: add trace points for flow",
        "Date": "Thu, 4 Aug 2022 19:14:26 +0530",
        "Message-ID": "<20220804134430.6192-3-adwivedi@marvell.com>",
        "X-Mailer": "git-send-email 2.28.0",
        "In-Reply-To": "<20220804134430.6192-1-adwivedi@marvell.com>",
        "References": "<20220804134430.6192-1-adwivedi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "5r29cVT8AOvuI15x6wOzusXMuBdxafrN",
        "X-Proofpoint-ORIG-GUID": "5r29cVT8AOvuI15x6wOzusXMuBdxafrN",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1\n definitions=2022-08-04_03,2022-08-04_02,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_points.c | 117 +++++++++\n lib/ethdev/rte_ethdev_trace.h    | 405 +++++++++++++++++++++++++++++++\n lib/ethdev/rte_flow.c            |  54 +++++\n lib/ethdev/version.map           |  39 +++\n 4 files changed, 615 insertions(+)",
    "diff": "diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c\nindex 2e80401771..a8b974564c 100644\n--- a/lib/ethdev/ethdev_trace_points.c\n+++ b/lib/ethdev/ethdev_trace_points.c\n@@ -467,3 +467,120 @@ RTE_TRACE_POINT_REGISTER(rte_eth_trace_rx_avail_thresh_query,\n \n RTE_TRACE_POINT_REGISTER(rte_eth_trace_rx_avail_thresh_set,\n \tlib.ethdev.rx_avail_thresh_set)\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_error_set,\n+\tlib.ethdev.flow.error_set)\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_dev_dump,\n+\tlib.ethdev.flow.dev_dump)\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_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)\ndiff --git a/lib/ethdev/rte_ethdev_trace.h b/lib/ethdev/rte_ethdev_trace.h\nindex de728d355d..94d4b955b6 100644\n--- a/lib/ethdev/rte_ethdev_trace.h\n+++ b/lib/ethdev/rte_ethdev_trace.h\n@@ -1270,6 +1270,411 @@ RTE_TRACE_POINT(\n \trte_trace_point_emit_u8(avail_thresh);\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),\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_ptr(actions);\n+)\n+\n+RTE_TRACE_POINT(\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+\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_error_set,\n+\tRTE_TRACE_POINT_ARGS(struct rte_flow_error *err_p,\n+\t\tint code, enum rte_flow_error_type type,\n+\t\tconst void *cause, const char *message),\n+\trte_trace_point_emit_ptr(err_p);\n+\trte_trace_point_emit_int(code);\n+\trte_trace_point_emit_int(type);\n+\trte_trace_point_emit_ptr(cause);\n+\trte_trace_point_emit_string(message);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_flush,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id),\n+\trte_trace_point_emit_u16(port_id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_isolate,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int set),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(set);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_query,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_flow *flow,\n+\t\tconst struct rte_flow_action *action, void *data),\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_ptr(data);\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),\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_conv,\n+\tRTE_TRACE_POINT_ARGS(enum rte_flow_conv_op op, void *dst,\n+\t\tsize_t size, const void *src),\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+)\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_dev_dump,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_flow *flow),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(flow);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_get_aged_flows,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, void **contexts,\n+\t\tuint32_t nb_contexts),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(contexts);\n+\trte_trace_point_emit_u32(nb_contexts);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_decap_set,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_action **actions,\n+\t\tuint32_t *num_of_actions),\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_match,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_tunnel *tunnel,\n+\t\tstruct rte_flow_item **items,\n+\t\tuint32_t *num_of_items),\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_get_restore_info,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_mbuf *m,\n+\t\tstruct rte_flow_restore_info *info),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(m);\n+\trte_trace_point_emit_ptr(info);\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\tstruct rte_flow_action *actions,\n+\t\tuint32_t num_of_actions),\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_tunnel_item_release,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_item *items,\n+\t\tuint32_t num_of_items),\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+)\n+\n+RTE_TRACE_POINT(\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+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_ptr(action);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_action_handle_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_action_handle *handle),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_action_handle_update,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_action_handle *handle,\n+\t\tconst void *update),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(update);\n+)\n+\n+RTE_TRACE_POINT(\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\tvoid *data),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+\trte_trace_point_emit_ptr(data);\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+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(conf);\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),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(handle);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pick_transfer_proxy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t *proxy_port_id),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(proxy_port_id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_info_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_port_info *port_info,\n+\t\tstruct rte_flow_queue_info *queue_info),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_info);\n+\trte_trace_point_emit_ptr(queue_info);\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),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(port_attr);\n+\trte_trace_point_emit_u16(nb_queue);\n+\trte_trace_point_emit_ptr(queue_attr);\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),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_ptr(pattern);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pattern_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_pattern_template *pattern_template),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(pattern_template);\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),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_attr);\n+\trte_trace_point_emit_ptr(actions);\n+\trte_trace_point_emit_ptr(masks);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_actions_template_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_actions_template *actions_template),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(actions_template);\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+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(table_attr);\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_template_table_destroy,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_flow_template_table *template_table),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(template_table);\n+)\n+\n+RTE_TRACE_POINT(\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\tstruct 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\tvoid *user_data),\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+)\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\tstruct rte_flow *flow, void *user_data),\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+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_push,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(queue_id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_flow_trace_pull,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id,\n+\t\tstruct rte_flow_op_result *res, uint16_t n_res),\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+)\n+\n+RTE_TRACE_POINT(\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\tvoid *user_data),\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+)\n+\n+RTE_TRACE_POINT(\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\tstruct rte_flow_action_handle *action_handle,\n+\t\tvoid *user_data),\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+)\n+\n+RTE_TRACE_POINT(\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\tstruct rte_flow_action_handle *action_handle,\n+\t\tconst void *update, void *user_data),\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+)\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c\nindex 501be9d602..e349d112f9 100644\n--- a/lib/ethdev/rte_flow.c\n+++ b/lib/ethdev/rte_flow.c\n@@ -13,6 +13,7 @@\n #include <rte_string_fns.h>\n #include <rte_mbuf_dyn.h>\n #include \"rte_ethdev.h\"\n+#include \"rte_ethdev_trace.h\"\n #include \"rte_flow_driver.h\"\n #include \"rte_flow.h\"\n \n@@ -284,6 +285,7 @@ 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+\trte_flow_trace_dynf_metadata_register(offset, RTE_BIT64(flag));\n \treturn 0;\n \n error:\n@@ -357,6 +359,7 @@ rte_flow_validate(uint16_t port_id,\n \tstruct rte_eth_dev *dev = &rte_eth_devices[port_id];\n \tint ret;\n \n+\trte_flow_trace_validate(port_id, attr, pattern, actions);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->validate)) {\n@@ -382,6 +385,7 @@ rte_flow_create(uint16_t port_id,\n \tstruct rte_flow *flow;\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \n+\trte_flow_trace_create(port_id, attr, pattern, actions);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (likely(!!ops->create)) {\n@@ -407,6 +411,7 @@ rte_flow_destroy(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_destroy(port_id, flow);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->destroy)) {\n@@ -429,6 +434,7 @@ rte_flow_flush(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_flush(port_id);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->flush)) {\n@@ -454,6 +460,7 @@ rte_flow_query(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_query(port_id, flow, action, data);\n \tif (!ops)\n \t\treturn -rte_errno;\n \tif (likely(!!ops->query)) {\n@@ -477,6 +484,7 @@ rte_flow_isolate(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_isolate(port_id, set);\n \tif (!ops)\n \t\treturn -rte_errno;\n \tif (likely(!!ops->isolate)) {\n@@ -506,6 +514,7 @@ rte_flow_error_set(struct rte_flow_error *error,\n \t\t};\n \t}\n \trte_errno = code;\n+\trte_flow_trace_error_set(error, code, type, cause, message);\n \treturn -code;\n }\n \n@@ -1004,6 +1013,7 @@ rte_flow_conv(enum rte_flow_conv_op op,\n \t      const void *src,\n \t      struct rte_flow_error *error)\n {\n+\trte_flow_trace_conv(op, dst, size, src);\n \tswitch (op) {\n \t\tconst struct rte_flow_attr *attr;\n \n@@ -1069,6 +1079,7 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,\n \n \tRTE_BUILD_BUG_ON(sizeof(struct rte_flow_desc) <\n \t\t\t sizeof(struct rte_flow_conv_rule));\n+\trte_flow_trace_copy(desc, len, attr, items, actions);\n \tif (dst_size &&\n \t    (&dst->pattern != &desc->items ||\n \t     &dst->actions != &desc->actions ||\n@@ -1099,6 +1110,7 @@ rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_dev_dump(port_id, flow);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->dev_dump)) {\n@@ -1120,6 +1132,7 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_get_aged_flows(port_id, contexts, nb_contexts);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->get_aged_flows)) {\n@@ -1142,6 +1155,7 @@ rte_flow_action_handle_create(uint16_t port_id,\n \tstruct rte_flow_action_handle *handle;\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \n+\trte_flow_trace_action_handle_create(port_id, conf, action);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (unlikely(!ops->action_handle_create)) {\n@@ -1165,6 +1179,7 @@ rte_flow_action_handle_destroy(uint16_t port_id,\n \tint ret;\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \n+\trte_flow_trace_action_handle_destroy(port_id, handle);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(!ops->action_handle_destroy))\n@@ -1185,6 +1200,7 @@ rte_flow_action_handle_update(uint16_t port_id,\n \tint ret;\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \n+\trte_flow_trace_action_handle_update(port_id, handle, update);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(!ops->action_handle_update))\n@@ -1205,6 +1221,7 @@ rte_flow_action_handle_query(uint16_t port_id,\n \tint ret;\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \n+\trte_flow_trace_action_handle_query(port_id, handle, data);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(!ops->action_handle_query))\n@@ -1226,6 +1243,7 @@ rte_flow_tunnel_decap_set(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 \n+\trte_flow_trace_tunnel_decap_set(port_id, tunnel, actions, num_of_actions);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_decap_set)) {\n@@ -1249,6 +1267,7 @@ rte_flow_tunnel_match(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 \n+\trte_flow_trace_tunnel_match(port_id, tunnel, items, num_of_items);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_match)) {\n@@ -1271,6 +1290,7 @@ rte_flow_get_restore_info(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 \n+\trte_flow_trace_get_restore_info(port_id, m, restore_info);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->get_restore_info)) {\n@@ -1293,6 +1313,7 @@ rte_flow_tunnel_action_decap_release(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 \n+\trte_flow_trace_tunnel_action_decap_release(port_id, actions, num_of_actions);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_action_decap_release)) {\n@@ -1316,6 +1337,7 @@ rte_flow_tunnel_item_release(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 \n+\trte_flow_trace_tunnel_item_release(port_id, items, num_of_items);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (likely(!!ops->tunnel_item_release)) {\n@@ -1336,6 +1358,7 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_eth_dev *dev;\n \n+\trte_flow_trace_pick_transfer_proxy(port_id, proxy_port_id);\n \tif (unlikely(ops == NULL))\n \t\treturn -rte_errno;\n \n@@ -1360,6 +1383,7 @@ rte_flow_flex_item_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow_item_flex_handle *handle;\n \n+\trte_flow_trace_flex_item_create(port_id, conf);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (unlikely(!ops->flex_item_create)) {\n@@ -1383,6 +1407,7 @@ rte_flow_flex_item_release(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 \n+\trte_flow_trace_flex_item_release(port_id, handle);\n \tif (unlikely(!ops || !ops->flex_item_release))\n \t\treturn rte_flow_error_set(error, ENOTSUP,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_UNSPECIFIED,\n@@ -1400,6 +1425,7 @@ rte_flow_info_get(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 \n+\trte_flow_trace_info_get(port_id, port_info, queue_info);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (dev->data->dev_configured == 0) {\n@@ -1433,6 +1459,7 @@ rte_flow_configure(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_configure(port_id, port_attr, nb_queue, queue_attr);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (dev->data->dev_configured == 0) {\n@@ -1476,6 +1503,8 @@ rte_flow_pattern_template_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow_pattern_template *template;\n \n+\trte_flow_trace_pattern_template_create(port_id, template_attr,\n+\t\t\t\t\t       pattern);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (dev->data->flow_configured == 0) {\n@@ -1526,6 +1555,7 @@ rte_flow_pattern_template_destroy(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 \n+\trte_flow_trace_pattern_template_destroy(port_id, pattern_template);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(pattern_template == NULL))\n@@ -1553,6 +1583,8 @@ rte_flow_actions_template_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow_actions_template *template;\n \n+\trte_flow_trace_actions_template_create(port_id, template_attr, actions,\n+\t\t\t\t\t       masks);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (dev->data->flow_configured == 0) {\n@@ -1612,6 +1644,7 @@ rte_flow_actions_template_destroy(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 \n+\trte_flow_trace_actions_template_destroy(port_id, actions_template);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(actions_template == NULL))\n@@ -1641,6 +1674,11 @@ rte_flow_template_table_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow_template_table *table;\n \n+\trte_flow_trace_template_table_create(port_id, table_attr,\n+\t\t\t\t\t     pattern_templates,\n+\t\t\t\t\t     nb_pattern_templates,\n+\t\t\t\t\t     actions_templates,\n+\t\t\t\t\t     nb_actions_templates);\n \tif (unlikely(!ops))\n \t\treturn NULL;\n \tif (dev->data->flow_configured == 0) {\n@@ -1702,6 +1740,7 @@ rte_flow_template_table_destroy(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 \n+\trte_flow_trace_template_table_destroy(port_id, template_table);\n \tif (unlikely(!ops))\n \t\treturn -rte_errno;\n \tif (unlikely(template_table == NULL))\n@@ -1734,6 +1773,9 @@ rte_flow_async_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow *flow;\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);\n \tflow = ops->async_create(dev, queue_id,\n \t\t\t\t op_attr, template_table,\n \t\t\t\t pattern, pattern_template_index,\n@@ -1755,6 +1797,8 @@ rte_flow_async_destroy(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 \n+\trte_flow_trace_async_destroy(port_id, queue_id, op_attr, flow,\n+\t\t\t\t     user_data);\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@@ -1770,6 +1814,7 @@ rte_flow_push(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 \n+\trte_flow_trace_push(port_id, queue_id);\n \treturn flow_err(port_id,\n \t\t\tops->push(dev, queue_id, error),\n \t\t\terror);\n@@ -1786,6 +1831,7 @@ rte_flow_pull(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\n \n+\trte_flow_trace_pull(port_id, queue_id, res, n_res);\n \tret = ops->pull(dev, queue_id, res, n_res, error);\n \treturn ret ? ret : flow_err(port_id, ret, error);\n }\n@@ -1803,6 +1849,9 @@ rte_flow_async_action_handle_create(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tstruct rte_flow_action_handle *handle;\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);\n \thandle = ops->async_action_handle_create(dev, queue_id, op_attr,\n \t\t\t\t\t     indir_action_conf, action, user_data, error);\n \tif (handle == NULL)\n@@ -1822,6 +1871,8 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\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);\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@@ -1840,6 +1891,9 @@ rte_flow_async_action_handle_update(uint16_t port_id,\n \tconst struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);\n \tint ret;\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);\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);\ndiff --git a/lib/ethdev/version.map b/lib/ethdev/version.map\nindex 79bf947042..848ec442f1 100644\n--- a/lib/ethdev/version.map\n+++ b/lib/ethdev/version.map\n@@ -432,6 +432,45 @@ EXPERIMENTAL {\n \t__rte_eth_trace_ip_reassembly_conf_set;\n \t__rte_eth_trace_rx_avail_thresh_query;\n \t__rte_eth_trace_rx_avail_thresh_set;\n+\t__rte_flow_trace_action_handle_create;\n+\t__rte_flow_trace_action_handle_destroy;\n+\t__rte_flow_trace_action_handle_query;\n+\t__rte_flow_trace_action_handle_update;\n+\t__rte_flow_trace_actions_template_create;\n+\t__rte_flow_trace_actions_template_destroy;\n+\t__rte_flow_trace_async_action_handle_create;\n+\t__rte_flow_trace_async_action_handle_destroy;\n+\t__rte_flow_trace_async_action_handle_update;\n+\t__rte_flow_trace_async_create;\n+\t__rte_flow_trace_async_destroy;\n+\t__rte_flow_trace_conv;\n+\t__rte_flow_trace_configure;\n+\t__rte_flow_trace_copy;\n+\t__rte_flow_trace_create;\n+\t__rte_flow_trace_destroy;\n+\t__rte_flow_trace_dev_dump;\n+\t__rte_flow_trace_dynf_metadata_register;\n+\t__rte_flow_trace_error_set;\n+\t__rte_flow_trace_flex_item_create;\n+\t__rte_flow_trace_flex_item_release;\n+\t__rte_flow_trace_flush;\n+\t__rte_flow_trace_get_aged_flows;\n+\t__rte_flow_trace_get_restore_info;\n+\t__rte_flow_trace_info_get;\n+\t__rte_flow_trace_isolate;\n+\t__rte_flow_trace_pattern_template_create;\n+\t__rte_flow_trace_pattern_template_destroy;\n+\t__rte_flow_trace_pick_transfer_proxy;\n+\t__rte_flow_trace_push;\n+\t__rte_flow_trace_pull;\n+\t__rte_flow_trace_query;\n+\t__rte_flow_trace_template_table_create;\n+\t__rte_flow_trace_template_table_destroy;\n+\t__rte_flow_trace_tunnel_action_decap_release;\n+\t__rte_flow_trace_tunnel_decap_set;\n+\t__rte_flow_trace_tunnel_item_release;\n+\t__rte_flow_trace_tunnel_match;\n+\t__rte_flow_trace_validate;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "2/6"
    ]
}