Merge pull request #3905 from htejun/cgroup-v2-cpu
core: add cgroup CPU controller support on the unified hierarchy (zj: merging not squashing to make it clear against which upstream this patch was developed.)
This commit is contained in:
+45
-2
@@ -1905,6 +1905,49 @@ int cg_get_attribute(const char *controller, const char *path, const char *attri
|
||||
return read_one_line_file(p, ret);
|
||||
}
|
||||
|
||||
int cg_get_keyed_attribute(const char *controller, const char *path, const char *attribute, const char **keys, char **values) {
|
||||
_cleanup_free_ char *filename = NULL, *content = NULL;
|
||||
char *line, *p;
|
||||
int i, r;
|
||||
|
||||
for (i = 0; keys[i]; i++)
|
||||
values[i] = NULL;
|
||||
|
||||
r = cg_get_path(controller, path, attribute, &filename);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = read_full_file(filename, &content, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
p = content;
|
||||
while ((line = strsep(&p, "\n"))) {
|
||||
char *key;
|
||||
|
||||
key = strsep(&line, " ");
|
||||
|
||||
for (i = 0; keys[i]; i++) {
|
||||
if (streq(key, keys[i])) {
|
||||
values[i] = strdup(line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; keys[i]; i++) {
|
||||
if (!values[i]) {
|
||||
for (i = 0; keys[i]; i++) {
|
||||
free(values[i]);
|
||||
values[i] = NULL;
|
||||
}
|
||||
return -ENOENT;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cg_create_everywhere(CGroupMask supported, CGroupMask mask, const char *path) {
|
||||
CGroupController c;
|
||||
int r, unified;
|
||||
@@ -2101,10 +2144,10 @@ int cg_mask_supported(CGroupMask *ret) {
|
||||
mask |= CGROUP_CONTROLLER_TO_MASK(v);
|
||||
}
|
||||
|
||||
/* Currently, we only support the memory, io and pids
|
||||
/* Currently, we support the cpu, memory, io and pids
|
||||
* controller in the unified hierarchy, mask
|
||||
* everything else off. */
|
||||
mask &= CGROUP_MASK_MEMORY | CGROUP_MASK_IO | CGROUP_MASK_PIDS;
|
||||
mask &= CGROUP_MASK_CPU | CGROUP_MASK_MEMORY | CGROUP_MASK_IO | CGROUP_MASK_PIDS;
|
||||
|
||||
} else {
|
||||
CGroupController c;
|
||||
|
||||
@@ -169,6 +169,7 @@ int cg_create_and_attach(const char *controller, const char *path, pid_t pid);
|
||||
|
||||
int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value);
|
||||
int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret);
|
||||
int cg_get_keyed_attribute(const char *controller, const char *path, const char *attribute, const char **keys, char **values);
|
||||
|
||||
int cg_set_group_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid);
|
||||
int cg_set_task_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid);
|
||||
|
||||
Reference in New Issue
Block a user