[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