From nobody Tue Mar 3 03:20:24 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C221E320CCF for ; Mon, 2 Mar 2026 23:01:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492520; cv=none; b=eOYmtOGZsfv6gvBanD8GBN1AIUWYDAOZX6RPjnFGp2dJIRdKXcNdiqljD1AoW4FeX8j2qc7iaH0MjgdFIrJI0pTG/GXWJvL+jDOBAAsirIhv+33P05cuj1ZO8CASYMaTEVYcg6Hf6bckuN7mPOCY+vT81UBwZSaqIT0SCQVIHzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492520; c=relaxed/simple; bh=D9A1mjx3Bo2dp6Mntk51MlHtoIWxAsQL+/MQZTZBMrs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gCRxXGj/SQ0KIz5JPOvf5YJjG4AaD0eNQ8NrpOb8+4o1/gTEv+QHg7qOP4S0IgxTkVhsZS2ferd34C/30Ku9EeHOkXqSNAYtc8MPW0cCYpJB70W+MWVxiRYk7sjXxsq2aE26AU9zPZ9XAx3vwJImU5QsX0ueROsdQb4ZKuq7BPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KSZPDkoL; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KSZPDkoL" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4836f4cbe0bso42814655e9.3 for ; Mon, 02 Mar 2026 15:01:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772492517; x=1773097317; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CU2WMDwR3VgGVbtB5/gNO1+KxRbSdrRzqbkeoh8a3to=; b=KSZPDkoLm/mALs/aq2swRZoX3KY1HPLt3YBz3LuJIdZjk6lLCaKxInR4sM3HA3/m9Z dB32IaH2I2tFykaAPHOhW/NuJAL0sHbOqxKpP1Pd9AJz4tXHhvdyOJGudeJlN4F1hHmm IOpGKrISvXdL7irouAOkNaa4TebXP+OxI61fXA2El0uaJAQ4lrcoJhZMEx92oPRSWErW 0BFwHGYsbkr4P0K6B5sUObguOhORN73UV7JJ0oaDjSQgCBxnVziLyAhF2n19iCFW6BIU 8d8G34Aedbwhv2l0GxaLBwjT01OLt6GXM3sN66es7QNzhZ4E3AI76WH5W6EeYx+uDZGQ rEOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772492517; x=1773097317; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=CU2WMDwR3VgGVbtB5/gNO1+KxRbSdrRzqbkeoh8a3to=; b=dw9J8OQVTkp7Gtt+beXFxSioLbkAuFR2y/GUsmH25O4xhXvkWImDo2dE6JYJt6T3Ee sqg6DMFPZnaLgxqeQJVqawYtK9+SU0kziisqbmJLgrJFc9Pt4ptI/4CvB6SFaJ/mMuMV b3MeqXqWQEa09LqpkJAX8E9OhzOmlXDeuNNhU6nEH7CotGm5eI1FzEDvSBzLFhvOYmZA Q1yMPSP2ICJbEUstnJ46FzUjn3EHsrP0ZIvku64FK6FibSHAYMYDsO5kGJu3PKxbaNLQ dc+DnDrBZtw+UVsh1vdrq27o28CRAWT6bQeemF4H2p+Y9m/moFTVQpC7Di0KTrww50p/ k4Iw== X-Forwarded-Encrypted: i=1; AJvYcCUvcfqypvScCampVhh9lWJpgQwRx3uXLcg2PznAvdAk8kepq9tnz7y/fCGoz8H8ri+PRIPHzDavpnitCAk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxv+3GvNIBYKfRLx70bdvtK3O/fgQw7h37LcsSdK1ulyYY7E4// 9EoO5GrmBhzPGYoTtdq0bu+y3qQXaaC90q7CaHrZq4uqIvq/Mdyg+5rx X-Gm-Gg: ATEYQzxSDeSjJs4V6HrkjvHGoD+cCyNuTv7aP1nBH3zqx0kNV9LDCuXv7GA5D6gti/L b2yE17K+8k9UQtTO1pBPszJ9i25qSE2tVSf6wk46lUaYB46E0loQ24Wz3hB8cvrvP/1IquBnD/E X4irU8T4pSwU1IqoW8lPmUiJiKuQMAMCVlMM1X62sviRI+2XVnKEwTHkRe1HuXJOMiOVuFNa1El nSEt5dsicE8lBlx/pQttuh2u+YxnCRCqQGIImkmmrOUY55QO+L8pherMiMOMubGL0ibOt+qzSdf Mh1/Yq0cMi0t02B0togQXuRwRBROnyuIZ4+XxwiLhLy0fUGP8acQHCSkxq1y8Uq2XTe0IysAXn9 netc/BumMcBVMon7yrRC3p63SHbFplpPcOoHwBWnY0N+t/cgbuwRIzvTywte0ApMUqYyGimvhLY xazsUG3uZPShjCSs3E0jx1 X-Received: by 2002:a05:600c:4fc8:b0:47b:e2a9:2bd7 with SMTP id 5b1f17b1804b1-483c9beaca0mr292444625e9.19.1772492516969; Mon, 02 Mar 2026 15:01:56 -0800 (PST) Received: from localhost ([2a03:2880:31ff:57::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439ae3f31dbsm17149216f8f.1.2026.03.02.15.01.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 15:01:55 -0800 (PST) From: Mohsin Bashir To: netdev@vger.kernel.org Cc: alexanderduyck@fb.com, alok.a.tiwari@oracle.com, andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net, dg573847474@gmail.com, donald.hunter@gmail.com, edumazet@google.com, gal@nvidia.com, horms@kernel.org, idosch@nvidia.com, jacob.e.keller@intel.com, kernel-team@meta.com, kory.maincent@bootlin.com, kuba@kernel.org, lee@trager.us, leon@kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux@armlinux.org.uk, mbloch@nvidia.com, mike.marciniszyn@gmail.com, mohsin.bashr@gmail.com, o.rempel@pengutronix.de, pabeni@redhat.com, saeedm@nvidia.com, tariqt@nvidia.com, vadim.fedorenko@linux.dev Subject: [net-next V4 1/5] net: ethtool: Track pause storm events Date: Mon, 2 Mar 2026 15:01:45 -0800 Message-ID: <20260302230149.1580195-2-mohsin.bashr@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302230149.1580195-1-mohsin.bashr@gmail.com> References: <20260302230149.1580195-1-mohsin.bashr@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With TX pause enabled, if a device is unable to pass packets up to the stack (e.g., CPU is hanged), the device can cause pause storm. Given that devices can have native support to protect the neighbor from such flooding, such events need some tracking. This support is to track TX pause storm events for better observability. Reviewed-by: Oleksij Rempel Signed-off-by: Jakub Kicinski Signed-off-by: Mohsin Bashir --- Documentation/netlink/specs/ethtool.yaml | 13 +++++++++++++ include/linux/ethtool.h | 2 ++ include/uapi/linux/ethtool_netlink_generated.h | 1 + net/ethtool/pause.c | 4 +++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netli= nk/specs/ethtool.yaml index 0a2d2343f79a..4707063af3b4 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -879,6 +879,19 @@ attribute-sets: - name: rx-frames type: u64 + - + name: tx-pause-storm-events + type: u64 + doc: >- + TX pause storm event count. Increments each time device + detects that its pause assertion condition has been true + for too long for normal operation. As a result, the device + has temporarily disabled its own Pause TX function to + protect the network from itself. + This counter should never increment under normal overload + conditions; it indicates catastrophic failure like an OS + crash. The rate of incrementing is implementation specific. + - name: pause attr-cnt-name: __ethtool-a-pause-cnt diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 798abec67a1b..83c375840835 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -512,12 +512,14 @@ struct ethtool_eth_ctrl_stats { * * Equivalent to `30.3.4.3 aPAUSEMACCtrlFramesReceived` * from the standard. + * @tx_pause_storm_events: TX pause storm event count (see ethtool.yaml). */ struct ethtool_pause_stats { enum ethtool_mac_stats_src src; struct_group(stats, u64 tx_pause_frames; u64 rx_pause_frames; + u64 tx_pause_storm_events; ); }; =20 diff --git a/include/uapi/linux/ethtool_netlink_generated.h b/include/uapi/= linux/ethtool_netlink_generated.h index 556a0c834df5..114b83017297 100644 --- a/include/uapi/linux/ethtool_netlink_generated.h +++ b/include/uapi/linux/ethtool_netlink_generated.h @@ -381,6 +381,7 @@ enum { ETHTOOL_A_PAUSE_STAT_PAD, ETHTOOL_A_PAUSE_STAT_TX_FRAMES, ETHTOOL_A_PAUSE_STAT_RX_FRAMES, + ETHTOOL_A_PAUSE_STAT_TX_PAUSE_STORM_EVENTS, =20 __ETHTOOL_A_PAUSE_STAT_CNT, ETHTOOL_A_PAUSE_STAT_MAX =3D (__ETHTOOL_A_PAUSE_STAT_CNT - 1) diff --git a/net/ethtool/pause.c b/net/ethtool/pause.c index 0f9af1e66548..5d28f642764c 100644 --- a/net/ethtool/pause.c +++ b/net/ethtool/pause.c @@ -130,7 +130,9 @@ static int pause_put_stats(struct sk_buff *skb, if (ethtool_put_stat(skb, pause_stats->tx_pause_frames, ETHTOOL_A_PAUSE_STAT_TX_FRAMES, pad) || ethtool_put_stat(skb, pause_stats->rx_pause_frames, - ETHTOOL_A_PAUSE_STAT_RX_FRAMES, pad)) + ETHTOOL_A_PAUSE_STAT_RX_FRAMES, pad) || + ethtool_put_stat(skb, pause_stats->tx_pause_storm_events, + ETHTOOL_A_PAUSE_STAT_TX_PAUSE_STORM_EVENTS, pad)) goto err_cancel; =20 nla_nest_end(skb, nest); --=20 2.47.3 From nobody Tue Mar 3 03:20:24 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B60631E820 for ; Mon, 2 Mar 2026 23:02:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492522; cv=none; b=rEx+Vi/1xG3kdvHOgQiOEJfRrBv8T6JROPqu1fLDWoZheFYsaH462ZQlLa9tLpdyO+tIdPMnMvq0F6dTaFQVqUJVI4pCZlX6MKNNFLU/zS1c/X3Pl+ilaDBvcD+WICusf8Z1uHRSSkiiABFZwhpSZbYxXX15vp0+qJJtsaJGJHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492522; c=relaxed/simple; bh=k4bJN+sANdPTHhzkbHsdq35Ia++T8NYNoHxo79kCHIE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a71+sCO22PBAh5eLj2lz83WWX3dyO9MjXfw3iUljhWQorinbLXIGoWmbnsNiw8b/uIt3MGmhxsDKDw/4QIA/+dzOkdKAMmZLnYkyIVGFXEk0KrskwlvLhMKuzX49odd5S50CcyQTt9RnREhT2dHVZI/YG0gVVO8FamZrhyZxqjI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=N9hfgTcs; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N9hfgTcs" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-439bc14dcf4so720795f8f.1 for ; Mon, 02 Mar 2026 15:02:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772492520; x=1773097320; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A5DizpqoyEuazrKiB5I9gJ8LWKHFRH/lYPzCykAHu10=; b=N9hfgTcsGsPO5KhSKspMVRP1I2xnUOdtPJlMJY79mFyFuf9NgrSRA81z2wVhEGzPGC AuzZsuePY/Rt/815kzUQGYmHkeaECa4cN0TRcrlcpneQOLa7VC4ZGBgqHeJeqDITM03v PqA2we9l529oNtkJrIcaAjxLCreud7I1vQsYU9zMzCHnuZWwDPAjAHeiuY3HkGwKiIc/ ZEw5bUe6ZfLJkUnwGvvHZtNqsU6FD/gqbi5Yj9obBKWWW6aUaR64s0ZB8/wh7iD6b51/ a1K2OYkhkch/duYF+0SjZeIbpqaEJ3RmL711LO8Y13UnlyMTOiNfC8VvdEK7V6sK12Li /2Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772492520; x=1773097320; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=A5DizpqoyEuazrKiB5I9gJ8LWKHFRH/lYPzCykAHu10=; b=w8dOtQRD7xa9EF128oWXOewemVi5vDNGZi4pIJMURG/63x7vX1vbncxA2IfNxyN8dF YYgdTEPDHo7tmmm1R/4oZtULm1VQVdDvfh/W91aKPIkGa7M7T+HrjIKgyGK4lVEzDygi +TQVyvA+3D4XOjW9N67C7SP1gvjyzVt5LbljogFpkjYb587ceYaCzkCnJEdZywXFju6L QB/83ImJqYZ3LtK12AdjGhdfJyZFpCSo7yQplzp2gTR9iV4HTSH2at8xPI79PnwVqhGZ iHAD9kjXVLvYdj61+Vw3oyv4MRXwyxu9fqxC7NSzSZGFkjPCjCP04HQ29GCW8QPCzk1L j0NA== X-Forwarded-Encrypted: i=1; AJvYcCU9dyDFU8V9ZPA2NGuXJhDuuu2fWLRE16y/ny2wAdH7Y5iqerIzDA5f2T1QUgYRN8ovSuGUgXmX3oMrEQM=@vger.kernel.org X-Gm-Message-State: AOJu0Yyd+yhJd6Zy8y6Q6vqfoHs7Khaip8LfOAJqHikl8KOsvV9WoK4O IU6Tt+Cvf5AQLetJEfk45ZE53gClxJ99A/7+gwJAFdlG1c/mSG+3NcTI X-Gm-Gg: ATEYQzxjHABxMauGNdCi9QITyze3dDSHQNV3luxfS4Zl8lin7ONzJGI1L+DPT8bL32N XKK2UtFVsJ87Z1Z5EMGDDODBJLxxzGSyMpuJUHdtE63dgswkPg0PyEoNd/v8nQI7w/vOQfsthZ3 THgLkxh70MfBl8HGTTF64eosjcAhoVJtfHL/Wfp2/SS+Ljer1BGmpnMLr0esLPpE/K/lvDanq7v 1SSaknGzSToNZaMAF4391Bi9fAEjnoZEXS93OwGNhNVi5k5us0zEl4azbERD2Uxqva/oBzsu38S JozXrChnEJ0Nfi4SsrM/86PQPwA3Oe929+IONCA4BccxqWX6iMxHQ8YVBxlIYLDLJbg33jzcsW4 HzmVGdLiDi3E5q7E71VKj6xdXcc59yvxl8n1OZioDXT835jZrz1OdCHMXwcyYThbcmd5c3H+pG2 6uYD4UxdmFo+bfAgeaq6+Z X-Received: by 2002:a05:6000:2401:b0:439:9464:ac0a with SMTP id ffacd0b85a97d-439c10a0881mr146496f8f.10.1772492519718; Mon, 02 Mar 2026 15:01:59 -0800 (PST) Received: from localhost ([2a03:2880:31ff:36::]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439b8807a4esm9155711f8f.4.2026.03.02.15.01.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 15:01:59 -0800 (PST) From: Mohsin Bashir To: netdev@vger.kernel.org Cc: alexanderduyck@fb.com, alok.a.tiwari@oracle.com, andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net, dg573847474@gmail.com, donald.hunter@gmail.com, edumazet@google.com, gal@nvidia.com, horms@kernel.org, idosch@nvidia.com, jacob.e.keller@intel.com, kernel-team@meta.com, kory.maincent@bootlin.com, kuba@kernel.org, lee@trager.us, leon@kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux@armlinux.org.uk, mbloch@nvidia.com, mike.marciniszyn@gmail.com, mohsin.bashr@gmail.com, o.rempel@pengutronix.de, pabeni@redhat.com, saeedm@nvidia.com, tariqt@nvidia.com, vadim.fedorenko@linux.dev Subject: [net-next V4 2/5] net: ethtool: Update doc for tunable Date: Mon, 2 Mar 2026 15:01:46 -0800 Message-ID: <20260302230149.1580195-3-mohsin.bashr@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302230149.1580195-1-mohsin.bashr@gmail.com> References: <20260302230149.1580195-1-mohsin.bashr@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ETHTOOL_PFC_PREVENTION_TOUT enables the configuration of timeout value for PFC storm prevention. This can also be used to configure storm detection timeout for global pause settings. In fact some existing drivers are already using it for the said purpose. Highlight that the knob can formally be used to configure timeout value for pause storm prevention mechanism. The update to the ethtool man page will follow afterwards. Link: https://lore.kernel.org/aa5f189a-ac62-4633-97b5-ebf939e9c535@nvidia.c= om Signed-off-by: Jakub Kicinski Signed-off-by: Mohsin Bashir --- include/uapi/linux/ethtool.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index b74b80508553..1cdfb8341df2 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -225,7 +225,7 @@ enum tunable_id { ETHTOOL_ID_UNSPEC, ETHTOOL_RX_COPYBREAK, ETHTOOL_TX_COPYBREAK, - ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */ + ETHTOOL_PFC_PREVENTION_TOUT, /* both pause and pfc, see man ethtool */ ETHTOOL_TX_COPYBREAK_BUF_SIZE, /* * Add your fresh new tunable attribute above and remember to update --=20 2.47.3 From nobody Tue Mar 3 03:20:24 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45AFC33507E for ; Mon, 2 Mar 2026 23:02:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492526; cv=none; b=s5gCKgFQZv99zPvQC3dI485o4DFbY11Sz0EKFhdHEZomgR39HaliDO2fkk82nFXuAwBXMcYCEv5xasL9IJvSWxlMvXM4UMBr0GMlzVYg3H8ZunyCZAo0DdEb7w34MAOSrA5Cq8Nh9fTpbRHxX1kwN+bFO4KKKnZ8RByClQyIIcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492526; c=relaxed/simple; bh=XjMsdbdNrs98kYxtNW1pbPJk/Z3oCTXBzcBWcAWmAzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r8jfTXnU55YElQQTl4VAn9iPWNuOQL8MwiKAJ7rJAqSUqcsk3XqNEgFOoyfF/srf0g5jFNPt9plGFz3+Oj3D3mVkD9bUPm6teA3/SNnld75MQTkssYP7IvssuXcn2zAdB/MschJx2cAuy5R1hYQO4Ns4QKqKOcZm/aAq1LC78ZE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jW07AfJ/; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jW07AfJ/" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-483703e4b08so44414125e9.1 for ; Mon, 02 Mar 2026 15:02:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772492523; x=1773097323; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rnBhrt+doFiSDm+zGOOZsJ3Mt9dkv5fw6UCQen9fmBA=; b=jW07AfJ/ilJf7lhMXQom8QgJSmiyiq/Ydde6ZXZhj7g3GZRdaZjS9w8ST/lUSMUX9y hVy3SfA0UBEmfAd/ljaYVPfAZ86nqOgK5+8rzo4Wd/ErueeAUYaCesf8MteHJSIEBHJ4 9rVdFx+c+Ypynr5THwZ/SpoUvvbRemn8wJMoOl6Q9CpvYzkQnzKTe1gvG6KK1L4ApUsf 9HfsPejkcFPVizllC1+HVgCYSuyZnanJ6OE/Ivq6WQtyqUciFmisDOSpUVSGVfQ/xTQf I779l4VEQmdhTEeTC8YiB0iwVhMxgfcHbWXyRtAnU0T0LpwcDc5EzLTRVBWX6ovToEBU yu/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772492523; x=1773097323; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rnBhrt+doFiSDm+zGOOZsJ3Mt9dkv5fw6UCQen9fmBA=; b=aD5dHryAzdJIRNHhWvUciINXSAa2PgAiq+FAOVfZpzQR9a8CwISRGVHOxCSAfliNXs sRYKkAN3Q0iBpya1GXuExMU6WWdxq3snHmhiYGeEQGw+kugheR4G3IklZlZNUcIaQiFH IdMllVQVB9AAYIGQ7f3x/utYkTJnZ9R6wOejAupke0s0Rp/iKramye+ohi3WgvfET4Vv HsstodqruORxtYK4Wi9Eq5HJjN5UANJGQs0a2sVl848OgUKKBxGcvYDKMyUfBDkmWXeH 7PkUAqGiP+Ks6zgdESZQL+gOG+aTOzcMFkTF2wLAMQVKnCp30zZRKMk7Ym6WvHEVAkIb Y/qA== X-Forwarded-Encrypted: i=1; AJvYcCXNmh4aIM0KoqpjFZcm/M2k3QYPMx/VKBX6CxYZLTCsY8HPa1SYyUwcIrYZGz1+FIW3NC22DfD/9KA1AiY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7qhIEcr7bnH6sItuwSPqjzQ0nSF0jbuGGQBr8jk20jx5uxDoT 6GsHsml9kgL465SnMSJkIZlxEBszYZ6dkA9cIc4/da0mt2RPfCj9Zmsq X-Gm-Gg: ATEYQzyGx9lQqkWRvvJH7WxXK6wCYpftIb5PHBMwzVymaQr1JMIJG7dPo2quLya4lG+ 5VPg4Gs1uTfK1cJfobnuHOX4UKqgp6of0wzf0h1oAxHgxo4OGmpN9B1pP0XFF3P7+K0qHOlheRn eSqYRLOIw4Og0StOwBQXnYkiYeXJUqp6skL4X7wVVOsiK/HeOp4EfTk/luu5AU0PLYAINgvS8E4 q0elsVktJXO1ac8nrRFl8lUjLr5XLHlh1BkymmUlXNPsoyTyvcqQKEviCZAeDzDz5o8fG5+DPAT TREQI82LtFPq+9rzdXDpq413l05KQKolrB1Wxq0ZZ2XA9NXjsvPsCx57vgB2niDlV6J5a5PR6pO AWvLeeBU1mA4cuFZFgVkx9BADycqioeHSjTKSsDRqVpkcEUvekWPvwj5HNKwDn2TKSKsAUOo7OR zi64Onu+3KtE+fJa6GbIN8 X-Received: by 2002:a05:600c:3f1a:b0:47d:6c36:a125 with SMTP id 5b1f17b1804b1-48513c80634mr1207015e9.17.1772492522465; Mon, 02 Mar 2026 15:02:02 -0800 (PST) Received: from localhost ([2a03:2880:31ff:31::]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-485135ce748sm863795e9.25.2026.03.02.15.02.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 15:02:01 -0800 (PST) From: Mohsin Bashir To: netdev@vger.kernel.org Cc: alexanderduyck@fb.com, alok.a.tiwari@oracle.com, andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net, dg573847474@gmail.com, donald.hunter@gmail.com, edumazet@google.com, gal@nvidia.com, horms@kernel.org, idosch@nvidia.com, jacob.e.keller@intel.com, kernel-team@meta.com, kory.maincent@bootlin.com, kuba@kernel.org, lee@trager.us, leon@kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux@armlinux.org.uk, mbloch@nvidia.com, mike.marciniszyn@gmail.com, mohsin.bashr@gmail.com, o.rempel@pengutronix.de, pabeni@redhat.com, saeedm@nvidia.com, tariqt@nvidia.com, vadim.fedorenko@linux.dev Subject: [net-next V4 3/5] eth: fbnic: Add protection against pause storm Date: Mon, 2 Mar 2026 15:01:47 -0800 Message-ID: <20260302230149.1580195-4-mohsin.bashr@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302230149.1580195-1-mohsin.bashr@gmail.com> References: <20260302230149.1580195-1-mohsin.bashr@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add protection against TX pause storms. A pause storm occurs when a device fails to send received packets up to the stack. When a pause storm is detected (pause state persists beyond the configured timeout), the device stops sending the pause frames and begins dropping packets instead of back-pressuring. The timeout is configurable via ethtool tunable (pfc-prevention-tout) with a maximum value of 10485ms, and the default value of 500ms. Once the device transitions to the storm-detected state, the service task periodically attempts recovery, returning the device to normal operation to handle any subsequent pause storm episodes. Signed-off-by: Jakub Kicinski Signed-off-by: Mohsin Bashir --- drivers/net/ethernet/meta/fbnic/fbnic.h | 3 + drivers/net/ethernet/meta/fbnic/fbnic_csr.h | 10 ++ .../net/ethernet/meta/fbnic/fbnic_ethtool.c | 43 +++++++++ drivers/net/ethernet/meta/fbnic/fbnic_irq.c | 2 + drivers/net/ethernet/meta/fbnic/fbnic_mac.c | 96 +++++++++++++++++++ drivers/net/ethernet/meta/fbnic/fbnic_mac.h | 27 ++++++ drivers/net/ethernet/meta/fbnic/fbnic_pci.c | 5 + 7 files changed, 186 insertions(+) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic.h b/drivers/net/ethernet= /meta/fbnic/fbnic.h index 779a083b9215..a760a27b1516 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic.h @@ -98,6 +98,9 @@ struct fbnic_dev { =20 /* MDIO bus for PHYs */ struct mii_bus *mdio_bus; + + /* In units of ms since API supports values in ms */ + u16 ps_timeout; }; =20 /* Reserve entry 0 in the MSI-X "others" array until we have filled all diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h b/drivers/net/ethe= rnet/meta/fbnic/fbnic_csr.h index b717db879cd3..e68c56237b61 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_csr.h @@ -230,6 +230,7 @@ enum { #define FBNIC_INTR_MSIX_CTRL_VECTOR_MASK CSR_GENMASK(7, 0) #define FBNIC_INTR_MSIX_CTRL_ENABLE CSR_BIT(31) enum { + FBNIC_INTR_MSIX_CTRL_RXB_IDX =3D 7, FBNIC_INTR_MSIX_CTRL_PCS_IDX =3D 34, }; =20 @@ -560,6 +561,11 @@ enum { #define FBNIC_RXB_DROP_THLD_CNT 8 #define FBNIC_RXB_DROP_THLD_ON CSR_GENMASK(12, 0) #define FBNIC_RXB_DROP_THLD_OFF CSR_GENMASK(25, 13) +#define FBNIC_RXB_PAUSE_STORM(n) (0x08019 + (n)) /* 0x20064 + 4*n */ +#define FBNIC_RXB_PAUSE_STORM_CNT 4 +#define FBNIC_RXB_PAUSE_STORM_FORCE_NORMAL CSR_BIT(20) +#define FBNIC_RXB_PAUSE_STORM_THLD_TIME CSR_GENMASK(19, 0) +#define FBNIC_RXB_PAUSE_STORM_UNIT_WR 0x0801d /* 0x20074 */ #define FBNIC_RXB_ECN_THLD(n) (0x0801e + (n)) /* 0x20078 + 4*n */ #define FBNIC_RXB_ECN_THLD_CNT 8 #define FBNIC_RXB_ECN_THLD_ON CSR_GENMASK(12, 0) @@ -596,6 +602,9 @@ enum { #define FBNIC_RXB_INTF_CREDIT_MASK2 CSR_GENMASK(11, 8) #define FBNIC_RXB_INTF_CREDIT_MASK3 CSR_GENMASK(15, 12) =20 +#define FBNIC_RXB_ERR_INTR_STS 0x08050 /* 0x20140 */ +#define FBNIC_RXB_ERR_INTR_STS_PS CSR_GENMASK(15, 12) +#define FBNIC_RXB_ERR_INTR_MASK 0x08052 /* 0x20148 */ #define FBNIC_RXB_PAUSE_EVENT_CNT(n) (0x08053 + (n)) /* 0x2014c + 4*n */ #define FBNIC_RXB_DROP_FRMS_STS(n) (0x08057 + (n)) /* 0x2015c + 4*n */ #define FBNIC_RXB_DROP_BYTES_STS_L(n) \ @@ -636,6 +645,7 @@ enum { =20 #define FBNIC_RXB_PBUF_FIFO_LEVEL(n) (0x0811d + (n)) /* 0x20474 + 4*n */ =20 +#define FBNIC_RXB_PAUSE_STORM_UNIT_RD 0x08125 /* 0x20494 */ #define FBNIC_RXB_INTEGRITY_ERR(n) (0x0812f + (n)) /* 0x204bc + 4*n */ #define FBNIC_RXB_MAC_ERR(n) (0x08133 + (n)) /* 0x204cc + 4*n */ #define FBNIC_RXB_PARSER_ERR(n) (0x08137 + (n)) /* 0x204dc + 4*n */ diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c b/drivers/net/= ethernet/meta/fbnic/fbnic_ethtool.c index 401c2196b9ff..ade9e667640f 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c @@ -1641,6 +1641,47 @@ static void fbnic_get_ts_stats(struct net_device *ne= tdev, } } =20 +static int fbnic_get_tunable(struct net_device *netdev, + const struct ethtool_tunable *tun, + void *data) +{ + struct fbnic_net *fbn =3D netdev_priv(netdev); + int err =3D 0; + + switch (tun->id) { + case ETHTOOL_PFC_PREVENTION_TOUT: + *(u16 *)data =3D fbn->fbd->ps_timeout; + break; + default: + err =3D -EOPNOTSUPP; + break; + } + + return err; +} + +static int fbnic_set_tunable(struct net_device *netdev, + const struct ethtool_tunable *tun, + const void *data) +{ + struct fbnic_net *fbn =3D netdev_priv(netdev); + int err; + + switch (tun->id) { + case ETHTOOL_PFC_PREVENTION_TOUT: { + u16 ps_timeout =3D *(u16 *)data; + + err =3D fbnic_mac_ps_protect_to_config(fbn->fbd, ps_timeout); + break; + } + default: + err =3D -EOPNOTSUPP; + break; + } + + return err; +} + static int fbnic_get_module_eeprom_by_page(struct net_device *netdev, const struct ethtool_module_eeprom *page_data, @@ -1915,6 +1956,8 @@ static const struct ethtool_ops fbnic_ethtool_ops =3D= { .set_channels =3D fbnic_set_channels, .get_ts_info =3D fbnic_get_ts_info, .get_ts_stats =3D fbnic_get_ts_stats, + .get_tunable =3D fbnic_get_tunable, + .set_tunable =3D fbnic_set_tunable, .get_link_ksettings =3D fbnic_phylink_ethtool_ksettings_get, .get_fec_stats =3D fbnic_get_fec_stats, .get_fecparam =3D fbnic_phylink_get_fecparam, diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_irq.c b/drivers/net/ethe= rnet/meta/fbnic/fbnic_irq.c index 02e8b0b257fe..1e6a8fd6f702 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_irq.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_irq.c @@ -170,6 +170,8 @@ int fbnic_mac_request_irq(struct fbnic_dev *fbd) fbnic_wr32(fbd, FBNIC_INTR_MSIX_CTRL(FBNIC_INTR_MSIX_CTRL_PCS_IDX), FBNIC_PCS_MSIX_ENTRY | FBNIC_INTR_MSIX_CTRL_ENABLE); =20 + fbnic_wr32(fbd, FBNIC_INTR_MSIX_CTRL(FBNIC_INTR_MSIX_CTRL_RXB_IDX), 0); + fbd->mac_msix_vector =3D vector; =20 return 0; diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_mac.c b/drivers/net/ethe= rnet/meta/fbnic/fbnic_mac.c index 9d0e4b2cc9ac..805107ba3b10 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_mac.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_mac.c @@ -143,6 +143,7 @@ static void fbnic_mac_init_qm(struct fbnic_dev *fbd) #define FBNIC_DROP_EN_MASK 0x7d #define FBNIC_PAUSE_EN_MASK 0x14 #define FBNIC_ECN_EN_MASK 0x10 +#define FBNIC_PS_EN_MASK 0x01 =20 struct fbnic_fifo_config { unsigned int addr; @@ -420,6 +421,14 @@ static void __fbnic_mac_stat_rd64(struct fbnic_dev *fb= d, bool reset, u32 reg, #define fbnic_mac_stat_rd64(fbd, reset, __stat, __CSR) \ __fbnic_mac_stat_rd64(fbd, reset, FBNIC_##__CSR##_L, &(__stat)) =20 +bool fbnic_mac_check_tx_pause(struct fbnic_dev *fbd) +{ + u32 command_config; + + command_config =3D rd32(fbd, FBNIC_MAC_COMMAND_CONFIG); + return !(command_config & FBNIC_MAC_COMMAND_CONFIG_TX_PAUSE_DIS); +} + static void fbnic_mac_tx_pause_config(struct fbnic_dev *fbd, bool tx_pause) { u32 rxb_pause_ctrl; @@ -434,6 +443,49 @@ static void fbnic_mac_tx_pause_config(struct fbnic_dev= *fbd, bool tx_pause) wr32(fbd, FBNIC_RXB_PAUSE_DROP_CTRL, rxb_pause_ctrl); } =20 +static void +fbnic_mac_ps_protect_to_reset(struct fbnic_dev *fbd, u16 timeout_ms) +{ + wr32(fbd, FBNIC_RXB_PAUSE_STORM_UNIT_WR, FBNIC_RXB_PS_CLK_DIV); + + wr32(fbd, FBNIC_RXB_PAUSE_STORM(FBNIC_RXB_INTF_NET), + FIELD_PREP(FBNIC_RXB_PAUSE_STORM_THLD_TIME, + FBNIC_MAC_RXB_PS_TO(timeout_ms)) | + FBNIC_RXB_PAUSE_STORM_FORCE_NORMAL); + wrfl(fbd); + wr32(fbd, FBNIC_RXB_PAUSE_STORM(FBNIC_RXB_INTF_NET), + FIELD_PREP(FBNIC_RXB_PAUSE_STORM_THLD_TIME, + FBNIC_MAC_RXB_PS_TO(timeout_ms))); +} + +static void +fbnic_mac_ps_protect_config(struct fbnic_dev *fbd, bool ps_protect) +{ + u16 timeout; + u32 reg; + + ps_protect =3D ps_protect && fbd->ps_timeout; + timeout =3D ps_protect ? fbd->ps_timeout : FBNIC_MAC_PS_TO_DEFAULT_MS; + + fbnic_mac_ps_protect_to_reset(fbd, timeout); + + reg =3D rd32(fbd, FBNIC_RXB_PAUSE_DROP_CTRL); + reg &=3D ~FBNIC_RXB_PAUSE_DROP_CTRL_PS_ENABLE; + reg |=3D FIELD_PREP(FBNIC_RXB_PAUSE_DROP_CTRL_PS_ENABLE, ps_protect); + wr32(fbd, FBNIC_RXB_PAUSE_DROP_CTRL, reg); + + /* Clear any pending interrupt status first */ + wr32(fbd, FBNIC_RXB_ERR_INTR_STS, + FIELD_PREP(FBNIC_RXB_ERR_INTR_STS_PS, FBNIC_PS_EN_MASK)); + + /* Unmask the Network to Host PS interrupt if tx_pause is on */ + reg =3D rd32(fbd, FBNIC_RXB_ERR_INTR_MASK); + reg |=3D FBNIC_RXB_ERR_INTR_STS_PS; + if (ps_protect) + reg &=3D ~FBNIC_RXB_ERR_INTR_STS_PS; + wr32(fbd, FBNIC_RXB_ERR_INTR_MASK, reg); +} + static int fbnic_mac_get_link_event(struct fbnic_dev *fbd) { u32 intr_mask =3D rd32(fbd, FBNIC_SIG_PCS_INTR_STS); @@ -658,6 +710,7 @@ static void fbnic_mac_link_up_asic(struct fbnic_dev *fb= d, u32 cmd_cfg, mac_ctrl; =20 fbnic_mac_tx_pause_config(fbd, tx_pause); + fbnic_mac_ps_protect_config(fbd, tx_pause); =20 cmd_cfg =3D __fbnic_mac_cmd_config_asic(fbd, tx_pause, rx_pause); mac_ctrl =3D rd32(fbd, FBNIC_SIG_MAC_IN0); @@ -918,3 +971,46 @@ int fbnic_mac_init(struct fbnic_dev *fbd) =20 return 0; } + +int fbnic_mac_ps_protect_to_config(struct fbnic_dev *fbd, u16 timeout_ms) +{ + u16 old_timeout_ms =3D fbd->ps_timeout; + + if (timeout_ms =3D=3D old_timeout_ms) + return 0; + + if (timeout_ms =3D=3D PFC_STORM_PREVENTION_AUTO) + timeout_ms =3D FBNIC_MAC_PS_TO_DEFAULT_MS; + + if (timeout_ms > FBNIC_MAC_PS_TO_MAX_MS) + return -EINVAL; + + fbd->ps_timeout =3D timeout_ms; + + if (!fbnic_mac_check_tx_pause(fbd)) + return 0; + + if (timeout_ms =3D=3D 0) + fbnic_mac_ps_protect_config(fbd, false); + else if (old_timeout_ms =3D=3D 0) + fbnic_mac_ps_protect_config(fbd, true); + else + fbnic_mac_ps_protect_to_reset(fbd, fbd->ps_timeout); + + return 0; +} + +void fbnic_mac_ps_protect_handler(struct fbnic_dev *fbd) +{ + u32 rxb_err_sts =3D rd32(fbd, FBNIC_RXB_ERR_INTR_STS); + + /* Check if pause storm interrupt for network was triggered */ + if (rxb_err_sts & FIELD_PREP(FBNIC_RXB_ERR_INTR_STS_PS, + FBNIC_PS_EN_MASK)) { + /* Write 1 to clear the interrupt status first */ + wr32(fbd, FBNIC_RXB_ERR_INTR_STS, + FIELD_PREP(FBNIC_RXB_ERR_INTR_STS_PS, FBNIC_PS_EN_MASK)); + + fbnic_mac_ps_protect_to_reset(fbd, fbd->ps_timeout); + } +} diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_mac.h b/drivers/net/ethe= rnet/meta/fbnic/fbnic_mac.h index f08fe8b7c497..10f30e0e8f69 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_mac.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_mac.h @@ -8,6 +8,30 @@ =20 struct fbnic_dev; =20 +/* The RXB clock runs at 600 MHZ in the ASIC and the PAUSE_STORM_UNIT_WR + * is 10us granularity, so set the clock to 6000 (0x1770) + */ +#define FBNIC_RXB_PS_CLK_DIV 0x1770 + +/* Convert milliseconds to pause storm timeout units (10us granularity) */ +#define FBNIC_MAC_RXB_PS_TO(ms) ((ms) * 100) + +/* Convert pause storm timeout units (10us granularity) to milliseconds */ +#define FBNIC_MAC_RXB_PS_TO_MS(ps) ((ps) / 100) + +/* Set the default timer to 500ms, which should be longer than any + * reasonable period of continuous pausing. The service task, which runs + * once per second, periodically resets the pause storm trigger. + * + * As a result, on a functioning system, if pause continues, we enforce + * a duty cycle determined by the configured pause storm timeout (50% + * default). A crashed system will not have the service task and therefore + * pause will remain disabled until reboot recovery. + */ +#define FBNIC_MAC_PS_TO_DEFAULT_MS 500 +#define FBNIC_MAC_PS_TO_MAX_MS \ + FBNIC_MAC_RXB_PS_TO_MS(FIELD_MAX(FBNIC_RXB_PAUSE_STORM_THLD_TIME)) + #define FBNIC_MAX_JUMBO_FRAME_SIZE 9742 =20 /* States loosely based on section 136.8.11.7.5 of IEEE 802.3-2022 Ethernet @@ -119,4 +143,7 @@ struct fbnic_mac { =20 int fbnic_mac_init(struct fbnic_dev *fbd); void fbnic_mac_get_fw_settings(struct fbnic_dev *fbd, u8 *aui, u8 *fec); +int fbnic_mac_ps_protect_to_config(struct fbnic_dev *fbd, u16 timeout); +void fbnic_mac_ps_protect_handler(struct fbnic_dev *fbd); +bool fbnic_mac_check_tx_pause(struct fbnic_dev *fbd); #endif /* _FBNIC_MAC_H_ */ diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_pci.c b/drivers/net/ethe= rnet/meta/fbnic/fbnic_pci.c index 3fa9d1910daa..e3aebbe3656d 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_pci.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_pci.c @@ -220,6 +220,9 @@ static void fbnic_service_task(struct work_struct *work) =20 fbnic_get_hw_stats32(fbd); =20 + if (fbd->ps_timeout && fbnic_mac_check_tx_pause(fbd)) + fbnic_mac_ps_protect_handler(fbd); + fbnic_fw_check_heartbeat(fbd); =20 fbnic_health_check(fbd); @@ -296,6 +299,8 @@ static int fbnic_probe(struct pci_dev *pdev, const stru= ct pci_device_id *ent) /* Populate driver with hardware-specific info and handlers */ fbd->max_num_queues =3D info->max_num_queues; =20 + fbd->ps_timeout =3D FBNIC_MAC_PS_TO_DEFAULT_MS; + pci_set_master(pdev); pci_save_state(pdev); =20 --=20 2.47.3 From nobody Tue Mar 3 03:20:24 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2711431AF31 for ; Mon, 2 Mar 2026 23:02:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492528; cv=none; b=WqJUxANdD1enDpCG6yaondrd3dvsO9qDKbznz3LwdgJ2cOt29OMa2Qkd79OXNwaJhZFnPEG0LiykE70IAkkZJZFgo/+bCjTU2ty8tT4ZuBXJBYuYnCYU0OivISO3JyGmVa29u0KzNMAJgyljANgL34Ol8sbQi0XC42V7bzf92TQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492528; c=relaxed/simple; bh=1zAr0Zf85PBf7/Rh8qavxPEJLsNQewWny61GtNvPRxI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ac0jCmYrF0JzAgQqFMKHITIBnXlg2mPQC+/FeKAVUB7KOhG0xbaCnoilvJJaZdQJRIqcNFIrZlAwyx80xGbSycUgdK9y3HFrIepQoJ5+qjMo0lumrjb7WJoqhF6Z4sW3AkI9kHbBMSfMePyQCW2IKa0Ctup1RXUsZbIN8vb42/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hLNIpElk; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hLNIpElk" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-48373a4bca3so30423415e9.0 for ; Mon, 02 Mar 2026 15:02:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772492525; x=1773097325; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=38elZ9Mqi1kIyTUdjlGj0GQti9oP3Rth6xiqlYhvdME=; b=hLNIpElk1AV5fAq9G2Q7vc9Rk1jB7Y/mH/ndfCov/FjPFj6h0HOCkXS8VtvijqVAXo AS55X4Tvmfc9hxpNmADnCbFZh3bMXa3ZAHEkJBfn0zwh1XboBF+YYrqquVcmd9JKzT1C fFWmVxjcqZmRoZDP5wEQMWDJFumO+IsfYJOh8FVlwUeq2ZOGlq52F/IIy1cp/gQRqgRZ dv15DmBM7cFzipunSg8iIgLXx2XfUqGtZXQuU753Hh4Slg6RqBHqEcpIRmG+zsqTgZmN ET9OFChmzmyD6LWZN7un9UXxzP9ydXLSofiTpfxdb7mxH730a8dOlxlh/95HNmwbOEuR 6Rsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772492525; x=1773097325; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=38elZ9Mqi1kIyTUdjlGj0GQti9oP3Rth6xiqlYhvdME=; b=GOBX3pHK8CG+3w22vz9BHfXwlmzBRTBrGex6uQee8V9huiXl8DSPvfoSnZR5uy/nLa GcfSf17J/fG9DV7ggCDlaxrF/9EsgoxwCDcjp5i6rNQl39/k1zpLnHT1VRps6XWIN8ro EzfsRRs0FWxEv7YhsAIoFzgt+X5gGoZzsVCjF0g9fKI8TsfBXy5fq5nwrmoqZbcYbJMR vKUNYmiwPvqfahMAoSbgXk09NXp/gF0TvCzso5jmSlyFnvzooGzBZxWuT4DzZxN5SncW cT5ZBNrqwYFPVTktXA9fbhfHhkepcF0wVQAgp1mjRZg0/edA27jUQjcW+FEWJiNygfCq Z9+g== X-Forwarded-Encrypted: i=1; AJvYcCWXwcIqV5wcfxkJ2NjARKfKiMPBfoGuwCwfhvlt2r0eJQ/wxujYDlH8n7gH5YqHRFzSEjEhYM/KljgYY0U=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1Gcl4kAGiEr5n5H5JoRFL1Vdqodxc8lOyfeB6Lo9n1MF+2sEN WROhC2prlpcccaA7v9L5lLvgFb0QqewoVHfnX3fgLqv484EntrVZ8b5q X-Gm-Gg: ATEYQzx3JgI3b/PSwhYH+hqdu/4kajTkBYHuw90l2C8+Qj0BtMoNjO74z0ZfcM2KiQj 57Mdf4elsnyJqjdiHS0MHMm1XU1PWMx2/wkl+BZqnaF23KoM6Fd/Ph0Ew0Vj9RMtTS04TtJ5qAO aIJlEAWnyOWxyszsFhKJm+ZYXQLYyn57ciFwZLOtOw8q30pmvKrwBx6dDv493dnq7RHIzhNDrPa 9b0QEJuY/zcE5BBQawhBhYnlhKHIuH4wcmvSPXIpETbW17c3gg1WNIGiSeq67aW10HqkE/HKY3L EoFbFkw7zlxvUSXYJZ77q4aEF1N3Vxe57pwashnYoOhAGm874+32kPLcUjCQIihVCVuIh0iOMVe USTpwu2QGStvCMJqi/J9w94+U8TzySNvmA4SKxEzhLQP3d1p8WLXqw9WgB+DD67tUGW0Edv1QuJ rJF4IlIOzyF6qiuIwq/zux X-Received: by 2002:a05:600c:6217:b0:476:d494:41d2 with SMTP id 5b1f17b1804b1-483c9bc5c06mr239092445e9.29.1772492525302; Mon, 02 Mar 2026 15:02:05 -0800 (PST) Received: from localhost ([2a03:2880:31ff:58::]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483bd7031f3sm390474325e9.6.2026.03.02.15.02.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 15:02:04 -0800 (PST) From: Mohsin Bashir To: netdev@vger.kernel.org Cc: alexanderduyck@fb.com, alok.a.tiwari@oracle.com, andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net, dg573847474@gmail.com, donald.hunter@gmail.com, edumazet@google.com, gal@nvidia.com, horms@kernel.org, idosch@nvidia.com, jacob.e.keller@intel.com, kernel-team@meta.com, kory.maincent@bootlin.com, kuba@kernel.org, lee@trager.us, leon@kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux@armlinux.org.uk, mbloch@nvidia.com, mike.marciniszyn@gmail.com, mohsin.bashr@gmail.com, o.rempel@pengutronix.de, pabeni@redhat.com, saeedm@nvidia.com, tariqt@nvidia.com, vadim.fedorenko@linux.dev Subject: [net-next V4 4/5] eth: fbnic: Fetch TX pause storm stats Date: Mon, 2 Mar 2026 15:01:48 -0800 Message-ID: <20260302230149.1580195-5-mohsin.bashr@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302230149.1580195-1-mohsin.bashr@gmail.com> References: <20260302230149.1580195-1-mohsin.bashr@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With pause storm protection in place, track the occurrence of pause storm events. Since there is a one-to-one mapping between pause storm interrupts and events, use the interrupt count to track this metric. ./ethtool -I -a eth0 Pause parameters for eth0: Autonegotiate: off RX: off TX: on Statistics: tx_pause_frames: 759657 rx_pause_frames: 0 tx_pause_storm_events: 219 Signed-off-by: Jakub Kicinski Signed-off-by: Mohsin Bashir --- drivers/net/ethernet/meta/fbnic/fbnic_csr.h | 1 + drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c | 3 +++ drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.h | 1 + drivers/net/ethernet/meta/fbnic/fbnic_mac.c | 15 +++++++++++++++ 4 files changed, 20 insertions(+) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h b/drivers/net/ethe= rnet/meta/fbnic/fbnic_csr.h index e68c56237b61..72eb22a52572 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_csr.h @@ -627,6 +627,7 @@ enum { FBNIC_RXB_ENQUEUE_INDICES =3D 4 }; =20 +#define FBNIC_RXB_INTR_PS_COUNT(n) (0x080e9 + (n)) /* 0x203a4 + 4*n */ #define FBNIC_RXB_DRBO_FRM_CNT_SRC(n) (0x080f9 + (n)) /* 0x203e4 + 4*n */ #define FBNIC_RXB_DRBO_BYTE_CNT_SRC_L(n) \ (0x080fd + (n)) /* 0x203f4 + 4*n */ diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c b/drivers/net/= ethernet/meta/fbnic/fbnic_ethtool.c index ade9e667640f..70c995b8d1bd 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c @@ -1754,6 +1754,7 @@ fbnic_get_pause_stats(struct net_device *netdev, struct fbnic_net *fbn =3D netdev_priv(netdev); struct fbnic_mac_stats *mac_stats; struct fbnic_dev *fbd =3D fbn->fbd; + u64 tx_ps_events; =20 mac_stats =3D &fbd->hw_stats.mac; =20 @@ -1761,6 +1762,8 @@ fbnic_get_pause_stats(struct net_device *netdev, =20 pause_stats->tx_pause_frames =3D mac_stats->pause.tx_pause_frames.value; pause_stats->rx_pause_frames =3D mac_stats->pause.rx_pause_frames.value; + tx_ps_events =3D mac_stats->pause.tx_pause_storm_events.value; + pause_stats->tx_pause_storm_events =3D tx_ps_events; } =20 static void diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.h b/drivers/net= /ethernet/meta/fbnic/fbnic_hw_stats.h index aa3f429a9aed..caea4be46762 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_hw_stats.h @@ -54,6 +54,7 @@ struct fbnic_rmon_stats { struct fbnic_pause_stats { struct fbnic_stat_counter tx_pause_frames; struct fbnic_stat_counter rx_pause_frames; + struct fbnic_stat_counter tx_pause_storm_events; }; =20 struct fbnic_eth_mac_stats { diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_mac.c b/drivers/net/ethe= rnet/meta/fbnic/fbnic_mac.c index 805107ba3b10..53b7a938b4c2 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_mac.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_mac.c @@ -418,6 +418,18 @@ static void __fbnic_mac_stat_rd64(struct fbnic_dev *fb= d, bool reset, u32 reg, stat->reported =3D true; } =20 +static void fbnic_mac_stat_rd32(struct fbnic_dev *fbd, bool reset, u32 reg, + struct fbnic_stat_counter *stat) +{ + u32 new_reg_value; + + new_reg_value =3D rd32(fbd, reg); + if (!reset) + stat->value +=3D new_reg_value - stat->u.old_reg_value_32; + stat->u.old_reg_value_32 =3D new_reg_value; + stat->reported =3D true; +} + #define fbnic_mac_stat_rd64(fbd, reset, __stat, __CSR) \ __fbnic_mac_stat_rd64(fbd, reset, FBNIC_##__CSR##_L, &(__stat)) =20 @@ -812,6 +824,9 @@ fbnic_mac_get_pause_stats(struct fbnic_dev *fbd, bool r= eset, MAC_STAT_TX_XOFF_STB); fbnic_mac_stat_rd64(fbd, reset, pause_stats->rx_pause_frames, MAC_STAT_RX_XOFF_STB); + fbnic_mac_stat_rd32(fbd, reset, + FBNIC_RXB_INTR_PS_COUNT(FBNIC_RXB_INTF_NET), + &pause_stats->tx_pause_storm_events); } =20 static void --=20 2.47.3 From nobody Tue Mar 3 03:20:24 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D03F33D4FE for ; Mon, 2 Mar 2026 23:02:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492531; cv=none; b=HX2WaKBtuoxWqF7vmaaHwqbznAOpmh3CPdXr5k04qWR/4OEQtRDZ6JlkUBae0YahsmfbcHhzogxdqj5uL26F4YF4qs2QVZj6sTewHkuzxR5yIel5Vkh+ykwf+KDhE1L/rtHdFy1Hn1mb8qCEM75bgpLoXiOnSBzbW3YZZveGwoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772492531; c=relaxed/simple; bh=wHA22cycksa6IDZI2mJjj3iKVXzbsLjK+WUo6mlt/FQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OHqntNVb80m7LE6cfPF9R9I/vFndRqE43EZ/Cd6TtgcnAfI5mN1uNw0PzIbkxCrX0i/pV49I//9XozaWk1OJdvR0rTEhRQ2TVsf6hyYooOTE42IDxS4+jK7zFogNn65UX3Gi+hnN/1ZgguoPbpNt9aiGbBtPWx566Cz8qdHfxK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=O7uzvUND; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="O7uzvUND" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-483487335c2so42176005e9.2 for ; Mon, 02 Mar 2026 15:02:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772492528; x=1773097328; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Wpu21j59crqNQYRnsgiGTYcfHJJE5cMtxeguSKrdFFk=; b=O7uzvUNDMIFAbQRDqewKFmDxdvBZ6fAukvGpeOpNnufsFeal1OVhb5AyNHA+7JASdY BYNl82zoD91Bovy6CKx8qzwzAu/r29WxqMFYdcUWXNAOEAFP2kPUsDS/ORHh/PWR+T3v +4zI8xS8OV0G7k2ROUdLQIy0FUZNnvqmmVW2sNBG1Dc036/QwMlG8A4CKVyk7EYCIFKt xQjblX89XeF0JxDtPzHD+QCeXlgHWz4yLtD7mwvSiP5Ie4LS4rOYGptPxQzsdMuUAdSA 3s+HkXykEjGWqNxmzUGcC5fFKo9yIAnN3L2ZoSG++QPrqQH3Sj+RGBZI9awa1tYWS609 4ofQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772492528; x=1773097328; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Wpu21j59crqNQYRnsgiGTYcfHJJE5cMtxeguSKrdFFk=; b=ReHVsl6uc8yhfje1mRA/63d8uFkT6IVz1DEFVN3gg8NK3C09pf7z3WPbSpSnsc34cg UHW4LOoTXayYkInvXTRuIGIhL0Ck5bjtTwPscbYSiZCVB/8U4jq/Cl6MYa8XTpz7vV9O lhOmKeVNTEjRKUBQewRYoJ+7wwghY0zSUoActZN5696YRvb4zrBFCEwflYgOL6zb3GaH SgKxAx3RmupOQKwcna5JpclT37iCCrM1/IN8Sg92g4ooNcJSZMsFjUt7RVor3JBiYOBB 6oH+9KEZp1a2c9Kvi8+hKpnX0UqeR2HCl4FtkI3I3SsQHtza9XOiEupVbqzQpsfoJ2jW gD0w== X-Forwarded-Encrypted: i=1; AJvYcCXDcLinDnlPUO/zwRmeop8v6lbTqx957W5ZLw0Wo1cJIvXq9c56Yz0FAze/ZcmhncXSnNkVCxjzBuJYAuY=@vger.kernel.org X-Gm-Message-State: AOJu0YyqrE8a/LiiR2tQCJ07vZoDSE3DM7Gael+GP4cp6H1tEtTqsjLa 92io9T4JpdfgZ1YZdSlnPFpROqpVOSAdSp48Cz2jVhSh2nc42UANtGcP X-Gm-Gg: ATEYQzyLXTZttyeqUuZ9nODqXaNWhRR7yz+DtuTZs81oQUc+YUCNQv+knS51mulZ9ca Om9WNFIiafrMqey8YHmgyutXnYxP68gLBrp8TvqiFi4LZW1kGJs8i3D0Msrcucleiwevb2jSeXi tZIdIb0ddDTzNnCXC/43caUhpSCgrb+X3pc5Ny3LVTo76MzfFvmob1o6lAG31rE32bVWjoz+JrN OaI4UhHnh4AL9ytG8jP/26NKfz3mJs0i3sZPPQrd75v+nLrk90aYrB3P8WAfO8A1UAXOeqj9Adj NH8DgjwAM2jpaitXC6NcpmXZEALdfoPQJahoip3E6O8TFQYGetpvhVEEE3K9iluoMz3LMpIUPgH soTcA3kfmmsD9WWn6KoUPZnD2cZV7nebTFu3oU0xXLlbvBfL8di7bLZR/AsZWfthVqST8acbXic t664ODcYS3T4s/pFoZWt4O X-Received: by 2002:a05:600c:3b02:b0:480:3a71:92b2 with SMTP id 5b1f17b1804b1-483c9bedac6mr233724865e9.26.1772492528301; Mon, 02 Mar 2026 15:02:08 -0800 (PST) Received: from localhost ([2a03:2880:31ff:10::]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483c3b4a121sm303002795e9.8.2026.03.02.15.02.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 15:02:07 -0800 (PST) From: Mohsin Bashir To: netdev@vger.kernel.org Cc: alexanderduyck@fb.com, alok.a.tiwari@oracle.com, andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net, dg573847474@gmail.com, donald.hunter@gmail.com, edumazet@google.com, gal@nvidia.com, horms@kernel.org, idosch@nvidia.com, jacob.e.keller@intel.com, kernel-team@meta.com, kory.maincent@bootlin.com, kuba@kernel.org, lee@trager.us, leon@kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux@armlinux.org.uk, mbloch@nvidia.com, mike.marciniszyn@gmail.com, mohsin.bashr@gmail.com, o.rempel@pengutronix.de, pabeni@redhat.com, saeedm@nvidia.com, tariqt@nvidia.com, vadim.fedorenko@linux.dev Subject: [net-next V4 5/5] eth: mlx5: Move pause storm errors to pause stats Date: Mon, 2 Mar 2026 15:01:49 -0800 Message-ID: <20260302230149.1580195-6-mohsin.bashr@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302230149.1580195-1-mohsin.bashr@gmail.com> References: <20260302230149.1580195-1-mohsin.bashr@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Report device_stall_critical_watermark_cnt as tx_pause_storm_events in the ethtool_pause_stats struct. This counter tracks pause storm error events which indicate the NIC has been sending pause frames for an extended period due to a stall. The ethtool_pause_stats struct reports these stalls as a single value, whereas the device supports tracking them per priority. Aggregate the counter across all priority classes to capture stalls on all priorities. Note that the stats are fetched from the device for each priority via mlx5_core_access_reg(). Signed-off-by: Jakub Kicinski Signed-off-by: Mohsin Bashir --- .../ethernet/mellanox/mlx5/core/en_stats.c | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/n= et/ethernet/mellanox/mlx5/core/en_stats.c index a8af84fc9763..1a3ecf073913 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c @@ -916,11 +916,30 @@ static int mlx5e_stats_get_ieee(struct mlx5_core_dev = *mdev, sz, MLX5_REG_PPCNT, 0, 0); } =20 +static int mlx5e_stats_get_per_prio(struct mlx5_core_dev *mdev, + u32 *ppcnt_per_prio, int prio) +{ + u32 in[MLX5_ST_SZ_DW(ppcnt_reg)] =3D {}; + int sz =3D MLX5_ST_SZ_BYTES(ppcnt_reg); + + if (!(MLX5_CAP_PCAM_FEATURE(mdev, pfcc_mask) && + MLX5_CAP_DEBUG(mdev, stall_detect))) + return -EOPNOTSUPP; + + MLX5_SET(ppcnt_reg, in, local_port, 1); + MLX5_SET(ppcnt_reg, in, grp, MLX5_PER_PRIORITY_COUNTERS_GROUP); + MLX5_SET(ppcnt_reg, in, prio_tc, prio); + return mlx5_core_access_reg(mdev, in, sz, ppcnt_per_prio, sz, + MLX5_REG_PPCNT, 0, 0); +} + void mlx5e_stats_pause_get(struct mlx5e_priv *priv, struct ethtool_pause_stats *pause_stats) { u32 ppcnt_ieee_802_3[MLX5_ST_SZ_DW(ppcnt_reg)]; struct mlx5_core_dev *mdev =3D priv->mdev; + u64 ps_stats =3D 0; + int prio; =20 if (mlx5e_stats_get_ieee(mdev, ppcnt_ieee_802_3)) return; @@ -933,6 +952,17 @@ void mlx5e_stats_pause_get(struct mlx5e_priv *priv, MLX5E_READ_CTR64_BE_F(ppcnt_ieee_802_3, eth_802_3_cntrs_grp_data_layout, a_pause_mac_ctrl_frames_received); + + for (prio =3D 0; prio < NUM_PPORT_PRIO; prio++) { + if (mlx5e_stats_get_per_prio(mdev, ppcnt_ieee_802_3, prio)) + return; + + ps_stats +=3D MLX5E_READ_CTR64_BE_F(ppcnt_ieee_802_3, + eth_per_prio_grp_data_layout, + device_stall_critical_watermark_cnt); + } + + pause_stats->tx_pause_storm_events =3D ps_stats; } =20 void mlx5e_stats_eth_phy_get(struct mlx5e_priv *priv, --=20 2.47.3