From patchwork Tue Jun 27 07:50:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 781028 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wxdRC6yS9z9ryb for ; Tue, 27 Jun 2017 17:51:35 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="q6+25Wn2"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752590AbdF0Hve (ORCPT ); Tue, 27 Jun 2017 03:51:34 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:33110 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752545AbdF0HvM (ORCPT ); Tue, 27 Jun 2017 03:51:12 -0400 Received: by mail-pf0-f177.google.com with SMTP id e7so12632278pfk.0 for ; Tue, 27 Jun 2017 00:51:12 -0700 (PDT) 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; bh=z8l8RSPm1zxKp1dpuCFfzGLM0I7bFkt0QGjZTZ9ne/I=; b=q6+25Wn26DcHvTNEGM4G1bImUsSE1WYQHFwn33wB5JPK4fZ2kB+EYOn93usEK2vYR6 uHcJ17shIp8Uozx7B/4/AFpYXSNAzS7mAldqBBxb6dQoVbOJ5xUeGyG4hhAOIGc7zXMZ HQyuAIjTrnTxfMyn549zOYSgIMz0uG+46dK4fUfEA1zabrWaZxUJGI/y1/1IxoIaQznn O4Ln53LzFlSmPA0VTClTjlBq1tC9KZPRN8QsbAs1mtUqTlI/2B9yUpJIfYKAHqmsmijZ Li8V0moGqxP9MRWvBdpL4lgYnFOAXnrFGgQzHJm/OQvHzmsLBZ9/VxNPP+DqjHFenPqU qtKA== 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; bh=z8l8RSPm1zxKp1dpuCFfzGLM0I7bFkt0QGjZTZ9ne/I=; b=BWK3oBp50XvasxyvsgctC1ljp0JHVvsdvwMMQHUmd615w3o5cYeYkoGXzm1EZHVnTA ha4IbGfrPM8znrevZD/OZf6rEFbtXEboPS4q0Izpaz0lg/c/sf35+P3BUYzb4xgBNMZ9 0Dc3aDv858X5/4CfL36SxCbS/Zg9ZnKy/wz3Cp4jIoEHJ+kb8VnsC2caqakoeZt/2jL7 OcMntuvACAI0YqOyk60Z8MpPf0cf+dom2u88M53rTrpfK7LJJg4/Y5egUMTnk2l2H0b2 2X+KVDPyBu/SwCGeBbzex8z6Xm6NnhQCUS0OIz+alKDGXs7J82FxlTRjLusmogTizYTl BUnw== X-Gm-Message-State: AKS2vOxUpVVDnm1PF2AW/PZ/xr3ytGng8zxML/Xd3p2XmH0qsZorh4jj gWbyPgkqP3cqaywsqMg= X-Received: by 10.84.229.69 with SMTP id d5mr4281661pln.197.1498549871811; Tue, 27 Jun 2017 00:51:11 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id c19sm4205282pfj.15.2017.06.27.00.51.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Jun 2017 00:51:11 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next 07/14] nfp: make the representor get stats app-independent Date: Tue, 27 Jun 2017 00:50:21 -0700 Message-Id: <20170627075028.4009-8-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170627075028.4009-1-jakub.kicinski@netronome.com> References: <20170627075028.4009-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Thanks to the fact that all representors will now have an nfp_port, we can depend on information there to provide a app-independent .ndo_get_stats64(). Signed-off-by: Jakub Kicinski Reviewed-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/flower/main.c | 16 +------------ drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 28 +++++++++++++++-------- drivers/net/ethernet/netronome/nfp/nfp_net_repr.h | 4 ++-- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c index 757bc3d78ea4..2e66d51ec104 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.c +++ b/drivers/net/ethernet/netronome/nfp/flower/main.c @@ -104,20 +104,6 @@ nfp_flower_repr_get(struct nfp_app *app, u32 port_id) return reprs->reprs[port]; } -static void -nfp_flower_repr_netdev_get_stats64(struct net_device *netdev, - struct rtnl_link_stats64 *stats) -{ - struct nfp_repr *repr = netdev_priv(netdev); - enum nfp_repr_type type; - u32 port_id; - u8 port = 0; - - port_id = repr->dst->u.port_info.port_id; - type = nfp_flower_repr_get_type_and_port(repr->app, port_id, &port); - nfp_repr_get_stats64(repr->app, type, port, stats); -} - static int nfp_flower_repr_netdev_open(struct net_device *netdev) { int err; @@ -144,7 +130,7 @@ static const struct net_device_ops nfp_flower_repr_netdev_ops = { .ndo_open = nfp_flower_repr_netdev_open, .ndo_stop = nfp_flower_repr_netdev_stop, .ndo_start_xmit = nfp_repr_xmit, - .ndo_get_stats64 = nfp_flower_repr_netdev_get_stats64, + .ndo_get_stats64 = nfp_repr_get_stats64, .ndo_has_offload_stats = nfp_repr_has_offload_stats, .ndo_get_offload_stats = nfp_repr_get_offload_stats, }; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 44adcc5df11e..6f1548c6840c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c @@ -37,6 +37,7 @@ #include #include "nfpcore/nfp_cpp.h" +#include "nfpcore/nfp_nsp.h" #include "nfp_app.h" #include "nfp_main.h" #include "nfp_net_ctrl.h" @@ -136,18 +137,27 @@ nfp_repr_pf_get_stats64(const struct nfp_app *app, u8 pf, } void -nfp_repr_get_stats64(const struct nfp_app *app, enum nfp_repr_type type, - u8 port, struct rtnl_link_stats64 *stats) +nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats) { - switch (type) { - case NFP_REPR_TYPE_PHYS_PORT: - nfp_repr_phy_port_get_stats64(app, port, stats); + struct nfp_repr *repr = netdev_priv(netdev); + struct nfp_eth_table_port *eth_port; + struct nfp_app *app = repr->app; + + if (WARN_ON(!repr->port)) + return; + + switch (repr->port->type) { + case NFP_PORT_PHYS_PORT: + eth_port = __nfp_port_get_eth_port(repr->port); + if (!eth_port) + break; + nfp_repr_phy_port_get_stats64(app, eth_port->index, stats); break; - case NFP_REPR_TYPE_PF: - nfp_repr_pf_get_stats64(app, port, stats); + case NFP_PORT_PF_PORT: + nfp_repr_pf_get_stats64(app, repr->port->pf_id, stats); break; - case NFP_REPR_TYPE_VF: - nfp_repr_vf_get_stats64(app, port, stats); + case NFP_PORT_VF_PORT: + nfp_repr_vf_get_stats64(app, repr->port->vf_id, stats); default: break; } diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.h b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.h index c5ed6611f708..e970661ecd42 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.h @@ -99,8 +99,8 @@ enum nfp_repr_type { void nfp_repr_inc_rx_stats(struct net_device *netdev, unsigned int len); void -nfp_repr_get_stats64(const struct nfp_app *app, enum nfp_repr_type type, - u8 port, struct rtnl_link_stats64 *stats); +nfp_repr_get_stats64(struct net_device *netdev, + struct rtnl_link_stats64 *stats); bool nfp_repr_has_offload_stats(const struct net_device *dev, int attr_id); int nfp_repr_get_offload_stats(int attr_id, const struct net_device *dev, void *stats);