get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 122410,
    "url": "http://patches.dpdk.org/api/patches/122410/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230120084059.2926575-3-adwivedi@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230120084059.2926575-3-adwivedi@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230120084059.2926575-3-adwivedi@marvell.com",
    "date": "2023-01-20T08:40:55",
    "name": "[v6,2/6] ethdev: add trace points for ethdev (part one)",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "cc28efcde4c020ae98399c8f1eb1177f081bf422",
    "submitter": {
        "id": 1561,
        "url": "http://patches.dpdk.org/api/people/1561/?format=api",
        "name": "Ankur Dwivedi",
        "email": "adwivedi@marvell.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230120084059.2926575-3-adwivedi@marvell.com/mbox/",
    "series": [
        {
            "id": 26622,
            "url": "http://patches.dpdk.org/api/series/26622/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=26622",
            "date": "2023-01-20T08:40:53",
            "name": "add trace points in ethdev library",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/26622/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/122410/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/122410/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 BC3964242B;\n\tFri, 20 Jan 2023 09:44:50 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A700B40150;\n\tFri, 20 Jan 2023 09:44:50 +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 C6FAD400D5\n for <dev@dpdk.org>; Fri, 20 Jan 2023 09:44:48 +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 30K7NY6q016078; Fri, 20 Jan 2023 00:42:24 -0800",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3n71cexjpn-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Fri, 20 Jan 2023 00:42:23 -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 Fri, 20 Jan 2023 00:42:21 -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; Fri, 20 Jan 2023 00:42:21 -0800",
            "from localhost.localdomain (unknown [10.28.36.185])\n by maili.marvell.com (Postfix) with ESMTP id E5A783F7078;\n Fri, 20 Jan 2023 00:41:59 -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=VaR7WbxIF9cfoN5Ylwcy7ifryLIYqVIU5fhRJYKNpHA=;\n b=Y/gpRTrHHgAKHIOEh964Mr3k2h+Y21iMo0KzItZr2ogDHMGO+Pk016YHjlmO5+xubPxn\n kMwrB2T5mpBdsXp4Chr9+zjbTqkXExiImfDUFjvuGsf0rpaW7SDnoF3VufbAEnOj0vHY\n DfvDArbVErTr4X1Lvn3Z4hf5Ri8XohuN9J47quCkQfZOtTq/uxo/DOHYbUpmFzpWa0nz\n rt7sBgxjVT1GMObxrVHonwwQ6QZkaQ8cegF3SMTEeJejnpsP2mMKUTT20Y2/2xlfcLv+\n PoBNa2nuecvl88cCT4Co+okNZ0PaMPFgC12OnlIYHH3z21LcaEkSb/tQ2Mrx7uOJTQvk 7Q==",
        "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 v6 2/6] ethdev: add trace points for ethdev (part one)",
        "Date": "Fri, 20 Jan 2023 14:10:55 +0530",
        "Message-ID": "<20230120084059.2926575-3-adwivedi@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230120084059.2926575-1-adwivedi@marvell.com>",
        "References": "<20230112112140.807233-1-adwivedi@marvell.com>\n <20230120084059.2926575-1-adwivedi@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "sFI-VtJDxCpQhfmjJmSznF0KS5yN4c49",
        "X-Proofpoint-ORIG-GUID": "sFI-VtJDxCpQhfmjJmSznF0KS5yN4c49",
        "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-01-20_06,2023-01-19_01,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 ethdev functions.\nMoved the rte_ethdev_trace_rx_burst and rte_ethdev_trace_tx_burst to\na new file rte_ethdev_trace_fp_burst.h. This is needed to resolve\ncyclic dependency between rte_ethdev.h and rte_ethdev_trace_fp.h.\n\nSigned-off-by: Ankur Dwivedi <adwivedi@marvell.com>\n---\n lib/ethdev/ethdev_private.c            |   5 +\n lib/ethdev/ethdev_trace_points.c       | 193 +++++++++++++++++\n lib/ethdev/meson.build                 |   1 +\n lib/ethdev/rte_ethdev.c                | 235 +++++++++++++++++---\n lib/ethdev/rte_ethdev.h                |   2 +-\n lib/ethdev/rte_ethdev_trace.h          | 285 +++++++++++++++++++++++++\n lib/ethdev/rte_ethdev_trace_fp.h       | 279 +++++++++++++++++++++++-\n lib/ethdev/rte_ethdev_trace_fp_burst.h |  44 ++++\n lib/ethdev/version.map                 |  66 ++++++\n 9 files changed, 1075 insertions(+), 35 deletions(-)\n create mode 100644 lib/ethdev/rte_ethdev_trace_fp_burst.h",
    "diff": "diff --git a/lib/ethdev/ethdev_private.c b/lib/ethdev/ethdev_private.c\nindex 48090c879a..fd16b25e55 100644\n--- a/lib/ethdev/ethdev_private.c\n+++ b/lib/ethdev/ethdev_private.c\n@@ -5,6 +5,7 @@\n #include <rte_debug.h>\n \n #include \"rte_ethdev.h\"\n+#include \"rte_ethdev_trace_fp.h\"\n #include \"ethdev_driver.h\"\n #include \"ethdev_private.h\"\n \n@@ -297,6 +298,8 @@ rte_eth_call_rx_callbacks(uint16_t port_id, uint16_t queue_id,\n \t\tcb = cb->next;\n \t}\n \n+\trte_eth_trace_call_rx_callbacks(port_id, queue_id, rx_pkts, nb_rx, nb_pkts);\n+\n \treturn nb_rx;\n }\n \n@@ -312,6 +315,8 @@ rte_eth_call_tx_callbacks(uint16_t port_id, uint16_t queue_id,\n \t\tcb = cb->next;\n \t}\n \n+\trte_eth_trace_call_tx_callbacks(port_id, queue_id, tx_pkts, nb_pkts);\n+\n \treturn nb_pkts;\n }\n \ndiff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c\nindex 2919409a15..4fea76e0ff 100644\n--- a/lib/ethdev/ethdev_trace_points.c\n+++ b/lib/ethdev/ethdev_trace_points.c\n@@ -5,6 +5,7 @@\n #include <rte_trace_point_register.h>\n \n #include <rte_ethdev_trace.h>\n+#include <rte_ethdev_trace_fp.h>\n \n RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_configure,\n \tlib.ethdev.configure)\n@@ -29,3 +30,195 @@ RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst,\n \n RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_burst,\n \tlib.ethdev.tx.burst)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks,\n+\tlib.ethdev.call_rx_callbacks)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_tx_callbacks,\n+\tlib.ethdev.call_tx_callbacks)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_iterator_init,\n+\tlib.ethdev.iterator_init)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_iterator_next,\n+\tlib.ethdev.iterator_next)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_iterator_cleanup,\n+\tlib.ethdev.iterator_cleanup)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_find_next,\n+\tlib.ethdev.find_next)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_find_next_of,\n+\tlib.ethdev.find_next_of)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_find_next_sibling,\n+\tlib.ethdev.find_next_sibling)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_is_valid_port,\n+\tlib.ethdev.is_valid_port)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_find_next_owned_by,\n+\tlib.ethdev.find_next_owned_by)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_owner_new,\n+\tlib.ethdev.owner_new)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_owner_set,\n+\tlib.ethdev.owner_set)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_owner_unset,\n+\tlib.ethdev.owner_unset)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_owner_delete,\n+\tlib.ethdev.owner_delete)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_owner_get,\n+\tlib.ethdev.owner_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_socket_id,\n+\tlib.ethdev.socket_id)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_get_sec_ctx,\n+\tlib.ethdev.get_sec_ctx)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_count_avail,\n+\tlib.ethdev.count_avail)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_count_total,\n+\tlib.ethdev.count_total)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_get_name_by_port,\n+\tlib.ethdev.get_name_by_port)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_get_port_by_name,\n+\tlib.ethdev.get_port_by_name)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_queue_start,\n+\tlib.ethdev.rx_queue_start)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_queue_stop,\n+\tlib.ethdev.rx_queue_stop)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_queue_start,\n+\tlib.ethdev.tx_queue_start)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_queue_stop,\n+\tlib.ethdev.tx_queue_stop)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_speed_bitflag,\n+\tlib.ethdev.speed_bitflag)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_offload_name,\n+\tlib.ethdev.rx_offload_name)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_offload_name,\n+\tlib.ethdev.tx_offload_name)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_capability_name,\n+\tlib.ethdev.capability_name)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_set_link_up,\n+\tlib.ethdev.set_link_up)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_set_link_down,\n+\tlib.ethdev.set_link_down)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_reset,\n+\tlib.ethdev.reset)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_is_removed,\n+\tlib.ethdev.is_removed)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_rx_hairpin_queue_setup,\n+\tlib.ethdev.rx.hairpin_queue_setup)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_hairpin_queue_setup,\n+\tlib.ethdev.tx.hairpin_queue_setup)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_hairpin_bind,\n+\tlib.ethdev.hairpin_bind)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_hairpin_unbind,\n+\tlib.ethdev.hairpin_unbind)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_hairpin_get_peer_ports,\n+\tlib.ethdev.hairpin_get_peer_ports)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_buffer_drop_callback,\n+\tlib.ethdev.tx_buffer_drop_callback)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_buffer_count_callback,\n+\tlib.ethdev.tx_buffer_count_callback)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_buffer_set_err_callback,\n+\tlib.ethdev.tx_buffer_set_err_callback)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_buffer_init,\n+\tlib.ethdev.tx_buffer_init)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_done_cleanup,\n+\tlib.ethdev.tx_done_cleanup)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_promiscuous_enable,\n+\tlib.ethdev.promiscuous_enable)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_promiscuous_disable,\n+\tlib.ethdev.promiscuous_disable)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_promiscuous_get,\n+\tlib.ethdev.promiscuous_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_allmulticast_enable,\n+\tlib.ethdev.allmulticast_enable)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_allmulticast_disable,\n+\tlib.ethdev.allmulticast_disable)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_allmulticast_get,\n+\tlib.ethdev.allmulticast_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_get,\n+\tlib.ethdev.link_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_get_nowait,\n+\tlib.ethdev.link_get_nowait)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_speed_to_str,\n+\tlib.ethdev.link_speed_to_str)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_to_str,\n+\tlib.ethdev.link_to_str)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_stats_get,\n+\tlib.ethdev.stats_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_stats_reset,\n+\tlib.ethdev.stats_reset)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_get_id_by_name,\n+\tlib.ethdev.xstats_get_id_by_name)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_get_names_by_id,\n+\tlib.ethdev.xstats_get_names_by_id)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_get_names,\n+\tlib.ethdev.xstats_get_names)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_get_by_id,\n+\tlib.ethdev.xstats_get_by_id)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_get,\n+\tlib.ethdev.xstats_get)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eth_trace_xstats_reset,\n+\tlib.ethdev.xstats_reset)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_set_tx_queue_stats_mapping,\n+\tlib.ethdev.set_tx_queue_stats_mapping)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_set_rx_queue_stats_mapping,\n+\tlib.ethdev.set_rx_queue_stats_mapping)\n+\n+RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_fw_version_get,\n+\tlib.ethdev.fw_version_get)\ndiff --git a/lib/ethdev/meson.build b/lib/ethdev/meson.build\nindex 39250b5da1..f5c0865023 100644\n--- a/lib/ethdev/meson.build\n+++ b/lib/ethdev/meson.build\n@@ -24,6 +24,7 @@ headers = files(\n         'rte_ethdev.h',\n         'rte_ethdev_trace.h',\n         'rte_ethdev_trace_fp.h',\n+        'rte_ethdev_trace_fp_burst.h',\n         'rte_dev_info.h',\n         'rte_flow.h',\n         'rte_flow_driver.h',\ndiff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c\nindex 5d5e18db1e..40897ad94d 100644\n--- a/lib/ethdev/rte_ethdev.c\n+++ b/lib/ethdev/rte_ethdev.c\n@@ -27,8 +27,9 @@\n #include <rte_ether.h>\n #include <rte_telemetry.h>\n \n-#include \"rte_ethdev_trace.h\"\n #include \"rte_ethdev.h\"\n+#include \"rte_ethdev_trace.h\"\n+#include \"rte_ethdev_trace_fp.h\"\n #include \"ethdev_driver.h\"\n #include \"ethdev_profile.h\"\n #include \"ethdev_private.h\"\n@@ -258,6 +259,7 @@ rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)\n \n end:\n \titer->cls = rte_class_find_by_name(\"eth\");\n+\trte_eth_trace_iterator_init(devargs_str);\n \trte_devargs_reset(&devargs);\n \treturn 0;\n \n@@ -274,6 +276,8 @@ rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)\n uint16_t\n rte_eth_iterator_next(struct rte_dev_iterator *iter)\n {\n+\tuint16_t id;\n+\n \tif (iter == NULL) {\n \t\tRTE_ETHDEV_LOG(ERR,\n \t\t\t\"Cannot get next device from NULL iterator\\n\");\n@@ -297,8 +301,11 @@ rte_eth_iterator_next(struct rte_dev_iterator *iter)\n \t\t/* A device is matching bus part, need to check ethdev part. */\n \t\titer->class_device = iter->cls->dev_iterate(\n \t\t\t\titer->class_device, iter->cls_str, iter);\n-\t\tif (iter->class_device != NULL)\n-\t\t\treturn eth_dev_to_id(iter->class_device); /* match */\n+\t\tif (iter->class_device != NULL) {\n+\t\t\tid = eth_dev_to_id(iter->class_device);\n+\t\t\trte_eth_trace_iterator_next(iter, id);\n+\t\t\treturn id; /* match */\n+\t\t}\n \t} while (iter->bus != NULL); /* need to try next rte_device */\n \n \t/* No more ethdev port to iterate. */\n@@ -316,6 +323,7 @@ rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)\n \n \tif (iter->bus_str == NULL)\n \t\treturn; /* nothing to free in pure class filter */\n+\trte_eth_trace_iterator_cleanup(iter);\n \tfree(RTE_CAST_FIELD(iter, bus_str, char *)); /* workaround const */\n \tfree(RTE_CAST_FIELD(iter, cls_str, char *)); /* workaround const */\n \tmemset(iter, 0, sizeof(*iter));\n@@ -324,12 +332,18 @@ rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)\n uint16_t\n rte_eth_find_next(uint16_t port_id)\n {\n+\trte_eth_trace_find_next(port_id);\n+\n \twhile (port_id < RTE_MAX_ETHPORTS &&\n \t\t\trte_eth_devices[port_id].state == RTE_ETH_DEV_UNUSED)\n \t\tport_id++;\n \n-\tif (port_id >= RTE_MAX_ETHPORTS)\n+\tif (port_id >= RTE_MAX_ETHPORTS) {\n+\t\trte_eth_trace_find_next(RTE_MAX_ETHPORTS);\n \t\treturn RTE_MAX_ETHPORTS;\n+\t}\n+\n+\trte_eth_trace_find_next(port_id);\n \n \treturn port_id;\n }\n@@ -347,10 +361,15 @@ uint16_t\n rte_eth_find_next_of(uint16_t port_id, const struct rte_device *parent)\n {\n \tport_id = rte_eth_find_next(port_id);\n+\n+\trte_eth_trace_find_next_of(port_id);\n+\n \twhile (port_id < RTE_MAX_ETHPORTS &&\n \t\t\trte_eth_devices[port_id].device != parent)\n \t\tport_id = rte_eth_find_next(port_id + 1);\n \n+\trte_eth_trace_find_next_of(port_id);\n+\n \treturn port_id;\n }\n \n@@ -358,6 +377,9 @@ uint16_t\n rte_eth_find_next_sibling(uint16_t port_id, uint16_t ref_port_id)\n {\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(ref_port_id, RTE_MAX_ETHPORTS);\n+\n+\trte_eth_trace_find_next_sibling(port_id, ref_port_id);\n+\n \treturn rte_eth_find_next_of(port_id,\n \t\t\trte_eth_devices[ref_port_id].device);\n }\n@@ -372,10 +394,13 @@ int\n rte_eth_dev_is_valid_port(uint16_t port_id)\n {\n \tif (port_id >= RTE_MAX_ETHPORTS ||\n-\t    (rte_eth_devices[port_id].state == RTE_ETH_DEV_UNUSED))\n+\t    (rte_eth_devices[port_id].state == RTE_ETH_DEV_UNUSED)) {\n+\t\trte_ethdev_trace_is_valid_port(port_id, 0);\n \t\treturn 0;\n-\telse\n+\t} else {\n+\t\trte_ethdev_trace_is_valid_port(port_id, 1);\n \t\treturn 1;\n+\t}\n }\n \n static int\n@@ -395,6 +420,7 @@ rte_eth_find_next_owned_by(uint16_t port_id, const uint64_t owner_id)\n \t\t\trte_eth_devices[port_id].data->owner.id != owner_id)\n \t\tport_id = rte_eth_find_next(port_id + 1);\n \n+\trte_eth_trace_find_next_owned_by(port_id, owner_id);\n \treturn port_id;\n }\n \n@@ -413,6 +439,7 @@ rte_eth_dev_owner_new(uint64_t *owner_id)\n \t*owner_id = eth_dev_shared_data->next_owner_id++;\n \n \trte_spinlock_unlock(&eth_dev_shared_data->ownership_lock);\n+\trte_ethdev_trace_owner_new(*owner_id);\n \treturn 0;\n }\n \n@@ -476,6 +503,7 @@ rte_eth_dev_owner_set(const uint16_t port_id,\n \tret = eth_dev_owner_set(port_id, RTE_ETH_DEV_NO_OWNER, owner);\n \n \trte_spinlock_unlock(&eth_dev_shared_data->ownership_lock);\n+\trte_ethdev_trace_owner_set(port_id, owner, ret);\n \treturn ret;\n }\n \n@@ -493,6 +521,7 @@ rte_eth_dev_owner_unset(const uint16_t port_id, const uint64_t owner_id)\n \tret = eth_dev_owner_set(port_id, owner_id, &new_owner);\n \n \trte_spinlock_unlock(&eth_dev_shared_data->ownership_lock);\n+\trte_ethdev_trace_owner_unset(port_id, owner_id, ret);\n \treturn ret;\n }\n \n@@ -526,6 +555,7 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)\n \n \trte_spinlock_unlock(&eth_dev_shared_data->ownership_lock);\n \n+\trte_ethdev_trace_owner_delete(owner_id, ret);\n \treturn ret;\n }\n \n@@ -555,6 +585,7 @@ rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)\n \trte_memcpy(owner, &ethdev->data->owner, sizeof(*owner));\n \trte_spinlock_unlock(&eth_dev_shared_data->ownership_lock);\n \n+\trte_ethdev_trace_owner_get(port_id, owner);\n \treturn 0;\n }\n \n@@ -570,14 +601,21 @@ rte_eth_dev_socket_id(uint16_t port_id)\n \t\tif (socket_id == SOCKET_ID_ANY)\n \t\t\trte_errno = 0;\n \t}\n+\trte_ethdev_trace_socket_id(port_id, socket_id);\n \treturn socket_id;\n }\n \n void *\n rte_eth_dev_get_sec_ctx(uint16_t port_id)\n {\n+\tvoid *ctx;\n+\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, NULL);\n-\treturn rte_eth_devices[port_id].security_ctx;\n+\tctx = rte_eth_devices[port_id].security_ctx;\n+\n+\trte_ethdev_trace_get_sec_ctx(port_id, ctx);\n+\n+\treturn ctx;\n }\n \n uint16_t\n@@ -591,6 +629,7 @@ rte_eth_dev_count_avail(void)\n \tRTE_ETH_FOREACH_DEV(p)\n \t\tcount++;\n \n+\trte_ethdev_trace_count_avail(count);\n \treturn count;\n }\n \n@@ -602,6 +641,7 @@ rte_eth_dev_count_total(void)\n \tRTE_ETH_FOREACH_VALID_DEV(port)\n \t\tcount++;\n \n+\trte_ethdev_trace_count_total(count);\n \treturn count;\n }\n \n@@ -622,6 +662,7 @@ rte_eth_dev_get_name_by_port(uint16_t port_id, char *name)\n \t * because it might be overwritten by VDEV PMD */\n \ttmp = eth_dev_shared_data->data[port_id].name;\n \tstrcpy(name, tmp);\n+\trte_ethdev_trace_get_name_by_port(port_id, name);\n \treturn 0;\n }\n \n@@ -644,6 +685,7 @@ rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)\n \tRTE_ETH_FOREACH_VALID_DEV(pid)\n \t\tif (!strcmp(name, eth_dev_shared_data->data[pid].name)) {\n \t\t\t*port_id = pid;\n+\t\t\trte_ethdev_trace_get_port_by_name(name, *port_id);\n \t\t\treturn 0;\n \t\t}\n \n@@ -745,7 +787,11 @@ rte_eth_dev_rx_queue_start(uint16_t port_id, uint16_t rx_queue_id)\n \t\treturn 0;\n \t}\n \n-\treturn eth_err(port_id, dev->dev_ops->rx_queue_start(dev, rx_queue_id));\n+\tret = eth_err(port_id, dev->dev_ops->rx_queue_start(dev, rx_queue_id));\n+\n+\trte_ethdev_trace_rx_queue_start(port_id, rx_queue_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -778,7 +824,11 @@ rte_eth_dev_rx_queue_stop(uint16_t port_id, uint16_t rx_queue_id)\n \t\treturn 0;\n \t}\n \n-\treturn eth_err(port_id, dev->dev_ops->rx_queue_stop(dev, rx_queue_id));\n+\tret = eth_err(port_id, dev->dev_ops->rx_queue_stop(dev, rx_queue_id));\n+\n+\trte_ethdev_trace_rx_queue_stop(port_id, rx_queue_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -818,7 +868,11 @@ rte_eth_dev_tx_queue_start(uint16_t port_id, uint16_t tx_queue_id)\n \t\treturn 0;\n \t}\n \n-\treturn eth_err(port_id, dev->dev_ops->tx_queue_start(dev, tx_queue_id));\n+\tret = eth_err(port_id, dev->dev_ops->tx_queue_start(dev, tx_queue_id));\n+\n+\trte_ethdev_trace_tx_queue_start(port_id, tx_queue_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -851,12 +905,17 @@ rte_eth_dev_tx_queue_stop(uint16_t port_id, uint16_t tx_queue_id)\n \t\treturn 0;\n \t}\n \n-\treturn eth_err(port_id, dev->dev_ops->tx_queue_stop(dev, tx_queue_id));\n+\tret = eth_err(port_id, dev->dev_ops->tx_queue_stop(dev, tx_queue_id));\n+\n+\trte_ethdev_trace_tx_queue_stop(port_id, tx_queue_id, ret);\n+\n+\treturn ret;\n }\n \n uint32_t\n rte_eth_speed_bitflag(uint32_t speed, int duplex)\n {\n+\trte_eth_trace_speed_bitflag(speed, duplex);\n \tswitch (speed) {\n \tcase RTE_ETH_SPEED_NUM_10M:\n \t\treturn duplex ? RTE_ETH_LINK_SPEED_10M : RTE_ETH_LINK_SPEED_10M_HD;\n@@ -902,6 +961,8 @@ rte_eth_dev_rx_offload_name(uint64_t offload)\n \t\t}\n \t}\n \n+\trte_ethdev_trace_rx_offload_name(offload, name);\n+\n \treturn name;\n }\n \n@@ -918,6 +979,8 @@ rte_eth_dev_tx_offload_name(uint64_t offload)\n \t\t}\n \t}\n \n+\trte_ethdev_trace_tx_offload_name(offload, name);\n+\n \treturn name;\n }\n \n@@ -934,6 +997,8 @@ rte_eth_dev_capability_name(uint64_t capability)\n \t\t}\n \t}\n \n+\trte_ethdev_trace_capability_name(capability, name);\n+\n \treturn name;\n }\n \n@@ -1554,26 +1619,36 @@ int\n rte_eth_dev_set_link_up(uint16_t port_id)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n \tif (*dev->dev_ops->dev_set_link_up == NULL)\n \t\treturn -ENOTSUP;\n-\treturn eth_err(port_id, (*dev->dev_ops->dev_set_link_up)(dev));\n+\tret = eth_err(port_id, (*dev->dev_ops->dev_set_link_up)(dev));\n+\n+\trte_ethdev_trace_set_link_up(port_id, ret);\n+\n+\treturn ret;\n }\n \n int\n rte_eth_dev_set_link_down(uint16_t port_id)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n \tif (*dev->dev_ops->dev_set_link_down == NULL)\n \t\treturn -ENOTSUP;\n-\treturn eth_err(port_id, (*dev->dev_ops->dev_set_link_down)(dev));\n+\tret = eth_err(port_id, (*dev->dev_ops->dev_set_link_down)(dev));\n+\n+\trte_ethdev_trace_set_link_down(port_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1628,9 +1703,12 @@ rte_eth_dev_reset(uint16_t port_id)\n \t\t\t\"Failed to stop device (port %u) before reset: %s - ignore\\n\",\n \t\t\tport_id, rte_strerror(-ret));\n \t}\n-\tret = dev->dev_ops->dev_reset(dev);\n \n-\treturn eth_err(port_id, ret);\n+\tret = eth_err(port_id, dev->dev_ops->dev_reset(dev));\n+\n+\trte_ethdev_trace_reset(port_id, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -1653,6 +1731,8 @@ rte_eth_dev_is_removed(uint16_t port_id)\n \t\t/* Device is physically removed. */\n \t\tdev->state = RTE_ETH_DEV_REMOVED;\n \n+\trte_ethdev_trace_is_removed(port_id, ret);\n+\n \treturn ret;\n }\n \n@@ -2151,7 +2231,13 @@ rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,\n \tif (ret == 0)\n \t\tdev->data->rx_queue_state[rx_queue_id] =\n \t\t\tRTE_ETH_QUEUE_STATE_HAIRPIN;\n-\treturn eth_err(port_id, ret);\n+\n+\tret = eth_err(port_id, ret);\n+\n+\trte_eth_trace_rx_hairpin_queue_setup(port_id, rx_queue_id, nb_rx_desc,\n+\t\t\t\t\t     conf, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -2340,7 +2426,12 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,\n \tif (ret == 0)\n \t\tdev->data->tx_queue_state[tx_queue_id] =\n \t\t\tRTE_ETH_QUEUE_STATE_HAIRPIN;\n-\treturn eth_err(port_id, ret);\n+\n+\tret = eth_err(port_id, ret);\n+\n+\trte_eth_trace_tx_hairpin_queue_setup(port_id, tx_queue_id, nb_tx_desc, conf, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -2365,6 +2456,8 @@ rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port)\n \t\t\t       \" to Rx %d (%d - all ports)\\n\",\n \t\t\t       tx_port, rx_port, RTE_MAX_ETHPORTS);\n \n+\trte_eth_trace_hairpin_bind(tx_port, rx_port, ret);\n+\n \treturn ret;\n }\n \n@@ -2390,6 +2483,7 @@ rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port)\n \t\t\t       \" from Rx %d (%d - all ports)\\n\",\n \t\t\t       tx_port, rx_port, RTE_MAX_ETHPORTS);\n \n+\trte_eth_trace_hairpin_unbind(tx_port, rx_port, ret);\n \treturn ret;\n }\n \n@@ -2426,6 +2520,8 @@ rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,\n \t\tRTE_ETHDEV_LOG(ERR, \"Failed to get %d hairpin peer %s ports\\n\",\n \t\t\t       port_id, direction ? \"Rx\" : \"Tx\");\n \n+\trte_eth_trace_hairpin_get_peer_ports(port_id, peer_ports, len, direction, ret);\n+\n \treturn ret;\n }\n \n@@ -2433,6 +2529,7 @@ void\n rte_eth_tx_buffer_drop_callback(struct rte_mbuf **pkts, uint16_t unsent,\n \t\tvoid *userdata __rte_unused)\n {\n+\trte_eth_trace_tx_buffer_drop_callback(pkts, unsent);\n \trte_pktmbuf_free_bulk(pkts, unsent);\n }\n \n@@ -2444,6 +2541,7 @@ rte_eth_tx_buffer_count_callback(struct rte_mbuf **pkts, uint16_t unsent,\n \n \trte_pktmbuf_free_bulk(pkts, unsent);\n \t*count += unsent;\n+\trte_eth_trace_tx_buffer_count_callback(pkts, unsent, *count);\n }\n \n int\n@@ -2458,6 +2556,9 @@ rte_eth_tx_buffer_set_err_callback(struct rte_eth_dev_tx_buffer *buffer,\n \n \tbuffer->error_callback = cbfn;\n \tbuffer->error_userdata = userdata;\n+\n+\trte_eth_trace_tx_buffer_set_err_callback(buffer);\n+\n \treturn 0;\n }\n \n@@ -2477,6 +2578,8 @@ rte_eth_tx_buffer_init(struct rte_eth_dev_tx_buffer *buffer, uint16_t size)\n \t\t\tbuffer, rte_eth_tx_buffer_drop_callback, NULL);\n \t}\n \n+\trte_eth_trace_tx_buffer_init(buffer, size, ret);\n+\n \treturn ret;\n }\n \n@@ -2495,7 +2598,12 @@ rte_eth_tx_done_cleanup(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt)\n \t/* Call driver to free pending mbufs. */\n \tret = (*dev->dev_ops->tx_done_cleanup)(dev->data->tx_queues[queue_id],\n \t\t\t\t\t       free_cnt);\n-\treturn eth_err(port_id, ret);\n+\n+\tret = eth_err(port_id, ret);\n+\n+\trte_eth_trace_tx_done_cleanup(port_id, queue_id, free_cnt, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -2516,7 +2624,11 @@ rte_eth_promiscuous_enable(uint16_t port_id)\n \tdiag = (*dev->dev_ops->promiscuous_enable)(dev);\n \tdev->data->promiscuous = (diag == 0) ? 1 : 0;\n \n-\treturn eth_err(port_id, diag);\n+\tdiag = eth_err(port_id, diag);\n+\n+\trte_eth_trace_promiscuous_enable(port_id, dev->data->promiscuous, diag);\n+\n+\treturn diag;\n }\n \n int\n@@ -2539,7 +2651,11 @@ rte_eth_promiscuous_disable(uint16_t port_id)\n \tif (diag != 0)\n \t\tdev->data->promiscuous = 1;\n \n-\treturn eth_err(port_id, diag);\n+\tdiag = eth_err(port_id, diag);\n+\n+\trte_eth_trace_promiscuous_disable(port_id, dev->data->promiscuous, diag);\n+\n+\treturn diag;\n }\n \n int\n@@ -2550,6 +2666,8 @@ rte_eth_promiscuous_get(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n+\trte_eth_trace_promiscuous_get(port_id, dev->data->promiscuous);\n+\n \treturn dev->data->promiscuous;\n }\n \n@@ -2570,7 +2688,11 @@ rte_eth_allmulticast_enable(uint16_t port_id)\n \tdiag = (*dev->dev_ops->allmulticast_enable)(dev);\n \tdev->data->all_multicast = (diag == 0) ? 1 : 0;\n \n-\treturn eth_err(port_id, diag);\n+\tdiag = eth_err(port_id, diag);\n+\n+\trte_eth_trace_allmulticast_enable(port_id, dev->data->all_multicast, diag);\n+\n+\treturn diag;\n }\n \n int\n@@ -2592,7 +2714,11 @@ rte_eth_allmulticast_disable(uint16_t port_id)\n \tif (diag != 0)\n \t\tdev->data->all_multicast = 1;\n \n-\treturn eth_err(port_id, diag);\n+\tdiag = eth_err(port_id, diag);\n+\n+\trte_eth_trace_allmulticast_disable(port_id, dev->data->all_multicast, diag);\n+\n+\treturn diag;\n }\n \n int\n@@ -2603,6 +2729,8 @@ rte_eth_allmulticast_get(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n+\trte_eth_trace_allmulticast_get(port_id, dev->data->all_multicast);\n+\n \treturn dev->data->all_multicast;\n }\n \n@@ -2629,6 +2757,8 @@ rte_eth_link_get(uint16_t port_id, struct rte_eth_link *eth_link)\n \t\t*eth_link = dev->data->dev_link;\n \t}\n \n+\trte_eth_trace_link_get(port_id, eth_link);\n+\n \treturn 0;\n }\n \n@@ -2655,12 +2785,16 @@ rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link)\n \t\t*eth_link = dev->data->dev_link;\n \t}\n \n+\trte_eth_trace_link_get_nowait(port_id, eth_link);\n+\n \treturn 0;\n }\n \n const char *\n rte_eth_link_speed_to_str(uint32_t link_speed)\n {\n+\trte_eth_trace_link_speed_to_str(link_speed);\n+\n \tswitch (link_speed) {\n \tcase RTE_ETH_SPEED_NUM_NONE: return \"None\";\n \tcase RTE_ETH_SPEED_NUM_10M:  return \"10 Mbps\";\n@@ -2700,6 +2834,8 @@ rte_eth_link_to_str(char *str, size_t len, const struct rte_eth_link *eth_link)\n \t\treturn -EINVAL;\n \t}\n \n+\trte_eth_trace_link_to_str(len, eth_link);\n+\n \tif (eth_link->link_status == RTE_ETH_LINK_DOWN)\n \t\treturn snprintf(str, len, \"Link down\");\n \telse\n@@ -2715,6 +2851,7 @@ int\n rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n@@ -2730,7 +2867,12 @@ rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)\n \tif (*dev->dev_ops->stats_get == NULL)\n \t\treturn -ENOTSUP;\n \tstats->rx_nombuf = dev->data->rx_mbuf_alloc_failed;\n-\treturn eth_err(port_id, (*dev->dev_ops->stats_get)(dev, stats));\n+\n+\tret = eth_err(port_id, (*dev->dev_ops->stats_get)(dev, stats));\n+\n+\trte_eth_trace_stats_get(port_id, stats, ret);\n+\n+\treturn ret;\n }\n \n int\n@@ -2750,6 +2892,8 @@ rte_eth_stats_reset(uint16_t port_id)\n \n \tdev->data->rx_mbuf_alloc_failed = 0;\n \n+\trte_eth_trace_stats_reset(port_id);\n+\n \treturn 0;\n }\n \n@@ -2833,6 +2977,7 @@ rte_eth_xstats_get_id_by_name(uint16_t port_id, const char *xstat_name,\n \tfor (idx_xstat = 0; idx_xstat < cnt_xstats; idx_xstat++) {\n \t\tif (!strcmp(xstats_names[idx_xstat].name, xstat_name)) {\n \t\t\t*id = idx_xstat;\n+\t\t\trte_eth_trace_xstats_get_id_by_name(port_id, xstat_name, *id);\n \t\t\treturn 0;\n \t\t};\n \t}\n@@ -2986,6 +3131,8 @@ rte_eth_xstats_get_names_by_id(uint16_t port_id,\n \t\t\treturn -1;\n \t\t}\n \t\txstats_names[i] = xstats_names_copy[ids[i]];\n+\t\trte_eth_trace_xstats_get_names_by_id(port_id, &xstats_names[i],\n+\t\t\t\t\t\t     ids[i]);\n \t}\n \n \tfree(xstats_names_copy);\n@@ -3025,6 +3172,8 @@ rte_eth_xstats_get_names(uint16_t port_id,\n \t\tcnt_used_entries += cnt_driver_entries;\n \t}\n \n+\trte_eth_trace_xstats_get_names(port_id, xstats_names, size, cnt_used_entries);\n+\n \treturn cnt_used_entries;\n }\n \n@@ -3174,6 +3323,9 @@ rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids,\n \t\t}\n \t\tvalues[i] = xstats[ids[i]].value;\n \t}\n+\n+\trte_eth_trace_xstats_get_by_id(port_id, ids, values, size);\n+\n \treturn size;\n }\n \n@@ -3221,6 +3373,9 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,\n \tfor ( ; i < count + xcount; i++)\n \t\txstats[i].id += count;\n \n+\tfor (i = 0; i < n; i++)\n+\t\trte_eth_trace_xstats_get(port_id, xstats[i], i);\n+\n \treturn count + xcount;\n }\n \n@@ -3229,13 +3384,19 @@ int\n rte_eth_xstats_reset(uint16_t port_id)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n \t/* implemented by the driver */\n-\tif (dev->dev_ops->xstats_reset != NULL)\n-\t\treturn eth_err(port_id, (*dev->dev_ops->xstats_reset)(dev));\n+\tif (dev->dev_ops->xstats_reset != NULL) {\n+\t\tret = eth_err(port_id, (*dev->dev_ops->xstats_reset)(dev));\n+\n+\t\trte_eth_trace_xstats_reset(port_id, ret);\n+\n+\t\treturn ret;\n+\t}\n \n \t/* fallback to default */\n \treturn rte_eth_stats_reset(port_id);\n@@ -3268,24 +3429,37 @@ int\n rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id,\n \t\tuint8_t stat_idx)\n {\n-\treturn eth_err(port_id, eth_dev_set_queue_stats_mapping(port_id,\n+\tint ret;\n+\n+\tret = eth_err(port_id, eth_dev_set_queue_stats_mapping(port_id,\n \t\t\t\t\t\ttx_queue_id,\n \t\t\t\t\t\tstat_idx, STAT_QMAP_TX));\n+\n+\trte_ethdev_trace_set_tx_queue_stats_mapping(port_id, tx_queue_id, stat_idx, ret);\n+\n+\treturn ret;\n }\n \n int\n rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id,\n \t\tuint8_t stat_idx)\n {\n-\treturn eth_err(port_id, eth_dev_set_queue_stats_mapping(port_id,\n+\tint ret;\n+\tret = eth_err(port_id, eth_dev_set_queue_stats_mapping(port_id,\n \t\t\t\t\t\trx_queue_id,\n \t\t\t\t\t\tstat_idx, STAT_QMAP_RX));\n+\n+\trte_ethdev_trace_set_rx_queue_stats_mapping(port_id, rx_queue_id,\n+\t\t\t\t\t\t    stat_idx, ret);\n+\n+\treturn ret;\n }\n \n int\n rte_eth_dev_fw_version_get(uint16_t port_id, char *fw_version, size_t fw_size)\n {\n \tstruct rte_eth_dev *dev;\n+\tint ret;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n@@ -3299,8 +3473,13 @@ rte_eth_dev_fw_version_get(uint16_t port_id, char *fw_version, size_t fw_size)\n \n \tif (*dev->dev_ops->fw_version_get == NULL)\n \t\treturn -ENOTSUP;\n-\treturn eth_err(port_id, (*dev->dev_ops->fw_version_get)(dev,\n+\n+\tret = eth_err(port_id, (*dev->dev_ops->fw_version_get)(dev,\n \t\t\t\t\t\t\tfw_version, fw_size));\n+\n+\trte_ethdev_trace_fw_version_get(port_id, fw_version, fw_size, ret);\n+\n+\treturn ret;\n }\n \n int\ndiff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h\nindex 96d0650d0c..6340a84c10 100644\n--- a/lib/ethdev/rte_ethdev.h\n+++ b/lib/ethdev/rte_ethdev.h\n@@ -172,7 +172,7 @@ extern \"C\" {\n #include <rte_config.h>\n #include <rte_power_intrinsics.h>\n \n-#include \"rte_ethdev_trace_fp.h\"\n+#include \"rte_ethdev_trace_fp_burst.h\"\n #include \"rte_dev_info.h\"\n \n extern int rte_eth_dev_logtype;\ndiff --git a/lib/ethdev/rte_ethdev_trace.h b/lib/ethdev/rte_ethdev_trace.h\nindex 1491c815c3..bc3b3d2a1b 100644\n--- a/lib/ethdev/rte_ethdev_trace.h\n+++ b/lib/ethdev/rte_ethdev_trace.h\n@@ -88,6 +88,291 @@ RTE_TRACE_POINT(\n \trte_trace_point_emit_u16(port_id);\n )\n \n+RTE_TRACE_POINT(\n+\trte_eth_trace_iterator_init,\n+\tRTE_TRACE_POINT_ARGS(const char *devargs),\n+\trte_trace_point_emit_string(devargs);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_iterator_next,\n+\tRTE_TRACE_POINT_ARGS(struct rte_dev_iterator *iter, uint16_t id),\n+\trte_trace_point_emit_ptr(iter);\n+\trte_trace_point_emit_string(iter->bus_str);\n+\trte_trace_point_emit_string(iter->cls_str);\n+\trte_trace_point_emit_u16(id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_iterator_cleanup,\n+\tRTE_TRACE_POINT_ARGS(struct rte_dev_iterator *iter),\n+\trte_trace_point_emit_ptr(iter);\n+\trte_trace_point_emit_string(iter->bus_str);\n+\trte_trace_point_emit_string(iter->cls_str);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_owner_new,\n+\tRTE_TRACE_POINT_ARGS(uint64_t owner_id),\n+\trte_trace_point_emit_u64(owner_id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_owner_set,\n+\tRTE_TRACE_POINT_ARGS(const uint16_t port_id,\n+\t\tconst struct rte_eth_dev_owner *owner, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u64(owner->id);\n+\trte_trace_point_emit_string(owner->name);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_owner_unset,\n+\tRTE_TRACE_POINT_ARGS(const uint16_t port_id,\n+\t\tconst uint64_t owner_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u64(owner_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_owner_delete,\n+\tRTE_TRACE_POINT_ARGS(const uint64_t owner_id, int ret),\n+\trte_trace_point_emit_u64(owner_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_socket_id,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int socket_id),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(socket_id);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_rx_queue_start,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(rx_queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_rx_queue_stop,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(rx_queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_tx_queue_start,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(tx_queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_tx_queue_stop,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(tx_queue_id);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_speed_bitflag,\n+\tRTE_TRACE_POINT_ARGS(uint32_t speed, int duplex),\n+\trte_trace_point_emit_u32(speed);\n+\trte_trace_point_emit_int(duplex);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_rx_offload_name,\n+\tRTE_TRACE_POINT_ARGS(uint64_t offload, const char *name),\n+\trte_trace_point_emit_u64(offload);\n+\trte_trace_point_emit_string(name);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_tx_offload_name,\n+\tRTE_TRACE_POINT_ARGS(uint64_t offload, const char *name),\n+\trte_trace_point_emit_u64(offload);\n+\trte_trace_point_emit_string(name);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_capability_name,\n+\tRTE_TRACE_POINT_ARGS(uint64_t capability, const char *name),\n+\trte_trace_point_emit_u64(capability);\n+\trte_trace_point_emit_string(name);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_set_link_up,\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_ethdev_trace_set_link_down,\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_ethdev_trace_reset,\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_eth_trace_rx_hairpin_queue_setup,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id,\n+\t\tuint16_t nb_rx_desc, const struct rte_eth_hairpin_conf *conf,\n+\t\tint ret),\n+\tuint32_t peer_count = conf->peer_count;\n+\tuint32_t tx_explicit = conf->tx_explicit;\n+\tuint32_t manual_bind = conf->manual_bind;\n+\tuint32_t use_locked_device_memory = conf->use_locked_device_memory;\n+\tuint32_t use_rte_memory = conf->use_rte_memory;\n+\tuint32_t force_memory = conf->force_memory;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(rx_queue_id);\n+\trte_trace_point_emit_u16(nb_rx_desc);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_u32(peer_count);\n+\trte_trace_point_emit_u32(tx_explicit);\n+\trte_trace_point_emit_u32(manual_bind);\n+\trte_trace_point_emit_u32(use_locked_device_memory);\n+\trte_trace_point_emit_u32(use_rte_memory);\n+\trte_trace_point_emit_u32(force_memory);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_tx_hairpin_queue_setup,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,\n+\t\tuint16_t nb_tx_desc, const struct rte_eth_hairpin_conf *conf,\n+\t\tint ret),\n+\tuint32_t peer_count = conf->peer_count;\n+\tuint32_t tx_explicit = conf->tx_explicit;\n+\tuint32_t manual_bind = conf->manual_bind;\n+\tuint32_t use_locked_device_memory = conf->use_locked_device_memory;\n+\tuint32_t use_rte_memory = conf->use_rte_memory;\n+\tuint32_t force_memory = conf->force_memory;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(tx_queue_id);\n+\trte_trace_point_emit_u16(nb_tx_desc);\n+\trte_trace_point_emit_ptr(conf);\n+\trte_trace_point_emit_u32(peer_count);\n+\trte_trace_point_emit_u32(tx_explicit);\n+\trte_trace_point_emit_u32(manual_bind);\n+\trte_trace_point_emit_u32(use_locked_device_memory);\n+\trte_trace_point_emit_u32(use_rte_memory);\n+\trte_trace_point_emit_u32(force_memory);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_hairpin_bind,\n+\tRTE_TRACE_POINT_ARGS(uint16_t tx_port, uint16_t rx_port, int ret),\n+\trte_trace_point_emit_u16(tx_port);\n+\trte_trace_point_emit_u16(rx_port);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_hairpin_unbind,\n+\tRTE_TRACE_POINT_ARGS(uint16_t tx_port, uint16_t rx_port, int ret),\n+\trte_trace_point_emit_u16(tx_port);\n+\trte_trace_point_emit_u16(rx_port);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_tx_buffer_set_err_callback,\n+\tRTE_TRACE_POINT_ARGS(struct rte_eth_dev_tx_buffer *buffer),\n+\trte_trace_point_emit_ptr(buffer);\n+\trte_trace_point_emit_ptr(buffer->error_callback);\n+\trte_trace_point_emit_ptr(buffer->error_userdata);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_promiscuous_enable,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int promiscuous, int diag),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(promiscuous);\n+\trte_trace_point_emit_int(diag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_promiscuous_disable,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int promiscuous, int diag),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(promiscuous);\n+\trte_trace_point_emit_int(diag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_allmulticast_enable,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int all_multicast, int diag),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(all_multicast);\n+\trte_trace_point_emit_int(diag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_allmulticast_disable,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int all_multicast, int diag),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(all_multicast);\n+\trte_trace_point_emit_int(diag);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_eth_trace_link_speed_to_str,\n+\tRTE_TRACE_POINT_ARGS(uint32_t link_speed),\n+\trte_trace_point_emit_u32(link_speed);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_set_rx_queue_stats_mapping,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t rx_queue_id,\n+\t\tuint8_t stat_idx, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(rx_queue_id);\n+\trte_trace_point_emit_u8(stat_idx);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_set_tx_queue_stats_mapping,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t tx_queue_id,\n+\t\tuint8_t stat_idx, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(tx_queue_id);\n+\trte_trace_point_emit_u8(stat_idx);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT(\n+\trte_ethdev_trace_fw_version_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, char *fw_version, size_t fw_size,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_string(fw_version);\n+\trte_trace_point_emit_size_t(fw_size);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/rte_ethdev_trace_fp.h b/lib/ethdev/rte_ethdev_trace_fp.h\nindex 40084d1929..9f1d3d5a1b 100644\n--- a/lib/ethdev/rte_ethdev_trace_fp.h\n+++ b/lib/ethdev/rte_ethdev_trace_fp.h\n@@ -17,26 +17,293 @@ extern \"C\" {\n \n #include <rte_trace_point.h>\n \n+#include \"rte_ethdev.h\"\n+\n RTE_TRACE_POINT_FP(\n-\trte_ethdev_trace_rx_burst,\n+\trte_eth_trace_call_rx_callbacks,\n \tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,\n-\t\tvoid **pkt_tbl, uint16_t nb_rx),\n+\t\tstruct rte_mbuf **rx_pkts, uint16_t nb_rx,\n+\t\tuint16_t nb_pkts),\n \trte_trace_point_emit_u16(port_id);\n \trte_trace_point_emit_u16(queue_id);\n-\trte_trace_point_emit_ptr(pkt_tbl);\n+\trte_trace_point_emit_ptr(rx_pkts);\n \trte_trace_point_emit_u16(nb_rx);\n+\trte_trace_point_emit_u16(nb_pkts);\n )\n \n RTE_TRACE_POINT_FP(\n-\trte_ethdev_trace_tx_burst,\n+\trte_eth_trace_call_tx_callbacks,\n \tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,\n-\t\tvoid **pkts_tbl, uint16_t nb_pkts),\n+\t\tstruct rte_mbuf **tx_pkts, uint16_t nb_pkts),\n \trte_trace_point_emit_u16(port_id);\n \trte_trace_point_emit_u16(queue_id);\n-\trte_trace_point_emit_ptr(pkts_tbl);\n+\trte_trace_point_emit_ptr(tx_pkts);\n \trte_trace_point_emit_u16(nb_pkts);\n )\n \n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_find_next,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id),\n+\trte_trace_point_emit_u16(port_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_find_next_of,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id),\n+\trte_trace_point_emit_u16(port_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_find_next_sibling,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id_start, uint16_t ref_port_id),\n+\trte_trace_point_emit_u16(port_id_start);\n+\trte_trace_point_emit_u16(ref_port_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_is_valid_port,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int is_valid),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(is_valid);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_find_next_owned_by,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tconst uint64_t owner_id),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u64(owner_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_owner_get,\n+\tRTE_TRACE_POINT_ARGS(const uint16_t port_id,\n+\t\tstruct rte_eth_dev_owner *owner),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u64(owner->id);\n+\trte_trace_point_emit_string(owner->name);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_get_sec_ctx,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, void *ctx),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(ctx);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_count_avail,\n+\tRTE_TRACE_POINT_ARGS(uint16_t count),\n+\trte_trace_point_emit_u16(count);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_count_total,\n+\tRTE_TRACE_POINT_ARGS(uint16_t count),\n+\trte_trace_point_emit_u16(count);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_get_name_by_port,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, char *name),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_string(name);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_get_port_by_name,\n+\tRTE_TRACE_POINT_ARGS(const char *name, uint16_t port_id),\n+\trte_trace_point_emit_string(name);\n+\trte_trace_point_emit_u16(port_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_is_removed,\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_FP(\n+\trte_eth_trace_hairpin_get_peer_ports,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t *peer_ports,\n+\t\tsize_t len, uint32_t direction, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(peer_ports);\n+\trte_trace_point_emit_size_t(len);\n+\trte_trace_point_emit_u32(direction);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_tx_buffer_drop_callback,\n+\tRTE_TRACE_POINT_ARGS(struct rte_mbuf **pkts, uint16_t unsent),\n+\trte_trace_point_emit_ptr(pkts);\n+\trte_trace_point_emit_u16(unsent);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_tx_buffer_count_callback,\n+\tRTE_TRACE_POINT_ARGS(struct rte_mbuf **pkts, uint16_t unsent,\n+\t\tuint64_t count),\n+\trte_trace_point_emit_ptr(pkts);\n+\trte_trace_point_emit_u16(unsent);\n+\trte_trace_point_emit_u64(count);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_tx_buffer_init,\n+\tRTE_TRACE_POINT_ARGS(struct rte_eth_dev_tx_buffer *buffer, uint16_t size,\n+\t\tint ret),\n+\trte_trace_point_emit_ptr(buffer);\n+\trte_trace_point_emit_u16(size);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_tx_done_cleanup,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt,\n+\t\tint ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(queue_id);\n+\trte_trace_point_emit_u32(free_cnt);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_promiscuous_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int promiscuous),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(promiscuous);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_allmulticast_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, int all_multicast),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_int(all_multicast);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_link_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_eth_link *link),\n+\tuint16_t link_duplex = link->link_duplex;\n+\tuint16_t link_autoneg = link->link_autoneg;\n+\tuint16_t link_status = link->link_status;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(link->link_speed);\n+\trte_trace_point_emit_u16(link_duplex);\n+\trte_trace_point_emit_u16(link_autoneg);\n+\trte_trace_point_emit_u16(link_status);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_link_get_nowait,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_eth_link *link),\n+\tuint16_t link_duplex = link->link_duplex;\n+\tuint16_t link_autoneg = link->link_autoneg;\n+\tuint16_t link_status = link->link_status;\n+\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u32(link->link_speed);\n+\trte_trace_point_emit_u16(link_duplex);\n+\trte_trace_point_emit_u16(link_autoneg);\n+\trte_trace_point_emit_u16(link_status);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_link_to_str,\n+\tRTE_TRACE_POINT_ARGS(size_t len, const struct rte_eth_link *link),\n+\tuint16_t link_duplex = link->link_duplex;\n+\tuint16_t link_autoneg = link->link_autoneg;\n+\tuint16_t link_status = link->link_status;\n+\n+\trte_trace_point_emit_size_t(len);\n+\trte_trace_point_emit_u32(link->link_speed);\n+\trte_trace_point_emit_u16(link_duplex);\n+\trte_trace_point_emit_u16(link_autoneg);\n+\trte_trace_point_emit_u16(link_status);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_stats_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_eth_stats *stats, int ret),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(stats);\n+\trte_trace_point_emit_u64(stats->rx_nombuf);\n+\trte_trace_point_emit_u64(stats->ipackets);\n+\trte_trace_point_emit_u64(stats->opackets);\n+\trte_trace_point_emit_u64(stats->ibytes);\n+\trte_trace_point_emit_u64(stats->obytes);\n+\trte_trace_point_emit_u64(stats->imissed);\n+\trte_trace_point_emit_u64(stats->ierrors);\n+\trte_trace_point_emit_u64(stats->oerrors);\n+\trte_trace_point_emit_int(ret);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_stats_reset,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id),\n+\trte_trace_point_emit_u16(port_id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_get_id_by_name,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const char *xstat_name,\n+\t\tuint64_t id),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_string(xstat_name);\n+\trte_trace_point_emit_u64(id);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_get_names_by_id,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_eth_xstat_name *xstats_names, uint64_t ids),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_string(xstats_names->name);\n+\trte_trace_point_emit_u64(ids);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_get_names,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id,\n+\t\tstruct rte_eth_xstat_name *xstats_names,\n+\t\tunsigned int size, int cnt_used_entries),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_string(xstats_names->name);\n+\trte_trace_point_emit_u32(size);\n+\trte_trace_point_emit_int(cnt_used_entries);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_get_by_id,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, const uint64_t *ids,\n+\t\tuint64_t *values, unsigned int size),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_ptr(ids);\n+\trte_trace_point_emit_ptr(values);\n+\trte_trace_point_emit_u32(size);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_get,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, struct rte_eth_xstat xstats,\n+\t\tint i),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u64(xstats.id);\n+\trte_trace_point_emit_u64(xstats.value);\n+\trte_trace_point_emit_u32(i);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_eth_trace_xstats_reset,\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 #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/ethdev/rte_ethdev_trace_fp_burst.h b/lib/ethdev/rte_ethdev_trace_fp_burst.h\nnew file mode 100644\nindex 0000000000..899b4ed070\n--- /dev/null\n+++ b/lib/ethdev/rte_ethdev_trace_fp_burst.h\n@@ -0,0 +1,44 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(C) 2022 Marvell International Ltd.\n+ */\n+\n+#ifndef _RTE_ETHDEV_TRACE_FP_BURST_H_\n+#define _RTE_ETHDEV_TRACE_FP_BURST_H_\n+\n+/**\n+ * @file\n+ *\n+ * API for ethdev burst trace support\n+ */\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <rte_trace_point.h>\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_rx_burst,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,\n+\t\tvoid **pkt_tbl, uint16_t nb_rx),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(queue_id);\n+\trte_trace_point_emit_ptr(pkt_tbl);\n+\trte_trace_point_emit_u16(nb_rx);\n+)\n+\n+RTE_TRACE_POINT_FP(\n+\trte_ethdev_trace_tx_burst,\n+\tRTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id,\n+\t\tvoid **pkts_tbl, uint16_t nb_pkts),\n+\trte_trace_point_emit_u16(port_id);\n+\trte_trace_point_emit_u16(queue_id);\n+\trte_trace_point_emit_ptr(pkts_tbl);\n+\trte_trace_point_emit_u16(nb_pkts);\n+)\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_ETHDEV_TRACE_FP_BURST_H_ */\ndiff --git a/lib/ethdev/version.map b/lib/ethdev/version.map\nindex 17201fbe0f..c7ba2e3dc8 100644\n--- a/lib/ethdev/version.map\n+++ b/lib/ethdev/version.map\n@@ -298,6 +298,72 @@ EXPERIMENTAL {\n \trte_flow_get_q_aged_flows;\n \trte_mtr_meter_policy_get;\n \trte_mtr_meter_profile_get;\n+\n+\t# added in 23.03\n+\t__rte_eth_trace_allmulticast_disable;\n+\t__rte_eth_trace_allmulticast_enable;\n+\t__rte_eth_trace_allmulticast_get;\n+\t__rte_eth_trace_call_rx_callbacks;\n+\t__rte_eth_trace_call_tx_callbacks;\n+\t__rte_eth_trace_find_next;\n+\t__rte_eth_trace_find_next_of;\n+\t__rte_eth_trace_find_next_owned_by;\n+\t__rte_eth_trace_find_next_sibling;\n+\t__rte_eth_trace_hairpin_bind;\n+\t__rte_eth_trace_hairpin_get_peer_ports;\n+\t__rte_eth_trace_hairpin_unbind;\n+\t__rte_eth_trace_iterator_cleanup;\n+\t__rte_eth_trace_iterator_init;\n+\t__rte_eth_trace_iterator_next;\n+\t__rte_eth_trace_link_get;\n+\t__rte_eth_trace_link_get_nowait;\n+\t__rte_eth_trace_link_speed_to_str;\n+\t__rte_eth_trace_link_to_str;\n+\t__rte_eth_trace_promiscuous_disable;\n+\t__rte_eth_trace_promiscuous_enable;\n+\t__rte_eth_trace_promiscuous_get;\n+\t__rte_eth_trace_rx_hairpin_queue_setup;\n+\t__rte_eth_trace_speed_bitflag;\n+\t__rte_eth_trace_stats_get;\n+\t__rte_eth_trace_stats_reset;\n+\t__rte_eth_trace_tx_buffer_count_callback;\n+\t__rte_eth_trace_tx_buffer_drop_callback;\n+\t__rte_eth_trace_tx_buffer_init;\n+\t__rte_eth_trace_tx_buffer_set_err_callback;\n+\t__rte_eth_trace_tx_done_cleanup;\n+\t__rte_eth_trace_tx_hairpin_queue_setup;\n+\t__rte_eth_trace_xstats_get;\n+\t__rte_eth_trace_xstats_get_by_id;\n+\t__rte_eth_trace_xstats_get_id_by_name;\n+\t__rte_eth_trace_xstats_get_names;\n+\t__rte_eth_trace_xstats_get_names_by_id;\n+\t__rte_eth_trace_xstats_reset;\n+\t__rte_ethdev_trace_capability_name;\n+\t__rte_ethdev_trace_count_avail;\n+\t__rte_ethdev_trace_count_total;\n+\t__rte_ethdev_trace_fw_version_get;\n+\t__rte_ethdev_trace_get_name_by_port;\n+\t__rte_ethdev_trace_get_port_by_name;\n+\t__rte_ethdev_trace_get_sec_ctx;\n+\t__rte_ethdev_trace_is_removed;\n+\t__rte_ethdev_trace_is_valid_port;\n+\t__rte_ethdev_trace_owner_delete;\n+\t__rte_ethdev_trace_owner_get;\n+\t__rte_ethdev_trace_owner_new;\n+\t__rte_ethdev_trace_owner_set;\n+\t__rte_ethdev_trace_owner_unset;\n+\t__rte_ethdev_trace_reset;\n+\t__rte_ethdev_trace_rx_offload_name;\n+\t__rte_ethdev_trace_rx_queue_start;\n+\t__rte_ethdev_trace_rx_queue_stop;\n+\t__rte_ethdev_trace_set_link_down;\n+\t__rte_ethdev_trace_set_link_up;\n+\t__rte_ethdev_trace_set_rx_queue_stats_mapping;\n+\t__rte_ethdev_trace_set_tx_queue_stats_mapping;\n+\t__rte_ethdev_trace_socket_id;\n+\t__rte_ethdev_trace_tx_offload_name;\n+\t__rte_ethdev_trace_tx_queue_start;\n+\t__rte_ethdev_trace_tx_queue_stop;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v6",
        "2/6"
    ]
}