[libvirt] [PATCH v2 3/4] Wire up QEMU agent to reboot/shutdown APIs

Eric Blake eblake at redhat.com
Mon Jan 23 21:12:32 UTC 2012


On 01/23/2012 07:48 AM, Michal Privoznik wrote:

[for some reason, this one didn't get threaded properly - bug in git
send-email?]

> This makes use of the QEMU guest agent to implement the
> virDomainShutdownFlags and virDomainReboot APIs. With
> no flags specified, it will prefer to use the agent, but
> fallback to ACPI. Explicit choice can be made by using
> a suitable flag
> 
> * src/qemu/qemu_driver.c: Wire up use of agent
> ---
>  src/qemu/qemu_driver.c |  131 ++++++++++++++++++++++++++++++++++++++---------
>  1 files changed, 106 insertions(+), 25 deletions(-)
> 

> -static int qemuDomainShutdown(virDomainPtr dom) {
> +static int qemuDomainShutdownFlags(virDomainPtr dom, unsigned int flags) {
>      struct qemud_driver *driver = dom->conn->privateData;
>      virDomainObjPtr vm;
>      int ret = -1;
>      qemuDomainObjPrivatePtr priv;
> +    bool useAgent = false;
> +
> +    virCheckFlags(VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN |
> +                  VIR_DOMAIN_SHUTDOWN_GUEST_AGENT, -1);
> +
> +    if (flags &
> +        (VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN &
> +         VIR_DOMAIN_SHUTDOWN_GUEST_AGENT)) {

Won't work.  That statement is always false.

> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("Only one flag supported"));
> +        return -1;
> +    }

Back to my comment in 2/4, I'd prefer that you move this into libvirt.c
(so drivers don't have to duplicate it), where it should look like:

    /* At most one of these two flags should be set.  */
    if ((flags & VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN) &&
        (flags & VIR_DOMAIN_SHUTDOWN_GUEST_AGENT)) {
        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
        goto error;
    }

> +
> +    if (flags &
> +        (VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN &
> +         VIR_DOMAIN_SHUTDOWN_GUEST_AGENT)) {
> +        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
> +                        _("Only one flag supported"));
> +        return -1;
> +    }

Another instance of broken logic that will always be false, and which I
think belongs better in libvirt.c.

I didn't see anything else wrong in the patch, so if you fix patch 2,
then delete the two no-op hunks from patch 3, you have my ACK.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120123/5936521b/attachment-0001.sig>


More information about the libvir-list mailing list