Skip to content
  • Sebastian Andrzej Siewior's avatar
    net: dp83640: expire old TX-skb · 53bc8d2a
    Sebastian Andrzej Siewior authored
    During sendmsg() a cloned skb is saved via dp83640_txtstamp() in
    ->tx_queue. After the NIC sends this packet, the PHY will reply with a
    timestamp for that TX packet. If the cable is pulled at the right time I
    don't see that packet. It might gets flushed as part of queue shutdown
    on NIC's side.
    Once the link is up again then after the next sendmsg() we enqueue
    another skb in dp83640_txtstamp() and have two on the list. Then the PHY
    will send a reply and decode_txts() attaches it to the first skb on the
    list.
    No crash occurs since refcounting works but we are one packet behind.
    linuxptp/ptp4l usually closes the socket and opens a new one (in such a
    timeout case) so those "stale" replies never get there. However it does
    not resume normal operation anymore.
    
    Purge old skbs in decode_txts().
    
    Fixes: cb646e2b
    
     ("ptp: Added a clock driver for the National Semiconductor PHYTER.")
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: default avatarKurt Kanzenbach <kurt@linutronix.de>
    Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    53bc8d2a