If kernel irqchip is set such as kvm_irqchip_in_kernel() return true, there
is special operations with irqchips in such fields:
  1. During irqchip object realization, kvm_create_device() is used here
     to create irqchip in KVM kernel.
  2. Add pre_save and post_load function, where register states can be
     get and set from KVM kernel.
  3. With reset function, register and software state is initialized
     in qemu user space and set to KVM kernel with ioctl command.
  4. Interrupt injection to kernel, IRQ line interrupt is injected with
     API kvm_set_irq() and MSI interrupt is injected with API
     kvm_irqchip_send_msi().

---
v2 ... v3:
  1. Implement reset function with kernel irqchip device, initialize the
     registers and set to KVM kernel.
  2. Use register offset address rather base address in function
     kvm_pch_pic_save_load().
  3. Rename kvm_xxx_save_load() with kvm_xxx_access().
  4. Rename kvm_xxx_pre_save() with kvm_xxx_get(), kvm_xxx_post_load()
     with kvm_xxx_put().
  5. Macro KVM_IRQCHIP_NUM_PINS defined in UAPI header file is used
     kvm_loongarch_init_irq_routing(), which means the maxinium irq line
     number.

v1 ... v2:
  1. Remove property irqchip-in-kernel with irqchip device driver, use
     global API kvm_irqchip_in_kernel() directly.
  2. Do not create memory map region if kernel irqchip is set.
  3. Modify copy and paste typo issue in kvm_arch_irqchip_create().
  4. Do not emulate MISC_FUNC_REG IOCSR register if kernel irqchip is
     set since it access EXTIOI memory region, this register need be
     emulated in kernel.

Bibo Mao (13):
  hw/intc/loongarch_extioi: Add kernel irqchip realize function
  hw/intc/loongarch_extioi: Add kernel irqchip save and restore function
  hw/intc/loongarch_ipi: Add kernel irqchip realize function
  hw/intc/loongson_ipi: Add load and save interface with ipi_common
    class
  hw/intc/loongarch_ipi: Add kernel irqchip save and restore function
  hw/intc/loongarch_pch_msi: Inject MSI interrupt to kernel
  hw/intc/loongarch_pch: Add kernel irqchip realize function
  hw/intc/loongarch_pch: Add kernel irqchip save and restore function
  hw/intc/loongarch_pch: Inject irq line interrupt to kernel
  hw/loongarch/virt: Add reset support for kernel irqchip
  target/loongarch: Report error with split kernel_irqchip option
  hw/loongarch/virt: Disable emulation with IOCSR misc register
  hw/loongarch/virt: Add kernel irqchip support

 hw/intc/loongarch_extioi.c             |  49 ++++++---
 hw/intc/loongarch_extioi_kvm.c         | 140 +++++++++++++++++++++++++
 hw/intc/loongarch_ipi.c                |  29 +++++
 hw/intc/loongarch_ipi_kvm.c            |  85 +++++++++++++++
 hw/intc/loongarch_pch_msi.c            |  10 ++
 hw/intc/loongarch_pch_pic.c            |  45 +++++++-
 hw/intc/loongarch_pic_kvm.c            |  89 ++++++++++++++++
 hw/intc/loongson_ipi_common.c          |  33 ++++++
 hw/intc/meson.build                    |   6 ++
 hw/loongarch/virt.c                    |  65 +++++++-----
 include/hw/intc/loongarch_extioi.h     |   5 +
 include/hw/intc/loongarch_ipi.h        |   5 +
 include/hw/intc/loongarch_pch_pic.h    |   5 +
 include/hw/intc/loongarch_pic_common.h |   1 +
 include/hw/intc/loongson_ipi_common.h  |   2 +
 target/loongarch/cpu.h                 |   1 +
 target/loongarch/kvm/kvm.c             |  23 +++-
 17 files changed, 552 insertions(+), 41 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_pic_kvm.c


base-commit: 09be8a511a2e278b45729d7b065d30c68dd699d0
-- 
2.39.3


Reply via email to