The problem seems to be that the FS field which controls availability of floating point operations in the vsstatus register is not set by KVM while OpenSBI enables the field in the mstatus register.
-- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux-meta-riscv in Ubuntu. https://bugs.launchpad.net/bugs/2077731 Title: riscv64 EDK 2 crashes in KVM based emulation Status in edk2 package in Ubuntu: New Status in linux-meta-riscv package in Ubuntu: New Status in qemu package in Ubuntu: New Status in edk2 source package in Noble: New Status in linux-meta-riscv source package in Noble: New Status in qemu source package in Noble: New Status in edk2 source package in Oracular: New Status in linux-meta-riscv source package in Oracular: New Status in qemu source package in Oracular: New Bug description: When running EDK2 as payload for QEMU using KVM a crash occurs in the VM: $ qemu-system-riscv64 -M virt,acpi=off -accel kvm -m 4096 -nographic -drive if=pflash,format=raw,unit=0,file=RISCV_VIRT_CODE.fd,readonly=on -drive if=pflash,format=raw,unit=1,file=RISCV_VIRT_VARS.fd !!!! RISCV64 Exception Type - 0000000000000002(EXCEPT_RISCV_ILLEGAL_INST) !!!! t0 = 0x00000000083FFFB28 t1 = 0x00000000083238BC8 t2 = 0x00000000000000000 t3 = 0x00000000000000000 t4 = 0x00000000000000000 t5 = 0x00000000000000000 t6 = 0x00000000000000000 s0 = 0x00000000083FFFBC0 s1 = 0x00000000000000000 s2 = 0x00000000000000000 s3 = 0x00000000000000000 s4 = 0x00000000000000000 s5 = 0x00000000000000000 s6 = 0x00000000000000000 s7 = 0x00000000000000000 s8 = 0x00000000000000000 s9 = 0x00000000000000000 s10 = 0x00000000000000000 s11 = 0x00000000000000000 a0 = 0x0000000017E1DDD10 a1 = 0x00000000000000021 a2 = 0x0000000017E1B1A80 a3 = 0x00000000000000032 a4 = 0x00000000000000021 a5 = 0x00000000000000021 a6 = 0x000000000832391E0 a7 = 0x00000000083FFFA64 zero = 0x00000000000000000 ra = 0x0000000017E0AFA08 sp = 0x00000000000000004 gp = 0x00000000000000000 tp = 0x00000000000000000 sepc = 0x0000000017E0B0824 sstatus = 0x00000000200000120 stval = 0x000000000D20787D3 QEMU: Terminated To reproduce the issue: Run a Noble RISC-V virtual machine as described in https://wiki.ubuntu.com/RISC-V/QEMU. sudo apt-get update sudo apt-get install qemu-efi-riscv64 qemu-system-misc cp /usr/share/qemu-efi-riscv64/RISCV_VIRT_*.fd . qemu-system-riscv64 \ -M virt,acpi=off -accel tcg -m 1024 \ -nographic \ -drive if=pflash,format=raw,unit=0,file=RISCV_VIRT_CODE.fd,readonly=on \ -drive if=pflash,format=raw,unit=1,file=RISCV_VIRT_VARS.fd # In the EFI shell reset -s sudo modprobe kvm sudo qemu-system-riscv64 \ -M virt,acpi=off -accel kvm -m 1024 \ -nographic \ -drive if=pflash,format=raw,unit=0,file=RISCV_VIRT_CODE.fd,readonly=on \ -drive if=pflash,format=raw,unit=1,file=RISCV_VIRT_VARS.fd # A crash occurs # RISCV64 Exception Type - 0000000000000002(EXCEPT_RISCV_ILLEGAL_INST) # Terminate emulation with <CTRL+A><x> ProblemType: Bug DistroRelease: Ubuntu 24.04 Package: qemu-efi-riscv64 2024.02-2 ProcVersionSignature: Ubuntu 6.8.0-31.31.1-generic 6.8.1 Uname: Linux 6.8.0-31-generic riscv64 ApportVersion: 2.28.1-0ubuntu2 Architecture: riscv64 CasperMD5CheckResult: unknown CloudArchitecture: riscv64 CloudBuildName: server CloudID: nocloud CloudName: unknown CloudPlatform: nocloud CloudSerial: 20240423 CloudSubPlatform: seed-dir (/var/lib/cloud/seed/nocloud-net) Date: Fri Aug 23 13:10:55 2024 Dependencies: PackageArchitecture: all ProcEnviron: LANG=C.UTF-8 PATH=(custom, no user) SHELL=/bin/bash TERM=vt220 SourcePackage: edk2 UpgradeStatus: No upgrade log present (probably fresh install) To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/edk2/+bug/2077731/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp