]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mlx4_vnic: use netif_set_real_num_tx_queues to dynamically change tx queue size
authorSaeed Mahameed <saeedm@mellanox.com>
Mon, 30 Sep 2013 11:26:54 +0000 (13:26 +0200)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 7 Jul 2015 21:45:13 +0000 (14:45 -0700)
When network admin vnics are created the network device is
already registered and it is not allowed to change
dev->real_num_tx_queues directly.

This fixes a bug where the unload of mlx4_vnic hangs with
the following error message: waiting for eth442 to become
free. Usage count = 16

Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
(Ported from Mellanox OFED 2.4)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/net/ethernet/mellanox/mlx4_vnic/vnic.h
drivers/net/ethernet/mellanox/mlx4_vnic/vnic_main.c

index 04a5e832d4222032b126335a716411fb5d78b02d..03c12e93d211ab41a2dbeeca9fc5813cc35cbe7f 100644 (file)
@@ -322,9 +322,13 @@ extern struct ib_sa_client vnic_sa_client;
 #ifndef _BP_NETDEV_NO_TMQ /* >= 2.6.27 */
 #define VNIC_TXQ_GET_HASH(_skb, _max)  (skb_get_queue_mapping(_skb))
 #define VNIC_TXQ_ALLOC_NETDEV(sz, nm, sp, qm) alloc_netdev_mq(sz, nm, sp, qm)
-#define VNIC_TXQ_SET_ACTIVE(login, num)        (login->dev->real_num_tx_queues = \
-                                       login->real_tx_rings_num = \
-                                       login->ndo_tx_rings_num = num)
+#define VNIC_TXQ_SET_ACTIVE(login, num) \
+            do { \
+                rtnl_lock(); \
+                netif_set_real_num_tx_queues(login->dev,num); \
+                rtnl_unlock(); \
+                login->real_tx_rings_num = login->ndo_tx_rings_num = num; \
+            } while (0)
 #define VNIC_TXQ_GET_ACTIVE(login)     (login->real_tx_rings_num)
 #define VNIC_TXQ_GET(tx_res)           netdev_get_tx_queue(tx_res->login->dev, tx_res->index)
 #define VNIC_TXQ_STOP(tx_res)          netif_tx_stop_queue(VNIC_TXQ_GET(tx_res))
index f07ee4e63fb7e1de23a30356715796461ea2774a..74c0ec69072f971023b2d354d71f0959879d66a8 100644 (file)
@@ -60,8 +60,6 @@ err:
 
 static void __exit mlx4_ib_cleanup(void)
 {
-       int ret;
-
        vnic_dbg_func("module_exit");
        vnic_ports_cleanup();
        vnic_dbg_mark();