summaryrefslogtreecommitdiff
path: root/lib/netdev-dummy.c
diff options
context:
space:
mode:
authornickcooper-zhangtonghao <nic@opencloud.tech>2017-01-09 21:56:14 -0800
committerDaniele Di Proietto <diproiettod@vmware.com>2017-01-10 18:53:34 -0800
commitbf9f6f80c017d31e8cfae89b575ec87c7187909d (patch)
tree9fbb3c826cdab2345771b78edd450b4defa37a29 /lib/netdev-dummy.c
parentec2b070143c2ad54565c2130fcf4cfe9ad03018f (diff)
downloadopenvswitch-bf9f6f80c017d31e8cfae89b575ec87c7187909d.tar.gz
netdev-dummy: Limits the number of tx/rx queues.
This patch avoids the ovs_rcu to report WARN, caused by blocked for a long time, when ovs-vswitchd processes a port with many rx/tx queues. The number of tx/rx queues per port may be appropriate, because the dpdk uses it as an default max value. Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech> Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Diffstat (limited to 'lib/netdev-dummy.c')
-rw-r--r--lib/netdev-dummy.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index bdb77e131..2f9365e15 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -827,6 +827,8 @@ netdev_dummy_set_in6(struct netdev *netdev_, struct in6_addr *in6,
return 0;
}
+#define DUMMY_MAX_QUEUES_PER_PORT 1024
+
static int
netdev_dummy_set_config(struct netdev *netdev_, const struct smap *args)
{
@@ -870,6 +872,21 @@ netdev_dummy_set_config(struct netdev *netdev_, const struct smap *args)
new_n_rxq = MAX(smap_get_int(args, "n_rxq", NR_QUEUE), 1);
new_n_txq = MAX(smap_get_int(args, "n_txq", NR_QUEUE), 1);
+
+ if (new_n_rxq > DUMMY_MAX_QUEUES_PER_PORT ||
+ new_n_txq > DUMMY_MAX_QUEUES_PER_PORT) {
+ VLOG_WARN("The one or both of interface %s queues"
+ "(rxq: %d, txq: %d) exceed %d. Sets it %d.\n",
+ netdev_get_name(netdev_),
+ new_n_rxq,
+ new_n_txq,
+ DUMMY_MAX_QUEUES_PER_PORT,
+ DUMMY_MAX_QUEUES_PER_PORT);
+
+ new_n_rxq = MIN(DUMMY_MAX_QUEUES_PER_PORT, new_n_rxq);
+ new_n_txq = MIN(DUMMY_MAX_QUEUES_PER_PORT, new_n_txq);
+ }
+
new_numa_id = smap_get_int(args, "numa_id", 0);
if (new_n_rxq != netdev->requested_n_rxq
|| new_n_txq != netdev->requested_n_txq