aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2012-07-19 22:28:47 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-20 14:06:59 -0400
commitd40156aa5ecbd51fed932ed4813df82b56e5ff4d (patch)
tree34b9d6b16ab469bde1998a20c9b26b9388578bd9
parentee6ae1a1d58c70fc864bc777a36be56b0880ebff (diff)
rtnl: allow to specify different num for rx and tx queue count
Also cut out unused function parameters and possible err in return value. Signed-off-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/bonding/bond_main.c14
-rw-r--r--include/net/rtnetlink.h10
-rw-r--r--net/core/rtnetlink.c16
3 files changed, 22 insertions, 18 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 3960b1b26178..f41ddc2d48be 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4845,17 +4845,19 @@ static int bond_validate(struct nlattr *tb[], struct nlattr *data[])
4845 return 0; 4845 return 0;
4846} 4846}
4847 4847
4848static int bond_get_tx_queues(struct net *net, struct nlattr *tb[]) 4848static unsigned int bond_get_num_tx_queues(void)
4849{ 4849{
4850 return tx_queues; 4850 return tx_queues;
4851} 4851}
4852 4852
4853static struct rtnl_link_ops bond_link_ops __read_mostly = { 4853static struct rtnl_link_ops bond_link_ops __read_mostly = {
4854 .kind = "bond", 4854 .kind = "bond",
4855 .priv_size = sizeof(struct bonding), 4855 .priv_size = sizeof(struct bonding),
4856 .setup = bond_setup, 4856 .setup = bond_setup,
4857 .validate = bond_validate, 4857 .validate = bond_validate,
4858 .get_tx_queues = bond_get_tx_queues, 4858 .get_num_tx_queues = bond_get_num_tx_queues,
4859 .get_num_rx_queues = bond_get_num_tx_queues, /* Use the same number
4860 as for TX queues */
4859}; 4861};
4860 4862
4861/* Create a new bond based on the specified name and bonding parameters. 4863/* Create a new bond based on the specified name and bonding parameters.
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index bbcfd0993432..6b00c4fc4291 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -44,8 +44,10 @@ static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
44 * @get_xstats_size: Function to calculate required room for dumping device 44 * @get_xstats_size: Function to calculate required room for dumping device
45 * specific statistics 45 * specific statistics
46 * @fill_xstats: Function to dump device specific statistics 46 * @fill_xstats: Function to dump device specific statistics
47 * @get_tx_queues: Function to determine number of transmit queues to create when 47 * @get_num_tx_queues: Function to determine number of transmit queues
48 * creating a new device. 48 * to create when creating a new device.
49 * @get_num_rx_queues: Function to determine number of receive queues
50 * to create when creating a new device.
49 */ 51 */
50struct rtnl_link_ops { 52struct rtnl_link_ops {
51 struct list_head list; 53 struct list_head list;
@@ -77,8 +79,8 @@ struct rtnl_link_ops {
77 size_t (*get_xstats_size)(const struct net_device *dev); 79 size_t (*get_xstats_size)(const struct net_device *dev);
78 int (*fill_xstats)(struct sk_buff *skb, 80 int (*fill_xstats)(struct sk_buff *skb,
79 const struct net_device *dev); 81 const struct net_device *dev);
80 int (*get_tx_queues)(struct net *net, 82 unsigned int (*get_num_tx_queues)(void);
81 struct nlattr *tb[]); 83 unsigned int (*get_num_rx_queues)(void);
82}; 84};
83 85
84extern int __rtnl_link_register(struct rtnl_link_ops *ops); 86extern int __rtnl_link_register(struct rtnl_link_ops *ops);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 045db8ad87c8..db5a8ad8a79b 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1624,17 +1624,17 @@ struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
1624{ 1624{
1625 int err; 1625 int err;
1626 struct net_device *dev; 1626 struct net_device *dev;
1627 unsigned int num_queues = 1; 1627 unsigned int num_tx_queues = 1;
1628 unsigned int num_rx_queues = 1;
1628 1629
1629 if (ops->get_tx_queues) { 1630 if (ops->get_num_tx_queues)
1630 err = ops->get_tx_queues(src_net, tb); 1631 num_tx_queues = ops->get_num_tx_queues();
1631 if (err < 0) 1632 if (ops->get_num_rx_queues)
1632 goto err; 1633 num_rx_queues = ops->get_num_rx_queues();
1633 num_queues = err;
1634 }
1635 1634
1636 err = -ENOMEM; 1635 err = -ENOMEM;
1637 dev = alloc_netdev_mq(ops->priv_size, ifname, ops->setup, num_queues); 1636 dev = alloc_netdev_mqs(ops->priv_size, ifname, ops->setup,
1637 num_tx_queues, num_rx_queues);
1638 if (!dev) 1638 if (!dev)
1639 goto err; 1639 goto err;
1640 1640