get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28349,
    "url": "http://patches.dpdk.org/api/patches/28349/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1504605394-6450-1-git-send-email-matan@mellanox.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": "<1504605394-6450-1-git-send-email-matan@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1504605394-6450-1-git-send-email-matan@mellanox.com",
    "date": "2017-09-05T09:56:34",
    "name": "[dpdk-dev] net/failsafe: stat support enhancement",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7705e0dc6480c33c47cd300c9efcd0a57adc4f05",
    "submitter": {
        "id": 796,
        "url": "http://patches.dpdk.org/api/people/796/?format=api",
        "name": "Matan Azrad",
        "email": "matan@mellanox.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1504605394-6450-1-git-send-email-matan@mellanox.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/28349/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/28349/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 85E4D376C;\n\tTue,  5 Sep 2017 11:57:09 +0200 (CEST)",
            "from EUR02-VE1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr20047.outbound.protection.outlook.com [40.107.2.47])\n\tby dpdk.org (Postfix) with ESMTP id 4CA27374F\n\tfor <dev@dpdk.org>; Tue,  5 Sep 2017 11:57:08 +0200 (CEST)",
            "from mellanox.com (37.142.13.130) by\n\tHE1PR0502MB3052.eurprd05.prod.outlook.com (2603:10a6:3:d9::17) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10;\n\tTue, 5 Sep 2017 09:57:06 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=Fl1vwofDFZTLBS+qYiIEcQbIjjIha6aBbcHMCZ0SWq0=;\n\tb=men5ijf0wFvU0+7O8Is+608yIgb9p9rLPPHKTG/Cy8TSnViMkcRzc8qASdxqtG6d0tAb0m7Lp9oCnMpNqvuSsBwsmG3R+Y0Hj7DoXgdRxsqi67VD+A0hBza6sKsQR/LAQ/z9gygTJD2mW6Di+VQaYD9297t6FJMFMN/rLNeP8Mk=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=matan@mellanox.com; ",
        "From": "Matan Azrad <matan@mellanox.com>",
        "To": "Gaetan Rivet <gaetan.rivet@6wind.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Tue,  5 Sep 2017 12:56:34 +0300",
        "Message-Id": "<1504605394-6450-1-git-send-email-matan@mellanox.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[37.142.13.130]",
        "X-ClientProxiedBy": "VI1PR0701CA0048.eurprd07.prod.outlook.com\n\t(2603:10a6:800:90::34) To HE1PR0502MB3052.eurprd05.prod.outlook.com\n\t(2603:10a6:3:d9::17)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "03b9302e-1931-483b-13cc-08d4f44477a9",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:HE1PR0502MB3052; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; HE1PR0502MB3052;\n\t3:/nUdIaYFQHpAWS45TZRL1L06bnoIGCgFN55SZYUo2up4kXQvTvLWroLj8qJ/+oMp4Qhzm8UzD5pU75T3//bFFVWy2Xb3y8Hb1RZMw7dR4lFAFc+ew/CrkFUAe1v48o2CLCvRKoqd+FW9p8EF3tCRNt6fNqNhPoC7c4/kVu7NRAvirmkkV13TmoEeTiQEYaDTQfoNx7vzcl0RZ/rxGvqqg+5D6OcLQ/HeB3qcXv2vQvGVpnLF5/oHxbV3IAfW26j0;\n\t25:OokA1thEIfAbMBu4g+6UYGUDHnMNAylOtFAQ6uWb6eMrU1PQKPTtZcRAaefpb9Op/VjcirHVYjzTg/pKgrXoXFbAiofueG+IsgRuZijfQSXZyt4DjHuw5mDOB/Y0PbtjvnhHOQBw9SMJSh5kkAa/r/7t/gkUVXmTW33zhdOdCH+fIbqSZJt92VXW0h4toOYnpi6u8n7uVq1IVN/vRXuaMB4aHCpx495MqsjccrpHOuSmzeGB0ogud5zCcem+7RIZ0Vvrk4cIUpCv4fji1ZLjrKHRaQSrWF6HF/qnnybWaYoHUlCKn1uTV6wagyzjS8pxcBy4uav2w8DCD904tveX9Q==;\n\t31:a5Txhk+GuHkiw7QwLtMHiHtHMwRQKpcRFmmYCjvrGY69QyId0B7LNaGZYuNaBiH0YvjZxj16tWzmmzHl/DTRW7oL9/WYU7CdPcpLK2i06OGIa+hwkYKG47zunLElpgkqls0NdSlFqunzGNy5arN0tDT/P/MbZA4hNCLFs1MvGiB0+JM5+dZqK3jc22STCZqjgktNOZDLtPttVNyhCKKS878aB4cbGnEo6nqR3KPuNSM=",
            "1; HE1PR0502MB3052;\n\t20:j8onR0iQyupPLkmjnpCJrPgij9Xml/GBW3SIijeKU+cCGkH8M/ODm7Bm1q3ZAfl+aTnBHGRT6EcZvfnFSgPYpoafu5tS+UY7yy1L1HAG1jrSuTq6RxpP6A5AIGCBgBEqKVsIk1OMYhwiH19Owv6sY5oZvHlsBY3IN9amSGOX2ej2pshgcKeUpOTNG7+R3jCEUKsUE3scfiWPjachGWqYWbBbmxFY6J2QQuuyR57S7ywf4pW4oUsD3Oo3DpERYqScHWXyf+bIVyI+6Cp/zTCink+qvPkNCXYfZQmQ62yKJh7mjmgM1o1LfMd2ZLRpfyPQPLEwNbhdCuNypCpsCTYEbbwLZLooBzWZbF5ooxaF+MxKhIm5wX0VB2YCyq736fcqLjyGoj1ZexZQJyXKxu6E0nlRmW3SZEcLULwxpLBSFLi6SbgYjAN4R7BI6f1wgRain/WBn7eSXbXhYovxDWXpeG4bFvwknnGSD6Jx7eqzncazp2nyn0nbHyfDLz25tcbK;\n\t4:U0ext7eUCWXcEMbpWkRbba1NpjtRmpyCWrsBMRVpJRWRvyRllIkn0Jd5idX8JCvtwWsvlRDli0ugUkD2piPYNfkycosUl12Fn9MrFRyc2qedBqbZtUvYwp6p0nDtoyd/aZ/fVjJWPEx482udD2wiOMgVbZPx56xxb4igA73fKPbW62yPkzcoYA7ooKMp2FnSMRyPfcF1vh8sgveyGdxnev5Qs+Wdl/2jRj1A1FKm5BDalWsP419e/0OMVFUUmN8b",
            "=?us-ascii?Q?1; HE1PR0502MB3052;\n\t23:ej/2hc1Bexdts2AON9iVHjOqgyDtvul7c5os218?=\n\t2/GHXuuOnthD30p5DTnjU4uqckzcsQqfNLapagHi+vmo+TTcC87xh3kflKBzJuFtvf0VuadE7ei8IxXZxPe6kQQu6RaEhoWM85QacmwBsboLu8y+YpKS/Ld2m2g17SSne0fuRf9pP7tjwZWWXa/S0UtaGj6duvqwvxxfjXoZUgbcNqyZr4x8biSgQyYv0n5LrjpwSMyqmw/qy05YDNCXK+qXU7LpcwbQFOz5CGP5K9qRH0APTsO4/9iSMboWaTl0gsVGqA2OeTvVRAkoSMZRxkd6FvQNyrjVioljcgIXu7pksk/1vczwZNLndH992EVRKe7pILHKt4aHyrXAqK9uZqVabdxtk1MdNCjwtHtBtrGevh+qfwkmrG1b0T9AWj7dd9kjKr+5nXMmWmD99vXa15Lke2leyMdyZMiI8EZTt6MNOreLBKdogzuWmvZhZA0lqnC12yS0kJxDFV1B+2XfbqVUDVarwvAnzpCjVi132nRtfCyvJPiboKjKEOtRD5ETMgyUd9WkL/UcmvFKSkmMagVFb4kK+x6ANSrGyEwQP1rYYf6er6Egxwq3vqHadjdxYsdAdKLyJ7BfTOwGY4MlbD8nFkTsOWQ1526SkHYHgiQVXuTJdvA3BpZbnZ2xe6K/2ExHYOpYj5Li1p4U173aOstpzSgodDIMqtW8zpjB6tybvECew8JJFWNYRFTSndFApjpBMoZmBCzsV6NGbh6BCHAqBl7/XlCPh5sC2lsyGtx3NqJlYcs4P3wKILBdt15g1IjdXQ7s9cx7s+dEyl/ixtEpOysOywLcn9IQ9b6+1K3a00Zn/aDzxJMpiJyL29IWLcTrVrjv2FJ323zgSuLBLdQXu3u8ZhKDjLpS7KcEAGYjhi9CIkjZJQLxKZZV+c4mzt3w7jo1iZUCi/oqNY/KLLLEeAZwLwWZbvViGRyIWQZL49OIqLA2eWh/IEaPxBG9+H22ym5o4TXJX+ktkekpNIy1TnRbjNjVUk6jbfes3ZbNErEv6/HDlfuFa9JpwAcIzjIP6XAj/oyThFdYAf3csEmIRRCI8Uuqb0gWc++h2vBYz8ylUvx/PhJ3SGu6noPKZN1M=",
            "1; HE1PR0502MB3052;\n\t6:8wkRp2NsyoKnRX/embDnAVu5CKASiO4gU87v1+NY/c2X4cy/MXfsEilup7RzTfdiQuydePA/Bf2HIe8tJJelCe8rsshHERkUzetCDmprcQfR7xJOXHZP6zLy1MGmjwAuG7yCLXF1LrffQlCjowjyHxeaaa4OUvNu1zYlR+7lbbQTLDgMUhvPTDw0Q4IxJw9He9WygyCazeKnhMZ98vkN0cCmRAiK32sTflfkMXqrKylzVw3mjc+rpHIJWrOgUyk/4Nq5ywiCjXcjD3z0Bx33lz1dlqq3IKqVpL+lo/eo6f0AlSE4eH4vnow3U3pW9z32lN3tpMPgkrNvwF15QgsQZw==;\n\t5:nKQxJkwig4ex6VCPQGF/sjwdM6o1xjlpW9v8bbvnj/OTyjWg/pXXwuWj0fX0MgEkJc62BecooI+3AoEn4/GhxJwhwwnIT6xxeBnqPwLNG/1kLoPV1s2CYuxPT6Mn50sYDLZY5xGcvWi3yCIlG8zilQ==;\n\t24:YRzPU4CPi2ujBAN2i64Qdr1TnapIMN9aKpaiA+sf57Xm5BnKz2qVUkYDbpKPtoKfr1yx3pCwLy0LlDC4ePPgWih8wNYWhvexIlpZ7PmDnBA=;\n\t7:p3krgGwQYljHSihUNpQAVsvHbJ+wjHO/VEmMrmBqgvRG2zoJW5W59p2wlgXrOFpgqaVvGPzK+fEZmVPZ3Qkx0kzJ7RD5QY+ANn992Ozr6W8G7L2qxxwlT5cJRNav6LoZmqxYyk4ass7xHHIXN8LKSM49+GRqtYtfBvKblGdBNhAC4P+Hjgok12wQ6flOKrWnvqW9L4hRE0j8V+idm7XPjdY8pYrX/DJg4HxHOVkp74s="
        ],
        "X-MS-TrafficTypeDiagnostic": "HE1PR0502MB3052:",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Microsoft-Antispam-PRVS": "<HE1PR0502MB3052804E911619F617BED686D2960@HE1PR0502MB3052.eurprd05.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:HE1PR0502MB3052; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:HE1PR0502MB3052; ",
        "X-Forefront-PRVS": "0421BF7135",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(189002)(199003)(50226002)(33646002)(2906002)(47776003)(66066001)(50986999)(21086003)(8676002)(81156014)(69596002)(101416001)(189998001)(68736007)(5660300001)(6666003)(6916009)(48376002)(81166006)(50466002)(42186005)(4326008)(106356001)(7736002)(305945005)(105586002)(7350300001)(478600001)(110136004)(86362001)(33026002)(36756003)(6116002)(3846002)(5003940100001)(53936002)(25786009)(55016002)(551984002)(97736004);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0502MB3052; H:mellanox.com; FPR:;\n\tSPF:None; \n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "05 Sep 2017 09:57:06.2355\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "HE1PR0502MB3052",
        "Subject": "[dpdk-dev] [PATCH] net/failsafe: stat support enhancement",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://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": "<http://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": "The previous stats code returned only the current TX sub\ndevice stats.\n\nThis enhancement extends it to return the sum of all sub\ndevices stats with history of removed sub-devices.\n\nDedicated stats accumulator saves the stat history of all\nsub device remove events.\n\nEach failsafe sub device contains the last stats asked by\nthe user and updates the accumulator in removal time.\n\nI would like to implement ultimate snapshot on removal time.\nThe stats_get API needs to be changed to return error in the\ncase it is too late to retrieve statistics.\nBy this way, failsafe can get stats snapshot in removal interrupt\ncallback for each PMD which can give stats after removal event.\n\nSigned-off-by: Matan Azrad <matan@mellanox.com>\n---\n drivers/net/failsafe/failsafe_ether.c   | 33 +++++++++++++++++++++++++++++++++\n drivers/net/failsafe/failsafe_ops.c     | 16 ++++++++++++----\n drivers/net/failsafe/failsafe_private.h |  5 +++++\n 3 files changed, 50 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c\nindex a3a8cce..133080d 100644\n--- a/drivers/net/failsafe/failsafe_ether.c\n+++ b/drivers/net/failsafe/failsafe_ether.c\n@@ -399,6 +399,37 @@ failsafe_eth_dev_state_sync(struct rte_eth_dev *dev)\n \treturn ret;\n }\n \n+void\n+fs_increment_stats(struct rte_eth_stats *from, struct rte_eth_stats *to)\n+{\n+\tuint8_t i;\n+\n+\tRTE_ASSERT(from != NULL && to != NULL);\n+\tto->ipackets += from->ipackets;\n+\tto->opackets += from->opackets;\n+\tto->ibytes += from->ibytes;\n+\tto->obytes += from->obytes;\n+\tto->imissed += from->imissed;\n+\tto->ierrors += from->ierrors;\n+\tto->oerrors += from->oerrors;\n+\tto->rx_nombuf += from->rx_nombuf;\n+\tfor (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS; i++) {\n+\t\tto->q_ipackets[i] += from->q_ipackets[i];\n+\t\tto->q_opackets[i] += from->q_opackets[i];\n+\t\tto->q_ibytes[i] += from->q_ibytes[i];\n+\t\tto->q_obytes[i] += from->q_obytes[i];\n+\t\tto->q_errors[i] += from->q_errors[i];\n+\t}\n+}\n+\n+void\n+fs_increment_stats_accumulator(struct sub_device *sdev)\n+{\n+\tfs_increment_stats(&sdev->stats_snapshot,\n+\t\t\t&PRIV(sdev->fs_dev)->stats_accumulator);\n+\tmemset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats));\n+}\n+\n int\n failsafe_eth_rmv_event_callback(uint8_t port_id __rte_unused,\n \t\t\t\tenum rte_eth_event_type event __rte_unused,\n@@ -410,6 +441,8 @@ failsafe_eth_rmv_event_callback(uint8_t port_id __rte_unused,\n \tfs_switch_dev(sdev->fs_dev, sdev);\n \t/* Use safe bursts in any case. */\n \tset_burst_fn(sdev->fs_dev, 1);\n+\t/* Increment the stats accumulator by the last stats snapshot. */\n+\tfs_increment_stats_accumulator(sdev);\n \t/*\n \t * Async removal, the sub-PMD will try to unregister\n \t * the callback at the source of the current thread context.\ndiff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c\nindex ff9ad15..e47cc85 100644\n--- a/drivers/net/failsafe/failsafe_ops.c\n+++ b/drivers/net/failsafe/failsafe_ops.c\n@@ -586,9 +586,14 @@ static void\n fs_stats_get(struct rte_eth_dev *dev,\n \t     struct rte_eth_stats *stats)\n {\n-\tif (TX_SUBDEV(dev) == NULL)\n-\t\treturn;\n-\trte_eth_stats_get(PORT_ID(TX_SUBDEV(dev)), stats);\n+\tstruct sub_device *sdev;\n+\tuint8_t i;\n+\n+\tmemcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats));\n+\tFOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {\n+\t\trte_eth_stats_get(PORT_ID(sdev), &sdev->stats_snapshot);\n+\t\tfs_increment_stats(&sdev->stats_snapshot, stats);\n+\t}\n }\n \n static void\n@@ -597,8 +602,11 @@ fs_stats_reset(struct rte_eth_dev *dev)\n \tstruct sub_device *sdev;\n \tuint8_t i;\n \n-\tFOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE)\n+\tFOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {\n \t\trte_eth_stats_reset(PORT_ID(sdev));\n+\t\tmemset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats));\n+\t}\n+\tmemset(&PRIV(dev)->stats_accumulator, 0, sizeof(struct rte_eth_stats));\n }\n \n /**\ndiff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h\nindex 0361cf4..267c749 100644\n--- a/drivers/net/failsafe/failsafe_private.h\n+++ b/drivers/net/failsafe/failsafe_private.h\n@@ -102,6 +102,8 @@ struct sub_device {\n \tuint8_t sid;\n \t/* Device state machine */\n \tenum dev_state state;\n+\t/* Last stats snapshot passed to user */\n+\tstruct rte_eth_stats stats_snapshot;\n \t/* Some device are defined as a command line */\n \tchar *cmdline;\n \t/* fail-safe device backreference */\n@@ -140,6 +142,7 @@ struct fs_priv {\n \t * synchronized state.\n \t */\n \tenum dev_state state;\n+\tstruct rte_eth_stats stats_accumulator;\n \tunsigned int pending_alarm:1; /* An alarm is pending */\n \t/* flow isolation state */\n \tint flow_isolated:1;\n@@ -180,6 +183,8 @@ int failsafe_eal_uninit(struct rte_eth_dev *dev);\n \n int failsafe_eth_dev_state_sync(struct rte_eth_dev *dev);\n void failsafe_dev_remove(struct rte_eth_dev *dev);\n+void fs_increment_stats(struct rte_eth_stats *from, struct rte_eth_stats *to);\n+void fs_increment_stats_accumulator(struct sub_device *sdev);\n int failsafe_eth_rmv_event_callback(uint8_t port_id,\n \t\t\t\t    enum rte_eth_event_type type,\n \t\t\t\t    void *arg, void *out);\n",
    "prefixes": [
        "dpdk-dev"
    ]
}