[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