Lines Matching full:region

21 	 * @ref: References keeping the region alive.
22 * Keeps the region reference alive after a succesful RCU lookup.
36 * @pools: List of pools linked to this region.
41 /** @size: Size of region, in bytes */
48 * @unregistered: Whether the region is unregistered by its caller.
49 * No new pools should be added to the region afterwards.
61 struct dmem_cgroup_region *region; member
64 /* css node, RCU protected against region teardown */
79 * - Registering and unregistering region to/from list, requires global lock.
81 * - Adding a dmem_cgroup_pool_state to a region list.
199 find_cg_pool_locked(struct dmemcg_state *dmemcs, struct dmem_cgroup_region *region) in find_cg_pool_locked() argument
204 if (pool->region == region) in find_cg_pool_locked()
236 if (pool->region == limit_pool->region) { in dmem_cgroup_calculate_protection()
320 alloc_pool_single(struct dmemcg_state *dmemcs, struct dmem_cgroup_region *region, in alloc_pool_single() argument
335 pool->region = region; in alloc_pool_single()
339 ppool = find_cg_pool_locked(parent, region); in alloc_pool_single()
346 list_add_tail(&pool->region_node, &region->pools); in alloc_pool_single()
356 get_cg_pool_locked(struct dmemcg_state *dmemcs, struct dmem_cgroup_region *region, in get_cg_pool_locked() argument
367 pool = find_cg_pool_locked(p, region); in get_cg_pool_locked()
369 pool = alloc_pool_single(p, region, allocpool); in get_cg_pool_locked()
381 retpool = pool = find_cg_pool_locked(dmemcs, region); in get_cg_pool_locked()
387 ppool = find_cg_pool_locked(pp, region); in get_cg_pool_locked()
401 struct dmem_cgroup_region *region = container_of(rcu, typeof(*region), rcu); in dmemcg_free_rcu() local
404 list_for_each_entry_safe(pool, next, &region->pools, region_node) in dmemcg_free_rcu()
406 kfree(region->name); in dmemcg_free_rcu()
407 kfree(region); in dmemcg_free_rcu()
418 * dmem_cgroup_unregister_region() - Unregister a previously registered region.
419 * @region: The region to unregister.
423 void dmem_cgroup_unregister_region(struct dmem_cgroup_region *region) in dmem_cgroup_unregister_region() argument
427 if (!region) in dmem_cgroup_unregister_region()
432 /* Remove from global region list */ in dmem_cgroup_unregister_region()
433 list_del_rcu(&region->region_node); in dmem_cgroup_unregister_region()
435 list_for_each_rcu(entry, &region->pools) { in dmem_cgroup_unregister_region()
444 * no new pools should be added to the dead region in dmem_cgroup_unregister_region()
447 region->unregistered = true; in dmem_cgroup_unregister_region()
450 kref_put(&region->ref, dmemcg_free_region); in dmem_cgroup_unregister_region()
456 * @size: Size of region to register, in bytes.
457 * @fmt: Region parameters to register
460 * name given. After calling this function, the region can be
501 struct dmem_cgroup_region *region; in dmemcg_get_region_by_name() local
503 list_for_each_entry_rcu(region, &dmem_cgroup_regions, region_node, spin_is_locked(&dmemcg_lock)) in dmemcg_get_region_by_name()
504 if (!strcmp(name, region->name) && in dmemcg_get_region_by_name()
505 kref_get_unless_zero(&region->ref)) in dmemcg_get_region_by_name()
506 return region; in dmemcg_get_region_by_name()
526 get_cg_pool_unlocked(struct dmemcg_state *cg, struct dmem_cgroup_region *region) in get_cg_pool_unlocked() argument
532 pool = find_cg_pool_locked(cg, region); in get_cg_pool_unlocked()
539 if (!region->unregistered) in get_cg_pool_unlocked()
540 pool = get_cg_pool_locked(cg, region, &allocpool); in get_cg_pool_unlocked()
582 * dmem_cgroup_try_charge() - Try charging a new allocation to a region.
583 * @region: dmem region to charge
588 * This function charges the @region region for a size of @size bytes.
600 int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size, in dmem_cgroup_try_charge() argument
619 pool = get_cg_pool_unlocked(cg, region); in dmem_cgroup_try_charge()
646 struct dmem_cgroup_region *region; in dmem_cgroup_region_capacity_show() local
649 list_for_each_entry_rcu(region, &dmem_cgroup_regions, region_node) { in dmem_cgroup_region_capacity_show()
650 seq_puts(sf, region->name); in dmem_cgroup_region_capacity_show()
651 seq_printf(sf, " %llu\n", region->size); in dmem_cgroup_region_capacity_show()
657 static int dmemcg_parse_limit(char *options, struct dmem_cgroup_region *region, in dmemcg_parse_limit() argument
684 struct dmem_cgroup_region *region; in dmemcg_limit_write() local
703 region = dmemcg_get_region_by_name(region_name); in dmemcg_limit_write()
706 if (!region) in dmemcg_limit_write()
709 err = dmemcg_parse_limit(options, region, &new_limit); in dmemcg_limit_write()
713 pool = get_cg_pool_unlocked(dmemcs, region); in dmemcg_limit_write()
723 kref_put(&region->ref, dmemcg_free_region); in dmemcg_limit_write()
734 struct dmem_cgroup_region *region; in dmemcg_limit_show() local
737 list_for_each_entry_rcu(region, &dmem_cgroup_regions, region_node) { in dmemcg_limit_show()
738 struct dmem_cgroup_pool_state *pool = find_cg_pool_locked(dmemcs, region); in dmemcg_limit_show()
741 seq_puts(sf, region->name); in dmemcg_limit_show()