All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4)
@ 2014-06-04 17:52 mtosatti
  2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: mtosatti @ 2014-06-04 17:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: gleb, pbonzini, armbru, mprivozn

v4: fix command name,
    correct english     (Eric Blake)
    add object_property_add_alias (Paolo)

---

It is necessary to reset RTC interrupt backlog if guest time is
synchronized via a different mechanism, such as QGA's guest-set-time
command.

Failing to do so causes both corrections to be applied (summed),
resulting in an incorrect guest time.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command
  2014-06-04 17:52 [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4) mtosatti
@ 2014-06-04 17:52 ` mtosatti
  2014-06-17 12:32   ` Michael S. Tsirkin
  2014-06-17 13:12   ` Eric Blake
  2014-06-04 17:52 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
  2014-06-04 17:52 ` [Qemu-devel] [patch 3/3] mc146818rtc: add "rtc" link to "/machine" mtosatti
  2 siblings, 2 replies; 7+ messages in thread
From: mtosatti @ 2014-06-04 17:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: gleb, mprivozn, Marcelo Tosatti, armbru, pbonzini

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: rtc-reset --]
[-- Type: text/plain, Size: 3171 bytes --]

It is necessary to reset RTC interrupt reinjection backlog if
guest time is synchronized via a different mechanism, such as 
QGA's guest-set-time command.

Failing to do so causes both corrections to be applied (summed),
resulting in an incorrect guest time.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

---
 hw/timer/mc146818rtc.c |   22 ++++++++++++++++++++++
 qapi-schema.json       |   12 ++++++++++++
 qmp-commands.hx        |   23 +++++++++++++++++++++++
 3 files changed, 57 insertions(+)

Index: qemu/hw/timer/mc146818rtc.c
===================================================================
--- qemu.orig/hw/timer/mc146818rtc.c	2014-06-02 23:14:09.570443599 -0300
+++ qemu/hw/timer/mc146818rtc.c	2014-06-02 23:14:11.707436729 -0300
@@ -26,6 +26,7 @@
 #include "sysemu/sysemu.h"
 #include "hw/timer/mc146818rtc.h"
 #include "qapi/visitor.h"
+#include "qmp-commands.h"
 
 #ifdef TARGET_I386
 #include "hw/i386/apic.h"
@@ -84,6 +85,9 @@
     Notifier clock_reset_notifier;
     LostTickPolicy lost_tick_policy;
     Notifier suspend_notifier;
+#ifdef TARGET_I386
+    QLIST_ENTRY(RTCState) link;
+#endif
 } RTCState;
 
 static void rtc_set_time(RTCState *s);
@@ -522,6 +526,20 @@
         rtc_from_bcd(s, s->cmos_data[RTC_CENTURY]) * 100 - 1900;
 }
 
+#ifdef TARGET_I386
+static QLIST_HEAD(, RTCState) rtc_devices =
+    QLIST_HEAD_INITIALIZER(rtc_devices);
+
+void qmp_rtc_reset_reinjection(Error **errp)
+{
+    RTCState *s;
+
+    QLIST_FOREACH(s, &rtc_devices, link) {
+        s->irq_coalesced = 0;
+    }
+}
+#endif
+
 static void rtc_set_time(RTCState *s)
 {
     struct tm tm;
@@ -911,6 +929,10 @@
     } else {
         isa_init_irq(isadev, &s->irq, RTC_ISA_IRQ);
     }
+#ifdef TARGET_I386
+    QLIST_INSERT_HEAD(&rtc_devices, s, link);
+#endif
+
     return isadev;
 }
 
Index: qemu/qapi-schema.json
===================================================================
--- qemu.orig/qapi-schema.json	2014-06-02 23:14:09.570443599 -0300
+++ qemu/qapi-schema.json	2014-06-02 23:14:11.709436722 -0300
@@ -4722,3 +4722,15 @@
               'btn'     : 'InputBtnEvent',
               'rel'     : 'InputMoveEvent',
               'abs'     : 'InputMoveEvent' } }
+
+##
+# @rtc-reset-reinjection
+#
+# This command will reset the RTC interrupt reinjection backlog.
+# Can be used if another mechanism to synchronize guest time
+# is in effect, for example QEMU guest agent's guest-set-time
+# command.
+#
+# Since: 2.1
+##
+{ 'command': 'rtc-reset-reinjection' }
Index: qemu/qmp-commands.hx
===================================================================
--- qemu.orig/qmp-commands.hx	2014-06-02 23:14:09.570443599 -0300
+++ qemu/qmp-commands.hx	2014-06-02 23:14:11.710436719 -0300
@@ -3572,3 +3572,26 @@
                    } } ] }
 
 EQMP
+
+#if defined (TARGET_I386)
+    {
+        .name       = "rtc-reset-reinjection",
+        .args_type  = "",
+        .mhandler.cmd_new = qmp_marshal_input_rtc_reset_reinjection,
+    },
+#endif
+
+SQMP
+rtc-reset-reinjection
+---------------------
+
+Reset the RTC interrupt reinjection backlog.
+
+Arguments: None.
+
+Example:
+
+-> { "execute": "rtc-reset-reinjection" }
+<- { "return": {} }
+
+EQMP

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [patch 2/3] add object_property_add_alias
  2014-06-04 17:52 [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4) mtosatti
  2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
@ 2014-06-04 17:52 ` mtosatti
  2014-06-05 11:09   ` Paolo Bonzini
  2014-06-04 17:52 ` [Qemu-devel] [patch 3/3] mc146818rtc: add "rtc" link to "/machine" mtosatti
  2 siblings, 1 reply; 7+ messages in thread
From: mtosatti @ 2014-06-04 17:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: gleb, mprivozn, Marcelo Tosatti, armbru, pbonzini

[-- Attachment #1: qom-add-alias --]
[-- Type: text/plain, Size: 4655 bytes --]

Allowing addition of a link without keeping pointer-to-pointer.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

---
 include/qom/object.h |   13 +++++++++
 qom/object.c         |   73 +++++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 72 insertions(+), 14 deletions(-)

Index: qemu/include/qom/object.h
===================================================================
--- qemu.orig/include/qom/object.h	2014-06-02 23:12:51.875693325 -0300
+++ qemu/include/qom/object.h	2014-06-02 23:14:13.045432426 -0300
@@ -1073,6 +1073,19 @@
 } ObjectPropertyLinkFlags;
 
 /**
+ * object_property_add_alias:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @alias: the alias object
+ * @errp: if an error occurs, a pointer to an area to store the area
+ *
+ * Add a link under obj, named name, pointing to alias.
+ *
+ */
+void object_property_add_alias(Object *obj, const char *name,
+                               Object *alias, Error **errp);
+
+/**
  * object_property_allow_set_link:
  *
  * The default implementation of the object_property_add_link() check()
Index: qemu/qom/object.c
===================================================================
--- qemu.orig/qom/object.c	2014-06-02 23:12:51.875693325 -0300
+++ qemu/qom/object.c	2014-06-02 23:14:13.046432423 -0300
@@ -1023,27 +1023,71 @@
     g_free(type);
 }
 
+typedef struct {
+    Object *child;
+    Object **childp;
+    void (*check)(Object *, const char *, Object *, Error **);
+    ObjectPropertyLinkFlags flags;
+} LinkProperty;
+
+static void object_get_alias_property(Object *obj, Visitor *v, void *opaque,
+                                      const char *name, Error **errp)
+{
+    LinkProperty *prop = opaque;
+    Object *child = prop->child;
+    gchar *path;
+
+    path = object_get_canonical_path(child);
+    visit_type_str(v, &path, name, errp);
+    g_free(path);
+}
+
+static void object_release_alias_property(Object *obj, const char *name,
+                                         void *opaque)
+{
+    LinkProperty *prop = opaque;
+
+    g_free(prop);
+}
+
+void object_property_add_alias(Object *obj, const char *name,
+                               Object *alias, Error **errp)
+{
+    Error *local_err = NULL;
+    gchar *type;
+    LinkProperty *prop = g_malloc(sizeof(*prop));
+
+    type = g_strdup_printf("link<%s>", object_get_typename(OBJECT(alias)));
+
+    prop->child = alias;
+    prop->check = NULL;
+    prop->flags = 0;
+
+    object_property_add(obj, name, type, object_get_alias_property, NULL,
+                        object_release_alias_property, prop, &local_err);
+    if (local_err) {
+        g_free(prop);
+        error_propagate(errp, local_err);
+    }
+
+    g_free(type);
+}
+
 void object_property_allow_set_link(Object *obj, const char *name,
                                     Object *val, Error **errp)
 {
     /* Allow the link to be set, always */
 }
 
-typedef struct {
-    Object **child;
-    void (*check)(Object *, const char *, Object *, Error **);
-    ObjectPropertyLinkFlags flags;
-} LinkProperty;
-
 static void object_get_link_property(Object *obj, Visitor *v, void *opaque,
                                      const char *name, Error **errp)
 {
     LinkProperty *lprop = opaque;
-    Object **child = lprop->child;
+    Object *child = lprop->child;
     gchar *path;
 
-    if (*child) {
-        path = object_get_canonical_path(*child);
+    if (child) {
+        path = object_get_canonical_path(child);
         visit_type_str(v, &path, name, errp);
         g_free(path);
     } else {
@@ -1096,7 +1140,7 @@
 {
     Error *local_err = NULL;
     LinkProperty *prop = opaque;
-    Object **child = prop->child;
+    Object **child = prop->childp;
     Object *old_target = *child;
     Object *new_target = NULL;
     char *path = NULL;
@@ -1133,8 +1177,8 @@
 {
     LinkProperty *prop = opaque;
 
-    if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && *prop->child) {
-        object_unref(*prop->child);
+    if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && prop->child) {
+        object_unref(prop->child);
     }
     g_free(prop);
 }
@@ -1150,7 +1194,8 @@
     LinkProperty *prop = g_malloc(sizeof(*prop));
     gchar *full_type;
 
-    prop->child = child;
+    prop->childp = child;
+    prop->child = *child;
     prop->check = check;
     prop->flags = flags;
 
@@ -1227,7 +1272,7 @@
 
     if (object_property_is_link(prop)) {
         LinkProperty *lprop = prop->opaque;
-        return *lprop->child;
+        return lprop->child;
     } else if (object_property_is_child(prop)) {
         return prop->opaque;
     } else {

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [patch 3/3] mc146818rtc: add "rtc" link to "/machine"
  2014-06-04 17:52 [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4) mtosatti
  2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
  2014-06-04 17:52 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
@ 2014-06-04 17:52 ` mtosatti
  2 siblings, 0 replies; 7+ messages in thread
From: mtosatti @ 2014-06-04 17:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: gleb, mprivozn, Marcelo Tosatti, armbru, pbonzini

[-- Attachment #1: rtc-add-link --]
[-- Type: text/plain, Size: 1410 bytes --]

Add a link to rtc under /machine providing a stable 
location for management apps to query "date" field.

{"execute":"qom-get","arguments":{"path":"/machine/rtc","property":"date"} }

Suggested by Paolo Bonzini.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

---
 hw/timer/mc146818rtc.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Index: qemu/hw/timer/mc146818rtc.c
===================================================================
--- qemu.orig/hw/timer/mc146818rtc.c	2014-06-02 23:14:11.707436729 -0300
+++ qemu/hw/timer/mc146818rtc.c	2014-06-02 23:14:15.453424684 -0300
@@ -911,6 +911,9 @@
 
     object_property_add(OBJECT(s), "date", "struct tm",
                         rtc_get_date, NULL, NULL, s, NULL);
+
+    object_property_add_alias(qdev_get_machine(), "rtc", OBJECT(s),
+                              &error_abort);
 }
 
 ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
@@ -954,11 +957,17 @@
     dc->cannot_instantiate_with_device_add_yet = true;
 }
 
+static void rtc_finalize(Object *obj)
+{
+    object_property_del(qdev_get_machine(), "rtc", NULL);
+}
+
 static const TypeInfo mc146818rtc_info = {
     .name          = TYPE_MC146818_RTC,
     .parent        = TYPE_ISA_DEVICE,
     .instance_size = sizeof(RTCState),
     .class_init    = rtc_class_initfn,
+    .instance_finalize = rtc_finalize,
 };
 
 static void mc146818rtc_register_types(void)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [patch 2/3] add object_property_add_alias
  2014-06-04 17:52 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
@ 2014-06-05 11:09   ` Paolo Bonzini
  0 siblings, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2014-06-05 11:09 UTC (permalink / raw)
  To: mtosatti, qemu-devel; +Cc: gleb, mprivozn, armbru

Il 04/06/2014 19:52, mtosatti@redhat.com ha scritto:
> Allowing addition of a link without keeping pointer-to-pointer.
>
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
> ---
>  include/qom/object.h |   13 +++++++++
>  qom/object.c         |   73 +++++++++++++++++++++++++++++++++++++++++----------
>  2 files changed, 72 insertions(+), 14 deletions(-)
>
> Index: qemu/include/qom/object.h
> ===================================================================
> --- qemu.orig/include/qom/object.h	2014-06-02 23:12:51.875693325 -0300
> +++ qemu/include/qom/object.h	2014-06-02 23:14:13.045432426 -0300
> @@ -1073,6 +1073,19 @@
>  } ObjectPropertyLinkFlags;
>
>  /**
> + * object_property_add_alias:
> + * @obj: the object to add a property to
> + * @name: the name of the property
> + * @alias: the alias object
> + * @errp: if an error occurs, a pointer to an area to store the area
> + *
> + * Add a link under obj, named name, pointing to alias.
> + *
> + */
> +void object_property_add_alias(Object *obj, const char *name,
> +                               Object *alias, Error **errp);
> +
> +/**
>   * object_property_allow_set_link:
>   *
>   * The default implementation of the object_property_add_link() check()
> Index: qemu/qom/object.c
> ===================================================================
> --- qemu.orig/qom/object.c	2014-06-02 23:12:51.875693325 -0300
> +++ qemu/qom/object.c	2014-06-02 23:14:13.046432423 -0300
> @@ -1023,27 +1023,71 @@
>      g_free(type);
>  }
>
> +typedef struct {
> +    Object *child;
> +    Object **childp;

These field names are ugly... not your fault, but perhaps

     Object **linkp;
     Object *alias_dest;

would be better.  It would also avoid the mistake below:

> @@ -1096,7 +1140,7 @@
>  {
>      Error *local_err = NULL;
>      LinkProperty *prop = opaque;
> -    Object **child = prop->child;
> +    Object **child = prop->childp;
>      Object *old_target = *child;
>      Object *new_target = NULL;
>      char *path = NULL;

This is object_set_link_property.  It writes *child but not prop->child, 
and subsequent calls to object_get_link_property incorrect.

However, since a similar need arose recently in one of Peter 
Crosthwaite's patches, let's add a generic resolve mechanism.  I'll post 
a short series in a second, as soon as I finish testing it.

Paolo

> @@ -1133,8 +1177,8 @@
>  {
>      LinkProperty *prop = opaque;
>
> -    if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && *prop->child) {
> -        object_unref(*prop->child);
> +    if ((prop->flags & OBJ_PROP_LINK_UNREF_ON_RELEASE) && prop->child) {
> +        object_unref(prop->child);
>      }
>      g_free(prop);
>  }
> @@ -1150,7 +1194,8 @@
>      LinkProperty *prop = g_malloc(sizeof(*prop));
>      gchar *full_type;
>
> -    prop->child = child;
> +    prop->childp = child;
> +    prop->child = *child;
>      prop->check = check;
>      prop->flags = flags;
>
> @@ -1227,7 +1272,7 @@
>
>      if (object_property_is_link(prop)) {
>          LinkProperty *lprop = prop->opaque;
> -        return *lprop->child;
> +        return lprop->child;
>      } else if (object_property_is_child(prop)) {
>          return prop->opaque;
>      } else {
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command
  2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
@ 2014-06-17 12:32   ` Michael S. Tsirkin
  2014-06-17 13:12   ` Eric Blake
  1 sibling, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2014-06-17 12:32 UTC (permalink / raw)
  To: mtosatti; +Cc: gleb, mprivozn, pbonzini, qemu-devel, armbru

On Wed, Jun 04, 2014 at 02:52:01PM -0300, mtosatti@redhat.com wrote:
> It is necessary to reset RTC interrupt reinjection backlog if
> guest time is synchronized via a different mechanism, such as 
> QGA's guest-set-time command.
> 
> Failing to do so causes both corrections to be applied (summed),
> resulting in an incorrect guest time.
> 
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
> 
> ---
>  hw/timer/mc146818rtc.c |   22 ++++++++++++++++++++++
>  qapi-schema.json       |   12 ++++++++++++
>  qmp-commands.hx        |   23 +++++++++++++++++++++++
>  3 files changed, 57 insertions(+)
> 
> Index: qemu/hw/timer/mc146818rtc.c
> ===================================================================
> --- qemu.orig/hw/timer/mc146818rtc.c	2014-06-02 23:14:09.570443599 -0300
> +++ qemu/hw/timer/mc146818rtc.c	2014-06-02 23:14:11.707436729 -0300
> @@ -26,6 +26,7 @@
>  #include "sysemu/sysemu.h"
>  #include "hw/timer/mc146818rtc.h"
>  #include "qapi/visitor.h"
> +#include "qmp-commands.h"
>  
>  #ifdef TARGET_I386
>  #include "hw/i386/apic.h"
> @@ -84,6 +85,9 @@
>      Notifier clock_reset_notifier;
>      LostTickPolicy lost_tick_policy;
>      Notifier suspend_notifier;
> +#ifdef TARGET_I386
> +    QLIST_ENTRY(RTCState) link;
> +#endif

Could we avoid these ifdefs?
I'd rather maintain the link unconditionally,
even if it's unused except on x86.

>  } RTCState;
>  
>  static void rtc_set_time(RTCState *s);
> @@ -522,6 +526,20 @@
>          rtc_from_bcd(s, s->cmos_data[RTC_CENTURY]) * 100 - 1900;
>  }
>  
> +#ifdef TARGET_I386
> +static QLIST_HEAD(, RTCState) rtc_devices =
> +    QLIST_HEAD_INITIALIZER(rtc_devices);
> +
> +void qmp_rtc_reset_reinjection(Error **errp)
> +{
> +    RTCState *s;
> +
> +    QLIST_FOREACH(s, &rtc_devices, link) {
> +        s->irq_coalesced = 0;
> +    }
> +}
> +#endif
> +
>  static void rtc_set_time(RTCState *s)
>  {
>      struct tm tm;
> @@ -911,6 +929,10 @@
>      } else {
>          isa_init_irq(isadev, &s->irq, RTC_ISA_IRQ);
>      }
> +#ifdef TARGET_I386
> +    QLIST_INSERT_HEAD(&rtc_devices, s, link);
> +#endif
> +
>      return isadev;
>  }
>  
> Index: qemu/qapi-schema.json
> ===================================================================
> --- qemu.orig/qapi-schema.json	2014-06-02 23:14:09.570443599 -0300
> +++ qemu/qapi-schema.json	2014-06-02 23:14:11.709436722 -0300
> @@ -4722,3 +4722,15 @@
>                'btn'     : 'InputBtnEvent',
>                'rel'     : 'InputMoveEvent',
>                'abs'     : 'InputMoveEvent' } }
> +
> +##
> +# @rtc-reset-reinjection
> +#
> +# This command will reset the RTC interrupt reinjection backlog.
> +# Can be used if another mechanism to synchronize guest time
> +# is in effect, for example QEMU guest agent's guest-set-time
> +# command.
> +#
> +# Since: 2.1
> +##
> +{ 'command': 'rtc-reset-reinjection' }
> Index: qemu/qmp-commands.hx
> ===================================================================
> --- qemu.orig/qmp-commands.hx	2014-06-02 23:14:09.570443599 -0300
> +++ qemu/qmp-commands.hx	2014-06-02 23:14:11.710436719 -0300
> @@ -3572,3 +3572,26 @@
>                     } } ] }
>  
>  EQMP
> +
> +#if defined (TARGET_I386)
> +    {
> +        .name       = "rtc-reset-reinjection",
> +        .args_type  = "",
> +        .mhandler.cmd_new = qmp_marshal_input_rtc_reset_reinjection,
> +    },
> +#endif
> +
> +SQMP
> +rtc-reset-reinjection
> +---------------------
> +
> +Reset the RTC interrupt reinjection backlog.
> +
> +Arguments: None.
> +
> +Example:
> +
> +-> { "execute": "rtc-reset-reinjection" }
> +<- { "return": {} }
> +
> +EQMP
> 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command
  2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
  2014-06-17 12:32   ` Michael S. Tsirkin
@ 2014-06-17 13:12   ` Eric Blake
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Blake @ 2014-06-17 13:12 UTC (permalink / raw)
  To: mtosatti, qemu-devel; +Cc: gleb, pbonzini, armbru, mprivozn

[-- Attachment #1: Type: text/plain, Size: 758 bytes --]

On 06/04/2014 11:52 AM, mtosatti@redhat.com wrote:
> It is necessary to reset RTC interrupt reinjection backlog if
> guest time is synchronized via a different mechanism, such as 
> QGA's guest-set-time command.
> 
> Failing to do so causes both corrections to be applied (summed),
> resulting in an incorrect guest time.
> 
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
> 
> ---
>  hw/timer/mc146818rtc.c |   22 ++++++++++++++++++++++
>  qapi-schema.json       |   12 ++++++++++++
>  qmp-commands.hx        |   23 +++++++++++++++++++++++
>  3 files changed, 57 insertions(+)

Reviewed-by: Eric Blake <eblake@redhat.com>

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


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-06-17 13:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-04 17:52 [Qemu-devel] [patch 0/3] add QMP command to reset rtc interrupt backlog (v4) mtosatti
2014-06-04 17:52 ` [Qemu-devel] [patch 1/3] mc146818rtc: add rtc-reset-reinjection QMP command mtosatti
2014-06-17 12:32   ` Michael S. Tsirkin
2014-06-17 13:12   ` Eric Blake
2014-06-04 17:52 ` [Qemu-devel] [patch 2/3] add object_property_add_alias mtosatti
2014-06-05 11:09   ` Paolo Bonzini
2014-06-04 17:52 ` [Qemu-devel] [patch 3/3] mc146818rtc: add "rtc" link to "/machine" mtosatti

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.