[libvirt] [PATCH 08/11] qemu: Simplify QEMU binary search

Daniel P. Berrangé berrange at redhat.com
Mon Oct 8 12:09:31 UTC 2018


On Thu, Sep 20, 2018 at 05:25:26PM +0200, Andrea Bolognani wrote:
> Now that we have reduced the number of sensible options down
> to either the native QEMU binary or RHEL's qemu-kvm, we can
> make virQEMUCapsInitGuest() a bit simpler.
> 
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 29 +++++++----------------------
>  1 file changed, 7 insertions(+), 22 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index fd8badc60b..72fa19a2b7 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -746,7 +746,6 @@ virQEMUCapsInitGuest(virCapsPtr caps,
>                       virArch hostarch,
>                       virArch guestarch)
>  {
> -    size_t i;
>      char *binary = NULL;
>      virQEMUCapsPtr qemubinCaps = NULL;
>      int ret = -1;
> @@ -756,6 +755,13 @@ virQEMUCapsInitGuest(virCapsPtr caps,
>       */
>      binary = virQEMUCapsFindBinaryForArch(hostarch, guestarch);
>  
> +    /* RHEL doesn't follow the usual naming for QEMU binaries and ships
> +     * a single binary named qemu-kvm outside of $PATH instead */
> +    if (virQEMUCapsGuestIsNative(hostarch, guestarch) && !binary) {
> +        if (VIR_STRDUP(binary, "/usr/libexec/qemu-kvm") < 0)
> +            return -1;
> +    }
> +
>      /* Ignore binary if extracting version info fails */
>      if (binary) {
>          if (!(qemubinCaps = virQEMUCapsCacheLookup(cache, binary))) {
> @@ -764,27 +770,6 @@ virQEMUCapsInitGuest(virCapsPtr caps,
>          }
>      }
>  
> -    if (virQEMUCapsGuestIsNative(hostarch, guestarch) && !binary) {
> -        const char *kvmbins[] = {
> -            "/usr/libexec/qemu-kvm", /* RHEL */
> -        };
> -
> -        for (i = 0; i < ARRAY_CARDINALITY(kvmbins); ++i) {
> -            binary = virFindFileInPath(kvmbins[i]);
> -
> -            if (!binary)
> -                continue;
> -
> -            if (!(qemubinCaps = virQEMUCapsCacheLookup(cache, binary))) {
> -                virResetLastError();
> -                VIR_FREE(binary);
> -                continue;
> -            }
> -
> -            break;
> -        }
> -    }

This patch is doing two things. It is moving the code block earlier,
to let you drop the duplicated virQEMUCapsCacheLookup(). Second it is
removing the array iteration & just checking one single path instead.

I'd suggest we keep the array iteration, and just move the code.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list