[PATCH 4/4] drm/sdma7: properly reference trap interrupts for userqs
Khatri, Sunil
sukhatri at amd.com
Mon Apr 14 17:35:54 UTC 2025
Reviewed-by: Sunil Khatri <sunil.khatri at amd.com>
On 4/13/2025 9:36 PM, Alex Deucher wrote:
> We need to take a reference to the interrupts to make
> sure they stay enabled even if the kernel queues have
> disabled them.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 31 +++++++++++++++++++++++++-
> 1 file changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> index 1f3045323c929..669d1ef3fab22 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> @@ -1352,11 +1352,39 @@ static int sdma_v7_0_sw_fini(struct amdgpu_ip_block *ip_block)
> return 0;
> }
>
> +static int sdma_v7_0_set_userq_trap_interrupts(struct amdgpu_device *adev,
> + bool enable)
> +{
> + unsigned int irq_type;
> + int i, r;
> +
> + if (adev->userq_funcs[AMDGPU_HW_IP_DMA]) {
> + for (i = 0; i < adev->sdma.num_instances; i++) {
> + irq_type = AMDGPU_SDMA_IRQ_INSTANCE0 + i;
> + if (enable)
> + r = amdgpu_irq_get(adev, &adev->sdma.trap_irq,
> + irq_type);
> + else
> + r = amdgpu_irq_put(adev, &adev->sdma.trap_irq,
> + irq_type);
> + if (r)
> + return r;
> + }
> + }
> +
> + return 0;
> +}
> +
> static int sdma_v7_0_hw_init(struct amdgpu_ip_block *ip_block)
> {
> struct amdgpu_device *adev = ip_block->adev;
> + int r;
>
> - return sdma_v7_0_start(adev);
> + r = sdma_v7_0_start(adev);
> + if (r)
> + return r;
> +
> + return sdma_v7_0_set_userq_trap_interrupts(adev, true);
> }
>
> static int sdma_v7_0_hw_fini(struct amdgpu_ip_block *ip_block)
> @@ -1368,6 +1396,7 @@ static int sdma_v7_0_hw_fini(struct amdgpu_ip_block *ip_block)
>
> sdma_v7_0_ctx_switch_enable(adev, false);
> sdma_v7_0_enable(adev, false);
> + sdma_v7_0_set_userq_trap_interrupts(adev, false);
>
> return 0;
> }
More information about the amd-gfx
mailing list