|
@@ -846,6 +846,11 @@ static void decode_rxts(struct dp83640_private *dp83640,
|
|
|
struct skb_shared_hwtstamps *shhwtstamps = NULL;
|
|
|
struct sk_buff *skb;
|
|
|
unsigned long flags;
|
|
|
+ u8 overflow;
|
|
|
+
|
|
|
+ overflow = (phy_rxts->ns_hi >> 14) & 0x3;
|
|
|
+ if (overflow)
|
|
|
+ pr_debug("rx timestamp queue overflow, count %d\n", overflow);
|
|
|
|
|
|
spin_lock_irqsave(&dp83640->rx_lock, flags);
|
|
|
|
|
@@ -888,6 +893,7 @@ static void decode_txts(struct dp83640_private *dp83640,
|
|
|
struct skb_shared_hwtstamps shhwtstamps;
|
|
|
struct sk_buff *skb;
|
|
|
u64 ns;
|
|
|
+ u8 overflow;
|
|
|
|
|
|
/* We must already have the skb that triggered this. */
|
|
|
|
|
@@ -897,6 +903,17 @@ static void decode_txts(struct dp83640_private *dp83640,
|
|
|
pr_debug("have timestamp but tx_queue empty\n");
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ overflow = (phy_txts->ns_hi >> 14) & 0x3;
|
|
|
+ if (overflow) {
|
|
|
+ pr_debug("tx timestamp queue overflow, count %d\n", overflow);
|
|
|
+ while (skb) {
|
|
|
+ skb_complete_tx_timestamp(skb, NULL);
|
|
|
+ skb = skb_dequeue(&dp83640->tx_queue);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
ns = phy2txts(phy_txts);
|
|
|
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
|
|
|
shhwtstamps.hwtstamp = ns_to_ktime(ns);
|