diff options
-rw-r--r-- | init/Kconfig | 7 | ||||
-rw-r--r-- | mm/memcontrol.c | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig index 4cdd1049283c..a2aa49cfb8bd 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1006,6 +1006,13 @@ config MEMCG help Provides control over the memory footprint of tasks in a cgroup. +config MEMCG_NMI_UNSAFE + bool + depends on MEMCG + depends on HAVE_NMI + depends on !ARCH_HAS_NMI_SAFE_THIS_CPU_OPS && !ARCH_HAVE_NMI_SAFE_CMPXCHG + default y + config MEMCG_V1 bool "Legacy cgroup v1 memory controller" depends on MEMCG diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 35db91fddd1f..2532cc2316ee 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2650,6 +2650,9 @@ __always_inline struct obj_cgroup *current_obj_cgroup(void) struct mem_cgroup *memcg; struct obj_cgroup *objcg; + if (IS_ENABLED(CONFIG_MEMCG_NMI_UNSAFE) && in_nmi()) + return NULL; + if (in_task()) { memcg = current->active_memcg; if (unlikely(memcg)) |