From: xu xin <xu.xin16@xxxxxxxxxx> Add a sysfs interface of ksmd_status to show some details related with auto-mode. Signed-off-by: xu xin <xu.xin16@xxxxxxxxxx> Signed-off-by: CGEL <cgel.zte@xxxxxxxxx> --- mm/ksm.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mm/ksm.c b/mm/ksm.c index 78819b56efec..6417bc034a3d 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -3070,6 +3070,29 @@ static ssize_t run_store(struct kobject *kobj, struct kobj_attribute *attr, } KSM_ATTR(run); +static ssize_t ksmd_status_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + int len = 0; + + if (ksm_run & KSM_RUN_AUTO) { + len += sysfs_emit_at(buf, len, "mode: auto\n"); + len += sysfs_emit_at(buf, len, "auto_triggered %d\n", + auto_triggered); + len += sysfs_emit_at(buf, len, "scanning_factor: %u\n", + scanning_factor); + } else if (ksm_run & KSM_RUN_MERGE) + len += sysfs_emit_at(buf, len, "mode: on\n"); + else if (ksm_run & KSM_RUN_UNMERGE) + len += sysfs_emit_at(buf, len, "mode: unmerge\n"); + else + len += sysfs_emit_at(buf, len, "mode: off\n"); + + + return len; +} +KSM_ATTR_RO(ksmd_status); + static ssize_t max_scanning_factor_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { @@ -3332,6 +3355,7 @@ static struct attribute *ksm_attrs[] = { &sleep_millisecs_attr.attr, &pages_to_scan_attr.attr, &run_attr.attr, + &ksmd_status_attr.attr, &max_scanning_factor_attr.attr, &auto_threshold_percent_attr.attr, &pages_shared_attr.attr, -- 2.25.1