[libvirt] [PATCH v1 1/4] bhyve: detect 32 SATA devices per controller support
Laine Stump
laine at laine.org
Tue Jan 24 15:31:40 UTC 2017
On 01/05/2017 09:46 AM, Roman Bogorodskiy wrote:
> From: Fabian Freyer<fabian.freyer at physik.tu-berlin.de>
>
> Introduce a BHYVE_CAP_AHCI32SLOT capability that shows
> if 32 devices per SATA controller are supported, and
> a bhyveProbeCapsAHCI32Slot function that probes it.
> ---
> src/bhyve/bhyve_capabilities.c | 59 +++++++++++++++++++++++++++++++++++-------
> src/bhyve/bhyve_capabilities.h | 3 ++-
> 2 files changed, 52 insertions(+), 10 deletions(-)
>
> diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
> index 10c33b9d7..83e3ae1b4 100644
> --- a/src/bhyve/bhyve_capabilities.c
> +++ b/src/bhyve/bhyve_capabilities.c
> @@ -168,19 +168,13 @@ virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps)
> return ret;
> }
>
> -int
> -virBhyveProbeCaps(unsigned int *caps)
> +static int
> +bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> {
> - char *binary, *help;
> + char *help;
> virCommandPtr cmd = NULL;
> int ret = 0, exit;
>
> - binary = virFindFileInPath("bhyve");
> - if (binary == NULL)
> - goto out;
> - if (!virFileIsExecutable(binary))
> - goto out;
> -
> cmd = virCommandNew(binary);
> virCommandAddArg(cmd, "-h");
> virCommandSetErrorBuffer(cmd, &help);
> @@ -195,6 +189,53 @@ virBhyveProbeCaps(unsigned int *caps)
> out:
> VIR_FREE(help);
> virCommandFree(cmd);
> + return ret;
> +}
> +
> +static int
> +bhyveProbeCapsAHCI32Slot(unsigned int *caps, char *binary)
> +{
> + char *error;
> + virCommandPtr cmd = NULL;
> + int ret = 0, exit;
> +
> + cmd = virCommandNew(binary);
> + virCommandAddArgList(cmd, "-s", "0,ahci", NULL);
> + virCommandSetErrorBuffer(cmd, &error);
Too bad there isn't some way you could learn both of these with a single
run of the binary.
> + if (virCommandRun(cmd, &exit) < 0) {
> + ret = -1;
> + goto out;
> + }
> +
> + if (strstr(error, "pci slot 0:0: unknown device \"ahci\"") == NULL)
> + *caps |= BHYVE_CAP_AHCI32SLOT;
That seems like a fairly fragile check. Are you certain there aren't
older versions where the error string is different?
Anyway, lacking any better check, ACK.
> +
> + out:
> + VIR_FREE(error);
> + virCommandFree(cmd);
> + return ret;
> +}
> +
> +
> +int
> +virBhyveProbeCaps(unsigned int *caps)
> +{
> + char *binary;
> + int ret = 0;
> +
> + binary = virFindFileInPath("bhyve");
> + if (binary == NULL)
> + goto out;
> + if (!virFileIsExecutable(binary))
> + goto out;
> +
> + if ((ret = bhyveProbeCapsRTC_UTC(caps, binary)))
> + goto out;
> +
> + if ((ret = bhyveProbeCapsAHCI32Slot(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 8e7646dfa..55581bd68 100644
> --- a/src/bhyve/bhyve_capabilities.h
> +++ b/src/bhyve/bhyve_capabilities.h
> @@ -37,7 +37,8 @@ typedef enum {
> } virBhyveGrubCapsFlags;
>
> typedef enum {
> - BHYVE_CAP_RTC_UTC = 1,
> + BHYVE_CAP_RTC_UTC = 1 << 0,
> + BHYVE_CAP_AHCI32SLOT = 1 << 1,
> } virBhyveCapsFlags;
>
> int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170124/e14fecd9/attachment-0001.htm>
More information about the libvir-list
mailing list