diff mbox series

[1/1] net: dsa: Fix type was not set for devlink port

Message ID 20210329153016.1940552-1-fido_max@inbox.ru
State New
Headers show
Series [1/1] net: dsa: Fix type was not set for devlink port | expand

Commit Message

Maxim Kochetkov March 29, 2021, 3:30 p.m. UTC
If PHY is not available on DSA port (described at devicetree but absent or
failed to detect) then kernel prints warning after 3700 secs:

[ 3707.948771] ------------[ cut here ]------------
[ 3707.948784] Type was not set for devlink port.
[ 3707.948894] WARNING: CPU: 1 PID: 17 at net/core/devlink.c:8097 0xc083f9d8

We should unregister the devlink port as a user port and
re-register it as an unused port before executing "continue" in case of
dsa_port_setup error.

Fixes: 86f8b1c01a0a ("net: dsa: Do not make user port errors fatal")
Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
---
 net/dsa/dsa2.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

Vladimir Oltean March 29, 2021, 4:25 p.m. UTC | #1
On Mon, Mar 29, 2021 at 06:30:16PM +0300, Maxim Kochetkov wrote:
> If PHY is not available on DSA port (described at devicetree but absent or
> failed to detect) then kernel prints warning after 3700 secs:
> 
> [ 3707.948771] ------------[ cut here ]------------
> [ 3707.948784] Type was not set for devlink port.
> [ 3707.948894] WARNING: CPU: 1 PID: 17 at net/core/devlink.c:8097 0xc083f9d8
> 
> We should unregister the devlink port as a user port and
> re-register it as an unused port before executing "continue" in case of
> dsa_port_setup error.
> 
> Fixes: 86f8b1c01a0a ("net: dsa: Do not make user port errors fatal")
> Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
> ---

Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Florian Fainelli March 29, 2021, 4:56 p.m. UTC | #2
On 3/29/21 9:50 AM, Andrew Lunn wrote:
> On Mon, Mar 29, 2021 at 06:30:16PM +0300, Maxim Kochetkov wrote:
>> If PHY is not available on DSA port (described at devicetree but absent or
>> failed to detect) then kernel prints warning after 3700 secs:
>>
>> [ 3707.948771] ------------[ cut here ]------------
>> [ 3707.948784] Type was not set for devlink port.
>> [ 3707.948894] WARNING: CPU: 1 PID: 17 at net/core/devlink.c:8097 0xc083f9d8
>>
>> We should unregister the devlink port as a user port and
>> re-register it as an unused port before executing "continue" in case of
>> dsa_port_setup error.
>>
>> Fixes: 86f8b1c01a0a ("net: dsa: Do not make user port errors fatal")
> 
> This commit says:
> 
>     Prior to 1d27732f411d ("net: dsa: setup and teardown ports"), we would
>     not treat failures to set-up an user port as fatal, but after this
>     commit we would, which is a regression for some systems where interfaces
>     may be declared in the Device Tree, but the underlying hardware may not
>     be present (pluggable daughter cards for instance).
> 
> Florian
> 
> Are these daughter cards hot pluggable? So we expect them to appear
> and the port is then usable? Or is a reboot required?

The systems need to be powered off cards replaced and then powered back
on so no true hot-pluggable scheme but cold-pluggable definitively.
diff mbox series

Patch

diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index d142eb2b288b..3c3e56a1f34d 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -795,8 +795,14 @@  static int dsa_tree_setup_switches(struct dsa_switch_tree *dst)
 
 	list_for_each_entry(dp, &dst->ports, list) {
 		err = dsa_port_setup(dp);
-		if (err)
+		if (err) {
+			dsa_port_devlink_teardown(dp);
+			dp->type = DSA_PORT_TYPE_UNUSED;
+			err = dsa_port_devlink_setup(dp);
+			if (err)
+				goto teardown;
 			continue;
+		}
 	}
 
 	return 0;