get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 41133,
    "url": "http://patches.dpdk.org/api/patches/41133/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1528976946-14396-12-git-send-email-anoob.joseph@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": "<1528976946-14396-12-git-send-email-anoob.joseph@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1528976946-14396-12-git-send-email-anoob.joseph@caviumnetworks.com",
    "date": "2018-06-14T11:49:02",
    "name": "[v1,11/15] examples/l2fwd: move periodic tasks to new function",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "154f72648433e5c8865987ae4dfb1d6f44d40c36",
    "submitter": {
        "id": 893,
        "url": "http://patches.dpdk.org/api/people/893/?format=api",
        "name": "Anoob Joseph",
        "email": "anoob.joseph@caviumnetworks.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1528976946-14396-12-git-send-email-anoob.joseph@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 126,
            "url": "http://patches.dpdk.org/api/series/126/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=126",
            "date": "2018-06-14T11:48:52",
            "name": "[v1,01/15] examples/l2fwd: add new header to move common code",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/126/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/41133/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/41133/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 1A79A1E487;\n\tThu, 14 Jun 2018 13:50:31 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0079.outbound.protection.outlook.com [104.47.36.79])\n\tby dpdk.org (Postfix) with ESMTP id 7230B1E41E\n\tfor <dev@dpdk.org>; Thu, 14 Jun 2018 13:50:23 +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.863.16;\n\tThu, 14 Jun 2018 11:50:20 +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=3ujizhMt6BxMDVk4rYl+UlWbWEJJgM1y/CxQz4wXMV8=;\n\tb=g9sGu1gmX2wsHJiPcab1+2DhE4v3JvEF/xc9nnPXFkk5t2XaxIT81E4qyCAdyYARATDeymLM1UtGRS+ErsuiD/CKF8Hnk5m1N6RtZvpVUHOcfHI4t8I8ARNeu3fjvM5UgURFPlM7NMLqDlbnbhGnZM5+4nwkxEiE0Cmgva9CSCg=",
        "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": "Thu, 14 Jun 2018 17:19:02 +0530",
        "Message-Id": "<1528976946-14396-12-git-send-email-anoob.joseph@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1528976946-14396-1-git-send-email-anoob.joseph@caviumnetworks.com>",
        "References": "<1528477766-15788-1-git-send-email-anoob.joseph@caviumnetworks.com>\n\t<1528976946-14396-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": "PN1PR01CA0095.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:c00::11)\n\tTo BN7PR07MB4898.namprd07.prod.outlook.com\n\t(2603:10b6:406:ef::27)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "d644f60b-64f8-49a7-3746-08d5d1ed02ab",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(5600026)(711020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);\n\tSRVR:BN7PR07MB4898; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN7PR07MB4898;\n\t3:Kq9xBsBn3eHckMbMjLUemXcQQW3KafDtVjyoA27rBw5aokiJ1tce8mqpY1gA2S7Y7I/x6sJXEexRUbMTFkmd4kiukQGPON6kCtgNGCFKKB5rGfCsPe9Q5QgUsmy8kmDFUrWGtOpmpgUT6ih9tJf5w3y3uOBmxpnJ8K0fI/dpCp3lfwbBKpQTznBvDEq/6csRz8xQVTREJfiQ32r1BhpuDpqG/3XHFquXgdUR6NA/QokcVjIwTAjoUk57cxuP8gGt;\n\t25:r+D0oiYGgjC7Nv1vm587Pk02VV0anBMouuNVl8BmXzSm0cUlhyIJ5Hy9piX1ne2nLwUQoTfxHZeRUjJ1+euECpeyK/D8k21ukc5OxOked+zN+wZveEzt7zQrO1KtUys9FlCd260neQa6TDTkrutCa/N4gpoyJz1U0SGBxjG8chbvDRLUlQNneJlKYcFKlMTIdJW6WZ0yxo4lusDgtQZK5Wxo4eD6cgAVXdR33JL4hlEKDg+fXDGnsWrgIl9DPv8+Ufo8FvaTUSr9g8Ju0aOuYIZ7vLqDrMq6dmgoc3/PB+/mUsTnrgvCwzuXpGdDPHN7tnK4RwNdnC6GmfA+108hDw==;\n\t31:pIeMCmaysPA4pmPXmcZgW6cHrxlKivCVG3fpyWVAZ5XE9KBQQN3V5vUxeFaaMrbsM8YFnZhoL1DluriUj/uCd6mOjcH/Coyf/xm4JF6dSE8HGL9hW24f9IaUxqRITAPoiX5QVEa39OgbhlokxZxhbWojTtihLAUnQPlg0ct5kXKEaMija99tb+GRV/JMBC+IkLGOs85OPq5SFS6OK5VmdbG+dIa6X440+a0zN9xnjDE=",
            "1; BN7PR07MB4898;\n\t20:AvndPMEsDI1wvlLLWDYjdUYIpIYUJ/4HEQDdecvad7NOb0QuVHZgM3DqXgByFmon3S2VnFs1vuoHOylUlP/0TA8HG2DzjvtRGiq5liiwwo+xKykZKPFESlYwjv2DOKxHf10rj9LgsSgvZFnP7EXehVsCErfdWgfYgh81tvf2VWbpWWRrFpiGogbQqQ/JYU0T7XKuOerM8hlKQeDXpIqEfDzulBuDHBgQMM6DaS+MC4yKSl6mWPFMfQJkJ0dMJrO8SAlFZHCjeS88NFjGs9qSjGVjAdI+a4inlfhvxImpN/Et/bZUz/tJqjcIxiqT/krkUtNdG4+lXEhoHA5LBFvO/rC5yQCyG7tyOoNYeM1LSEp2FaaYITouefnMm4XiXSzDf1ceIldV9Zd2QBJYitqh1brJGym3E5mEc8jxSLbpIqL/d4XR6NHtyDwaPmdRZDyH17YOs0CPCl8cdxD86msRU4xwE6ZtJMJ+gPXoHHaxvqc+CnA3nBqGqUrVHdVr+Xop+tWk0sn5pVCBDQ0z7WCNZrNywlpHpx+oQf/C9vbWAXW2wRJRGAwHhADx3PYYlS/6Ap9doXhyLWDld+zsNFNvkkqgkdi8IUG95Yps+MrqXa4=;\n\t4:+/BVQIWmPrm9EnTYdF/RgqSIy3mz7spMC18FZXMuN4z/SxbbGj9wVEQW51/3sy+B50UcJIZFDG7nsSJ246Chxe+YtYSasXlSw17SLq6NNy5VBzVhJDTcaOludlKCBalpPL0zovMHwmY3ZgOfc9szWiZ3FQ5uUH52MBXx6uPicwIHPySfZNJirLZSDwBBDl3oez1OcYK7MXEEEa/mRYu+wmr5/xVEzhB8SWfaiaUNMJAA2W7XPZH54qL+rG9E/cr9ToKu8BFhngguQdEKL0Lcbw==",
            "=?us-ascii?Q?1; BN7PR07MB4898;\n\t23:+0+Pm6ZQCqMkxH0/ZZ2lwkhHFWYfTX40FdI7lVHHi?=\n\t2Jp/53BQa/dJ91ZIJBaRniGDA4mBeJ9Hw06tvjDwtW4TsIj+3YjCD7DVpKEy9gLBSlIZo8mZJPGb4WChgz0INXZ39aiZX46Wju5du+5rNVQk08zqeIyZJQRlLEY5+3D63pYrO08dzpiD5FK6r8wCPI0pVfEhXITxPZUepCpV7bIDy/CudeL8deXhXzCHqU3fhTeEPo5OIk2vih2iZjh63O14kr2/b3mSPrbuSjDVUXcCa6e6KPUZ3PDZ61ou7kHgReg2ygGHqaka/+AwcUSCLEQJhIIoLb3jb3/LNQaqWY+YoctaBVn0B9KpYHyiYamQvxyiq0IwTrczatbosXNaMab/r+eqiLe2EKsHD6cyKdiNioV06zd1QsbysQom2GuiiDhrItvsFgCae+/0NiRkDmpN2ta3OxOX/yLPtORx/6KfGEym56NUKfVOpg+Zk6sVRn39gD75KPaH7aF/A1GBhDbZdvvp5H9j2yJ07IHOyMTJAriXUcqfohlU50QWRdJrOGjez5Qg7MCJssy6VfIQDvt6VNpHOplFbtDTwLQp0qUIr3v+/FkXLK4yZfgQ+W9SvSDQHI9cUGk8aCxLNHbS0vcuW2VcP7vheykGEcLzrYMPuYt+iBRJrKdMaLAucbDK5YP/YmgNKWfVli2P1kc/KPbT+vx9w0/jrzonG5Go2+VcPIM1toMD8Xnq9mLHZ/kNy+TMd4cJi6hV/EScIWM4+h2zzejT6tf5JqXHzcGMaz2Q2LhirE5nwjmJF4e5t4oqFWfvPQv9CSoKT21bXJpWT3z4dOg7BWHt/6IblGDS+juJoT7fJ7cJlIvTN/Cq4wfm2KOr6Uc/OPZCbGS+oC3byOzMOHDHG3HlowNdSCrWKNgHQMseEOiVtLtkVHn3uDngjiaaaLArmHvTGGn5uHY3gaHdh0+idJrz65sBHG3JhGkmCwPJRAwEY38MdYRpsfshfjChFwGp7BSJ721SiIYjrOIX9Io+A6owdKW5z47F9lBDlVU2D7DRDDwKZh08BB0g/XGly7YAqFWasqL1ipilDn96z/4gHQXMkwz6CHnJyp27Qrcm7aOwSyXYl5BZ0Bw4wwERY9qwl5LBowoQ7GRMVOT7iRqjQT7i7TwYgEhjT6OeHq7+oUXNvVa8C/H/GGcZ5iJOeg3NA7eDGcg4yFPjeLeKgphPfX2NH6OQlwKOIsTqH2dEpKDhJCrEPGzL+vq5tBybX70NhuZHFgfIMGZXs5u80WPQiblqInogkgMp3Cbpw==",
            "1; BN7PR07MB4898;\n\t6:/gwiEnAkY1+hu+ShmDW2OSGStlUkzjxGeH9x+UgyLhIGzf+6NuISiGdEeypcnnkIHsjlA3trA48CCS2Z7atCYWbLLRKYVrfR+UCwgVFTNojiwohqIXaA2pIkmf6/CR7tJwyHYwsoKfAjr/siazBP7Pw2iNSLsufaKaGmtpV8p3EkXLdjoPxfrC3TGD08IyJWD0Fn8ZOBP2D77Vq6d0uaGIhoaRPhHrCwwLNyvlhBZznTyv/OA4XJYJngdyAeGMlJ4VQYE3fg8pkJfXpy91PXBGGVNMZmXCrN60tsUW3q1Ay3vTHCeYy8UntrRB0T4rNc4P3zAUMiAQbRNwO4amSOOX/2/6tviFUr7/Mq6hF0JXQj+ZPdP9K07ageQnxWrzjcper9jdj0/XbjLr6KBg23A6OFmSUfQMod6J0pDEd764dRVwce1kXMVp61EgXsjd8EKz3y9cXoXP208kLOWzJUCA==;\n\t5:UfsA5EGw8ifA1bmMmhgbqYELD8ncrO/8lv6Klur0Cvv7yD5/p/O/+tul9jwVcR4irqwa0+RwL6eDJ+t1bdyt3MfEnhaiR6F7/y4wKUreyx3B/pVIjDVN3LSs2uv8EmMx+UWu76mOB0JHpBVCJqkryv8nmr6DXmB59FFEx5+hxTU=;\n\t24:USqu4vdi/8XFvgHVBgzd+JmQ34EwB59PfujEl89uPzocbrxi1jE92sI8VCzyjIq4+K1pUFUvOFIdFJ4P7ptEnkxGAL8lRurIbtjVJ3kLxpU=",
            "1; BN7PR07MB4898;\n\t7:vMDcaedMHvH5TAMJNqThTX2KHpNQuYpFn688KyUItEVSPYph0spI8/I8m/h+9M9fjl+FGRx36/A8d4dTrOQc0o0Ey5Mv7d8TkavC/yPaRjrJAFZ9UT56GXy/f7y/83L5QFlr/7kMB/MfkblkTf+7chSCD48ZW9pFgvI5G5fsZ0yLwuVwpyDeqFHvOR3cPvXOZJWz+3VMcQFe508FlE6bDP3ZUlNHFiyfnX5JqTOYhZriXScI0nC8xatgqZzwYirn"
        ],
        "X-MS-TrafficTypeDiagnostic": "BN7PR07MB4898:",
        "X-Microsoft-Antispam-PRVS": "<BN7PR07MB4898F1BE029386016A788BCCF87D0@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)(10201501046)(3231254)(944501410)(52105095)(93006095)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016);\n\tSRVR:BN7PR07MB4898; BCL:0; PCL:0; RULEID:; SRVR:BN7PR07MB4898; ",
        "X-Forefront-PRVS": "0703B549E4",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(39860400002)(39380400002)(396003)(376002)(346002)(366004)(199004)(189003)(446003)(956004)(2616005)(305945005)(6666003)(47776003)(476003)(54906003)(44832011)(53936002)(68736007)(486006)(110136005)(8936002)(8676002)(81156014)(16586007)(316002)(81166006)(25786009)(4326008)(7736002)(6116002)(3846002)(11346002)(97736004)(36756003)(106356001)(478600001)(105586002)(42882007)(52116002)(51416003)(26005)(16526019)(186003)(50226002)(66066001)(72206003)(6486002)(2906002)(55236004)(50466002)(575784001)(6512007)(386003)(6506007)(5660300001)(76176011)(48376002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR07MB4898;\n\tH:ajoseph83.caveonetworks.com.caveonetworks.com; FPR:; SPF:None;\n\tLANG:en; PTR:InfoNoRecords; A:1; MX:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "LOTH/9jOUOKq/UFSqn//uuXSvPtaXi2VNhMpFRgdORvlrG1y6s5Hq5fN17CttMYGBId2FfljmSP4pYlTm8ANLqOqPNY0Ia29z6rYogHsPpQqEgzLT7l7YbDQlQ6X4YNBvQgqxaZFMtlNOSWjw35N6sK7HKZCdwBRP1OSq8EIKv/pIKwFOgGVKTcxif/XVtgZ",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "14 Jun 2018 11:50:20.7670\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "d644f60b-64f8-49a7-3746-08d5d1ed02ab",
        "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 v1 11/15] 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://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": "Move the periodic operations (stats flush and drain buffers) to a new\nfunction.\n\nSigned-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>\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": [
        "v1",
        "11/15"
    ]
}