reboot: hide from sysfs not applicable settings
Not all the reboot settings from both the kernel command line or sysfs interface are available to all platforms. Filter out reboot_type and reboot_force which are x86 only, and also remove reboot_cpu on kernels without SMP support. This saves some space, and avoid confusing the user with settings which will have no effect. Link: https://lkml.kernel.org/r/20201130173717.198952-3-mcroce@linux.microsoft.com Signed-off-by: Matteo Croce <mcroce@microsoft.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
1a9d079f43
commit
40247e55ba
@ -668,6 +668,29 @@ static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||||||
}
|
}
|
||||||
static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode);
|
static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode);
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86
|
||||||
|
static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf, "%d\n", reboot_force);
|
||||||
|
}
|
||||||
|
static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
|
||||||
|
const char *buf, size_t count)
|
||||||
|
{
|
||||||
|
bool res;
|
||||||
|
|
||||||
|
if (!capable(CAP_SYS_BOOT))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
if (kstrtobool(buf, &res))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
reboot_default = 0;
|
||||||
|
reboot_force = res;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
static struct kobj_attribute reboot_force_attr = __ATTR_RW(force);
|
||||||
|
|
||||||
static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
const char *val;
|
const char *val;
|
||||||
@ -723,7 +746,9 @@ static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
static struct kobj_attribute reboot_type_attr = __ATTR_RW(type);
|
static struct kobj_attribute reboot_type_attr = __ATTR_RW(type);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
return sprintf(buf, "%d\n", reboot_cpu);
|
return sprintf(buf, "%d\n", reboot_cpu);
|
||||||
@ -751,34 +776,17 @@ static ssize_t cpu_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu);
|
static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu);
|
||||||
|
#endif
|
||||||
static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
return sprintf(buf, "%d\n", reboot_force);
|
|
||||||
}
|
|
||||||
static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|
||||||
const char *buf, size_t count)
|
|
||||||
{
|
|
||||||
bool res;
|
|
||||||
|
|
||||||
if (!capable(CAP_SYS_BOOT))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (kstrtobool(buf, &res))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
reboot_default = 0;
|
|
||||||
reboot_force = res;
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
static struct kobj_attribute reboot_force_attr = __ATTR_RW(force);
|
|
||||||
|
|
||||||
static struct attribute *reboot_attrs[] = {
|
static struct attribute *reboot_attrs[] = {
|
||||||
&reboot_mode_attr.attr,
|
&reboot_mode_attr.attr,
|
||||||
&reboot_type_attr.attr,
|
#ifdef CONFIG_X86
|
||||||
&reboot_cpu_attr.attr,
|
|
||||||
&reboot_force_attr.attr,
|
&reboot_force_attr.attr,
|
||||||
|
&reboot_type_attr.attr,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
&reboot_cpu_attr.attr,
|
||||||
|
#endif
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user