• Peter Xu's avatar
    mm/swap: cache maximum swapfile size when init swap · be45a490
    Peter Xu authored
    We used to have swapfile_maximum_size() fetching a maximum value of
    swapfile size per-arch.
    
    As the caller of max_swapfile_size() grows, this patch introduce a
    variable "swapfile_maximum_size" and cache the value of old
    max_swapfile_size(), so that we don't need to calculate the value every
    time.
    
    Caching the value in swapfile_init() is safe because when reaching the
    phase we should have initialized all the relevant information.  Here the
    major arch to take care of is x86, which defines the max swapfile size
    based on L1TF mitigation.
    
    Here both X86_BUG_L1TF or l1tf_mitigation should have been setup properly
    when reaching swapfile_init().  As a reference, the code path looks like
    this for x86:
    
    - start_kernel
      - setup_arch
        - early_cpu_init
          - early_identify_cpu --> setup X86_BUG_L1TF
      - parse_early_param
        - l1tf_cmdline --> set l1tf_mitigation
      - check_bugs
        - l1tf_select_mitigation --> set l1tf_mitigation
      - arch_call_rest_init
        - rest_init
          - kernel_init
            - kernel_init_freeable
              - do_basic_setup
                - do_initcalls --> calls swapfile_init() (initcall level 4)
    
    The swapfile size only depends on swp pte format on non-x86 archs, so
    caching it is safe too.
    
    Since at it, rename max_swapfile_size() to arch_max_swapfile_size()
    because arch can define its own function, so it's more straightforward to
    have "arch_" as its prefix.  At the meantime, export swapfile_maximum_size
    to replace the old usages of max_swapfile_size().
    
    [peterx@redhat.com: declare arch_max_swapfile_size) in swapfile.h]
      Link: https://lkml.kernel.org/r/YxTh1GuC6ro5fKL5@xz-m1.local
    Link: https://lkml.kernel.org/r/20220811161331.37055-7-peterx@redhat.com
    
    Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Andi Kleen <andi.kleen@intel.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: "Kirill A . Shutemov" <kirill@shutemov.name>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    be45a490
swapfile.c 92.3 KB