From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56865) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bocSB-0007mE-7W for qemu-devel@nongnu.org; Mon, 26 Sep 2016 16:24:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bocS6-0004Bf-WA for qemu-devel@nongnu.org; Mon, 26 Sep 2016 16:24:42 -0400 Received: from smtp2-g21.free.fr ([212.27.42.2]:43117) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bocS6-00046Q-OF for qemu-devel@nongnu.org; Mon, 26 Sep 2016 16:24:38 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Mon, 26 Sep 2016 22:23:26 +0200 Message-Id: <1474921408-24710-5-git-send-email-hpoussin@reactos.org> In-Reply-To: <1474921408-24710-1-git-send-email-hpoussin@reactos.org> References: <1474921408-24710-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2 4/6] intc/lm32_pic: implement InterruptStatsProvider interface List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Luiz Capitulino , Paolo Bonzini , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Michael Walle We have to change the vmstate version due to changes in statistics counte= rs. Signed-off-by: Herv=C3=A9 Poussineau --- hw/intc/lm32_pic.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/hw/intc/lm32_pic.c b/hw/intc/lm32_pic.c index 3dad01c..c045b99 100644 --- a/hw/intc/lm32_pic.c +++ b/hw/intc/lm32_pic.c @@ -25,6 +25,7 @@ #include "hw/sysbus.h" #include "trace.h" #include "hw/lm32/lm32_pic.h" +#include "hw/intc/intc.h" =20 #define TYPE_LM32_PIC "lm32-pic" #define LM32_PIC(obj) OBJECT_CHECK(LM32PicState, (obj), TYPE_LM32_PIC) @@ -38,7 +39,7 @@ struct LM32PicState { uint32_t irq_state; =20 /* statistics */ - uint32_t stats_irq_count[32]; + uint64_t stats_irq_count[32]; }; typedef struct LM32PicState LM32PicState; =20 @@ -152,6 +153,22 @@ static void pic_reset(DeviceState *d) } } =20 +static bool lm32_get_statistics(InterruptStatsProvider *obj, + uint64_t **irq_counts, unsigned int *nb_= irqs) +{ + LM32PicState *s =3D LM32_PIC(obj); + *irq_counts =3D s->stats_irq_count; + *nb_irqs =3D ARRAY_SIZE(s->stats_irq_count); + return true; +} + +static void lm32_print_info(InterruptStatsProvider *obj, Monitor *mon) +{ + LM32PicState *s =3D LM32_PIC(obj); + monitor_printf(mon, "lm32-pic: im=3D%08x ip=3D%08x irq_state=3D%08x\= n", + s->im, s->ip, s->irq_state); +} + static void lm32_pic_init(Object *obj) { DeviceState *dev =3D DEVICE(obj); @@ -166,13 +183,13 @@ static void lm32_pic_init(Object *obj) =20 static const VMStateDescription vmstate_lm32_pic =3D { .name =3D "lm32-pic", - .version_id =3D 1, - .minimum_version_id =3D 1, + .version_id =3D 2, + .minimum_version_id =3D 2, .fields =3D (VMStateField[]) { VMSTATE_UINT32(im, LM32PicState), VMSTATE_UINT32(ip, LM32PicState), VMSTATE_UINT32(irq_state, LM32PicState), - VMSTATE_UINT32_ARRAY(stats_irq_count, LM32PicState, 32), + VMSTATE_UINT64_ARRAY(stats_irq_count, LM32PicState, 32), VMSTATE_END_OF_LIST() } }; @@ -180,9 +197,12 @@ static const VMStateDescription vmstate_lm32_pic =3D= { static void lm32_pic_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); + InterruptStatsProviderClass *ic =3D INTERRUPT_STATS_PROVIDER_CLASS(k= lass); =20 dc->reset =3D pic_reset; dc->vmsd =3D &vmstate_lm32_pic; + ic->get_statistics =3D lm32_get_statistics; + ic->print_info =3D lm32_print_info; } =20 static const TypeInfo lm32_pic_info =3D { @@ -191,6 +211,10 @@ static const TypeInfo lm32_pic_info =3D { .instance_size =3D sizeof(LM32PicState), .instance_init =3D lm32_pic_init, .class_init =3D lm32_pic_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_INTERRUPT_STATS_PROVIDER }, + { } + }, }; =20 static void lm32_pic_register_types(void) --=20 2.1.4