• Ben Hutchings's avatar
    sfc: Fix timekeeping in efx_mcdi_poll() · ebf98e79
    Ben Hutchings authored
    efx_mcdi_poll() uses get_seconds() to read the current time and to
    implement a polling timeout.  The use of this function was chosen
    partly because it could easily be replaced in a co-sim environment
    with a macro that read the simulated time.
    
    Unfortunately the real get_seconds() returns the system time (real
    time) which is subject to adjustment by e.g. ntpd.  If the system time
    is adjusted forward during a polled MCDI operation, the effective
    timeout can be shorter than the intended 10 seconds, resulting in a
    spurious failure.  It is also possible for a backward adjustment to
    delay detection of a areal failure.
    
    Use jiffies instead, and change MCDI_RPC_TIMEOUT to be denominated in
    jiffies.  Also correct rounding of the timeout: check time > finish
    (or rather time_after(time, finish)) and not time >= finish.
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    ebf98e79
mcdi.c 31.8 KB