The motivation here is to remove uses of page->mapping as part of the quest to shrink struct page. I'm unsure about some of this as the perf ringbuffers present some new challenges that we haven't faced before. Perf has three different ways of allocating memory for the ring buffer. There's an individual pages way, a vmalloc way and a physically contiguous way (for the aux buffers). The fault handler can map all three. The fault handler can map the _first_ page read-write, but all subsequent pages are mapped read-only. That makes calling vm_insert_page() not feasible; that would allow all pages to be mapped read-write (yes?) So the fault handler sets vmf->page and returns, in order to let finish_fault() set it up. I'm not really sure why page/folio->mapping needs to be set by the fault handler. What goes wrong if we leave it as NULL? Likewise, do we really need to set ->index? I've taken that out for now, but maybe that'll make something fail (perhaps an rmap walk? Do we really need to do rmap walks on device driver mappings?) I don't like drivers playing these games with pages/folios. I think we need better support for these kinds of things. Probably in the form of helpers, given how unusual some of perf's requirements are. More broadly, we don't have a detailed plan for how vmalloc memory gets handled in a memdesc world. For the vast majority of vmalloc allocations, the pages allocated need no descriptor; they're only accessed through the virtual address by the CPU. This is a case where we need to mmap the vmalloc memory. There are also cases where we need to do I/O to vmalloc memory; we need to understand what fields from struct page are really needed for each of these two requirements. Matthew Wilcox (Oracle) (4): perf: Convert perf_mmap_(alloc,free)_page to folios mm: Add vmalloc_user_node() perf: Use vmalloc_to_folio() perf: Use folios for the aux ringbuffer & pagefault path include/linux/mm.h | 5 +++ include/linux/vmalloc.h | 17 +++++++- kernel/events/core.c | 13 ++++-- kernel/events/ring_buffer.c | 83 +++++++++++++++++-------------------- mm/vmalloc.c | 9 ++-- 5 files changed, 72 insertions(+), 55 deletions(-) -- 2.40.1