[PATCH v4 0/9] Add loongarch kvm accel support

Tianrui Zhao posted 9 patches 3 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20240105075804.1228596-1-zhaotianrui@loongson.cn
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Cornelia Huck <cohuck@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Thomas Huth <thuth@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Song Gao <gaosong@loongson.cn>
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
[PATCH v4 0/9] Add loongarch kvm accel support
Posted by Tianrui Zhao 3 months, 3 weeks ago
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

-- 
2.39.1
Re: [PATCH v4 0/9] Add loongarch kvm accel support
Posted by gaosong 3 months, 2 weeks ago
在 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


Re: [PATCH v4 0/9] Add loongarch kvm accel support
Posted by Philippe Mathieu-Daudé 3 months, 2 weeks ago
Hi Song,

On 10/1/24 03:46, gaosong wrote:
> 在 2024/1/5 下午3:57, Tianrui Zhao 写道:

>> 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.


>> 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


> Applied to loongarch-next.

Sorry it took me some time to test this on a loongarch64
host. I made minor changes to patch #8, please consider
the alternative:
https://lore.kernel.org/qemu-devel/20240110094152.52138-1-philmd@linaro.org/ 
and
https://lore.kernel.org/qemu-devel/20240110094152.52138-2-philmd@linaro.org/

Re: [PATCH v4 0/9] Add loongarch kvm accel support
Posted by gaosong 3 months, 2 weeks ago
在 2024/1/10 下午5:42, Philippe Mathieu-Daudé 写道:
> Hi Song,
>
> On 10/1/24 03:46, gaosong wrote:
>> 在 2024/1/5 下午3:57, Tianrui Zhao 写道:
>
>>> 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.
>
>
>>> 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
>
>
>> Applied to loongarch-next.
>
> Sorry it took me some time to test this on a loongarch64
> host. I made minor changes to patch #8, please consider
> the alternative:
> https://lore.kernel.org/qemu-devel/20240110094152.52138-1-philmd@linaro.org/ 
> and
> https://lore.kernel.org/qemu-devel/20240110094152.52138-2-philmd@linaro.org/ 
>

Thank you ,  I wll  apply them to loongarch-next.
if no new problem with this series,  I think we can merge it on this week.

Thanks.
Song Gao