Skip to content

Commit 597364a

Browse files
mukjoshialexdeucher
authored andcommitted
drm/amdkfd: Fix reserved SDMA queues handling
This patch fixes a regression caused by a bad merge where the handling of reserved SDMA queues was accidentally removed. With the fix, the reserved SDMA queues are again correctly marked as unavailable for allocation. Fixes: a805889 ("drm/amdkfd: Update SDMA queue management for GFX9.4.3") Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent c1ac2ea commit 597364a

3 files changed

Lines changed: 12 additions & 13 deletions

File tree

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,19 @@ static void kfd_device_info_set_sdma_info(struct kfd_dev *kfd)
106106
kfd->device_info.num_sdma_queues_per_engine = 8;
107107
}
108108

109+
bitmap_zero(kfd->device_info.reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
110+
109111
switch (sdma_version) {
110112
case IP_VERSION(6, 0, 0):
113+
case IP_VERSION(6, 0, 1):
111114
case IP_VERSION(6, 0, 2):
112115
case IP_VERSION(6, 0, 3):
113116
/* Reserve 1 for paging and 1 for gfx */
114117
kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
115118
/* BIT(0)=engine-0 queue-0; BIT(1)=engine-1 queue-0; BIT(2)=engine-0 queue-1; ... */
116-
kfd->device_info.reserved_sdma_queues_bitmap = 0xFULL;
117-
break;
118-
case IP_VERSION(6, 0, 1):
119-
/* Reserve 1 for paging and 1 for gfx */
120-
kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
121-
/* BIT(0)=engine-0 queue-0; BIT(1)=engine-0 queue-1; ... */
122-
kfd->device_info.reserved_sdma_queues_bitmap = 0x3ULL;
119+
bitmap_set(kfd->device_info.reserved_sdma_queues_bitmap, 0,
120+
kfd->adev->sdma.num_instances *
121+
kfd->device_info.num_reserved_sdma_queues_per_engine);
123122
break;
124123
default:
125124
break;

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,18 +123,18 @@ unsigned int get_num_xgmi_sdma_queues(struct device_queue_manager *dqm)
123123
dqm->dev->kfd->device_info.num_sdma_queues_per_engine;
124124
}
125125

126-
static inline uint64_t get_reserved_sdma_queues_bitmap(struct device_queue_manager *dqm)
127-
{
128-
return dqm->dev->kfd->device_info.reserved_sdma_queues_bitmap;
129-
}
130-
131126
static void init_sdma_bitmaps(struct device_queue_manager *dqm)
132127
{
133128
bitmap_zero(dqm->sdma_bitmap, KFD_MAX_SDMA_QUEUES);
134129
bitmap_set(dqm->sdma_bitmap, 0, get_num_sdma_queues(dqm));
135130

136131
bitmap_zero(dqm->xgmi_sdma_bitmap, KFD_MAX_SDMA_QUEUES);
137132
bitmap_set(dqm->xgmi_sdma_bitmap, 0, get_num_xgmi_sdma_queues(dqm));
133+
134+
/* Mask out the reserved queues */
135+
bitmap_andnot(dqm->sdma_bitmap, dqm->sdma_bitmap,
136+
dqm->dev->kfd->device_info.reserved_sdma_queues_bitmap,
137+
KFD_MAX_SDMA_QUEUES);
138138
}
139139

140140
void program_sh_mem_settings(struct device_queue_manager *dqm,

drivers/gpu/drm/amd/amdkfd/kfd_priv.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ struct kfd_device_info {
239239
uint32_t no_atomic_fw_version;
240240
unsigned int num_sdma_queues_per_engine;
241241
unsigned int num_reserved_sdma_queues_per_engine;
242-
uint64_t reserved_sdma_queues_bitmap;
242+
DECLARE_BITMAP(reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
243243
};
244244

245245
unsigned int kfd_get_num_sdma_engines(struct kfd_node *kdev);

0 commit comments

Comments
 (0)