[PATCH] drm/amdkfd: Fix MEC pipe interrupt enablement
Felix Kuehling
felix.kuehling at amd.com
Wed May 31 04:52:51 UTC 2023
This quirk of for_each_inst has caused problems more than once. Why not
use for_each_set_bit to implement it? That one doesn't have side effects.
Regards,
Felix
Am 2023-05-29 um 09:58 schrieb Lijo Lazar:
> for_each_inst modifies xcc_mask and therefore the loop doesn't
> initialize properly interrupts on all pipes. Keep looping through xcc as
> the outer loop to fix this issue.
>
> Fixes: 7b04c90a48b1 ("drm/amdkfd: Use xcc mask for identifying xcc")
>
> Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> index 493b4b66f180..80cddb46657f 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -1274,11 +1274,12 @@ static void init_interrupts(struct device_queue_manager *dqm)
> uint32_t xcc_mask = dqm->dev->xcc_mask;
> unsigned int i, xcc_id;
>
> - for (i = 0 ; i < get_pipes_per_mec(dqm) ; i++) {
> - if (is_pipe_enabled(dqm, 0, i)) {
> - for_each_inst(xcc_id, xcc_mask)
> + for_each_inst(xcc_id, xcc_mask) {
> + for (i = 0 ; i < get_pipes_per_mec(dqm) ; i++) {
> + if (is_pipe_enabled(dqm, 0, i)) {
> dqm->dev->kfd2kgd->init_interrupts(
> dqm->dev->adev, i, xcc_id);
> + }
> }
> }
> }
More information about the amd-gfx
mailing list