Skip to content

Commit d332fe1

Browse files
sjp38akpm00
authored andcommitted
mm/damon/sysfs: move unsigned long range directory to common module
The implementation of unsigned long type range directories can be reused by multiple DAMON sysfs directories including those for DAMON-based Operation Schemes and the range of number of monitoring regions. Move the code into the files for DAMON sysfs common logics. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: SeongJae Park <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 3924059 commit d332fe1

File tree

3 files changed

+109
-100
lines changed

3 files changed

+109
-100
lines changed

mm/damon/sysfs-common.c

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,103 @@
55
* Author: SeongJae Park <[email protected]>
66
*/
77

8+
#include <linux/slab.h>
9+
810
#include "sysfs-common.h"
911

1012
DEFINE_MUTEX(damon_sysfs_lock);
1113

14+
/*
15+
* unsigned long range directory
16+
*/
17+
18+
struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
19+
unsigned long min,
20+
unsigned long max)
21+
{
22+
struct damon_sysfs_ul_range *range = kmalloc(sizeof(*range),
23+
GFP_KERNEL);
24+
25+
if (!range)
26+
return NULL;
27+
range->kobj = (struct kobject){};
28+
range->min = min;
29+
range->max = max;
30+
31+
return range;
32+
}
33+
34+
static ssize_t min_show(struct kobject *kobj, struct kobj_attribute *attr,
35+
char *buf)
36+
{
37+
struct damon_sysfs_ul_range *range = container_of(kobj,
38+
struct damon_sysfs_ul_range, kobj);
39+
40+
return sysfs_emit(buf, "%lu\n", range->min);
41+
}
42+
43+
static ssize_t min_store(struct kobject *kobj, struct kobj_attribute *attr,
44+
const char *buf, size_t count)
45+
{
46+
struct damon_sysfs_ul_range *range = container_of(kobj,
47+
struct damon_sysfs_ul_range, kobj);
48+
unsigned long min;
49+
int err;
50+
51+
err = kstrtoul(buf, 0, &min);
52+
if (err)
53+
return err;
54+
55+
range->min = min;
56+
return count;
57+
}
58+
59+
static ssize_t max_show(struct kobject *kobj, struct kobj_attribute *attr,
60+
char *buf)
61+
{
62+
struct damon_sysfs_ul_range *range = container_of(kobj,
63+
struct damon_sysfs_ul_range, kobj);
64+
65+
return sysfs_emit(buf, "%lu\n", range->max);
66+
}
67+
68+
static ssize_t max_store(struct kobject *kobj, struct kobj_attribute *attr,
69+
const char *buf, size_t count)
70+
{
71+
struct damon_sysfs_ul_range *range = container_of(kobj,
72+
struct damon_sysfs_ul_range, kobj);
73+
unsigned long max;
74+
int err;
75+
76+
err = kstrtoul(buf, 0, &max);
77+
if (err)
78+
return err;
79+
80+
range->max = max;
81+
return count;
82+
}
83+
84+
void damon_sysfs_ul_range_release(struct kobject *kobj)
85+
{
86+
kfree(container_of(kobj, struct damon_sysfs_ul_range, kobj));
87+
}
88+
89+
static struct kobj_attribute damon_sysfs_ul_range_min_attr =
90+
__ATTR_RW_MODE(min, 0600);
91+
92+
static struct kobj_attribute damon_sysfs_ul_range_max_attr =
93+
__ATTR_RW_MODE(max, 0600);
94+
95+
static struct attribute *damon_sysfs_ul_range_attrs[] = {
96+
&damon_sysfs_ul_range_min_attr.attr,
97+
&damon_sysfs_ul_range_max_attr.attr,
98+
NULL,
99+
};
100+
ATTRIBUTE_GROUPS(damon_sysfs_ul_range);
101+
102+
struct kobj_type damon_sysfs_ul_range_ktype = {
103+
.release = damon_sysfs_ul_range_release,
104+
.sysfs_ops = &kobj_sysfs_ops,
105+
.default_groups = damon_sysfs_ul_range_groups,
106+
};
107+

mm/damon/sysfs-common.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,16 @@
99
#include <linux/kobject.h>
1010

1111
extern struct mutex damon_sysfs_lock;
12+
13+
struct damon_sysfs_ul_range {
14+
struct kobject kobj;
15+
unsigned long min;
16+
unsigned long max;
17+
};
18+
19+
struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
20+
unsigned long min,
21+
unsigned long max);
22+
void damon_sysfs_ul_range_release(struct kobject *kobj);
23+
24+
extern struct kobj_type damon_sysfs_ul_range_ktype;

mm/damon/sysfs.c

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -11,106 +11,6 @@
1111

1212
#include "sysfs-common.h"
1313

14-
/*
15-
* unsigned long range directory
16-
*/
17-
18-
struct damon_sysfs_ul_range {
19-
struct kobject kobj;
20-
unsigned long min;
21-
unsigned long max;
22-
};
23-
24-
static struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
25-
unsigned long min,
26-
unsigned long max)
27-
{
28-
struct damon_sysfs_ul_range *range = kmalloc(sizeof(*range),
29-
GFP_KERNEL);
30-
31-
if (!range)
32-
return NULL;
33-
range->kobj = (struct kobject){};
34-
range->min = min;
35-
range->max = max;
36-
37-
return range;
38-
}
39-
40-
static ssize_t min_show(struct kobject *kobj, struct kobj_attribute *attr,
41-
char *buf)
42-
{
43-
struct damon_sysfs_ul_range *range = container_of(kobj,
44-
struct damon_sysfs_ul_range, kobj);
45-
46-
return sysfs_emit(buf, "%lu\n", range->min);
47-
}
48-
49-
static ssize_t min_store(struct kobject *kobj, struct kobj_attribute *attr,
50-
const char *buf, size_t count)
51-
{
52-
struct damon_sysfs_ul_range *range = container_of(kobj,
53-
struct damon_sysfs_ul_range, kobj);
54-
unsigned long min;
55-
int err;
56-
57-
err = kstrtoul(buf, 0, &min);
58-
if (err)
59-
return err;
60-
61-
range->min = min;
62-
return count;
63-
}
64-
65-
static ssize_t max_show(struct kobject *kobj, struct kobj_attribute *attr,
66-
char *buf)
67-
{
68-
struct damon_sysfs_ul_range *range = container_of(kobj,
69-
struct damon_sysfs_ul_range, kobj);
70-
71-
return sysfs_emit(buf, "%lu\n", range->max);
72-
}
73-
74-
static ssize_t max_store(struct kobject *kobj, struct kobj_attribute *attr,
75-
const char *buf, size_t count)
76-
{
77-
struct damon_sysfs_ul_range *range = container_of(kobj,
78-
struct damon_sysfs_ul_range, kobj);
79-
unsigned long max;
80-
int err;
81-
82-
err = kstrtoul(buf, 0, &max);
83-
if (err)
84-
return err;
85-
86-
range->max = max;
87-
return count;
88-
}
89-
90-
static void damon_sysfs_ul_range_release(struct kobject *kobj)
91-
{
92-
kfree(container_of(kobj, struct damon_sysfs_ul_range, kobj));
93-
}
94-
95-
static struct kobj_attribute damon_sysfs_ul_range_min_attr =
96-
__ATTR_RW_MODE(min, 0600);
97-
98-
static struct kobj_attribute damon_sysfs_ul_range_max_attr =
99-
__ATTR_RW_MODE(max, 0600);
100-
101-
static struct attribute *damon_sysfs_ul_range_attrs[] = {
102-
&damon_sysfs_ul_range_min_attr.attr,
103-
&damon_sysfs_ul_range_max_attr.attr,
104-
NULL,
105-
};
106-
ATTRIBUTE_GROUPS(damon_sysfs_ul_range);
107-
108-
static struct kobj_type damon_sysfs_ul_range_ktype = {
109-
.release = damon_sysfs_ul_range_release,
110-
.sysfs_ops = &kobj_sysfs_ops,
111-
.default_groups = damon_sysfs_ul_range_groups,
112-
};
113-
11414
/*
11515
* schemes/stats directory
11616
*/

0 commit comments

Comments
 (0)