[Virtio-fs] Failure as Operation not permitted on aarch64 machine
Masayoshi Mizuma
msys.mizuma at gmail.com
Fri Jul 19 22:50:12 UTC 2019
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
More information about the Virtio-fs
mailing list