[libvirt] [PATCH 1/6] bhyve: virBhyveProbeCaps: BHYVE_CAP_LPC_BOOTROM

Michal Privoznik mprivozn at redhat.com
Wed Mar 8 17:19:59 UTC 2017


On 02/12/2017 04:12 PM, Roman Bogorodskiy wrote:
> From: Fabian Freyer <fabian.freyer at physik.tu-berlin.de>
> 
> Implement the BHACE_CAP_LPC_BOOTROM capability by checking the stderr
> output of 'bhyve -l bootrom'. If the bootrom option is unsupported, this
> will contain the following output:
> 
>     bhyve: invalid lpc device configuration 'bootrom'
> 
> On newer bhyve versions that do support specifying a bootrom image, the
> standard help will be printed.
> ---
>  src/bhyve/bhyve_capabilities.c | 25 +++++++++++++++++++++++++
>  src/bhyve/bhyve_capabilities.h |  1 +
>  2 files changed, 26 insertions(+)
> 
> diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
> index 1dc0593af..13b4835a8 100644
> --- a/src/bhyve/bhyve_capabilities.c
> +++ b/src/bhyve/bhyve_capabilities.c
> @@ -239,6 +239,28 @@ bhyveProbeCapsNetE1000(unsigned int *caps, char *binary)
>      return ret;
>  }
>  
> +static int
> +bhyveProbeCapsLPC_Bootrom(unsigned int *caps, char *binary)
> +{
> +    char *error;
> +    virCommandPtr cmd = NULL;
> +    int ret = -1, exit;
> +
> +    cmd = virCommandNew(binary);
> +    virCommandAddArgList(cmd, "-l", "bootrom", NULL);
> +    virCommandSetErrorBuffer(cmd, &error);
> +    if (virCommandRun(cmd, &exit) < 0)
> +        goto cleanup;
> +
> +    if (strstr(error, "bhyve: invalid lpc device configuration 'bootrom'") == NULL)
> +        *caps |= BHYVE_CAP_LPC_BOOTROM;
> +
> + cleanup:
> +    VIR_FREE(error);
> +    virCommandFree(cmd);
> +    return ret;
> +}
> +
>  int
>  virBhyveProbeCaps(unsigned int *caps)
>  {
> @@ -260,6 +282,9 @@ virBhyveProbeCaps(unsigned int *caps)
>      if ((ret = bhyveProbeCapsNetE1000(caps, binary)))
>          goto out;
>  
> +    if ((ret = bhyveProbeCapsLPC_Bootrom(caps, binary)))
> +        goto out;
> +
>   out:
>      VIR_FREE(binary);
>      return ret;
> diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h
> index 690feadb8..746c77181 100644
> --- a/src/bhyve/bhyve_capabilities.h
> +++ b/src/bhyve/bhyve_capabilities.h
> @@ -40,6 +40,7 @@ typedef enum {
>      BHYVE_CAP_RTC_UTC = 1 << 0,
>      BHYVE_CAP_AHCI32SLOT = 1 << 1,
>      BHYVE_CAP_NET_E1000 = 1 << 2,
> +    BHYVE_CAP_LPC_BOOTROM = 1 << 3,
>  } virBhyveCapsFlags;
>  
>  int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);
> 

ACK, but we really need a better way to detect capabilites. For instance
now, bhyve binary is executed 4 times just to find out whether it
supports 4 capabilities. That's just madness. Maybe we can get in touch
with bhyve developers and ask them? Maybe it could have a monitor just
like qemu has, or something.

Michal




More information about the libvir-list mailing list