提交 dc7de8b9 编写于 作者: M Marc-André Lureau 提交者: Cole Robinson

qemu: start/stop the vhost-user-gpu external device

Each vhost-user-gpu needs its own helper gpu process.
Start/stop them, and apply the emulator cgroup controller.
Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: NCole Robinson <crobinso@redhat.com>
上级 638f066b
...@@ -162,6 +162,16 @@ qemuExtDevicesStart(virQEMUDriverPtr driver, ...@@ -162,6 +162,16 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
if (qemuExtDevicesInitPaths(driver, vm->def) < 0) if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
return -1; return -1;
for (i = 0; i < vm->def->nvideos; i++) {
virDomainVideoDefPtr video = vm->def->videos[i];
if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
ret = qemuExtVhostUserGPUStart(driver, vm, video);
if (ret < 0)
return ret;
}
}
if (vm->def->tpm) if (vm->def->tpm)
ret = qemuExtTPMStart(driver, vm, incomingMigration); ret = qemuExtTPMStart(driver, vm, incomingMigration);
...@@ -185,10 +195,17 @@ qemuExtDevicesStop(virQEMUDriverPtr driver, ...@@ -185,10 +195,17 @@ qemuExtDevicesStop(virQEMUDriverPtr driver,
virDomainDefPtr def = vm->def; virDomainDefPtr def = vm->def;
size_t i; size_t i;
if (qemuExtDevicesInitPaths(driver, vm->def) < 0) if (qemuExtDevicesInitPaths(driver, def) < 0)
return; return;
if (vm->def->tpm) for (i = 0; i < def->nvideos; i++) {
virDomainVideoDefPtr video = def->videos[i];
if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER)
qemuExtVhostUserGPUStop(driver, vm, video);
}
if (def->tpm)
qemuExtTPMStop(driver, vm); qemuExtTPMStop(driver, vm);
for (i = 0; i < def->nnets; i++) { for (i = 0; i < def->nnets; i++) {
...@@ -204,6 +221,13 @@ qemuExtDevicesStop(virQEMUDriverPtr driver, ...@@ -204,6 +221,13 @@ qemuExtDevicesStop(virQEMUDriverPtr driver,
bool bool
qemuExtDevicesHasDevice(virDomainDefPtr def) qemuExtDevicesHasDevice(virDomainDefPtr def)
{ {
size_t i;
for (i = 0; i < def->nvideos; i++) {
if (def->videos[i]->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER)
return true;
}
if (def->tpm && def->tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR) if (def->tpm && def->tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR)
return true; return true;
...@@ -216,10 +240,19 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver, ...@@ -216,10 +240,19 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
virDomainDefPtr def, virDomainDefPtr def,
virCgroupPtr cgroup) virCgroupPtr cgroup)
{ {
int ret = 0; size_t i;
if (def->tpm) for (i = 0; i < def->nvideos; i++) {
ret = qemuExtTPMSetupCgroup(driver, def, cgroup); virDomainVideoDefPtr video = def->videos[i];
return ret; if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER &&
qemuExtVhostUserGPUSetupCgroup(driver, def, video, cgroup) < 0)
return -1;
}
if (def->tpm &&
qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
return -1;
return 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册