]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdkfd: check find_first_zero_bit before __set_bit on kfd->doorbell_bitmap
authorXiaogang Chen <xiaogang.chen@amd.com>
Tue, 16 Jun 2026 17:54:49 +0000 (12:54 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Jun 2026 22:24:47 +0000 (18:24 -0400)
If inx from find_first_zero_bit is beyond range not need set doorbell_bitmap.

Signed-off-by: Xiaogang Chen <xiaogang.chen@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 2664ce9143d174651a793d96a6a2326050c4f45a)

drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c

index 05c74887fd6fda3bed973839d358fca845036349..fdcf7f2d1b5b41002215cdae24c569f549290a11 100644 (file)
@@ -153,14 +153,16 @@ void __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd,
        u32 inx;
 
        mutex_lock(&kfd->doorbell_mutex);
+
        inx = find_first_zero_bit(kfd->doorbell_bitmap, PAGE_SIZE / sizeof(u32));
+       if (inx >= KFD_MAX_NUM_OF_QUEUES_PER_PROCESS) {
+               mutex_unlock(&kfd->doorbell_mutex);
+               return NULL;
+       }
 
        __set_bit(inx, kfd->doorbell_bitmap);
        mutex_unlock(&kfd->doorbell_mutex);
 
-       if (inx >= KFD_MAX_NUM_OF_QUEUES_PER_PROCESS)
-               return NULL;
-
        *doorbell_off = amdgpu_doorbell_index_on_bar(kfd->adev,
                                                     kfd->doorbells,
                                                     inx,