• Joonsoo Kim's avatar
    mm/page_ext: support extra space allocation by page_ext user · 980ac167
    Joonsoo Kim authored
    Until now, if some page_ext users want to use it's own field on
    page_ext, it should be defined in struct page_ext by hard-coding.  It
    has a problem that wastes memory in following situation.
    
      struct page_ext {
       #ifdef CONFIG_A
      	int a;
       #endif
       #ifdef CONFIG_B
      	int b;
       #endif
      };
    
    Assume that kernel is built with both CONFIG_A and CONFIG_B.  Even if we
    enable feature A and doesn't enable feature B at runtime, each entry of
    struct page_ext takes two int rather than one int.  It's undesirable
    result so this patch tries to fix it.
    
    To solve above problem, this patch implements to support extra space
    allocation at runtime.  When need() callback returns true, it's extra
    memory requirement is summed to entry size of page_ext.  Also, offset
    for each user's extra memory space is returned.  With this offset, user
    can use this extra space and there is no need to define needed field on
    page_ext by hard-coding.
    
    This patch only implements an infrastructure.  Following patch will use
    it for page_owner which is only user having it's own fields on page_ext.
    
    Link: http://lkml.kernel.org/r/1471315879-32294-6-git-send-email-iamjoonsoo.kim@lge.comSigned-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    980ac167
page_ext.c 11.4 KB