在 2024/1/5 下午3:57, Tianrui Zhao 写道:
> The linux headers in this patch synchronized from linux kernel
> v6.7.0-rc8, and the loongarch kvm part of this patch series
> based on the header files. And the linux kernel has added the
> loongarch kvm support in master branch.
>
> This series add loongarch kvm support, mainly implement
> some interfaces used by kvm, such as kvm_arch_get/set_regs,
> kvm_arch_handle_exit, kvm_loongarch_set_interrupt, etc.
>
> Currently, we are able to boot LoongArch KVM Linux Guests.
> In loongarch VM, mmio devices and iocsr devices are emulated
> in user space such as APIC, IPI, pci devices, etc, other
> hardwares such as MMU, timer and csr are emulated in kernel.
>
> The running environment of LoongArch virt machine:
> 1. Get the Linux KVM environment of LoongArch in Linux mainline.
> make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- loongson3_defconfig
> make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu-
> 2. Get the qemu source: https://github.com/loongson/qemu
> git checkout kvm-loongarch
> ./configure --target-list="loongarch64-softmmu" --enable-kvm
> make
> 3. Get uefi bios of LoongArch virt machine:
> Link: https://github.com/tianocore/edk2-platforms/tree/master/Platform/Loongson/LoongArchQemuPkg#readme
> 4. Also you can access the binary files we have already built:
> https://github.com/yangxiaojuan-loongson/qemu-binary
>
> The command to boot loongarch virt machine:
> $ qemu-system-loongarch64 -machine virt -m 4G -cpu la464 \
> -smp 1 -bios QEMU_EFI.fd -kernel vmlinuz.efi -initrd ramdisk \
> -serial stdio -monitor telnet:localhost:4495,server,nowait \
> -append "root=/dev/ram rdinit=/sbin/init console=ttyS0,115200" \
> --nographic
>
> Changes for v4:
> 1. Synchronize linux headers from linux v6.7.0-rc8.
> 2. Move kvm.c and kvm_loongarch.h into target/loongarch/kvm/
> directory.
> 3. Add "#ifndef CONFIG_USER_ONLY" before loongarch_cpu_do_interrupt
> to fix compiling issue.
> 4. Remove "#ifdef CONFIG_TCG" before "#include "exec/cpu_ldst.h""
> in fpu_helper.c, As it has been changed in other patches.
>
> Changes for v3:
> 1. Synchronize linux headers from linux v6.7.0-rc7.
> 2. Fix compiling error when config enable-kvm and disable-tcg
> at one time.
>
> Changes for v2:
> 1. Synchronize linux headers from linux v6.7.0-rc6.
> 2. Remove the stub function: kvm_loongarch_set_interrupt, as kvm_enabled
> 3. Move the kvm function such as kvm_arch_reset_vcpu from cpu.h to
> loongarch_kvm.h, and supplement "#include <cpu.h>" in loongarch_kvm.h.
>
> Changes for v1:
> 1. Synchronous KVM headers about LoongArch KVM form linux kernel,
> as the LoongArch KVM patch series have been accepted by linux kernel.
> 2. Remove the KVM_GET/SET_ONE_UREG64 macro in target/loongarch, and
> use the common interface kvm_get/set_one_reg to replace it.
> 3. Resolve the compiling errors when LoongArch is built by other archs.
>
> Tianrui Zhao (9):
> linux-headers: Synchronize linux headers from linux v6.7.0-rc8
> target/loongarch: Define some kvm_arch interfaces
> target/loongarch: Supplement vcpu env initial when vcpu reset
> target/loongarch: Implement kvm get/set registers
> target/loongarch: Implement kvm_arch_init function
> target/loongarch: Implement kvm_arch_init_vcpu
> target/loongarch: Implement kvm_arch_handle_exit
> target/loongarch: Implement set vcpu intr for kvm
> target/loongarch: Add loongarch kvm into meson build
>
> include/standard-headers/drm/drm_fourcc.h | 2 +
> include/standard-headers/linux/fuse.h | 10 +-
> include/standard-headers/linux/pci_regs.h | 24 +-
> include/standard-headers/linux/vhost_types.h | 7 +
> .../standard-headers/linux/virtio_config.h | 5 +
> include/standard-headers/linux/virtio_pci.h | 11 +
> linux-headers/asm-arm64/kvm.h | 32 +
> linux-headers/asm-generic/unistd.h | 14 +-
> linux-headers/asm-loongarch/bitsperlong.h | 1 +
> linux-headers/asm-loongarch/kvm.h | 108 +++
> linux-headers/asm-loongarch/mman.h | 1 +
> linux-headers/asm-loongarch/unistd.h | 5 +
> linux-headers/asm-mips/unistd_n32.h | 4 +
> linux-headers/asm-mips/unistd_n64.h | 4 +
> linux-headers/asm-mips/unistd_o32.h | 4 +
> linux-headers/asm-powerpc/unistd_32.h | 4 +
> linux-headers/asm-powerpc/unistd_64.h | 4 +
> linux-headers/asm-riscv/kvm.h | 12 +
> linux-headers/asm-s390/unistd_32.h | 4 +
> linux-headers/asm-s390/unistd_64.h | 4 +
> linux-headers/asm-x86/unistd_32.h | 4 +
> linux-headers/asm-x86/unistd_64.h | 3 +
> linux-headers/asm-x86/unistd_x32.h | 3 +
> linux-headers/linux/iommufd.h | 180 +++-
> linux-headers/linux/kvm.h | 11 +
> linux-headers/linux/psp-sev.h | 1 +
> linux-headers/linux/stddef.h | 9 +-
> linux-headers/linux/userfaultfd.h | 9 +-
> linux-headers/linux/vfio.h | 47 +-
> linux-headers/linux/vhost.h | 8 +
> meson.build | 3 +
> target/loongarch/cpu.c | 39 +-
> target/loongarch/cpu.h | 5 +-
> target/loongarch/internals.h | 5 +-
> target/loongarch/kvm/kvm.c | 768 ++++++++++++++++++
> target/loongarch/kvm/kvm_loongarch.h | 16 +
> target/loongarch/kvm/meson.build | 1 +
> target/loongarch/meson.build | 1 +
> target/loongarch/trace-events | 15 +
> target/loongarch/trace.h | 1 +
> 40 files changed, 1348 insertions(+), 41 deletions(-)
> create mode 100644 linux-headers/asm-loongarch/bitsperlong.h
> create mode 100644 linux-headers/asm-loongarch/kvm.h
> create mode 100644 linux-headers/asm-loongarch/mman.h
> create mode 100644 linux-headers/asm-loongarch/unistd.h
> create mode 100644 target/loongarch/kvm/kvm.c
> create mode 100644 target/loongarch/kvm/kvm_loongarch.h
> create mode 100644 target/loongarch/kvm/meson.build
> create mode 100644 target/loongarch/trace-events
> create mode 100644 target/loongarch/trace.h
>
Applied to loongarch-next.
Thanks.
Song Gao