mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
mm/damon/sysfs-schemes: decouple from damos_wmark_metric
Decouple DAMOS sysfs interface from damos_wmark_metric. For this, define and use new sysfs-schemes internal data structure that maps the user-space keywords and damos_wmark_metric, instead of having the implicit and unflexible array index rule. Link: https://lkml.kernel.org/r/20250622213759.50930-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
2bbf41ee98
commit
041f54604f
@ -785,10 +785,21 @@ static struct damon_sysfs_watermarks *damon_sysfs_watermarks_alloc(
|
||||
return watermarks;
|
||||
}
|
||||
|
||||
/* Should match with enum damos_wmark_metric */
|
||||
static const char * const damon_sysfs_wmark_metric_strs[] = {
|
||||
"none",
|
||||
"free_mem_rate",
|
||||
struct damos_sysfs_wmark_metric_name {
|
||||
enum damos_wmark_metric metric;
|
||||
char *name;
|
||||
};
|
||||
|
||||
static const struct damos_sysfs_wmark_metric_name
|
||||
damos_sysfs_wmark_metric_names[] = {
|
||||
{
|
||||
.metric = DAMOS_WMARK_NONE,
|
||||
.name = "none",
|
||||
},
|
||||
{
|
||||
.metric = DAMOS_WMARK_FREE_MEM_RATE,
|
||||
.name = "free_mem_rate",
|
||||
},
|
||||
};
|
||||
|
||||
static ssize_t metric_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
@ -796,9 +807,16 @@ static ssize_t metric_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
{
|
||||
struct damon_sysfs_watermarks *watermarks = container_of(kobj,
|
||||
struct damon_sysfs_watermarks, kobj);
|
||||
int i;
|
||||
|
||||
return sysfs_emit(buf, "%s\n",
|
||||
damon_sysfs_wmark_metric_strs[watermarks->metric]);
|
||||
for (i = 0; i < ARRAY_SIZE(damos_sysfs_wmark_metric_names); i++) {
|
||||
const struct damos_sysfs_wmark_metric_name *metric_name;
|
||||
|
||||
metric_name = &damos_sysfs_wmark_metric_names[i];
|
||||
if (metric_name->metric == watermarks->metric)
|
||||
return sysfs_emit(buf, "%s\n", metric_name->name);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static ssize_t metric_store(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
@ -806,11 +824,14 @@ static ssize_t metric_store(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
{
|
||||
struct damon_sysfs_watermarks *watermarks = container_of(kobj,
|
||||
struct damon_sysfs_watermarks, kobj);
|
||||
enum damos_wmark_metric metric;
|
||||
int i;
|
||||
|
||||
for (metric = 0; metric < NR_DAMOS_WMARK_METRICS; metric++) {
|
||||
if (sysfs_streq(buf, damon_sysfs_wmark_metric_strs[metric])) {
|
||||
watermarks->metric = metric;
|
||||
for (i = 0; i < ARRAY_SIZE(damos_sysfs_wmark_metric_names); i++) {
|
||||
const struct damos_sysfs_wmark_metric_name *metric_name;
|
||||
|
||||
metric_name = &damos_sysfs_wmark_metric_names[i];
|
||||
if (sysfs_streq(buf, metric_name->name)) {
|
||||
watermarks->metric = metric_name->metric;
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user