|
Thomas Zimmermann |
e9f409 |
From 779596ce6a79e187995f04f143fc5ea44a565ea9 Mon Sep 17 00:00:00 2001
|
|
Thomas Zimmermann |
e9f409 |
From: Tom Rix <trix@redhat.com>
|
|
Thomas Zimmermann |
e9f409 |
Date: Thu, 17 Feb 2022 07:38:42 -0800
|
|
Thomas Zimmermann |
e9f409 |
Subject: drm/amdgpu: fix amdgpu_ras_block_late_init error handler
|
|
Thomas Zimmermann |
e9f409 |
Git-commit: 779596ce6a79e187995f04f143fc5ea44a565ea9
|
|
Thomas Zimmermann |
e9f409 |
Patch-mainline: v5.18-rc1
|
|
Thomas Zimmermann |
e9f409 |
References: bsc#1152489
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
Clang build fails with
|
|
Thomas Zimmermann |
e9f409 |
amdgpu_ras.c:2416:7: error: variable 'ras_obj' is used uninitialized
|
|
Thomas Zimmermann |
e9f409 |
whenever 'if' condition is true
|
|
Thomas Zimmermann |
e9f409 |
if (adev->in_suspend || amdgpu_in_reset(adev)) {
|
|
Thomas Zimmermann |
e9f409 |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
amdgpu_ras.c:2453:6: note: uninitialized use occurs here
|
|
Thomas Zimmermann |
e9f409 |
if (ras_obj->ras_cb)
|
|
Thomas Zimmermann |
e9f409 |
^~~~~~~
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
There is a logic error in the error handler's labels.
|
|
Thomas Zimmermann |
e9f409 |
ex/ The sysfs: is the last goto label in the normal code but
|
|
Thomas Zimmermann |
e9f409 |
is the middle of error handler. Rework the error handler.
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
cleanup: is the first error, so it's handler should be last.
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
interrupt: is the second error, it's handler is next. interrupt:
|
|
Thomas Zimmermann |
e9f409 |
handles the failure of amdgpu_ras_interrupt_add_hander() by
|
|
Thomas Zimmermann |
e9f409 |
calling amdgpu_ras_interrupt_remove_handler(). This is wrong,
|
|
Thomas Zimmermann |
e9f409 |
remove() assumes the interrupt has been setup, not torn down by
|
|
Thomas Zimmermann |
e9f409 |
add(). Change the goto label to cleanup.
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
sysfs is the last error, it's handler should be first. sysfs:
|
|
Thomas Zimmermann |
e9f409 |
handles the failure of amdgpu_ras_sysfs_create() by calling
|
|
Thomas Zimmermann |
e9f409 |
amdgpu_ras_sysfs_remove(). But when the create() fails there
|
|
Thomas Zimmermann |
e9f409 |
is nothing added so there is nothing to remove. This error
|
|
Thomas Zimmermann |
e9f409 |
handler is not needed. Remove the error handler and change
|
|
Thomas Zimmermann |
e9f409 |
goto label to interrupt.
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
Fixes: b293e891b057 ("drm/amdgpu: add helper function to do common ras_late_init/fini (v3)")
|
|
Thomas Zimmermann |
e9f409 |
Reviewed-by: Luben Tuikov <luben.tuikov@amd.com>
|
|
Thomas Zimmermann |
e9f409 |
Signed-off-by: Tom Rix <trix@redhat.com>
|
|
Thomas Zimmermann |
e9f409 |
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Thomas Zimmermann |
e9f409 |
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
|
|
Thomas Zimmermann |
e9f409 |
---
|
|
Thomas Zimmermann |
e9f409 |
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 11 +++++------
|
|
Thomas Zimmermann |
e9f409 |
1 file changed, 5 insertions(+), 6 deletions(-)
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
|
Thomas Zimmermann |
e9f409 |
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
|
Thomas Zimmermann |
e9f409 |
@@ -1998,20 +1998,19 @@ int amdgpu_ras_late_init(struct amdgpu_d
|
|
Thomas Zimmermann |
e9f409 |
if (ih_info->cb) {
|
|
Thomas Zimmermann |
e9f409 |
r = amdgpu_ras_interrupt_add_handler(adev, ih_info);
|
|
Thomas Zimmermann |
e9f409 |
if (r)
|
|
Thomas Zimmermann |
e9f409 |
- goto interrupt;
|
|
Thomas Zimmermann |
e9f409 |
+ goto cleanup;
|
|
Thomas Zimmermann |
e9f409 |
}
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
r = amdgpu_ras_sysfs_create(adev, fs_info);
|
|
Thomas Zimmermann |
e9f409 |
if (r)
|
|
Thomas Zimmermann |
e9f409 |
- goto sysfs;
|
|
Thomas Zimmermann |
e9f409 |
+ goto interrupt;
|
|
Thomas Zimmermann |
e9f409 |
|
|
Thomas Zimmermann |
e9f409 |
return 0;
|
|
Thomas Zimmermann |
e9f409 |
-cleanup:
|
|
Thomas Zimmermann |
e9f409 |
- amdgpu_ras_sysfs_remove(adev, ras_block);
|
|
Thomas Zimmermann |
e9f409 |
-sysfs:
|
|
Thomas Zimmermann |
e9f409 |
+
|
|
Thomas Zimmermann |
e9f409 |
+interrupt:
|
|
Thomas Zimmermann |
e9f409 |
if (ih_info->cb)
|
|
Thomas Zimmermann |
e9f409 |
amdgpu_ras_interrupt_remove_handler(adev, ih_info);
|
|
Thomas Zimmermann |
e9f409 |
-interrupt:
|
|
Thomas Zimmermann |
e9f409 |
+cleanup:
|
|
Thomas Zimmermann |
e9f409 |
amdgpu_ras_feature_enable(adev, ras_block, 0);
|
|
Thomas Zimmermann |
e9f409 |
return r;
|
|
Thomas Zimmermann |
e9f409 |
}
|