diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 4c53bf42a0..5251dc0bc9 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1231,7 +1231,6 @@ virCgroupHasEmptyTasks; virCgroupKill; virCgroupKillPainfully; virCgroupKillRecursive; -virCgroupMoveTask; virCgroupNewDetect; virCgroupNewDetectMachine; virCgroupNewDomainPartition; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index fa2bdb834e..13813131f2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2220,7 +2220,7 @@ qemuProcessSetupEmulator(virDomainObjPtr vm) true, &cgroup_emulator) < 0) goto cleanup; - if (virCgroupMoveTask(priv->cgroup, cgroup_emulator) < 0) + if (virCgroupAddTask(cgroup_emulator, vm->pid) < 0) goto cleanup; diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 706d27cec3..bffd88f90a 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1223,99 +1223,6 @@ virCgroupAddTaskController(virCgroupPtr group, pid_t pid, int controller) } -static int -virCgroupAddTaskStrController(virCgroupPtr group, - const char *pidstr, - int controller) -{ - char *str = NULL, *cur = NULL, *next = NULL; - unsigned long long p = 0; - int rc = 0; - char *endp; - - if (VIR_STRDUP(str, pidstr) < 0) - return -1; - - cur = str; - while (*cur != '\0') { - if (virStrToLong_ull(cur, &endp, 10, &p) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Cannot parse '%s' as an integer"), cur); - goto cleanup; - } - - if (virCgroupAddTaskController(group, p, controller) < 0) { - /* A thread that exits between when we first read the source - * tasks and now is not fatal. */ - if (virLastErrorIsSystemErrno(ESRCH)) - virResetLastError(); - else - goto cleanup; - } - - next = strchr(cur, '\n'); - if (next) { - cur = next + 1; - *next = '\0'; - } else { - break; - } - } - - cleanup: - VIR_FREE(str); - return rc; -} - - -/** - * virCgroupMoveTask: - * - * @src_group: The source cgroup where all tasks are removed from - * @dest_group: The destination where all tasks are added to - * - * Returns: 0 on success or -1 on failure - */ -int -virCgroupMoveTask(virCgroupPtr src_group, virCgroupPtr dest_group) -{ - int ret = -1; - char *content = NULL; - size_t i; - - for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) { - if (!src_group->controllers[i].mountPoint || - !dest_group->controllers[i].mountPoint) - continue; - - /* We must never move tasks in systemd's hierarchy */ - if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) - continue; - - /* New threads are created in the same group as their parent; - * but if a thread is created after we first read we aren't - * aware that it needs to move. Therefore, we must iterate - * until content is empty. */ - while (1) { - VIR_FREE(content); - if (virCgroupGetValueStr(src_group, i, "tasks", &content) < 0) - return -1; - - if (!*content) - break; - - if (virCgroupAddTaskStrController(dest_group, content, i) < 0) - goto cleanup; - } - } - - ret = 0; - cleanup: - VIR_FREE(content); - return ret; -} - - static int virCgroupSetPartitionSuffix(const char *path, char **res) { @@ -4324,16 +4231,6 @@ virCgroupAddTaskController(virCgroupPtr group ATTRIBUTE_UNUSED, } -int -virCgroupMoveTask(virCgroupPtr src_group ATTRIBUTE_UNUSED, - virCgroupPtr dest_group ATTRIBUTE_UNUSED) -{ - virReportSystemError(ENXIO, "%s", - _("Control groups not supported on this platform")); - return -1; -} - - int virCgroupGetBlkioIoServiced(virCgroupPtr group ATTRIBUTE_UNUSED, long long *bytes_read ATTRIBUTE_UNUSED, diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index 7914cbbdaa..2ddbb350f1 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -132,9 +132,6 @@ int virCgroupAddTaskController(virCgroupPtr group, pid_t pid, int controller); -int virCgroupMoveTask(virCgroupPtr src_group, - virCgroupPtr dest_group); - int virCgroupSetBlkioWeight(virCgroupPtr group, unsigned int weight); int virCgroupGetBlkioWeight(virCgroupPtr group, unsigned int *weight);