[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170220125344.3555-3-jszhang@marvell.com>
Date: Mon, 20 Feb 2017 20:53:42 +0800
From: Jisheng Zhang <jszhang@...vell.com>
To: <thomas.petazzoni@...e-electrons.com>, <davem@...emloft.net>,
<arnd@...db.de>, <gregory.clement@...e-electrons.com>,
<mw@...ihalf.com>
CC: <linux-arm-kernel@...ts.infradead.org>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, Jisheng Zhang <jszhang@...vell.com>
Subject: [PATCH net-next v3 2/4] net: mvneta: avoid getting buf_phys_addr from rx_desc again
In hot code path mvneta_rx_hwbm(), the rx_desc->buf_phys_addr is read
four times. The rx_desc is allocated by dma_alloc_coherent, it's
uncacheable if the device isn't cache-coherent, reading from uncached
memory is fairly slow. So reuse the read out phys_addr variable to
avoid the extra reading from uncached memory.
Signed-off-by: Jisheng Zhang <jszhang@...vell.com>
Suggested-by: Gregory CLEMENT <gregory.clement@...e-electrons.com>
---
drivers/net/ethernet/marvell/mvneta.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 06df72b8da85..a25042801eec 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -2082,8 +2082,7 @@ static int mvneta_rx_hwbm(struct mvneta_port *pp, int rx_todo,
(rx_status & MVNETA_RXD_ERR_SUMMARY)) {
err_drop_frame_ret_pool:
/* Return the buffer to the pool */
- mvneta_bm_pool_put_bp(pp->bm_priv, bm_pool,
- rx_desc->buf_phys_addr);
+ mvneta_bm_pool_put_bp(pp->bm_priv, bm_pool, phys_addr);
err_drop_frame:
dev->stats.rx_errors++;
mvneta_rx_error(pp, rx_desc);
@@ -2098,7 +2097,7 @@ static int mvneta_rx_hwbm(struct mvneta_port *pp, int rx_todo,
goto err_drop_frame_ret_pool;
dma_sync_single_range_for_cpu(dev->dev.parent,
- rx_desc->buf_phys_addr,
+ phys_addr,
MVNETA_MH_SIZE + NET_SKB_PAD,
rx_bytes,
DMA_FROM_DEVICE);
@@ -2114,8 +2113,7 @@ static int mvneta_rx_hwbm(struct mvneta_port *pp, int rx_todo,
rcvd_bytes += rx_bytes;
/* Return the buffer to the pool */
- mvneta_bm_pool_put_bp(pp->bm_priv, bm_pool,
- rx_desc->buf_phys_addr);
+ mvneta_bm_pool_put_bp(pp->bm_priv, bm_pool, phys_addr);
/* leave the descriptor and buffer untouched */
continue;
--
2.11.0
Powered by blists - more mailing lists