From: Pankaj Gupta <pagupta@redhat.com>
To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Cc: davem@davemloft.net, jasowang@redhat.com, mst@redhat.com,
dgibson@redhat.com, vfalico@gmail.com, edumazet@google.com,
vyasevic@redhat.com, hkchu@google.com,
wuzhy@linux.vnet.ibm.com.pnq.redhat.com, xemul@parallels.com,
therbert@google.com, bhutchings@solarflare.com, xii@google.com,
stephen@networkplumber.org, jiri@resnulli.us,
sergei.shtylyov@cogentembedded.com,
Pankaj Gupta <pagupta@redhat.com>
Subject: [PATCH net-next 2/4] tuntap: Accept tuntap maximum number of queues as sysctl
Date: Tue, 18 Nov 2014 21:52:56 +0530 [thread overview]
Message-ID: <1416327778-17716-3-git-send-email-pagupta@redhat.com> (raw)
In-Reply-To: <1416327778-17716-1-git-send-email-pagupta@redhat.com>
This patch accepts maximum number of tun/tap queues allocated as
sysctl entry which a user space application like libvirt
can make use of to limit maximum number of tuntap queues.
Value of sysctl entry is writable dynamically.
If no value is set for sysctl entry 'net.tuntap.max_queues'
a default value 256 is used which is equal to maximum number
of vCPUS allowed by KVM.
Signed-off-by: Pankaj Gupta <pagupta@redhat.com>
---
drivers/net/tun.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e3fa65a..b03a745 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -71,6 +71,7 @@
#include <net/rtnetlink.h>
#include <net/sock.h>
#include <linux/seq_file.h>
+#include <linux/sysctl.h>
#include <linux/uio.h>
#include <asm/uaccess.h>
@@ -117,10 +118,16 @@ struct tap_filter {
* the netdevice to be fit in one page. So we can make sure the success of
* memory allocation. TODO: increase the limit. */
#define MAX_TAP_QUEUES DEFAULT_MAX_NUM_RSS_QUEUES
+#define MIN_TAP_QUEUES 1
#define MAX_TAP_FLOWS 4096
#define TUN_FLOW_EXPIRE (3 * HZ)
+static struct ctl_table_header *tun_sysctl_header;
+static int tun_queues = MAX_TAP_QUEUES;
+static int min_queues = MIN_TAP_QUEUES;
+static int max_queues = MAX_TAP_QUEUES;
+
/* A tun_file connects an open character device to a tuntap netdevice. It
* also contains all socket related structures (except sock_fprog and tap_filter)
* to serve as one transmit queue for tuntap device. The sock_fprog and
@@ -197,6 +204,19 @@ struct tun_struct {
u32 flow_count;
};
+static struct ctl_table tun_ctl_table[] = {
+ {
+ .procname = "tun_max_queues",
+ .data = &tun_queues,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &min_queues,
+ .extra2 = &max_queues
+ },
+ { }
+};
+
static inline u32 tun_hashfn(u32 rxhash)
{
return rxhash & 0x3ff;
@@ -547,7 +567,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte
err = -E2BIG;
if (!tfile->detached &&
- tun->numqueues + tun->numdisabled == MAX_TAP_QUEUES)
+ tun->numqueues + tun->numdisabled == tun_queues)
goto out;
err = 0;
@@ -1624,7 +1644,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
char *name;
unsigned long flags = 0;
int queues = ifr->ifr_flags & IFF_MULTI_QUEUE ?
- MAX_TAP_QUEUES : 1;
+ tun_queues : 1;
if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
return -EPERM;
@@ -2335,6 +2355,13 @@ static int __init tun_init(void)
pr_info("%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
pr_info("%s\n", DRV_COPYRIGHT);
+ tun_sysctl_header = register_net_sysctl(&init_net, "net/tuntap",
+ tun_ctl_table);
+
+ if (!tun_sysctl_header)
+ pr_err("Can't register tun_ctl_table. Tun device queue"
+ "setting to default value : %d queues.\n", tun_queues);
+
ret = rtnl_link_register(&tun_link_ops);
if (ret) {
pr_err("Can't register link_ops\n");
@@ -2357,6 +2384,8 @@ static void tun_cleanup(void)
{
misc_deregister(&tun_miscdev);
rtnl_link_unregister(&tun_link_ops);
+ if (tun_sysctl_header)
+ unregister_net_sysctl_table(tun_sysctl_header);
}
/* Get an underlying socket object from tun file. Returns error unless file is
--
1.8.3.1
next prev parent reply other threads:[~2014-11-18 16:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-18 16:22 [PATCH net-net 0/4] Increase the limit of tuntap queues Pankaj Gupta
2014-11-18 16:22 ` [PATCH net-next 1/4] net: allow large number of rx queues Pankaj Gupta
2014-11-18 20:29 ` Cong Wang
2014-11-20 16:31 ` Pankaj Gupta
2014-11-18 16:22 ` Pankaj Gupta [this message]
2014-11-18 16:22 ` [PATCH net-next 3/4] tuntap: reduce the size of tun_struct by using flex array Pankaj Gupta
2014-11-18 16:22 ` [PATCH net-next 4/4] tuntap: Increase the number of queues in tun Pankaj Gupta
2014-11-19 1:43 ` [PATCH net-net 0/4] Increase the limit of tuntap queues Alexei Starovoitov
2014-11-19 20:16 ` David Miller
2014-11-19 20:44 ` Michael S. Tsirkin
2014-11-23 5:22 ` Pankaj Gupta
2014-11-23 10:46 ` Michael S. Tsirkin
2014-11-23 18:43 ` David Miller
2014-11-23 20:30 ` Michael S. Tsirkin
2014-11-24 1:23 ` David Miller
2014-11-24 8:02 ` Michael S. Tsirkin
2014-11-24 14:28 ` Pankaj Gupta
2014-11-24 3:23 ` Jason Wang
2014-11-24 7:55 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1416327778-17716-3-git-send-email-pagupta@redhat.com \
--to=pagupta@redhat.com \
--cc=bhutchings@solarflare.com \
--cc=davem@davemloft.net \
--cc=dgibson@redhat.com \
--cc=edumazet@google.com \
--cc=hkchu@google.com \
--cc=jasowang@redhat.com \
--cc=jiri@resnulli.us \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=stephen@networkplumber.org \
--cc=therbert@google.com \
--cc=vfalico@gmail.com \
--cc=vyasevic@redhat.com \
--cc=wuzhy@linux.vnet.ibm.com.pnq.redhat.com \
--cc=xemul@parallels.com \
--cc=xii@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).