• Vladimir Oltean's avatar
    net: enetc: make enetc_refill_rx_ring update the consumer index · 7a5222cb
    Vladimir Oltean authored
    Since commit fd5736bf ("enetc: Workaround for MDIO register access
    issue"), enetc_refill_rx_ring no longer updates the RX BD ring's
    consumer index, that is left to be done by the caller. This has led to
    bugs such as the ones found in 96a5223b ("net: enetc: remove bogus
    write to SIRXIDR from enetc_setup_rxbdr") and 3a5d12c9 ("net: enetc:
    keep RX ring consumer index in sync with hardware"), so it is desirable
    that we move back the update of the consumer index into enetc_refill_rx_ring.
    
    The trouble with that is the different MDIO locking context for the two
    callers of enetc_refill_rx_ring:
    
    - enetc_clean_rx_ring runs under enetc_lock_mdio()
    - enetc_setup_rxbdr runs outside enetc_lock_mdio()
    
    Simplify the callers of enetc_refill_rx_ring by making enetc_setup_rxbdr
    explicitly take enetc_lock_mdio() around the call. It will be the only
    place in need of ensuring the hot accessors can be used.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7a5222cb
enetc.c 42.4 KB