diff mbox

[v2,3/6] intc/slavio_intctl: implement InterruptStatsProvider interface

Message ID 1474921408-24710-4-git-send-email-hpoussin@reactos.org (mailing list archive)
State New, archived
Headers show

Commit Message

Hervé Poussineau Sept. 26, 2016, 8:23 p.m. UTC
Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/intc/slavio_intctl.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

Comments

Artyom Tarasenko Sept. 27, 2016, 2:53 p.m. UTC | #1
Are slavio_pic_info and slavio_irq_info still used after this patch?

On Mon, Sep 26, 2016 at 10:23 PM, Hervé Poussineau <hpoussin@reactos.org> wrote:
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>  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"
>
>  //#define DEBUG_IRQ_COUNT
> @@ -418,6 +419,31 @@ static void slavio_intctl_reset(DeviceState *d)
>      slavio_check_interrupts(s, 0);
>  }
>
> +#ifdef DEBUG_IRQ_COUNT
> +static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
> +                                         uint64_t **irq_counts,
> +                                         unsigned int *nb_irqs)
> +{
> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
> +    *irq_counts = s->irq_count;
> +    *nb_irqs = ARRAY_SIZE(s->irq_count);
> +    return true;
> +}
> +#endif
> +
> +static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monitor *mon)
> +{
> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
> +    int i;
> +
> +    for (i = 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 = 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 = DEVICE_CLASS(klass);
> +    InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
>
>      dc->reset = slavio_intctl_reset;
>      dc->vmsd = &vmstate_intctl;
> +#ifdef DEBUG_IRQ_COUNT
> +    ic->get_statistics = slavio_intctl_get_statistics;
> +#endif
> +    ic->print_info = slavio_intctl_print_info;
>  }
>
>  static const TypeInfo slavio_intctl_info = {
> @@ -460,6 +491,10 @@ static const TypeInfo slavio_intctl_info = {
>      .instance_size = sizeof(SLAVIO_INTCTLState),
>      .instance_init = slavio_intctl_init,
>      .class_init    = slavio_intctl_class_init,
> +    .interfaces = (InterfaceInfo[]) {
> +        { TYPE_INTERRUPT_STATS_PROVIDER },
> +        { }
> +    },
>  };
>
>  static void slavio_intctl_register_types(void)
> --
> 2.1.4
>
>
Hervé Poussineau Sept. 27, 2016, 6:39 p.m. UTC | #2
Le 27/09/2016 à 16:53, Artyom Tarasenko a écrit :
> Are slavio_pic_info and slavio_irq_info still used after this patch?

After this patch, yes.
However, slavio_pic_info/slavio_irq_info (and sun4m_hmp_info_pic/sun4m_hmp_info_irq) will be removed in patch 5/6.

Hervé

>
> On Mon, Sep 26, 2016 at 10:23 PM, Hervé Poussineau <hpoussin@reactos.org> wrote:
>> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
>> ---
>>  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"
>>
>>  //#define DEBUG_IRQ_COUNT
>> @@ -418,6 +419,31 @@ static void slavio_intctl_reset(DeviceState *d)
>>      slavio_check_interrupts(s, 0);
>>  }
>>
>> +#ifdef DEBUG_IRQ_COUNT
>> +static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
>> +                                         uint64_t **irq_counts,
>> +                                         unsigned int *nb_irqs)
>> +{
>> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
>> +    *irq_counts = s->irq_count;
>> +    *nb_irqs = ARRAY_SIZE(s->irq_count);
>> +    return true;
>> +}
>> +#endif
>> +
>> +static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monitor *mon)
>> +{
>> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
>> +    int i;
>> +
>> +    for (i = 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 = 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 = DEVICE_CLASS(klass);
>> +    InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
>>
>>      dc->reset = slavio_intctl_reset;
>>      dc->vmsd = &vmstate_intctl;
>> +#ifdef DEBUG_IRQ_COUNT
>> +    ic->get_statistics = slavio_intctl_get_statistics;
>> +#endif
>> +    ic->print_info = slavio_intctl_print_info;
>>  }
>>
>>  static const TypeInfo slavio_intctl_info = {
>> @@ -460,6 +491,10 @@ static const TypeInfo slavio_intctl_info = {
>>      .instance_size = sizeof(SLAVIO_INTCTLState),
>>      .instance_init = slavio_intctl_init,
>>      .class_init    = slavio_intctl_class_init,
>> +    .interfaces = (InterfaceInfo[]) {
>> +        { TYPE_INTERRUPT_STATS_PROVIDER },
>> +        { }
>> +    },
>>  };
>>
>>  static void slavio_intctl_register_types(void)
>> --
>> 2.1.4
>>
>>
>
>
>
Artyom Tarasenko Sept. 28, 2016, 8:35 a.m. UTC | #3
On Tue, Sep 27, 2016 at 8:39 PM, Hervé Poussineau <hpoussin@reactos.org> wrote:
> Le 27/09/2016 à 16:53, Artyom Tarasenko a écrit :
>>
>> Are slavio_pic_info and slavio_irq_info still used after this patch?
>
>
> After this patch, yes.
> However, slavio_pic_info/slavio_irq_info (and
> sun4m_hmp_info_pic/sun4m_hmp_info_irq) will be removed in patch 5/6.
>

Oh. The 5/6 somehow didn't make it to my inbox, so I missed it.

Acked-by: Artyom Tarasenko <atar4qemu@gmail.com>

>
>
>>
>> On Mon, Sep 26, 2016 at 10:23 PM, Hervé Poussineau <hpoussin@reactos.org>
>> wrote:
>>>
>>> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
>>> ---
>>>  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"
>>>
>>>  //#define DEBUG_IRQ_COUNT
>>> @@ -418,6 +419,31 @@ static void slavio_intctl_reset(DeviceState *d)
>>>      slavio_check_interrupts(s, 0);
>>>  }
>>>
>>> +#ifdef DEBUG_IRQ_COUNT
>>> +static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
>>> +                                         uint64_t **irq_counts,
>>> +                                         unsigned int *nb_irqs)
>>> +{
>>> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
>>> +    *irq_counts = s->irq_count;
>>> +    *nb_irqs = ARRAY_SIZE(s->irq_count);
>>> +    return true;
>>> +}
>>> +#endif
>>> +
>>> +static void slavio_intctl_print_info(InterruptStatsProvider *obj,
>>> Monitor *mon)
>>> +{
>>> +    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
>>> +    int i;
>>> +
>>> +    for (i = 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 = 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 = DEVICE_CLASS(klass);
>>> +    InterruptStatsProviderClass *ic =
>>> INTERRUPT_STATS_PROVIDER_CLASS(klass);
>>>
>>>      dc->reset = slavio_intctl_reset;
>>>      dc->vmsd = &vmstate_intctl;
>>> +#ifdef DEBUG_IRQ_COUNT
>>> +    ic->get_statistics = slavio_intctl_get_statistics;
>>> +#endif
>>> +    ic->print_info = slavio_intctl_print_info;
>>>  }
>>>
>>>  static const TypeInfo slavio_intctl_info = {
>>> @@ -460,6 +491,10 @@ static const TypeInfo slavio_intctl_info = {
>>>      .instance_size = sizeof(SLAVIO_INTCTLState),
>>>      .instance_init = slavio_intctl_init,
>>>      .class_init    = slavio_intctl_class_init,
>>> +    .interfaces = (InterfaceInfo[]) {
>>> +        { TYPE_INTERRUPT_STATS_PROVIDER },
>>> +        { }
>>> +    },
>>>  };
>>>
>>>  static void slavio_intctl_register_types(void)
>>> --
>>> 2.1.4
>>>
>>>
>>
>>
>>
>
diff mbox

Patch

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"
 
 //#define DEBUG_IRQ_COUNT
@@ -418,6 +419,31 @@  static void slavio_intctl_reset(DeviceState *d)
     slavio_check_interrupts(s, 0);
 }
 
+#ifdef DEBUG_IRQ_COUNT
+static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
+                                         uint64_t **irq_counts,
+                                         unsigned int *nb_irqs)
+{
+    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
+    *irq_counts = s->irq_count;
+    *nb_irqs = ARRAY_SIZE(s->irq_count);
+    return true;
+}
+#endif
+
+static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monitor *mon)
+{
+    SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
+    int i;
+
+    for (i = 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 = 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 = DEVICE_CLASS(klass);
+    InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
 
     dc->reset = slavio_intctl_reset;
     dc->vmsd = &vmstate_intctl;
+#ifdef DEBUG_IRQ_COUNT
+    ic->get_statistics = slavio_intctl_get_statistics;
+#endif
+    ic->print_info = slavio_intctl_print_info;
 }
 
 static const TypeInfo slavio_intctl_info = {
@@ -460,6 +491,10 @@  static const TypeInfo slavio_intctl_info = {
     .instance_size = sizeof(SLAVIO_INTCTLState),
     .instance_init = slavio_intctl_init,
     .class_init    = slavio_intctl_class_init,
+    .interfaces = (InterfaceInfo[]) {
+        { TYPE_INTERRUPT_STATS_PROVIDER },
+        { }
+    },
 };
 
 static void slavio_intctl_register_types(void)