[libvirt] [PATCH v3] Introduce --without-pm-utils to get rid of pm-is-supported dependency

Daniel P. Berrange berrange at redhat.com
Wed Apr 2 13:52:43 UTC 2014


On Wed, Apr 02, 2014 at 03:35:51PM +0200, Cédric Bosdonnat wrote:
> This uses the dbus api of systemd to check the power management
> capabilities of the node.
> ---
>  Diff with v2:
>    * Fixed a few dbus call problems
> 
>  configure.ac              | 11 +++++++++
>  libvirt.spec.in           |  9 ++++++++
>  src/libvirt_private.syms  |  3 +++
>  src/util/virnodesuspend.c | 32 +++++++++++++++++++++++++
>  src/util/virsystemd.c     | 59 +++++++++++++++++++++++++++++++++++++++++++++++
>  src/util/virsystemd.h     |  6 +++++
>  6 files changed, 120 insertions(+)

Could you also add a test to  tests/virsystemdtest.c to exercuse
these hekper APIs.

> diff --git a/src/util/virnodesuspend.c b/src/util/virnodesuspend.c
> index 8088931..ba4a338 100644
> --- a/src/util/virnodesuspend.c
> +++ b/src/util/virnodesuspend.c
> @@ -22,6 +22,9 @@
>  #include <config.h>
>  #include "virnodesuspend.h"
>  
> +#ifndef WITH_PM_UTILS
> +# include "virsystemd.h"
> +#endif
>  #include "vircommand.h"
>  #include "virthread.h"
>  #include "datatypes.h"
> @@ -260,6 +263,7 @@ int nodeSuspendForDuration(unsigned int target,
>   *
>   * Returns 0 if the query was successful, -1 on failure.
>   */
> +#ifdef WITH_PM_UTILS
>  static int
>  virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
>  {
> @@ -300,6 +304,34 @@ virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
>      virCommandFree(cmd);
>      return ret;
>  }
> +#else /* ! WITH_PM_UTILS */
> +static int
> +virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
> +{
> +    int ret = -1;
> +
> +    if (virNodeSuspendInitialize() < 0)
> +        return -1;
> +
> +    *supported = false;
> +
> +    switch (target) {
> +    case VIR_NODE_SUSPEND_TARGET_MEM:
> +        ret = virSystemdCanSuspend(supported);
> +        break;
> +    case VIR_NODE_SUSPEND_TARGET_DISK:
> +        ret = virSystemdCanHibernate(supported);
> +        break;
> +    case VIR_NODE_SUSPEND_TARGET_HYBRID:
> +        ret = virSystemdCanHybridSleep(supported);
> +        break;
> +    default:
> +        return ret;
> +    }
> +
> +    return ret;
> +}
> +#endif /* WITH_PM_UTILS */

Rather than having a hardcoded choice of pm-utils vs systemd
I think we should check if the systemd service is running and
if so use it, otherwise fallback to pm-utils. That way if 
someone has systemd installed, but is not running it as their
init, things would still work


Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list