All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
Subject: drivers/net/dsa/realtek/rtl8365mb_main.c:1323:2-16: opportunity for str_enable_disable(vlan_filtering)
Date: Sat, 08 Aug 2026 10:59:04 +0800	[thread overview]
Message-ID: <202608081003.E4JTINYL-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: "Alvin Šipraga" <alsi@bang-olufsen.dk>
CC: Jakub Kicinski <kuba@kernel.org>
CC: Linus Walleij <linusw@kernel.org>
CC: Mieczyslaw Nalewaj <namiltd@yahoo.com>
CC: Luiz Angelo Daros de Luca <luizluca@gmail.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   bcc44b6785f216eb939226ade6e3910baa30516b
commit: 9da2c8672f77108a1f09232320f22225ab53dde9 net: dsa: realtek: rtl8365mb: add VLAN support
date:   8 weeks ago
:::::: branch date: 4 hours ago
:::::: commit date: 8 weeks ago
config: arm64-randconfig-r062-20260808 (https://download.01.org/0day-ci/archive/20260808/202608081003.E4JTINYL-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 9da2c8672f77 ("net: dsa: realtek: rtl8365mb: add VLAN support")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202608081003.E4JTINYL-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/net/dsa/realtek/rtl8365mb_main.c:1323:2-16: opportunity for str_enable_disable(vlan_filtering)

vim +1323 drivers/net/dsa/realtek/rtl8365mb_main.c

9da2c8672f7710 Alvin Šipraga 2026-06-06  1309  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1310  static int rtl8365mb_port_vlan_filtering(struct dsa_switch *ds, int port,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1311  					 bool vlan_filtering,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1312  					 struct netlink_ext_ack *extack)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1313  {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1314  	enum rtl8365mb_frame_ingress accepted_frame, prev_accepted_frame;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1315  	enum rtl8365mb_vlan_egress_mode mode;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1316  	struct realtek_priv *priv = ds->priv;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1317  	u32 configured_ports = 0;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1318  	struct dsa_port *dp;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1319  	u16 pvid_vid;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1320  	int ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1321  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1322  	dev_dbg(priv->dev, "port %d: %s VLAN filtering\n", port,
9da2c8672f7710 Alvin Šipraga 2026-06-06 @1323  		vlan_filtering ? "enable" : "disable");
9da2c8672f7710 Alvin Šipraga 2026-06-06  1324  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1325  	ret = rtl8365mb_vlan_port_get_framefilter(priv, port,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1326  						  &prev_accepted_frame);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1327  	if (ret) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1328  		NL_SET_ERR_MSG_MOD(extack,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1329  				   "Failed to get current framefilter");
9da2c8672f7710 Alvin Šipraga 2026-06-06  1330  		return ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1331  	}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1332  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1333  	/* While filtering, only accepts untagged frames if PVID is enabled */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1334  	if (vlan_filtering) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1335  		ret = rtl8365mb_vlan_port_get_pvid(priv, port, &pvid_vid);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1336  		if (ret)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1337  			return ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1338  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1339  		if (pvid_vid)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1340  			accepted_frame = RTL8365MB_FRAME_TYPE_ANY_FRAME;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1341  		else
9da2c8672f7710 Alvin Šipraga 2026-06-06  1342  			accepted_frame = RTL8365MB_FRAME_TYPE_TAGGED_ONLY;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1343  	} else {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1344  		accepted_frame = RTL8365MB_FRAME_TYPE_ANY_FRAME;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1345  	}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1346  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1347  	/* When vlan filter is enable/disabled in a bridge, this function is
9da2c8672f7710 Alvin Šipraga 2026-06-06  1348  	 * called for all member ports. We need to enable/disable ingress
9da2c8672f7710 Alvin Šipraga 2026-06-06  1349  	 * VLAN membership check.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1350  	 */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1351  	ret = rtl8365mb_port_set_ingress_filtering(priv, port, vlan_filtering);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1352  	if (ret)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1353  		return ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1354  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1355  	/* However, we also enable/disable egress filtering because the switch
9da2c8672f7710 Alvin Šipraga 2026-06-06  1356  	 * still consider the egress interface VLAN membership to forward the
9da2c8672f7710 Alvin Šipraga 2026-06-06  1357  	 * traffic. We enable/disable that check disabling/enabling transparent
9da2c8672f7710 Alvin Šipraga 2026-06-06  1358  	 * VLAN between the ingress port and all other available ports.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1359  	 */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1360  	dsa_switch_for_each_available_port(dp, ds) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1361  		/* port isolation will still keep traffic inside the bridge */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1362  		ret = rtl8365mb_port_set_transparent(priv, port, dp->index,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1363  						     !vlan_filtering);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1364  		if (ret)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1365  			goto undo_transparent;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1366  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1367  		configured_ports |= BIT(dp->index);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1368  	}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1369  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1370  	if (accepted_frame != prev_accepted_frame) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1371  		ret = rtl8365mb_vlan_port_set_framefilter(priv, port,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1372  							  accepted_frame);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1373  		if (ret) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1374  			NL_SET_ERR_MSG_MOD(extack,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1375  					   "Failed to set port framefilter");
9da2c8672f7710 Alvin Šipraga 2026-06-06  1376  			goto undo_transparent;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1377  		}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1378  	}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1379  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1380  	/* When VLAN filtering is disabled, preserve frames exactly as received.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1381  	 * Otherwise, the VLAN egress pipeline may still alter tag state
9da2c8672f7710 Alvin Šipraga 2026-06-06  1382  	 * according to VLAN membership and untag configuration.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1383  	 */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1384  	if (vlan_filtering)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1385  		mode = RTL8365MB_VLAN_EGRESS_MODE_ORIGINAL;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1386  	else
9da2c8672f7710 Alvin Šipraga 2026-06-06  1387  		mode = RTL8365MB_VLAN_EGRESS_MODE_REAL_KEEP;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1388  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1389  	ret = rtl8365mb_port_set_vlan_egress_mode(priv, port, mode);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1390  	if (ret)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1391  		goto undo_set_framefilter;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1392  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1393  	return ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1394  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1395  undo_set_framefilter:
9da2c8672f7710 Alvin Šipraga 2026-06-06  1396  	if (prev_accepted_frame != accepted_frame)
9da2c8672f7710 Alvin Šipraga 2026-06-06  1397  		rtl8365mb_vlan_port_set_framefilter(priv, port,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1398  						    prev_accepted_frame);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1399  undo_transparent:
9da2c8672f7710 Alvin Šipraga 2026-06-06  1400  	/* The DSA core guarantees this callback is only invoked on an actual
9da2c8672f7710 Alvin Šipraga 2026-06-06  1401  	 * state transition, ensuring the previous hardware state was the
9da2c8672f7710 Alvin Šipraga 2026-06-06  1402  	 * opposite (!vlan_filtering). It is also called during setup but, in
9da2c8672f7710 Alvin Šipraga 2026-06-06  1403  	 * that case, any failure here aborts the entire switch initialization.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1404  	 *
9da2c8672f7710 Alvin Šipraga 2026-06-06  1405  	 * VLAN_INGRESS and VLAN_EGRESS_TRANSPARENT states are directly derived
9da2c8672f7710 Alvin Šipraga 2026-06-06  1406  	 * from vlan_filtering. That way, we can simply undo it without
9da2c8672f7710 Alvin Šipraga 2026-06-06  1407  	 * checking the current HW state as we do with VLAN_EGRESS_MODE.
9da2c8672f7710 Alvin Šipraga 2026-06-06  1408  	 */
9da2c8672f7710 Alvin Šipraga 2026-06-06  1409  	dsa_switch_for_each_port(dp, ds) {
9da2c8672f7710 Alvin Šipraga 2026-06-06  1410  		if (configured_ports & BIT(dp->index))
9da2c8672f7710 Alvin Šipraga 2026-06-06  1411  			rtl8365mb_port_set_transparent(priv, port, dp->index,
9da2c8672f7710 Alvin Šipraga 2026-06-06  1412  						       vlan_filtering);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1413  	}
9da2c8672f7710 Alvin Šipraga 2026-06-06  1414  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1415  	rtl8365mb_port_set_ingress_filtering(priv, port, !vlan_filtering);
9da2c8672f7710 Alvin Šipraga 2026-06-06  1416  
9da2c8672f7710 Alvin Šipraga 2026-06-06  1417  	return ret;
9da2c8672f7710 Alvin Šipraga 2026-06-06  1418  }
9da2c8672f7710 Alvin Šipraga 2026-06-06  1419  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2026-08-08  2:59 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202608081003.E4JTINYL-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=julia.lawall@inria.fr \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.