Re: [PATCH] drm/amdkfd: Fix MEC pipe interrupt enablement

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx>
---
  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);
+			}
  		}
  	}
  }



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux