123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Miscellaneous cgroup controller.
- *
- * Copyright 2020 Google LLC
- * Author: Vipin Sharma <[email protected]>
- */
- #ifndef _MISC_CGROUP_H_
- #define _MISC_CGROUP_H_
- /**
- * Types of misc cgroup entries supported by the host.
- */
- enum misc_res_type {
- #ifdef CONFIG_KVM_AMD_SEV
- /* AMD SEV ASIDs resource */
- MISC_CG_RES_SEV,
- /* AMD SEV-ES ASIDs resource */
- MISC_CG_RES_SEV_ES,
- #endif
- MISC_CG_RES_TYPES
- };
- struct misc_cg;
- #ifdef CONFIG_CGROUP_MISC
- #include <linux/cgroup.h>
- /**
- * struct misc_res: Per cgroup per misc type resource
- * @max: Maximum limit on the resource.
- * @usage: Current usage of the resource.
- * @failed: True if charged failed for the resource in a cgroup.
- */
- struct misc_res {
- unsigned long max;
- atomic_long_t usage;
- atomic_long_t events;
- };
- /**
- * struct misc_cg - Miscellaneous controller's cgroup structure.
- * @css: cgroup subsys state object.
- * @res: Array of misc resources usage in the cgroup.
- */
- struct misc_cg {
- struct cgroup_subsys_state css;
- /* misc.events */
- struct cgroup_file events_file;
- struct misc_res res[MISC_CG_RES_TYPES];
- };
- unsigned long misc_cg_res_total_usage(enum misc_res_type type);
- int misc_cg_set_capacity(enum misc_res_type type, unsigned long capacity);
- int misc_cg_try_charge(enum misc_res_type type, struct misc_cg *cg,
- unsigned long amount);
- void misc_cg_uncharge(enum misc_res_type type, struct misc_cg *cg,
- unsigned long amount);
- /**
- * css_misc() - Get misc cgroup from the css.
- * @css: cgroup subsys state object.
- *
- * Context: Any context.
- * Return:
- * * %NULL - If @css is null.
- * * struct misc_cg* - misc cgroup pointer of the passed css.
- */
- static inline struct misc_cg *css_misc(struct cgroup_subsys_state *css)
- {
- return css ? container_of(css, struct misc_cg, css) : NULL;
- }
- /*
- * get_current_misc_cg() - Find and get the misc cgroup of the current task.
- *
- * Returned cgroup has its ref count increased by 1. Caller must call
- * put_misc_cg() to return the reference.
- *
- * Return: Misc cgroup to which the current task belongs to.
- */
- static inline struct misc_cg *get_current_misc_cg(void)
- {
- return css_misc(task_get_css(current, misc_cgrp_id));
- }
- /*
- * put_misc_cg() - Put the misc cgroup and reduce its ref count.
- * @cg - cgroup to put.
- */
- static inline void put_misc_cg(struct misc_cg *cg)
- {
- if (cg)
- css_put(&cg->css);
- }
- #else /* !CONFIG_CGROUP_MISC */
- static inline unsigned long misc_cg_res_total_usage(enum misc_res_type type)
- {
- return 0;
- }
- static inline int misc_cg_set_capacity(enum misc_res_type type,
- unsigned long capacity)
- {
- return 0;
- }
- static inline int misc_cg_try_charge(enum misc_res_type type,
- struct misc_cg *cg,
- unsigned long amount)
- {
- return 0;
- }
- static inline void misc_cg_uncharge(enum misc_res_type type,
- struct misc_cg *cg,
- unsigned long amount)
- {
- }
- static inline struct misc_cg *get_current_misc_cg(void)
- {
- return NULL;
- }
- static inline void put_misc_cg(struct misc_cg *cg)
- {
- }
- #endif /* CONFIG_CGROUP_MISC */
- #endif /* _MISC_CGROUP_H_ */
|