Re: [PATCH] net: micro-optimize skb_datagram_iter
From: Sagi Grimberg <sagi@grimberg.me>
Date: 2024-06-19 13:54:25
Also in:
oe-lkp
On 19/06/2024 15:46, David Howells wrote:
Jakub Kicinski [off-list ref] wrote:quoted
On Mon, 17 Jun 2024 09:29:53 +0300 Sagi Grimberg wrote:quoted
quoted
Probably because kmap() returns page_address() for non-highmem pages while kmap_local_page() actually returns a kmap address: if (!IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP) && !PageHighMem(page)) return page_address(page); return __kmap_local_pfn_prot(page_to_pfn(page), prot); so if skb frags are always lowmem (are they?) this is a false positive.AFAIR these buffers are coming from the RX ring, so they should be coming from a page_frag_cache, so I want to say always low memory?quoted
if they can be highmem, then you've uncovered a bug that nobody's noticed because nobody's testing on 32-bit any more.Not sure, Jakub? Eric?My uneducated guess would be that until recent(ish) sendpage rework from David Howells all high mem pages would have been single pages.Um. I touched the Tx side, not the Rx side. I also don't know whether all high mem pages would be single pages. I'll have to defer that one to the MM folks.
What prevents from gro to expand frags from crossing PAGE_SIZE? btw, at least from the code in skb_gro_receive() it appears that page_address() is called directly, which suggest that these netmem pages are lowmem?