mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
mm/damon/sysfs-schemes: implement tried_regions/<r>/probes/
Implement a sysfs directory for showing the per-region probe hit counts. It is named 'probes/' and located under the DAMOS tried region directory. Link: https://lore.kernel.org/20260518234119.97569-16-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
24e969aa29
commit
b574a82d10
|
|
@ -10,6 +10,32 @@
|
|||
|
||||
#include "sysfs-common.h"
|
||||
|
||||
/*
|
||||
* probes directory
|
||||
*/
|
||||
|
||||
struct damos_sysfs_probes {
|
||||
struct kobject kobj;
|
||||
};
|
||||
|
||||
static struct damos_sysfs_probes *damos_sysfs_probes_alloc(void)
|
||||
{
|
||||
return kzalloc_obj(struct damos_sysfs_probes);
|
||||
}
|
||||
|
||||
static void damos_sysfs_probes_release(struct kobject *kobj)
|
||||
{
|
||||
struct damos_sysfs_probes *probes = container_of(kobj,
|
||||
struct damos_sysfs_probes, kobj);
|
||||
|
||||
kfree(probes);
|
||||
}
|
||||
|
||||
static const struct kobj_type damos_sysfs_probes_ktype = {
|
||||
.release = damos_sysfs_probes_release,
|
||||
.sysfs_ops = &kobj_sysfs_ops,
|
||||
};
|
||||
|
||||
/*
|
||||
* scheme region directory
|
||||
*/
|
||||
|
|
@ -20,6 +46,7 @@ struct damon_sysfs_scheme_region {
|
|||
unsigned int nr_accesses;
|
||||
unsigned int age;
|
||||
unsigned long sz_filter_passed;
|
||||
struct damos_sysfs_probes *probes;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
|
|
@ -34,10 +61,36 @@ static struct damon_sysfs_scheme_region *damon_sysfs_scheme_region_alloc(
|
|||
sysfs_region->ar = region->ar;
|
||||
sysfs_region->nr_accesses = region->nr_accesses_bp / 10000;
|
||||
sysfs_region->age = region->age;
|
||||
sysfs_region->probes = NULL;
|
||||
INIT_LIST_HEAD(&sysfs_region->list);
|
||||
return sysfs_region;
|
||||
}
|
||||
|
||||
static int damos_sysfs_region_add_dirs(
|
||||
struct damon_sysfs_scheme_region *region)
|
||||
{
|
||||
struct damos_sysfs_probes *probes = damos_sysfs_probes_alloc();
|
||||
int err;
|
||||
|
||||
if (!probes)
|
||||
return -ENOMEM;
|
||||
err = kobject_init_and_add(&probes->kobj, &damos_sysfs_probes_ktype,
|
||||
®ion->kobj, "probes");
|
||||
if (err) {
|
||||
kobject_put(&probes->kobj);
|
||||
return err;
|
||||
}
|
||||
|
||||
region->probes = probes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void damos_sysfs_region_rm_dirs(
|
||||
struct damon_sysfs_scheme_region *region)
|
||||
{
|
||||
kobject_put(®ion->probes->kobj);
|
||||
}
|
||||
|
||||
static ssize_t start_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
|
|
@ -163,6 +216,7 @@ static void damon_sysfs_scheme_regions_rm_dirs(
|
|||
struct damon_sysfs_scheme_region *r, *next;
|
||||
|
||||
list_for_each_entry_safe(r, next, ®ions->regions_list, list) {
|
||||
damos_sysfs_region_rm_dirs(r);
|
||||
list_del(&r->list);
|
||||
kobject_put(&r->kobj);
|
||||
regions->nr_regions--;
|
||||
|
|
@ -2995,12 +3049,17 @@ void damos_sysfs_populate_region_dir(struct damon_sysfs_schemes *sysfs_schemes,
|
|||
if (kobject_init_and_add(®ion->kobj,
|
||||
&damon_sysfs_scheme_region_ktype,
|
||||
&sysfs_regions->kobj, "%d",
|
||||
sysfs_regions->nr_regions)) {
|
||||
kobject_put(®ion->kobj);
|
||||
return;
|
||||
}
|
||||
sysfs_regions->nr_regions))
|
||||
goto out;
|
||||
if (damos_sysfs_region_add_dirs(region))
|
||||
goto out;
|
||||
|
||||
list_add_tail(®ion->list, &sysfs_regions->regions_list);
|
||||
sysfs_regions->nr_regions++;
|
||||
return;
|
||||
|
||||
out:
|
||||
kobject_put(®ion->kobj);
|
||||
}
|
||||
|
||||
int damon_sysfs_schemes_clear_regions(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user