]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net: mscc: ocelot: don't rely on cached verify_status in ocelot_port_get_mm()
authorVladimir Oltean <vladimir.oltean@nxp.com>
Sat, 15 Apr 2023 17:05:48 +0000 (20:05 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 18 Apr 2023 02:01:18 +0000 (19:01 -0700)
ocelot_mm_update_port_status() updates mm->verify_status, but when the
verification state of a port changes, an IRQ isn't emitted, but rather,
only when the verification state reaches one of the final states (like
DISABLED, FAILED, SUCCEEDED) - things that would affect mm->tx_active,
which is what the IRQ *is* actually emitted for.

That is to say, user space may miss reports of an intermediary MAC Merge
verification state (like from INITIAL to VERIFYING), unless there was an
IRQ notifying the driver of the change in mm->tx_active as well.

This is not a huge deal, but for reliable reporting to user space, let's
call ocelot_mm_update_port_status() synchronously from
ocelot_port_get_mm(), which makes user space see the current MM status.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mscc/ocelot_mm.c

index ce6429d4681496db793a6c139d063562c3600758..3e458f72f645ed3d2c2ca3830daf0dbf7a191241 100644 (file)
@@ -205,6 +205,7 @@ int ocelot_port_get_mm(struct ocelot *ocelot, int port,
        state->tx_min_frag_size = ethtool_mm_frag_size_add_to_min(add_frag_size);
        state->rx_min_frag_size = ETH_ZLEN;
 
+       ocelot_mm_update_port_status(ocelot, port);
        state->verify_status = mm->verify_status;
        state->tx_active = mm->tx_active;