From: Sebastian Andrzej Siewior <[email protected]>
Date: Mon, 4 Feb 2019 11:20:29 +0100
> 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: cb646e2b02b2 ("ptp: Added a clock driver for the National
> Semiconductor PHYTER.")
> Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
> Reviewed-by: Kurt Kanzenbach <[email protected]>
> Acked-by: Richard Cochran <[email protected]>
Applied and queued up for -stable, thanks.