RE: [PATCH] NET: Multiqueue network device support.
From: Waskiewicz Jr, Peter P <hidden>
Date: 2007-06-11 18:05:33
PJ Waskiewicz wrote:quoted
diff --git a/net/sched/sch_generic.cb/net/sched/sch_generic.c indexquoted
f28bb2d..b9dc2a6 100644--- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c@@ -123,7 +123,8 @@ static inline int qdisc_restart(structnet_device *dev)quoted
/* 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)) {quoted
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