On Thu, Sep 12, 2024 at 04:53:34PM +0200, Albert Esteve wrote: > @@ -331,6 +333,37 @@ static void vub_device_realize(DeviceState *dev, Error > **errp) > do_vhost_user_cleanup(vdev, vub); > } > > + ret = vub->vhost_dev.vhost_ops->vhost_get_shmem_config(&vub->vhost_dev, > + &nregions, > + memory_sizes, > + errp); > + > + if (ret < 0) { > + do_vhost_user_cleanup(vdev, vub); > + } > + > + for (i = 0; i < nregions; i++) { > + if (memory_sizes[i]) { > + if (memory_sizes[i] % qemu_real_host_page_size() != 0) { > + error_setg(errp, "Shared memory %d size must be a power of 2 > " > + "no smaller than the page size", i); > + return; > + } > + > + cache_ptr = mmap(NULL, memory_sizes[i], PROT_NONE, > + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); > + if (cache_ptr == MAP_FAILED) { > + error_setg_errno(errp, errno, "Unable to mmap blank cache"); > + return; > + } > + > + virtio_new_shmem_region(vdev); > + memory_region_init_ram_ptr(vdev->shmem_list[i].mr,
I don't think this works because virtio_new_shmem_region() leaves .mr = NULL? Why allocates the MemoryRegion and assigns it to shmem_list[i].mr?
signature.asc
Description: PGP signature