提交 900a38f0 编写于 作者: V Vladimir Davydov 提交者: Linus Torvalds

memcg: zap kmem_account_flags

The only such flag is KMEM_ACCOUNTED_ACTIVE, but it's set iff
mem_cgroup->kmemcg_id is initialized, so we can check kmemcg_id instead of
having a separate flags field.
Signed-off-by: NVladimir Davydov <vdavydov@parallels.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 c313dc5d
...@@ -296,7 +296,6 @@ struct mem_cgroup { ...@@ -296,7 +296,6 @@ struct mem_cgroup {
* Should the accounting and control be hierarchical, per subtree? * Should the accounting and control be hierarchical, per subtree?
*/ */
bool use_hierarchy; bool use_hierarchy;
unsigned long kmem_account_flags; /* See KMEM_ACCOUNTED_*, below */
bool oom_lock; bool oom_lock;
atomic_t under_oom; atomic_t under_oom;
...@@ -366,22 +365,11 @@ struct mem_cgroup { ...@@ -366,22 +365,11 @@ struct mem_cgroup {
/* WARNING: nodeinfo must be the last member here */ /* WARNING: nodeinfo must be the last member here */
}; };
/* internal only representation about the status of kmem accounting. */
enum {
KMEM_ACCOUNTED_ACTIVE, /* accounted by this cgroup itself */
};
#ifdef CONFIG_MEMCG_KMEM #ifdef CONFIG_MEMCG_KMEM
static inline void memcg_kmem_set_active(struct mem_cgroup *memcg)
{
set_bit(KMEM_ACCOUNTED_ACTIVE, &memcg->kmem_account_flags);
}
static bool memcg_kmem_is_active(struct mem_cgroup *memcg) static bool memcg_kmem_is_active(struct mem_cgroup *memcg)
{ {
return test_bit(KMEM_ACCOUNTED_ACTIVE, &memcg->kmem_account_flags); return memcg->kmemcg_id >= 0;
} }
#endif #endif
/* Stuffs for move charges at task migration. */ /* Stuffs for move charges at task migration. */
...@@ -3564,23 +3552,21 @@ static int memcg_activate_kmem(struct mem_cgroup *memcg, ...@@ -3564,23 +3552,21 @@ static int memcg_activate_kmem(struct mem_cgroup *memcg,
goto out; goto out;
} }
memcg->kmemcg_id = memcg_id;
INIT_LIST_HEAD(&memcg->memcg_slab_caches);
/* /*
* We couldn't have accounted to this cgroup, because it hasn't got the * We couldn't have accounted to this cgroup, because it hasn't got
* active bit set yet, so this should succeed. * activated yet, so this should succeed.
*/ */
err = page_counter_limit(&memcg->kmem, nr_pages); err = page_counter_limit(&memcg->kmem, nr_pages);
VM_BUG_ON(err); VM_BUG_ON(err);
static_key_slow_inc(&memcg_kmem_enabled_key); static_key_slow_inc(&memcg_kmem_enabled_key);
/* /*
* Setting the active bit after enabling static branching will * A memory cgroup is considered kmem-active as soon as it gets
* kmemcg_id. Setting the id after enabling static branching will
* guarantee no one starts accounting before all call sites are * guarantee no one starts accounting before all call sites are
* patched. * patched.
*/ */
memcg_kmem_set_active(memcg); memcg->kmemcg_id = memcg_id;
out: out:
return err; return err;
} }
...@@ -4252,7 +4238,6 @@ static int memcg_init_kmem(struct mem_cgroup *memcg, struct cgroup_subsys *ss) ...@@ -4252,7 +4238,6 @@ static int memcg_init_kmem(struct mem_cgroup *memcg, struct cgroup_subsys *ss)
{ {
int ret; int ret;
memcg->kmemcg_id = -1;
ret = memcg_propagate_kmem(memcg); ret = memcg_propagate_kmem(memcg);
if (ret) if (ret)
return ret; return ret;
...@@ -4786,6 +4771,10 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) ...@@ -4786,6 +4771,10 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
vmpressure_init(&memcg->vmpressure); vmpressure_init(&memcg->vmpressure);
INIT_LIST_HEAD(&memcg->event_list); INIT_LIST_HEAD(&memcg->event_list);
spin_lock_init(&memcg->event_list_lock); spin_lock_init(&memcg->event_list_lock);
#ifdef CONFIG_MEMCG_KMEM
memcg->kmemcg_id = -1;
INIT_LIST_HEAD(&memcg->memcg_slab_caches);
#endif
return &memcg->css; return &memcg->css;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册