[PATCH] drm/amdkfd: Fix reserved SDMA queues handling
Felix Kuehling
felix.kuehling at amd.com
Wed Jun 7 15:38:11 UTC 2023
On 2023-06-07 11:27, Mukul Joshi wrote:
> 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: c27842c84a848 ("drm/amdkfd: Update SDMA queue management for GFX9.4.3")
> Signed-off-by: Mukul Joshi <mukul.joshi at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_device.c | 13 ++++++-------
> .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 10 +++++-----
> drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 +-
> 3 files changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> index 9fc9d32cb579..9d4abfd8b55e 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -106,20 +106,19 @@ static void kfd_device_info_set_sdma_info(struct kfd_dev *kfd)
> kfd->device_info.num_sdma_queues_per_engine = 8;
> }
>
> + bitmap_zero(kfd->device_info.reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
> +
> switch (sdma_version) {
> case IP_VERSION(6, 0, 0):
> + case IP_VERSION(6, 0, 1):
> case IP_VERSION(6, 0, 2):
> case IP_VERSION(6, 0, 3):
> /* Reserve 1 for paging and 1 for gfx */
> kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
> /* BIT(0)=engine-0 queue-0; BIT(1)=engine-1 queue-0; BIT(2)=engine-0 queue-1; ... */
> - kfd->device_info.reserved_sdma_queues_bitmap = 0xFULL;
> - break;
> - case IP_VERSION(6, 0, 1):
> - /* Reserve 1 for paging and 1 for gfx */
> - kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
> - /* BIT(0)=engine-0 queue-0; BIT(1)=engine-0 queue-1; ... */
> - kfd->device_info.reserved_sdma_queues_bitmap = 0x3ULL;
> + bitmap_set(kfd->device_info.reserved_sdma_queues_bitmap, 0,
> + kfd->adev->sdma.num_instances *
> + kfd->device_info.num_reserved_sdma_queues_per_engine);
> break;
> default:
> break;
> 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 0c1be91a87c6..498ad7d4e7d9 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -123,11 +123,6 @@ unsigned int get_num_xgmi_sdma_queues(struct device_queue_manager *dqm)
> dqm->dev->kfd->device_info.num_sdma_queues_per_engine;
> }
>
> -static inline uint64_t get_reserved_sdma_queues_bitmap(struct device_queue_manager *dqm)
> -{
> - return dqm->dev->kfd->device_info.reserved_sdma_queues_bitmap;
> -}
> -
> static void init_sdma_bitmaps(struct device_queue_manager *dqm)
> {
> bitmap_zero(dqm->sdma_bitmap, KFD_MAX_SDMA_QUEUES);
> @@ -135,6 +130,11 @@ static void init_sdma_bitmaps(struct device_queue_manager *dqm)
>
> bitmap_zero(dqm->xgmi_sdma_bitmap, KFD_MAX_SDMA_QUEUES);
> bitmap_set(dqm->xgmi_sdma_bitmap, 0, get_num_xgmi_sdma_queues(dqm));
> +
> + /* Mask out the reserved queues */
> + bitmap_andnot(dqm->sdma_bitmap, dqm->sdma_bitmap,
> + dqm->dev->kfd->device_info.reserved_sdma_queues_bitmap,
> + KFD_MAX_SDMA_QUEUES);
> }
>
> void program_sh_mem_settings(struct device_queue_manager *dqm,
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> index 023b17e0116b..7364a5d77c6e 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> @@ -239,7 +239,7 @@ struct kfd_device_info {
> uint32_t no_atomic_fw_version;
> unsigned int num_sdma_queues_per_engine;
> unsigned int num_reserved_sdma_queues_per_engine;
> - uint64_t reserved_sdma_queues_bitmap;
> + DECLARE_BITMAP(reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
> };
>
> unsigned int kfd_get_num_sdma_engines(struct kfd_node *kdev);
More information about the amd-gfx
mailing list