tx_q->tx_skbuff_dma[i].map_as_page = false;
 }
 
+/**
+ * dma_free_rx_skbufs - free RX dma buffers
+ * @priv: private structure
+ * @queue: RX queue index
+ */
+static void dma_free_rx_skbufs(struct stmmac_priv *priv, u32 queue)
+{
+       int i;
+
+       for (i = 0; i < priv->dma_rx_size; i++)
+               stmmac_free_rx_buffer(priv, queue, i);
+}
+
+static int stmmac_alloc_rx_buffers(struct stmmac_priv *priv, u32 queue,
+                                  gfp_t flags)
+{
+       struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+       int i;
+
+       for (i = 0; i < priv->dma_rx_size; i++) {
+               struct dma_desc *p;
+               int ret;
+
+               if (priv->extend_desc)
+                       p = &((rx_q->dma_erx + i)->basic);
+               else
+                       p = rx_q->dma_rx + i;
+
+               ret = stmmac_init_rx_buffers(priv, p, i, flags,
+                                            queue);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 /**
  * stmmac_reinit_rx_buffers - reinit the RX descriptor buffer.
  * @priv: driver private structure
        return;
 
 err_reinit_rx_buffers:
-       do {
-               while (--i >= 0)
-                       stmmac_free_rx_buffer(priv, queue, i);
+       while (queue >= 0) {
+               dma_free_rx_skbufs(priv, queue);
 
                if (queue == 0)
                        break;
 
-               i = priv->dma_rx_size;
-       } while (queue-- > 0);
+               queue--;
+       }
 }
 
 /**
        u32 rx_count = priv->plat->rx_queues_to_use;
        int ret = -ENOMEM;
        int queue;
-       int i;
 
        /* RX INITIALIZATION */
        netif_dbg(priv, probe, priv->dev,
 
        for (queue = 0; queue < rx_count; queue++) {
                struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
-               int ret;
+
 
                netif_dbg(priv, probe, priv->dev,
                          "(%s) dma_rx_phy=0x%08x\n", __func__,
                            "Register MEM_TYPE_PAGE_POOL RxQ-%d\n",
                            rx_q->queue_index);
 
-               for (i = 0; i < priv->dma_rx_size; i++) {
-                       struct dma_desc *p;
-
-                       if (priv->extend_desc)
-                               p = &((rx_q->dma_erx + i)->basic);
-                       else
-                               p = rx_q->dma_rx + i;
-
-                       ret = stmmac_init_rx_buffers(priv, p, i, flags,
-                                                    queue);
-                       if (ret)
-                               goto err_init_rx_buffers;
-               }
+               ret = stmmac_alloc_rx_buffers(priv, queue, flags);
+               if (ret < 0)
+                       goto err_init_rx_buffers;
 
                rx_q->cur_rx = 0;
-               rx_q->dirty_rx = (unsigned int)(i - priv->dma_rx_size);
+               rx_q->dirty_rx = 0;
 
                /* Setup the chained descriptor addresses */
                if (priv->mode == STMMAC_CHAIN_MODE) {
 
 err_init_rx_buffers:
        while (queue >= 0) {
-               while (--i >= 0)
-                       stmmac_free_rx_buffer(priv, queue, i);
+               dma_free_rx_skbufs(priv, queue);
 
                if (queue == 0)
                        break;
 
-               i = priv->dma_rx_size;
                queue--;
        }
 
        return ret;
 }
 
-/**
- * dma_free_rx_skbufs - free RX dma buffers
- * @priv: private structure
- * @queue: RX queue index
- */
-static void dma_free_rx_skbufs(struct stmmac_priv *priv, u32 queue)
-{
-       int i;
-
-       for (i = 0; i < priv->dma_rx_size; i++)
-               stmmac_free_rx_buffer(priv, queue, i);
-}
-
 /**
  * dma_free_tx_skbufs - free TX dma buffers
  * @priv: private structure