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 <[email protected]>