Hello,

I would appreciate if you could help me to resolve following failure.

I tried to use virtio-fs on aarch64 [1], however, qemu [2] failed to boot
as Operation not permitted.

  ---
  # ./virtiofsd -o vhost_user_socket=/tmp/vhostqemu -o source=/tmp/share -o 
cache=none &

  # qemu-system-aarch64 -machine virt,accel=kvm,gic-version=3 -cpu host -smp 8 
... [3]

  UEFI firmware starting.
  kvm_set_phys_mem: error registering slot: Operation not permitted
  ---

>From the ftrace log, the error happened because kvm_set_user_memory_region()
returned as -1 (EPERM).

  ---
  qemu-system-aar-28381 [003] ....  6683.601097: tracing_mark_write: 
kvm_set_user_memory Slot#3 flags=0x0 gpa=0x8000000000 size=0x40000000 
ua=0xfffe0ba00000 ret=-1
  ---

kvm_set_user_memory_region() returned -1 because 
kvm_arch_prepare_memory_region()
in kernel returned as -EPERM.

   ---
   int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                   struct kvm_memory_slot *memslot,
                                   const struct kvm_userspace_memory_region 
*mem,
                                   enum kvm_mr_change change)
   {
   ...
                   if (writable && !(vma->vm_flags & VM_WRITE)) {
                           ret = -EPERM;
                           break;
                   }
   ---

Actually, the /proc/PID/maps showed ua=0xfffe0ba00000 didn't have PROT_WRITE.

  ---
  ...
  014b0000-014f0000 rw-p 00000000 00:00 0 
  1c840000-1d470000 rw-p 00000000 00:00 0                                  
[heap]
  fffe0ba00000-fffe4ba00000 ---p 00000000 00:00 0 <===
  fffe4ba00000-fffe4ba10000 ---p 00000000 00:00 0 
  fffe4bc00000-fffe4fc00000 rw-p 00000000 00:00 0 
  fffe4fc00000-fffe4fc10000 ---p 00000000 00:00 0 
  fffe4fe00000-fffe53e00000 rw-p 00000000 00:00 0 
  fffe53e00000-fffe53e10000 ---p 00000000 00:00 0 
  ...
  ---

I'm not sure why ua=0xfffe0ba00000 didn't have PROT_WRITE because the memory
was allocated by qemu_anon_ram_alloc() and it should set PROT_READ | PROT_WRITE.

  ---
  qemu-system-aar-28372 [022] ....  6674.795027: tracing_mark_write: 
qemu_anon_ram_alloc size 1073741824 ptr 0xfffe0ba00000
  ---

qemu boots successfully if I remove "-device 
vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=myfs",
so I suppose the option is related to the failure...


[1]: host kernel is 5.2.0.
     guest kernel is https://github.com/rhvgoyal/linux/, branch: 
virtio-fs-dev-5.1.

[2]: I got the qemu from:
     https://gitlab.com/virtio-fs/qemu.git

[3]: Qemu option is:

$QEMU -machine virt,accel=kvm,gic-version=3 \
        -cpu host \
        -smp 8 \
        -m 4G,maxmem=4G \
        -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on \
        -numa node,memdev=mem \
        -drive 
file=/usr/share/AAVMF/AAVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \
        -drive file=$VARS,if=pflash,format=raw,unit=1 \
        -chardev socket,id=char0,path=/tmp/vhostqemu \
        -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=myfs \
        -nographic \
        -serial mon:stdio \
        --trace events=/tmp/qemu-trace-events \
        -drive if=virtio,file=/var/lib/libvirt/images/guest.qcow2

Thanks,
Masa

Reply via email to