mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
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.
This commit is contained in:
parent
cf9bd25655
commit
79b8c97e99
@ -1269,18 +1269,27 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver,
|
||||
"supported by this version of qemu"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* setup memory locking limits, that are necessary for VFIO */
|
||||
if (virProcessSetMaxMemLock(vm->pid,
|
||||
qemuDomainGetMlockLimitBytes(vm->def)) < 0)
|
||||
goto error;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
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)
|
||||
goto error;
|
||||
teardowncgroup = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user