get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 42786,
    "url": "https://patches.dpdk.org/api/patches/42786/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1531289248-20025-9-git-send-email-anoob.joseph@caviumnetworks.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1531289248-20025-9-git-send-email-anoob.joseph@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1531289248-20025-9-git-send-email-anoob.joseph@caviumnetworks.com",
    "date": "2018-07-11T06:07:24",
    "name": "[v2,08/12] examples/l2fwd: move periodic tasks to new function",
    "commit_ref": null,
    "pull_url": null,
    "state": "rejected",
    "archived": true,
    "hash": "154f72648433e5c8865987ae4dfb1d6f44d40c36",
    "submitter": {
        "id": 893,
        "url": "https://patches.dpdk.org/api/people/893/?format=api",
        "name": "Anoob Joseph",
        "email": "anoob.joseph@caviumnetworks.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1531289248-20025-9-git-send-email-anoob.joseph@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 509,
            "url": "https://patches.dpdk.org/api/series/509/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=509",
            "date": "2018-07-11T06:07:16",
            "name": "preparing l2fwd for eventmode additions",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/509/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/42786/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/42786/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 064961B4FE;\n\tWed, 11 Jul 2018 08:08:21 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0045.outbound.protection.outlook.com [104.47.36.45])\n\tby dpdk.org (Postfix) with ESMTP id EF40D1B4F2\n\tfor <dev@dpdk.org>; Wed, 11 Jul 2018 08:08:18 +0200 (CEST)",
            "from ajoseph83.caveonetworks.com.caveonetworks.com (115.113.156.2)\n\tby BN7PR07MB4898.namprd07.prod.outlook.com (2603:10b6:406:ef::27)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.21;\n\tWed, 11 Jul 2018 06:08:16 +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:X-MS-Exchange-SenderADCheck;\n\tbh=wTUWZ6YXvnUOs7mzK2kAno2elRpdK5zaoty3pQKLr9k=;\n\tb=DKaBUOC7mR+QVa6E2isuu7nAVFF5S5hWG8LdnSC1bXW1tLPBCRvLiiUpwVNPKDd8hZ4KVs5rRPZcEmIdTKSc6X1lFjNbPcsgL3Sr+nucMv5O0UQUGvAXzznBwEyPAiD+Vay1LL4QuA/yyPI9cHWmYBK417nWXMe4wrl9pPZ+DAs=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Anoob.Joseph@cavium.com; ",
        "From": "Anoob Joseph <anoob.joseph@caviumnetworks.com>",
        "To": "Bruce Richardson <bruce.richardson@intel.com>,\n\tPablo de Lara <pablo.de.lara.guarch@intel.com>",
        "Cc": "Anoob Joseph <anoob.joseph@caviumnetworks.com>,\n\tJerin Jacob <jerin.jacob@caviumnetworks.com>,\n\tNarayana Prasad <narayanaprasad.athreya@caviumnetworks.com>, dev@dpdk.org",
        "Date": "Wed, 11 Jul 2018 11:37:24 +0530",
        "Message-Id": "<1531289248-20025-9-git-send-email-anoob.joseph@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1531289248-20025-1-git-send-email-anoob.joseph@caviumnetworks.com>",
        "References": "<1528976946-14396-1-git-send-email-anoob.joseph@caviumnetworks.com>\n\t<1531289248-20025-1-git-send-email-anoob.joseph@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "BMXPR01CA0027.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:c::13) To BN7PR07MB4898.namprd07.prod.outlook.com\n\t(2603:10b6:406:ef::27)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "8e3c51fd-4696-421c-e889-08d5e6f4b234",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020);\n\tSRVR:BN7PR07MB4898; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN7PR07MB4898;\n\t3:8RPOgI3PdO8gWfUb3SvdZ7Fvs3o50RqoTltyWrvEfUsNDvjKSHgqUVwispm9Ijhk3Nzv1bDZGSVjTpe+zxZrkYRlDLPpnh57F+XEB35j42jkaEV2X3SqNu++qxXKxhpTgyZS05059uaN50O8yjSOKgA/B2jwZ4VVCoTDdMTSQqMFAyqHLQ1skOdX44hMwLeA/pKLNh8XFmrFZlYB9wKtKGRewiVK49FK9LZvgnzKC7TmeC+vSul/6p5Gq0OfsoXy;\n\t25:hrgt8dhJFRE3m1JqMIRZ4cByNVNho7mZbM0D/24Ys6zHEw42qgqSKFk99vxIbOseyELm1vHYUsGz+b5ADpSjmgLm4VRRAnLE6LAutS5r2f7sr6G5RX+YlUw9v8bXRu/yXTt/NxUJiZMWDWOsm3tcKfbTF6hX1sdRI5/TB9aLJeloKc5jv7lRZFG5cjdQmjH7wnrkT8yGICAa7DOYhgWBI2hv6JATJ60DyESr+QM7Ee4EKdvvI/TL/Jx5OCrW/xYH3bTv0DoEIyvuqKCbGEn5UAfbQQoXtCKluwuqKSOSXHMb2Cd4Et1MbHfMRKcUyZVgaC9S2aZEHaCk+VPoSlvxkQ==;\n\t31:H2CHQifbfF+DQWKxrayczTHw9bZFi4+wym/sdEal3XQCfsfaGfXDoIfUmUfulgc44cfAfWfdV1Tva4eySJFtnMP/3d5TsG3WIYtpK5Yt+Jgh8uazzCGYSr6uXfkMMBpcj0Wn32bqi9Pnc0KV60NHRXgvwphLgRSECL/WDlStOKCCM2fUCFsCHwpd+4jqn/3QgFdWIwV6I/B3RaTnMNmoJOEApHjoYM0CNS90Mf1fmTA=",
            "1; BN7PR07MB4898;\n\t20:YrDyFQBKeKGlomtrMbp/dOm2M2YeKi7EaolJtjljsKDJKGHm2ciNKdmRqdAzphc2Gym+5K4lRGoMV8uoAnrblFC4ndJt8/mQRfVY81ZlAjduAyCVDsCHTSjyVBGkukS9fk92HMBsU1GX4EUatkQBogrwt/HklG2jN6ng0qQoukfqMFRRj4i4Gz9kGt9Pge8w/WqKDKjv+R4H9BllFFQkxV9I0PNS6eHHkWwldmkR59WuMD+6zF1GB89oaBcscxuihtstmJs1UdxgjDEb9Q2SyfE+Xp4fYBnbkPk6zPWC20AVnnahfxfum5krAjOE42FzIU7sY6CiM1Tc5txR5y3v+VKEl+9inEe9S3CoJFhsAbPxyanL9Au5WAjI3Dk5LF5gMxmCXtD4iXvgCotaHpXRCWkLVYUuuxzF/DTq70A8sbn0myUan3qwVSp1T3LKbh6ALoWhxfcFJm8fobC1UDA8w2eGMS2lue8cTGCnE0temReUCrcdb3QQGUrm50dL+oTSZsldSq0O20Q6h8ZFCFD1D7e8aHcTRK6Re5ArKmQRP50ri4zutiLURa185XmJAwxOuHys8soMi9MKE+Plmsxmb30bC/+YJN/I/qjJq8grxkw=;\n\t4:MPZI+/Mkfcuh2aYHWvRgZQczJw75qBRiKM+iZawP5HhHSFY2YWY5esSJMlD1ZzU5Wf3jOhtMZoj3348gMVoaR/Lg5Bm8iaJtZAkmLRLR9Q27k/ORWCL/zaZVhLXBK9UxH8FlH9cfCMVK/BWtrxymNGiQ3GYvy5nPrfW1CPlABr7ZB+gPsULzrSDnOqlvjnBOqAlDfTQBPlq9pbbpSuBc65ensmc4FyIh/aqo6rUidEiZ2Hg/5ZW4056NL7a4gpcn27IteS01ncimjllp4NWw2A==",
            "=?us-ascii?Q?1; BN7PR07MB4898;\n\t23:2J8SH9rXGZsQ5PzlDdjD/4jk1/xzx2NLhwHTQr4Ss?=\n\tc3a3GGcaVWk+LPtqbyULcnmkdT4RYBt4bRa2ZQFPeXQEShUO0DN8xOpr4BQl6XlQQJrnnJU+QpHvDvgX7/7+fTSwnZ43i50RnrIGCorUp7lfjLMJnNCErdOdy9MHB2ECO8a6hdzIhozkoxcq0h9da1ANC97/EaEvhtNk2BcZPnvCWuYVuiMwj9be5dmtk4TWt+tnLc6kBI0q88Z9uc920sQfXj+kMULl4sDyk+4/z6w22zXKUqjyaY9KImeVO8CKT19JEdenpYWqwCNA0pUwI2rynWMsaHwlYPhou6tEVRqAi3ko0fW08W5UtO71EsNwaNgMf++mdM+yPrKlb79NN7fVECWUdB8cI36rsbJKbFXYO2Dc2OR6yfR424cVa9Vmfihss9Px1rZyqqZbkE6FTyiL2XTgcjHa7SgCb7XJxCXv8L17Fr0bBg9CEuoX5DRbJrg4d8EViT/x1xENbkCMniWV087tfoOzcekMp5N13Qb2lgfXn8e1/3CCBX7n8qRJdyNMu4pRaw3R3KIObpMWIPGMcQkDuxbciwzypbenylJRNzAvxI49t/2UOVeGp8H+gGlGMTLeRlOTHOvmqztPvjIFGRzro7HyGO9dLTGGKaxgsyJqj3HpdnW1LToV1zh629kp2aCc7WgnzbBfJKETGW1VJdzQyhVtQThihCVArKWk8Zo0xzibGUTJiekOzCbo6rKyOXamLaFSnDB512nGCgc+qd+AVfHhPUMgvuu8WxHXuTYq+n1DVlK4wMB0ytUKksCHhX3e9SooBo68GDXSAUxp6c6hv1pNEwKd38CxDFs5xDGgBveerCh9tw0/p/ShdWSP2lQLeK4dosl4dDvHzb+c1qPKpP7MXh0tAScib/91zPHa2NAGgZXNVpqco0mepu3e0jEFI4Kw6Ie7IcC9h3Rs0Mk1Ylr6wzKUPa8IIWE+5dhWy2YUeJ3ye7gcay0+nXvrcnYDQh5Q/qG6j8evLPa27rRwMpJB69a10nOYmU4hjLxYIa0Q859X871JJIKVNOUhmsj7h9MvUQy9cCgqankb8Ol64YELiVNGeqTOByW4r6TkCpyeAfS21E5yZh1JaEh0ZAf682hmYCJJ6fyWFBGXfxFA7J2uCufTWJB9lJe4ErxlFBEEYmr9fMhxYP1ZWfkA8E2yC+R76xysqgdvXiqGV7m5u1u8BO/X8es0mU3MvEQUWS53FJZtIbYi848iopHJP1RO1gmKe94AM9c3kdg",
            "1; BN7PR07MB4898;\n\t6:SXlJq3I29XprYMBfX3NWtUho+exvWFld03zOV66y3LZimIC+CiB2olQTz+jf1FrrFfzeNSAxHrimcibeoPL2yHDdtDkIBeZBP8zxp/Ku4wc6OfM348zlwxnvrGZr1NY28E7cXQJxkhVzCuj3dTdVCIYeMZMKb89K5cRFoijokaCF3uD6dZO8zXK+GaGA0F+vYxES6WvhYwbrV7G8ZMZQaNUOLonNRjqkrJNUc8Td+mlXCM+woZYAXIzzFazVneHk8lhM+290Vp/ymh2EW4pcn8kQb7GWJ1LLceO0Lh5jhF8U16gPx+jEQxHWOkxDk3MHuHaP2S+vwFqe98yyAMf1wWeUQApoY93JI8cbqQQrYo/eCzduR5Si119IkEfgXqKeftTqgjx7jiBCctXsH4z4sFgJh+UobxYa7tKiWBiPyV9OAVT34mUOBXEdOS3enbSp31ppuo2z0YFjmnH8zRJesA==;\n\t5:b1tFC4cFXUeSOBxmMJU0e5geIxjwyY237FI/8lw2kcnlj8lchq9RGKMeXhFCcX6yo7oLs+gNfSTkcwhyEjwSNWOQTpXlYij0FOETQ6+pRg8uhYxDFDryVujo1AueWP8Xgp9X2zPmlNqtEOgGQNjOZvDC7YxT4bt8rOub/KK16Ug=;\n\t24:QtpPgOGraAmK0T6VGrGTE+QXU3gQ1fC/eZ0suG51/Io3KlvFG3XhuwKsA17Qr0dhSeXrLmeT4sSrIdcaLd6SnUl9WgwmWKhx7i8dkS9NM5Q=",
            "1; BN7PR07MB4898;\n\t7:XRfwccNcGyJ1p12ZqG92lbTJ7YDqjj1MgImEf04gu6qAQJwfNclGFQ83Gh1gMBRPyPAVDQSCusGm00kPn5OwfcZpHXnUYDfToPxIB7Sibt1vDMo1EkxvpW8T1eDOEGfbRnm+D+/MiT5azTE6XJH9f8SxC7sDOLuIxDKiOy+WpLwpoCtBpMeVH1Au6FEepOnqc7zGvMMgnvQXWkHuVXDyvj9gb7oxE2RZ6lqtR5sOizqYfKpgO6Qn90wdFK90bKaO"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN7PR07MB4898:",
        "X-Microsoft-Antispam-PRVS": "<BN7PR07MB4898329A4C0DFE764EB4C729F85A0@BN7PR07MB4898.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231311)(944501410)(52105095)(10201501046)(93006095)(3002001)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011)(7699016);\n\tSRVR:BN7PR07MB4898; BCL:0; PCL:0; RULEID:; SRVR:BN7PR07MB4898; ",
        "X-Forefront-PRVS": "0730093765",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(346002)(376002)(136003)(39860400002)(366004)(396003)(189003)(199004)(68736007)(81166006)(8676002)(81156014)(44832011)(50466002)(6666003)(25786009)(6512007)(7736002)(4326008)(6486002)(48376002)(8936002)(2906002)(3846002)(478600001)(575784001)(72206003)(305945005)(6116002)(486006)(16586007)(2616005)(54906003)(110136005)(316002)(36756003)(476003)(956004)(446003)(11346002)(47776003)(26005)(42882007)(52116002)(105586002)(186003)(76176011)(16526019)(66066001)(106356001)(51416003)(97736004)(6506007)(55236004)(50226002)(53936002)(5660300001)(386003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR07MB4898;\n\tH:ajoseph83.caveonetworks.com.caveonetworks.com; FPR:; SPF:None;\n\tLANG: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": "pVowWTX8jjecM9uWDNdv3J093xWu56sQ4ja19UeEsgKsf1jO1oEcTGqdBoMcVRUSPgpUmcn/h+T81hNuFVl3Tl4dMzTseBurF+ttlHd05fAlsqWmKyiynItC6OXPhz2xZcK2lOIhUtw0BpBx3iIfpGHd3Gw/cjXShH8uRoYIvMVBixC9Hxi+no8vNibHR0ieL2dS7WdD+ONl1fKHFCZk78+1y8R88HPBwz7iU5PhDBMcdWfDBX8GgKNJVcrhfbpkZQXmlQE0dk1RyieA6cNFh1c6Ls9OQjSs2I/vTgpHBDJPrYyJBlY5sac2TJ4WKdWxklj9+pJSlUzDSCd9WcyfSAxaU0xQ4XmoRgviFv5o0UA=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Jul 2018 06:08:16.0050\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "8e3c51fd-4696-421c-e889-08d5e6f4b234",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN7PR07MB4898",
        "Subject": "[dpdk-dev] [PATCH v2 08/12] examples/l2fwd: move periodic tasks to\n\tnew function",
        "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://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Move the periodic operations (stats flush and drain buffers) to a new\nfunction.\n\nSigned-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>\n---\nv2:\n* No change\n\nv1:\n* Replaced 'unsigned' with 'unsigned int'\n\n examples/l2fwd/l2fwd_worker.c | 83 ++++++++++++++++++++++++-------------------\n examples/l2fwd/l2fwd_worker.h |  6 ++++\n 2 files changed, 52 insertions(+), 37 deletions(-)",
    "diff": "diff --git a/examples/l2fwd/l2fwd_worker.c b/examples/l2fwd/l2fwd_worker.c\nindex f847832..868d0c6 100644\n--- a/examples/l2fwd/l2fwd_worker.c\n+++ b/examples/l2fwd/l2fwd_worker.c\n@@ -94,6 +94,45 @@ l2fwd_drain_buffers(struct lcore_queue_conf *qconf)\n \t}\n }\n \n+static inline void\n+l2fwd_periodic_drain_stats_monitor(struct lcore_queue_conf *qconf,\n+\t\tstruct tsc_tracker *t, int is_master_core)\n+{\n+\tuint64_t diff_tsc, cur_tsc;\n+\n+\tcur_tsc = rte_rdtsc();\n+\n+\t/*\n+\t * TX burst queue drain\n+\t */\n+\tdiff_tsc = cur_tsc - t->prev_tsc;\n+\tif (unlikely(diff_tsc > t->drain_tsc)) {\n+\n+\t\t/* Drain buffers */\n+\t\tl2fwd_drain_buffers(qconf);\n+\n+\t\t/* if timer is enabled */\n+\t\tif (timer_period > 0) {\n+\n+\t\t\t/* advance the timer */\n+\t\t\tt->timer_tsc += diff_tsc;\n+\n+\t\t\t/* if timer has reached its timeout */\n+\t\t\tif (unlikely(t->timer_tsc >= timer_period)) {\n+\n+\t\t\t\t/* do this only on master core */\n+\t\t\t\tif (is_master_core) {\n+\t\t\t\t\tprint_stats();\n+\t\t\t\t\t/* reset the timer */\n+\t\t\t\t\tt->timer_tsc = 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tt->prev_tsc = cur_tsc;\n+\t}\n+}\n+\n static void\n l2fwd_mac_updating(struct rte_mbuf *m, unsigned int dest_portid)\n {\n@@ -135,19 +174,18 @@ l2fwd_main_loop(void)\n \tstruct rte_mbuf *pkts_burst[MAX_PKT_BURST];\n \tstruct rte_mbuf *m;\n \tunsigned int lcore_id;\n-\tuint64_t prev_tsc, diff_tsc, cur_tsc, timer_tsc;\n \tunsigned int i, j, portid, nb_rx;\n \tstruct lcore_queue_conf *qconf;\n-\tconst uint64_t drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1)\n-\t\t\t/ US_PER_S * BURST_TX_DRAIN_US;\n \tint is_master_core;\n-\n-\tprev_tsc = 0;\n-\ttimer_tsc = 0;\n+\tstruct tsc_tracker tsc = {0};\n \n \tlcore_id = rte_lcore_id();\n \tqconf = &lcore_queue_conf[lcore_id];\n \n+\t/* Set drain tsc */\n+\ttsc.drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) /\n+\t\t\tUS_PER_S * BURST_TX_DRAIN_US;\n+\n \tif (qconf->n_rx_port == 0) {\n \t\tRTE_LOG(INFO, L2FWD, \"lcore %u has nothing to do\\n\", lcore_id);\n \t\treturn;\n@@ -167,37 +205,8 @@ l2fwd_main_loop(void)\n \n \twhile (!force_quit) {\n \n-\t\tcur_tsc = rte_rdtsc();\n-\n-\t\t/*\n-\t\t * TX burst queue drain\n-\t\t */\n-\t\tdiff_tsc = cur_tsc - prev_tsc;\n-\t\tif (unlikely(diff_tsc > drain_tsc)) {\n-\n-\t\t\t/* Drain buffers */\n-\t\t\tl2fwd_drain_buffers(qconf);\n-\n-\t\t\t/* if timer is enabled */\n-\t\t\tif (timer_period > 0) {\n-\n-\t\t\t\t/* advance the timer */\n-\t\t\t\ttimer_tsc += diff_tsc;\n-\n-\t\t\t\t/* if timer has reached its timeout */\n-\t\t\t\tif (unlikely(timer_tsc >= timer_period)) {\n-\n-\t\t\t\t\t/* do this only on master core */\n-\t\t\t\t\tif (is_master_core) {\n-\t\t\t\t\t\tprint_stats();\n-\t\t\t\t\t\t/* reset the timer */\n-\t\t\t\t\t\ttimer_tsc = 0;\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t}\n-\n-\t\t\tprev_tsc = cur_tsc;\n-\t\t}\n+\t\t/* Do periodic operations (buffer drain & stats monitor) */\n+\t\tl2fwd_periodic_drain_stats_monitor(qconf, &tsc, is_master_core);\n \n \t\t/*\n \t\t * Read packet from RX queues\ndiff --git a/examples/l2fwd/l2fwd_worker.h b/examples/l2fwd/l2fwd_worker.h\nindex 8971a6a..65650aa 100644\n--- a/examples/l2fwd/l2fwd_worker.h\n+++ b/examples/l2fwd/l2fwd_worker.h\n@@ -4,6 +4,12 @@\n #ifndef _L2FWD_WORKER_H_\n #define _L2FWD_WORKER_H_\n \n+struct tsc_tracker {\n+\tuint64_t prev_tsc;\n+\tuint64_t timer_tsc;\n+\tuint64_t drain_tsc;\n+};\n+\n int\n l2fwd_launch_one_lcore(__attribute__((unused)) void *dummy);\n \n",
    "prefixes": [
        "v2",
        "08/12"
    ]
}