> PJ Waskiewicz wrote: > > diff --git a/net/sched/sch_generic.c > b/net/sched/sch_generic.c index > > f28bb2d..b9dc2a6 100644 > > --- a/net/sched/sch_generic.c > > +++ b/net/sched/sch_generic.c > > @@ -123,7 +123,8 @@ static inline int qdisc_restart(struct > net_device *dev) > > /* And release queue */ > > spin_unlock(&dev->queue_lock); > > > > - if (!netif_queue_stopped(dev)) { > > + if (!netif_queue_stopped(dev) && > > + !netif_subqueue_stopped(dev, > skb->queue_mapping)) { > > int ret; > > > > ret = dev_hard_start_xmit(skb, dev); > > > Your patch doesn't update any other users of netif_queue_stopped(). > The assumption that they can pass packets to the driver when > the queue is running is no longer valid since they don't know > whether the subqueue the packet will end up in is active (it > might be different from queue 0 if packets were redirected > from a multiqueue aware qdisc through TC actions). So they > need to be changed to check the subqueue state as well.
I will look at all these cases and change them accordingly. Thanks for catching that. > BTW, I couldn't find anything but a single > netif_wake_subqueue in your (old) e1000 patch. Why doesn't it > stop subqueues? A previous e1000 patch stopped subqueues. The last e1000 patch I sent to the list doesn't stop them, and that's a problem with that patch; it was sent purely to show how the alloc_etherdev_mq() stuff worked, but I missed the subqueue control. I can fix that and send an updated patch if you'd like. The reason I missed it is we maintain an out-of-tree driver and an in-tree driver, and mixing/matching code between the two becomes a bit of a juggling act sometimes when doing little engineering snippits. Thanks for reviewing these. I'll repost something with updates from your feedback. Cheers, -PJ Waskiewicz - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html