[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 4/5] kvm-i8259: support "info pic" and "info irq
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH 4/5] kvm-i8259: support "info pic" and "info irq" |
Date: |
Fri, 15 Dec 2017 08:30:20 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 |
On 12/10/2017 03:38 AM, Peter Xu wrote:
> Let's leverage the i8259 common code for kvm-i8259 too.
>
> I think it's still possible that stats can lost when i8259 is in kernel
> and meanwhile when irqfd is used, e.g., by vfio or vhost devices.
> However that should be rare IMHO since they should be using MSIs mostly
> if they really want performance (that's why people use vhost and device
> assignment), and no old INTx should be used. As long as the INTx users
> are emulated in QEMU the stats will be correct.
>
> For "info pic", it should be always accurate since we fetch kvm regs
> before dump.
>
> More importantly, it's just too simple to do this now - it's only 10+
> LOC to gain this feature.
>
> Signed-off-by: Peter Xu <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
> ---
> hw/i386/kvm/i8259.c | 8 ++++++++
> hw/intc/i8259_common.c | 1 +
> 2 files changed, 9 insertions(+)
>
> diff --git a/hw/i386/kvm/i8259.c b/hw/i386/kvm/i8259.c
> index 11d1b726b6..57abe091b0 100644
> --- a/hw/i386/kvm/i8259.c
> +++ b/hw/i386/kvm/i8259.c
> @@ -111,6 +111,7 @@ static void kvm_pic_set_irq(void *opaque, int irq, int
> level)
> {
> int delivered;
>
> + pic_stat_update_irq(irq, level);
> delivered = kvm_set_irq(kvm_state, irq, level);
> apic_report_irq_delivered(delivered);
> }
> @@ -139,12 +140,15 @@ static void kvm_i8259_class_init(ObjectClass *klass,
> void *data)
> KVMPICClass *kpc = KVM_PIC_CLASS(klass);
> PICCommonClass *k = PIC_COMMON_CLASS(klass);
> DeviceClass *dc = DEVICE_CLASS(klass);
> + InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(klass);
>
> dc->reset = kvm_pic_reset;
> kpc->parent_realize = dc->realize;
> dc->realize = kvm_pic_realize;
> k->pre_save = kvm_pic_get;
> k->post_load = kvm_pic_put;
> + ic->get_statistics = pic_get_statistics;
> + ic->print_info = pic_print_info;
> }
>
> static const TypeInfo kvm_i8259_info = {
> @@ -153,6 +157,10 @@ static const TypeInfo kvm_i8259_info = {
> .instance_size = sizeof(PICCommonState),
> .class_init = kvm_i8259_class_init,
> .class_size = sizeof(KVMPICClass),
> + .interfaces = (InterfaceInfo[]) {
> + { TYPE_INTERRUPT_STATS_PROVIDER },
> + { }
> + },
> };
>
> static void kvm_pic_register_types(void)
> diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c
> index a3caddeefb..7efd2e8012 100644
> --- a/hw/intc/i8259_common.c
> +++ b/hw/intc/i8259_common.c
> @@ -132,6 +132,7 @@ void pic_print_info(InterruptStatsProvider *obj, Monitor
> *mon)
> {
> PICCommonState *s = PIC_COMMON(obj);
>
> + pic_dispatch_pre_save(s);
> monitor_printf(mon, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d "
> "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n",
> s->master ? 0 : 1, s->irr, s->imr, s->isr,
> s->priority_add,
>
- [Qemu-devel] [PATCH 0/5] i8259: cleanups and enhancements, Peter Xu, 2017/12/10
- [Qemu-devel] [PATCH 1/5] i8259: convert DPRINTFs into trace, Peter Xu, 2017/12/10
- [Qemu-devel] [PATCH 2/5] i8259: use DEBUG_IRQ_COUNT always, Peter Xu, 2017/12/10
- [Qemu-devel] [PATCH 3/5] i8259: generalize statistics into common code, Peter Xu, 2017/12/10
- [Qemu-devel] [PATCH 4/5] kvm-i8259: support "info pic" and "info irq", Peter Xu, 2017/12/10
- Re: [Qemu-devel] [PATCH 4/5] kvm-i8259: support "info pic" and "info irq",
Philippe Mathieu-Daudé <=
- [Qemu-devel] [PATCH 5/5] i8259: move TYPE_INTERRUPT_STATS_PROVIDER upper, Peter Xu, 2017/12/10
- Re: [Qemu-devel] [PATCH 0/5] i8259: cleanups and enhancements, Paolo Bonzini, 2017/12/19