[PATCH] qemu: do not use domain virt type to get default version

Liang Yan lyan at digitalocean.com
Thu Apr 28 13:39:34 UTC 2022


Could anyone give it a review? Thanks.

A scenario is that it will cause below error when disabled tcg from qemu 
side:

lyan at xryan:~/virt/qemu$ virsh version
Compiled against library: libvirt 8.0.0
Using library: libvirt 8.0.0
Using API: QEMU 8.0.0
error: failed to get the hypervisor version
error: internal error: Cannot find suitable emulator for x86_64

I am not sure if it is expected. From my understanding, it may not be 
reasonable,  because hypervisor could also use kvm or hvf. My first 
thought was to add more domain virt type to 
'virQEMUCapsGetDefaultVersion', but after looking into 
'virCapabilitiesDomainDataLookupInternal', I noticed that it works same 
if I set domain virt type to 'NONE', it will iterate all domains to find 
a 'emulator' and 'guest' based on 'ostype' and 'arch'. This is a version 
issue so no need to change qemu capabilities cache search logic which I 
am not quite familiar with.


Let me know if there are any problems, thanks.

Regards,

Liang


On 4/26/22 16:38, Liang Yan wrote:
> We do not need VIR_DOMAIN_VIRT_QEMU to get qemu default
> version. With the 'os_type' and 'arch'in capabilities,
> we could identify 'emulator' which is enough to get the version.
>
> Actually VIR_DOMAIN_VIRT_QEMU is not the only domain virt type for
> qemu driver, there are VIR_DOMAIN_VIRT_KVM and VIR_DOMAIN_VIRT_HVF.
> If TCG is disabled in qemu, it will cause the error that could not
> find suitable emulater when access version.
>
> Signed-off-by: Liang Yan <lyan at digtalocean.com>
> ---
>   src/qemu/qemu_capabilities.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index b91db851bb..9a0b7ebeb4 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -1857,7 +1857,7 @@ int virQEMUCapsGetDefaultVersion(virCaps *caps,
>   
>       hostarch = virArchFromHost();
>       if (!(capsdata = virCapabilitiesDomainDataLookup(caps,
> -            VIR_DOMAIN_OSTYPE_HVM, hostarch, VIR_DOMAIN_VIRT_QEMU,
> +            VIR_DOMAIN_OSTYPE_HVM, hostarch, VIR_DOMAIN_VIRT_NONE,
>               NULL, NULL))) {
>           virReportError(VIR_ERR_INTERNAL_ERROR,
>                          _("Cannot find suitable emulator for %s"),



More information about the libvir-list mailing list