On Fri, Jul 10, 2020 at 01:36:07PM +0200, Kurt Kanzenbach wrote:
> +static void hellcreek_get_rxts(struct hellcreek *hellcreek,
> +                            struct hellcreek_port_hwtstamp *ps,
> +                            struct sk_buff *skb, struct sk_buff_head *rxq,
> +                            int port)
> +{
> +     struct skb_shared_hwtstamps *shwt;
> +     struct sk_buff_head received;
> +     unsigned long flags;
> +
> +     /* The latched timestamp belongs to one of the received frames. */
> +     __skb_queue_head_init(&received);
> +
> +     /* Lock & disable interrupts */
> +     spin_lock_irqsave(&rxq->lock, flags);
> +
> +     /* Add the reception queue "rxq" to the "received" queue an reintialize
> +      * "rxq".  From now on, we deal with "received" not with "rxq"
> +      */
> +     skb_queue_splice_tail_init(rxq, &received);
> +
> +     spin_unlock_irqrestore(&rxq->lock, flags);
> +
> +     for (; skb; skb = __skb_dequeue(&received)) {
> +             unsigned int type;
> +             u8 *hdr;
> +             u64 ns;
> +
> +             /* Get nanoseconds from ptp packet */
> +             type = SKB_PTP_TYPE(skb);
> +             hdr  = parse_ptp_header(skb, type);
> +             ns   = hellcreek_get_reserved_field(hdr);

You might consider clearing the reserved field at this point.  Some
user space SW might consider non-zero reserved fields as corrupt!

(The LinuxPTP stack doesn't do this, but still maybe others are more
pedantic.)


Acked-by: Richard Cochran <richardcoch...@gmail.com>

Reply via email to