Change the order of SHMEM initialization and reservation locking to
make code cleaner a tad and to prepare to 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.osipe...@collabora.com>
---
 drivers/gpu/drm/virtio/virtgpu_object.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c 
b/drivers/gpu/drm/virtio/virtgpu_object.c
index 21c19cdedce0..18f70ef6b4d0 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -236,6 +236,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);
@@ -248,15 +252,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;
-- 
2.35.1

Reply via email to