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 |
