• Vladimir Oltean's avatar
    net: dsa: remove the "dsa_to_port in a loop" antipattern from the core · d0004a02
    Vladimir Oltean authored
    Ever since Vivien's conversion of the ds->ports array into a dst->ports
    list, and the introduction of dsa_to_port, iterations through the ports
    of a switch became quadratic whenever dsa_to_port was needed.
    
    dsa_to_port can either be called directly, or indirectly through the
    dsa_is_{user,cpu,dsa,unused}_port helpers.
    
    Use the newly introduced dsa_switch_for_each_port() iteration macro
    that works with the iterator variable being a struct dsa_port *dp
    directly, and not an int i. It is an expensive variable to go from i to
    dp, but cheap to go from dp to i.
    
    This macro iterates through the entire ds->dst->ports list and filters
    by the ports belonging just to the switch provided as argument.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d0004a02
dsa.c 11.6 KB