Commit 91952440 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Andrew Morton

mm/demotion: move memory demotion related code

This moves memory demotion related code to mm/memory-tiers.c.  No
functional change in this patch.

Link: https://lkml.kernel.org/r/20220818131042.113280-3-aneesh.kumar@linux.ibm.comSigned-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
Acked-by: default avatarWei Xu <weixugc@google.com>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: Bharata B Rao <bharata@amd.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Hesham Almatary <hesham.almatary@huawei.com>
Cc: Jagdish Gediya <jvgediya.oss@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Tim Chen <tim.c.chen@intel.com>
Cc: Yang Shi <shy828301@gmail.com>
Cc: SeongJae Park <sj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 992bf775
...@@ -15,4 +15,12 @@ ...@@ -15,4 +15,12 @@
*/ */
#define MEMTIER_ADISTANCE_DRAM ((4 * MEMTIER_CHUNK_SIZE) + (MEMTIER_CHUNK_SIZE >> 1)) #define MEMTIER_ADISTANCE_DRAM ((4 * MEMTIER_CHUNK_SIZE) + (MEMTIER_CHUNK_SIZE >> 1))
#ifdef CONFIG_NUMA
#include <linux/types.h>
extern bool numa_demotion_enabled;
#else
#define numa_demotion_enabled false
#endif /* CONFIG_NUMA */
#endif /* _LINUX_MEMORY_TIERS_H */ #endif /* _LINUX_MEMORY_TIERS_H */
...@@ -103,7 +103,6 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, ...@@ -103,7 +103,6 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping,
#if defined(CONFIG_MIGRATION) && defined(CONFIG_NUMA) #if defined(CONFIG_MIGRATION) && defined(CONFIG_NUMA)
extern void set_migration_target_nodes(void); extern void set_migration_target_nodes(void);
extern void migrate_on_reclaim_init(void); extern void migrate_on_reclaim_init(void);
extern bool numa_demotion_enabled;
extern int next_demotion_node(int node); extern int next_demotion_node(int node);
#else #else
static inline void set_migration_target_nodes(void) {} static inline void set_migration_target_nodes(void) {}
...@@ -112,7 +111,6 @@ static inline int next_demotion_node(int node) ...@@ -112,7 +111,6 @@ static inline int next_demotion_node(int node)
{ {
return NUMA_NO_NODE; return NUMA_NO_NODE;
} }
#define numa_demotion_enabled false
#endif #endif
#ifdef CONFIG_COMPACTION #ifdef CONFIG_COMPACTION
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include <linux/nodemask.h> #include <linux/nodemask.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/lockdep.h> #include <linux/lockdep.h>
#include <linux/sysfs.h>
#include <linux/kobject.h>
#include <linux/memory-tiers.h> #include <linux/memory-tiers.h>
struct memory_tier { struct memory_tier {
...@@ -127,3 +129,65 @@ static int __init memory_tier_init(void) ...@@ -127,3 +129,65 @@ static int __init memory_tier_init(void)
return 0; return 0;
} }
subsys_initcall(memory_tier_init); subsys_initcall(memory_tier_init);
bool numa_demotion_enabled = false;
#ifdef CONFIG_MIGRATION
#ifdef CONFIG_SYSFS
static ssize_t numa_demotion_enabled_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sysfs_emit(buf, "%s\n",
numa_demotion_enabled ? "true" : "false");
}
static ssize_t numa_demotion_enabled_store(struct kobject *kobj,
struct kobj_attribute *attr,
const char *buf, size_t count)
{
ssize_t ret;
ret = kstrtobool(buf, &numa_demotion_enabled);
if (ret)
return ret;
return count;
}
static struct kobj_attribute numa_demotion_enabled_attr =
__ATTR(demotion_enabled, 0644, numa_demotion_enabled_show,
numa_demotion_enabled_store);
static struct attribute *numa_attrs[] = {
&numa_demotion_enabled_attr.attr,
NULL,
};
static const struct attribute_group numa_attr_group = {
.attrs = numa_attrs,
};
static int __init numa_init_sysfs(void)
{
int err;
struct kobject *numa_kobj;
numa_kobj = kobject_create_and_add("numa", mm_kobj);
if (!numa_kobj) {
pr_err("failed to create numa kobject\n");
return -ENOMEM;
}
err = sysfs_create_group(numa_kobj, &numa_attr_group);
if (err) {
pr_err("failed to register numa group\n");
goto delete_obj;
}
return 0;
delete_obj:
kobject_put(numa_kobj);
return err;
}
subsys_initcall(numa_init_sysfs);
#endif /* CONFIG_SYSFS */
#endif
...@@ -2590,64 +2590,6 @@ void __init migrate_on_reclaim_init(void) ...@@ -2590,64 +2590,6 @@ void __init migrate_on_reclaim_init(void)
set_migration_target_nodes(); set_migration_target_nodes();
cpus_read_unlock(); cpus_read_unlock();
} }
#endif /* CONFIG_NUMA */
bool numa_demotion_enabled = false;
#ifdef CONFIG_SYSFS
static ssize_t numa_demotion_enabled_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sysfs_emit(buf, "%s\n",
numa_demotion_enabled ? "true" : "false");
}
static ssize_t numa_demotion_enabled_store(struct kobject *kobj,
struct kobj_attribute *attr,
const char *buf, size_t count)
{
ssize_t ret;
ret = kstrtobool(buf, &numa_demotion_enabled);
if (ret)
return ret;
return count;
}
static struct kobj_attribute numa_demotion_enabled_attr =
__ATTR(demotion_enabled, 0644, numa_demotion_enabled_show,
numa_demotion_enabled_store);
static struct attribute *numa_attrs[] = {
&numa_demotion_enabled_attr.attr,
NULL,
};
static const struct attribute_group numa_attr_group = {
.attrs = numa_attrs,
};
static int __init numa_init_sysfs(void)
{
int err;
struct kobject *numa_kobj;
numa_kobj = kobject_create_and_add("numa", mm_kobj);
if (!numa_kobj) {
pr_err("failed to create numa kobject\n");
return -ENOMEM;
}
err = sysfs_create_group(numa_kobj, &numa_attr_group);
if (err) {
pr_err("failed to register numa group\n");
goto delete_obj;
}
return 0;
delete_obj:
kobject_put(numa_kobj);
return err;
}
subsys_initcall(numa_init_sysfs);
#endif /* CONFIG_SYSFS */
#endif /* CONFIG_NUMA */
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <linux/migrate.h> #include <linux/migrate.h>
#include <linux/delayacct.h> #include <linux/delayacct.h>
#include <linux/sysctl.h> #include <linux/sysctl.h>
#include <linux/memory-tiers.h>
#include <linux/oom.h> #include <linux/oom.h>
#include <linux/pagevec.h> #include <linux/pagevec.h>
#include <linux/prefetch.h> #include <linux/prefetch.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment