From nobody Sat Feb 7 16:39:20 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (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 93B493D6470 for ; Tue, 3 Feb 2026 17:15:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138914; cv=none; b=YSbtGC2e/8dvmEjxjbotzOuYqpNao4k8GXa/pfhBFuZM4ewxQnaLoIfWxKzzH7G5tUxb37QgJSDEEScEGhA7/CeRVQfKuZUCPeQi57VAHnF4r1n3qxNIdGp2MEfWJaD8cfoPmbYsBOu7/N60i00xDZksFpifWwwL9Q/Abmv8T/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138914; c=relaxed/simple; bh=wY5gLEBdKCu10zTPiFjklZ3sRYW/DJSl0/z4N13a/iY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Di3i4Ep3nIv29uC0td1AbqVu6plJCoV5801TjAA4pWDkxo63HjhkUW/XGQVeciNPgqi5Wpl/1CWkhqdUpKGM5H2xFBw191P9pSzHdUhko99fs23v0mqDy1c6r8ccvWFVQmM5eW9uF7Vtwii2y9OqYxLWiRKtvDgkARhzFSYU5Xw= 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=iYb3jnGy; arc=none smtp.client-ip=209.85.210.193 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="iYb3jnGy" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-81f5381d168so6027216b3a.2 for ; Tue, 03 Feb 2026 09:15:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770138911; x=1770743711; 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=aGUSc9pyB8YlMmUCPEWlPuLgiaZvDHITFMXzeMkPLPU=; b=iYb3jnGy/7DV1+tKmaKjTY/Vz5E2Mg+2sAr+ZxHGrn4UcnnVs8tfQ7jwMyWy99GIUa FovFlZgh3iZ5I4lVRxOIjnXEl0JD3ds9dnfJTvYBh12J++9pgIaaeu8g9jqmwM1LXrDy vcI2JkHJ7myqn90fdoz9kavMdiqUkJfrUUL9lqdCHqThhf0d2I2yC9JtEzJzG8Xjx2h9 bootczBaJY2S9QnPvhaLub/HTspJxEUMNcajnrCfBG/KgCctFgaluO/tNJEOEAQbfD32 m77L4V5oqTXgBhBC8w5mCIL76yho2ylE8a0WBgeSthR9tqpyWsZXSN5YINzA/bxELCQF zUnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770138911; x=1770743711; 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=aGUSc9pyB8YlMmUCPEWlPuLgiaZvDHITFMXzeMkPLPU=; b=kU/DaQKo4Mfu2v4uppX66yEYQJM154OKNaUvwXFg5YZayUWRUXcNvEH32sf4B8PuT5 SKlA2oifkHHTt1GxhvCPcvUAofMEhetZ4tbZhQT+rL8dvsXuQePW8i5FADffTGhxfsXZ lh4Bg3NwMATHM+oQhtRujExK9qNctBq+zBmUGaAsIRbQRUpdKj+TowvDPp87gN7dHHaA MuczOiZ/uCT7BXke2V7MN6jTX5Carbz3XRCldfVaVlQPT+sZyzivkynpI7r5vZYT0rq6 BMlIz9DPVUp7xHUucUEqEKB9ryBH0UU3uxJDduN3Sb1yTJL4g8Ne+U6mrqQiQkquAPTj Fpmw== X-Forwarded-Encrypted: i=1; AJvYcCUkx0bvEAgwzDcJSeJNqkUON+Jk8ZajpSV1mWrez4kXWe5NyisRr7boXn4PkACqnW6/aqn5qbqsleHpdNs=@vger.kernel.org X-Gm-Message-State: AOJu0YyoVogdCG6TZWpfxv/qkpreiy9gtJXaBDxanOaSuZ/HWI9IHaw6 HiAm3f20sl20/hO7HukSkPWf6eaoMMvYYIL4dRK/JL4Rt0PXifxmfwp4j/He7giT4u4= X-Gm-Gg: AZuq6aL5LNnXVS3FEGTlZQVHBmRLnJUs3DiL4mqs/RZxcTSLWGb2+f4RhBZCyIrD4RQ 9WfZlJTXE3JSgrJI3MD/hYSo90PjUNr35TFdst0FiRKa8o8obahSXTQy6y0fovTYxLyfIuQbwaq rSiij8gOBYtfQJiAdtTHqa8pmelH2q1OSE6MW2BiluQ92z0ox8HyG5NJ3PvO+FiUbHCJAQSdeiW UrPcv30YOfdDGVTZeqsdl1rsHKPvajEk5edw10KTAFOwXR3z5PcI5GZAx17XUPVFgfLqUF3NSFj oE1cSnfGSMhMIztw/ZJijhE3KYixy2KI4AJF0Ua+viLuhRjWLEA7XNYrOcejxPuvOE0CGhXloJX CdW7rPRwT5F6rJMoN//U5w/DNN4+da0NsZA5nGkC21Jp4oWezunyxr8PCHDB0rVRINbDvI/N52L zyLKy2XOqzB51RG7QT3LVsiOdZkEoKnQRWAnIbUV4xShI1yLyNGRM2cnebTU+j2UUzAFQPZ7l/P LM3A/0IuBEV X-Received: by 2002:a05:6a00:1143:b0:7ff:d378:98f with SMTP id d2e1a72fcca58-8241c4c4a57mr118370b3a.37.1770138910953; Tue, 03 Feb 2026 09:15:10 -0800 (PST) Received: from d.home.mmyangfl.win (tunnel997320-pt.tunnel.tserv3.fmt2.ipv6.he.net. [2001:470:1f04:2c7::2]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-823cdf6fa26sm11075817b3a.58.2026.02.03.09.15.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 09:15:10 -0800 (PST) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 1/3] net: dsa: yt921x: Refactor port error message Date: Wed, 4 Feb 2026 01:12:41 +0800 Message-ID: <20260203171305.95085-2-mmyangfl@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260203171305.95085-1-mmyangfl@gmail.com> References: <20260203171305.95085-1-mmyangfl@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" Sometimes we might get error from the underlying bus, but the return type of the function is void, so an error message is desired. There are many instances of the same pattern, refactor it. Signed-off-by: David Yang --- drivers/net/dsa/yt921x.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c index 98e8915dd6c2..ce2878ef9b24 100644 --- a/drivers/net/dsa/yt921x.c +++ b/drivers/net/dsa/yt921x.c @@ -185,6 +185,9 @@ struct yt921x_reg_mdio { #define to_yt921x_priv(_ds) container_of_const(_ds, struct yt921x_priv, ds) #define to_device(priv) ((priv)->ds.dev) =20 +#define print_port_err(dev, port, res, action) dev_err( \ + (dev), "Failed to %s port %d: %i\n", (action), (port), (res)) + static int yt921x_reg_read(struct yt921x_priv *priv, u32 reg, u32 *valp) { WARN_ON(!mutex_is_locked(&priv->reg_lock)); @@ -721,8 +724,7 @@ static int yt921x_read_mib(struct yt921x_priv *priv, in= t port) mib->tx_jumbo; =20 if (res) - dev_err(dev, "Failed to %s port %d: %i\n", "read stats for", - port, res); + print_port_err(dev, port, res, "read stats for"); return res; } =20 @@ -1102,8 +1104,7 @@ yt921x_dsa_port_mirror_del(struct dsa_switch *ds, int= port, mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dev, "Failed to %s port %d: %i\n", "unmirror", - port, res); + print_port_err(dev, port, res, "unmirror"); } =20 static int @@ -1690,8 +1691,7 @@ static void yt921x_dsa_port_fast_age(struct dsa_switc= h *ds, int port) mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dev, "Failed to %s port %d: %i\n", "clear FDB for", - port, res); + print_port_err(dev, port, res, "clear FDB for"); } =20 static int @@ -2266,8 +2266,7 @@ yt921x_dsa_port_bridge_leave(struct dsa_switch *ds, i= nt port, mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dev, "Failed to %s port %d: %i\n", "unbridge", - port, res); + print_port_err(dev, port, res, "unbridge"); } =20 static int @@ -2399,8 +2398,7 @@ yt921x_dsa_port_stp_state_set(struct dsa_switch *ds, = int port, u8 state) mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dev, "Failed to %s port %d: %i\n", "set STP state for", - port, res); + print_port_err(dev, port, res, "set STP state for"); } =20 static int __maybe_unused @@ -2738,8 +2736,7 @@ yt921x_phylink_mac_link_down(struct phylink_config *c= onfig, unsigned int mode, mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dp->ds->dev, "Failed to %s port %d: %i\n", "bring down", - port, res); + print_port_err(dp->ds->dev, port, res, "bring down"); } =20 static void @@ -2759,8 +2756,7 @@ yt921x_phylink_mac_link_up(struct phylink_config *con= fig, mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dp->ds->dev, "Failed to %s port %d: %i\n", "bring up", - port, res); + print_port_err(dp->ds->dev, port, res, "bring up"); =20 schedule_delayed_work(&priv->ports[port].mib_read, 0); } @@ -2779,8 +2775,7 @@ yt921x_phylink_mac_config(struct phylink_config *conf= ig, unsigned int mode, mutex_unlock(&priv->reg_lock); =20 if (res) - dev_err(dp->ds->dev, "Failed to %s port %d: %i\n", "config", - port, res); + print_port_err(dp->ds->dev, port, res, "config"); } =20 static void --=20 2.51.0 From nobody Sat Feb 7 16:39:20 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 C11402777F9 for ; Tue, 3 Feb 2026 17:15:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138917; cv=none; b=hBPfFenYmXDWYnN8ZwQZqMHY7Fpz/jJMqDUS2zbZlzm5mKdvsWmmXpFM4SAXLW+oMZhGTfgKQ2XlSwP4v3+84DJiY2uwGZpQPVWDH1LV5MmjjLDDm/zgpvie4VVyHkG+FzPdn9+sOuF6qVtl9Q4ru4ClAi+v6ismavElaWV+2RI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138917; c=relaxed/simple; bh=KRb0iP9qT/mRjkBvphytxm5Z8BqLPEO3+/hIbKUjY+o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f05oiBPVfHdRg+wjfPLMLvSPi9X5lrNk0oERseC0xEzKqeDIDS5ExfBDHJo1F5glWNOC+06Aju0AkxFrxjPGAuT725RNtuSFcpIjt+M1WdfyimpKP93Q0uRKV2+UpkR9UFwTI0D2HOpb3zgxFXkUw4DCtjOrZ+d0EePiBhCziXg= 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=IfkPIK9I; arc=none smtp.client-ip=209.85.210.170 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="IfkPIK9I" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-81dab89f286so2932229b3a.2 for ; Tue, 03 Feb 2026 09:15:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770138915; x=1770743715; 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=vsxA1AJP4YlB7qBCtC2YXQ1d9/cM6CmoIs6IA95vh2g=; b=IfkPIK9IfckroYbpJEsJnPBuBDYIF08mUQAHD+rQg/RCS4mPFQqZAv9VkYA+VXwiMB svxU+RPTv0CNa30nn5vfdnQPFiyrtAQgF+DtBwtN6yFV4PYjMkXBqb+AsEENVmljlgcl R6hkaOZ9ABvjhknb7eAGSLtDizX3WHmfkIjeoZLZNz6XrjPu+kxIbcMF2cGHMMB3fCjT kHh0m0ny66JkztH08IGyEOS33o37M3vSGXuOqLzc0vEcq3CGVWKJqG6UkngsOTv5DG1p 8KFxj4E0EOZ51Lqf5QnIUS/VsNYltSEYXwkY7EJgR8FL58gwdWmymO66L3Wukmeogr2V dA/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770138915; x=1770743715; 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=vsxA1AJP4YlB7qBCtC2YXQ1d9/cM6CmoIs6IA95vh2g=; b=cWM7bKyyqsYdl9Q/D3WVvCVaU97Kdn6Z3VVrfb+GzjcGu/8RH0jLKjo3fzfKSvi/YG P5bT6XNk+dLN/muty3HMQb7c72z8kl43SFZla0WwnSOwMGC6gIbZeDfLtFMnsxUIqCA5 Q6H6XrVZTb2RgAPhpAPFw705dNsn+BPqBUIopcXkXlyUAQuEga2dSxCGT7Luhr2Pu0eK ZFOzCWNXu8Zivb3r8iXxMBXH2p1kf6nYLrpnobdnpsyB5ksiJC/Oa2sSXCV9+LQjY6N3 lKyzTCDkMwDbWiYK7UYbII455pm1UyVvA72IE0rJ7s1kR0FF2cmz6JVlvM+SXIr/aXZ/ /2iA== X-Forwarded-Encrypted: i=1; AJvYcCUQmkSOqL6kDKjDqu2OJLBFAHag2I/2XwJtevMRTsUhxHwDLjah/R7rl4Td8SbHLJjB3/sZFi5zo83je4Q=@vger.kernel.org X-Gm-Message-State: AOJu0YzaFFm+rhEDrBgTvDG3fOAkscCI1gVJfvkYX9bx4IZ/lEhb6dit zxIYs3BikXOMDqNKoYAO10GIWMf1p49v8ludTDNH5gkaS122cFpYnthz X-Gm-Gg: AZuq6aKJSTKZmRSm+A8dYLIYdALbEhK53q2L9EmNfi5iNF0jDvcHAqRzHCetktuO6rt BWHzVJlXUfyZz8aWY290mtj1o1M3O+OA/8+5fhtn0ux9GLgk8YA7IeVt/Ml6WdBUsRnMwsWsraZ TPJ7nL2wWx3iUlO8HbhKOSO4IAm1dZSV5NOfYPO5J1uaxZ58dvcoodImBixjTWkBJRBunv4lo5l dfDCbNFGhbcPAh5zmV0jOUF+3EOAWQ43SmVm68w8Hd1AEgYL5Cpb7vKgTOcxx5eJIow9PKnNTqc 65Z25XEQAyootyz/ebemx+jYSXEIOWI6mG615aAT7e71UEb3EReygZj3RtB6rmpfwv5HlNQNj5r qdsCUwb5y7zuBjrrD/ukjTEbCh2kmBJznYw3ZYVBhxThYWnjyTkRW3tbwYdt/SONeDuLOKFZrl5 /84B5H9UNe6H3yxaL0QoTcYkQS+I/xbEoWMc6lcw7zRt+rkp1K0jmTCn3Ar2ZZHH6xA0fdvDZ1B jwtwqiMH28D3n2tliTYOos= X-Received: by 2002:a05:6a00:92a9:b0:7e8:4587:e8ce with SMTP id d2e1a72fcca58-8241c78d8efmr86588b3a.65.1770138914596; Tue, 03 Feb 2026 09:15:14 -0800 (PST) Received: from d.home.mmyangfl.win (tunnel997320-pt.tunnel.tserv3.fmt2.ipv6.he.net. [2001:470:1f04:2c7::2]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-823cdf6fa26sm11075817b3a.58.2026.02.03.09.15.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 09:15:14 -0800 (PST) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 2/3] net: dsa: yt921x: Return early for failed MIB read Date: Wed, 4 Feb 2026 01:12:42 +0800 Message-ID: <20260203171305.95085-3-mmyangfl@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260203171305.95085-1-mmyangfl@gmail.com> References: <20260203171305.95085-1-mmyangfl@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" This patch does not change anything effectively, but serves as a prerequisite for another patch. Signed-off-by: David Yang --- drivers/net/dsa/yt921x.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c index ce2878ef9b24..b9f507b07d1f 100644 --- a/drivers/net/dsa/yt921x.c +++ b/drivers/net/dsa/yt921x.c @@ -714,6 +714,11 @@ static int yt921x_read_mib(struct yt921x_priv *priv, i= nt port) WRITE_ONCE(*valp, val); } =20 + if (res) { + print_port_err(dev, port, res, "read stats for"); + return res; + } + pp->rx_frames =3D mib->rx_64byte + mib->rx_65_127byte + mib->rx_128_255byte + mib->rx_256_511byte + mib->rx_512_1023byte + mib->rx_1024_1518byte + @@ -723,9 +728,7 @@ static int yt921x_read_mib(struct yt921x_priv *priv, in= t port) mib->tx_512_1023byte + mib->tx_1024_1518byte + mib->tx_jumbo; =20 - if (res) - print_port_err(dev, port, res, "read stats for"); - return res; + return 0; } =20 static void yt921x_poll_mib(struct work_struct *work) --=20 2.51.0 From nobody Sat Feb 7 16:39:20 2026 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (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 4F6C73D4122 for ; Tue, 3 Feb 2026 17:15:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138921; cv=none; b=JsZVSb9WMonTZ+r4aBsOlkJ55NVb+cnJTAlPMQwDid31RnMQorstm+9IAR3w7Gxpiz6A7ecApPRv2BxjplO0qFkFU9PufazWMhPDIHpSUOgyCnFSQOpRSp4h58tCrD1s8kH8vb9IU8CcH1Qfk8DXTRexnY4jvSf2ggV6xHrxGZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770138921; c=relaxed/simple; bh=lvmvyZyJWnMEXhXgjGHs0w9zFVhugnGyR7rBDaIpC2U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nU76amQ3gC6buGouHUTYtKLIed7sk3Rg6A1frub3olNIrqjOKbIUYe2Ln3NMMqD+BM0Xxqa69kLakqGPonJV00w+hugM04/zjnxmadKYUVQy1laSmSM0fJpxNgx6Ch5VGPlsCshjhgO4kh0yLaYi2NtFYnrDVnZt+HM7JaHfvkI= 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=HvEnWaI1; arc=none smtp.client-ip=209.85.210.171 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="HvEnWaI1" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-8230d228372so3168565b3a.1 for ; Tue, 03 Feb 2026 09:15:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770138919; x=1770743719; 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=LfqWWYBu4g4YLvreRrvfBzEXXIQPrBVUIN8EFeszJ/A=; b=HvEnWaI1br2G7ox1bXE1eg4+oFXwxmgUX2J+vKLoQcNfh1IM8F0o+gT/60t+tZLnaz RgK+TpbzoEnYSkbxeKsjM9ng99KQMiiTtDzkPQpNddwRwLWAPzjxiPN5vt9Bug3w4S8X qScfHzt/ZukGSP+Isa+PuQJ4K8+KzddD1hbgLNoFlC7W+v2YkihPJEB23Kd9XO/522mP k/jwj6otjgcwt/ot9R/kk84SyrtrQMQovggKHhvQMcRfccQlXuogWDYkZH2Lsa8MQrU5 0Wq0XcDMU3Zd3llcGbCKaDtqcsqO39w0wh/1jXsws3BaExDrncBcdQB1WY6AIbNmV7hb ZtFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770138919; x=1770743719; 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=LfqWWYBu4g4YLvreRrvfBzEXXIQPrBVUIN8EFeszJ/A=; b=Dt9G9+NMtcb3j3P4z9alGuQCqEzE/M4stQLxew2DW26dvcKyJidrH5kOuf4w9EPA9x +x3lHTjP/EzwDiPutXoeFjlG0bvz/mlSYUwJlGjxBFQvBeo+w3cwEfZQpeHi8VuH8kHv klTNnNJoXwVeIGS9F93uXHQShvdc7EAj0Gf2J+gbOO07ZVrwx0SuLzX6BEmn5pwph3Y/ I+cFet0J2waVrkdOGexJ/Qt0V1bAEQFoZC2tzMCwszlbZcJdhGtrjnnzcg0U2dZAhQjf 6uz0+PwLLCMpxlJybZroZUVwiKP5k7bkcBja1MIERor6xyL+Mfv+rIt6v/zP2w4CMYlT TwnQ== X-Forwarded-Encrypted: i=1; AJvYcCW297RZauh5F2d2zavCMHu0CwX8L920ZSjrWDxtGeTZnrs5u4jns7Yg/PgAdzV4pLM+iZn+FpUxFkr6hCk=@vger.kernel.org X-Gm-Message-State: AOJu0YzfX5eITfd2kDL+UPrygNeYmyM/g2YpoKS5fquJuhEq4DLeGVtk gyeaG+D/kjGVAZiODUM9JdJSLqWcq9zNGvnyGnbd88zX1Opto4qGbgQO X-Gm-Gg: AZuq6aLMEF7t/IJ2kMQT0BxHN0Pc5tAT9nZaeJvz1upFh/AZqHVTqjl/a03zyY6phD/ 5ien8uBByAbrN+ksXaZKWYiVDTAEll5D4Z/+ImBUqDBK4HTMRPa+46HhV5MAyqdhrRr2WNOlCoE z7UhxsrmVcfjTJ/RiMYiMWjHrgEfyP80SYMTPAPpvbnx9eC0ne3Gb+5vy2m5XHMmrFGBy1OqTbs poW4Pr/uDIi5z77zkMMHSWJvBhvV1olMvbfL/wXSWWp+LFAIi+qVcKrHFacm+RXvSAMm0xtBQpM kNfce5x+x23c6DN965pNH+zECdkfZAGQasHjeFherF4n2wn73xPwVmnECdg0if3eSSieRDb6ZND gALHuXQim04w99Bm+RXT7EZAY137HULQkL+bPsP4jtLbs5UzMHJdERtglNifaUCZky0wFkUvLY1 zWIVA4tgVpe28lLtw7tUB5dakhMtZahsR/dD6I1jwxWg59xUGsNFRuyZ/3NK28tXSdpibGDwWjE XaxQF51sUGM X-Received: by 2002:a05:6a00:179c:b0:81f:394a:4897 with SMTP id d2e1a72fcca58-8241c2c526dmr129639b3a.44.1770138918396; Tue, 03 Feb 2026 09:15:18 -0800 (PST) Received: from d.home.mmyangfl.win (tunnel997320-pt.tunnel.tserv3.fmt2.ipv6.he.net. [2001:470:1f04:2c7::2]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-823cdf6fa26sm11075817b3a.58.2026.02.03.09.15.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 09:15:18 -0800 (PST) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 3/3] net: dsa: yt921x: Use u64_stats_t for MIB stats Date: Wed, 4 Feb 2026 01:12:43 +0800 Message-ID: <20260203171305.95085-4-mmyangfl@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260203171305.95085-1-mmyangfl@gmail.com> References: <20260203171305.95085-1-mmyangfl@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" 64-bit variables might not be atomic on 32-bit architectures, thus cannot be unconditionally made lock-free. Use u64_stats_t so it would still be lock-free on 64-bit architectures. Signed-off-by: David Yang --- drivers/net/dsa/yt921x.c | 236 +++++++++++++++++++++++---------------- drivers/net/dsa/yt921x.h | 114 ++++++++++--------- 2 files changed, 205 insertions(+), 145 deletions(-) diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c index b9f507b07d1f..a7b1a21204f1 100644 --- a/drivers/net/dsa/yt921x.c +++ b/drivers/net/dsa/yt921x.c @@ -20,6 +20,7 @@ #include #include #include +#include =20 #include #include @@ -673,22 +674,20 @@ yt921x_mbus_ext_init(struct yt921x_priv *priv, struct= device_node *mnp) static int yt921x_read_mib(struct yt921x_priv *priv, int port) { struct yt921x_port *pp =3D &priv->ports[port]; + struct yt921x_mib *mib_new =3D &pp->mib_new; struct device *dev =3D to_device(priv); struct yt921x_mib *mib =3D &pp->mib; + u64 rx_frames; + u64 tx_frames; int res =3D 0; =20 - /* Reading of yt921x_port::mib is not protected by a lock and it's vain - * to keep its consistency, since we have to read registers one by one - * and there is no way to make a snapshot of MIB stats. - * - * Writing (by this function only) is and should be protected by - * reg_lock. + /* u64_stats_read/set is redundant for mib_new, but I don't want to + * declare a plain u64 yt921x_mib variant. */ =20 for (size_t i =3D 0; i < ARRAY_SIZE(yt921x_mib_descs); i++) { const struct yt921x_mib_desc *desc =3D &yt921x_mib_descs[i]; u32 reg =3D YT921X_MIBn_DATA0(port) + desc->offset; - u64 *valp =3D &((u64 *)mib)[i]; u32 val0; u64 val; =20 @@ -697,7 +696,7 @@ static int yt921x_read_mib(struct yt921x_priv *priv, in= t port) break; =20 if (desc->size <=3D 1) { - u64 old_val =3D *valp; + u64 old_val =3D u64_stats_read(&mib->stats[i]); =20 val =3D (old_val & ~(u64)U32_MAX) | val0; if (val < old_val) @@ -711,7 +710,7 @@ static int yt921x_read_mib(struct yt921x_priv *priv, in= t port) val =3D ((u64)val1 << 32) | val0; } =20 - WRITE_ONCE(*valp, val); + u64_stats_set(&mib_new->stats[i], val); } =20 if (res) { @@ -719,14 +718,29 @@ static int yt921x_read_mib(struct yt921x_priv *priv, = int port) return res; } =20 - pp->rx_frames =3D mib->rx_64byte + mib->rx_65_127byte + - mib->rx_128_255byte + mib->rx_256_511byte + - mib->rx_512_1023byte + mib->rx_1024_1518byte + - mib->rx_jumbo; - pp->tx_frames =3D mib->tx_64byte + mib->tx_65_127byte + - mib->tx_128_255byte + mib->tx_256_511byte + - mib->tx_512_1023byte + mib->tx_1024_1518byte + - mib->tx_jumbo; + rx_frames =3D u64_stats_read(&mib_new->rx_64byte) + + u64_stats_read(&mib_new->rx_65_127byte) + + u64_stats_read(&mib_new->rx_128_255byte) + + u64_stats_read(&mib_new->rx_256_511byte) + + u64_stats_read(&mib_new->rx_512_1023byte) + + u64_stats_read(&mib_new->rx_1024_1518byte) + + u64_stats_read(&mib_new->rx_jumbo); + tx_frames =3D u64_stats_read(&mib_new->tx_64byte) + + u64_stats_read(&mib_new->tx_65_127byte) + + u64_stats_read(&mib_new->tx_128_255byte) + + u64_stats_read(&mib_new->tx_256_511byte) + + u64_stats_read(&mib_new->tx_512_1023byte) + + u64_stats_read(&mib_new->tx_1024_1518byte) + + u64_stats_read(&mib_new->tx_jumbo); + + u64_stats_update_begin(&pp->syncp); + for (size_t i =3D 0; i < ARRAY_SIZE(yt921x_mib_descs); i++) { + u64_stats_set(&mib->stats[i], + u64_stats_read(&mib_new->stats[i])); + } + u64_stats_set(&pp->rx_frames, rx_frames); + u64_stats_set(&pp->tx_frames, tx_frames); + u64_stats_update_end(&pp->syncp); =20 return 0; } @@ -771,22 +785,27 @@ yt921x_dsa_get_ethtool_stats(struct dsa_switch *ds, i= nt port, uint64_t *data) struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; size_t j; =20 mutex_lock(&priv->reg_lock); yt921x_read_mib(priv, port); mutex_unlock(&priv->reg_lock); =20 - j =3D 0; - for (size_t i =3D 0; i < ARRAY_SIZE(yt921x_mib_descs); i++) { - const struct yt921x_mib_desc *desc =3D &yt921x_mib_descs[i]; + do { + start =3D u64_stats_fetch_begin(&pp->syncp); =20 - if (!desc->name) - continue; + j =3D 0; + for (size_t i =3D 0; i < ARRAY_SIZE(yt921x_mib_descs); i++) { + const struct yt921x_mib_desc *desc =3D &yt921x_mib_descs[i]; =20 - data[j] =3D ((u64 *)mib)[i]; - j++; - } + if (!desc->name) + continue; + + data[j] =3D u64_stats_read(&((u64_stats_t *)mib)[i]); + j++; + } + } while (u64_stats_fetch_retry(&pp->syncp, start)); } =20 static int yt921x_dsa_get_sset_count(struct dsa_switch *ds, int port, int = sset) @@ -813,33 +832,38 @@ yt921x_dsa_get_eth_mac_stats(struct dsa_switch *ds, i= nt port, struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; =20 mutex_lock(&priv->reg_lock); yt921x_read_mib(priv, port); mutex_unlock(&priv->reg_lock); =20 - mac_stats->FramesTransmittedOK =3D pp->tx_frames; - mac_stats->SingleCollisionFrames =3D mib->tx_single_collisions; - mac_stats->MultipleCollisionFrames =3D mib->tx_multiple_collisions; - mac_stats->FramesReceivedOK =3D pp->rx_frames; - mac_stats->FrameCheckSequenceErrors =3D mib->rx_crc_errors; - mac_stats->AlignmentErrors =3D mib->rx_alignment_errors; - mac_stats->OctetsTransmittedOK =3D mib->tx_good_bytes; - mac_stats->FramesWithDeferredXmissions =3D mib->tx_deferred; - mac_stats->LateCollisions =3D mib->tx_late_collisions; - mac_stats->FramesAbortedDueToXSColls =3D mib->tx_aborted_errors; - /* mac_stats->FramesLostDueToIntMACXmitError */ - /* mac_stats->CarrierSenseErrors */ - mac_stats->OctetsReceivedOK =3D mib->rx_good_bytes; - /* mac_stats->FramesLostDueToIntMACRcvError */ - mac_stats->MulticastFramesXmittedOK =3D mib->tx_multicast; - mac_stats->BroadcastFramesXmittedOK =3D mib->tx_broadcast; - /* mac_stats->FramesWithExcessiveDeferral */ - mac_stats->MulticastFramesReceivedOK =3D mib->rx_multicast; - mac_stats->BroadcastFramesReceivedOK =3D mib->rx_broadcast; - /* mac_stats->InRangeLengthErrors */ - /* mac_stats->OutOfRangeLengthField */ - mac_stats->FrameTooLongErrors =3D mib->rx_oversize_errors; + do { + start =3D u64_stats_fetch_begin(&pp->syncp); + + mac_stats->FramesTransmittedOK =3D u64_stats_read(&pp->tx_frames); + mac_stats->SingleCollisionFrames =3D u64_stats_read(&mib->tx_single_coll= isions); + mac_stats->MultipleCollisionFrames =3D u64_stats_read(&mib->tx_multiple_= collisions); + mac_stats->FramesReceivedOK =3D u64_stats_read(&pp->rx_frames); + mac_stats->FrameCheckSequenceErrors =3D u64_stats_read(&mib->rx_crc_erro= rs); + mac_stats->AlignmentErrors =3D u64_stats_read(&mib->rx_alignment_errors); + mac_stats->OctetsTransmittedOK =3D u64_stats_read(&mib->tx_good_bytes); + mac_stats->FramesWithDeferredXmissions =3D u64_stats_read(&mib->tx_defer= red); + mac_stats->LateCollisions =3D u64_stats_read(&mib->tx_late_collisions); + mac_stats->FramesAbortedDueToXSColls =3D u64_stats_read(&mib->tx_aborted= _errors); + /* mac_stats->FramesLostDueToIntMACXmitError */ + /* mac_stats->CarrierSenseErrors */ + mac_stats->OctetsReceivedOK =3D u64_stats_read(&mib->rx_good_bytes); + /* mac_stats->FramesLostDueToIntMACRcvError */ + mac_stats->MulticastFramesXmittedOK =3D u64_stats_read(&mib->tx_multicas= t); + mac_stats->BroadcastFramesXmittedOK =3D u64_stats_read(&mib->tx_broadcas= t); + /* mac_stats->FramesWithExcessiveDeferral */ + mac_stats->MulticastFramesReceivedOK =3D u64_stats_read(&mib->rx_multica= st); + mac_stats->BroadcastFramesReceivedOK =3D u64_stats_read(&mib->rx_broadca= st); + /* mac_stats->InRangeLengthErrors */ + /* mac_stats->OutOfRangeLengthField */ + mac_stats->FrameTooLongErrors =3D u64_stats_read(&mib->rx_oversize_error= s); + } while (u64_stats_fetch_retry(&pp->syncp, start)); } =20 static void @@ -849,14 +873,19 @@ yt921x_dsa_get_eth_ctrl_stats(struct dsa_switch *ds, = int port, struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; =20 mutex_lock(&priv->reg_lock); yt921x_read_mib(priv, port); mutex_unlock(&priv->reg_lock); =20 - ctrl_stats->MACControlFramesTransmitted =3D mib->tx_pause; - ctrl_stats->MACControlFramesReceived =3D mib->rx_pause; - /* ctrl_stats->UnsupportedOpcodesReceived */ + do { + start =3D u64_stats_fetch_begin(&pp->syncp); + + ctrl_stats->MACControlFramesTransmitted =3D u64_stats_read(&mib->tx_paus= e); + ctrl_stats->MACControlFramesReceived =3D u64_stats_read(&mib->rx_pause); + /* ctrl_stats->UnsupportedOpcodesReceived */ + } while (u64_stats_fetch_retry(&pp->syncp, start)); } =20 static const struct ethtool_rmon_hist_range yt921x_rmon_ranges[] =3D { @@ -878,6 +907,7 @@ yt921x_dsa_get_rmon_stats(struct dsa_switch *ds, int po= rt, struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; =20 mutex_lock(&priv->reg_lock); yt921x_read_mib(priv, port); @@ -885,26 +915,30 @@ yt921x_dsa_get_rmon_stats(struct dsa_switch *ds, int = port, =20 *ranges =3D yt921x_rmon_ranges; =20 - rmon_stats->undersize_pkts =3D mib->rx_undersize_errors; - rmon_stats->oversize_pkts =3D mib->rx_oversize_errors; - rmon_stats->fragments =3D mib->rx_alignment_errors; - /* rmon_stats->jabbers */ - - rmon_stats->hist[0] =3D mib->rx_64byte; - rmon_stats->hist[1] =3D mib->rx_65_127byte; - rmon_stats->hist[2] =3D mib->rx_128_255byte; - rmon_stats->hist[3] =3D mib->rx_256_511byte; - rmon_stats->hist[4] =3D mib->rx_512_1023byte; - rmon_stats->hist[5] =3D mib->rx_1024_1518byte; - rmon_stats->hist[6] =3D mib->rx_jumbo; - - rmon_stats->hist_tx[0] =3D mib->tx_64byte; - rmon_stats->hist_tx[1] =3D mib->tx_65_127byte; - rmon_stats->hist_tx[2] =3D mib->tx_128_255byte; - rmon_stats->hist_tx[3] =3D mib->tx_256_511byte; - rmon_stats->hist_tx[4] =3D mib->tx_512_1023byte; - rmon_stats->hist_tx[5] =3D mib->tx_1024_1518byte; - rmon_stats->hist_tx[6] =3D mib->tx_jumbo; + do { + start =3D u64_stats_fetch_begin(&pp->syncp); + + rmon_stats->undersize_pkts =3D u64_stats_read(&mib->rx_undersize_errors); + rmon_stats->oversize_pkts =3D u64_stats_read(&mib->rx_oversize_errors); + rmon_stats->fragments =3D u64_stats_read(&mib->rx_alignment_errors); + /* rmon_stats->jabbers */ + + rmon_stats->hist[0] =3D u64_stats_read(&mib->rx_64byte); + rmon_stats->hist[1] =3D u64_stats_read(&mib->rx_65_127byte); + rmon_stats->hist[2] =3D u64_stats_read(&mib->rx_128_255byte); + rmon_stats->hist[3] =3D u64_stats_read(&mib->rx_256_511byte); + rmon_stats->hist[4] =3D u64_stats_read(&mib->rx_512_1023byte); + rmon_stats->hist[5] =3D u64_stats_read(&mib->rx_1024_1518byte); + rmon_stats->hist[6] =3D u64_stats_read(&mib->rx_jumbo); + + rmon_stats->hist_tx[0] =3D u64_stats_read(&mib->tx_64byte); + rmon_stats->hist_tx[1] =3D u64_stats_read(&mib->tx_65_127byte); + rmon_stats->hist_tx[2] =3D u64_stats_read(&mib->tx_128_255byte); + rmon_stats->hist_tx[3] =3D u64_stats_read(&mib->tx_256_511byte); + rmon_stats->hist_tx[4] =3D u64_stats_read(&mib->tx_512_1023byte); + rmon_stats->hist_tx[5] =3D u64_stats_read(&mib->tx_1024_1518byte); + rmon_stats->hist_tx[6] =3D u64_stats_read(&mib->tx_jumbo); + } while (u64_stats_fetch_retry(&pp->syncp, start)); } =20 static void @@ -914,33 +948,41 @@ yt921x_dsa_get_stats64(struct dsa_switch *ds, int por= t, struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; + + do { + start =3D u64_stats_fetch_begin(&pp->syncp); + + stats->rx_length_errors =3D u64_stats_read(&mib->rx_undersize_errors) + + u64_stats_read(&mib->rx_fragment_errors); + stats->rx_over_errors =3D u64_stats_read(&mib->rx_oversize_errors); + stats->rx_crc_errors =3D u64_stats_read(&mib->rx_crc_errors); + stats->rx_frame_errors =3D u64_stats_read(&mib->rx_alignment_errors); + /* stats->rx_fifo_errors */ + /* stats->rx_missed_errors */ + + stats->tx_aborted_errors =3D u64_stats_read(&mib->tx_aborted_errors); + /* stats->tx_carrier_errors */ + stats->tx_fifo_errors =3D u64_stats_read(&mib->tx_undersize_errors); + /* stats->tx_heartbeat_errors */ + stats->tx_window_errors =3D u64_stats_read(&mib->tx_late_collisions); + + stats->rx_packets =3D u64_stats_read(&pp->rx_frames); + stats->tx_packets =3D u64_stats_read(&pp->tx_frames); + stats->rx_bytes =3D u64_stats_read(&mib->rx_good_bytes) - + ETH_FCS_LEN * stats->rx_packets; + stats->tx_bytes =3D u64_stats_read(&mib->tx_good_bytes) - + ETH_FCS_LEN * stats->tx_packets; + stats->rx_dropped =3D u64_stats_read(&mib->rx_dropped); + /* stats->tx_dropped */ + stats->multicast =3D u64_stats_read(&mib->rx_multicast); + stats->collisions =3D u64_stats_read(&mib->tx_collisions); + } while (u64_stats_fetch_retry(&pp->syncp, start)); =20 - stats->rx_length_errors =3D mib->rx_undersize_errors + - mib->rx_fragment_errors; - stats->rx_over_errors =3D mib->rx_oversize_errors; - stats->rx_crc_errors =3D mib->rx_crc_errors; - stats->rx_frame_errors =3D mib->rx_alignment_errors; - /* stats->rx_fifo_errors */ - /* stats->rx_missed_errors */ - - stats->tx_aborted_errors =3D mib->tx_aborted_errors; - /* stats->tx_carrier_errors */ - stats->tx_fifo_errors =3D mib->tx_undersize_errors; - /* stats->tx_heartbeat_errors */ - stats->tx_window_errors =3D mib->tx_late_collisions; - - stats->rx_packets =3D pp->rx_frames; - stats->tx_packets =3D pp->tx_frames; - stats->rx_bytes =3D mib->rx_good_bytes - ETH_FCS_LEN * stats->rx_packets; - stats->tx_bytes =3D mib->tx_good_bytes - ETH_FCS_LEN * stats->tx_packets; stats->rx_errors =3D stats->rx_length_errors + stats->rx_over_errors + stats->rx_crc_errors + stats->rx_frame_errors; stats->tx_errors =3D stats->tx_aborted_errors + stats->tx_fifo_errors + stats->tx_window_errors; - stats->rx_dropped =3D mib->rx_dropped; - /* stats->tx_dropped */ - stats->multicast =3D mib->rx_multicast; - stats->collisions =3D mib->tx_collisions; } =20 static void @@ -950,13 +992,18 @@ yt921x_dsa_get_pause_stats(struct dsa_switch *ds, int= port, struct yt921x_priv *priv =3D to_yt921x_priv(ds); struct yt921x_port *pp =3D &priv->ports[port]; struct yt921x_mib *mib =3D &pp->mib; + unsigned int start; =20 mutex_lock(&priv->reg_lock); yt921x_read_mib(priv, port); mutex_unlock(&priv->reg_lock); =20 - pause_stats->tx_pause_frames =3D mib->tx_pause; - pause_stats->rx_pause_frames =3D mib->rx_pause; + do { + start =3D u64_stats_fetch_begin(&pp->syncp); + + pause_stats->tx_pause_frames =3D u64_stats_read(&mib->tx_pause); + pause_stats->rx_pause_frames =3D u64_stats_read(&mib->rx_pause); + } while (u64_stats_fetch_retry(&pp->syncp, start)); } =20 static int @@ -3418,6 +3465,7 @@ static int yt921x_mdio_probe(struct mdio_device *mdio= dev) =20 pp->index =3D i; INIT_DELAYED_WORK(&pp->mib_read, yt921x_poll_mib); + u64_stats_init(&pp->syncp); } =20 ds =3D &priv->ds; diff --git a/drivers/net/dsa/yt921x.h b/drivers/net/dsa/yt921x.h index 3f129b8d403f..0f4231accf3e 100644 --- a/drivers/net/dsa/yt921x.h +++ b/drivers/net/dsa/yt921x.h @@ -6,6 +6,8 @@ #ifndef __YT921X_H #define __YT921X_H =20 +#include + #include =20 #define YT921X_SMI_SWITCHID_M GENMASK(3, 2) @@ -530,55 +532,61 @@ enum yt921x_fdb_entry_status { #define yt921x_port_is_external(port) (8 <=3D (port) && (port) < 9) =20 struct yt921x_mib { - u64 rx_broadcast; - u64 rx_pause; - u64 rx_multicast; - u64 rx_crc_errors; - - u64 rx_alignment_errors; - u64 rx_undersize_errors; - u64 rx_fragment_errors; - u64 rx_64byte; - - u64 rx_65_127byte; - u64 rx_128_255byte; - u64 rx_256_511byte; - u64 rx_512_1023byte; - - u64 rx_1024_1518byte; - u64 rx_jumbo; - u64 rx_good_bytes; - - u64 rx_bad_bytes; - u64 rx_oversize_errors; - - u64 rx_dropped; - u64 tx_broadcast; - u64 tx_pause; - u64 tx_multicast; - - u64 tx_undersize_errors; - u64 tx_64byte; - u64 tx_65_127byte; - u64 tx_128_255byte; - - u64 tx_256_511byte; - u64 tx_512_1023byte; - u64 tx_1024_1518byte; - u64 tx_jumbo; - - u64 tx_good_bytes; - u64 tx_collisions; - - u64 tx_aborted_errors; - u64 tx_multiple_collisions; - u64 tx_single_collisions; - u64 tx_good; - - u64 tx_deferred; - u64 tx_late_collisions; - u64 rx_oam; - u64 tx_oam; + union { + struct { + u64_stats_t rx_broadcast; + u64_stats_t rx_pause; + u64_stats_t rx_multicast; + u64_stats_t rx_crc_errors; + + u64_stats_t rx_alignment_errors; + u64_stats_t rx_undersize_errors; + u64_stats_t rx_fragment_errors; + u64_stats_t rx_64byte; + + u64_stats_t rx_65_127byte; + u64_stats_t rx_128_255byte; + u64_stats_t rx_256_511byte; + u64_stats_t rx_512_1023byte; + + u64_stats_t rx_1024_1518byte; + u64_stats_t rx_jumbo; + u64_stats_t rx_good_bytes; + + u64_stats_t rx_bad_bytes; + u64_stats_t rx_oversize_errors; + + u64_stats_t rx_dropped; + u64_stats_t tx_broadcast; + u64_stats_t tx_pause; + u64_stats_t tx_multicast; + + u64_stats_t tx_undersize_errors; + u64_stats_t tx_64byte; + u64_stats_t tx_65_127byte; + u64_stats_t tx_128_255byte; + + u64_stats_t tx_256_511byte; + u64_stats_t tx_512_1023byte; + u64_stats_t tx_1024_1518byte; + u64_stats_t tx_jumbo; + + u64_stats_t tx_good_bytes; + u64_stats_t tx_collisions; + + u64_stats_t tx_aborted_errors; + u64_stats_t tx_multiple_collisions; + u64_stats_t tx_single_collisions; + u64_stats_t tx_good; + + u64_stats_t tx_deferred; + u64_stats_t tx_late_collisions; + u64_stats_t rx_oam; + u64_stats_t tx_oam; + }; + + u64_stats_t stats[39]; + }; }; =20 struct yt921x_port { @@ -588,9 +596,13 @@ struct yt921x_port { bool isolated; =20 struct delayed_work mib_read; + struct u64_stats_sync syncp; struct yt921x_mib mib; - u64 rx_frames; - u64 tx_frames; + u64_stats_t rx_frames; + u64_stats_t tx_frames; + + /* only used by read routine to avoid huge allocations on the stack */ + struct yt921x_mib mib_new; }; =20 struct yt921x_reg_ops { --=20 2.51.0