提交 79b8c97e 编写于 作者: A Andrea Bolognani

qemu: Use qemuDomainRequiresMlock() when attaching PCI hostdev

The function is used everywhere else to check whether the locked
memory limit should be set / updated, and it should be used here
as well.

Moreover, qemuDomainGetMlockLimitBytes() expects the hostdev to
have already been added to the domain definition, but we only do
that at the end of qemuDomainAttachHostPCIDevice(). Work around
the issue by adding the hostdev before adjusting the locked memory
limit and removing it immediately afterwards.
上级 cf9bd256
...@@ -1269,18 +1269,27 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, ...@@ -1269,18 +1269,27 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver,
"supported by this version of qemu")); "supported by this version of qemu"));
goto error; goto error;
} }
/* setup memory locking limits, that are necessary for VFIO */
if (virProcessSetMaxMemLock(vm->pid,
qemuDomainGetMlockLimitBytes(vm->def)) < 0)
goto error;
break; break;
default: default:
break; break;
} }
/* Temporarily add the hostdev to the domain definition. This is needed
* because qemuDomainRequiresMlock() and qemuDomainGetMlockLimitBytes()
* require the hostdev to be already part of the domain definition, but
* other functions like qemuAssignDeviceHostdevAlias() used below expect
* it *not* to be there. A better way to handle this would be nice */
vm->def->hostdevs[vm->def->nhostdevs++] = hostdev;
if (qemuDomainRequiresMlock(vm->def)) {
if (virProcessSetMaxMemLock(vm->pid,
qemuDomainGetMlockLimitBytes(vm->def)) < 0) {
vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL;
goto error;
}
}
vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL;
if (qemuSetupHostdevCGroup(vm, hostdev) < 0) if (qemuSetupHostdevCGroup(vm, hostdev) < 0)
goto error; goto error;
teardowncgroup = true; teardowncgroup = true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册