Some weeks back I posted my MSI rework for qemu-kvm that shall once help integrating those bits into upstream. After that I wondered how a rewritten in-kernel irqchip model could look like and make use of this. But then I realized that there is actually no technical need to role out a first version of kvm irqchips that already support MSI. As the MSI thing will likely take a few more iterations, I now decided to rush forward with basic kvm irqchip for QEMU upstream. Here we go. My idea was always to create proper alternatives to the existing user space device models while keeping the vmstates 100% compatible. I think I succeeded in this, tests worked fine so far. The kvm and the user space models now have a common core where they share logic and specific code modules where they differ. Also, I moved all kvm devices into hw/kvm. The in-kernel irqchip support can be controlled via a machine property (-machine ...,kernel_irqchip=on), in contrast to qemu-kvm's dedicated command line switch. This series keeps the support off by default because we still lack the MSI bits as I explained. Also, in-kernel PIT is not yet implemented and TPR patching/VAPIC (for Windows guests). The merge story would basically look similar to what we did before with the clean-room reimplementation of kvm for QEMU: Merge into upstream, merge back into qemu-kvm, disabling the new bits for now, then gradually switching over to the new services, specifically once they are feature-equivalent. Of course, I will support these steps as usual. So, feedback and review welcome! Jan Kiszka (16): msi: Generalize msix_supported to msi_supported kvm: Move kvmclock into hw/kvm folder apic: Stop timer on reset apic: Factor out core for KVM reuse apic: Open-code timer save/restore i8259: Factor out core for KVM reuse ioapic: Convert to memory API ioapic: Reject non-dword accesses to IOWIN register ioapic: Factor out core for KVM reuse memory: Introduce memory_region_init_reservation kvm: Introduce core services for in-kernel irqchip support kvm: x86: Establish IRQ0 override control kvm: x86: Add user space part for in-kernel APIC kvm: x86: Add user space part for in-kernel i8259 kvm: x86: Add user space part for in-kernel IOAPIC kvm: Arm in-kernel irqchip support Makefile.objs | 2 +- Makefile.target | 6 +- configure | 1 + hw/apic.c | 288 ++++------------------------------------ hw/apic_common.c | 262 ++++++++++++++++++++++++++++++++++++ hw/apic_internal.h | 111 +++++++++++++++ hw/i8259.c | 78 +----------- hw/i8259_common.c | 103 ++++++++++++++ hw/i8259_internal.h | 67 +++++++++ hw/ioapic.c | 136 +++---------------- hw/ioapic_common.c | 89 ++++++++++++ hw/ioapic_internal.h | 94 +++++++++++++ hw/kvm/apic.c | 147 ++++++++++++++++++++ hw/{kvmclock.c => kvm/clock.c} | 10 +- hw/{kvmclock.h => kvm/clock.h} | 0 hw/kvm/i8259.c | 154 +++++++++++++++++++++ hw/kvm/ioapic.c | 120 +++++++++++++++++ hw/msi.c | 8 + hw/msi.h | 2 + hw/msix.c | 9 +- hw/msix.h | 2 - hw/pc.c | 20 ++- hw/pc.h | 1 + hw/pc_piix.c | 67 +++++++++- kvm-all.c | 154 +++++++++++++++++++++ kvm-stub.c | 5 + kvm.h | 13 ++ memory.c | 35 +++++ memory.h | 15 ++ qemu-config.c | 4 + qemu-options.hx | 5 +- sysemu.h | 1 - target-i386/kvm.c | 19 +++ trace-events | 2 +- vl.c | 1 - 35 files changed, 1548 insertions(+), 483 deletions(-) create mode 100644 hw/apic_common.c create mode 100644 hw/apic_internal.h create mode 100644 hw/i8259_common.c create mode 100644 hw/i8259_internal.h create mode 100644 hw/ioapic_common.c create mode 100644 hw/ioapic_internal.h create mode 100644 hw/kvm/apic.c rename hw/{kvmclock.c => kvm/clock.c} (96%) rename hw/{kvmclock.h => kvm/clock.h} (100%) create mode 100644 hw/kvm/i8259.c create mode 100644 hw/kvm/ioapic.c -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html