[RFC 00/11] Remove 'order' argument from many mm functions

Matthew Wilcox
2019-05-07T04:06:16Z

It's possible to save a few hundred bytes from the kernel text by moving
the 'order' argument into the GFP flags. I had the idea while I was
playing with THP pagecache (notably, I didn't want to add an 'order'
parameter to pagecache_get_page())

What I got for a -tiny config for page_alloc.o (with a tinyconfig,
x86-32) after each step:

text data bss dec hex filename
21462 349 44 21855 555f 1.o
21447 349 44 21840 5550 2.o
21415 349 44 21808 5530 3.o
21399 349 44 21792 5520 4.o
21399 349 44 21792 5520 5.o
21367 349 44 21760 5500 6.o
21303 349 44 21696 54c0 7.o
21303 349 44 21696 54c0 8.o
21303 349 44 21696 54c0 9.o
21303 349 44 21696 54c0 A.o
21303 349 44 21696 54c0 B.o

I assure you that the callers all shrink as well. vmscan.o also
shrinks, but I didn't keep detailed records.

Anyway, this is just a quick POC due to me being on an aeroplane for
most of today. Maybe we don't want to spend five GFP bits on this.
Some bits of this could be pulled out and applied even if we don't want
to go for the main objective. eg rmqueue_pcplist() doesn't use its
gfp_flags argument.

Matthew Wilcox (Oracle) (11):
fix function alignment
mm: Pass order to __alloc_pages_nodemask in GFP flags
mm: Pass order to __get_free_pages() in GFP flags
mm: Pass order to prep_new_page in GFP flags
mm: Remove gfp_flags argument from rmqueue_pcplist
mm: Pass order to rmqueue in GFP flags
mm: Pass order to get_page_from_freelist in GFP flags
mm: Pass order to __alloc_pages_cpuset_fallback in GFP flags
mm: Pass order to prepare_alloc_pages in GFP flags
mm: Pass order to try_to_free_pages in GFP flags
mm: Pass order to node_reclaim() in GFP flags

arch/x86/Makefile_32.cpu | 2 +
arch/x86/events/intel/ds.c | 4 +-
arch/x86/kvm/vmx/vmx.c | 4 +-
arch/x86/mm/init.c | 3 +-
arch/x86/mm/pgtable.c | 7 +--
drivers/base/devres.c | 2 +-
include/linux/gfp.h | 57 +++++++++++---------
include/linux/migrate.h | 2 +-
include/linux/swap.h | 2 +-
include/trace/events/vmscan.h | 28 +++++-----
mm/filemap.c | 2 +-
mm/gup.c | 4 +-
mm/hugetlb.c | 5 +-
mm/internal.h | 5 +-
mm/khugepaged.c | 2 +-
mm/mempolicy.c | 30 +++++------
mm/migrate.c | 2 +-
mm/mmu_gather.c | 2 +-
mm/page_alloc.c | 97 +++++++++++++++++------------------
mm/shmem.c | 5 +-
mm/slub.c | 2 +-
mm/vmscan.c | 26 +++++-----
22 files changed, 147 insertions(+), 146 deletions(-)

--
2.20.1