|
@@ -53,6 +53,7 @@ enum memcg_memory_event {
|
|
|
MEMCG_HIGH,
|
|
|
MEMCG_MAX,
|
|
|
MEMCG_OOM,
|
|
|
+ MEMCG_OOM_KILL,
|
|
|
MEMCG_SWAP_MAX,
|
|
|
MEMCG_SWAP_FAIL,
|
|
|
MEMCG_NR_MEMORY_EVENTS,
|
|
@@ -720,11 +721,8 @@ static inline void count_memcg_event_mm(struct mm_struct *mm,
|
|
|
|
|
|
rcu_read_lock();
|
|
|
memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
|
|
|
- if (likely(memcg)) {
|
|
|
+ if (likely(memcg))
|
|
|
count_memcg_events(memcg, idx, 1);
|
|
|
- if (idx == OOM_KILL)
|
|
|
- cgroup_file_notify(&memcg->events_file);
|
|
|
- }
|
|
|
rcu_read_unlock();
|
|
|
}
|
|
|
|
|
@@ -735,6 +733,21 @@ static inline void memcg_memory_event(struct mem_cgroup *memcg,
|
|
|
cgroup_file_notify(&memcg->events_file);
|
|
|
}
|
|
|
|
|
|
+static inline void memcg_memory_event_mm(struct mm_struct *mm,
|
|
|
+ enum memcg_memory_event event)
|
|
|
+{
|
|
|
+ struct mem_cgroup *memcg;
|
|
|
+
|
|
|
+ if (mem_cgroup_disabled())
|
|
|
+ return;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+ memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
|
|
|
+ if (likely(memcg))
|
|
|
+ memcg_memory_event(memcg, event);
|
|
|
+ rcu_read_unlock();
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
void mem_cgroup_split_huge_fixup(struct page *head);
|
|
|
#endif
|
|
@@ -756,6 +769,11 @@ static inline void memcg_memory_event(struct mem_cgroup *memcg,
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+static inline void memcg_memory_event_mm(struct mm_struct *mm,
|
|
|
+ enum memcg_memory_event event)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
static inline enum mem_cgroup_protection mem_cgroup_protected(
|
|
|
struct mem_cgroup *root, struct mem_cgroup *memcg)
|
|
|
{
|