* drivers/net/dsa/realtek/rtl8365mb_main.c:1323:2-16: opportunity for str_enable_disable(vlan_filtering)
@ 2026-08-08 2:59 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-08-08 2:59 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Julia Lawall
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-08 2:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-08 2:59 drivers/net/dsa/realtek/rtl8365mb_main.c:1323:2-16: opportunity for str_enable_disable(vlan_filtering) kernel test robot
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.