mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-11 15:14:03 +08:00
cgroup: Move cgroup_parse_float() implementation out of CONFIG_SYSFS
a5e112e642
("cgroup: add cgroup_parse_float()") accidentally added cgroup_parse_float() inside CONFIG_SYSFS block. Move it outside so that it doesn't cause failures on !CONFIG_SYSFS builds. Signed-off-by: Tejun Heo <tj@kernel.org> Fixes:a5e112e642
("cgroup: add cgroup_parse_float()")
This commit is contained in:
parent
11dc8b4011
commit
38cf3a687f
@ -6229,6 +6229,48 @@ struct cgroup *cgroup_get_from_fd(int fd)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cgroup_get_from_fd);
|
EXPORT_SYMBOL_GPL(cgroup_get_from_fd);
|
||||||
|
|
||||||
|
static u64 power_of_ten(int power)
|
||||||
|
{
|
||||||
|
u64 v = 1;
|
||||||
|
while (power--)
|
||||||
|
v *= 10;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cgroup_parse_float - parse a floating number
|
||||||
|
* @input: input string
|
||||||
|
* @dec_shift: number of decimal digits to shift
|
||||||
|
* @v: output
|
||||||
|
*
|
||||||
|
* Parse a decimal floating point number in @input and store the result in
|
||||||
|
* @v with decimal point right shifted @dec_shift times. For example, if
|
||||||
|
* @input is "12.3456" and @dec_shift is 3, *@v will be set to 12345.
|
||||||
|
* Returns 0 on success, -errno otherwise.
|
||||||
|
*
|
||||||
|
* There's nothing cgroup specific about this function except that it's
|
||||||
|
* currently the only user.
|
||||||
|
*/
|
||||||
|
int cgroup_parse_float(const char *input, unsigned dec_shift, s64 *v)
|
||||||
|
{
|
||||||
|
s64 whole, frac = 0;
|
||||||
|
int fstart = 0, fend = 0, flen;
|
||||||
|
|
||||||
|
if (!sscanf(input, "%lld.%n%lld%n", &whole, &fstart, &frac, &fend))
|
||||||
|
return -EINVAL;
|
||||||
|
if (frac < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
flen = fend > fstart ? fend - fstart : 0;
|
||||||
|
if (flen < dec_shift)
|
||||||
|
frac *= power_of_ten(dec_shift - flen);
|
||||||
|
else
|
||||||
|
frac = DIV_ROUND_CLOSEST_ULL(frac, power_of_ten(flen - dec_shift));
|
||||||
|
|
||||||
|
*v = whole * power_of_ten(dec_shift) + frac;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sock->sk_cgrp_data handling. For more info, see sock_cgroup_data
|
* sock->sk_cgrp_data handling. For more info, see sock_cgroup_data
|
||||||
* definition in cgroup-defs.h.
|
* definition in cgroup-defs.h.
|
||||||
@ -6392,46 +6434,4 @@ static int __init cgroup_sysfs_init(void)
|
|||||||
}
|
}
|
||||||
subsys_initcall(cgroup_sysfs_init);
|
subsys_initcall(cgroup_sysfs_init);
|
||||||
|
|
||||||
static u64 power_of_ten(int power)
|
|
||||||
{
|
|
||||||
u64 v = 1;
|
|
||||||
while (power--)
|
|
||||||
v *= 10;
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* cgroup_parse_float - parse a floating number
|
|
||||||
* @input: input string
|
|
||||||
* @dec_shift: number of decimal digits to shift
|
|
||||||
* @v: output
|
|
||||||
*
|
|
||||||
* Parse a decimal floating point number in @input and store the result in
|
|
||||||
* @v with decimal point right shifted @dec_shift times. For example, if
|
|
||||||
* @input is "12.3456" and @dec_shift is 3, *@v will be set to 12345.
|
|
||||||
* Returns 0 on success, -errno otherwise.
|
|
||||||
*
|
|
||||||
* There's nothing cgroup specific about this function except that it's
|
|
||||||
* currently the only user.
|
|
||||||
*/
|
|
||||||
int cgroup_parse_float(const char *input, unsigned dec_shift, s64 *v)
|
|
||||||
{
|
|
||||||
s64 whole, frac = 0;
|
|
||||||
int fstart = 0, fend = 0, flen;
|
|
||||||
|
|
||||||
if (!sscanf(input, "%lld.%n%lld%n", &whole, &fstart, &frac, &fend))
|
|
||||||
return -EINVAL;
|
|
||||||
if (frac < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
flen = fend > fstart ? fend - fstart : 0;
|
|
||||||
if (flen < dec_shift)
|
|
||||||
frac *= power_of_ten(dec_shift - flen);
|
|
||||||
else
|
|
||||||
frac = DIV_ROUND_CLOSEST_ULL(frac, power_of_ten(flen - dec_shift));
|
|
||||||
|
|
||||||
*v = whole * power_of_ten(dec_shift) + frac;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_SYSFS */
|
#endif /* CONFIG_SYSFS */
|
||||||
|
Loading…
Reference in New Issue
Block a user