[libvirt] [PATCH 07/14] Move suspend capabilities APIs out of util.h into virnodesuspend.c

Srivatsa S. Bhat srivatsa.bhat at linux.vnet.ibm.com
Tue Nov 29 18:01:30 UTC 2011


On 11/29/2011 09:14 PM, Daniel P. Berrange wrote:

> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> +
> +
> +/**
> + * virNodeSuspendSupportsTarget:
> + * @target: The power management target to check whether it is supported
> + *           by the host. Values could be:
> + *           VIR_NODE_SUSPEND_TARGET_MEM
> + *           VIR_NODE_SUSPEND_TARGET_DISK
> + *           VIR_NODE_SUSPEND_TARGET_HYBRID
> + * @supported: set to true if supported, false otherwise
> + *
> + * Run the script 'pm-is-supported' (from the pm-utils package)
> + * to find out if @target is supported by the host.
> + *
> + * Returns 0 if the query was successful, -1 on failure.
> + */
> +int
> +virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
> +{


We can mark this function as static, since it is only ever called by
virNodeSuspendGetTargetMask().

> +    virCommandPtr cmd;
> +    int status;
> +    int ret = -1;
> +
> +    *supported = false;
> +
> +    switch (target) {
> +    case VIR_NODE_SUSPEND_TARGET_MEM:
> +        cmd = virCommandNewArgList("pm-is-supported", "--suspend", NULL);
> +        break;
> +    case VIR_NODE_SUSPEND_TARGET_DISK:
> +        cmd = virCommandNewArgList("pm-is-supported", "--hibernate", NULL);
> +        break;
> +    case VIR_NODE_SUSPEND_TARGET_HYBRID:
> +        cmd = virCommandNewArgList("pm-is-supported", "--suspend-hybrid", NULL);
> +        break;
> +    default:
> +        return ret;
> +    }
> +
> +    if (virCommandRun(cmd, &status) < 0)
> +        goto cleanup;
> +
> +   /*
> +    * Check return code of command == 0 for success
> +    * (i.e., the PM capability is supported)
> +    */
> +    *supported = (status == 0);
> +    ret = 0;
> +
> +cleanup:
> +    virCommandFree(cmd);
> +    return ret;
> +}
> +
> +/**
> + * virNodeSuspendGetTargetMask:
> + *
> + * Get the Power Management Capabilities that the host system supports,
> + * such as Suspend-to-RAM (S3), Suspend-to-Disk (S4) and Hybrid-Suspend
> + * (a combination of S3 and S4).
> + *
> + * @bitmask: Pointer to the bitmask which will be set appropriately to
> + *           indicate all the supported host power management targets.
> + *
> + * Returns 0 if the query was successful, -1 on failure.
> + */
> +int
> +virNodeSuspendGetTargetMask(unsigned int *bitmask)
> +{
> +    int ret;
> +    bool supported;
> +
> +    *bitmask = 0;
> +
> +    /* Check support for Suspend-to-RAM (S3) */
> +    ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_MEM, &supported);
> +    if (ret < 0)
> +        return -1;
> +    if (supported)
> +        *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_MEM);
> +
> +    /* Check support for Suspend-to-Disk (S4) */
> +    ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_DISK, &supported);
> +    if (ret < 0)
> +        return -1;
> +    if (supported)
> +        *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_DISK);
> +
> +    /* Check support for Hybrid-Suspend */
> +    ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_HYBRID, &supported);
> +    if (ret < 0)
> +        return -1;
> +    if (supported)
> +        *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_HYBRID);
> +
> +    return 0;
> +}
> diff --git a/src/util/virnodesuspend.h b/src/util/virnodesuspend.h
> index 66e3214..1e23ce8 100644
> --- a/src/util/virnodesuspend.h
> +++ b/src/util/virnodesuspend.h
> @@ -32,5 +32,7 @@ int nodeSuspendForDuration(virConnectPtr conn,
> 
>  int virNodeSuspendInit(void);
> 
> +int virNodeSuspendSupportsTarget(unsigned int target, bool *supported);
> +int virNodeSuspendGetTargetMask(unsigned int *bitmask);
> 
>  #endif /* __VIR_NODE_SUSPEND_H__ */



-- 
Regards,
Srivatsa S. Bhat
IBM Linux Technology Center




More information about the libvir-list mailing list