From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsYTV-0003uh-Kw for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bsYTS-0007xE-U4 for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39690) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsYTS-0007x6-Jk for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:18 -0400 From: Paolo Bonzini Date: Fri, 7 Oct 2016 18:57:31 +0200 Message-Id: <1475859483-32234-8-git-send-email-pbonzini@redhat.com> In-Reply-To: <1475859483-32234-1-git-send-email-pbonzini@redhat.com> References: <1475859483-32234-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 07/39] intc/lm32_pic: implement InterruptStatsProvider interface List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Herv=C3=A9=20Poussineau?= From: Herv=C3=A9 Poussineau We have to change the vmstate version due to changes in statistics counte= rs. Signed-off-by: Herv=C3=A9 Poussineau Message-Id: <1474921408-24710-5-git-send-email-hpoussin@reactos.org> Signed-off-by: Paolo Bonzini --- 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.7.4