drm/radeon: always set GEM function pointer
authorChristian König <christian.koenig@amd.com>
Mon, 7 Oct 2024 18:30:19 +0000 (20:30 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 8 Oct 2024 13:46:31 +0000 (09:46 -0400)
Make sure to always set the GEM function pointer even for in kernel
allocations. This fixes a NULL pointer deref caused by switching to GEM
references.

Signed-off-by: Christian König <christian.koenig@amd.com>
Fixes: fd69ef05029f ("drm/radeon: use GEM references instead of TTMs")
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/radeon_gem.c
drivers/gpu/drm/radeon/radeon_object.c

index 9735f4968b86e6d6f9b09fbec98eef482ce90aad..bf2d4b16dc2a7ff0bb7dec7806947365a65e3e56 100644 (file)
@@ -44,8 +44,6 @@ struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj);
 int radeon_gem_prime_pin(struct drm_gem_object *obj);
 void radeon_gem_prime_unpin(struct drm_gem_object *obj);
 
-const struct drm_gem_object_funcs radeon_gem_object_funcs;
-
 static vm_fault_t radeon_gem_fault(struct vm_fault *vmf)
 {
        struct ttm_buffer_object *bo = vmf->vma->vm_private_data;
@@ -132,7 +130,6 @@ retry:
                return r;
        }
        *obj = &robj->tbo.base;
-       (*obj)->funcs = &radeon_gem_object_funcs;
        robj->pid = task_pid_nr(current);
 
        mutex_lock(&rdev->gem.mutex);
index d0e4b43d155c69ad625672ab0f1c3a66ef672e5b..7672404fdb29b563d4b7106c10edb1aaeb51f7a8 100644 (file)
@@ -151,6 +151,7 @@ int radeon_bo_create(struct radeon_device *rdev,
        if (bo == NULL)
                return -ENOMEM;
        drm_gem_private_object_init(rdev_to_drm(rdev), &bo->tbo.base, size);
+       bo->tbo.base.funcs = &radeon_gem_object_funcs;
        bo->rdev = rdev;
        bo->surface_reg = -1;
        INIT_LIST_HEAD(&bo->list);