mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
mm: page_alloc: move sysctls into it own fils
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>
This commit is contained in:
parent
5221b5a893
commit
e95d372c4c
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
103
mm/page_alloc.c
103
mm/page_alloc.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user