vircgroup: introduce virCgroupAddThread

Once we introduce cgroup v2 support we need to handle processes and
threads differently.

Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Pavel Hrdina 2018-09-25 00:54:04 +02:00
parent 36c5989c54
commit 7b526ea57c
4 changed files with 35 additions and 1 deletions

View File

@ -1500,6 +1500,7 @@ virBufferVasprintf;
# util/vircgroup.h
virCgroupAddMachineProcess;
virCgroupAddProcess;
virCgroupAddThread;
virCgroupAllowAllDevices;
virCgroupAllowDevice;
virCgroupAllowDevicePath;

View File

@ -2549,7 +2549,7 @@ qemuProcessSetupPid(virDomainObjPtr vm,
goto cleanup;
/* Move the thread to the sub dir */
if (virCgroupAddProcess(cgroup, pid) < 0)
if (virCgroupAddThread(cgroup, pid) < 0)
goto cleanup;
}

View File

@ -1160,6 +1160,10 @@ typedef enum {
/* Same as VIR_CGROUP_TASK_PROCESS but it also adds the task to systemd
* named controller. */
VIR_CGROUP_TASK_SYSTEMD = 1 << 1,
/* Moves only specific thread into cgroup except to systemd
* named controller. */
VIR_CGROUP_TASK_THREAD = 1 << 2,
} virCgroupTaskFlags;
@ -1228,6 +1232,24 @@ virCgroupAddMachineProcess(virCgroupPtr group, pid_t pid)
VIR_CGROUP_TASK_SYSTEMD);
}
/**
* virCgroupAddThread:
*
* @group: The cgroup to add a thread to
* @pid: The pid of the thread to add
*
* Will add the thread to all controllers, except the
* systemd unit controller.
*
* Returns: 0 on success, -1 on error
*/
int
virCgroupAddThread(virCgroupPtr group,
pid_t pid)
{
return virCgroupAddTaskInternal(group, pid, VIR_CGROUP_TASK_THREAD);
}
static int
virCgroupSetPartitionSuffix(const char *path, char **res)
@ -4229,6 +4251,16 @@ virCgroupAddMachineProcess(virCgroupPtr group ATTRIBUTE_UNUSED,
}
int
virCgroupAddThread(virCgroupPtr group ATTRIBUTE_UNUSED,
pid_t pid 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,

View File

@ -120,6 +120,7 @@ int virCgroupPathOfController(virCgroupPtr group,
int virCgroupAddProcess(virCgroupPtr group, pid_t pid);
int virCgroupAddMachineProcess(virCgroupPtr group, pid_t pid);
int virCgroupAddThread(virCgroupPtr group, pid_t pid);
int virCgroupSetBlkioWeight(virCgroupPtr group, unsigned int weight);
int virCgroupGetBlkioWeight(virCgroupPtr group, unsigned int *weight);