drm/virtio: Simplify error handling of virtio_gpu_object_create()
authorDmitry Osipenko <dmitry.osipenko@collabora.com>
Thu, 30 Jun 2022 20:07:23 +0000 (23:07 +0300)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 19 Jul 2022 12:40:58 +0000 (14:40 +0200)
Change the order of SHMEM initialization and reservation locking
to make code cleaner and to prepare for transitioning of the common
GEM SHMEM code to use the GEM's reservation lock instead of the
shmem.page_lock.

There is no need to lock reservation during allocation of the SHMEM pages
because the lock is needed only to avoid racing with the async host-side
allocation. Hence we can safely move the SHMEM initialization out of the
reservation lock.

Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20220630200726.1884320-7-dmitry.osipenko@collabora.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/virtio/virtgpu_object.c

index 75a159df0af66682a4f4bdf477430bccee3439ad..62b4d075cfac607c08051d337505cb39e855a420 100644 (file)
@@ -235,6 +235,10 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
 
        bo->dumb = params->dumb;
 
+       ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents);
+       if (ret != 0)
+               goto err_put_id;
+
        if (fence) {
                ret = -ENOMEM;
                objs = virtio_gpu_array_alloc(1);
@@ -247,15 +251,6 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
                        goto err_put_objs;
        }
 
-       ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents);
-       if (ret != 0) {
-               if (fence)
-                       virtio_gpu_array_unlock_resv(objs);
-               virtio_gpu_array_put_free(objs);
-               virtio_gpu_free_object(&shmem_obj->base);
-               return ret;
-       }
-
        if (params->blob) {
                if (params->blob_mem == VIRTGPU_BLOB_MEM_GUEST)
                        bo->guest_blob = true;