Re: [PATCH net-next 3/5] cassini: Remove unnecessary use of kmap_atomic()
flat view
From: Anirudh Venkataramanan <hidden>
Date: 2022-11-18 17:56:00
On 11/18/2022 12:35 AM, Fabio M. De Francesco wrote:
On giovedì 17 novembre 2022 23:25:55 CET Anirudh Venkataramanan wrote:quoted
Pages for Rx buffers are allocated in cas_page_alloc() using either GFP_ATOMIC or GFP_KERNEL. Memory allocated with GFP_KERNEL/GFP_ATOMIC can't come from highmem and so there's no need to kmap() them. Just use page_address() instead. I don't have hardware, so this change has only been compile tested. Cc: Ira Weiny <redacted> Cc: Fabio M. De Francesco <redacted> Signed-off-by: Anirudh Venkataramanan <redacted> --- drivers/net/ethernet/sun/cassini.c | 34 ++++++++++-------------------- 1 file changed, 11 insertions(+), 23 deletions(-)diff --git a/drivers/net/ethernet/sun/cassini.cb/drivers/net/ethernet/sun/cassini.c index 0aca193..2f66cfc 100644--- a/drivers/net/ethernet/sun/cassini.c +++ b/drivers/net/ethernet/sun/cassini.c@@ -1915,7 +1915,7 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, int off, swivel = RX_SWIVEL_OFF_VAL; struct cas_page *page; struct sk_buff *skb; - void *addr, *crcaddr; + void *crcaddr; __sum16 csum; char *p;@@ -1936,7 +1936,7 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, skb_reserve(skb, swivel); p = skb->data; - addr = crcaddr = NULL; + crcaddr = NULL; if (hlen) { /* always copy header pages */ i = CAS_VAL(RX_COMP2_HDR_INDEX, words[1]); page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];quoted
@@ -1948,12 +1948,10 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, i += cp->crc_size; dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr +off,quoted
i, DMA_FROM_DEVICE); - addr = cas_page_map(page->buffer); - memcpy(p, addr + off, i); + memcpy(p, page_address(page->buffer) + off, i); dma_sync_single_for_device(&cp->pdev->dev, page->dma_addr + off, i, DMA_FROM_DEVICE); - cas_page_unmap(addr); RX_USED_ADD(page, 0x100); p += hlen; swivel = 0;@@ -1984,12 +1982,11 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, /* make sure we always copy a header */ swivel = 0; if (p == (char *) skb->data) { /* not split */ - addr = cas_page_map(page->buffer); - memcpy(p, addr + off, RX_COPY_MIN); + memcpy(p, page_address(page->buffer) + off, + RX_COPY_MIN); dma_sync_single_for_device(&cp->pdev->dev, page->dma_addr+ off, i,quoted
DMA_FROM_DEVICE);quoted
- cas_page_unmap(addr); off += RX_COPY_MIN; swivel = RX_COPY_MIN; RX_USED_ADD(page, cp->mtu_stride);@@ -2036,10 +2033,8 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, RX_USED_ADD(page, hlen + cp->crc_size); } - if (cp->crc_size) { - addr = cas_page_map(page->buffer); - crcaddr = addr + off + hlen; - } + if (cp->crc_size) + crcaddr = page_address(page->buffer) + off +hlen;quoted
} else { /* copying packet */@@ -2061,12 +2056,10 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, i += cp->crc_size; dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr +off,quoted
i, DMA_FROM_DEVICE); - addr = cas_page_map(page->buffer); - memcpy(p, addr + off, i); + memcpy(p, page_address(page->buffer) + off, i); dma_sync_single_for_device(&cp->pdev->dev, page->dma_addr + off, i, DMA_FROM_DEVICE); - cas_page_unmap(addr); if (p == (char *) skb->data) /* not split */ RX_USED_ADD(page, cp->mtu_stride); else@@ -2081,20 +2074,17 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, page->dma_addr, dlen + cp- crc_size, DMA_FROM_DEVICE); - addr = cas_page_map(page->buffer); - memcpy(p, addr, dlen + cp->crc_size); + memcpy(p, page_address(page->buffer), dlen + cp- crc_size); dma_sync_single_for_device(&cp->pdev->dev, page->dma_addr, dlen + cp- crc_size,DMA_FROM_DEVICE);quoted
- cas_page_unmap(addr); RX_USED_ADD(page, dlen + cp->crc_size); } end_copy_pkt: - if (cp->crc_size) { - addr = NULL; + if (cp->crc_size) crcaddr = skb->data + alloclen; - } +This is a different logical change. Some maintainers I met would have asked for a separate patch, but I'm OK with it being here.
cas_page_map()/cap_page_unmap() were using addr. Once these went away addr became unnecessary. It would be weird to leave the declaration, init and reinit for a variable that's not of any use, and so it was removed as well. It's cleaner this way. Ani