Skip to content

Commit 884d2b8

Browse files
SuperDavidWudavem330
authored andcommitted
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>
1 parent d33dae5 commit 884d2b8

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,16 +1461,20 @@ static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p,
14611461
{
14621462
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
14631463
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
1464+
gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
1465+
1466+
if (priv->dma_cap.addr64 <= 32)
1467+
gfp |= GFP_DMA32;
14641468

14651469
if (!buf->page) {
1466-
buf->page = page_pool_dev_alloc_pages(rx_q->page_pool);
1470+
buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
14671471
if (!buf->page)
14681472
return -ENOMEM;
14691473
buf->page_offset = stmmac_rx_offset(priv);
14701474
}
14711475

14721476
if (priv->sph && !buf->sec_page) {
1473-
buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool);
1477+
buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
14741478
if (!buf->sec_page)
14751479
return -ENOMEM;
14761480

@@ -4482,6 +4486,10 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
44824486
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
44834487
int dirty = stmmac_rx_dirty(priv, queue);
44844488
unsigned int entry = rx_q->dirty_rx;
4489+
gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
4490+
4491+
if (priv->dma_cap.addr64 <= 32)
4492+
gfp |= GFP_DMA32;
44854493

44864494
while (dirty-- > 0) {
44874495
struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];
@@ -4494,13 +4502,13 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
44944502
p = rx_q->dma_rx + entry;
44954503

44964504
if (!buf->page) {
4497-
buf->page = page_pool_dev_alloc_pages(rx_q->page_pool);
4505+
buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
44984506
if (!buf->page)
44994507
break;
45004508
}
45014509

45024510
if (priv->sph && !buf->sec_page) {
4503-
buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool);
4511+
buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
45044512
if (!buf->sec_page)
45054513
break;
45064514

0 commit comments

Comments
 (0)