|
@@ -244,24 +244,28 @@ static ssize_t single_flag_show(struct kobject *kobj,
|
|
struct kobj_attribute *attr, char *buf,
|
|
struct kobj_attribute *attr, char *buf,
|
|
enum transparent_hugepage_flag flag)
|
|
enum transparent_hugepage_flag flag)
|
|
{
|
|
{
|
|
- if (test_bit(flag, &transparent_hugepage_flags))
|
|
|
|
- return sprintf(buf, "[yes] no\n");
|
|
|
|
- else
|
|
|
|
- return sprintf(buf, "yes [no]\n");
|
|
|
|
|
|
+ return sprintf(buf, "%d\n",
|
|
|
|
+ !!test_bit(flag, &transparent_hugepage_flags));
|
|
}
|
|
}
|
|
|
|
+
|
|
static ssize_t single_flag_store(struct kobject *kobj,
|
|
static ssize_t single_flag_store(struct kobject *kobj,
|
|
struct kobj_attribute *attr,
|
|
struct kobj_attribute *attr,
|
|
const char *buf, size_t count,
|
|
const char *buf, size_t count,
|
|
enum transparent_hugepage_flag flag)
|
|
enum transparent_hugepage_flag flag)
|
|
{
|
|
{
|
|
- if (!memcmp("yes", buf,
|
|
|
|
- min(sizeof("yes")-1, count))) {
|
|
|
|
|
|
+ unsigned long value;
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ ret = kstrtoul(buf, 10, &value);
|
|
|
|
+ if (ret < 0)
|
|
|
|
+ return ret;
|
|
|
|
+ if (value > 1)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ if (value)
|
|
set_bit(flag, &transparent_hugepage_flags);
|
|
set_bit(flag, &transparent_hugepage_flags);
|
|
- } else if (!memcmp("no", buf,
|
|
|
|
- min(sizeof("no")-1, count))) {
|
|
|
|
|
|
+ else
|
|
clear_bit(flag, &transparent_hugepage_flags);
|
|
clear_bit(flag, &transparent_hugepage_flags);
|
|
- } else
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
|
|
return count;
|
|
return count;
|
|
}
|
|
}
|