From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34231) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsYTS-0003rs-6N for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bsYTR-0007wF-9U for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34278) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsYTR-0007wB-3K for qemu-devel@nongnu.org; Fri, 07 Oct 2016 12:58:17 -0400 From: Paolo Bonzini Date: Fri, 7 Oct 2016 18:57:30 +0200 Message-Id: <1475859483-32234-7-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 06/39] intc/slavio_intctl: 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 Acked-by: Artyom Tarasenko Signed-off-by: Herv=C3=A9 Poussineau Message-Id: <1474921408-24710-4-git-send-email-hpoussin@reactos.org> Signed-off-by: Paolo Bonzini --- 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.7.4