• Daniel Hua's avatar
    igb: Clear TXSTMP when ptp_tx_work() is timeout · 3a532852
    Daniel Hua authored
    Problem description:
    After ethernet cable connect and disconnect for several iterations on a
    device with i210, tx timestamp will stop being put into the socket.
    Steps to reproduce:
    1. Setup a device with i210 and wire it to a 802.1AS capable switch (
    Extreme Networks Summit x440 is used in our case)
    2. Have the gptp daemon running on the device and make sure it is synced
    with the switch
    3. Have the switch disable and enable the port, wait for the device gets
    resynced with the switch
    4. Iterates step 3 until the device is not albe to get resynced
    5. Review the log in dmesg and you will see warning message "igb : clearing
    Tx timestamp hang"
    Root cause:
    If ptp_tx_work() gets scheduled just before the port gets disabled, a LINK
    DOWN event will be processed before ptp_tx_work(), which may cause timeout
    in ptp_tx_work(). In the timeout logic, the TSYNCTXCTL's TXTT bit (Transmit
    timestamp valid bit) is not cleared, causing no new timestamp loaded to
    TXSTMP register. Consequently therefore, no new interrupt is triggerred by
    TSICR.TXTS bit and no more Tx timestamp send to the socket.
    Signed-off-by: default avatarDaniel Hua <daniel.hua@ni.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>