diff options
author | 2018-04-25 10:41:08 +0200 | |
---|---|---|
committer | 2018-04-25 16:44:36 +0200 | |
commit | 4d31c6e41ed2f95f97a19766812797dabd82a5ee (patch) | |
tree | e1f81f4f0108ff86f85b8e17b025b21609aec7b2 /drivers/net/dsa/mv88e6xxx/hwtstamp.c | |
parent | ALSA: hda - Sanity check of access to SPDIF controls array (diff) | |
parent | ALSA: hda - Skip jack and others for non-existing PCM streams (diff) | |
download | linux-4d31c6e41ed2f95f97a19766812797dabd82a5ee.tar.gz linux-4d31c6e41ed2f95f97a19766812797dabd82a5ee.tar.bz2 linux-4d31c6e41ed2f95f97a19766812797dabd82a5ee.zip |
Merge branch 'for-linus' into for-next
Back-merge 4.17-rc3 fixes for further development.
This will bump the base to 4.17-rc2, too.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'drivers/net/dsa/mv88e6xxx/hwtstamp.c')
-rw-r--r-- | drivers/net/dsa/mv88e6xxx/hwtstamp.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/hwtstamp.c b/drivers/net/dsa/mv88e6xxx/hwtstamp.c index ac7694c71266..a036c490b7ce 100644 --- a/drivers/net/dsa/mv88e6xxx/hwtstamp.c +++ b/drivers/net/dsa/mv88e6xxx/hwtstamp.c @@ -285,10 +285,18 @@ static void mv88e6xxx_get_rxts(struct mv88e6xxx_chip *chip, struct sk_buff_head *rxq) { u16 buf[4] = { 0 }, status, seq_id; - u64 ns, timelo, timehi; struct skb_shared_hwtstamps *shwt; + struct sk_buff_head received; + u64 ns, timelo, timehi; + unsigned long flags; int err; + /* The latched timestamp belongs to one of the received frames. */ + __skb_queue_head_init(&received); + spin_lock_irqsave(&rxq->lock, flags); + skb_queue_splice_tail_init(rxq, &received); + spin_unlock_irqrestore(&rxq->lock, flags); + mutex_lock(&chip->reg_lock); err = mv88e6xxx_port_ptp_read(chip, ps->port_id, reg, buf, ARRAY_SIZE(buf)); @@ -311,7 +319,7 @@ static void mv88e6xxx_get_rxts(struct mv88e6xxx_chip *chip, /* Since the device can only handle one time stamp at a time, * we purge any extra frames from the queue. */ - for ( ; skb; skb = skb_dequeue(rxq)) { + for ( ; skb; skb = __skb_dequeue(&received)) { if (mv88e6xxx_ts_valid(status) && seq_match(skb, seq_id)) { ns = timehi << 16 | timelo; |