From: Sagi Grimberg Date: Thu, 13 Jun 2024 11:35:04 +0000 (+0300) Subject: net: micro-optimize skb_datagram_iter X-Git-Tag: io_uring-6.11-20240722~71^2~195 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=934c29999b57b835d65442da6f741d5e27f3b584;p=linux-block.git net: micro-optimize skb_datagram_iter We only use the mapping in a single context in a short and contained scope, so kmap_local_page is sufficient and cheaper. This will also allow skb_datagram_iter to be called from softirq context. Signed-off-by: Sagi Grimberg Link: https://lore.kernel.org/r/20240613113504.1079860-1-sagi@grimberg.me Signed-off-by: Jakub Kicinski --- diff --git a/net/core/datagram.c b/net/core/datagram.c index e614cfd8e14a..95f242591fd2 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -417,14 +417,14 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset, end = start + skb_frag_size(frag); if ((copy = end - offset) > 0) { struct page *page = skb_frag_page(frag); - u8 *vaddr = kmap(page); + u8 *vaddr = kmap_local_page(page); if (copy > len) copy = len; n = INDIRECT_CALL_1(cb, simple_copy_to_iter, vaddr + skb_frag_off(frag) + offset - start, copy, data, to); - kunmap(page); + kunmap_local(vaddr); offset += n; if (n != copy) goto short_copy;