Re: [PATCH net-next 3/5] cassini: Remove unnecessary use of kmap_atomic()
flat view
From: Fabio M. De Francesco <hidden>
Date: 2022-11-18 08:36:01
On giovedì 17 novembre 2022 23:25:55 CET Anirudh Venkataramanan wrote:
quoted hunk ↗ jump to hunk
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 hunk ↗ jump to hunk
@@ -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 hunk ↗ jump to hunk
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,
DMA_FROM_DEVICE);
quoted hunk ↗ jump to hunk
- 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 hunk ↗ jump to hunk
} 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 hunk ↗ jump to hunk
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 hunk ↗ jump to hunk
- 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.
quoted hunk ↗ jump to hunk
skb_put(skb, alloclen); }@@ -2103,8 +2093,6 @@ static int cas_rx_process_pkt(struct cas *cp, structcas_rx_comp *rxc, /* checksum includes FCS. strip it out. */ csum = csum_fold(csum_partial(crcaddr, cp->crc_size, csum_unfold(csum))); - if (addr) - cas_page_unmap(addr); } skb->protocol = eth_type_trans(skb, cp->dev); if (skb->protocol == htons(ETH_P_IP)) { -- 2.37.2
Reviewed-by: Fabio M. De Francesco <redacted> Thanks, Fabio