Skip to content
  • Ariel Levkovich's avatar
    net/mlx5: Adjust clock overflow work period · 33180bee
    Ariel Levkovich authored
    When driver converts HW timestamp to wall clock time it subtracts
    the last saved cycle counter from the HW timestamp and converts the
    difference to nanoseconds.
    The conversion is done by multiplying the cycles difference with the
    clock multiplier value as a first step and therefore the cycles
    difference should be small enough so that the multiplication product
    doesn't exceed 64bit.
    
    The overflow handling routine is in charge of updating the last saved
    cycle counter in driver and it is called periodically using kernel
    delayed workqueue.
    
    The delay period for this work is calculated using the max HW cycle
    counter value (a 41 bit mask) as a base which doesn't take the 64bit
    limit into account so the delay period may be incorrect and too
    long to prevent a large difference between the HW counter and the last
    saved counter in SW.
    
    This change adjusts the work period for the HW clock overflow work by
    taking the minimum between the previous value and the quotient of max
    u64 value and the clock multiplier value.
    
    Fixes: ef9814de
    
     ("net/mlx5e: Add HW timestamping (TS) support")
    Signed-off-by: default avatarAriel Levkovich <lariel@mellanox.com>
    Reviewed-by: default avatarEran Ben Elisha <eranbe@mellanox.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    33180bee