summaryrefslogtreecommitdiffhomepage
path: root/drivers/net/ethernet/cisco/enic/enic_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/cisco/enic/enic_dev.c')
-rw-r--r--drivers/net/ethernet/cisco/enic/enic_dev.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/net/ethernet/cisco/enic/enic_dev.c b/drivers/net/ethernet/cisco/enic/enic_dev.c
index 2cbae7c6cc3d..659787f73cf1 100644
--- a/drivers/net/ethernet/cisco/enic/enic_dev.c
+++ b/drivers/net/ethernet/cisco/enic/enic_dev.c
@@ -131,10 +131,13 @@ int enic_dev_set_ig_vlan_rewrite_mode(struct enic *enic)
int enic_dev_enable(struct enic *enic)
{
- int err;
+ int err = 0;
spin_lock_bh(&enic->devcmd_lock);
- err = vnic_dev_enable_wait(enic->vdev);
+ if (enic->enable_count == 0)
+ err = vnic_dev_enable_wait(enic->vdev);
+ if (!err)
+ enic->enable_count++;
spin_unlock_bh(&enic->devcmd_lock);
return err;
@@ -142,10 +145,16 @@ int enic_dev_enable(struct enic *enic)
int enic_dev_disable(struct enic *enic)
{
- int err;
+ int err = 0;
spin_lock_bh(&enic->devcmd_lock);
- err = vnic_dev_disable(enic->vdev);
+ if (enic->enable_count == 0) {
+ spin_unlock_bh(&enic->devcmd_lock);
+ return 0;
+ }
+ enic->enable_count--;
+ if (enic->enable_count == 0)
+ err = vnic_dev_disable(enic->vdev);
spin_unlock_bh(&enic->devcmd_lock);
return err;