From patchwork Tue Feb 11 18:13:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13970440 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A0651E3DEC for ; Tue, 11 Feb 2025 18:14:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297642; cv=none; b=WJM1VfOtvg0pU40VJOWQfUwAB/8nVGCxJ0N9hnzcg8fXB82ULVBtsh0WaXUBbxMUGH9qnFETK/GnQPqs/o5wgAUhJUgyrg5zc+go6586LVZFfFKLe5TgBmixl48Qf8Zh1NKEIjwDiEVa8MMS7MifPsGccnYt6X1mKD8CH+nHMc4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297642; c=relaxed/simple; bh=u6BAnU3rqBdcQTY0+FEqwYQ/ZkOPr0nw31oH7bYMdn0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LlOFzKePf0KbANLgl4PN1IaLsxjwWCMBYKp9nh/dDgu1dWTnfsbVm5YHRkkwags6fgxJwFPyyZgjuUsH2n7ahSx6tO1EzMblpr/P5wzIpZodRdR5eTZ1max9RoRZWAQiSUDkqkRXyqvnSo2/XFIYzliJXGf3KvS5dwtYzgX+uIQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ORGGg+bt; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ORGGg+bt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 981C0C4CEE8; Tue, 11 Feb 2025 18:14:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739297642; bh=u6BAnU3rqBdcQTY0+FEqwYQ/ZkOPr0nw31oH7bYMdn0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ORGGg+bt0xDVZYy9T77ERpQTLs+g/GE4pE2zUW6Tp9/A5QBzxmvxwzMGlWRz1mCT6 Dj8sbQNA5VbJuD6hp2l0P6aqQCIL1F4Z7s6rRwpRSzhH6i7KderpqsG6+Ps2eJTMY0 c+RPLmHMXXq3nY9yKWogqbB4knKLrt5nKyiV/JkZIW1jEIOLCDuO2C5h+MrulwSpM3 +cZO0ugXQwdJdE/D884xI+v7zjBHlJ2ohoizY20DR7zAUHfsouCNp+OHxJNjg7Qab/ 5gulEBlUKlYtqrH6zlK0WUV56QJ63RELXushJnUsVh9WC1iR+oxKTytgWn2iSlpSoi nCp9Yr7ENrDIQ== From: Jakub Kicinski To: davem@davemloft.net Cc: alexanderduyck@fb.com, netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org, Jakub Kicinski , jdamato@fastly.com Subject: [PATCH net-next 1/5] net: report csum_complete via qstats Date: Tue, 11 Feb 2025 10:13:52 -0800 Message-ID: <20250211181356.580800-2-kuba@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250211181356.580800-1-kuba@kernel.org> References: <20250211181356.580800-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Commit 13c7c941e729 ("netdev: add qstat for csum complete") reserved the entry for csum complete in the qstats uAPI. Start reporting this value now that we have a driver which needs it. Signed-off-by: Jakub Kicinski Reviewed-by: Joe Damato --- CC: jdamato@fastly.com --- include/net/netdev_queues.h | 1 + net/core/netdev-genl.c | 1 + 2 files changed, 2 insertions(+) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index 73d3401261a6..825141d675e5 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -23,6 +23,7 @@ struct netdev_queue_stats_rx { u64 hw_drops; u64 hw_drop_overruns; + u64 csum_complete; u64 csum_unnecessary; u64 csum_none; u64 csum_bad; diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 0dcd4faefd8d..c18bb53d13fd 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -581,6 +581,7 @@ netdev_nl_stats_write_rx(struct sk_buff *rsp, struct netdev_queue_stats_rx *rx) netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROPS, rx->hw_drops) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, rx->hw_drop_overruns) || + netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_COMPLETE, rx->csum_complete) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, rx->csum_unnecessary) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_NONE, rx->csum_none) || netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_BAD, rx->csum_bad) || From patchwork Tue Feb 11 18:13:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13970441 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 096871E47AE for ; Tue, 11 Feb 2025 18:14:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; cv=none; b=ryahHxm5LXC7fNIcVc8uu+tFI58wrHkOk5wly7Xh3UYRM2lcykCAImzuaqfYJYNb7s3V2C3qrb9L/GhzjoBa0XP6UjTDmzQCt+wtsbSchS874eIA78Vx+1a8yM/4ovcyK2zl5O4IJP3ywGKyhNaIyoEvrhElDg3gWS+v/YWN37Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; c=relaxed/simple; bh=qCWrBrnoIq0DABjL3DtB9fhpu2usvA2j4sIYRr502hk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b7Od+ZGNjA/+VoFdXw0RegDMkcrmIM3zgqoufTHCOaB6aJ96y5YZsh8Aeo0/fx0Rj0JiosgCg58a4/PdRrCHnzb0MO7TXCCGwaO2E7chDOhcRIAJpQtYRJE2rRTC3FZpMiTNd18QXRz5eu/imk/bRez1w3hmeBJdFuSjPPADIuM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZejL14ds; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZejL14ds" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 319DEC4CEE9; Tue, 11 Feb 2025 18:14:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739297642; bh=qCWrBrnoIq0DABjL3DtB9fhpu2usvA2j4sIYRr502hk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZejL14ds6m0f5sK1LNQKARCVn5fb1m21/4deYyZTg4SSWevuryBx4GwcIu6xBeDOk /F/XkASyX/jZWM5hpiboDI4AMDjHI+S3zjljCcteHmuZMXyPK+x/pRRAlF0Wgunalm JlWZil/h3c7tNdU71lJf0dl0Fe610YoUuUarGG/Bc3r+eBBGF43umB8EBwP3cn0VOw JyY5zLOJi12mfw5atRLeORJ6+X9ALFaaWc/ob9B5jOQcg2jLul9xtAQigONPhKBcWl PlIPNbXsuzllRrbK/jmry7jdGGu/kxlba3LnmP8MJBm6Ou3XdKDP0TWHyJwJnKckCm FwI1LBbGNq76Q== From: Jakub Kicinski To: davem@davemloft.net Cc: alexanderduyck@fb.com, netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org, Jakub Kicinski Subject: [PATCH net-next 2/5] eth: fbnic: wrap tx queue stats in a struct Date: Tue, 11 Feb 2025 10:13:53 -0800 Message-ID: <20250211181356.580800-3-kuba@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250211181356.580800-1-kuba@kernel.org> References: <20250211181356.580800-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The queue stats struct is used for Rx and Tx queues. Wrap the Tx stats in a struct and a union, so that we can reuse the same space for Rx stats on Rx queues. This also makes it easy to add an assert to the stat handling code to catch new stats not being aggregated on shutdown. Signed-off-by: Jakub Kicinski Acked-by: Joe Damato --- drivers/net/ethernet/meta/fbnic/fbnic_txrx.h | 8 ++++++-- drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c | 8 ++++---- drivers/net/ethernet/meta/fbnic/fbnic_txrx.c | 10 ++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h index c2a94f31f71b..d6ae8462584f 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h @@ -57,8 +57,12 @@ struct fbnic_queue_stats { u64 packets; u64 bytes; u64 dropped; - u64 ts_packets; - u64 ts_lost; + union { + struct { + u64 ts_packets; + u64 ts_lost; + } twq; + }; struct u64_stats_sync syncp; }; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c index 9503c36620c6..fb7139a1da46 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c @@ -1224,14 +1224,14 @@ static void fbnic_get_ts_stats(struct net_device *netdev, unsigned int start; int i; - ts_stats->pkts = fbn->tx_stats.ts_packets; - ts_stats->lost = fbn->tx_stats.ts_lost; + ts_stats->pkts = fbn->tx_stats.twq.ts_packets; + ts_stats->lost = fbn->tx_stats.twq.ts_lost; for (i = 0; i < fbn->num_tx_queues; i++) { ring = fbn->tx[i]; do { start = u64_stats_fetch_begin(&ring->stats.syncp); - ts_packets = ring->stats.ts_packets; - ts_lost = ring->stats.ts_lost; + ts_packets = ring->stats.twq.ts_packets; + ts_lost = ring->stats.twq.ts_lost; } while (u64_stats_fetch_retry(&ring->stats.syncp, start)); ts_stats->pkts += ts_packets; ts_stats->lost += ts_lost; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c index d4d7027df9a0..b60dd1c9918e 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c @@ -444,7 +444,7 @@ static void fbnic_clean_twq0(struct fbnic_napi_vector *nv, int napi_budget, if (unlikely(discard)) { u64_stats_update_begin(&ring->stats.syncp); ring->stats.dropped += total_packets; - ring->stats.ts_lost += ts_lost; + ring->stats.twq.ts_lost += ts_lost; u64_stats_update_end(&ring->stats.syncp); netdev_tx_completed_queue(txq, total_packets, total_bytes); @@ -507,7 +507,7 @@ static void fbnic_clean_tsq(struct fbnic_napi_vector *nv, skb_tstamp_tx(skb, &hwtstamp); u64_stats_update_begin(&ring->stats.syncp); - ring->stats.ts_packets++; + ring->stats.twq.ts_packets++; u64_stats_update_end(&ring->stats.syncp); } @@ -1065,8 +1065,10 @@ void fbnic_aggregate_ring_tx_counters(struct fbnic_net *fbn, fbn->tx_stats.bytes += stats->bytes; fbn->tx_stats.packets += stats->packets; fbn->tx_stats.dropped += stats->dropped; - fbn->tx_stats.ts_lost += stats->ts_lost; - fbn->tx_stats.ts_packets += stats->ts_packets; + fbn->tx_stats.twq.ts_lost += stats->twq.ts_lost; + fbn->tx_stats.twq.ts_packets += stats->twq.ts_packets; + /* Remember to add new stats here */ + BUILD_BUG_ON(sizeof(fbn->tx_stats.twq) / 8 != 2); } static void fbnic_remove_tx_ring(struct fbnic_net *fbn, From patchwork Tue Feb 11 18:13:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13970442 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 402EF1E47CC for ; Tue, 11 Feb 2025 18:14:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; cv=none; b=HV/tZI2OqFjtUv5eiVLexJBnOkFcD1U4EjOe9tG77l3wcFVC16raWoL5qj24cnO6KPzgRiLTmToFA0fdhgsnBcQXx0zdTjJIVSGlJAhxRTzFaf8vT+LGUjIEvpW2DKW+vKrpk5s5FWPRMhfT4ptGyNEOahTBOWhOpgDBmCdHfYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; c=relaxed/simple; bh=UroB3/N9b/uz6aGncgzlcsa3qo9CyT8CNaclAO1kWjc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VwWbHFN9wPNqclV5WV0PiTZTKeZFN7UkTqVp3zSCNinBu/8rp5dZOCGnYJ9Iaesq82gZW9Jv+Tq39jGaFv3gMUUAG6Q8HA36zfCRlQGfn6SrEhqglpoQGqR48pH3dHClzshAGdtKk7ar3O61C0i2huS14EUsyqLJ7Who15Ccv+Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ajxfE/uB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ajxfE/uB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B60EFC4CEEA; Tue, 11 Feb 2025 18:14:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739297643; bh=UroB3/N9b/uz6aGncgzlcsa3qo9CyT8CNaclAO1kWjc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ajxfE/uBIGzXnictqo7v9KaYCSG0C/PIEKzdGEFspJKRw31X3LDBloTUS+HXuBLAj hdSpUfig/i4jTsBzYUdJxCL06617ClduYeMUxFdrvk2gwDTOF9COa6Af4Jd2wkwbVc qoU+7U8xv0rLcQ69mNziqLYziX+QfIpKmWO8AYPr2JrMgWrM8DdwfRaZFDycxwZTwG pRtqncv4swcsV3mr9IdErdg7l2coZyh+/40INUEyN5fCrWpgN0TOgwTp+Lqv3TrZ8B nGFXwy2eMOG5mPueGmb0vZ5q+TGxY/8nS4hHQj2mJ5537HkrpjKVfq15IoApKcGpOX ORUGCn2o/+VfQ== From: Jakub Kicinski To: davem@davemloft.net Cc: alexanderduyck@fb.com, netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org, Jakub Kicinski Subject: [PATCH net-next 3/5] eth: fbnic: report software Rx queue stats Date: Tue, 11 Feb 2025 10:13:54 -0800 Message-ID: <20250211181356.580800-4-kuba@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250211181356.580800-1-kuba@kernel.org> References: <20250211181356.580800-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Gather and report software Rx queue stats - checksum stats and allocation failures. Signed-off-by: Jakub Kicinski Acked-by: Joe Damato --- drivers/net/ethernet/meta/fbnic/fbnic_txrx.h | 5 +++ .../net/ethernet/meta/fbnic/fbnic_netdev.c | 12 +++++- drivers/net/ethernet/meta/fbnic/fbnic_txrx.c | 43 +++++++++++++++---- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h index d6ae8462584f..3fe4d1b6baad 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h @@ -62,6 +62,11 @@ struct fbnic_queue_stats { u64 ts_packets; u64 ts_lost; } twq; + struct { + u64 alloc_failed; + u64 csum_complete; + u64 csum_none; + } rx; }; struct u64_stats_sync syncp; }; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c index 14e7a8384bce..ceb6d1de9bcf 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c @@ -487,8 +487,9 @@ static void fbnic_get_queue_stats_rx(struct net_device *dev, int idx, struct fbnic_net *fbn = netdev_priv(dev); struct fbnic_ring *rxr = fbn->rx[idx]; struct fbnic_queue_stats *stats; + u64 bytes, packets, alloc_fail; + u64 csum_complete, csum_none; unsigned int start; - u64 bytes, packets; if (!rxr) return; @@ -498,10 +499,16 @@ static void fbnic_get_queue_stats_rx(struct net_device *dev, int idx, start = u64_stats_fetch_begin(&stats->syncp); bytes = stats->bytes; packets = stats->packets; + alloc_fail = stats->rx.alloc_failed; + csum_complete = stats->rx.csum_complete; + csum_none = stats->rx.csum_none; } while (u64_stats_fetch_retry(&stats->syncp, start)); rx->bytes = bytes; rx->packets = packets; + rx->alloc_fail = alloc_fail; + rx->csum_complete = csum_complete; + rx->csum_none = csum_none; } static void fbnic_get_queue_stats_tx(struct net_device *dev, int idx, @@ -538,6 +545,9 @@ static void fbnic_get_base_stats(struct net_device *dev, rx->bytes = fbn->rx_stats.bytes; rx->packets = fbn->rx_stats.packets; + rx->alloc_fail = fbn->rx_stats.rx.alloc_failed; + rx->csum_complete = fbn->rx_stats.rx.csum_complete; + rx->csum_none = fbn->rx_stats.rx.csum_none; } static const struct netdev_stat_ops fbnic_stat_ops = { diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c index b60dd1c9918e..66ba36fd3c08 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c @@ -198,12 +198,15 @@ fbnic_tx_offloads(struct fbnic_ring *ring, struct sk_buff *skb, __le64 *meta) } static void -fbnic_rx_csum(u64 rcd, struct sk_buff *skb, struct fbnic_ring *rcq) +fbnic_rx_csum(u64 rcd, struct sk_buff *skb, struct fbnic_ring *rcq, + u64 *csum_cmpl, u64 *csum_none) { skb_checksum_none_assert(skb); - if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM))) + if (unlikely(!(skb->dev->features & NETIF_F_RXCSUM))) { + (*csum_none)++; return; + } if (FIELD_GET(FBNIC_RCD_META_L4_CSUM_UNNECESSARY, rcd)) { skb->ip_summed = CHECKSUM_UNNECESSARY; @@ -212,6 +215,7 @@ fbnic_rx_csum(u64 rcd, struct sk_buff *skb, struct fbnic_ring *rcq) skb->ip_summed = CHECKSUM_COMPLETE; skb->csum = (__force __wsum)csum; + (*csum_cmpl)++; } } @@ -661,8 +665,13 @@ static void fbnic_fill_bdq(struct fbnic_napi_vector *nv, struct fbnic_ring *bdq) struct page *page; page = page_pool_dev_alloc_pages(nv->page_pool); - if (!page) + if (!page) { + u64_stats_update_begin(&bdq->stats.syncp); + bdq->stats.rx.alloc_failed++; + u64_stats_update_end(&bdq->stats.syncp); + break; + } fbnic_page_pool_init(bdq, i, page); fbnic_bd_prep(bdq, i, page); @@ -875,12 +884,13 @@ static void fbnic_rx_tstamp(struct fbnic_napi_vector *nv, u64 rcd, static void fbnic_populate_skb_fields(struct fbnic_napi_vector *nv, u64 rcd, struct sk_buff *skb, - struct fbnic_q_triad *qt) + struct fbnic_q_triad *qt, + u64 *csum_cmpl, u64 *csum_none) { struct net_device *netdev = nv->napi.dev; struct fbnic_ring *rcq = &qt->cmpl; - fbnic_rx_csum(rcd, skb, rcq); + fbnic_rx_csum(rcd, skb, rcq, csum_cmpl, csum_none); if (netdev->features & NETIF_F_RXHASH) skb_set_hash(skb, @@ -898,7 +908,8 @@ static bool fbnic_rcd_metadata_err(u64 rcd) static int fbnic_clean_rcq(struct fbnic_napi_vector *nv, struct fbnic_q_triad *qt, int budget) { - unsigned int packets = 0, bytes = 0, dropped = 0; + unsigned int packets = 0, bytes = 0, dropped = 0, alloc_failed = 0; + u64 csum_complete = 0, csum_none = 0; struct fbnic_ring *rcq = &qt->cmpl; struct fbnic_pkt_buff *pkt; s32 head0 = -1, head1 = -1; @@ -947,14 +958,22 @@ static int fbnic_clean_rcq(struct fbnic_napi_vector *nv, /* Populate skb and invalidate XDP */ if (!IS_ERR_OR_NULL(skb)) { - fbnic_populate_skb_fields(nv, rcd, skb, qt); + fbnic_populate_skb_fields(nv, rcd, skb, qt, + &csum_complete, + &csum_none); packets++; bytes += skb->len; napi_gro_receive(&nv->napi, skb); } else { - dropped++; + if (!skb) { + alloc_failed++; + dropped++; + } else { + dropped++; + } + fbnic_put_pkt_buff(nv, pkt, 1); } @@ -977,6 +996,9 @@ static int fbnic_clean_rcq(struct fbnic_napi_vector *nv, /* Re-add ethernet header length (removed in fbnic_build_skb) */ rcq->stats.bytes += ETH_HLEN * packets; rcq->stats.dropped += dropped; + rcq->stats.rx.alloc_failed += alloc_failed; + rcq->stats.rx.csum_complete += csum_complete; + rcq->stats.rx.csum_none += csum_none; u64_stats_update_end(&rcq->stats.syncp); /* Unmap and free processed buffers */ @@ -1054,6 +1076,11 @@ void fbnic_aggregate_ring_rx_counters(struct fbnic_net *fbn, fbn->rx_stats.bytes += stats->bytes; fbn->rx_stats.packets += stats->packets; fbn->rx_stats.dropped += stats->dropped; + fbn->rx_stats.rx.alloc_failed += stats->rx.alloc_failed; + fbn->rx_stats.rx.csum_complete += stats->rx.csum_complete; + fbn->rx_stats.rx.csum_none += stats->rx.csum_none; + /* Remember to add new stats here */ + BUILD_BUG_ON(sizeof(fbn->tx_stats.rx) / 8 != 3); } void fbnic_aggregate_ring_tx_counters(struct fbnic_net *fbn, From patchwork Tue Feb 11 18:13:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13970443 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCA36222582 for ; Tue, 11 Feb 2025 18:14:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; cv=none; b=adiTFKTU5Lj59dQtVqcM7u9elbnA4vb+qAd0ZeRuK4NBUJSC3tPrsvQeLVB5pRjhIaTGJoS4l6rOdxdSDRf5PSV5cGJuysvF32Wv1zxiW8fS01aYSU3KF9yvig/aq72wdJuA9+1uMdjoZ+2j9z2vaUinacAOjm8PHkDZX7w3ByM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297643; c=relaxed/simple; bh=+LfqGBkBgwLHkTAWzM829hfTkprgQnOTnCwIX7x9X+w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c+t4zTRN6R9/hfoAhlkRABHt3YtmjEvckmPxN4trDGbmMaUNJAvf+dwyKnS5VAAS5TkrSuaI/kMz/vjx9G9DxpEZ7WdUauosEVPMNqSBNf/whqgpqoe730d0UQZeW23rtaNPZQlXqiIqxEh25IpyT2G/Rh8xkurlsqrTPwVxt9k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eqk+fJkv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eqk+fJkv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 460A2C4CEE6; Tue, 11 Feb 2025 18:14:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739297643; bh=+LfqGBkBgwLHkTAWzM829hfTkprgQnOTnCwIX7x9X+w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eqk+fJkvb2MnFrNFGv9dqS0wjYOA10LrYzfA4cX3d9gdjrPM5KS9yRwLAMLOr5NQt r6F3id8eJzXXdvZ+1CDD1pwz4eRfxQL9BCbB/BtShqeaa3BlP89UNHr0CjY9wzAgkg bRnlTmmVwxHHNaM+tOcoU2/lM2e/twx3ke38gDghRKoh4jSpBHMQ8ONnzxIwW7rosf CjiS5PlvqMmAidmrKPJvDI8n/eAKfhECVPYj5Qj5G/l+CPYUlOspOBrlYtxLoMJSXz KYYn4/xgbfI9EpMqps/5L0uaha0rwqXeMg8A8yrBZwWwJoH8rIvQl/eVTELNO+d0MK 3MuxT3z0K+yrA== From: Jakub Kicinski To: davem@davemloft.net Cc: alexanderduyck@fb.com, netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org, Jakub Kicinski Subject: [PATCH net-next 4/5] eth: fbnic: report software Tx queue stats Date: Tue, 11 Feb 2025 10:13:55 -0800 Message-ID: <20250211181356.580800-5-kuba@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250211181356.580800-1-kuba@kernel.org> References: <20250211181356.580800-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Gather and report software Tx queue stats - checksum stats and queue stop / start. Signed-off-by: Jakub Kicinski Acked-by: Joe Damato --- drivers/net/ethernet/meta/fbnic/fbnic_txrx.h | 3 +++ .../net/ethernet/meta/fbnic/fbnic_netdev.c | 10 ++++++++ drivers/net/ethernet/meta/fbnic/fbnic_txrx.c | 23 +++++++++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h index 3fe4d1b6baad..57ae95a6cbfa 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.h @@ -59,8 +59,11 @@ struct fbnic_queue_stats { u64 dropped; union { struct { + u64 csum_partial; u64 ts_packets; u64 ts_lost; + u64 stop; + u64 wake; } twq; struct { u64 alloc_failed; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c index ceb6d1de9bcf..b12672d1607e 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_netdev.c @@ -517,6 +517,7 @@ static void fbnic_get_queue_stats_tx(struct net_device *dev, int idx, struct fbnic_net *fbn = netdev_priv(dev); struct fbnic_ring *txr = fbn->tx[idx]; struct fbnic_queue_stats *stats; + u64 stop, wake, csum; unsigned int start; u64 bytes, packets; @@ -528,10 +529,16 @@ static void fbnic_get_queue_stats_tx(struct net_device *dev, int idx, start = u64_stats_fetch_begin(&stats->syncp); bytes = stats->bytes; packets = stats->packets; + csum = stats->twq.csum_partial; + stop = stats->twq.stop; + wake = stats->twq.wake; } while (u64_stats_fetch_retry(&stats->syncp, start)); tx->bytes = bytes; tx->packets = packets; + tx->needs_csum = csum; + tx->stop = stop; + tx->wake = wake; } static void fbnic_get_base_stats(struct net_device *dev, @@ -542,6 +549,9 @@ static void fbnic_get_base_stats(struct net_device *dev, tx->bytes = fbn->tx_stats.bytes; tx->packets = fbn->tx_stats.packets; + tx->needs_csum = fbn->tx_stats.twq.csum_partial; + tx->stop = fbn->tx_stats.twq.stop; + tx->wake = fbn->tx_stats.twq.wake; rx->bytes = fbn->rx_stats.bytes; rx->packets = fbn->rx_stats.packets; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c index 66ba36fd3c08..24d2b528b66c 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_txrx.c @@ -113,6 +113,11 @@ static int fbnic_maybe_stop_tx(const struct net_device *dev, res = netif_txq_maybe_stop(txq, fbnic_desc_unused(ring), size, FBNIC_TX_DESC_WAKEUP); + if (!res) { + u64_stats_update_begin(&ring->stats.syncp); + ring->stats.twq.stop++; + u64_stats_update_end(&ring->stats.syncp); + } return !res; } @@ -191,6 +196,9 @@ fbnic_tx_offloads(struct fbnic_ring *ring, struct sk_buff *skb, __le64 *meta) skb->csum_offset / 2)); *meta |= cpu_to_le64(FBNIC_TWD_FLAG_REQ_CSO); + u64_stats_update_begin(&ring->stats.syncp); + ring->stats.twq.csum_partial++; + u64_stats_update_end(&ring->stats.syncp); *meta |= cpu_to_le64(FIELD_PREP(FBNIC_TWD_L2_HLEN_MASK, l2len / 2) | FIELD_PREP(FBNIC_TWD_L3_IHLEN_MASK, i3len / 2)); @@ -460,9 +468,13 @@ static void fbnic_clean_twq0(struct fbnic_napi_vector *nv, int napi_budget, ring->stats.packets += total_packets; u64_stats_update_end(&ring->stats.syncp); - netif_txq_completed_wake(txq, total_packets, total_bytes, - fbnic_desc_unused(ring), - FBNIC_TX_DESC_WAKEUP); + if (!netif_txq_completed_wake(txq, total_packets, total_bytes, + fbnic_desc_unused(ring), + FBNIC_TX_DESC_WAKEUP)) { + u64_stats_update_begin(&ring->stats.syncp); + ring->stats.twq.wake++; + u64_stats_update_end(&ring->stats.syncp); + } } static void fbnic_clean_tsq(struct fbnic_napi_vector *nv, @@ -1092,10 +1104,13 @@ void fbnic_aggregate_ring_tx_counters(struct fbnic_net *fbn, fbn->tx_stats.bytes += stats->bytes; fbn->tx_stats.packets += stats->packets; fbn->tx_stats.dropped += stats->dropped; + fbn->tx_stats.twq.csum_partial += stats->twq.csum_partial; fbn->tx_stats.twq.ts_lost += stats->twq.ts_lost; fbn->tx_stats.twq.ts_packets += stats->twq.ts_packets; + fbn->tx_stats.twq.stop += stats->twq.stop; + fbn->tx_stats.twq.wake += stats->twq.wake; /* Remember to add new stats here */ - BUILD_BUG_ON(sizeof(fbn->tx_stats.twq) / 8 != 2); + BUILD_BUG_ON(sizeof(fbn->tx_stats.twq) / 8 != 5); } static void fbnic_remove_tx_ring(struct fbnic_net *fbn, From patchwork Tue Feb 11 18:13:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 13970444 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA2F6254AE8 for ; Tue, 11 Feb 2025 18:14:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297644; cv=none; b=IFeejQ9mkopLffn86CMn8u3I6VqLA02v9m2CHZGScf0wr6B+ZFbTMvFLJ9Kd6K5/bIw9eAuyWTG2UtyAT0NvcRWkv5HxWm3B3Y1zkmQnroBbr+tUL5qsGIFkm/cFnc9O0r72AaG5k6IdLdTFxIYDPVsHs7Z9kUo3NH3/hazqHCc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739297644; c=relaxed/simple; bh=RQSDTFERgShMM+kbS7pCx3jsMqsdFJBMfnPeMvdI5m4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dWXjisIqSSH4lER2cYusWWT3DKuolH8ta93NcOza4eEvD1ScMT4ojW6WT3sMNBH52AkYmsP4sDY4ebGIGzlJx7/TRIkYD935VLtN0Uo/yu9sqNQ1OT/mPcq5XDLjunEuN8h5QxQiXa7M3y6ETRixb/OnKhvZxzQpVgqvSZXl8ks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iUdzgNYR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iUdzgNYR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD3E2C4CEDD; Tue, 11 Feb 2025 18:14:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739297644; bh=RQSDTFERgShMM+kbS7pCx3jsMqsdFJBMfnPeMvdI5m4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iUdzgNYR+bECgmZzc4oYagi6YDoJCyHT/KWsWs9646thShY72BRCEUXL0aTp4rV2z xNOooqIps54UkvxJNvzBkNt5gftOwJUve1a1b5vzFq0kYNLW/gZ10Ik6iniaKrCQda tjuYzn3hir8sdK2wNKfVZnuQMlLUq9AE8O7TL+kdI+UwSon43w7GGq1yVFhmHbyhmr AzDRsv7omr/5OV3BM08vyj7DY44IAWW5cjl/azDYi8swUGq2TU0khVoAQwMH6mCwEV IxM8MFO5A5igEPzxs+xtxL44bUGs3Rxhwehh761hhBDPNWW5OOnkmHsfEqGxbBtzH0 K1KaXw5qfagHg== From: Jakub Kicinski To: davem@davemloft.net Cc: alexanderduyck@fb.com, netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org, Jakub Kicinski Subject: [PATCH net-next 5/5] eth: fbnic: re-sort the objects in the Makefile Date: Tue, 11 Feb 2025 10:13:56 -0800 Message-ID: <20250211181356.580800-6-kuba@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250211181356.580800-1-kuba@kernel.org> References: <20250211181356.580800-1-kuba@kernel.org> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Looks like recent commit broke the sort order, fix it. Signed-off-by: Jakub Kicinski Acked-by: Joe Damato Reviewed-by: Alexander Lobakin --- drivers/net/ethernet/meta/fbnic/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/meta/fbnic/Makefile b/drivers/net/ethernet/meta/fbnic/Makefile index 239b2258ec65..0dbc634adb4b 100644 --- a/drivers/net/ethernet/meta/fbnic/Makefile +++ b/drivers/net/ethernet/meta/fbnic/Makefile @@ -20,6 +20,7 @@ fbnic-y := fbnic_csr.o \ fbnic_pci.o \ fbnic_phylink.o \ fbnic_rpc.o \ + fbnic_time.o \ fbnic_tlv.o \ fbnic_txrx.o \ - fbnic_time.o +# End of objects