Message ID | 4AF7C1FD.8000302@gmail.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
From: Changli Gao <xiaosuo@gmail.com> Date: Mon, 09 Nov 2009 15:17:17 +0800 > check the return value of ndo_select_queue() > > Check the return value of ndo_select_queue(). If the value isn't smaller > than the real_num_tx_queues, print a warning message, and reset it to zero. > > Signed-off-by: Changli Gao <xiaosuo@gmail.com> Make it a WARN() so that it ends up in kerneloops.org -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Nov 9, 2009 at 3:26 PM, David Miller <davem@davemloft.net> wrote: > From: Changli Gao <xiaosuo@gmail.com> > Date: Mon, 09 Nov 2009 15:17:17 +0800 > >> check the return value of ndo_select_queue() >> >> Check the return value of ndo_select_queue(). If the value isn't smaller >> than the real_num_tx_queues, print a warning message, and reset it to zero. >> >> Signed-off-by: Changli Gao <xiaosuo@gmail.com> > > Make it a WARN() so that it ends up in kerneloops.org > Like this? WARN(1, "%s selects TX queue %d, " "but real number of TX queues is %d\n", dev->name, queue_index, dev->real_num_tx_queues);
From: Changli Gao <xiaosuo@gmail.com> Date: Mon, 9 Nov 2009 16:44:05 +0800 > On Mon, Nov 9, 2009 at 3:26 PM, David Miller <davem@davemloft.net> wrote: >> From: Changli Gao <xiaosuo@gmail.com> >> Date: Mon, 09 Nov 2009 15:17:17 +0800 >> >>> check the return value of ndo_select_queue() >>> >>> Check the return value of ndo_select_queue(). If the value isn't smaller >>> than the real_num_tx_queues, print a warning message, and reset it to zero. >>> >>> Signed-off-by: Changli Gao <xiaosuo@gmail.com> >> >> Make it a WARN() so that it ends up in kerneloops.org >> > Like this? > WARN(1, "%s selects TX queue %d, " > "but real number of TX queues is %d\n", > dev->name, queue_index, dev->real_num_tx_queues); Yes, something like that. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/dev.c b/net/core/dev.c index b8f74cf..edf5ea6 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1794,10 +1794,17 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev, const struct net_device_ops *ops = dev->netdev_ops; u16 queue_index = 0; - if (ops->ndo_select_queue) + if (ops->ndo_select_queue) { queue_index = ops->ndo_select_queue(dev, skb); - else if (dev->real_num_tx_queues > 1) + if (queue_index >= dev->real_num_tx_queues) { + printk(KERN_WARNING "%s selects TX queue %d, " + "but real number of TX queues is %d\n", + dev->name, queue_index, dev->real_num_tx_queues); + queue_index = 0; + } + } else if (dev->real_num_tx_queues > 1) { queue_index = skb_tx_hash(dev, skb); + } skb_set_queue_mapping(skb, queue_index); return netdev_get_tx_queue(dev, queue_index);
check the return value of ndo_select_queue() Check the return value of ndo_select_queue(). If the value isn't smaller than the real_num_tx_queues, print a warning message, and reset it to zero. Signed-off-by: Changli Gao <xiaosuo@gmail.com> ---- net/core/dev.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html