]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: make cross-chip notifiers more efficient for host events
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 15 Apr 2022 15:46:22 +0000 (18:46 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Apr 2022 09:34:34 +0000 (10:34 +0100)
commit726816a129cbb1d645ed319a6f181f152f0dbda8
treeb59f4d26aa0d5b8c7c546d00553a7afd2ffe3e1b
parent8e9e678e4758b69b6231d3ad4d26d3381fdb5f3f
net: dsa: make cross-chip notifiers more efficient for host events

To determine whether a given port should react to the port targeted by
the notifier, dsa_port_host_vlan_match() and dsa_port_host_address_match()
look at the positioning of the switch port currently executing the
notifier relative to the switch port for which the notifier was emitted.

To maintain stylistic compatibility with the other match functions from
switch.c, the host address and host VLAN match functions take the
notifier information about targeted port, switch and tree indices as
argument. However, these functions only use that information to retrieve
the struct dsa_port *targeted_dp, which is an invariant for the outer
loop that calls them. So it makes more sense to calculate the targeted
dp only once, and pass it to them as argument.

But furthermore, the targeted dp is actually known at the time the call
to dsa_port_notify() is made. It is just that we decide to only save the
indices of the port, switch and tree in the notifier structure, just to
retrace our steps and find the dp again using dsa_switch_find() and
dsa_to_port().

But both the above functions are relatively expensive, since they need
to iterate through lists. It appears more straightforward to make all
notifiers just pass the targeted dp inside their info structure, and
have the code that needs the indices to look at info->dp->index instead
of info->port, or info->dp->ds->index instead of info->sw_index, or
info->dp->ds->dst->index instead of info->tree_index.

For the sake of consistency, all cross-chip notifiers are converted to
pass the "dp" directly.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa_priv.h
net/dsa/port.c
net/dsa/switch.c
net/dsa/tag_8021q.c