Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: avoid calling ds->ops->port_hsr_leave() when unoffloaded

This mirrors what we do in dsa_port_lag_leave() and
dsa_port_bridge_leave(): when ds->ops->port_hsr_join() returns
-EOPNOTSUPP, we fall back to a software implementation where dp->hsr_dev
is NULL, and the unoffloaded port is no longer bothered with calls from
the HSR layer.

This helps, for example, with interlink ports which current DSA drivers
don't know how to offload. We have to check only in port_hsr_join() for
the port type, then in port_hsr_leave() we are sure we're dealing only
with known port types.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/20251130131657.65080-4-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Vladimir Oltean and committed by
Jakub Kicinski
bed59a86 a0244e76

+3
+3
net/dsa/port.c
··· 1909 1909 struct dsa_switch *ds = dp->ds; 1910 1910 int err; 1911 1911 1912 + if (!dp->hsr_dev) 1913 + return; 1914 + 1912 1915 dp->hsr_dev = NULL; 1913 1916 1914 1917 if (ds->ops->port_hsr_leave) {