drm/vkms: Hold gem object while still in-use
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / vkms / vkms_gem.c
index 6489bfe..8ba8b87 100644 (file)
@@ -95,10 +95,10 @@ vm_fault_t vkms_gem_fault(struct vm_fault *vmf)
        return ret;
 }
 
-struct drm_gem_object *vkms_gem_create(struct drm_device *dev,
-                                      struct drm_file *file,
-                                      u32 *handle,
-                                      u64 size)
+static struct drm_gem_object *vkms_gem_create(struct drm_device *dev,
+                                             struct drm_file *file,
+                                             u32 *handle,
+                                             u64 size)
 {
        struct vkms_gem_object *obj;
        int ret;
@@ -111,7 +111,6 @@ struct drm_gem_object *vkms_gem_create(struct drm_device *dev,
                return ERR_CAST(obj);
 
        ret = drm_gem_handle_create(file, &obj->gem, handle);
-       drm_gem_object_put_unlocked(&obj->gem);
        if (ret)
                return ERR_PTR(ret);
 
@@ -140,6 +139,8 @@ int vkms_dumb_create(struct drm_file *file, struct drm_device *dev,
        args->size = gem_obj->size;
        args->pitch = pitch;
 
+       drm_gem_object_put_unlocked(gem_obj);
+
        DRM_DEBUG_DRIVER("Created object of size %lld\n", size);
 
        return 0;