macvtap: Increase limit of macvtap queues
authorPankaj Gupta <pagupta@redhat.com>
Fri, 19 Jun 2015 14:17:53 +0000 (19:47 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 23 Jun 2015 13:14:04 +0000 (06:14 -0700)
Macvtap should be compatible with tuntap for
maximum number of queues.

commit 'baf71c5c1f80d82e92924050a60b5baaf97e3094 (tuntap:
Increase the number of queues in tun.)' removes
the limitations and increases number of queues in tuntap.
Now, Its safe to increase number of queues in Macvtap as well.

This patch also modifies 'macvtap_del_queues' function
to avoid extra memory allocation in stack.

Changes from v1->v2 :
Michael S. Tsirkin, Jason Wang  :
                  Better way to use linked list to
avoid use of extra memory in stack.
Sergei Shtylyov : Specify dependent commit's summary.

Signed-off-by: Pankaj Gupta <pagupta@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvtap.c
include/linux/if_macvlan.h

index 483afb19596ce04bf931ccf2e97aa476fa738082..6a64197f5bcef6fa4fce9e714bee6fa664e46fb7 100644 (file)
@@ -263,27 +263,21 @@ out:
 static void macvtap_del_queues(struct net_device *dev)
 {
        struct macvlan_dev *vlan = netdev_priv(dev);
-       struct macvtap_queue *q, *tmp, *qlist[MAX_MACVTAP_QUEUES];
-       int i, j = 0;
+       struct macvtap_queue *q, *tmp;
 
        ASSERT_RTNL();
        list_for_each_entry_safe(q, tmp, &vlan->queue_list, next) {
                list_del_init(&q->next);
-               qlist[j++] = q;
                RCU_INIT_POINTER(q->vlan, NULL);
                if (q->enabled)
                        vlan->numvtaps--;
                vlan->numqueues--;
+               sock_put(&q->sk);
        }
-       for (i = 0; i < vlan->numvtaps; i++)
-               RCU_INIT_POINTER(vlan->taps[i], NULL);
        BUG_ON(vlan->numvtaps);
        BUG_ON(vlan->numqueues);
        /* guarantee that any future macvtap_set_queue will fail */
        vlan->numvtaps = MAX_MACVTAP_QUEUES;
-
-       for (--j; j >= 0; j--)
-               sock_put(&qlist[j]->sk);
 }
 
 static rx_handler_result_t macvtap_handle_frame(struct sk_buff **pskb)
index 6f6929ea8a0cb5e364845a31911d4abcc2a22741..a4ccc3122f9389ce93dda50d388057cfcd1b1bbb 100644 (file)
@@ -29,7 +29,7 @@ struct macvtap_queue;
  * Maximum times a macvtap device can be opened. This can be used to
  * configure the number of receive queue, e.g. for multiqueue virtio.
  */
-#define MAX_MACVTAP_QUEUES     16
+#define MAX_MACVTAP_QUEUES     256
 
 #define MACVLAN_MC_FILTER_BITS 8
 #define MACVLAN_MC_FILTER_SZ   (1 << MACVLAN_MC_FILTER_BITS)