net: mscc: ocelot: be able to reuse a devlink_port after teardown
authorHoratiu Vultur <horatiu.vultur@microchip.com>
Thu, 19 Aug 2021 16:49:57 +0000 (19:49 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Aug 2021 13:36:42 +0000 (14:36 +0100)
There are cases where we would like to continue probing the switch even
if one port has failed to probe. When that happens, we need to
unregister a devlink_port of type DEVLINK_PORT_FLAVOUR_PHYSICAL and
re-register it of type DEVLINK_PORT_FLAVOUR_UNUSED.

This is fine, except when calling devlink_port_attrs_set on a structure
on which devlink_port_register has been previously called, there is a
WARN_ON in devlink_port_attrs_set that devlink_port->devlink must be
NULL.

So don't assume that the memory behind dlp is clean when calling
ocelot_port_devlink_init, just zero-initialize it.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mscc/ocelot_net.c

index 5e8965b..9044737 100644 (file)
@@ -164,6 +164,7 @@ int ocelot_port_devlink_init(struct ocelot *ocelot, int port,
        struct devlink *dl = ocelot->devlink;
        struct devlink_port_attrs attrs = {};
 
+       memset(dlp, 0, sizeof(*dlp));
        memcpy(attrs.switch_id.id, &ocelot->base_mac, id_len);
        attrs.switch_id.id_len = id_len;
        attrs.phys.port_number = port;