]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amdgpu: Replace in_interrupt() usage in gmc_v*_process_interrupt()
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 9 Feb 2021 12:44:37 +0000 (13:44 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 Mar 2021 03:27:58 +0000 (23:27 -0400)
The usage of in_interrupt() in gmc_v*_process_interrupt() is intended to
use a different code path if invoked from the interrupt handler vs
invoked from the workqueue.

The usage of in_interrupt() in drivers is phased out and Linus clearly
requested that code which changes behaviour depending on context should
either be separated or the context be conveyed in an argument passed by the
caller, which usually knows the context.

gmc_v*_process_interrupt() is invoked via the ->process() callback
from amdgpu_ih_process() which in turn is invoked either from
amdgpu_irq_handler() (the interrupt handler) or from
amdgpu_irq_handle_*() which is a workqueue.

amdgpu_irq::ih is always processed from the interrupt handler, the other
three struct amdgpu_ih_ring members are processed from a workqueue.

Replace the in_interrupt() check with a comparison against adev->irq.ih.
A similar check is already done to check if the ih pointer is from
ih_soft.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

index 58352ca3d4f0ca4852fa19bc1b0086a1e2c8b017..33e54eed2eec40513669654a43e659ce4a032db9 100644 (file)
@@ -113,7 +113,7 @@ static int gmc_v10_0_process_interrupt(struct amdgpu_device *adev,
                /* Delegate it to a different ring if the hardware hasn't
                 * already done it.
                 */
-               if (in_interrupt()) {
+               if (entry->ih == &adev->irq.ih) {
                        amdgpu_irq_delegate(adev, entry, 8);
                        return 1;
                }
index 45ba3819bb8fcb90bfceb0d204b2f5d5d4efa8d6..dcae83468a462980d324b4fb38d246a8b01933b5 100644 (file)
@@ -526,7 +526,7 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
                /* Delegate it to a different ring if the hardware hasn't
                 * already done it.
                 */
-               if (in_interrupt()) {
+               if (entry->ih == &adev->irq.ih) {
                        amdgpu_irq_delegate(adev, entry, 8);
                        return 1;
                }