Skip to content

Commit

Permalink
Merge branch 'ibmvnic-Fix-bugs-and-memory-leaks'
Browse files Browse the repository at this point in the history
Thomas Falcon says:

====================
ibmvnic: Fix bugs and memory leaks

This is a small patch series fixing up some bugs and memory leaks
in the ibmvnic driver. The first fix frees up previously allocated
memory that should be freed in case of an error. The second fixes
a reset case that was failing due to TX/RX queue IRQ's being
erroneously disabled without being enabled again. The final patch
fixes incorrect reallocated of statistics buffers during a device
reset, resulting in loss of statistics information and a memory leak.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 17, 2018
2 parents 5a847a6 + 0718421 commit d13d170
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions drivers/net/ethernet/ibm/ibmvnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ static int alloc_long_term_buff(struct ibmvnic_adapter *adapter,
if (adapter->fw_done_rc) {
dev_err(dev, "Couldn't map long term buffer,rc = %d\n",
adapter->fw_done_rc);
dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
return -1;
}
return 0;
Expand Down Expand Up @@ -1821,9 +1822,8 @@ static int do_reset(struct ibmvnic_adapter *adapter,
if (rc)
return rc;
}
ibmvnic_disable_irqs(adapter);
}

ibmvnic_disable_irqs(adapter);
adapter->state = VNIC_CLOSED;

if (reset_state == VNIC_CLOSED)
Expand Down Expand Up @@ -4586,14 +4586,6 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
release_crq_queue(adapter);
}

rc = init_stats_buffers(adapter);
if (rc)
return rc;

rc = init_stats_token(adapter);
if (rc)
return rc;

return rc;
}

Expand Down Expand Up @@ -4662,13 +4654,21 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
goto ibmvnic_init_fail;
} while (rc == EAGAIN);

rc = init_stats_buffers(adapter);
if (rc)
goto ibmvnic_init_fail;

rc = init_stats_token(adapter);
if (rc)
goto ibmvnic_stats_fail;

netdev->mtu = adapter->req_mtu - ETH_HLEN;
netdev->min_mtu = adapter->min_mtu - ETH_HLEN;
netdev->max_mtu = adapter->max_mtu - ETH_HLEN;

rc = device_create_file(&dev->dev, &dev_attr_failover);
if (rc)
goto ibmvnic_init_fail;
goto ibmvnic_dev_file_err;

netif_carrier_off(netdev);
rc = register_netdev(netdev);
Expand All @@ -4687,6 +4687,12 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
ibmvnic_register_fail:
device_remove_file(&dev->dev, &dev_attr_failover);

ibmvnic_dev_file_err:
release_stats_token(adapter);

ibmvnic_stats_fail:
release_stats_buffers(adapter);

ibmvnic_init_fail:
release_sub_crqs(adapter, 1);
release_crq_queue(adapter);
Expand Down

0 comments on commit d13d170

Please sign in to comment.