From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F31E84409B; Thu, 23 May 2024 04:50:01 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D599240648; Thu, 23 May 2024 04:49:52 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2091.outbound.protection.outlook.com [40.107.236.91]) by mails.dpdk.org (Postfix) with ESMTP id F33A4402B3 for ; Thu, 23 May 2024 04:49:50 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DvR4TPYAYSNd4mMXANsQHVXkbvjDqhkTW0glxCOihIZtorZlkXbxoVRY4cAN+vaSnGtZtcFC1b4DQ0XkxWm6glSGvd+afJ+A/9pBwki6ZCTrKlkbYkibYO4XWdsbFIAKrHU8jzZO4t/QUv19mSW6fogP8XrkSns83l1NJM6r6hWLsyMA5bxjbVq7JM+KcpYoKEmrinb7WtW1nP5evmJeBoGnyFqNGEmrjYhiXpRJ8NTPMGNoJoK/9ciuv2w0jRcy8pHWy+W5A5pTmH+lOM9z0FM7jFHhuG6Nlr9GR+sfcGy/gIPC/1Ffm9eNi64dbzTAttpTfKm5rJJFCR7vZ5o/Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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; bh=3TJE3bTyDKaLbEEpNbh3Gigms4pBG8EdNv8w8kM54Y0=; b=ZltrEZ51Ag9RYhlprh8kxa0jsBx9uKgH2f0TXta06nrnG11oWn0OH9nNLccFFPh1/xn+8VN/AgsBkMLavw89hXdfzMPtTLARCjLOWVkdZ3GATHucA1MPGiuMLgdwnMuu5jtFoZTXLBm2YRwodaopQxsvuP/C/uQNp5mjXivWjtVeTnkr6lnW/9Ka4zlZPPba4XTBGAH0/hrMZ8IFmOXur9Kd+YrLu3M07zstI1lygTFgiEhzfrzcWccljILfMMvoX5j+tADJCMS5vAtsKG8E4h/IGajmFYrtlfV6fJz97ywRlSZk+yn7g0CRG9fRYhgofa+Ryl9qKtkCEvK2ckkNHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3TJE3bTyDKaLbEEpNbh3Gigms4pBG8EdNv8w8kM54Y0=; b=qEAtX+2fcbk4XpOpJ2IbSPfJqf2hoTI0HIe7Tjjcd22nKNonoBoppdZQ8XNd15hbp90drFxt2dZXTV30YEheFfgOBC2NsFvdvBLC9hOx5CpukwxzIqLxe0yJeO4vTu4H7GIymjGIgMHmIcv1Blgs2cS9xcOrMUoTgVpcvOUUri8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by IA2PR13MB6806.namprd13.prod.outlook.com (2603:10b6:208:4b1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.17; Thu, 23 May 2024 02:49:49 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::b900:5f05:766f:833]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::b900:5f05:766f:833%7]) with mapi id 15.20.7611.013; Thu, 23 May 2024 02:49:49 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 2/2] net/nfp: add support of xstats for flower firmware Date: Thu, 23 May 2024 10:49:16 +0800 Message-Id: <20240523024916.2291031-3-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240523024916.2291031-1-chaoyong.he@corigine.com> References: <20240523024916.2291031-1-chaoyong.he@corigine.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BYAPR07CA0071.namprd07.prod.outlook.com (2603:10b6:a03:60::48) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|IA2PR13MB6806:EE_ X-MS-Office365-Filtering-Correlation-Id: 854a13af-9346-4e2c-75c3-08dc7ad30319 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|366007|1800799015|52116005|376005|38350700005; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DJj+vOqcCPcKRXjqW82G58mtIlrWoSQSf/9gWf2NwU/75CooJ/4GZzUuN5vQ?= =?us-ascii?Q?qKUGQSUittQURWKT840j2F4Y+Phb/78iE458vA6/KcTJjXQ+3QNpfFxM9Di/?= =?us-ascii?Q?nVe3JmFq4hdnZsix9RyXTP9qHdR7cjN4s8fDTw16XqOOuM4RoPFlQvnXAxa9?= =?us-ascii?Q?Oj45lHqCG25PEUwKyj/zcjSSdudYP3tVo2SJuytZy4Bitdsc+VGkkNuVc4UP?= =?us-ascii?Q?6bmkzmwPtuZkOlq/UxZHai2kmCQna8PHGvzTLkThKKWDAmfG9QseecUBW/DH?= =?us-ascii?Q?EH7gPC0QEIS0J2il2HFOxNB5xMqvP3RlMaMQxT3MP2PRJy1A+a9Es15JZbZR?= =?us-ascii?Q?u87aLztGzEIvNpvb9VDsjZkS1VLTAG2OFbYzxhj/Q/VIb8iedpnM3nyTdQQQ?= =?us-ascii?Q?DHbSrnAbOuy5jYPPfJBShN2ohDHuh0LtkqSP3BWWdb4huEHxvHKlozb7xgwK?= =?us-ascii?Q?Td2OkOC9J5ndyTTXM4ZGScZI8AXdgNP9fB91LkYCkldvPLHyGljJG+G6aQUn?= =?us-ascii?Q?jHqK97bvT7BdM0Gq6ajHbDXmwRaFHzcE5UdVbm4cCTGJOVv//LUTEz+uj/wR?= =?us-ascii?Q?Y9alO/ASL0gAxmj8U9GQP3JP2tDwSGtutkmm2oRPrI/zG4WV77xVr9U6Tvlc?= =?us-ascii?Q?Kun3GwKVZekouJhjqX0k4GI8CDZvBjqujEzwDP0Pb8+jLiZ98zUixDEa5CPI?= =?us-ascii?Q?GRKIwW/i6SCif7DVF8xKTwIuvrqrKRM1+OntL7fmeq2Ff9Hoi/LvJQ4e5GoC?= =?us-ascii?Q?LxUkOfbyhbf3hNEYA6OyDlQPieouJ9ylRvzWvqaynFsG2WpRv1TIIZfyg9dE?= =?us-ascii?Q?tqNIWMDV+NdL0wFdLD7RxyyfoDIxwoubWsueC+xGSCjqBne/i6gX+vWNXP9E?= =?us-ascii?Q?z6q92XstNg4dMrxGg+1ARgcUjWdPpoLJxfYz+OmvskqQ/IWwdpzDZzYiBTi4?= =?us-ascii?Q?00mv8k2ICFHP0GnuxO1FfEAucFmJOPUCzixAf2HQ7ouswDP0dQwUwfnrZCoY?= =?us-ascii?Q?3R/HNxQoQoXwY7r2cLEGVAm2NbWd4XSCaDVbeiyaAcRiheFTmi28qVbvqFDT?= =?us-ascii?Q?VLK98eQCdMFn/gab/PrwqqmeJGmj7mIUIC1pfIZjHla3QCANU15LI7X6xrqv?= =?us-ascii?Q?nreN+PBgHWCeAEgrIPuc8PrqU5CnE1a+QLty21Oi9ZkoKlyo0s3MKFvTAMvH?= =?us-ascii?Q?/5s/Xe5jSBr1N7ZYgMquWII0gA6xa9eaiaIYNFc4JQP6GikSrJbqD5YQSHdK?= =?us-ascii?Q?7XBrdXefnDK8pqHYZO8gpYC5A+zImg9cVy1r5kElhIkiU1Ig4Y4TDT+kDM8K?= =?us-ascii?Q?BssGN0o3BtFzbV70pYvP3XzVi81eE5P5HZOWiuAeTPLgwA=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(1800799015)(52116005)(376005)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+RL40cJHgWExGpYRJOZVb8V/TvM69XnSGHtdZuc2q4Pch+IXrKJA3xrIMmOD?= =?us-ascii?Q?m/iYkJXlFF4CUP2mIgZ7Qqofy/IyOdJvyVECD/UJYCzLShUtBkeW91PZmmhq?= =?us-ascii?Q?2KZXMymZrivd4IW/TIyAnEjhnfnmMaZbXxbonJekyimLQ2pr51ahSFm9fwaZ?= =?us-ascii?Q?XdXP5ri+ozs8G11FmiBA39JdkkKZGIZjw7t1pDmLjJmAqFNvqC0nDrqVM1k3?= =?us-ascii?Q?rAbmck3UtL//h8gDhZwMn2lRC9EU8QHuC+jaFb344Uoz9wxUBCSUHtFwpHIJ?= =?us-ascii?Q?SioyyJg43bMUkKsPZnch5IOn5gOw+oFrRU2c4uwE6pPLLucWXgD4vQtbDxNe?= =?us-ascii?Q?gwSMtxDppwL5Ztybqu/ZnxeJcTRtPVUpQg+BaxeuN8cVTwwRY5RQHV/KtCzm?= =?us-ascii?Q?uBYA0fTTis/cL3xQ0kV3sUpVJUNIGcM773dr5Rvq5xUnsreqhoL0r8OruIZ3?= =?us-ascii?Q?RBwOwtG+xzUDCwF48ShzSi3XV9naB2Zi6tGuDOWcJ5CafSgp3AFFaJnaJoZk?= =?us-ascii?Q?tNEsDPaPrYAxIudT0MdZsp0ray/EPmAwp0oJ0/9OtPhu79cVSCCDIAL2VoB7?= =?us-ascii?Q?bClW21kSUVsvMIAG8khV8Id6Cdzux9wjvOjuaunD9sdqwfJsUY3ekD0Q3GAB?= =?us-ascii?Q?itn2GGVK51L9MrXKDAKF1U9YvO96f1S9opPIdFJNQXlqSUVjfabJtTTZEMUf?= =?us-ascii?Q?p9tMTkpONJToxh7o/mhjUHgGFBRV8he5stqC4ji9pGsIR/kt2gHWMtW1lh2u?= =?us-ascii?Q?ZGZM0vRM9/4bzHh3kQAtf8LU2jGZZ7aEmg5zZizaV1CVIoALTqFJIaT5cWaS?= =?us-ascii?Q?YUrt2y9Gkz/bmpvireEIJPzyKIq5CDnCembL/XWXK6jGv9fxq84qmohf5slg?= =?us-ascii?Q?raIvxtNIHq2nx2H4E1/ATkAav6Xh6H06Q43rZQ3kHsB70v7ayl7erIPd1/dn?= =?us-ascii?Q?IFlHk4DS2hW/6DXWjliR5tkTzDL11dr+S+V3I8cEi1Tv9wJgLDPOt7xc/A4R?= =?us-ascii?Q?Q0ihfgA9Vj6BFwQwvskrmuhuHQAOnW9TnhcLiMg84P6RMBWzToM1B1mppF+y?= =?us-ascii?Q?ovkG89dSKLy1nfqsg4bEAkqboznT/Pih1AZNcEZyYUzuvqcaoWTVNKR72Ktg?= =?us-ascii?Q?fTgSbL44ElEa7mWhjwPN/+G1SmXBkV6Ajk72NEQbUdNUhGg4RdHoAdSvd3uY?= =?us-ascii?Q?1jQO9WkI5ySFOonQpku+rlyOwC1ZWMTuITv6HOkvk8CX+3OILR7G41GVeuJt?= =?us-ascii?Q?MoTaVGl9u1ZNz9UGzXbm0j+XA+XpNXV5FctHi57eUY8nQNkhq1NvL403LDyq?= =?us-ascii?Q?ZQL877nYJwgO270d3O0rm7gYprKfcR+dnQYHmNBZU9NQIaVd9B6Y5Wkr/GZe?= =?us-ascii?Q?SxHK2uncpKyajqZjDqRtquCfuCt3GsRdJy4JyIBOfpBjEGojFycXM4l3tt7S?= =?us-ascii?Q?C7cnd4M2DRapie5zjClQ3kd8BlUsVKNfz5y31IU6mFKJ6lyiK6zy1qN1u6X8?= =?us-ascii?Q?Gm74+YPRRkAEAoJC9VHi3IT+RMErzJWrXd8Tz4O8wH5ajcWcDNSn+GZ5WvDG?= =?us-ascii?Q?JBu3X8E3RiryzCYvLMJz6JjE6lXqoW1yVdgO7kZdbq4K+PrBN/S9aMt3MkJn?= =?us-ascii?Q?5Q=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 854a13af-9346-4e2c-75c3-08dc7ad30319 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2024 02:49:49.1470 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8/QMhSaquT6NtQjbtXLd7p+Hc0kMhF6ieXnnoDdZLWGz+SEnkAIc7Kh0U2rCxhEiBTelzJjTVdUPmw5iMiW1+8H3s8hOJU5B0oxr5qicL+s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA2PR13MB6806 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add support the extend stats for flower firmware, include the stats for each queue. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- .../net/nfp/flower/nfp_flower_representor.c | 47 ++++++++++++++- .../net/nfp/flower/nfp_flower_representor.h | 4 ++ drivers/net/nfp/nfp_net_common.c | 58 +++++++++++++++---- 3 files changed, 96 insertions(+), 13 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index f9001ab1f0..f1451fcca2 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -199,7 +199,7 @@ nfp_flower_repr_stats_get(struct rte_eth_dev *ethdev, return 0; } -static int +int nfp_flower_repr_stats_reset(struct rte_eth_dev *ethdev) { struct nfp_flower_representor *repr; @@ -228,6 +228,8 @@ nfp_flower_repr_rx_burst(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { + uint32_t i; + uint32_t data_len; unsigned int available = 0; unsigned int total_dequeue; struct nfp_net_rxq *rxq; @@ -255,7 +257,13 @@ nfp_flower_repr_rx_burst(void *rx_queue, "received: %u, available: %u", repr->name, repr->port_id, total_dequeue, available); + data_len = 0; + for (i = 0; i < total_dequeue; i++) + data_len += rx_pkts[i]->data_len; + repr->repr_stats.ipackets += total_dequeue; + repr->repr_stats.q_ipackets[rxq->qidx] += total_dequeue; + repr->repr_stats.q_ibytes[rxq->qidx] += data_len; } return total_dequeue; @@ -268,6 +276,7 @@ nfp_flower_repr_tx_burst(void *tx_queue, { uint16_t i; uint16_t sent; + uint32_t data_len; void *pf_tx_queue; struct nfp_net_txq *txq; struct rte_eth_dev *dev; @@ -297,7 +306,14 @@ nfp_flower_repr_tx_burst(void *tx_queue, if (sent != 0) { PMD_TX_LOG(DEBUG, "Representor Tx burst for %s, port_id: %#x transmitted: %hu", repr->name, repr->port_id, sent); + + data_len = 0; + for (i = 0; i < sent; i++) + data_len += tx_pkts[i]->data_len; + repr->repr_stats.opackets += sent; + repr->repr_stats.q_opackets[txq->qidx] += sent; + repr->repr_stats.q_obytes[txq->qidx] += data_len; } return sent; @@ -356,6 +372,7 @@ nfp_flower_repr_uninit(struct rte_eth_dev *eth_dev) struct nfp_flower_representor *repr; repr = eth_dev->data->dev_private; + rte_free(repr->repr_xstats_base); rte_ring_free(repr->ring); if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { @@ -497,6 +514,12 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = { .flow_ops_get = nfp_flow_ops_get, .mtr_ops_get = nfp_net_mtr_ops_get, + + .xstats_get = nfp_net_xstats_get, + .xstats_reset = nfp_net_xstats_reset, + .xstats_get_names = nfp_net_xstats_get_names, + .xstats_get_by_id = nfp_net_xstats_get_by_id, + .xstats_get_names_by_id = nfp_net_xstats_get_names_by_id, }; static uint32_t @@ -548,7 +571,8 @@ nfp_flower_pf_repr_init(struct rte_eth_dev *eth_dev, eth_dev->dev_ops = &nfp_flower_pf_repr_dev_ops; eth_dev->rx_pkt_burst = nfp_net_recv_pkts; eth_dev->tx_pkt_burst = nfp_flower_pf_xmit_pkts; - eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR; + eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR | + RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; eth_dev->data->representor_id = 0; @@ -582,6 +606,7 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev, int ret; uint16_t index; unsigned int numa_node; + struct nfp_net_hw_priv *hw_priv; char ring_name[RTE_ETH_NAME_MAX_LEN]; struct nfp_app_fw_flower *app_fw_flower; struct nfp_flower_representor *repr; @@ -593,6 +618,7 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev, /* Memory has been allocated in the eth_dev_create() function */ repr = eth_dev->data->dev_private; + hw_priv = eth_dev->process_private; /* * We need multiproduce rings as we can have multiple PF ports. @@ -620,7 +646,8 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev, eth_dev->dev_ops = &nfp_flower_repr_dev_ops; eth_dev->rx_pkt_burst = nfp_flower_repr_rx_burst; eth_dev->tx_pkt_burst = nfp_flower_repr_tx_burst; - eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR; + eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR | + RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) eth_dev->data->representor_id = repr->vf_id; @@ -662,6 +689,20 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev, app_fw_flower->vf_reprs[index] = repr; } + if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { + repr->mac_stats = hw_priv->pf_dev->mac_stats_bar + + (repr->nfp_idx * NFP_MAC_STATS_SIZE); + } + + /* Allocate memory for extended statistics counters */ + repr->repr_xstats_base = rte_zmalloc("rte_eth_xstat", + sizeof(struct rte_eth_xstat) * nfp_net_xstats_size(eth_dev), 0); + if (repr->repr_xstats_base == NULL) { + PMD_INIT_LOG(ERR, "No memory for xstats base on device %s!", repr->name); + ret = -ENOMEM; + goto mac_cleanup; + } + return 0; mac_cleanup: diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h index d539e53b23..c068c4462c 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.h +++ b/drivers/net/nfp/flower/nfp_flower_representor.h @@ -20,10 +20,14 @@ struct nfp_flower_representor { struct rte_ring *ring; struct rte_eth_link link; struct rte_eth_stats repr_stats; + + struct rte_eth_xstat *repr_xstats_base; + uint8_t *mac_stats; }; int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower, struct nfp_net_hw_priv *hw_priv); bool nfp_flower_repr_is_vf(struct nfp_flower_representor *repr); +int nfp_flower_repr_stats_reset(struct rte_eth_dev *ethdev); #endif /* __NFP_FLOWER_REPRESENTOR_H__ */ diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index 7541afa235..260920ecff 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -954,12 +954,23 @@ uint32_t nfp_net_xstats_size(const struct rte_eth_dev *dev) { uint32_t count; + bool vf_flag = false; struct nfp_net_hw *hw; + struct nfp_flower_representor *repr; const uint32_t size = RTE_DIM(nfp_net_xstats); - /* If the device is a VF, then there will be no MAC stats */ - hw = nfp_net_get_hw(dev); - if (hw->mac_stats == NULL) { + if (rte_eth_dev_is_repr(dev)) { + repr = dev->data->dev_private; + if (repr->mac_stats == NULL) + vf_flag = true; + } else { + hw = dev->data->dev_private; + if (hw->mac_stats == NULL) + vf_flag = true; + } + + /* If the device is a VF or VF-repr, then there will be no MAC stats */ + if (vf_flag) { for (count = 0; count < size; count++) { if (nfp_net_xstats[count].group == NFP_XSTAT_GROUP_MAC) break; @@ -989,14 +1000,29 @@ nfp_net_xstats_value(const struct rte_eth_dev *dev, bool raw) { uint64_t value; + uint8_t *mac_stats; struct nfp_net_hw *hw; struct nfp_xstat xstat; + struct rte_eth_xstat *xstats_base; + struct nfp_flower_representor *repr; + + if (rte_eth_dev_is_repr(dev)) { + repr = dev->data->dev_private; + hw = repr->app_fw_flower->pf_hw; + + mac_stats = repr->mac_stats; + xstats_base = repr->repr_xstats_base; + } else { + hw = dev->data->dev_private; + + mac_stats = hw->mac_stats; + xstats_base = hw->eth_xstats_base; + } - hw = nfp_net_get_hw(dev); xstat = nfp_net_xstats[index]; if (xstat.group == NFP_XSTAT_GROUP_MAC) - value = nn_readq(hw->mac_stats + xstat.offset); + value = nn_readq(mac_stats + xstat.offset); else value = nn_cfg_readq(&hw->super, xstat.offset); @@ -1009,7 +1035,7 @@ nfp_net_xstats_value(const struct rte_eth_dev *dev, * baseline value. The result is the count of this statistic since the last time * it was "reset". */ - return value - hw->eth_xstats_base[index].value; + return value - xstats_base[index].value; } /* NOTE: All callers ensure dev is always set. */ @@ -1130,17 +1156,29 @@ nfp_net_xstats_reset(struct rte_eth_dev *dev) uint32_t id; uint32_t read_size; struct nfp_net_hw *hw; + struct rte_eth_xstat *xstats_base; + struct nfp_flower_representor *repr; - hw = nfp_net_get_hw(dev); read_size = nfp_net_xstats_size(dev); + if (rte_eth_dev_is_repr(dev)) { + repr = dev->data->dev_private; + xstats_base = repr->repr_xstats_base; + } else { + hw = dev->data->dev_private; + xstats_base = hw->eth_xstats_base; + } + for (id = 0; id < read_size; id++) { - hw->eth_xstats_base[id].id = id; - hw->eth_xstats_base[id].value = nfp_net_xstats_value(dev, id, true); + xstats_base[id].id = id; + xstats_base[id].value = nfp_net_xstats_value(dev, id, true); } /* Successfully reset xstats, now call function to reset basic stats. */ - return nfp_net_stats_reset(dev); + if (rte_eth_dev_is_repr(dev)) + return nfp_flower_repr_stats_reset(dev); + else + return nfp_net_stats_reset(dev); } void -- 2.39.1