[libvirt] [PATCH v4 3/4] Implement the core API to suspend/resume the host
Srivatsa S. Bhat
srivatsa.bhat at linux.vnet.ibm.com
Mon Nov 28 17:46:38 UTC 2011
On 11/28/2011 05:50 PM, Daniel P. Berrange wrote:
> On Mon, Nov 28, 2011 at 05:33:22PM +0530, Srivatsa S. Bhat wrote:
>> Add the core functions that implement the functionality of the API.
>> Suspend is done by using an asynchronous mechanism so that we can return
>> the status to the caller before the host gets suspended. This asynchronous
>> operation is achieved by suspending the host in a separate thread of
>> execution. However, returning the status to the caller is only best-effort,
>> but not guaranteed.
>>
>> To resume the host, an RTC alarm is set up (based on how long we want to
>> suspend) before suspending the host. When this alarm fires, the host gets
>> woken up.
>>
>> Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat at linux.vnet.ibm.com>
>> ---
>>
>> src/libvirt_private.syms | 7 +
>> src/nodeinfo.c | 245 ++++++++++++++++++++++++++++++++++++++++++++++
>> src/nodeinfo.h | 9 ++
>> src/qemu/qemu_driver.c | 4 +
>> 4 files changed, 265 insertions(+), 0 deletions(-)
>
>
>> +
>> + virSuspendUnlock();
>> +
>> + /* Check if the host supports the requested suspend state */
>> + switch (state) {
>> + case VIR_NODE_S3:
>> + if (hostPMFeatures & VIR_NODE_S3) {
>> + cmdString = strdup("pm-suspend");
>> + if (cmdString == NULL) {
>> + virReportOOMError();
>> + goto cleanup;
>> + }
>> + break;
>> + }
>> + goto cleanup;
>
> Needs to report an error, VIR_ERR_OPERATION_UNSUPPORTED
>
Ok, then I will define VIR_ERR_OPERATION_UNSUPPORTED in
src/util/virterror.c and use it, since it is not there at
present. And that definition should be in a separate,
self-contained patch right?
>> +
>> + case VIR_NODE_S4:
>> + if (hostPMFeatures & VIR_NODE_S4) {
>> + cmdString = strdup("pm-hibernate");
>> + if (cmdString == NULL) {
>> + virReportOOMError();
>> + goto cleanup;
>> + }
>> + break;
>> + }
>> + goto cleanup;
>
> Needs to report an error, VIR_ERR_OPERATION_UNSUPPORTED
>
>> +
>> + case VIR_NODE_HYBRID_SUSPEND:
>> + if (hostPMFeatures & VIR_NODE_HYBRID_SUSPEND) {
>> + cmdString = strdup("pm-suspend-hybrid");
>> + if (cmdString == NULL) {
>> + virReportOOMError();
>> + goto cleanup;
>> + }
>> + break;
>> + }
>> + goto cleanup;
>
> Needs to report an error, VIR_ERR_OPERATION_UNSUPPORTED
>
>> +
>> + default:
>> + goto cleanup;
>
> Needs to report an error, VIR_ERR_INVALID_ARG
--
Regards,
Srivatsa S. Bhat
IBM Linux Technology Center
More information about the libvir-list
mailing list