Cgroup Kernel APIs

Device Memory Cgroup API (dmemcg)

bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool, struct dmem_cgroup_pool_state *test_pool, bool ignore_low, bool *ret_hit_low)

Check if we should evict from test_pool

Parameters

struct dmem_cgroup_pool_state *limit_pool

The pool for which we hit limits

struct dmem_cgroup_pool_state *test_pool

The pool for which to test

bool ignore_low

Whether we have to respect low watermarks.

bool *ret_hit_low

Pointer to whether it makes sense to consider low watermark.

Description

This function returns true if we can evict from test_pool, false if not. When returning false and ignore_low is false, ret_hit_low may be set to true to indicate this function can be retried with ignore_low set to true.

Return

bool

void dmem_cgroup_unregister_region(struct dmem_cgroup_region *region)

Unregister a previously registered region.

Parameters

struct dmem_cgroup_region *region

The region to unregister.

Description

This function undoes dmem_cgroup_register_region.

struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *fmt, ...)

Register a regions for dev cgroup.

Parameters

u64 size

Size of region to register, in bytes.

const char *fmt

Region parameters to register

...

variable arguments

Description

This function registers a node in the dmem cgroup with the name given. After calling this function, the region can be used for allocations.

Return

NULL or a struct on success, PTR_ERR on failure.

void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool)

Drop a reference to a dmem_cgroup_pool_state

Parameters

struct dmem_cgroup_pool_state *pool

dmem_cgroup_pool_state

Description

Called to drop a reference to the limiting pool returned by dmem_cgroup_try_charge().

void dmem_cgroup_uncharge(struct dmem_cgroup_pool_state *pool, u64 size)

Uncharge a pool.

Parameters

struct dmem_cgroup_pool_state *pool

Pool to uncharge.

u64 size

Size to uncharge.

Description

Undoes the effects of dmem_cgroup_try_charge. Must be called with the returned pool as argument, and same index and size.

int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size, struct dmem_cgroup_pool_state **ret_pool, struct dmem_cgroup_pool_state **ret_limit_pool)

Try charging a new allocation to a region.

Parameters

struct dmem_cgroup_region *region

dmem region to charge

u64 size

Size (in bytes) to charge.

struct dmem_cgroup_pool_state **ret_pool

On succesfull allocation, the pool that is charged.

struct dmem_cgroup_pool_state **ret_limit_pool

On a failed allocation, the limiting pool.

Description

This function charges the region region for a size of size bytes.

If the function succeeds, ret_pool is set, which must be passed to dmem_cgroup_uncharge() when undoing the allocation.

When this function fails with -EAGAIN and ret_limit_pool is non-null, it will be set to the pool for which the limit is hit. This can be used for eviction as argument to dmem_cgroup_evict_valuable(). This reference must be freed with dmem_cgroup_pool_state_put().

Return

0 on success, -EAGAIN on hitting a limit, or a negative errno on failure.