OSDN Git Service

net: stmmac: introduce dma_recycle_rx_skbufs for stmmac_reinit_rx_buffers
authorOng Boon Leong <boon.leong.ong@intel.com>
Tue, 13 Apr 2021 09:36:21 +0000 (17:36 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Apr 2021 22:06:50 +0000 (15:06 -0700)
Rearrange RX buffer page_pool recycling logics into dma_recycle_rx_skbufs,
so that we prepare stmmac_reinit_rx_buffers() for XSK pool expansion.

Signed-off-by: Ong Boon Leong <boon.leong.ong@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index 0a04324..f48d183 100644 (file)
@@ -1513,6 +1513,31 @@ static int stmmac_alloc_rx_buffers(struct stmmac_priv *priv, u32 queue,
 }
 
 /**
+ * dma_recycle_rx_skbufs - recycle RX dma buffers
+ * @priv: private structure
+ * @queue: RX queue index
+ */
+static void dma_recycle_rx_skbufs(struct stmmac_priv *priv, u32 queue)
+{
+       struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+       int i;
+
+       for (i = 0; i < priv->dma_rx_size; i++) {
+               struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
+
+               if (buf->page) {
+                       page_pool_recycle_direct(rx_q->page_pool, buf->page);
+                       buf->page = NULL;
+               }
+
+               if (priv->sph && buf->sec_page) {
+                       page_pool_recycle_direct(rx_q->page_pool, buf->sec_page);
+                       buf->sec_page = NULL;
+               }
+       }
+}
+
+/**
  * stmmac_reinit_rx_buffers - reinit the RX descriptor buffer.
  * @priv: driver private structure
  * Description: this function is called to re-allocate a receive buffer, perform
@@ -1524,23 +1549,8 @@ static void stmmac_reinit_rx_buffers(struct stmmac_priv *priv)
        u32 queue;
        int i;
 
-       for (queue = 0; queue < rx_count; queue++) {
-               struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
-
-               for (i = 0; i < priv->dma_rx_size; i++) {
-                       struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
-
-                       if (buf->page) {
-                               page_pool_recycle_direct(rx_q->page_pool, buf->page);
-                               buf->page = NULL;
-                       }
-
-                       if (priv->sph && buf->sec_page) {
-                               page_pool_recycle_direct(rx_q->page_pool, buf->sec_page);
-                               buf->sec_page = NULL;
-                       }
-               }
-       }
+       for (queue = 0; queue < rx_count; queue++)
+               dma_recycle_rx_skbufs(priv, queue);
 
        for (queue = 0; queue < rx_count; queue++) {
                struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];