aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2009-09-02 21:03:00 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-02 21:03:00 -0400
commit2e59af3dcbdf11635c03f22bfc9706744465d589 (patch)
treec01e87c0ef6568bae987f4628a8656ba0d05aa23 /net/core
parent5848cc096a23b80b3d15c27d72299f79caf7c517 (diff)
vlan: multiqueue vlan device
vlan devices are currently not multi-queue capable. We can do that with a new rtnl_link_ops method, get_tx_queues(), called from rtnl_create_link() This new method gets num_tx_queues/real_num_tx_queues from real device. register_vlan_device() is also handled. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/rtnetlink.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index b44775f9f2bf..bbcba2a41018 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -974,12 +974,20 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname,
974{ 974{
975 int err; 975 int err;
976 struct net_device *dev; 976 struct net_device *dev;
977 unsigned int num_queues = 1;
978 unsigned int real_num_queues = 1;
977 979
980 if (ops->get_tx_queues) {
981 err = ops->get_tx_queues(net, tb, &num_queues, &real_num_queues);
982 if (err)
983 goto err;
984 }
978 err = -ENOMEM; 985 err = -ENOMEM;
979 dev = alloc_netdev(ops->priv_size, ifname, ops->setup); 986 dev = alloc_netdev_mq(ops->priv_size, ifname, ops->setup, num_queues);
980 if (!dev) 987 if (!dev)
981 goto err; 988 goto err;
982 989
990 dev->real_num_tx_queues = real_num_queues;
983 if (strchr(dev->name, '%')) { 991 if (strchr(dev->name, '%')) {
984 err = dev_alloc_name(dev, dev->name); 992 err = dev_alloc_name(dev, dev->name);
985 if (err < 0) 993 if (err < 0)