diff options
author | Vladimir Oltean <vladimir.oltean@nxp.com> | 2022-04-15 18:46:22 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-04-20 10:34:34 +0100 |
commit | 726816a129cbb1d645ed319a6f181f152f0dbda8 (patch) | |
tree | b59f4d26aa0d5b8c7c546d00553a7afd2ffe3e1b /kernel/watchdog_hld.c | |
parent | 8e9e678e4758b69b6231d3ad4d26d3381fdb5f3f (diff) |
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>
Diffstat (limited to 'kernel/watchdog_hld.c')
0 files changed, 0 insertions, 0 deletions