mm: page_alloc: move sysctls into it own fils
authorKefeng Wang <wangkefeng.wang@huawei.com>
Tue, 16 May 2023 06:38:20 +0000 (14:38 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 9 Jun 2023 23:25:24 +0000 (16:25 -0700)
This moves all page alloc related sysctls to its own file, as part of the
kernel/sysctl.c spring cleaning, also move some functions declarations
from mm.h into internal.h.

Link: https://lkml.kernel.org/r/20230516063821.121844-13-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: "Huang, Ying" <ying.huang@intel.com>
Cc: Iurii Zaikin <yzaikin@google.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Len Brown <len.brown@intel.com>
Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Rafael J. Wysocki <rafael@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/mm.h
include/linux/mmzone.h
kernel/sysctl.c
mm/internal.h
mm/mm_init.c
mm/page_alloc.c

index 2382eaf6fd811d26e8d0e76a0478fcc945ab0470..6d7e03d83da7bd3826a11541d6006116a2fda047 100644 (file)
@@ -2994,12 +2994,6 @@ extern int __meminit early_pfn_to_nid(unsigned long pfn);
 #endif
 
 extern void set_dma_reserve(unsigned long new_dma_reserve);
-extern void memmap_init_range(unsigned long, int, unsigned long,
-               unsigned long, unsigned long, enum meminit_context,
-               struct vmem_altmap *, int migratetype);
-extern void setup_per_zone_wmarks(void);
-extern void calculate_min_free_kbytes(void);
-extern int __meminit init_per_zone_wmark_min(void);
 extern void mem_init(void);
 extern void __init mmap_init(void);
 
@@ -3020,11 +3014,6 @@ void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...);
 
 extern void setup_per_cpu_pageset(void);
 
-/* page_alloc.c */
-extern int min_free_kbytes;
-extern int watermark_boost_factor;
-extern int watermark_scale_factor;
-
 /* nommu.c */
 extern atomic_long_t mmap_pages_allocated;
 extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t);
index a4889c9d4055b0aafe6860bf3c890ddb9e25e391..3a68326c9989850dad79f56b36d397e97a22a383 100644 (file)
@@ -1512,27 +1512,6 @@ static inline bool has_managed_dma(void)
 }
 #endif
 
-/* These two functions are used to setup the per zone pages min values */
-struct ctl_table;
-
-int min_free_kbytes_sysctl_handler(struct ctl_table *, int, void *, size_t *,
-               loff_t *);
-int watermark_scale_factor_sysctl_handler(struct ctl_table *, int, void *,
-               size_t *, loff_t *);
-extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES];
-int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, void *,
-               size_t *, loff_t *);
-int percpu_pagelist_high_fraction_sysctl_handler(struct ctl_table *, int,
-               void *, size_t *, loff_t *);
-int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int,
-               void *, size_t *, loff_t *);
-int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int,
-               void *, size_t *, loff_t *);
-int numa_zonelist_order_handler(struct ctl_table *, int,
-               void *, size_t *, loff_t *);
-extern int percpu_pagelist_high_fraction;
-extern char numa_zonelist_order[];
-#define NUMA_ZONELIST_ORDER_LEN        16
 
 #ifndef CONFIG_NUMA
 
index bfe53e83552457448f128e5876204386cffc4015..a57de67f032f51184894a18cb2669bb87d2160d1 100644 (file)
@@ -2119,13 +2119,6 @@ static struct ctl_table vm_table[] = {
                .extra2         = SYSCTL_ONE,
        },
 #endif
-       {
-               .procname       = "lowmem_reserve_ratio",
-               .data           = &sysctl_lowmem_reserve_ratio,
-               .maxlen         = sizeof(sysctl_lowmem_reserve_ratio),
-               .mode           = 0644,
-               .proc_handler   = lowmem_reserve_ratio_sysctl_handler,
-       },
        {
                .procname       = "drop_caches",
                .data           = &sysctl_drop_caches,
@@ -2135,39 +2128,6 @@ static struct ctl_table vm_table[] = {
                .extra1         = SYSCTL_ONE,
                .extra2         = SYSCTL_FOUR,
        },
-       {
-               .procname       = "min_free_kbytes",
-               .data           = &min_free_kbytes,
-               .maxlen         = sizeof(min_free_kbytes),
-               .mode           = 0644,
-               .proc_handler   = min_free_kbytes_sysctl_handler,
-               .extra1         = SYSCTL_ZERO,
-       },
-       {
-               .procname       = "watermark_boost_factor",
-               .data           = &watermark_boost_factor,
-               .maxlen         = sizeof(watermark_boost_factor),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = SYSCTL_ZERO,
-       },
-       {
-               .procname       = "watermark_scale_factor",
-               .data           = &watermark_scale_factor,
-               .maxlen         = sizeof(watermark_scale_factor),
-               .mode           = 0644,
-               .proc_handler   = watermark_scale_factor_sysctl_handler,
-               .extra1         = SYSCTL_ONE,
-               .extra2         = SYSCTL_THREE_THOUSAND,
-       },
-       {
-               .procname       = "percpu_pagelist_high_fraction",
-               .data           = &percpu_pagelist_high_fraction,
-               .maxlen         = sizeof(percpu_pagelist_high_fraction),
-               .mode           = 0644,
-               .proc_handler   = percpu_pagelist_high_fraction_sysctl_handler,
-               .extra1         = SYSCTL_ZERO,
-       },
        {
                .procname       = "page_lock_unfairness",
                .data           = &sysctl_page_lock_unfairness,
@@ -2223,24 +2183,6 @@ static struct ctl_table vm_table[] = {
                .proc_handler   = proc_dointvec_minmax,
                .extra1         = SYSCTL_ZERO,
        },
-       {
-               .procname       = "min_unmapped_ratio",
-               .data           = &sysctl_min_unmapped_ratio,
-               .maxlen         = sizeof(sysctl_min_unmapped_ratio),
-               .mode           = 0644,
-               .proc_handler   = sysctl_min_unmapped_ratio_sysctl_handler,
-               .extra1         = SYSCTL_ZERO,
-               .extra2         = SYSCTL_ONE_HUNDRED,
-       },
-       {
-               .procname       = "min_slab_ratio",
-               .data           = &sysctl_min_slab_ratio,
-               .maxlen         = sizeof(sysctl_min_slab_ratio),
-               .mode           = 0644,
-               .proc_handler   = sysctl_min_slab_ratio_sysctl_handler,
-               .extra1         = SYSCTL_ZERO,
-               .extra2         = SYSCTL_ONE_HUNDRED,
-       },
 #endif
 #ifdef CONFIG_SMP
        {
@@ -2267,15 +2209,6 @@ static struct ctl_table vm_table[] = {
                .proc_handler   = mmap_min_addr_handler,
        },
 #endif
-#ifdef CONFIG_NUMA
-       {
-               .procname       = "numa_zonelist_order",
-               .data           = &numa_zonelist_order,
-               .maxlen         = NUMA_ZONELIST_ORDER_LEN,
-               .mode           = 0644,
-               .proc_handler   = numa_zonelist_order_handler,
-       },
-#endif
 #if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \
    (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
        {
index c99da2cfac7119dd983d67dd770a79b669213267..66d7ddf7e211da6e57eef33e7924165021e07b14 100644 (file)
@@ -213,6 +213,13 @@ static inline bool is_check_pages_enabled(void)
        return static_branch_unlikely(&check_pages_enabled);
 }
 
+extern int min_free_kbytes;
+
+void setup_per_zone_wmarks(void);
+void calculate_min_free_kbytes(void);
+int __meminit init_per_zone_wmark_min(void);
+void page_alloc_sysctl_init(void);
+
 /*
  * Structure for holding the mostly immutable allocation parameters passed
  * between functions involved in allocations, including the alloc_pages*
@@ -423,6 +430,10 @@ extern void *memmap_alloc(phys_addr_t size, phys_addr_t align,
                          phys_addr_t min_addr,
                          int nid, bool exact_nid);
 
+void memmap_init_range(unsigned long, int, unsigned long, unsigned long,
+               unsigned long, enum meminit_context, struct vmem_altmap *, int);
+
+
 int split_free_page(struct page *free_page,
                        unsigned int order, unsigned long split_pfn_offset);
 
index 0fd4ddfdfb2e333b9ce645365261c6d97173a1ac..10bf560302c4c8617b1252c514b07dc18f616b29 100644 (file)
@@ -2392,6 +2392,8 @@ void __init page_alloc_init_late(void)
        /* Initialize page ext after all struct pages are initialized. */
        if (deferred_struct_pages)
                page_ext_init();
+
+       page_alloc_sysctl_init();
 }
 
 #ifndef __HAVE_ARCH_RESERVED_KERNEL_PAGES
index 005aa0202ae03c8d0f34f19aac61acb010c197c5..d19a052641259dd42610865099c366a4e70f6f74 100644 (file)
@@ -206,7 +206,6 @@ nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
 };
 EXPORT_SYMBOL(node_states);
 
-int percpu_pagelist_high_fraction;
 gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK;
 
 /*
@@ -302,8 +301,8 @@ compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = {
 
 int min_free_kbytes = 1024;
 int user_min_free_kbytes = -1;
-int watermark_boost_factor __read_mostly = 15000;
-int watermark_scale_factor = 10;
+static int watermark_boost_factor __read_mostly = 15000;
+static int watermark_scale_factor = 10;
 
 /* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */
 int movable_zone;
@@ -4880,12 +4879,12 @@ static int __parse_numa_zonelist_order(char *s)
        return 0;
 }
 
-char numa_zonelist_order[] = "Node";
-
+static char numa_zonelist_order[] = "Node";
+#define NUMA_ZONELIST_ORDER_LEN        16
 /*
  * sysctl handler for numa_zonelist_order
  */
-int numa_zonelist_order_handler(struct ctl_table *table, int write,
+static int numa_zonelist_order_handler(struct ctl_table *table, int write,
                void *buffer, size_t *length, loff_t *ppos)
 {
        if (write)
@@ -4893,7 +4892,6 @@ int numa_zonelist_order_handler(struct ctl_table *table, int write,
        return proc_dostring(table, write, buffer, length, ppos);
 }
 
-
 static int node_load[MAX_NUMNODES];
 
 /**
@@ -5296,6 +5294,7 @@ static int zone_batchsize(struct zone *zone)
 #endif
 }
 
+static int percpu_pagelist_high_fraction;
 static int zone_highsize(struct zone *zone, int batch, int cpu_online)
 {
 #ifdef CONFIG_MMU
@@ -5825,7 +5824,7 @@ postcore_initcall(init_per_zone_wmark_min)
  *     that we can call two helper functions whenever min_free_kbytes
  *     changes.
  */
-int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
+static int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
                void *buffer, size_t *length, loff_t *ppos)
 {
        int rc;
@@ -5841,7 +5840,7 @@ int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
        return 0;
 }
 
-int watermark_scale_factor_sysctl_handler(struct ctl_table *table, int write,
+static int watermark_scale_factor_sysctl_handler(struct ctl_table *table, int write,
                void *buffer, size_t *length, loff_t *ppos)
 {
        int rc;
@@ -5871,7 +5870,7 @@ static void setup_min_unmapped_ratio(void)
 }
 
 
-int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *table, int write,
+static int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *table, int write,
                void *buffer, size_t *length, loff_t *ppos)
 {
        int rc;
@@ -5898,7 +5897,7 @@ static void setup_min_slab_ratio(void)
                                                     sysctl_min_slab_ratio) / 100;
 }
 
-int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write,
+static int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write,
                void *buffer, size_t *length, loff_t *ppos)
 {
        int rc;
@@ -5922,8 +5921,8 @@ int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *table, int write,
  * minimum watermarks. The lowmem reserve ratio can only make sense
  * if in function of the boot time zone sizes.
  */
-int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *table, int write,
-               void *buffer, size_t *length, loff_t *ppos)
+static int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *table,
+               int write, void *buffer, size_t *length, loff_t *ppos)
 {
        int i;
 
@@ -5943,7 +5942,7 @@ int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *table, int write,
  * cpu. It is the fraction of total pages in each zone that a hot per cpu
  * pagelist can have before it gets flushed back to buddy allocator.
  */
-int percpu_pagelist_high_fraction_sysctl_handler(struct ctl_table *table,
+static int percpu_pagelist_high_fraction_sysctl_handler(struct ctl_table *table,
                int write, void *buffer, size_t *length, loff_t *ppos)
 {
        struct zone *zone;
@@ -5976,6 +5975,82 @@ out:
        return ret;
 }
 
+static struct ctl_table page_alloc_sysctl_table[] = {
+       {
+               .procname       = "min_free_kbytes",
+               .data           = &min_free_kbytes,
+               .maxlen         = sizeof(min_free_kbytes),
+               .mode           = 0644,
+               .proc_handler   = min_free_kbytes_sysctl_handler,
+               .extra1         = SYSCTL_ZERO,
+       },
+       {
+               .procname       = "watermark_boost_factor",
+               .data           = &watermark_boost_factor,
+               .maxlen         = sizeof(watermark_boost_factor),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = SYSCTL_ZERO,
+       },
+       {
+               .procname       = "watermark_scale_factor",
+               .data           = &watermark_scale_factor,
+               .maxlen         = sizeof(watermark_scale_factor),
+               .mode           = 0644,
+               .proc_handler   = watermark_scale_factor_sysctl_handler,
+               .extra1         = SYSCTL_ONE,
+               .extra2         = SYSCTL_THREE_THOUSAND,
+       },
+       {
+               .procname       = "percpu_pagelist_high_fraction",
+               .data           = &percpu_pagelist_high_fraction,
+               .maxlen         = sizeof(percpu_pagelist_high_fraction),
+               .mode           = 0644,
+               .proc_handler   = percpu_pagelist_high_fraction_sysctl_handler,
+               .extra1         = SYSCTL_ZERO,
+       },
+       {
+               .procname       = "lowmem_reserve_ratio",
+               .data           = &sysctl_lowmem_reserve_ratio,
+               .maxlen         = sizeof(sysctl_lowmem_reserve_ratio),
+               .mode           = 0644,
+               .proc_handler   = lowmem_reserve_ratio_sysctl_handler,
+       },
+#ifdef CONFIG_NUMA
+       {
+               .procname       = "numa_zonelist_order",
+               .data           = &numa_zonelist_order,
+               .maxlen         = NUMA_ZONELIST_ORDER_LEN,
+               .mode           = 0644,
+               .proc_handler   = numa_zonelist_order_handler,
+       },
+       {
+               .procname       = "min_unmapped_ratio",
+               .data           = &sysctl_min_unmapped_ratio,
+               .maxlen         = sizeof(sysctl_min_unmapped_ratio),
+               .mode           = 0644,
+               .proc_handler   = sysctl_min_unmapped_ratio_sysctl_handler,
+               .extra1         = SYSCTL_ZERO,
+               .extra2         = SYSCTL_ONE_HUNDRED,
+       },
+       {
+               .procname       = "min_slab_ratio",
+               .data           = &sysctl_min_slab_ratio,
+               .maxlen         = sizeof(sysctl_min_slab_ratio),
+               .mode           = 0644,
+               .proc_handler   = sysctl_min_slab_ratio_sysctl_handler,
+               .extra1         = SYSCTL_ZERO,
+               .extra2         = SYSCTL_ONE_HUNDRED,
+       },
+#endif
+       {}
+};
+
+void __init page_alloc_sysctl_init(void)
+{
+       register_sysctl_init("vm", page_alloc_sysctl_table);
+}
+
 #ifdef CONFIG_CONTIG_ALLOC
 /* Usage: See admin-guide/dynamic-debug-howto.rst */
 static void alloc_contig_dump_pages(struct list_head *page_list)