aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/memcontrol.h5
-rw-r--r--mm/memcontrol.c13
-rw-r--r--mm/oom_kill.c1
-rw-r--r--mm/page_alloc.c1
4 files changed, 20 insertions, 0 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 8c0f15e5978fa5..966f7c1a0128f3 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -1764,6 +1764,7 @@ static inline void count_objcg_events(struct obj_cgroup *objcg,
bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid);
+void mem_cgroup_show_protected_memory(struct mem_cgroup *memcg);
#else
static inline bool mem_cgroup_kmem_disabled(void)
{
@@ -1830,6 +1831,10 @@ static inline bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid)
{
return true;
}
+
+static inline void mem_cgroup_show_protected_memory(struct mem_cgroup *memcg)
+{
+}
#endif /* CONFIG_MEMCG */
#if defined(CONFIG_MEMCG) && defined(CONFIG_ZSWAP)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 025da46d9959fd..bfc986da3289a7 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5635,3 +5635,16 @@ bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid)
{
return memcg ? cpuset_node_allowed(memcg->css.cgroup, nid) : true;
}
+
+void mem_cgroup_show_protected_memory(struct mem_cgroup *memcg)
+{
+ if (mem_cgroup_disabled() || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
+ return;
+
+ if (!memcg)
+ memcg = root_mem_cgroup;
+
+ pr_warn("Memory cgroup min protection %lukB -- low protection %lukB",
+ K(atomic_long_read(&memcg->memory.children_min_usage)*PAGE_SIZE),
+ K(atomic_long_read(&memcg->memory.children_low_usage)*PAGE_SIZE));
+}
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index c145b0feecc1f2..5eb11fbba70432 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -472,6 +472,7 @@ static void dump_header(struct oom_control *oc)
if (should_dump_unreclaim_slab())
dump_unreclaimable_slab();
}
+ mem_cgroup_show_protected_memory(oc->memcg);
if (sysctl_oom_dump_tasks)
dump_tasks(oc);
}
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e4efda1158b250..26be5734253f35 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3977,6 +3977,7 @@ static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask)
filter &= ~SHOW_MEM_FILTER_NODES;
__show_mem(filter, nodemask, gfp_zone(gfp_mask));
+ mem_cgroup_show_protected_memory(NULL);
}
void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...)