[PATCH 6.12 regression fix 2/2] drm/radeon: Revert: "use GEM references instead of TTMs"
Hans de Goede
hdegoede at redhat.com
Thu Oct 3 14:36:40 UTC 2024
Commit fd69ef05029f ("drm/radeon: use GEM references instead of TTMs")
causes a black screen at boot instead of showing the GDM login screen
(the system is still alive).
dmesg shows the following oops (abbreviated) when this happens:
[ 29.315203] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 29.315209] #PF: supervisor read access in kernel mode
[ 29.315213] #PF: error_code(0x0000) - not-present page
[ 29.315215] PGD 0 P4D 0
[ 29.315220] Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
[ 29.315225] CPU: 0 UID: 42 PID: 2253 Comm: Xwayland Tainted: G 6.12.0-rc1+ #159
[ 29.315232] Hardware name: Micro-Star International Co., Ltd. MS-7C95/B550M PRO-VDH WIFI (MS-7C95), BIOS 2.L0 07/18/2024
[ 29.315234] RIP: 0010:drm_gem_object_free+0xc/0x20
[ 29.315272] Call Trace:
[ 29.315274] <TASK>
[ 29.315305] ? asm_exc_page_fault+0x22/0x30
[ 29.315315] ? drm_gem_object_free+0xc/0x20
[ 29.315320] radeon_bo_unref+0x50/0x60 [radeon]
[ 29.315337] radeon_vm_fini+0x1ca/0x350 [radeon]
[ 29.315356] radeon_driver_postclose_kms+0x16d/0x180 [radeon]
[ 29.315370] drm_file_free+0x229/0x280
[ 29.315377] drm_release+0x5f/0xe0
[ 29.315381] __fput+0xfc/0x2c0
Revert the change to restore things back to working order.
Fixes: fd69ef05029f ("drm/radeon: use GEM references instead of TTMs")
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
drivers/gpu/drm/radeon/radeon_gem.c | 2 +-
drivers/gpu/drm/radeon/radeon_object.c | 7 +++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index 9735f4968b86..210e8d43bb23 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -88,7 +88,7 @@ static void radeon_gem_object_free(struct drm_gem_object *gobj)
if (robj) {
radeon_mn_unregister(robj);
- ttm_bo_put(&robj->tbo);
+ radeon_bo_unref(&robj);
}
}
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index d0e4b43d155c..450ff7daa46c 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -256,15 +256,18 @@ struct radeon_bo *radeon_bo_ref(struct radeon_bo *bo)
if (bo == NULL)
return NULL;
- drm_gem_object_get(&bo->tbo.base);
+ ttm_bo_get(&bo->tbo);
return bo;
}
void radeon_bo_unref(struct radeon_bo **bo)
{
+ struct ttm_buffer_object *tbo;
+
if ((*bo) == NULL)
return;
- drm_gem_object_put(&(*bo)->tbo.base);
+ tbo = &((*bo)->tbo);
+ ttm_bo_put(tbo);
*bo = NULL;
}
--
2.46.2
More information about the amd-gfx
mailing list