• Claudiu Manoil's avatar
    enetc: Factor out the traffic start/stop procedures · bbb96dc7
    Claudiu Manoil authored
    A reliable traffic pause (and reconfiguration) procedure
    is needed to be able to safely make h/w configuration
    changes during run-time, like changing the mode in which the
    interrupts are operating (i.e. with or without coalescing),
    as opposed to making on-the-fly register updates that
    may be subject to h/w or s/w concurrency issues.
    To this end, the code responsible of the run-time device
    configurations that basically starts resp. stops the traffic
    flow through the device has been extracted from the
    the enetc_open/_close procedures, to the separate standalone
    enetc_start/_stop procedures. Traffic stop should be as
    graceful as possible, it lets the executing napi threads to
    to finish while the interrupts stay disabled.  But since
    the napi thread will try to re-enable interrupts by clearing
    the device's unmask register, the enable_irq/ disable_irq
    API has been used to avoid this potential concurrency issue
    and make the traffic pause procedure more reliable.
    Signed-off-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    bbb96dc7
enetc.c 43.6 KB