Hello Paolo, On 1/9/20 1:51 PM, Paolo Abeni wrote: > On Wed, 2020-01-08 at 15:55 +0100, Ahmad Fatoum wrote: >> I've run into an issue of CAN frames being sent out-of-order on an i.MX6 Dual >> with Linux v5.5-rc5. Bisecting has lead me down to this commit: > > Thank you for the report. Thanks for the prompt patch. :-) > The code is only build-tested, could you please try it in your setup? Issue still persists, albeit appears to have become much less frequent. Took 2 million frames till first two were swapped. What I usually saw was a swap every few thousand frames at least and quite often more frequent than that. Might just be noise though. Thanks Ahmad > > Thanks, > > Paolo > --- > diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h > index fceddf89592a..df460fe0773a 100644 > --- a/include/net/sch_generic.h > +++ b/include/net/sch_generic.h > @@ -158,7 +158,6 @@ static inline bool qdisc_run_begin(struct Qdisc *qdisc) > if (qdisc->flags & TCQ_F_NOLOCK) { > if (!spin_trylock(&qdisc->seqlock)) > return false; > - WRITE_ONCE(qdisc->empty, false); > } else if (qdisc_is_running(qdisc)) { > return false; > } > diff --git a/net/core/dev.c b/net/core/dev.c > index 0ad39c87b7fd..3c46575a5af5 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -3625,6 +3625,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, > qdisc_run_end(q); > } else { > rc = q->enqueue(skb, q, &to_free) & NET_XMIT_MASK; > + if (rc != NET_XMIT_DROP && READ_ONCE(q->empty)) > + WRITE_ONCE(q->empty, false); > qdisc_run(q); > } > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |