From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D60CCC282CD for ; Mon, 28 Jan 2019 23:46:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A4AC82171F for ; Mon, 28 Jan 2019 23:46:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="b9qA32qk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727429AbfA1XqC (ORCPT ); Mon, 28 Jan 2019 18:46:02 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43633 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727404AbfA1Xp7 (ORCPT ); Mon, 28 Jan 2019 18:45:59 -0500 Received: by mail-qk1-f194.google.com with SMTP id z18so10493791qkj.10 for ; Mon, 28 Jan 2019 15:45:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aCEApHHXpGnzzeucp40YRx+XZTTlhzb1bxUoT4t3YBA=; b=b9qA32qkc9GwrVGabOL4NnMjsH9ofZbye5ly3ymN5hiqT90f8agw7qRwcpMBJ+P86t dJ5ydlICvoBUvnfn58u0uFvis3tiDx/n2flYEazvDWmoqP/x2ReZz9Q4wu83CvyBhecM goFmqY4jS61otWvDTwEm7i1Aw/aBqW51hfjtdQyQvBhBPwJ/mwPO9tHKTvTkqdJv5sVM j0brI08OpqapVC2MsUUC0QX0gCA/t4tvcW9Fn6EDlmjpx10jlPaX9woM8RXr5GwkuDBM qMf6Tmty/OBYUpW6G0OA0etk86Jq5Z17Om4Nly63IXD+QE7xt8JRbR6sG2GdcQWqPe13 mMRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aCEApHHXpGnzzeucp40YRx+XZTTlhzb1bxUoT4t3YBA=; b=lj1XGROEaTJFqatKj3z+LkqabkUzqC+7UxG03aqMVTKRGhzg+P/wH4W9wX0xn9S2my Xcw3dKRGmCFvoFBBL535SwzktcctaE4tFTAfhwFffjqGsqPi7MVXSiGSPfX8Zacp8VQV +GIZBnSyxrLrFULvXcpN5CuzX9ktwf7r+JKsuQnCfQ7waj6rAjUnfEiajalEzCMvLCuu hJwtWmR44XPgk8Jyv54MRfVCyjJBN7Leg/d1unqz6aIXHvv4Be01SYk/78e+g/QXe9p0 EGA+8iGa2MgwQgCSfTeZ2s6NuYAVk9JbesnQ9yFsTD/yT6r/vhPJv5DEXKDC5NrzeCXb LG1A== X-Gm-Message-State: AJcUukfpWEaE0aoGjQH2ZD8G57xpxGoSfRJrlYARGwuIouNH5QDq0Of/ GSwS1LeZKxXDtt/twJE0CiqN4A== X-Google-Smtp-Source: ALg8bN4c4z2sbXFJTlcbgOJAxDyfKPf77n8srVAzjHrII/3n8BKejynWQMCp5hXoDUJNl4zrXEbJ7Q== X-Received: by 2002:a37:6801:: with SMTP id d1mr20815067qkc.283.1548719158446; Mon, 28 Jan 2019 15:45:58 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id k81sm34336320qkk.18.2019.01.28.15.45.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Jan 2019 15:45:57 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net Cc: oss-drivers@netronome.com, netdev@vger.kernel.org, jiri@resnulli.us, f.fainelli@gmail.com, andrew@lunn.ch, mkubecek@suse.cz, dsahern@gmail.com, simon.horman@netronome.com, jesse.brandeburg@intel.com, maciejromanfijalkowski@gmail.com, vasundhara-v.volam@broadcom.com, michael.chan@broadcom.com, shalomt@mellanox.com, idosch@mellanox.com, Jakub Kicinski Subject: [RFC 05/14] nfp: very basic hstat support Date: Mon, 28 Jan 2019 15:44:58 -0800 Message-Id: <20190128234507.32028-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190128234507.32028-1-jakub.kicinski@netronome.com> References: <20190128234507.32028-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Expose basic vNIC device statistics via hstat. Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/Makefile | 1 + .../net/ethernet/netronome/nfp/nfp_hstat.c | 70 +++++++++++++++++++ drivers/net/ethernet/netronome/nfp/nfp_net.h | 3 + .../ethernet/netronome/nfp/nfp_net_common.c | 1 + 4 files changed, 75 insertions(+) create mode 100644 drivers/net/ethernet/netronome/nfp/nfp_hstat.c diff --git a/drivers/net/ethernet/netronome/nfp/Makefile b/drivers/net/ethernet/netronome/nfp/Makefile index 47c708f08ade..4721abe9bfbf 100644 --- a/drivers/net/ethernet/netronome/nfp/Makefile +++ b/drivers/net/ethernet/netronome/nfp/Makefile @@ -19,6 +19,7 @@ nfp-objs := \ nfp_app.o \ nfp_app_nic.o \ nfp_devlink.o \ + nfp_hstat.o \ nfp_hwmon.o \ nfp_main.o \ nfp_net_common.o \ diff --git a/drivers/net/ethernet/netronome/nfp/nfp_hstat.c b/drivers/net/ethernet/netronome/nfp/nfp_hstat.c new file mode 100644 index 000000000000..9480d3b6caa5 --- /dev/null +++ b/drivers/net/ethernet/netronome/nfp/nfp_hstat.c @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +/* Copyright (C) 2019 Netronome Systems, Inc. */ + +#include + +#include "nfp_net.h" + +/* NFD per-vNIC stats */ +static int +nfp_hstat_vnic_nfd_basic_get_rx(struct net_device *netdev, + struct rtnl_hstat_req *req, + const struct rtnl_hstat_group *grp) +{ + struct nfp_net *nn = netdev_priv(netdev); + + rtnl_hstat_dump(req, IFLA_HSTATS_STAT_LINUX_PKTS, + nn_readq(nn, NFP_NET_CFG_STATS_RX_FRAMES)); + rtnl_hstat_dump(req, IFLA_HSTATS_STAT_LINUX_BYTES, + nn_readq(nn, NFP_NET_CFG_STATS_RX_OCTETS)); + return 0; +} + +static const struct rtnl_hstat_group nfp_hstat_vnic_nfd_rx = { + .qualifiers = { + RTNL_HSTATS_QUALS_BASIC(DEV, RX), + }, + + .get_stats = nfp_hstat_vnic_nfd_basic_get_rx, + .stats = { + [0] = RTNL_HSTATS_STAT_LINUX_PKTS_BIT | + RTNL_HSTATS_STAT_LINUX_BYTES_BIT, + }, + .stats_cnt = 2, +}; + +static int +nfp_hstat_vnic_nfd_basic_get_tx(struct net_device *netdev, + struct rtnl_hstat_req *req, + const struct rtnl_hstat_group *grp) +{ + struct nfp_net *nn = netdev_priv(netdev); + + rtnl_hstat_dump(req, IFLA_HSTATS_STAT_LINUX_PKTS, + nn_readq(nn, NFP_NET_CFG_STATS_TX_FRAMES)); + rtnl_hstat_dump(req, IFLA_HSTATS_STAT_LINUX_BYTES, + nn_readq(nn, NFP_NET_CFG_STATS_TX_OCTETS)); + return 0; +} + +static const struct rtnl_hstat_group nfp_hstat_vnic_nfd_tx = { + .qualifiers = { + RTNL_HSTATS_QUALS_BASIC(DEV, TX), + }, + + .get_stats = nfp_hstat_vnic_nfd_basic_get_tx, + .stats = { + [0] = RTNL_HSTATS_STAT_LINUX_PKTS_BIT | + RTNL_HSTATS_STAT_LINUX_BYTES_BIT, + }, + .stats_cnt = 2, +}; + +int nfp_net_hstat_get_groups(const struct net_device *netdev, + struct rtnl_hstat_req *req) +{ + rtnl_hstat_add_grp(req, &nfp_hstat_vnic_nfd_rx); + rtnl_hstat_add_grp(req, &nfp_hstat_vnic_nfd_tx); + + return 0; +} diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net.h b/drivers/net/ethernet/netronome/nfp/nfp_net.h index 93de25b39bc1..08396a23edeb 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_net.h @@ -105,6 +105,7 @@ struct nfp_eth_table_port; struct nfp_net; struct nfp_net_r_vector; struct nfp_port; +struct rtnl_hstat_req; /* Convenience macro for wrapping descriptor index on ring size */ #define D_IDX(ring, idx) ((idx) & ((ring)->cnt - 1)) @@ -910,4 +911,6 @@ static inline void nfp_net_debugfs_dir_clean(struct dentry **dir) } #endif /* CONFIG_NFP_DEBUG */ +int nfp_net_hstat_get_groups(const struct net_device *dev, + struct rtnl_hstat_req *req); #endif /* _NFP_NET_H_ */ diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 7d2d4241498f..87ebfc3f0471 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -3531,6 +3531,7 @@ const struct net_device_ops nfp_net_netdev_ops = { .ndo_udp_tunnel_add = nfp_net_add_vxlan_port, .ndo_udp_tunnel_del = nfp_net_del_vxlan_port, .ndo_bpf = nfp_net_xdp, + .ndo_hstat_get_groups = nfp_net_hstat_get_groups, }; /** -- 2.19.2