get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 37422,
    "url": "http://patches.dpdk.org/api/patches/37422/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180406151324.9135-1-pbhagavatula@caviumnetworks.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": "<20180406151324.9135-1-pbhagavatula@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180406151324.9135-1-pbhagavatula@caviumnetworks.com",
    "date": "2018-04-06T15:13:21",
    "name": "[dpdk-dev,v5,1/4] app/eventdev: add event timer adapter as a producer",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "167e8c00e6a161faf8fcbf95779e06bca76975b3",
    "submitter": {
        "id": 768,
        "url": "http://patches.dpdk.org/api/people/768/?format=api",
        "name": "Pavan Nikhilesh",
        "email": "pbhagavatula@caviumnetworks.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180406151324.9135-1-pbhagavatula@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/37422/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/37422/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B08361D24C;\n\tFri,  6 Apr 2018 17:13:58 +0200 (CEST)",
            "from NAM03-DM3-obe.outbound.protection.outlook.com\n\t(mail-dm3nam03on0040.outbound.protection.outlook.com [104.47.41.40])\n\tby dpdk.org (Postfix) with ESMTP id B26DD1D24A\n\tfor <dev@dpdk.org>; Fri,  6 Apr 2018 17:13:56 +0200 (CEST)",
            "from ltp-pvn.caveonetworks.com (111.93.218.67) by\n\tBN6PR07MB3457.namprd07.prod.outlook.com (2603:10b6:405:64::20) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.653.12; Fri, 6 Apr 2018 15:13:53 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=u1tnhdquMqUxAbyftlM6sjTNrS+zjQ73xwEjzqO7vxo=;\n\tb=AjWDi1w7NU5sZR2eV5N/Xdz/lyp08r910diSPUi1UBZN96ZBAQYSO9OkjgEXvWb/XbhusYt4NNBbA1pkRwPvk2YDQr9ualqElWfp8WVBopADvu13/CwMZpgNx3U4BWJx7HAZxJF8G1byCiyNuxrULJaopjCGgqylLFoAtEDBviM=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Pavan.Bhagavatula@cavium.com; ",
        "From": "Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>",
        "To": "jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com,\n\terik.g.carrillo@intel.com",
        "Cc": "dev@dpdk.org,\n\tPavan Nikhilesh <pbhagavatula@caviumnetworks.com>",
        "Date": "Fri,  6 Apr 2018 20:43:21 +0530",
        "Message-Id": "<20180406151324.9135-1-pbhagavatula@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.17.0",
        "In-Reply-To": "<20180318131216.11699-1-pbhagavatula@caviumnetworks.com>",
        "References": "<20180318131216.11699-1-pbhagavatula@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[111.93.218.67]",
        "X-ClientProxiedBy": "PN1PR0101CA0007.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:c00:e::17) To BN6PR07MB3457.namprd07.prod.outlook.com\n\t(2603:10b6:405:64::20)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "8b3914d5-20b4-4e24-e50a-08d59bd1038b",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(5600026)(4604075)(2017052603328)(7153060)(7193020);\n\tSRVR:BN6PR07MB3457; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN6PR07MB3457;\n\t3:oKJBrSHSuQ844kz1yy7u//pH4PTyrbzlrmfg8EKS17P9gydrX7sfGetoYIDowf1xyqdDXS0Mh6fK+Uu5+KlvRE1UnVPV4xaxruFKjJABfxt+Udxb/3ahrlsB4zQImUH7JhRnxgUcFQnG06TuQDCRxVcJ4slFCJ7YGIvtM3MWzTYjO64ebLfDKuLe1GhCfZ8U0hpjp4VdZYKeQ2/A29bmxYzsyp7+KKn1BnUJwVngCe3pBjQXq9BR5vsN0NbWfMw+;\n\t25:ky4TQOEc7mFyUbH+GXlip2gLkhCHuRiT4+D5Cjw5oXwzfhMdX+TdhWlfMdgiGRji9oIZyWmaePmp+FgWwQWLmoVENex0wn1GudYCca9crHhvbCpFPFeuTwQLX1i6Z6/mSCJCBGcq0SVBRhqmjtd0PZe/lJMLg+vX4B0DHMCs0/7LMzVuc9+ECaQEz6UkIGmmumK+cLmYsAunolvNwVSJJYaQhl1UztS0MoFxDGAFn3scxsk7GMRBwB76hEAG0lxpqTRgE3QwiGRwIQVVCpFbzlRQXSLvhELdurww5OFKWvwo5WC3D7SFrXRTfBFXvdfuPJ+4hIOlx51MFaf7PKJIiA==;\n\t31:gnuXx1nZh6ii7jDBRdTdPdLwU+V31q68CZg8QEnN2xfzXfy11rcs4kU1VJPHnaJV7JFlNUE8stFQ4JhPeQBxLE82DarCc25Ayybax8zeD0LOhwsHOCBf2GEMWxnBNOGchMpgjGuu7g0G/6PwhcSAtYCaD3J+szltYCBux71iO8RcsWHRWl32gsFqthcrJUpgq9JQcxJgtvXIkzilby46ifx8tHqsSYDi5vOBH+VL8dI=",
            "1; BN6PR07MB3457;\n\t20:EujO07XiimexEsxmvCIcsVEnSiPAOBj3VSQJzPo22KBq7Slia6zCofvgeqvZoYnBUbJBbO26fyf0jrlWC2myP9oErkyksGqJIX124kXxmYQRo764CluPl8IIpXc3l0z/E2XF+dzB+tTidgMGr2rQPJc14CBiNP+qOue36Hxk8eHi8uQTz4wT1amxCEOXIir3ZEJ8Bbd/Jl1mGssYq9bbj0oXw6QOkSHceQQtvGPthllR5BgCR0h1anuQ+iVdHxEL/C6dUQEfWt82BskTzEzDHPAWNlO6cHwMa+KtdOtOVCVQ/OfXqtrRlV/aP2uMHE7ud/Bhai56+NFybCaFkO/im1Bsm5Fz4n5ytYGB72b6IW/F6QChQaGsv4/uKZ+DQNKHUnwlp/GEZZ3FD9HPJQ/2PK+i/Ebe+wVycKtS7LTEm0lM5DYDrPXwckh4aGmya88McrgKHxIlad9c7bGYxvvU94kPGcXujEfZUSo9GaWS9pzINfoDXc/q/Gg8FkZnppo//wpfheRtI2t7hw7XmzX/aw5H32NyD4s0s83VggCcNR9JueCIHa2dL4oKgfZMpR6si5JVuwaBXU8aJKj/Toz+qv879Gwstvpr6y/5BaurEQo=",
            "1; BN6PR07MB3457;\n\t4:WtWUGO+2jkiugdIczBT5Q8LDva9RJHZR7ixsy3vnDRPF+qWQLwRjeEIMxxQBX1CLBtuGxIbBLiDDwFtpDEL3tuYnW7ZxJn9lO5Vh/zOQTejYWeGqmlRs8EbJK0iJ+i2QRWpqQfsCdhG4EP2vdl+zDmn+p3kTUTEdcRcPEhjZ1HqNQskucjTDbJh8QAxY4Y9IJ2CsdPMjyvqkq+yPNnl9MXkvYfGuMRvfyJWPR5UUqPW8+2OoNqQ86KIkWkNLzj12Ott2P39F9g6o3FTULReAmCRylScAXeuo9dcZoh2nPJzVzhIgHswi8WmgF0H6sESDCXJF6p/YCeZLDef2DLdt7wD81sYaQbBw1p3itjsGyKM=",
            "=?us-ascii?Q?1; BN6PR07MB3457;\n\t23:SQB/ZEmGaP/KazqK9Pr/F1I+kYtFgSPMCUQsqjMf0?=\n\tOLTxWAG9fF0tP9MHktzqpCTRt3SsM7FWabJ0R5YtPG8GgQclL35gjI4T7fUmX+r/OLpIyW1nuTbvLJnw17Or1NqZoIWWTiGBqSpBsoSofBKE1hF5Tgg7ibsJ5V9VYVkz7zNPSuJxkvp7wldomL6TRo4BF+keuLAEvqVn17gtV0B7zA2WoJYpMoS+X/M/8hrwIVlSc0g1RKD/cIYgGwbcoD2AU7F5gkk1ltPTEOGuNbKGqcHks1cxvp0JE1Tg8Vm31Pp/urbDpc0Oxybc5iPooSfJRkKMrKeXJGlUNbsaIhpYwQ2M2sdl6aOgxJgJyIajf5vxlvH701gZd+0GFfxL2FXc3GgjO3HhD6gLGXB6DMWYnGiGvNfirT3I1zSt3uk3lml/AOmiAGq3r1vQC+cUdZhD7g5HlQNAj30FDpuSYZQLMk3YeUqkDtsNbpxa7/932qJozzJAJ7TDtzg/gWQf1uqKIQzEt0RkKtZz2PLyOKBF9dFDZP8Vc0Z5fYaviSCgo0NswPBwRytAU921r9osIZiIbHFl7LPu67YmGw9jB4JqtNgw4maSJOryLwL8AsR0HNoaKIKm46JnUOj+NaICsQrYzfFNhBM2P2F27gOh+j+Gf3DAcotlmjX0jgE6OZUzWA9OT59oZ07zbsdrkzw+WLcSMwMNQeDl4j9EqihWhcveqVNb0rkjLaxsGg1pYTidJI+1+XIwUOuGuomi0sY44atBYABSiEizqobts9fytiJyGs65VRLcElFOGL2ALoqGeeF6SXGLBFJITv29dkwtjCBeVOAUXzuJL387P3P6iEW5qDC4BpnlegXLJtzvuOJ08xi9+Vy++e0KeY3KZqlFftDdq5FLt7cYJiJF+rjXCY+Q/MlpmgeLV/IlHtWAg5UqzMiN0x1BKT1w7geAUMtNP5zDz9xezSCxKtvyONynDklhzLWIYJCEtk4GnNLbIZPbDxQoEYlS9hiXQ/pXOsajkgo96kKmgU3DV27S0HgNQ9li5vV+oxxaykyNp0D8kaTCX7FxfCxJH2sIv7IGykgw7rmBXXnjd3qw6p2TKcj+z79qPoHsug/qE+QjQBkx3PhmruemOreuUCic8VrVxy4u/JjQ7SFzN2C+p/jFVuk5Em1zbABYgfy53sUh4S/F1JjGsgy62WTWT0iR0l7Mdk50ji/2/qJZ/uWTarwhMVfHVMRE/JlEUpQHi8BRnLk5GiROWBxZKdzFuFOasfcy367P+dlAa0ylAmbXYNCxrQLg5xml+z1qbdqcBlPjD2w5JWWtR5IrTfL6BXsW9baQTljuzr2YCPZplQ4YAnCaYilmV61WaP/lHZud5MBdvVR1Yh6QMY=",
            "1; BN6PR07MB3457;\n\t6:EmjHdJk/ukRTvr2Epho7Jk1rGr86kFCFeFO7IGL8vkxDZz3tGXAbA6rUy23G4WAlcFHdKoJnQRz5RYlULJEbt6RBBRR7ip7VnkykeY4hUpUnH0107Tit0BFnK7MvOTVjEyr9U9k9y/JXnom509+27r4RY08Fna1pBhkD7uqsQJ7drro+GHtTZgqH02ZSycJVeTfQoO6gKK3HrFe/DduRj7/b9SWpJB1xgRcOmpY+vc8FDZoWAmHzQzWjEkpAsDugxuL5KsWJIV8sfYer9GLHXztFKZp91O79OAVpKF2orrtGw24eX1xoDYr13aOVi5A0PfSMiUNchA95ejnL/Ot4qLWSXYEAw86+1jACPTgRiKoGidt6UJlTanKyRiqDx0U1W00hC6lYAGt4NHf2wGC+L/4col8QvWGRxQPqhCrvg1hR4nlrG0m9+CDQEhYwoptHKWPg1aKj03HecslV0+0LnA==;\n\t5:1GFwBrYkJz2tXR35K0QbJpaJv43hLvLUC5jL8W0hKKrBolnPM4Xr+7qLs33nkNVWuU/UQ0sTjjRkyMBi6MgmuFpatkX9YBya3L48P1AMCufpV/sIjHPf0g7AeoJg6hBSukcKlTLQyvIW7gLpxpz6rV0xIK9jZyEcVHXdRkeExMI=;\n\t24:s9kAzl/tzxqinv2RIi+e5Ju/476kJ62HG0orlIJbFAIBEKZLMMGRxAPCDedKiyA6UL+mKdY/oshn2ZSRBUgnsENMvsUwcevLEKvo2JJO3PY=",
            "1; BN6PR07MB3457;\n\t7:qnfIZlPOkJGPDrDhjEw9ofU/dJY2buZRTWNKZEo/Cb6grhS6L7ffh+Wmm2ZxiJr6q1aUhRWqgSa/ndxr98AINu8fJfFwzNy8MiGQ6aLE1G05AJggu5HaH9v0Vs8zsxR+ht575SXEXHzuKRdJKe2WWuGQhvpctBfpJE2mPbQQBXyuLIqBdA9lRq2sUedVCAXRJITtTvB6Yr4D+QbGOTss6cmWGXTzp98GypqatAnpjTBe2RiS+yWJblCB+uvbBgSm"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN6PR07MB3457:",
        "X-Microsoft-Antispam-PRVS": "<BN6PR07MB3457B089A522E1FBA6C4DC2E80BA0@BN6PR07MB3457.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(131327999870524)(228905959029699); ",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);\n\tSRVR:BN6PR07MB3457; BCL:0; PCL:0; RULEID:; SRVR:BN6PR07MB3457; ",
        "X-Forefront-PRVS": "0634F37BFF",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(39380400002)(346002)(376002)(366004)(396003)(39850400004)(189003)(199004)(51416003)(446003)(47776003)(81166006)(2616005)(16526019)(5660300001)(305945005)(11346002)(956004)(16586007)(8936002)(1076002)(72206003)(69596002)(107886003)(81156014)(106356001)(3846002)(476003)(486006)(6512007)(7736002)(4326008)(8676002)(76176011)(1857600001)(48376002)(68736007)(66066001)(97736004)(53416004)(6666003)(52116002)(105586002)(59450400001)(50466002)(316002)(26005)(6506007)(50226002)(53936002)(42882007)(25786009)(5009440100003)(575784001)(478600001)(36756003)(6486002)(6116002)(386003)(2906002)(42262002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3457;\n\tH:ltp-pvn.caveonetworks.com; \n\tFPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "kfX6/McElGAi+S8F02LM7m7ab2bU6kFwR3qVuBfKZ+70OwTCD2aku6dP8zVtWrGMs+fk1pLIis/cqC+3I5JGRgbBR1b7C2DhsxckeCz6UafOgVLNFNFc0F+31tZyWi3lyoV1pYbjzQ5MrIfeXsyRxHtWqKtH8CDI2q0x1sB+/38jNmYZ+hWv8eID8MBe1mYg",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Apr 2018 15:13:53.6669\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "8b3914d5-20b4-4e24-e50a-08d59bd1038b",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN6PR07MB3457",
        "Subject": "[dpdk-dev] [PATCH v5 1/4] app/eventdev: add event timer adapter as\n\ta producer",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add event timer adapter as producer option that can be selected by\npassing --prod_type_timerdev.\n\nSigned-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>\nAcked-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>\nAcked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\n---\n\n v5 Changes:\n - Resending cause missing Acked-by.\n\n v4 Changes:\n - reuse struct rte_event_timer's unused data portion to store timestamp\n instead of spilling timestamp into a new cacheline.\n - change bkt_tck_nsec to timer_tick_nsec\n - change nb_bkt_tcks to expiry_nsec\n\n v3 Changes:\n - Add detailed options dump.\n - Fix few typos.\n\n v2 Changes:\n - set timer to NOT_ARMED before trying to arm it.\n - prevent edge cases for timeout_ticks being set to 0.\n\n app/test-eventdev/evt_options.c      |  54 ++++++---\n app/test-eventdev/evt_options.h      |  24 ++++\n app/test-eventdev/test_perf_atq.c    |  10 +-\n app/test-eventdev/test_perf_common.c | 171 +++++++++++++++++++++++++--\n app/test-eventdev/test_perf_common.h |  14 ++-\n app/test-eventdev/test_perf_queue.c  |   7 +-\n 6 files changed, 243 insertions(+), 37 deletions(-)\n\n--\n2.17.0",
    "diff": "diff --git a/app/test-eventdev/evt_options.c b/app/test-eventdev/evt_options.c\nindex 9683b2224..47e37bc9b 100644\n--- a/app/test-eventdev/evt_options.c\n+++ b/app/test-eventdev/evt_options.c\n@@ -27,6 +27,11 @@ evt_options_default(struct evt_options *opt)\n \topt->pool_sz = 16 * 1024;\n \topt->wkr_deq_dep = 16;\n \topt->nb_pkts = (1ULL << 26); /* do ~64M packets */\n+\topt->nb_timers = 1E8;\n+\topt->nb_timer_adptrs = 1;\n+\topt->timer_tick_nsec = 1E3; /* 1000ns ~ 1us */\n+\topt->max_tmo_nsec = 1E5;  /* 100000ns ~100us */\n+\topt->expiry_nsec = 1E4;   /* 10000ns ~10us */\n \topt->prod_type = EVT_PROD_TYPE_SYNT;\n }\n\n@@ -86,6 +91,13 @@ evt_parse_eth_prod_type(struct evt_options *opt, const char *arg __rte_unused)\n \treturn 0;\n }\n\n+static int\n+evt_parse_timer_prod_type(struct evt_options *opt, const char *arg __rte_unused)\n+{\n+\topt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR;\n+\treturn 0;\n+}\n+\n static int\n evt_parse_test_name(struct evt_options *opt, const char *arg)\n {\n@@ -169,7 +181,10 @@ usage(char *program)\n \t\t\"\\t--worker_deq_depth : dequeue depth of the worker\\n\"\n \t\t\"\\t--fwd_latency      : perform fwd_latency measurement\\n\"\n \t\t\"\\t--queue_priority   : enable queue priority\\n\"\n-\t\t\"\\t--prod_type_ethdev : use ethernet device as producer\\n.\"\n+\t\t\"\\t--prod_type_ethdev : use ethernet device as producer.\\n\"\n+\t\t\"\\t--prod_type_timerdev : use event timer device as producer.\\n\"\n+\t\t\"\\t                     expity_nsec would be the timeout\\n\"\n+\t\t\"\\t                     in ns.\\n\"\n \t\t);\n \tprintf(\"available tests:\\n\");\n \tevt_test_dump_names();\n@@ -217,22 +232,23 @@ evt_parse_sched_type_list(struct evt_options *opt, const char *arg)\n }\n\n static struct option lgopts[] = {\n-\t{ EVT_NB_FLOWS,         1, 0, 0 },\n-\t{ EVT_DEVICE,           1, 0, 0 },\n-\t{ EVT_VERBOSE,          1, 0, 0 },\n-\t{ EVT_TEST,             1, 0, 0 },\n-\t{ EVT_PROD_LCORES,      1, 0, 0 },\n-\t{ EVT_WORK_LCORES,      1, 0, 0 },\n-\t{ EVT_SOCKET_ID,        1, 0, 0 },\n-\t{ EVT_POOL_SZ,          1, 0, 0 },\n-\t{ EVT_NB_PKTS,          1, 0, 0 },\n-\t{ EVT_WKR_DEQ_DEP,      1, 0, 0 },\n-\t{ EVT_SCHED_TYPE_LIST,  1, 0, 0 },\n-\t{ EVT_FWD_LATENCY,      0, 0, 0 },\n-\t{ EVT_QUEUE_PRIORITY,   0, 0, 0 },\n-\t{ EVT_PROD_ETHDEV,      0, 0, 0 },\n-\t{ EVT_HELP,             0, 0, 0 },\n-\t{ NULL,                 0, 0, 0 }\n+\t{ EVT_NB_FLOWS,            1, 0, 0 },\n+\t{ EVT_DEVICE,              1, 0, 0 },\n+\t{ EVT_VERBOSE,             1, 0, 0 },\n+\t{ EVT_TEST,                1, 0, 0 },\n+\t{ EVT_PROD_LCORES,         1, 0, 0 },\n+\t{ EVT_WORK_LCORES,         1, 0, 0 },\n+\t{ EVT_SOCKET_ID,           1, 0, 0 },\n+\t{ EVT_POOL_SZ,             1, 0, 0 },\n+\t{ EVT_NB_PKTS,             1, 0, 0 },\n+\t{ EVT_WKR_DEQ_DEP,         1, 0, 0 },\n+\t{ EVT_SCHED_TYPE_LIST,     1, 0, 0 },\n+\t{ EVT_FWD_LATENCY,         0, 0, 0 },\n+\t{ EVT_QUEUE_PRIORITY,      0, 0, 0 },\n+\t{ EVT_PROD_ETHDEV,         0, 0, 0 },\n+\t{ EVT_PROD_TIMERDEV,       0, 0, 0 },\n+\t{ EVT_HELP,                0, 0, 0 },\n+\t{ NULL,                    0, 0, 0 }\n };\n\n static int\n@@ -255,11 +271,12 @@ evt_opts_parse_long(int opt_idx, struct evt_options *opt)\n \t\t{ EVT_FWD_LATENCY, evt_parse_fwd_latency},\n \t\t{ EVT_QUEUE_PRIORITY, evt_parse_queue_priority},\n \t\t{ EVT_PROD_ETHDEV, evt_parse_eth_prod_type},\n+\t\t{ EVT_PROD_TIMERDEV, evt_parse_timer_prod_type},\n \t};\n\n \tfor (i = 0; i < RTE_DIM(parsermap); i++) {\n \t\tif (strncmp(lgopts[opt_idx].name, parsermap[i].lgopt_name,\n-\t\t\t\tstrlen(parsermap[i].lgopt_name)) == 0)\n+\t\t\t\tstrlen(lgopts[opt_idx].name)) == 0)\n \t\t\treturn parsermap[i].parser_fn(opt, optarg);\n \t}\n\n@@ -305,6 +322,7 @@ evt_options_dump(struct evt_options *opt)\n \tevt_dump(\"pool_sz\", \"%d\", opt->pool_sz);\n \tevt_dump(\"master lcore\", \"%d\", rte_get_master_lcore());\n \tevt_dump(\"nb_pkts\", \"%\"PRIu64, opt->nb_pkts);\n+\tevt_dump(\"nb_timers\", \"%\"PRIu64, opt->nb_timers);\n \tevt_dump_begin(\"available lcores\");\n \tRTE_LCORE_FOREACH(lcore_id)\n \t\tprintf(\"%d \", lcore_id);\ndiff --git a/app/test-eventdev/evt_options.h b/app/test-eventdev/evt_options.h\nindex 46d122229..b51d8d5b3 100644\n--- a/app/test-eventdev/evt_options.h\n+++ b/app/test-eventdev/evt_options.h\n@@ -9,6 +9,7 @@\n #include <stdbool.h>\n\n #include <rte_common.h>\n+#include <rte_ethdev.h>\n #include <rte_eventdev.h>\n #include <rte_lcore.h>\n\n@@ -31,12 +32,14 @@\n #define EVT_FWD_LATENCY          (\"fwd_latency\")\n #define EVT_QUEUE_PRIORITY       (\"queue_priority\")\n #define EVT_PROD_ETHDEV          (\"prod_type_ethdev\")\n+#define EVT_PROD_TIMERDEV        (\"prod_type_timerdev\")\n #define EVT_HELP                 (\"help\")\n\n enum evt_prod_type {\n \tEVT_PROD_TYPE_NONE,\n \tEVT_PROD_TYPE_SYNT,          /* Producer type Synthetic i.e. CPU. */\n \tEVT_PROD_TYPE_ETH_RX_ADPTR,  /* Producer type Eth Rx Adapter. */\n+\tEVT_PROD_TYPE_EVENT_TIMER_ADPTR,  /* Producer type Timer Adapter. */\n \tEVT_PROD_TYPE_MAX,\n };\n\n@@ -52,11 +55,18 @@ struct evt_options {\n \tint nb_stages;\n \tint verbose_level;\n \tuint64_t nb_pkts;\n+\tuint8_t nb_timer_adptrs;\n+\tuint64_t nb_timers;\n+\tuint64_t timer_tick_nsec;\n+\tuint64_t optm_timer_tick_nsec;\n+\tuint64_t max_tmo_nsec;\n+\tuint64_t expiry_nsec;\n \tuint16_t wkr_deq_dep;\n \tuint8_t dev_id;\n \tuint32_t fwd_latency:1;\n \tuint32_t q_priority:1;\n \tenum evt_prod_type prod_type;\n+\tuint8_t timdev_cnt;\n };\n\n void evt_options_default(struct evt_options *opt);\n@@ -262,6 +272,20 @@ evt_dump_producer_type(struct evt_options *opt)\n \tcase EVT_PROD_TYPE_ETH_RX_ADPTR:\n \t\tsnprintf(name, EVT_PROD_MAX_NAME_LEN,\n \t\t\t\t\"Ethdev Rx Adapter producers\");\n+\t\tevt_dump(\"nb_ethdev\", \"%d\", rte_eth_dev_count());\n+\t\tbreak;\n+\tcase EVT_PROD_TYPE_EVENT_TIMER_ADPTR:\n+\t\tsnprintf(name, EVT_PROD_MAX_NAME_LEN,\n+\t\t\t\t\"Event timer adapter producer\");\n+\t\tevt_dump(\"nb_timer_adapters\", \"%d\", opt->nb_timer_adptrs);\n+\t\tevt_dump(\"max_tmo_nsec\", \"%\"PRIu64\"\", opt->max_tmo_nsec);\n+\t\tevt_dump(\"expiry_nsec\", \"%\"PRIu64\"\", opt->expiry_nsec);\n+\t\tif (opt->optm_timer_tick_nsec)\n+\t\t\tevt_dump(\"optm_timer_tick_ns\", \"%\"PRIu64\"\",\n+\t\t\t\t\topt->optm_timer_tick_nsec);\n+\t\telse\n+\t\t\tevt_dump(\"timer_tick_ns\", \"%\"PRIu64\"\",\n+\t\t\t\t\topt->timer_tick_nsec);\n \t\tbreak;\n \t}\n \tevt_dump(\"prod_type\", \"%s\", name);\ndiff --git a/app/test-eventdev/test_perf_atq.c b/app/test-eventdev/test_perf_atq.c\nindex b36b22a77..b3a312722 100644\n--- a/app/test-eventdev/test_perf_atq.c\n+++ b/app/test-eventdev/test_perf_atq.c\n@@ -43,15 +43,12 @@ perf_atq_worker(void *arg, const int enable_fwd_latency)\n \twhile (t->done == false) {\n \t\tuint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0);\n\n-\t\tif (enable_fwd_latency)\n-\t\t\trte_prefetch0(ev.event_ptr);\n-\n \t\tif (!event) {\n \t\t\trte_pause();\n \t\t\tcontinue;\n \t\t}\n\n-\t\tif (enable_fwd_latency)\n+\t\tif (enable_fwd_latency && !prod_timer_type)\n \t\t/* first stage in pipeline, mark ts to compute fwd latency */\n \t\t\tatq_mark_fwd_latency(&ev);\n\n@@ -90,7 +87,7 @@ perf_atq_worker_burst(void *arg, const int enable_fwd_latency)\n \t\t}\n\n \t\tfor (i = 0; i < nb_rx; i++) {\n-\t\t\tif (enable_fwd_latency) {\n+\t\t\tif (enable_fwd_latency && !prod_timer_type) {\n \t\t\t\trte_prefetch0(ev[i+1].event_ptr);\n \t\t\t\t/* first stage in pipeline.\n \t\t\t\t * mark time stamp to compute fwd latency\n@@ -163,7 +160,8 @@ perf_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt)\n \tstruct rte_event_dev_info dev_info;\n\n \tnb_ports = evt_nr_active_lcores(opt->wlcores);\n-\tnb_ports += opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR ? 0 :\n+\tnb_ports += (opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR ||\n+\t\t\topt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) ? 0 :\n \t\tevt_nr_active_lcores(opt->plcores);\n\n \tnb_queues = atq_nb_event_queues(opt);\ndiff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c\nindex 59fa0a49e..b6cc00e60 100644\n--- a/app/test-eventdev/test_perf_common.c\n+++ b/app/test-eventdev/test_perf_common.c\n@@ -72,6 +72,67 @@ perf_producer(void *arg)\n \treturn 0;\n }\n\n+static inline int\n+perf_event_timer_producer(void *arg)\n+{\n+\tstruct prod_data *p  = arg;\n+\tstruct test_perf *t = p->t;\n+\tstruct evt_options *opt = t->opt;\n+\tuint32_t flow_counter = 0;\n+\tuint64_t count = 0;\n+\tuint64_t arm_latency = 0;\n+\tconst uint8_t nb_timer_adptrs = opt->nb_timer_adptrs;\n+\tconst uint32_t nb_flows = t->nb_flows;\n+\tconst uint64_t nb_timers = opt->nb_timers;\n+\tstruct rte_mempool *pool = t->pool;\n+\tstruct perf_elt *m;\n+\tstruct rte_event_timer_adapter **adptr = t->timer_adptr;\n+\tuint64_t timeout_ticks = opt->expiry_nsec / opt->timer_tick_nsec;\n+\n+\ttimeout_ticks = opt->optm_timer_tick_nsec ?\n+\t\t\t(timeout_ticks * opt->timer_tick_nsec)\n+\t\t\t/ opt->optm_timer_tick_nsec : timeout_ticks;\n+\ttimeout_ticks += timeout_ticks ? 0 : 1;\n+\tconst struct rte_event_timer tim = {\n+\t\t.ev.op = RTE_EVENT_OP_NEW,\n+\t\t.ev.queue_id = p->queue_id,\n+\t\t.ev.sched_type = t->opt->sched_type_list[0],\n+\t\t.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,\n+\t\t.ev.event_type =  RTE_EVENT_TYPE_TIMER,\n+\t\t.state = RTE_EVENT_TIMER_NOT_ARMED,\n+\t\t.timeout_ticks = timeout_ticks,\n+\t};\n+\n+\tif (opt->verbose_level > 1)\n+\t\tprintf(\"%s(): lcore %d\\n\", __func__, rte_lcore_id());\n+\n+\twhile (count < nb_timers && t->done == false) {\n+\t\tif (rte_mempool_get(pool, (void **)&m) < 0)\n+\t\t\tcontinue;\n+\n+\t\tm->tim = tim;\n+\t\tm->tim.ev.flow_id = flow_counter++ % nb_flows;\n+\t\tm->tim.ev.event_ptr = m;\n+\t\tm->timestamp = rte_get_timer_cycles();\n+\t\twhile (rte_event_timer_arm_burst(\n+\t\t\t\tadptr[flow_counter % nb_timer_adptrs],\n+\t\t\t\t(struct rte_event_timer **)&m, 1) != 1) {\n+\t\t\tif (t->done)\n+\t\t\t\tbreak;\n+\t\t\trte_pause();\n+\t\t\tm->timestamp = rte_get_timer_cycles();\n+\t\t}\n+\t\tarm_latency += rte_get_timer_cycles() - m->timestamp;\n+\t\tcount++;\n+\t}\n+\tfflush(stdout);\n+\trte_delay_ms(1000);\n+\tprintf(\"%s(): lcore %d Average event timer arm latency = %.3f us\\n\",\n+\t\t\t__func__, rte_lcore_id(), (float)(arm_latency / count) /\n+\t\t\t(rte_get_timer_hz() / 1000000));\n+\treturn 0;\n+}\n+\n static int\n perf_producer_wrapper(void *arg)\n {\n@@ -80,6 +141,8 @@ perf_producer_wrapper(void *arg)\n \t/* Launch the producer function only in case of synthetic producer. */\n \tif (t->opt->prod_type == EVT_PROD_TYPE_SYNT)\n \t\treturn perf_producer(arg);\n+\telse if (t->opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR)\n+\t\treturn perf_event_timer_producer(arg);\n \treturn 0;\n }\n\n@@ -146,8 +209,7 @@ perf_launch_lcores(struct evt_test *test, struct evt_options *opt,\n \t\tport_idx++;\n \t}\n\n-\tconst uint64_t total_pkts = opt->nb_pkts *\n-\t\t\tevt_nr_active_lcores(opt->plcores);\n+\tconst uint64_t total_pkts = t->outstand_pkts;\n\n \tuint64_t dead_lock_cycles = rte_get_timer_cycles();\n \tint64_t dead_lock_remaining  =  total_pkts;\n@@ -189,7 +251,9 @@ perf_launch_lcores(struct evt_test *test, struct evt_options *opt,\n\n \t\t\tif (remaining <= 0) {\n \t\t\t\tt->result = EVT_TEST_SUCCESS;\n-\t\t\t\tif (opt->prod_type == EVT_PROD_TYPE_SYNT) {\n+\t\t\t\tif (opt->prod_type == EVT_PROD_TYPE_SYNT ||\n+\t\t\t\t\topt->prod_type ==\n+\t\t\t\t\tEVT_PROD_TYPE_EVENT_TIMER_ADPTR) {\n \t\t\t\t\tt->done = true;\n \t\t\t\t\trte_smp_wmb();\n \t\t\t\t\tbreak;\n@@ -283,6 +347,65 @@ perf_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride,\n \treturn ret;\n }\n\n+static int\n+perf_event_timer_adapter_setup(struct test_perf *t)\n+{\n+\tint i;\n+\tint ret;\n+\tstruct rte_event_timer_adapter_info adapter_info;\n+\tstruct rte_event_timer_adapter *wl;\n+\tuint8_t nb_producers = evt_nr_active_lcores(t->opt->plcores);\n+\tuint8_t flags = RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES;\n+\n+\tif (nb_producers == 1)\n+\t\tflags |= RTE_EVENT_TIMER_ADAPTER_F_SP_PUT;\n+\n+\tfor (i = 0; i < t->opt->nb_timer_adptrs; i++) {\n+\t\tstruct rte_event_timer_adapter_conf config = {\n+\t\t\t.event_dev_id = t->opt->dev_id,\n+\t\t\t.timer_adapter_id = i,\n+\t\t\t.timer_tick_ns = t->opt->timer_tick_nsec,\n+\t\t\t.max_tmo_ns = t->opt->max_tmo_nsec,\n+\t\t\t.nb_timers = 2 * 1024 * 1024,\n+\t\t\t.flags = flags,\n+\t\t};\n+\n+\t\twl = rte_event_timer_adapter_create(&config);\n+\t\tif (wl == NULL) {\n+\t\t\tevt_err(\"failed to create event timer ring %d\", i);\n+\t\t\treturn rte_errno;\n+\t\t}\n+\n+\t\tmemset(&adapter_info, 0,\n+\t\t\t\tsizeof(struct rte_event_timer_adapter_info));\n+\t\trte_event_timer_adapter_get_info(wl, &adapter_info);\n+\t\tt->opt->optm_timer_tick_nsec = adapter_info.min_resolution_ns;\n+\n+\t\tif (!(adapter_info.caps &\n+\t\t\t\tRTE_EVENT_TIMER_ADAPTER_CAP_INTERNAL_PORT)) {\n+\t\t\tuint32_t service_id;\n+\n+\t\t\trte_event_timer_adapter_service_id_get(wl,\n+\t\t\t\t\t&service_id);\n+\t\t\tret = evt_service_setup(service_id);\n+\t\t\tif (ret) {\n+\t\t\t\tevt_err(\"Failed to setup service core\"\n+\t\t\t\t\t\t\" for timer adapter\\n\");\n+\t\t\t\treturn ret;\n+\t\t\t}\n+\t\t\trte_service_runstate_set(service_id, 1);\n+\t\t}\n+\n+\t\tret = rte_event_timer_adapter_start(wl);\n+\t\tif (ret) {\n+\t\t\tevt_err(\"failed to Start event timer adapter %d\", i);\n+\t\t\treturn ret;\n+\t\t}\n+\t\tt->timer_adptr[i] = wl;\n+\t}\n+\treturn 0;\n+}\n+\n int\n perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,\n \t\t\t\tuint8_t stride, uint8_t nb_queues,\n@@ -326,6 +449,18 @@ perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,\n \t\tret = perf_event_rx_adapter_setup(opt, stride, *port_conf);\n \t\tif (ret)\n \t\t\treturn ret;\n+\t} else if (opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) {\n+\t\tprod = 0;\n+\t\tfor ( ; port < perf_nb_event_ports(opt); port++) {\n+\t\t\tstruct prod_data *p = &t->prod[port];\n+\t\t\tp->queue_id = prod * stride;\n+\t\t\tp->t = t;\n+\t\t\tprod++;\n+\t\t}\n+\n+\t\tret = perf_event_timer_adapter_setup(t);\n+\t\tif (ret)\n+\t\t\treturn ret;\n \t} else {\n \t\tprod = 0;\n \t\tfor ( ; port < perf_nb_event_ports(opt); port++) {\n@@ -415,10 +550,13 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues)\n \t}\n\n \t/* Fixups */\n-\tif (opt->nb_stages == 1 && opt->fwd_latency) {\n+\tif ((opt->nb_stages == 1 &&\n+\t\t\topt->prod_type != EVT_PROD_TYPE_EVENT_TIMER_ADPTR) &&\n+\t\t\topt->fwd_latency) {\n \t\tevt_info(\"fwd_latency is valid when nb_stages > 1, disabling\");\n \t\topt->fwd_latency = 0;\n \t}\n+\n \tif (opt->fwd_latency && !opt->q_priority) {\n \t\tevt_info(\"enabled queue priority for latency measurement\");\n \t\topt->q_priority = 1;\n@@ -447,8 +585,13 @@ perf_opt_dump(struct evt_options *opt, uint8_t nb_queues)\n void\n perf_eventdev_destroy(struct evt_test *test, struct evt_options *opt)\n {\n-\tRTE_SET_USED(test);\n+\tint i;\n+\tstruct test_perf *t = evt_test_priv(test);\n\n+\tif (opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) {\n+\t\tfor (i = 0; i < opt->nb_timer_adptrs; i++)\n+\t\t\trte_event_timer_adapter_stop(t->timer_adptr[i]);\n+\t}\n \trte_event_dev_stop(opt->dev_id);\n \trte_event_dev_close(opt->dev_id);\n }\n@@ -488,7 +631,8 @@ perf_ethdev_setup(struct evt_test *test, struct evt_options *opt)\n \t\t},\n \t};\n\n-\tif (opt->prod_type == EVT_PROD_TYPE_SYNT)\n+\tif (opt->prod_type == EVT_PROD_TYPE_SYNT ||\n+\t\t\topt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR)\n \t\treturn 0;\n\n \tif (!rte_eth_dev_count()) {\n@@ -544,7 +688,8 @@ perf_mempool_setup(struct evt_test *test, struct evt_options *opt)\n {\n \tstruct test_perf *t = evt_test_priv(test);\n\n-\tif (opt->prod_type == EVT_PROD_TYPE_SYNT) {\n+\tif (opt->prod_type == EVT_PROD_TYPE_SYNT ||\n+\t\t\topt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) {\n \t\tt->pool = rte_mempool_create(test->name, /* mempool name */\n \t\t\t\topt->pool_sz, /* number of elements*/\n \t\t\t\tsizeof(struct perf_elt), /* element size*/\n@@ -594,10 +739,18 @@ perf_test_setup(struct evt_test *test, struct evt_options *opt)\n\n \tstruct test_perf *t = evt_test_priv(test);\n\n-\tt->outstand_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->plcores);\n+\tif (opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) {\n+\t\tt->outstand_pkts = opt->nb_timers *\n+\t\t\tevt_nr_active_lcores(opt->plcores);\n+\t\tt->nb_pkts = opt->nb_timers;\n+\t} else {\n+\t\tt->outstand_pkts = opt->nb_pkts *\n+\t\t\tevt_nr_active_lcores(opt->plcores);\n+\t\tt->nb_pkts = opt->nb_pkts;\n+\t}\n+\n \tt->nb_workers = evt_nr_active_lcores(opt->wlcores);\n \tt->done = false;\n-\tt->nb_pkts = opt->nb_pkts;\n \tt->nb_flows = opt->nb_flows;\n \tt->result = EVT_TEST_FAILED;\n \tt->opt = opt;\ndiff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h\nindex 9ad99733b..d8fbee6d8 100644\n--- a/app/test-eventdev/test_perf_common.h\n+++ b/app/test-eventdev/test_perf_common.h\n@@ -13,6 +13,7 @@\n #include <rte_ethdev.h>\n #include <rte_eventdev.h>\n #include <rte_event_eth_rx_adapter.h>\n+#include <rte_event_timer_adapter.h>\n #include <rte_lcore.h>\n #include <rte_malloc.h>\n #include <rte_mempool.h>\n@@ -39,6 +40,7 @@ struct prod_data {\n \tstruct test_perf *t;\n } __rte_cache_aligned;\n\n+\n struct test_perf {\n \t/* Don't change the offset of \"done\". Signal handler use this memory\n \t * to terminate all lcores work.\n@@ -54,10 +56,18 @@ struct test_perf {\n \tstruct worker_data worker[EVT_MAX_PORTS];\n \tstruct evt_options *opt;\n \tuint8_t sched_type_list[EVT_MAX_STAGES] __rte_cache_aligned;\n+\tstruct rte_event_timer_adapter *timer_adptr[\n+\t\tRTE_EVENT_TIMER_ADAPTER_NUM_MAX] __rte_cache_aligned;\n } __rte_cache_aligned;\n\n struct perf_elt {\n-\tuint64_t timestamp;\n+\tunion {\n+\t\tstruct rte_event_timer tim;\n+\t\tstruct {\n+\t\t\tchar pad[offsetof(struct rte_event_timer, user_meta)];\n+\t\t\tuint64_t timestamp;\n+\t\t};\n+\t};\n } __rte_cache_aligned;\n\n #define BURST_SIZE 16\n@@ -68,6 +78,8 @@ struct perf_elt {\n \tstruct evt_options *opt = t->opt;\\\n \tconst uint8_t dev = w->dev_id;\\\n \tconst uint8_t port = w->port_id;\\\n+\tconst uint8_t prod_timer_type = \\\n+\t\topt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR;\\\n \tuint8_t *const sched_type_list = &t->sched_type_list[0];\\\n \tstruct rte_mempool *const pool = t->pool;\\\n \tconst uint8_t nb_stages = t->opt->nb_stages;\\\ndiff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c\nindex db8f2f3e5..74469a5ee 100644\n--- a/app/test-eventdev/test_perf_queue.c\n+++ b/app/test-eventdev/test_perf_queue.c\n@@ -49,7 +49,7 @@ perf_queue_worker(void *arg, const int enable_fwd_latency)\n \t\t\trte_pause();\n \t\t\tcontinue;\n \t\t}\n-\t\tif (enable_fwd_latency)\n+\t\tif (enable_fwd_latency && !prod_timer_type)\n \t\t/* first q in pipeline, mark timestamp to compute fwd latency */\n \t\t\tmark_fwd_latency(&ev, nb_stages);\n\n@@ -88,7 +88,7 @@ perf_queue_worker_burst(void *arg, const int enable_fwd_latency)\n \t\t}\n\n \t\tfor (i = 0; i < nb_rx; i++) {\n-\t\t\tif (enable_fwd_latency) {\n+\t\t\tif (enable_fwd_latency && !prod_timer_type) {\n \t\t\t\trte_prefetch0(ev[i+1].event_ptr);\n \t\t\t\t/* first queue in pipeline.\n \t\t\t\t * mark time stamp to compute fwd latency\n@@ -161,7 +161,8 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt)\n \tstruct rte_event_dev_info dev_info;\n\n \tnb_ports = evt_nr_active_lcores(opt->wlcores);\n-\tnb_ports += opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR ? 0 :\n+\tnb_ports += opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR ||\n+\t\t opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR ? 0 :\n \t\tevt_nr_active_lcores(opt->plcores);\n\n \tnb_queues = perf_queue_nb_event_queues(opt);\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "1/4"
    ]
}