Merge tag 'D01-for-3.18' of git://github.com/hisilicon/linux-hisi into next/soc
[cascardo/linux.git] / drivers / net / ethernet / apm / xgene / xgene_enet_main.c
index af7c40a..e4222af 100644 (file)
@@ -563,15 +563,21 @@ static void xgene_enet_free_desc_rings(struct xgene_enet_pdata *pdata)
        struct xgene_enet_desc_ring *ring;
 
        ring = pdata->tx_ring;
-       if (ring && ring->cp_ring && ring->cp_ring->cp_skb)
-               devm_kfree(dev, ring->cp_ring->cp_skb);
-       xgene_enet_free_desc_ring(ring);
+       if (ring) {
+               if (ring->cp_ring && ring->cp_ring->cp_skb)
+                       devm_kfree(dev, ring->cp_ring->cp_skb);
+               xgene_enet_free_desc_ring(ring);
+       }
 
        ring = pdata->rx_ring;
-       if (ring && ring->buf_pool && ring->buf_pool->rx_skb)
-               devm_kfree(dev, ring->buf_pool->rx_skb);
-       xgene_enet_free_desc_ring(ring->buf_pool);
-       xgene_enet_free_desc_ring(ring);
+       if (ring) {
+               if (ring->buf_pool) {
+                       if (ring->buf_pool->rx_skb)
+                               devm_kfree(dev, ring->buf_pool->rx_skb);
+                       xgene_enet_free_desc_ring(ring->buf_pool);
+               }
+               xgene_enet_free_desc_ring(ring);
+       }
 }
 
 static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring(
@@ -581,7 +587,11 @@ static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring(
        struct xgene_enet_desc_ring *ring;
        struct xgene_enet_pdata *pdata = netdev_priv(ndev);
        struct device *dev = ndev_to_dev(ndev);
-       u32 size;
+       int size;
+
+       size = xgene_enet_get_ring_size(dev, cfgsize);
+       if (size < 0)
+               return NULL;
 
        ring = devm_kzalloc(dev, sizeof(struct xgene_enet_desc_ring),
                            GFP_KERNEL);
@@ -593,7 +603,6 @@ static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring(
        ring->cfgsize = cfgsize;
        ring->id = ring_id;
 
-       size = xgene_enet_get_ring_size(dev, cfgsize);
        ring->desc_addr = dma_zalloc_coherent(dev, size, &ring->dma,
                                              GFP_KERNEL);
        if (!ring->desc_addr) {