From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> As presented at LSFMM, this patch-set rearranges struct page to give more contiguous usable space to users who have allocated a struct page for their own purposes. For a graphical view of before-and-after, see the first two tabs of https://docs.google.com/spreadsheets/d/1tvCszs_7FXrjei9_mtFiKV6nW1FLnYyvPvW-qNZhdog/edit?usp=sharing Highlights: - deferred_list now really exists in struct page instead of just a comment. - hmm_data also exists in struct page instead of being a nasty hack. - x86's PGD pages have a real pointer to the mm_struct. - VMalloc pages now have all sorts of extra information stored in them to help with debugging and tuning. - rcu_head is no longer tied to slab in case anyone else wants to free pages by RCU. - slub's counters no longer share space with _refcount. - slub's freelist+counters are now naturally dword aligned. - slub loses a parameter to a lot of functions and a sysfs file. Changes in v6: - More acks added - Incorporated Vlastimil's suggestions to improve the comments Changes in v5: - Added acks from Christoph Lameter - Dropped patch to make slub use page->private instead of page->counters. - Combined slab/slob/slub into one union in struct page. - Added patch to distinguish VMalloc pages. - Added patch to remove slub's 'reserved' file in sysfs. - Call the unions 'main union' and 'mapcount union' instead of 'first union' and 'second union'. - Removed a line which described which double-word slub's freelist was in. Changes in v4: - Added acks/reviews from Kirill & Randy - Removed call to page_mapcount_reset from slub since it no longer uses mapcount union. - Add pt_mm and hmm_data to struct page Matthew Wilcox (17): s390: Use _refcount for pgtables mm: Split page_type out from _mapcount mm: Mark pages in use for page tables mm: Switch s_mem and slab_cache in struct page mm: Move 'private' union within struct page mm: Move _refcount out of struct page union mm: Combine first three unions in struct page mm: Use page->deferred_list mm: Move lru union within struct page mm: Combine LRU and main union in struct page mm: Improve struct page documentation mm: Add pt_mm to struct page mm: Add hmm_data to struct page slab,slub: Remove rcu_head size checks slub: Remove kmem_cache->reserved slub: Remove 'reserved' file from sysfs mm: Distinguish VMalloc pages arch/s390/mm/pgalloc.c | 21 ++- arch/x86/mm/pgtable.c | 5 +- fs/proc/page.c | 4 + include/linux/hmm.h | 8 +- include/linux/mm.h | 2 + include/linux/mm_types.h | 236 ++++++++++++------------- include/linux/page-flags.h | 76 ++++++-- include/linux/slub_def.h | 1 - include/uapi/linux/kernel-page-flags.h | 3 +- kernel/crash_core.c | 1 + mm/huge_memory.c | 7 +- mm/page_alloc.c | 17 +- mm/slab.c | 2 - mm/slub.c | 102 +++-------- mm/vmalloc.c | 5 +- scripts/tags.sh | 6 +- tools/vm/page-types.c | 2 + 17 files changed, 241 insertions(+), 257 deletions(-) -- 2.17.0