Merge branch 'for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup updates from Tejun Heo: "Documentation updates and the addition of cgroup_parse_float() which will be used by new controllers including blk-iocost" * 'for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: docs: cgroup-v1: convert docs to ReST and rename to *.rst cgroup: Move cgroup_parse_float() implementation out of CONFIG_SYSFS cgroup: add cgroup_parse_float()
This commit is contained in:
@@ -6240,6 +6240,48 @@ struct cgroup *cgroup_get_from_fd(int 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
|
||||
* definition in cgroup-defs.h.
|
||||
@@ -6402,4 +6444,5 @@ static int __init cgroup_sysfs_init(void)
|
||||
return sysfs_create_group(kernel_kobj, &cgroup_sysfs_attr_group);
|
||||
}
|
||||
subsys_initcall(cgroup_sysfs_init);
|
||||
|
||||
#endif /* CONFIG_SYSFS */
|
||||
|
@@ -729,7 +729,7 @@ static inline int nr_cpusets(void)
|
||||
* load balancing domains (sched domains) as specified by that partial
|
||||
* partition.
|
||||
*
|
||||
* See "What is sched_load_balance" in Documentation/cgroup-v1/cpusets.txt
|
||||
* See "What is sched_load_balance" in Documentation/cgroup-v1/cpusets.rst
|
||||
* for a background explanation of this.
|
||||
*
|
||||
* Does not return errors, on the theory that the callers of this
|
||||
|
Reference in New Issue
Block a user