[libvirt PATCH] qemu: fix memlock without vIOMMU
Laine Stump
laine at redhat.com
Fri Nov 18 21:39:07 UTC 2022
On 11/17/22 3:13 PM, Jonathon Jongsma wrote:
> When there is no vIOMMU, vfio devices don't need to lock the entire guest
> memory per-device, but they still need to lock the entire guest memory to
> share between all vfio devices. This memory accounting is not shared
> with vDPA devices, so it should be added to the memlock limit separately.
>
> Commit 8d5704e2 added support for multiple vfio/vdpa devices but
> calculated the limits incorrectly when there were both vdpa and vfio
> devices and no vIOMMU. In this case, the memory lock limit was not
> increased separately for the vfio devices.
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2111317
>
> Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> ---
> src/qemu/qemu_domain.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index ef1a9c8c74..8ae458ae45 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -9470,10 +9470,14 @@ qemuDomainGetMemLockLimitBytes(virDomainDef *def,
> */
> int factor = nvdpa;
>
> - if (def->iommu)
> - factor += nvfio;
> + if (nvfio || forceVFIO) {
> + if (nvfio && def->iommu)
> + factor += nvfio;
> + else
> + factor += 1;
> + }
>
> - memKB = MAX(factor, 1) * virDomainDefGetMemoryTotal(def) + 1024 * 1024;
> + memKB = factor * virDomainDefGetMemoryTotal(def) + 1024 * 1024;
> }
>
> return memKB << 10;
Reviewed-by: Laine Stump <laine at redhat.com>
More information about the libvir-list
mailing list