mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
![Chunguang Xu](/assets/img/avatar_default.png)
Introduce misc.events to make it easier for us to understand the pressure of resources. Currently only the 'max' event is implemented, which indicates the times the resource is about to exceeds the max limit. Signed-off-by: Chunguang Xu <brookxu@tencent.com> Reviewed-by: Vipin Sharma <vipinsh@google.com> Reviewed-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org>
137 lines
3 KiB
C
137 lines
3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Miscellaneous cgroup controller.
|
|
*
|
|
* Copyright 2020 Google LLC
|
|
* Author: Vipin Sharma <vipinsh@google.com>
|
|
*/
|
|
#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;
|
|
bool failed;
|
|
};
|
|
|
|
/**
|
|
* 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_ */
|