mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-02-15 04:42:02 +00:00
67 lines
2.3 KiB
Diff
67 lines
2.3 KiB
Diff
From 884d2b845477cd0a18302444dc20fe2d9a01743e Mon Sep 17 00:00:00 2001
|
|
From: David Wu <david.wu@rock-chips.com>
|
|
Date: Mon, 13 Dec 2021 19:15:15 +0800
|
|
Subject: [PATCH] net: stmmac: Add GFP_DMA32 for rx buffers if no 64 capability
|
|
|
|
Use page_pool_alloc_pages instead of page_pool_dev_alloc_pages, which
|
|
can give the gfp parameter, in the case of not supporting 64-bit width,
|
|
using 32-bit address memory can reduce a copy from swiotlb.
|
|
|
|
Signed-off-by: David Wu <david.wu@rock-chips.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 16 ++++++++++++----
|
|
1 file changed, 12 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
|
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
|
|
@@ -1487,16 +1487,20 @@ static int stmmac_init_rx_buffers(struct
|
|
{
|
|
struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
|
|
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
|
|
+ gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
|
|
+
|
|
+ if (priv->dma_cap.addr64 <= 32)
|
|
+ gfp |= GFP_DMA32;
|
|
|
|
if (!buf->page) {
|
|
- buf->page = page_pool_dev_alloc_pages(rx_q->page_pool);
|
|
+ buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
|
|
if (!buf->page)
|
|
return -ENOMEM;
|
|
buf->page_offset = stmmac_rx_offset(priv);
|
|
}
|
|
|
|
if (priv->sph && !buf->sec_page) {
|
|
- buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool);
|
|
+ buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
|
|
if (!buf->sec_page)
|
|
return -ENOMEM;
|
|
|
|
@@ -4633,6 +4637,10 @@ static inline void stmmac_rx_refill(stru
|
|
struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
|
|
int dirty = stmmac_rx_dirty(priv, queue);
|
|
unsigned int entry = rx_q->dirty_rx;
|
|
+ gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
|
|
+
|
|
+ if (priv->dma_cap.addr64 <= 32)
|
|
+ gfp |= GFP_DMA32;
|
|
|
|
while (dirty-- > 0) {
|
|
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];
|
|
@@ -4645,13 +4653,13 @@ static inline void stmmac_rx_refill(stru
|
|
p = rx_q->dma_rx + entry;
|
|
|
|
if (!buf->page) {
|
|
- buf->page = page_pool_dev_alloc_pages(rx_q->page_pool);
|
|
+ buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
|
|
if (!buf->page)
|
|
break;
|
|
}
|
|
|
|
if (priv->sph && !buf->sec_page) {
|
|
- buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool);
|
|
+ buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
|
|
if (!buf->sec_page)
|
|
break;
|
|
|