From bf9f6f80c017d31e8cfae89b575ec87c7187909d Mon Sep 17 00:00:00 2001 From: nickcooper-zhangtonghao Date: Mon, 9 Jan 2017 21:56:14 -0800 Subject: 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 Signed-off-by: Daniele Di Proietto --- lib/netdev-dummy.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'lib/netdev-dummy.c') 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 -- cgit v1.2.1