qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v5 12/12] suspend: add qmp events


From: Luiz Capitulino
Subject: Re: [Qemu-devel] [PATCH v5 12/12] suspend: add qmp events
Date: Fri, 17 Feb 2012 15:33:51 -0200

On Wed, 15 Feb 2012 11:28:21 +0100
Gerd Hoffmann <address@hidden> wrote:

> Send qmp events on suspend and wakeup so libvirt
> has a chance to track the vm state.
> 
> Signed-off-by: Gerd Hoffmann <address@hidden>
> ---
>  monitor.c |    6 ++++++
>  monitor.h |    2 ++
>  vl.c      |   15 +++++++++++++++
>  3 files changed, 23 insertions(+), 0 deletions(-)
> 
> diff --git a/monitor.c b/monitor.c
> index aadbdcb..e6f5fad 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -485,6 +485,12 @@ void monitor_protocol_event(MonitorEvent event, QObject 
> *data)
>          case QEVENT_BLOCK_JOB_CANCELLED:
>              event_name = "BLOCK_JOB_CANCELLED";
>              break;
> +        case QEVENT_SUSPEND:
> +            event_name = "SUSPEND";
> +            break;
> +        case QEVENT_WAKEUP:
> +            event_name = "WAKEUP";
> +            break;
>          default:
>              abort();
>              break;
> diff --git a/monitor.h b/monitor.h
> index b72ea07..9df3bab 100644
> --- a/monitor.h
> +++ b/monitor.h
> @@ -38,6 +38,8 @@ typedef enum MonitorEvent {
>      QEVENT_SPICE_DISCONNECTED,
>      QEVENT_BLOCK_JOB_COMPLETED,
>      QEVENT_BLOCK_JOB_CANCELLED,
> +    QEVENT_SUSPEND,
> +    QEVENT_WAKEUP,
>      QEVENT_MAX,
>  } MonitorEvent;
>  
> diff --git a/vl.c b/vl.c
> index bfdcb7c..570ea05 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1416,6 +1416,7 @@ static void qemu_system_suspend(void)
>  {
>      pause_all_vcpus();
>      notifier_list_notify(&suspend_notifiers, NULL);
> +    monitor_protocol_event(QEVENT_SUSPEND, NULL);
>      is_suspended = true;
>  }
>  
> @@ -1436,12 +1437,26 @@ void qemu_register_suspend_notifier(Notifier 
> *notifier)
>  
>  void qemu_system_wakeup_request(WakeupReason reason)
>  {
> +    static const char *names[] = {
> +        [QEMU_WAKEUP_REASON_OTHER]   = "other",
> +        [QEMU_WAKEUP_REASON_RTC]     = "rtc",
> +        [QEMU_WAKEUP_REASON_PMTIMER] = "pmtimer",

Is the reason really important for mngt? Can we just leave it out?

> +    };
> +    const char *name;
> +    QObject *data;
> +
>      if (!is_suspended) {
>          return;
>      }
>      if (!(wakeup_reason_mask & (1 << reason))) {
>          return;
>      }
> +
> +    name = (reason < ARRAY_SIZE(names)) ? names[reason] : "unknown";
> +    data = qobject_from_jsonf("{ 'reason': %s }", name);
> +    monitor_protocol_event(QEVENT_WAKEUP, data);
> +    qobject_decref(data);
> +
>      notifier_list_notify(&wakeup_notifiers, &reason);
>      reset_requested = 1;
>      qemu_notify_event();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]