Messages in this thread | | | Date | Sat, 10 Apr 2021 20:39:55 +0100 | From | Matthew Wilcox <> | Subject | Re: [PATCH net-next v3 2/5] mm: add a signature in struct page |
| |
On Sat, Apr 10, 2021 at 09:27:31PM +0300, Ilias Apalodimas wrote: > > Can this page_pool be used for TCP RX zerocopy? If yes then PageType > > can not be used. > > Yes it can, since it's going to be used as your default allocator for > payloads, which might end up on an SKB. > So we have to keep the extra added field on struct page for our mark. > Matthew had an intersting idea. He suggested keeping it, but changing the > magic number, so it can't be a kernel address, but I'll let him follow > up on the details.
Sure! So, given the misalignment problem I discovered yesterday [1], we probably want a page_pool page to look like:
unsigned long flags; unsigned long pp_magic; unsigned long xmi; unsigned long _pp_mapping_pad; dma_addr_t dma_addr; /* might be one or two words */
The only real restriction here is that pp_magic should not be a valid pointer, and it must have the bottom bit clear. I'd recommend something like:
#define PP_MAGIC (0x20 + POISON_POINTER_DELTA)
This leaves page->mapping as NULL, so you don't have to worry about clearing it before free.
[1] https://lore.kernel.org/linux-mm/20210410024313.GX2531743@casper.infradead.org/
| |