Lines Matching refs:objcg
258 struct obj_cgroup *objcg = container_of(ref, struct obj_cgroup, refcnt); in obj_cgroup_release() local
284 nr_bytes = atomic_read(&objcg->nr_charged_bytes); in obj_cgroup_release()
289 memcg = obj_cgroup_memcg(objcg); in obj_cgroup_release()
292 list_del(&objcg->list); in obj_cgroup_release()
297 kfree_rcu(objcg, rcu); in obj_cgroup_release()
302 struct obj_cgroup *objcg; in obj_cgroup_alloc() local
305 objcg = kzalloc(sizeof(struct obj_cgroup), GFP_KERNEL); in obj_cgroup_alloc()
306 if (!objcg) in obj_cgroup_alloc()
309 ret = percpu_ref_init(&objcg->refcnt, obj_cgroup_release, 0, in obj_cgroup_alloc()
312 kfree(objcg); in obj_cgroup_alloc()
315 INIT_LIST_HEAD(&objcg->list); in obj_cgroup_alloc()
316 return objcg; in obj_cgroup_alloc()
322 struct obj_cgroup *objcg, *iter; in memcg_reparent_objcgs() local
324 objcg = rcu_replace_pointer(memcg->objcg, NULL, true); in memcg_reparent_objcgs()
329 xchg(&objcg->memcg, parent); in memcg_reparent_objcgs()
331 list_add(&objcg->list, &parent->objcg_list); in memcg_reparent_objcgs()
343 percpu_ref_kill(&objcg->refcnt); in memcg_reparent_objcgs()
2983 struct obj_cgroup *objcg; in mem_cgroup_from_obj() local
2987 objcg = page_obj_cgroups(page)[off]; in mem_cgroup_from_obj()
2988 if (objcg) in mem_cgroup_from_obj()
2989 return obj_cgroup_memcg(objcg); in mem_cgroup_from_obj()
3000 struct obj_cgroup *objcg = NULL; in get_obj_cgroup_from_current() local
3013 objcg = rcu_dereference(memcg->objcg); in get_obj_cgroup_from_current()
3014 if (objcg && obj_cgroup_tryget(objcg)) in get_obj_cgroup_from_current()
3016 objcg = NULL; in get_obj_cgroup_from_current()
3020 return objcg; in get_obj_cgroup_from_current()
3164 static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) in consume_obj_stock() argument
3173 if (objcg == stock->cached_objcg && stock->nr_bytes >= nr_bytes) { in consume_obj_stock()
3240 static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes) in refill_obj_stock() argument
3248 if (stock->cached_objcg != objcg) { /* reset if necessary */ in refill_obj_stock()
3250 obj_cgroup_get(objcg); in refill_obj_stock()
3251 stock->cached_objcg = objcg; in refill_obj_stock()
3252 stock->nr_bytes = atomic_xchg(&objcg->nr_charged_bytes, 0); in refill_obj_stock()
3262 int obj_cgroup_charge(struct obj_cgroup *objcg, gfp_t gfp, size_t size) in obj_cgroup_charge() argument
3268 if (consume_obj_stock(objcg, size)) in obj_cgroup_charge()
3283 memcg = obj_cgroup_memcg(objcg); in obj_cgroup_charge()
3296 refill_obj_stock(objcg, PAGE_SIZE - nr_bytes); in obj_cgroup_charge()
3302 void obj_cgroup_uncharge(struct obj_cgroup *objcg, size_t size) in obj_cgroup_uncharge() argument
3304 refill_obj_stock(objcg, size); in obj_cgroup_uncharge()
3726 struct obj_cgroup *objcg; in memcg_online_kmem() local
3739 objcg = obj_cgroup_alloc(); in memcg_online_kmem()
3740 if (!objcg) { in memcg_online_kmem()
3744 objcg->memcg = memcg; in memcg_online_kmem()
3745 rcu_assign_pointer(memcg->objcg, objcg); in memcg_online_kmem()