net: dsa: remove the "dsa_to_port in a loop" antipattern from the core
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:Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by:
Florian Fainelli <f.fainelli@gmail.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/net/dsa.h 3 additions, 4 deletionsinclude/net/dsa.h
- net/dsa/dsa.c 11 additions, 11 deletionsnet/dsa/dsa.c
- net/dsa/dsa2.c 6 additions, 7 deletionsnet/dsa/dsa2.c
- net/dsa/port.c 7 additions, 10 deletionsnet/dsa/port.c
- net/dsa/slave.c 1 addition, 1 deletionnet/dsa/slave.c
- net/dsa/switch.c 17 additions, 23 deletionsnet/dsa/switch.c
Loading
Please register or sign in to comment