Incorrect warnings when using vhost without numa

Host environment

  • Operating system: Ubuntu 22.04

  • OS/kernel version: Linux 6.0.5+ #3 SMP PREEMPT_DYNAMIC x86_64 GNU/Linux

  • Architecture: x86_64

  • QEMU flavor: qemu-system-mips, qemu-system-x86_64

  • QEMU version: QEMU emulator version 7.1.92 (v7.1.0-1922-g7c09a7f6)

  • QEMU command line (MIPS):

qemu-system-mips \
  -M malta \
  -nographic \
  -kernel vmlinux-5.16-malta-vsock \
  -append "quiet" \
  -object memory-backend-file,id=mem0,mem-path=/tmp/mem,size=128M,share=on \
  -chardev socket,id=char0,reconnect=0,path=/tmp/vhost4.socket \
  -device vhost-user-vsock-pci,chardev=char0
  • QEMU command line (x86_64):
qemu-system-x86_64 \
  -nographic \
  -kernel linux5.16_vsock \
  -object memory-backend-file,id=mem0,mem-path=/tmp/mem,size=128M,share=on \
  -append "quiet" \
  -chardev socket,id=char0,reconnect=0,path=/tmp/vhost4.socket \
  -device vhost-user-vsock-pci,chardev=char0

Emulated/Virtualized environment

Description of problem

Part A: Misleading error message. Running the above command for any architecture fails to initialize vhost, and prints the following, incorrect advice

qemu-system-mips: Failed initializing vhost-user memory map, consider using -object memory-backend-file share=on
qemu-system-mips: vhost_set_mem_table failed: Invalid argument (22)
qemu-system-mips: Error starting vhost: 22

Since the command line already contains -object memory-backend-file,id=mem1,mem-path=/tmp/mem,size=256M,share=on this error message should not be printed. For x86_64, this can be resolved by adding -numa node,memdev=mem0 to the command line. As such, I think this error message should instead guide a user to adding that argument.

Part B: No documented configuration to run vhost-user for machines that don't support numa. The mips malta machine does not support the -numa flag. It is unclear if this means that vhost cannot be used with this platform or if a non-numa configuration with a memory-backend-file can be used.

Steps to reproduce

  1. Run vhost-user-vsock --socket=/tmp/vhost4.socket --uds-path=/tmp/foo from https://github.com/rust-vmm/vhost-device.
  2. Run the above QEMU command
Edited by Andrew Fasano