summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/ibm
diff options
context:
space:
mode:
authorNathan Fontenot <nfont@linux.vnet.ibm.com>2017-03-30 09:49:23 +0300
committerDavid S. Miller <davem@davemloft.net>2017-03-31 01:58:43 +0300
commit7bbc27a4961a7d5f8e4294929ce64d6c6e81e90c (patch)
tree7dc06ffcb93f56569c857640411e2eb763b92a77 /drivers/net/ethernet/ibm
parentb510888f9639588d30d48eaaa32502cdb1c9e9e0 (diff)
downloadlinux-7bbc27a4961a7d5f8e4294929ce64d6c6e81e90c.tar.xz
ibmvnic: Create init/release routines for stats token
Create an initialization and a release routine for the stats token used by the ibmvnic driver. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ibm')
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c46
1 files changed, 34 insertions, 12 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index f2d2f1f1ce1c..a2f972d72e34 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -302,6 +302,36 @@ static void replenish_pools(struct ibmvnic_adapter *adapter)
}
}
+static void release_stats_token(struct ibmvnic_adapter *adapter)
+{
+ struct device *dev = &adapter->vdev->dev;
+
+ if (!adapter->stats_token)
+ return;
+
+ dma_unmap_single(dev, adapter->stats_token,
+ sizeof(struct ibmvnic_statistics),
+ DMA_FROM_DEVICE);
+ adapter->stats_token = 0;
+}
+
+static int init_stats_token(struct ibmvnic_adapter *adapter)
+{
+ struct device *dev = &adapter->vdev->dev;
+ dma_addr_t stok;
+
+ stok = dma_map_single(dev, &adapter->stats,
+ sizeof(struct ibmvnic_statistics),
+ DMA_FROM_DEVICE);
+ if (dma_mapping_error(dev, stok)) {
+ dev_err(dev, "Couldn't map stats buffer\n");
+ return -1;
+ }
+
+ adapter->stats_token = stok;
+ return 0;
+}
+
static void release_rx_pools(struct ibmvnic_adapter *adapter)
{
struct ibmvnic_rx_pool *rx_pool;
@@ -647,8 +677,6 @@ alloc_napi_failed:
static void ibmvnic_release_resources(struct ibmvnic_adapter *adapter)
{
- struct device *dev = &adapter->vdev->dev;
-
release_bounce_buffer(adapter);
release_tx_pools(adapter);
release_rx_pools(adapter);
@@ -656,10 +684,7 @@ static void ibmvnic_release_resources(struct ibmvnic_adapter *adapter)
release_sub_crqs(adapter);
release_crq_queue(adapter);
- if (adapter->stats_token)
- dma_unmap_single(dev, adapter->stats_token,
- sizeof(struct ibmvnic_statistics),
- DMA_FROM_DEVICE);
+ release_stats_token(adapter);
}
static int ibmvnic_close(struct net_device *netdev)
@@ -3269,13 +3294,10 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
return rc;
}
- adapter->stats_token = dma_map_single(dev, &adapter->stats,
- sizeof(struct ibmvnic_statistics),
- DMA_FROM_DEVICE);
- if (dma_mapping_error(dev, adapter->stats_token)) {
+ rc = init_stats_token(adapter);
+ if (rc) {
release_crq_queue(adapter);
- dev_err(dev, "Couldn't map stats buffer\n");
- return -ENOMEM;
+ return rc;
}
init_completion(&adapter->init_done);