diff options
Diffstat (limited to 'kernel/ksysfs.c')
-rw-r--r-- | kernel/ksysfs.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c index 528dd78e7e7e..3feaf5a74514 100644 --- a/kernel/ksysfs.c +++ b/kernel/ksysfs.c | |||
@@ -100,6 +100,26 @@ static ssize_t kexec_crash_loaded_show(struct kobject *kobj, | |||
100 | } | 100 | } |
101 | KERNEL_ATTR_RO(kexec_crash_loaded); | 101 | KERNEL_ATTR_RO(kexec_crash_loaded); |
102 | 102 | ||
103 | static ssize_t kexec_crash_size_show(struct kobject *kobj, | ||
104 | struct kobj_attribute *attr, char *buf) | ||
105 | { | ||
106 | return sprintf(buf, "%zu\n", crash_get_memory_size()); | ||
107 | } | ||
108 | static ssize_t kexec_crash_size_store(struct kobject *kobj, | ||
109 | struct kobj_attribute *attr, | ||
110 | const char *buf, size_t count) | ||
111 | { | ||
112 | unsigned long cnt; | ||
113 | int ret; | ||
114 | |||
115 | if (strict_strtoul(buf, 0, &cnt)) | ||
116 | return -EINVAL; | ||
117 | |||
118 | ret = crash_shrink_memory(cnt); | ||
119 | return ret < 0 ? ret : count; | ||
120 | } | ||
121 | KERNEL_ATTR_RW(kexec_crash_size); | ||
122 | |||
103 | static ssize_t vmcoreinfo_show(struct kobject *kobj, | 123 | static ssize_t vmcoreinfo_show(struct kobject *kobj, |
104 | struct kobj_attribute *attr, char *buf) | 124 | struct kobj_attribute *attr, char *buf) |
105 | { | 125 | { |
@@ -147,6 +167,7 @@ static struct attribute * kernel_attrs[] = { | |||
147 | #ifdef CONFIG_KEXEC | 167 | #ifdef CONFIG_KEXEC |
148 | &kexec_loaded_attr.attr, | 168 | &kexec_loaded_attr.attr, |
149 | &kexec_crash_loaded_attr.attr, | 169 | &kexec_crash_loaded_attr.attr, |
170 | &kexec_crash_size_attr.attr, | ||
150 | &vmcoreinfo_attr.attr, | 171 | &vmcoreinfo_attr.attr, |
151 | #endif | 172 | #endif |
152 | NULL | 173 | NULL |