On Wed, 2017-04-19 at 12:31 +0200, Richard Cochran wrote: > Can we please fix this in another way? There is no need to hold the > spin lock during the callback into the networking stack. Instead, > how about the following diff, which also fixes the other call site... I agree that this is a better way to fix it - I think that this was the purpose of the patch that got halfway mixed in. @@ -874,14 +874,15 @@ static void decode_rxts(struct dp83640_private > *dp83640, > shhwtstamps = skb_hwtstamps(skb); > memset(shhwtstamps, 0, > sizeof(*shhwtstamps)); > shhwtstamps->hwtstamp = ns_to_ktime(rxts- > >ns); > - netif_rx_ni(skb); > list_add(&rxts->list, &dp83640->rxpool); > break; > } > } > spin_unlock(&dp83640->rx_queue.lock); > > - if (!shhwtstamps) > + if (shhwtstamps) > + netif_rx_ni(skb); > + else > list_add_tail(&rxts->list, &dp83640->rxts); > out: > spin_unlock_irqrestore(&dp83640->rx_lock, flags); Here we still hold rx_lock while during the callback, wouldn't it be beneficial to release that first? Stefan ��.n��������+%������w��{.n����z�ޗ�����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�