Loading hmp-commands-info.hx +0 −12 Original line number Diff line number Diff line Loading @@ -179,13 +179,7 @@ ETEXI .args_type = "", .params = "", .help = "show the interrupts statistics (if available)", #ifdef TARGET_SPARC .cmd = sun4m_hmp_info_irq, #elif defined(TARGET_LM32) .cmd = lm32_hmp_info_irq, #else .cmd = hmp_info_irq, #endif }, STEXI Loading @@ -199,13 +193,7 @@ ETEXI .args_type = "", .params = "", .help = "show i8259 (PIC) state", #ifdef TARGET_SPARC .cmd = sun4m_hmp_info_pic, #elif defined(TARGET_LM32) .cmd = lm32_hmp_info_pic, #else .cmd = hmp_info_pic, #endif }, #endif Loading hmp.c +65 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "qemu-io.h" #include "qemu/cutils.h" #include "qemu/error-report.h" #include "hw/intc/intc.h" #ifdef CONFIG_SPICE #include <spice/enums.h> Loading Loading @@ -787,6 +788,70 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev) } } static int hmp_info_irq_foreach(Object *obj, void *opaque) { InterruptStatsProvider *intc; InterruptStatsProviderClass *k; Monitor *mon = opaque; if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) { intc = INTERRUPT_STATS_PROVIDER(obj); k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj); uint64_t *irq_counts; unsigned int nb_irqs, i; if (k->get_statistics && k->get_statistics(intc, &irq_counts, &nb_irqs)) { if (nb_irqs > 0) { monitor_printf(mon, "IRQ statistics for %s:\n", object_get_typename(obj)); for (i = 0; i < nb_irqs; i++) { if (irq_counts[i] > 0) { monitor_printf(mon, "%2d: %" PRId64 "\n", i, irq_counts[i]); } } } } else { monitor_printf(mon, "IRQ statistics not available for %s.\n", object_get_typename(obj)); } } return 0; } void hmp_info_irq(Monitor *mon, const QDict *qdict) { object_child_foreach_recursive(object_get_root(), hmp_info_irq_foreach, mon); } static int hmp_info_pic_foreach(Object *obj, void *opaque) { InterruptStatsProvider *intc; InterruptStatsProviderClass *k; Monitor *mon = opaque; if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) { intc = INTERRUPT_STATS_PROVIDER(obj); k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj); if (k->print_info) { k->print_info(intc, mon); } else { monitor_printf(mon, "Interrupt controller information not available for %s.\n", object_get_typename(obj)); } } return 0; } void hmp_info_pic(Monitor *mon, const QDict *qdict) { object_child_foreach_recursive(object_get_root(), hmp_info_pic_foreach, mon); } void hmp_info_pci(Monitor *mon, const QDict *qdict) { PciInfoList *info_list, *info; Loading hmp.h +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ void hmp_info_blockstats(Monitor *mon, const QDict *qdict); void hmp_info_vnc(Monitor *mon, const QDict *qdict); void hmp_info_spice(Monitor *mon, const QDict *qdict); void hmp_info_balloon(Monitor *mon, const QDict *qdict); void hmp_info_irq(Monitor *mon, const QDict *qdict); void hmp_info_pic(Monitor *mon, const QDict *qdict); void hmp_info_pci(Monitor *mon, const QDict *qdict); void hmp_info_block_jobs(Monitor *mon, const QDict *qdict); void hmp_info_tpm(Monitor *mon, const QDict *qdict); Loading hw/intc/i8259.c +0 −36 Original line number Diff line number Diff line Loading @@ -461,42 +461,6 @@ static void pic_realize(DeviceState *dev, Error **errp) pc->parent_realize(dev, errp); } void hmp_info_pic(Monitor *mon, const QDict *qdict) { int i; PICCommonState *s; if (!isa_pic) { return; } for (i = 0; i < 2; i++) { s = i == 0 ? PIC_COMMON(isa_pic) : slave_pic; monitor_printf(mon, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d " "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n", i, s->irr, s->imr, s->isr, s->priority_add, s->irq_base, s->read_reg_select, s->elcr, s->special_fully_nested_mode); } } void hmp_info_irq(Monitor *mon, const QDict *qdict) { #ifndef DEBUG_IRQ_COUNT monitor_printf(mon, "irq statistic code not compiled.\n"); #else int i; int64_t count; monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 16; i++) { count = irq_count[i]; if (count > 0) { monitor_printf(mon, "%2d: %" PRId64 "\n", i, count); } } #endif } qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq) { qemu_irq *irq_set; Loading hw/intc/lm32_pic.c +0 −31 Original line number Diff line number Diff line Loading @@ -43,35 +43,6 @@ struct LM32PicState { }; typedef struct LM32PicState LM32PicState; static LM32PicState *pic; void lm32_hmp_info_pic(Monitor *mon, const QDict *qdict) { if (pic == NULL) { return; } monitor_printf(mon, "lm32-pic: im=%08x ip=%08x irq_state=%08x\n", pic->im, pic->ip, pic->irq_state); } void lm32_hmp_info_irq(Monitor *mon, const QDict *qdict) { int i; uint32_t count; if (pic == NULL) { return; } monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 32; i++) { count = pic->stats_irq_count[i]; if (count > 0) { monitor_printf(mon, "%2d: %u\n", i, count); } } } static void update_irq(LM32PicState *s) { s->ip |= s->irq_state; Loading Loading @@ -177,8 +148,6 @@ static void lm32_pic_init(Object *obj) qdev_init_gpio_in(dev, irq_handler, 32); sysbus_init_irq(sbd, &s->parent_irq); pic = s; } static const VMStateDescription vmstate_lm32_pic = { Loading Loading
hmp-commands-info.hx +0 −12 Original line number Diff line number Diff line Loading @@ -179,13 +179,7 @@ ETEXI .args_type = "", .params = "", .help = "show the interrupts statistics (if available)", #ifdef TARGET_SPARC .cmd = sun4m_hmp_info_irq, #elif defined(TARGET_LM32) .cmd = lm32_hmp_info_irq, #else .cmd = hmp_info_irq, #endif }, STEXI Loading @@ -199,13 +193,7 @@ ETEXI .args_type = "", .params = "", .help = "show i8259 (PIC) state", #ifdef TARGET_SPARC .cmd = sun4m_hmp_info_pic, #elif defined(TARGET_LM32) .cmd = lm32_hmp_info_pic, #else .cmd = hmp_info_pic, #endif }, #endif Loading
hmp.c +65 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "qemu-io.h" #include "qemu/cutils.h" #include "qemu/error-report.h" #include "hw/intc/intc.h" #ifdef CONFIG_SPICE #include <spice/enums.h> Loading Loading @@ -787,6 +788,70 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev) } } static int hmp_info_irq_foreach(Object *obj, void *opaque) { InterruptStatsProvider *intc; InterruptStatsProviderClass *k; Monitor *mon = opaque; if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) { intc = INTERRUPT_STATS_PROVIDER(obj); k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj); uint64_t *irq_counts; unsigned int nb_irqs, i; if (k->get_statistics && k->get_statistics(intc, &irq_counts, &nb_irqs)) { if (nb_irqs > 0) { monitor_printf(mon, "IRQ statistics for %s:\n", object_get_typename(obj)); for (i = 0; i < nb_irqs; i++) { if (irq_counts[i] > 0) { monitor_printf(mon, "%2d: %" PRId64 "\n", i, irq_counts[i]); } } } } else { monitor_printf(mon, "IRQ statistics not available for %s.\n", object_get_typename(obj)); } } return 0; } void hmp_info_irq(Monitor *mon, const QDict *qdict) { object_child_foreach_recursive(object_get_root(), hmp_info_irq_foreach, mon); } static int hmp_info_pic_foreach(Object *obj, void *opaque) { InterruptStatsProvider *intc; InterruptStatsProviderClass *k; Monitor *mon = opaque; if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) { intc = INTERRUPT_STATS_PROVIDER(obj); k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj); if (k->print_info) { k->print_info(intc, mon); } else { monitor_printf(mon, "Interrupt controller information not available for %s.\n", object_get_typename(obj)); } } return 0; } void hmp_info_pic(Monitor *mon, const QDict *qdict) { object_child_foreach_recursive(object_get_root(), hmp_info_pic_foreach, mon); } void hmp_info_pci(Monitor *mon, const QDict *qdict) { PciInfoList *info_list, *info; Loading
hmp.h +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ void hmp_info_blockstats(Monitor *mon, const QDict *qdict); void hmp_info_vnc(Monitor *mon, const QDict *qdict); void hmp_info_spice(Monitor *mon, const QDict *qdict); void hmp_info_balloon(Monitor *mon, const QDict *qdict); void hmp_info_irq(Monitor *mon, const QDict *qdict); void hmp_info_pic(Monitor *mon, const QDict *qdict); void hmp_info_pci(Monitor *mon, const QDict *qdict); void hmp_info_block_jobs(Monitor *mon, const QDict *qdict); void hmp_info_tpm(Monitor *mon, const QDict *qdict); Loading
hw/intc/i8259.c +0 −36 Original line number Diff line number Diff line Loading @@ -461,42 +461,6 @@ static void pic_realize(DeviceState *dev, Error **errp) pc->parent_realize(dev, errp); } void hmp_info_pic(Monitor *mon, const QDict *qdict) { int i; PICCommonState *s; if (!isa_pic) { return; } for (i = 0; i < 2; i++) { s = i == 0 ? PIC_COMMON(isa_pic) : slave_pic; monitor_printf(mon, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d " "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n", i, s->irr, s->imr, s->isr, s->priority_add, s->irq_base, s->read_reg_select, s->elcr, s->special_fully_nested_mode); } } void hmp_info_irq(Monitor *mon, const QDict *qdict) { #ifndef DEBUG_IRQ_COUNT monitor_printf(mon, "irq statistic code not compiled.\n"); #else int i; int64_t count; monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 16; i++) { count = irq_count[i]; if (count > 0) { monitor_printf(mon, "%2d: %" PRId64 "\n", i, count); } } #endif } qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq) { qemu_irq *irq_set; Loading
hw/intc/lm32_pic.c +0 −31 Original line number Diff line number Diff line Loading @@ -43,35 +43,6 @@ struct LM32PicState { }; typedef struct LM32PicState LM32PicState; static LM32PicState *pic; void lm32_hmp_info_pic(Monitor *mon, const QDict *qdict) { if (pic == NULL) { return; } monitor_printf(mon, "lm32-pic: im=%08x ip=%08x irq_state=%08x\n", pic->im, pic->ip, pic->irq_state); } void lm32_hmp_info_irq(Monitor *mon, const QDict *qdict) { int i; uint32_t count; if (pic == NULL) { return; } monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 32; i++) { count = pic->stats_irq_count[i]; if (count > 0) { monitor_printf(mon, "%2d: %u\n", i, count); } } } static void update_irq(LM32PicState *s) { s->ip |= s->irq_state; Loading Loading @@ -177,8 +148,6 @@ static void lm32_pic_init(Object *obj) qdev_init_gpio_in(dev, irq_handler, 32); sysbus_init_irq(sbd, &s->parent_irq); pic = s; } static const VMStateDescription vmstate_lm32_pic = { Loading