On 5/15/24 19:42, Akihiko Odaki wrote: >>> It may be better to actually implement unmapping instead of returning an >>> error for consistency with the iov operation. Apparently crosvm also >>> unmaps blobs with VIRTIO_GPU_CMD_RESOURCE_UNREF. >> >> Then I'll add back `async_unmap_in_progress` because resource can be >> both mapped/unmapped on unref, and we'll need flag to know whether async >> unmapping has been finished to do the final unmapping of the resource. > > Such a situation should be already handled since unmapping in progress > blocks all commands (not just VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB but > literally all, including VIRTIO_GPU_CMD_RESOURCE_UNREF).
The async unmapping consists of 3 parts: 1. begin async unmapping with memory_region_del_subregion() and suspend 2. wait for res->mr to be freed and resume 3. finish the unmapping with final virgl_renderer_resource_unmap() Parts 1 and 3 are handled by virtio_gpu_virgl_async_unmap_resource_blob() The VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB is different because we know that blob is mapped in the first place. Hence we can safely perform the part 3, assuming that parts 1/2 has been completed. In case of VIRTIO_GPU_CMD_RESOURCE_UNREF, blob can be unmapped in the first place and we can't do the part 3 because it will error out for unmapped resource since parts 1/2 were not performed. -- Best regards, Dmitry