• Jacob Keller's avatar
    ice: introduce ice_ptp_reset_cached_phctime function · b1a582e6
    Jacob Keller authored
    If the PTP hardware clock is adjusted, the ice driver must update the
    cached PHC timestamp. This is required in order to perform timestamp
    extension on the shorter timestamps captured by the PHY.
    
    Currently, we simply call ice_ptp_update_cached_phctime in the settime and
    adjtime callbacks. This has a few issues:
    
    1) if ICE_CFG_BUSY is set because another thread is updating the Rx rings,
       we will exit with an error. This is not checked, and the functions do
       not re-schedule the update. This could leave the cached timestamp
       incorrect until the next scheduled work item execution.
    
    2) even if we did handle an update, any currently outstanding Tx timestamp
       would be extended using the wrong cached PHC time. This would produce
       incorrect results.
    
    To fix these issues, introduce a new ice_ptp_reset_cached_phctime function.
    This function calls the ice_ptp_update_cached_phctime, and discards
    outstanding Tx timestamps.
    
    If the ice_ptp_update_cached_phctime function fails because ICE_CFG_BUSY is
    set, we log a warning and schedule the thread to execute soon. The update
    function is modified so that it always updates the cached copy in the PF
    regardless. This ensures we have the most up to date values possible and
    minimizes the risk of a packet timestamp being extended with the wrong
    value.
    
    It would be nice if we could skip reporting Rx timestamps until the cached
    values are up to date. However, we can't access the Rx rings while
    ICE_CFG_BUSY is set because they are actively being updated by another
    thread.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    b1a582e6
ice_ptp.c 74.5 KB