• Vladimir Oltean's avatar
    Revert "net: dsa: setup master before ports" · 762c2998
    Vladimir Oltean authored
    This reverts commit 11fd667d.
    
    dsa_slave_change_mtu() updates the MTU of the DSA master and of the
    associated CPU port, but only if it detects a change to the master MTU.
    
    The blamed commit in the Fixes: tag below addressed a regression where
    dsa_slave_change_mtu() would return early and not do anything due to
    ds->ops->port_change_mtu() not being implemented.
    
    However, that commit also had the effect that the master MTU got set up
    to the correct value by dsa_master_setup(), but the associated CPU port's
    MTU did not get updated. This causes breakage for drivers that rely on
    the ->port_change_mtu() DSA call to account for the tagging overhead on
    the CPU port, and don't set up the initial MTU during the setup phase.
    
    Things actually worked before because they were in a fragile equilibrium
    where dsa_slave_change_mtu() was called before dsa_master_setup() was.
    So dsa_slave_change_mtu() could actually detect a change and update the
    CPU port MTU too.
    
    Restore the code to the way things used to work by reverting the reorder
    of dsa_tree_setup_master() and dsa_tree_setup_ports(). That change did
    not have a concrete motivation going for it anyway, it just looked
    better.
    
    Fixes: 066dfc42 ("Revert "net: dsa: stop updating master MTU from master.c"")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    762c2998
dsa2.c 40.3 KB