mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
mm/damon/sysfs-schemes: add a file for setting damos_filter->allow
Only kernel-space DAMON API users can use inclusive DAMOS filters. Add a sysfs file named 'allow' under DAMOS filter directory of DAMON sysfs interface, to let the user-space users use inclusive DAMOS filters. Link: https://lkml.kernel.org/r/20250109175126.57878-7-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
e2fbfedad0
commit
faa636c0ec
@ -313,6 +313,7 @@ struct damon_sysfs_scheme_filter {
|
||||
struct kobject kobj;
|
||||
enum damos_filter_type type;
|
||||
bool matching;
|
||||
bool allow;
|
||||
char *memcg_path;
|
||||
struct damon_addr_range addr_range;
|
||||
int target_idx;
|
||||
@ -385,6 +386,30 @@ static ssize_t matching_store(struct kobject *kobj,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t allow_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, "%c\n", filter->allow ? 'Y' : 'N');
|
||||
}
|
||||
|
||||
static ssize_t allow_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);
|
||||
bool allow;
|
||||
int err = kstrtobool(buf, &allow);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
filter->allow = allow;
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t memcg_path_show(struct kobject *kobj,
|
||||
struct kobj_attribute *attr, char *buf)
|
||||
{
|
||||
@ -482,6 +507,9 @@ static struct kobj_attribute damon_sysfs_scheme_filter_type_attr =
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_matching_attr =
|
||||
__ATTR_RW_MODE(matching, 0600);
|
||||
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_allow_attr =
|
||||
__ATTR_RW_MODE(allow, 0600);
|
||||
|
||||
static struct kobj_attribute damon_sysfs_scheme_filter_memcg_path_attr =
|
||||
__ATTR_RW_MODE(memcg_path, 0600);
|
||||
|
||||
@ -497,6 +525,7 @@ static struct kobj_attribute damon_sysfs_scheme_filter_damon_target_idx_attr =
|
||||
static struct attribute *damon_sysfs_scheme_filter_attrs[] = {
|
||||
&damon_sysfs_scheme_filter_type_attr.attr,
|
||||
&damon_sysfs_scheme_filter_matching_attr.attr,
|
||||
&damon_sysfs_scheme_filter_allow_attr.attr,
|
||||
&damon_sysfs_scheme_filter_memcg_path_attr.attr,
|
||||
&damon_sysfs_scheme_filter_addr_start_attr.attr,
|
||||
&damon_sysfs_scheme_filter_addr_end_attr.attr,
|
||||
@ -1901,7 +1930,8 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme,
|
||||
sysfs_filters->filters_arr[i];
|
||||
struct damos_filter *filter =
|
||||
damos_new_filter(sysfs_filter->type,
|
||||
sysfs_filter->matching, false);
|
||||
sysfs_filter->matching,
|
||||
sysfs_filter->allow);
|
||||
int err;
|
||||
|
||||
if (!filter)
|
||||
|
Loading…
x
Reference in New Issue
Block a user