On Wed, Jul 17 2024, Xianglai Li <lixianglai@loongson.cn> 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@redhat.com>
> Cc: Song Gao <gaosong@loongson.cn>
> Cc: Huacai Chen <chenhuacai@kernel.org>
> Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
> Cc: "Michael S. Tsirkin" <mst@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: kvm@vger.kernel.org
> Cc: Bibo Mao <maobibo@loongson.cn>
>
> 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