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 <richardcochran@gmail.com>