mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
mm/damon/sysfs-schemes: add files for setting damos_filter->sz_range
Add min and max files for damon filters to let the userspace decide the min/max folio size to operate on. This will be needed to decide what folio sizes to give pa_stat for. Link: https://lkml.kernel.org/r/20250211124437.278873-3-usamaarif642@gmail.com Signed-off-by: Usama Arif <usamaarif642@gmail.com> Reviewed-by: SeongJae Park <sj@kernel.org> Cc: David Hildenbrand <david@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
0431c42622
commit
ea1f204ba2
|
|
@ -316,6 +316,7 @@ struct damon_sysfs_scheme_filter {
|
|||
bool allow;
|
||||
char *memcg_path;
|
||||
struct damon_addr_range addr_range;
|
||||
struct damon_size_range sz_range;
|
||||
int target_idx;
|
||||
};
|
||||
|
||||
|
|
@ -474,6 +475,44 @@ static ssize_t addr_end_store(struct kobject *kobj,
|
|||
return err ? err : count;
|
||||
}
|
||||
|
||||
static ssize_t min_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
struct damon_sysfs_scheme_filter *filter = container_of(kobj,
|
||||
struct damon_sysfs_scheme_filter, kobj);
|
||||
|
||||
return sysfs_emit(buf, "%lu\n", filter->sz_range.min);
|
||||
}
|
||||
|
||||
static ssize_t min_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct damon_sysfs_scheme_filter *filter = container_of(kobj,
|
||||
struct damon_sysfs_scheme_filter, kobj);
|
||||
int err = kstrtoul(buf, 0, &filter->sz_range.min);
|
||||
|
||||
return err ? err : count;
|
||||
}
|
||||
|
||||
static ssize_t max_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
struct damon_sysfs_scheme_filter *filter = container_of(kobj,
|
||||
struct damon_sysfs_scheme_filter, kobj);
|
||||
|
||||
return sysfs_emit(buf, "%lu\n", filter->sz_range.max);
|
||||
}
|
||||
|
||||
static ssize_t max_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct damon_sysfs_scheme_filter *filter = container_of(kobj,
|
||||
struct damon_sysfs_scheme_filter, kobj);
|
||||
int err = kstrtoul(buf, 0, &filter->sz_range.max);
|
||||
|
||||
return err ? err : count;
|
||||
}
|
||||
|
||||
static ssize_t damon_target_idx_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
|
|
@ -520,6 +559,12 @@ static struct kobj_attribute damon_sysfs_scheme_filter_addr_start_attr =
|
|||
static struct kobj_attribute damon_sysfs_scheme_filter_addr_end_attr =
|
||||
__ATTR_RW_MODE(addr_end, 0600);
|
||||
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_min_attr =
|
||||
__ATTR_RW_MODE(min, 0600);
|
||||
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_max_attr =
|
||||
__ATTR_RW_MODE(max, 0600);
|
||||
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_damon_target_idx_attr =
|
||||
__ATTR_RW_MODE(damon_target_idx, 0600);
|
||||
|
||||
|
|
@ -530,6 +575,8 @@ static struct attribute *damon_sysfs_scheme_filter_attrs[] = {
|
|||
&damon_sysfs_scheme_filter_memcg_path_attr.attr,
|
||||
&damon_sysfs_scheme_filter_addr_start_attr.attr,
|
||||
&damon_sysfs_scheme_filter_addr_end_attr.attr,
|
||||
&damon_sysfs_scheme_filter_min_attr.attr,
|
||||
&damon_sysfs_scheme_filter_max_attr.attr,
|
||||
&damon_sysfs_scheme_filter_damon_target_idx_attr.attr,
|
||||
NULL,
|
||||
};
|
||||
|
|
@ -1954,6 +2001,13 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme,
|
|||
filter->addr_range = sysfs_filter->addr_range;
|
||||
} else if (filter->type == DAMOS_FILTER_TYPE_TARGET) {
|
||||
filter->target_idx = sysfs_filter->target_idx;
|
||||
} else if (filter->type == DAMOS_FILTER_TYPE_HUGEPAGE_SIZE) {
|
||||
if (sysfs_filter->sz_range.min >
|
||||
sysfs_filter->sz_range.max) {
|
||||
damos_destroy_filter(filter);
|
||||
return -EINVAL;
|
||||
}
|
||||
filter->sz_range = sysfs_filter->sz_range;
|
||||
}
|
||||
|
||||
damos_add_filter(scheme, filter);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user