On Wed, Jul 17 2024, Xianglai Li <lixianglai@xxxxxxxxxxx> wrote: > Before this, the interrupt controller simulation has been completed > in the user mode program. In order to reduce the loss caused by frequent > switching of the virtual machine monitor from kernel mode to user mode > when the guest accesses the interrupt controller, we add the interrupt > controller simulation in kvm. > > In qemu side implementation is simple, just make a new IPI EXTIOI PCH KVM > related several classes, And the interface to access kvm related data is > implemented. > > Most of the simulation work of the interrupt controller is done in kvm. > Because KVM the changes have not been the Linux community acceptance, > the patches of this series will have RFC label until KVM patch into the community. > > For the implementation of kvm simulation, refer to the following documents. > > IPI simulation implementation reference: > https://github.com/loongson/LoongArch-Documentation/tree/main/docs/Loongson-3A5000-usermanual-EN/inter-processor-interrupts-and-communication > > EXTIOI simulation implementation reference: > https://github.com/loongson/LoongArch-Documentation/tree/main/docs/Loongson-3A5000-usermanual-EN/io-interrupts/extended-io-interrupts > > PCH-PIC simulation implementation reference: > https://github.com/loongson/LoongArch-Documentation/blob/main/docs/Loongson-7A1000-usermanual-EN/interrupt-controller.adoc > > For PCH-MSI, we used irqfd mechanism to send the interrupt signal > generated by user state to kernel state and then to EXTIOI without > maintaining PCH-MSI state in kernel state. > > You can easily get the code from the link below: > the kernel: > https://github.com/lixianglai/linux > the branch is: interrupt > > the qemu: > https://github.com/lixianglai/qemu > the branch is: interrupt > > Please note that the code above is regularly updated based on community > reviews. > > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Song Gao <gaosong@xxxxxxxxxxx> > Cc: Huacai Chen <chenhuacai@xxxxxxxxxx> > Cc: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> > Cc: "Michael S. Tsirkin" <mst@xxxxxxxxxx> > Cc: Cornelia Huck <cohuck@xxxxxxxxxx> > Cc: kvm@xxxxxxxxxxxxxxx > Cc: Bibo Mao <maobibo@xxxxxxxxxxx> > > Xianglai Li (4): > hw/loongarch: Add KVM IPI device support > hw/loongarch: Add KVM extioi device support > hw/loongarch: Add KVM pch pic device support > hw/loongarch: Add KVM pch msi device support > > hw/intc/Kconfig | 12 ++ > hw/intc/loongarch_extioi_kvm.c | 141 +++++++++++++++++++ > hw/intc/loongarch_ipi_kvm.c | 207 ++++++++++++++++++++++++++++ > hw/intc/loongarch_pch_msi.c | 42 ++++-- > hw/intc/loongarch_pch_pic.c | 20 ++- > hw/intc/loongarch_pch_pic_kvm.c | 189 +++++++++++++++++++++++++ > hw/intc/meson.build | 3 + > hw/loongarch/virt.c | 141 ++++++++++++------- > include/hw/intc/loongarch_extioi.h | 34 ++++- > include/hw/intc/loongarch_pch_msi.h | 2 +- > include/hw/intc/loongarch_pch_pic.h | 51 ++++++- > include/hw/intc/loongson_ipi.h | 22 +++ > include/hw/loongarch/virt.h | 15 ++ > linux-headers/asm-loongarch/kvm.h | 7 + > linux-headers/linux/kvm.h | 6 + Please split out any headers changes into a separate patch -- just put them into a placeholder patch at the beginning of the series as long as the changes are not yet upstream (and replace that with a full headers sync later.) > 15 files changed, 823 insertions(+), 69 deletions(-) > create mode 100644 hw/intc/loongarch_extioi_kvm.c > create mode 100644 hw/intc/loongarch_ipi_kvm.c > create mode 100644 hw/intc/loongarch_pch_pic_kvm.c