From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56861) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bocSB-0007mA-6Q 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-0004Ba-Vn for qemu-devel@nongnu.org; Mon, 26 Sep 2016 16:24:42 -0400 Received: from smtp2-g21.free.fr ([212.27.42.2]:43082) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bocS6-00046J-OQ 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:25 +0200 Message-Id: <1474921408-24710-4-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 3/6] intc/slavio_intctl: 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?= Signed-off-by: Herv=C3=A9 Poussineau --- hw/intc/slavio_intctl.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c index e82e893..a9acb64 100644 --- a/hw/intc/slavio_intctl.c +++ b/hw/intc/slavio_intctl.c @@ -26,6 +26,7 @@ #include "hw/sparc/sun4m.h" #include "monitor/monitor.h" #include "hw/sysbus.h" +#include "hw/intc/intc.h" #include "trace.h" =20 //#define DEBUG_IRQ_COUNT @@ -418,6 +419,31 @@ static void slavio_intctl_reset(DeviceState *d) slavio_check_interrupts(s, 0); } =20 +#ifdef DEBUG_IRQ_COUNT +static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj, + uint64_t **irq_counts, + unsigned int *nb_irqs) +{ + SLAVIO_INTCTLState *s =3D SLAVIO_INTCTL(obj); + *irq_counts =3D s->irq_count; + *nb_irqs =3D ARRAY_SIZE(s->irq_count); + return true; +} +#endif + +static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monito= r *mon) +{ + SLAVIO_INTCTLState *s =3D SLAVIO_INTCTL(obj); + int i; + + for (i =3D 0; i < MAX_CPUS; i++) { + monitor_printf(mon, "per-cpu %d: pending 0x%08x\n", i, + s->slaves[i].intreg_pending); + } + monitor_printf(mon, "master: pending 0x%08x, disabled 0x%08x\n", + s->intregm_pending, s->intregm_disabled); +} + static void slavio_intctl_init(Object *obj) { DeviceState *dev =3D DEVICE(obj); @@ -449,9 +475,14 @@ static void slavio_intctl_init(Object *obj) static void slavio_intctl_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 slavio_intctl_reset; dc->vmsd =3D &vmstate_intctl; +#ifdef DEBUG_IRQ_COUNT + ic->get_statistics =3D slavio_intctl_get_statistics; +#endif + ic->print_info =3D slavio_intctl_print_info; } =20 static const TypeInfo slavio_intctl_info =3D { @@ -460,6 +491,10 @@ static const TypeInfo slavio_intctl_info =3D { .instance_size =3D sizeof(SLAVIO_INTCTLState), .instance_init =3D slavio_intctl_init, .class_init =3D slavio_intctl_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_INTERRUPT_STATS_PROVIDER }, + { } + }, }; =20 static void slavio_intctl_register_types(void) --=20 2.1.4