get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139856,
    "url": "http://patchwork.dpdk.org/api/patches/139856/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240503154547.392069-1-ferruh.yigit@amd.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20240503154547.392069-1-ferruh.yigit@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240503154547.392069-1-ferruh.yigit@amd.com",
    "date": "2024-05-03T15:45:47",
    "name": "[RFC,v3] net/af_packet: make stats reset reliable",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "01c98e44a1bd2c79bf64e425c24bc3913024fce4",
    "submitter": {
        "id": 2700,
        "url": "http://patchwork.dpdk.org/api/people/2700/?format=api",
        "name": "Ferruh Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20240503154547.392069-1-ferruh.yigit@amd.com/mbox/",
    "series": [
        {
            "id": 31876,
            "url": "http://patchwork.dpdk.org/api/series/31876/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=31876",
            "date": "2024-05-03T15:45:47",
            "name": "[RFC,v3] net/af_packet: make stats reset reliable",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/31876/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/139856/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/139856/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 1416443F31;\n\tFri,  3 May 2024 17:46:06 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C2829402D1;\n\tFri,  3 May 2024 17:46:05 +0200 (CEST)",
            "from NAM12-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam12on2042.outbound.protection.outlook.com [40.107.237.42])\n by mails.dpdk.org (Postfix) with ESMTP id 9FBE3402DA\n for <dev@dpdk.org>; Fri,  3 May 2024 17:46:03 +0200 (CEST)",
            "from MN2PR22CA0008.namprd22.prod.outlook.com (2603:10b6:208:238::13)\n by PH0PR12MB5608.namprd12.prod.outlook.com (2603:10b6:510:143::13)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.25; Fri, 3 May\n 2024 15:45:56 +0000",
            "from MN1PEPF0000F0DF.namprd04.prod.outlook.com\n (2603:10b6:208:238:cafe::29) by MN2PR22CA0008.outlook.office365.com\n (2603:10b6:208:238::13) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.32 via Frontend\n Transport; Fri, 3 May 2024 15:45:55 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n MN1PEPF0000F0DF.mail.protection.outlook.com (10.167.242.37) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.7544.18 via Frontend Transport; Fri, 3 May 2024 15:45:55 +0000",
            "from telcodpdk.amd.com (10.180.168.240) by SATLEXMB04.amd.com\n (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 3 May\n 2024 10:45:54 -0500"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=KIsS5RwVabGao2qz9ylqRNMJaMkHoNtFFaayCcoRjcE39wvIb162eiaVZv7sYAzyRhV+ItEo5LEGoBECD+36G9AOuSXQLanDtHtshzhSKBMsqbiZ4rNcBfcP+vYSyEJKP1WxTI8VU4IhHEndrNMIafrQtW6AZI+HkDHEsMm3c6lv6lr1jaZPnyXRBSlzFSthZaLSAFo0o17GWbRsuLTLJdS8pN+A6bojwyBAPI94vK8J7AjWal5km13bcw04Q6MeLjbu3MyW2Knrii7qWRipD0FmpkzlZzOXJzeMSMVd73VrVVDQnpepjg4capcgo54uq0O7jv0rqvJFuUHzve1u2g==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=OzIM9yipxsOG4gaaYSpVlDiInKB0LiAVGXJ9R6tjLYo=;\n b=NFgoWzDuovL20dsfnaj2TvrJsLyy6+mYwUrOX0tdt79jxqjvnWFg1uNGAYgK3r/sI390rINpJu6AcCNSEmIK1ghbWUum5YFnfdilADPRmiAQYFD1z04DXACQMA/akBM1wAK19px/Qj69oYIaNdEDBOicPqIhddCYoNmhKXpQj12svCpxFKhB4TqiVS/qTofvt8KULAkFyqxOnKldF53RmGVAyRxmrjj6Ug0RqFDfUZcIBX1ThDVIFtQWcWwHoiCjT+8LuizGXwSXh0Y3X9XW99rmKfYGRt8JYfHV+ZMelCCN7d5uDL9NW1YIt+N3aBNH1oZsIq+JjZThpNtMEIyUBw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=tuxdriver.com smtp.mailfrom=amd.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=amd.com; dkim=none (message not signed); arc=none (0)",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=OzIM9yipxsOG4gaaYSpVlDiInKB0LiAVGXJ9R6tjLYo=;\n b=L5aBfFdj0lBhPCEyXmKdB8hJRSoLGjVxwGg1Hrk7Ug3I/d76ITlze0UTvfSDcg+o3ULUwpTiHyVablxSLZQdPiC8jPHPtyAwo2hzucPgKlncxQZxikpbZEglcZ/q+v/MX5TojNw3IVYghQ3tLbRXJ7QjN0fLQOJWwSoiStmuAbc=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C",
        "From": "Ferruh Yigit <ferruh.yigit@amd.com>",
        "To": "\"John W. Linville\" <linville@tuxdriver.com>",
        "CC": "Thomas Monjalon <thomas@monjalon.net>, <dev@dpdk.org>, =?utf-8?q?Mattias?=\n\t=?utf-8?q?_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>,\n Stephen Hemminger <stephen@networkplumber.org>, =?utf-8?q?Morten_Br=C3=B8ru?=\n\t=?utf-8?q?p?= <mb@smartsharesystems.com>",
        "Subject": "[RFC v3] net/af_packet: make stats reset reliable",
        "Date": "Fri, 3 May 2024 16:45:47 +0100",
        "Message-ID": "<20240503154547.392069-1-ferruh.yigit@amd.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20240425174617.2126159-1-ferruh.yigit@amd.com>",
        "References": "<20240425174617.2126159-1-ferruh.yigit@amd.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-Originating-IP": "[10.180.168.240]",
        "X-ClientProxiedBy": "SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com\n (10.181.40.145)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "MN1PEPF0000F0DF:EE_|PH0PR12MB5608:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "40460906-dcb5-4bca-07c1-08dc6b881edd",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;ARA:13230031|36860700004|376005|1800799015;",
        "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?sV+2ToeZxu2Hhg9tFY/LZ28mCI0eVoZ?=\n\t=?utf-8?q?p5fbxXxAFxqh5kVHtFWcUIl88km9sRXRyF9CJurjZSYOIpiPXCVhc9WO64KUY45TA?=\n\t=?utf-8?q?NnXFzuy0rV0w/PtOj+HOaW6BXAqNL+6dyAsRZRwLPXDyybqhH4UdK9xFlmQ61e2/R?=\n\t=?utf-8?q?apftSxhfYho4hMDK3yg8lKIlcz4UE5GLycHWrKiRpquH6yjr8Vx3sJwMhDfoDsHmI?=\n\t=?utf-8?q?Bl0mQCQM+3349WVmN9KFc3qsAMF7LLg0L01uJ2iMrBvbKgUfWwvVFC7CZ4QAe0Hku?=\n\t=?utf-8?q?sS7KZlZAV3irMhXrLbvHMsAnNvos79nX4RJOLrQY76LzT052/AqySxyc9ZFzxEBOj?=\n\t=?utf-8?q?AN3/4v8XhZtVThMTgFvB8h09QjYEanDKTAfCG/vXrM5hPxYABmOVTR4Z4HpfFu3oW?=\n\t=?utf-8?q?cQ55cMh/UH2fyMSJE7g6mPIrJrRUnOBC1oCw9Sc1JcHphox2dDumGLp+2AZZ+g9Wk?=\n\t=?utf-8?q?zFUkStOMJhbs6ll9Dj0pSgfEoSCjWdjDARmfgF9rc6aXY+zLoKzudI3RUYxr8iJX/?=\n\t=?utf-8?q?4g5hR51THRepfsC4aEFvPuVCEoIFCTx7bRnZOX3lasrKGBFfBvwfZglu9wQyEA+X2?=\n\t=?utf-8?q?UMI3+uNxHRs4UxzKgROAmt/qas4tsbFibrxEbeEDzzB72/xAWRbEMVt93iC1nfK97?=\n\t=?utf-8?q?LT3yK2UYOtTfzPTsFLO3W9CU20ceTFLV+P+QqeFU/YQbG/Pgn9izQJ3wV3+tTQY1E?=\n\t=?utf-8?q?MCg448B/5bWluKPH/2B0KeXCx9ddOMI+GQP5RTNZWo2ITVuBT1v6LOOpGyRjqnLIt?=\n\t=?utf-8?q?VGG1BTPUOSgksKt6jjXB6/Q77znEcttDScpzRs54APqy6jqu8sHvHvsGHCZq2VT1w?=\n\t=?utf-8?q?jReVaHD/rKaZTong1VTFhNMVOnMPmrouf+VdQZ6oCfOoCWPFFEaXCIu7ODCOLvC4C?=\n\t=?utf-8?q?eCx9mElg1FRyM+kD7I0TRcy/dmTSuB1TdEShz+CvbZFRdt+APZo5b+LlAbVKGTQMm?=\n\t=?utf-8?q?c3urNnaqEU9CvhiW5UK6Bn+ea4zHZG6aqJbrp8VqKhfTNtF9HNJ41Bm24Qc3H14Ly?=\n\t=?utf-8?q?iDV9H6rxiwYaD76it65R3Kbz+M1JrzBSsHD9jEyuvzid4ZQw7CeCMs58lLkuuH47i?=\n\t=?utf-8?q?WGX0tiDMPi/El8RdUrtNDlPJijj6BPqgKRHbv8nljs5mGMrZubnuhjb0bVg8eHb+I?=\n\t=?utf-8?q?wkOa9znLo84xXRAd6i8Ws1lSfYYx/wIOD/9A3shLJ0PL8trbnbAczpT2h8aMDSjxZ?=\n\t=?utf-8?q?qTPWY9IhHEGNpOh02a20TsNLJj7LNiwnBSYwL+8jW2r5rw5UnLz3qoI7uTLiRxovY?=\n\t=?utf-8?q?yRypLvKbedYVR4JzYnJRX/RU5lQdZfiyrDnhmtA1wXAiBQHOAotgk+hWAX4ZU32bg?=\n\t=?utf-8?q?3YHOPSA3CVz9?=",
        "X-Forefront-Antispam-Report": "CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230031)(36860700004)(376005)(1800799015); DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 May 2024 15:45:55.6512 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 40460906-dcb5-4bca-07c1-08dc6b881edd",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17];\n Helo=[SATLEXMB04.amd.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n MN1PEPF0000F0DF.namprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH0PR12MB5608",
        "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": "For stats reset, use an offset instead of zeroing out actual stats values,\nget_stats() displays diff between stats and offset.\nThis way stats only updated in datapath and offset only updated in stats\nreset function. This makes stats reset function more reliable.\n\nAs stats only written by single thread, we can remove 'volatile' qualifier\nwhich should improve the performance in datapath.\n\nWhile updating around, 'igb_stats' parameter renamed as 'stats'.\n\nSigned-off-by: Ferruh Yigit <ferruh.yigit@amd.com>\n---\nCc: Mattias Rönnblom <mattias.ronnblom@ericsson.com>\nCc: Stephen Hemminger <stephen@networkplumber.org>\nCc: Morten Brørup <mb@smartsharesystems.com>\n\nThis update triggered by mail list discussion [1].\n\n[1]\nhttps://inbox.dpdk.org/dev/3b2cf48e-2293-4226-b6cd-5f4dd3969f99@lysator.liu.se/\n\nv2:\n* Remove wrapping check for stats\n\nv3:\n* counter and offset put into same struct per stats\n* Use atomic load / store for stats values\n---\n drivers/net/af_packet/rte_eth_af_packet.c | 98 ++++++++++++++++-------\n 1 file changed, 68 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c\nindex 6b7b16f3486d..ebef1cb06450 100644\n--- a/drivers/net/af_packet/rte_eth_af_packet.c\n+++ b/drivers/net/af_packet/rte_eth_af_packet.c\n@@ -6,6 +6,7 @@\n  * All rights reserved.\n  */\n \n+#include <rte_atomic.h>\n #include <rte_common.h>\n #include <rte_string_fns.h>\n #include <rte_mbuf.h>\n@@ -40,6 +41,11 @@\n #define DFLT_FRAME_SIZE\t\t(1 << 11)\n #define DFLT_FRAME_COUNT\t(1 << 9)\n \n+struct stats {\n+\tuint64_t counter;\n+\tuint64_t offset;\n+};\n+\n struct __rte_cache_aligned pkt_rx_queue {\n \tint sockfd;\n \n@@ -52,8 +58,8 @@ struct __rte_cache_aligned pkt_rx_queue {\n \tuint16_t in_port;\n \tuint8_t vlan_strip;\n \n-\tvolatile unsigned long rx_pkts;\n-\tvolatile unsigned long rx_bytes;\n+\tstruct stats rx_pkts;\n+\tstruct stats rx_bytes;\n };\n \n struct __rte_cache_aligned pkt_tx_queue {\n@@ -65,9 +71,9 @@ struct __rte_cache_aligned pkt_tx_queue {\n \tunsigned int framecount;\n \tunsigned int framenum;\n \n-\tvolatile unsigned long tx_pkts;\n-\tvolatile unsigned long err_pkts;\n-\tvolatile unsigned long tx_bytes;\n+\tstruct stats tx_pkts;\n+\tstruct stats err_pkts;\n+\tstruct stats tx_bytes;\n };\n \n struct pmd_internals {\n@@ -111,6 +117,34 @@ RTE_LOG_REGISTER_DEFAULT(af_packet_logtype, NOTICE);\n \trte_log(RTE_LOG_ ## level, af_packet_logtype, \\\n \t\t\"%s(): \" fmt \":%s\\n\", __func__, ##args, strerror(errno))\n \n+static inline uint64_t\n+stats_get(struct stats *s)\n+{\n+\tuint64_t counter = rte_atomic_load_explicit(&s->counter,\n+\t\t\trte_memory_order_relaxed);\n+\tuint64_t offset = rte_atomic_load_explicit(&s->offset,\n+\t\t\trte_memory_order_relaxed);\n+\treturn counter - offset;\n+}\n+\n+static inline void\n+stats_add(struct stats *s, uint16_t n)\n+{\n+\tuint64_t counter = s->counter;\n+\tcounter += n;\n+\trte_atomic_store_explicit(&s->counter, counter,\n+\t\t\trte_memory_order_relaxed);\n+}\n+\n+static inline void\n+stats_reset(struct stats *s)\n+{\n+\tuint64_t counter = rte_atomic_load_explicit(&s->counter,\n+\t\t\trte_memory_order_relaxed);\n+\trte_atomic_store_explicit(&s->offset, counter,\n+\t\t\trte_memory_order_relaxed);\n+}\n+\n static uint16_t\n eth_af_packet_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\n {\n@@ -169,8 +203,8 @@ eth_af_packet_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\n \t\tnum_rx_bytes += mbuf->pkt_len;\n \t}\n \tpkt_q->framenum = framenum;\n-\tpkt_q->rx_pkts += num_rx;\n-\tpkt_q->rx_bytes += num_rx_bytes;\n+\tstats_add(&pkt_q->rx_pkts, num_rx);\n+\tstats_add(&pkt_q->rx_bytes, num_rx_bytes);\n \treturn num_rx;\n }\n \n@@ -305,9 +339,9 @@ eth_af_packet_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)\n \t}\n \n \tpkt_q->framenum = framenum;\n-\tpkt_q->tx_pkts += num_tx;\n-\tpkt_q->err_pkts += i - num_tx;\n-\tpkt_q->tx_bytes += num_tx_bytes;\n+\tstats_add(&pkt_q->tx_pkts, num_tx);\n+\tstats_add(&pkt_q->err_pkts, i - num_tx);\n+\tstats_add(&pkt_q->tx_bytes, num_tx_bytes);\n \treturn i;\n }\n \n@@ -387,7 +421,7 @@ eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n }\n \n static int\n-eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)\n+eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n {\n \tunsigned i, imax;\n \tunsigned long rx_total = 0, tx_total = 0, tx_err_total = 0;\n@@ -397,27 +431,29 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)\n \timax = (internal->nb_queues < RTE_ETHDEV_QUEUE_STAT_CNTRS ?\n \t        internal->nb_queues : RTE_ETHDEV_QUEUE_STAT_CNTRS);\n \tfor (i = 0; i < imax; i++) {\n-\t\tigb_stats->q_ipackets[i] = internal->rx_queue[i].rx_pkts;\n-\t\tigb_stats->q_ibytes[i] = internal->rx_queue[i].rx_bytes;\n-\t\trx_total += igb_stats->q_ipackets[i];\n-\t\trx_bytes_total += igb_stats->q_ibytes[i];\n+\t\tstruct pkt_rx_queue *rxq = &internal->rx_queue[i];\n+\t\tstats->q_ipackets[i] = stats_get(&rxq->rx_pkts);\n+\t\tstats->q_ibytes[i] = stats_get(&rxq->rx_bytes);\n+\t\trx_total += stats->q_ipackets[i];\n+\t\trx_bytes_total += stats->q_ibytes[i];\n \t}\n \n \timax = (internal->nb_queues < RTE_ETHDEV_QUEUE_STAT_CNTRS ?\n \t        internal->nb_queues : RTE_ETHDEV_QUEUE_STAT_CNTRS);\n \tfor (i = 0; i < imax; i++) {\n-\t\tigb_stats->q_opackets[i] = internal->tx_queue[i].tx_pkts;\n-\t\tigb_stats->q_obytes[i] = internal->tx_queue[i].tx_bytes;\n-\t\ttx_total += igb_stats->q_opackets[i];\n-\t\ttx_err_total += internal->tx_queue[i].err_pkts;\n-\t\ttx_bytes_total += igb_stats->q_obytes[i];\n+\t\tstruct pkt_tx_queue *txq = &internal->tx_queue[i];\n+\t\tstats->q_opackets[i] = stats_get(&txq->tx_pkts);\n+\t\tstats->q_obytes[i] = stats_get(&txq->tx_bytes);\n+\t\ttx_total += stats->q_opackets[i];\n+\t\ttx_err_total += stats_get(&txq->err_pkts);\n+\t\ttx_bytes_total += stats->q_obytes[i];\n \t}\n \n-\tigb_stats->ipackets = rx_total;\n-\tigb_stats->ibytes = rx_bytes_total;\n-\tigb_stats->opackets = tx_total;\n-\tigb_stats->oerrors = tx_err_total;\n-\tigb_stats->obytes = tx_bytes_total;\n+\tstats->ipackets = rx_total;\n+\tstats->ibytes = rx_bytes_total;\n+\tstats->opackets = tx_total;\n+\tstats->oerrors = tx_err_total;\n+\tstats->obytes = tx_bytes_total;\n \treturn 0;\n }\n \n@@ -428,14 +464,16 @@ eth_stats_reset(struct rte_eth_dev *dev)\n \tstruct pmd_internals *internal = dev->data->dev_private;\n \n \tfor (i = 0; i < internal->nb_queues; i++) {\n-\t\tinternal->rx_queue[i].rx_pkts = 0;\n-\t\tinternal->rx_queue[i].rx_bytes = 0;\n+\t\tstruct pkt_rx_queue *rxq = &internal->rx_queue[i];\n+\t\tstats_reset(&rxq->rx_pkts);\n+\t\tstats_reset(&rxq->rx_bytes);\n \t}\n \n \tfor (i = 0; i < internal->nb_queues; i++) {\n-\t\tinternal->tx_queue[i].tx_pkts = 0;\n-\t\tinternal->tx_queue[i].err_pkts = 0;\n-\t\tinternal->tx_queue[i].tx_bytes = 0;\n+\t\tstruct pkt_tx_queue *txq = &internal->tx_queue[i];\n+\t\tstats_reset(&txq->tx_pkts);\n+\t\tstats_reset(&txq->err_pkts);\n+\t\tstats_reset(&txq->tx_bytes);\n \t}\n \n \treturn 0;\n",
    "prefixes": [
        "RFC",
        "v3"
    ]
}