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 11434A0507; Wed, 27 Apr 2022 12:16:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 36714427FB; Wed, 27 Apr 2022 12:15:33 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 9E73042816 for ; Wed, 27 Apr 2022 12:15:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651054529; x=1682590529; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ORvOH+Jg1fxAwAsA3qSvPXgZe5dtZARv4p09Ec+Zqr0=; b=f8Mdljr3/Bs4PAcxE8/pAKl7JzeKvkFU2tU66fT0eIbPSb5dcZBIrMbt 3OPoG80MNMRIWThXWqi+q3051BOTvdQ6qxfrpJOpIAql4rNoZbQ0d/fBx 6gc1B7Bv/nvZniuajvuNuYNTujq+iu1TlTdIpR4KPPRY+DopFDnhegOlX eiHfHB0sruYJL1nktLdbSJlNch1cPzQRorRdmlkl27QaPTyqnfNui7x6Y u/HF5LsuW2bdFfpU8NNbT9YLVJh1M2gQL916wqbUqKWxjix+o3O4ofXnN i+UiMF1WP/JGVkLvFTkoNGkhdHcVPNsLy91mOAUCuSXp7IUx4pv0/A2+Q A==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="328827328" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="328827328" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 03:15:29 -0700 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="580514691" Received: from intel-cd-odc-kevin.cd.intel.com ([10.240.178.195]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 03:15:27 -0700 From: Kevin Liu To: dev@dpdk.org Cc: qiming.yang@intel.com, qi.z.zhang@intel.com, stevex.yang@intel.com, Kevin Liu Subject: [PATCH v6 09/12] net/ice: add extended stats Date: Wed, 27 Apr 2022 18:12:58 +0000 Message-Id: <20220427181301.1414196-10-kevinx.liu@intel.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220427181301.1414196-1-kevinx.liu@intel.com> References: <20220421111403.1334288-1-kevinx.liu@intel.com> <20220427181301.1414196-1-kevinx.liu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 implementation of xstats() functions in DCF PMD. Signed-off-by: Kevin Liu --- doc/guides/nics/features/ice_dcf.ini | 1 + doc/guides/rel_notes/release_22_07.rst | 1 + drivers/net/ice/ice_dcf.h | 22 ++++++++ drivers/net/ice/ice_dcf_ethdev.c | 75 ++++++++++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/doc/guides/nics/features/ice_dcf.ini b/doc/guides/nics/features/ice_dcf.ini index 01e7527915..54ea7f150c 100644 --- a/doc/guides/nics/features/ice_dcf.ini +++ b/doc/guides/nics/features/ice_dcf.ini @@ -23,6 +23,7 @@ Allmulticast mode = Y Unicast MAC filter = Y VLAN filter = Y VLAN offload = Y +Extended stats = Y Basic stats = Y Linux = Y x86-32 = Y diff --git a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst index 268f3bba9a..1f404a6ee5 100644 --- a/doc/guides/rel_notes/release_22_07.rst +++ b/doc/guides/rel_notes/release_22_07.rst @@ -70,6 +70,7 @@ New Features * Added support dcf promisc configuration. * Added support dcf MAC configuration. * Added support dcf VLAN filter and offload configuration. + * Added add extended stats. Removed Items ------------- diff --git a/drivers/net/ice/ice_dcf.h b/drivers/net/ice/ice_dcf.h index 78df202a77..44a61404c3 100644 --- a/drivers/net/ice/ice_dcf.h +++ b/drivers/net/ice/ice_dcf.h @@ -15,6 +15,12 @@ #include "base/ice_type.h" #include "ice_logs.h" +/* ICE_DCF_DEV_PRIVATE_TO */ +#define ICE_DCF_DEV_PRIVATE_TO_ADAPTER(adapter) \ + ((struct ice_dcf_adapter *)adapter) +#define ICE_DCF_DEV_PRIVATE_TO_VF(adapter) \ + (&((struct ice_dcf_adapter *)adapter)->vf) + struct dcf_virtchnl_cmd { TAILQ_ENTRY(dcf_virtchnl_cmd) next; @@ -74,6 +80,22 @@ struct ice_dcf_tm_conf { bool committed; }; +struct ice_dcf_eth_stats { + u64 rx_bytes; /* gorc */ + u64 rx_unicast; /* uprc */ + u64 rx_multicast; /* mprc */ + u64 rx_broadcast; /* bprc */ + u64 rx_discards; /* rdpc */ + u64 rx_unknown_protocol; /* rupp */ + u64 tx_bytes; /* gotc */ + u64 tx_unicast; /* uptc */ + u64 tx_multicast; /* mptc */ + u64 tx_broadcast; /* bptc */ + u64 tx_discards; /* tdpc */ + u64 tx_errors; /* tepc */ + u64 rx_no_desc; /* repc */ + u64 rx_errors; /* repc */ +}; struct ice_dcf_hw { struct iavf_hw avf; diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index e58cdf47d2..6503700e02 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -45,6 +45,30 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev); static int ice_dcf_dev_uninit(struct rte_eth_dev *eth_dev); +struct rte_ice_dcf_xstats_name_off { + char name[RTE_ETH_XSTATS_NAME_SIZE]; + unsigned int offset; +}; + +static const struct rte_ice_dcf_xstats_name_off rte_ice_dcf_stats_strings[] = { + {"rx_bytes", offsetof(struct ice_dcf_eth_stats, rx_bytes)}, + {"rx_unicast_packets", offsetof(struct ice_dcf_eth_stats, rx_unicast)}, + {"rx_multicast_packets", offsetof(struct ice_dcf_eth_stats, rx_multicast)}, + {"rx_broadcast_packets", offsetof(struct ice_dcf_eth_stats, rx_broadcast)}, + {"rx_dropped_packets", offsetof(struct ice_dcf_eth_stats, rx_discards)}, + {"rx_unknown_protocol_packets", offsetof(struct ice_dcf_eth_stats, + rx_unknown_protocol)}, + {"tx_bytes", offsetof(struct ice_dcf_eth_stats, tx_bytes)}, + {"tx_unicast_packets", offsetof(struct ice_dcf_eth_stats, tx_unicast)}, + {"tx_multicast_packets", offsetof(struct ice_dcf_eth_stats, tx_multicast)}, + {"tx_broadcast_packets", offsetof(struct ice_dcf_eth_stats, tx_broadcast)}, + {"tx_dropped_packets", offsetof(struct ice_dcf_eth_stats, tx_discards)}, + {"tx_error_packets", offsetof(struct ice_dcf_eth_stats, tx_errors)}, +}; + +#define ICE_DCF_NB_XSTATS (sizeof(rte_ice_dcf_stats_strings) / \ + sizeof(rte_ice_dcf_stats_strings[0])) + static uint16_t ice_dcf_recv_pkts(__rte_unused void *rx_queue, __rte_unused struct rte_mbuf **bufs, @@ -1358,6 +1382,54 @@ ice_dcf_stats_reset(struct rte_eth_dev *dev) return 0; } +static int ice_dcf_xstats_get_names(__rte_unused struct rte_eth_dev *dev, + struct rte_eth_xstat_name *xstats_names, + __rte_unused unsigned int limit) +{ + unsigned int i; + + if (xstats_names != NULL) + for (i = 0; i < ICE_DCF_NB_XSTATS; i++) { + snprintf(xstats_names[i].name, + sizeof(xstats_names[i].name), + "%s", rte_ice_dcf_stats_strings[i].name); + } + return ICE_DCF_NB_XSTATS; +} + +static int ice_dcf_xstats_get(struct rte_eth_dev *dev, + struct rte_eth_xstat *xstats, unsigned int n) +{ + int ret; + unsigned int i; + struct ice_dcf_adapter *adapter = + ICE_DCF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); + struct ice_dcf_hw *hw = &adapter->real_hw; + struct virtchnl_eth_stats *postats = &hw->eth_stats_offset; + struct virtchnl_eth_stats pnstats; + + if (n < ICE_DCF_NB_XSTATS) + return ICE_DCF_NB_XSTATS; + + ret = ice_dcf_query_stats(hw, &pnstats); + if (ret != 0) + return 0; + + if (!xstats) + return 0; + + ice_dcf_update_stats(postats, &pnstats); + + /* loop over xstats array and values from pstats */ + for (i = 0; i < ICE_DCF_NB_XSTATS; i++) { + xstats[i].id = i; + xstats[i].value = *(uint64_t *)(((char *)&pnstats) + + rte_ice_dcf_stats_strings[i].offset); + } + + return ICE_DCF_NB_XSTATS; +} + static void ice_dcf_free_repr_info(struct ice_dcf_adapter *dcf_adapter) { @@ -1629,6 +1701,9 @@ static const struct eth_dev_ops ice_dcf_eth_dev_ops = { .link_update = ice_dcf_link_update, .stats_get = ice_dcf_stats_get, .stats_reset = ice_dcf_stats_reset, + .xstats_get = ice_dcf_xstats_get, + .xstats_get_names = ice_dcf_xstats_get_names, + .xstats_reset = ice_dcf_stats_reset, .promiscuous_enable = ice_dcf_dev_promiscuous_enable, .promiscuous_disable = ice_dcf_dev_promiscuous_disable, .allmulticast_enable = ice_dcf_dev_allmulticast_enable, -- 2.33.1