RISCV can't get smp working within QEMU KVM

Host OS

Linux milkv-megrez-2 6.6.73-win2030 #2025.01.23.02.46+aeb0f375c SMP Thu Jan 23 03:08:39 UTC 2025 riscv64 GNU/Linux

qemu-system-riscv64 --enable-kvm -M virt -cpu host -m 4096 -smp 4 -nographic \
-device virtio-net-device,netdev=eth0 -netdev user,id=eth0 \
-device virtio-rng-pci \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-drive file=FreeBSD-15.0-CURRENT-riscv-riscv64-GENERICSD.qcow2,format=qcow2,if=virtio

Uboot can see all 4 HART, however

Code:
root@generic:~ # sysctl kern.smp
kern.smp.topology: 0          
kern.smp.cores: 1            
kern.smp.threads_per_core: 1  
kern.smp.cpus: 1              
kern.smp.disabled: 0          
kern.smp.active: 0            
kern.smp.maxcpus: 16          
kern.smp.maxid: 0

Is something that I missed?
 
I have FreeBSD/RISC-V running in qemu (linux host) with SMP with no problems.

Code:
~(warisc)86% sysctl kern.smp
kern.smp.forward_signal_enabled: 1
kern.smp.topology: 0
kern.smp.cores: 8
kern.smp.threads_per_core: 1
kern.smp.cpus: 8
kern.smp.disabled: 0
kern.smp.active: 1
kern.smp.maxcpus: 16
kern.smp.maxid: 7

Code:
qemu-system-riscv64 \
  -M virt \
  -smp 8 \
  -m 32G \
  -nographic \
  -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
  -kernel u-boot.bin \
  -drive file=FreeBSD-14.0-RELEASE-riscv-riscv64.raw,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -nographic \
  -netdev user,id=net0,ipv6=off,hostfwd=tcp::3235-:22 \
  -device virtio-net-device,netdev=net0 \
  -device virtio-rng-pci
 
I have FreeBSD/RISC-V running in qemu (linux host) with SMP with no problems.

Code:
~(warisc)86% sysctl kern.smp
kern.smp.forward_signal_enabled: 1
kern.smp.topology: 0
kern.smp.cores: 8
kern.smp.threads_per_core: 1
kern.smp.cpus: 8
kern.smp.disabled: 0
kern.smp.active: 1
kern.smp.maxcpus: 16
kern.smp.maxid: 7

Code:
qemu-system-riscv64 \
  -M virt \
  -smp 8 \
  -m 32G \
  -nographic \
  -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
  -kernel u-boot.bin \
  -drive file=FreeBSD-14.0-RELEASE-riscv-riscv64.raw,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -nographic \
  -netdev user,id=net0,ipv6=off,hostfwd=tcp::3235-:22 \
  -device virtio-net-device,netdev=net0 \
  -device virtio-rng-pci
Mine is P550 (which support hypervisor extension)
Code:
--enable-kvm
seems the main difference.
 
Back
Top