• Vladimir Oltean's avatar
    net: dsa: sja1105: block FDB accesses that are concurrent with a switch reset · 86899e9e
    Vladimir Oltean authored
    Currently, when we add the first sja1105 port to a bridge with
    vlan_filtering 1, then we sometimes see this output:
    
    sja1105 spi2.2: port 4 failed to read back entry for be:79:b4:9e:9e:96 vid 3088: -ENOENT
    sja1105 spi2.2: Reset switch and programmed static config. Reason: VLAN filtering
    sja1105 spi2.2: port 0 failed to add be:79:b4:9e:9e:96 vid 0 to fdb: -2
    
    It is because sja1105_fdb_add() runs from the dsa_owq which is no longer
    serialized with switch resets since it dropped the rtnl_lock() in the
    blamed commit.
    
    Either performing the FDB accesses before the reset, or after the reset,
    is equally fine, because sja1105_static_fdb_change() backs up those
    changes in the static config, but FDB access during reset isn't ok.
    
    Make sja1105_static_config_reload() take the fdb_lock to fix that.
    
    Fixes: 0faf890f ("net: dsa: drop rtnl_lock from dsa_slave_switchdev_event_work")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    86899e9e
sja1105_main.c 97.1 KB