> 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.
The cases I found were net/core/netpoll.c, net/core/pktgen.c, and the software device case in net/core/dev.c. In all cases, the value of skb->queue_mapping will be zero, but they don't initialize the subqueue lock of the single allocated queue (hence panic when trying to use it...). I also don't think it makes sense for them to care, since ->enqueue() doesn't get called as far as I can tell, therefore the classification won't happen. Did I miss something in looking at this? Thanks, -PJ - 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