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

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@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"), -- 2.34.1

Could anyone give it a review? Thanks. A scenario is that it will cause below error when disabled tcg from qemu side: lyan@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@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"),

Hi Cole, I saw you are the last one working on this part, even quite long time ago, :-) Could you give it a quick review? I just want to know the if small change messed something else, or maybe not worth to change it. Thanks, Liang On 4/28/22 09:39, Liang Yan wrote:
Could anyone give it a review? Thanks.
A scenario is that it will cause below error when disabled tcg from qemu side:
lyan@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@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"),

On 4/26/22 22: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@digtalocean.com> --- src/qemu/qemu_capabilities.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> and pushed. Congratulations on your first libvirt contribution! Michal
participants (2)
-
Liang Yan
-
Michal Prívozník