net/mlx4_core: Do not reset module-parameter num_vfs when fail to enable sriov
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Tue, 15 May 2012 10:35:01 +0000 (10:35 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 May 2012 04:56:58 +0000 (00:56 -0400)
Consider the following scenario: 2 HCAs, where only one of which can run SRIOV.

If we reset the module parameter, all the VFs of the SRIOV HCA will be
claimed by the PPF host (-- the code relies on num_vfs being non-zero
to avoid this claiming, and num_vfs was reset when pci_enable_sriov failed
for the non-SRIOV HCA).

The solution is not to touch the num_vfs parameter.

Also, eliminate the unneeded check of num_vfs when disabling sriov
(the dev flag bit is sufficient).

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/main.c

index 8bb05b4..8eed1f2 100644 (file)
@@ -1865,7 +1865,6 @@ static int __mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
                                mlx4_err(dev, "Failed to enable sriov,"
                                         "continuing without sriov enabled"
                                         " (err = %d).\n", err);
-                               num_vfs = 0;
                                err = 0;
                        } else {
                                mlx4_warn(dev, "Running in master mode\n");
@@ -2022,7 +2021,7 @@ err_cmd:
        mlx4_cmd_cleanup(dev);
 
 err_sriov:
-       if (num_vfs && (dev->flags & MLX4_FLAG_SRIOV))
+       if (dev->flags & MLX4_FLAG_SRIOV)
                pci_disable_sriov(pdev);
 
 err_rel_own:
@@ -2099,7 +2098,7 @@ static void mlx4_remove_one(struct pci_dev *pdev)
 
                if (dev->flags & MLX4_FLAG_MSI_X)
                        pci_disable_msix(pdev);
-               if (num_vfs && (dev->flags & MLX4_FLAG_SRIOV)) {
+               if (dev->flags & MLX4_FLAG_SRIOV) {
                        mlx4_warn(dev, "Disabling sriov\n");
                        pci_disable_sriov(pdev);
                }