mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 14:52:05 +00:00
mm/damon/sysfs: implement a kdamond command for updating schemes' effective quotas
Implement yet another kdamond 'state' file input command, namely 'update_schemes_effective_quotas'. If it is written, the 'effective_bytes' files of the kdamond will be updated to provide the current effective size quota of each scheme in bytes. Link: https://lkml.kernel.org/r/20240219194431.159606-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
6813131578
commit
c71f8a710c
@ -61,3 +61,7 @@ int damon_sysfs_schemes_clear_regions(
|
||||
|
||||
void damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes,
|
||||
struct damon_ctx *ctx);
|
||||
|
||||
void damos_sysfs_update_effective_quotas(
|
||||
struct damon_sysfs_schemes *sysfs_schemes,
|
||||
struct damon_ctx *ctx);
|
||||
|
@ -1930,6 +1930,26 @@ void damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes,
|
||||
}
|
||||
}
|
||||
|
||||
void damos_sysfs_update_effective_quotas(
|
||||
struct damon_sysfs_schemes *sysfs_schemes,
|
||||
struct damon_ctx *ctx)
|
||||
{
|
||||
struct damos *scheme;
|
||||
int schemes_idx = 0;
|
||||
|
||||
damon_for_each_scheme(scheme, ctx) {
|
||||
struct damon_sysfs_quotas *sysfs_quotas;
|
||||
|
||||
/* user could have removed the scheme sysfs dir */
|
||||
if (schemes_idx >= sysfs_schemes->nr)
|
||||
break;
|
||||
|
||||
sysfs_quotas =
|
||||
sysfs_schemes->schemes_arr[schemes_idx++]->quotas;
|
||||
sysfs_quotas->effective_sz = scheme->quota.esz;
|
||||
}
|
||||
}
|
||||
|
||||
static struct damos *damon_sysfs_mk_scheme(
|
||||
struct damon_sysfs_scheme *sysfs_scheme)
|
||||
{
|
||||
|
@ -1019,6 +1019,11 @@ enum damon_sysfs_cmd {
|
||||
* regions
|
||||
*/
|
||||
DAMON_SYSFS_CMD_CLEAR_SCHEMES_TRIED_REGIONS,
|
||||
/*
|
||||
* @DAMON_SYSFS_CMD_UPDATE_SCHEMES_EFFECTIVE_QUOTAS: Update the
|
||||
* effective size quota of the scheme in bytes.
|
||||
*/
|
||||
DAMON_SYSFS_CMD_UPDATE_SCHEMES_EFFECTIVE_QUOTAS,
|
||||
/*
|
||||
* @NR_DAMON_SYSFS_CMDS: Total number of DAMON sysfs commands.
|
||||
*/
|
||||
@ -1035,6 +1040,7 @@ static const char * const damon_sysfs_cmd_strs[] = {
|
||||
"update_schemes_tried_bytes",
|
||||
"update_schemes_tried_regions",
|
||||
"clear_schemes_tried_regions",
|
||||
"update_schemes_effective_quotas",
|
||||
};
|
||||
|
||||
/*
|
||||
@ -1375,6 +1381,29 @@ static int damon_sysfs_commit_schemes_quota_goals(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* damon_sysfs_upd_schemes_effective_quotas() - Update schemes effective quotas
|
||||
* sysfs files.
|
||||
* @kdamond: The kobject wrapper that associated to the kdamond thread.
|
||||
*
|
||||
* This function reads the schemes' effective quotas of specific kdamond and
|
||||
* update the related values for sysfs files. This function should be called
|
||||
* from DAMON callbacks while holding ``damon_syfs_lock``, to safely access the
|
||||
* DAMON contexts-internal data and DAMON sysfs variables.
|
||||
*/
|
||||
static int damon_sysfs_upd_schemes_effective_quotas(
|
||||
struct damon_sysfs_kdamond *kdamond)
|
||||
{
|
||||
struct damon_ctx *ctx = kdamond->damon_ctx;
|
||||
|
||||
if (!ctx)
|
||||
return -EINVAL;
|
||||
damos_sysfs_update_effective_quotas(
|
||||
kdamond->contexts->contexts_arr[0]->schemes, ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* damon_sysfs_cmd_request_callback() - DAMON callback for handling requests.
|
||||
* @c: The DAMON context of the callback.
|
||||
@ -1437,6 +1466,9 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c, bool active,
|
||||
case DAMON_SYSFS_CMD_CLEAR_SCHEMES_TRIED_REGIONS:
|
||||
err = damon_sysfs_clear_schemes_regions(kdamond);
|
||||
break;
|
||||
case DAMON_SYSFS_CMD_UPDATE_SCHEMES_EFFECTIVE_QUOTAS:
|
||||
err = damon_sysfs_upd_schemes_effective_quotas(kdamond);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user