[PATCH V3 11/13] amdkfd: remove DIQ support

Felix Kuehling felix.kuehling at amd.com
Thu Aug 7 21:03:36 UTC 2025


On 2025-08-04 7:05, Zhu Lingshan wrote:
> This commit remove DIQ support because it has been
> marked as DEPRECATED since 2022 in commit 5bdd3eb2

I think you can also remove KFD_QUEUE_TYPE_DIQ from enum kfd_queue_type in kfd_priv.h.

See two more comments inline ...

>
> Signed-off-by: Zhu Lingshan <lingshan.zhu at amd.com>
> ---
>  .../drm/amd/amdkfd/kfd_device_queue_manager.c |  6 +--
>  drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 26 ++-----------
>  .../drm/amd/amdkfd/kfd_packet_manager_v9.c    |  4 --
>  .../drm/amd/amdkfd/kfd_packet_manager_vi.c    |  4 --
>  .../amd/amdkfd/kfd_process_queue_manager.c    | 39 +------------------
>  5 files changed, 7 insertions(+), 72 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 2d91027e2a74..58e47e14cf07 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -399,8 +399,7 @@ static void increment_queue_count(struct device_queue_manager *dqm,
>  				  struct queue *q)
>  {
>  	dqm->active_queue_count++;
> -	if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE ||
> -	    q->properties.type == KFD_QUEUE_TYPE_DIQ)
> +	if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE)
>  		dqm->active_cp_queue_count++;
>  
>  	if (q->properties.is_gws) {
> @@ -414,8 +413,7 @@ static void decrement_queue_count(struct device_queue_manager *dqm,
>  				  struct queue *q)
>  {
>  	dqm->active_queue_count--;
> -	if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE ||
> -	    q->properties.type == KFD_QUEUE_TYPE_DIQ)
> +	if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE)
>  		dqm->active_cp_queue_count--;
>  
>  	if (q->properties.is_gws) {
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
> index ebee37937783..f676b7419984 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
> @@ -46,7 +46,7 @@ static bool kq_initialize(struct kernel_queue *kq, struct kfd_node *dev,
>  	int retval;
>  	union PM4_MES_TYPE_3_HEADER nop;
>  
> -	if (WARN_ON(type != KFD_QUEUE_TYPE_DIQ && type != KFD_QUEUE_TYPE_HIQ))
> +	if (WARN_ON(type != KFD_QUEUE_TYPE_HIQ))
>  		return false;

You're returning early here for invalid queue types. That's fine, but see below ...


>  
>  	pr_debug("Initializing queue type %d size %d\n", KFD_QUEUE_TYPE_HIQ,
> @@ -61,14 +61,9 @@ static bool kq_initialize(struct kernel_queue *kq, struct kfd_node *dev,
>  
>  	kq->dev = dev;
>  	kq->nop_packet = nop.u32all;
> -	switch (type) {
> -	case KFD_QUEUE_TYPE_DIQ:
> -		kq->mqd_mgr = dev->dqm->mqd_mgrs[KFD_MQD_TYPE_DIQ];
> -		break;
> -	case KFD_QUEUE_TYPE_HIQ:
> +	if (type == KFD_QUEUE_TYPE_HIQ)
>  		kq->mqd_mgr = dev->dqm->mqd_mgrs[KFD_MQD_TYPE_HIQ];
> -		break;
> -	default:
> +	else {
>  		dev_err(dev->adev->dev, "Invalid queue type %d\n", type);
>  		return false;

I think this code is unreachable because you returned above for any invalid queue type. You can just remove both the if and the else branch. Just assign the kq->mqd_mgr unconditionally.

Regards,
  Felix


>  	}
> @@ -163,24 +158,11 @@ static bool kq_initialize(struct kernel_queue *kq, struct kfd_node *dev,
>  		kq->mqd_mgr->load_mqd(kq->mqd_mgr, kq->queue->mqd,
>  				kq->queue->pipe, kq->queue->queue,
>  				&kq->queue->properties, NULL);
> -	} else {
> -		/* allocate fence for DIQ */
> -
> -		retval = kfd_gtt_sa_allocate(dev, sizeof(uint32_t),
> -						&kq->fence_mem_obj);
> -
> -		if (retval != 0)
> -			goto err_alloc_fence;
> -
> -		kq->fence_kernel_address = kq->fence_mem_obj->cpu_ptr;
> -		kq->fence_gpu_addr = kq->fence_mem_obj->gpu_addr;
>  	}
>  
>  	print_queue(kq->queue);
>  
>  	return true;
> -err_alloc_fence:
> -	kq->mqd_mgr->free_mqd(kq->mqd_mgr, kq->queue->mqd, kq->queue->mqd_mem_obj);
>  err_allocate_mqd:
>  	uninit_queue(kq->queue);
>  err_init_queue:
> @@ -210,8 +192,6 @@ static void kq_uninitialize(struct kernel_queue *kq)
>  					kq->queue->queue);
>  		up_read(&kq->dev->adev->reset_domain->sem);
>  	}
> -	else if (kq->queue->properties.type == KFD_QUEUE_TYPE_DIQ)
> -		kfd_gtt_sa_free(kq->dev, kq->fence_mem_obj);
>  
>  	kq->mqd_mgr->free_mqd(kq->mqd_mgr, kq->queue->mqd,
>  				kq->queue->mqd_mem_obj);
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
> index 505036968a77..3d2375817c3e 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
> @@ -252,10 +252,6 @@ static int pm_map_queues_v9(struct packet_manager *pm, uint32_t *buffer,
>  			packet->bitfields2.queue_type =
>  		queue_type__mes_map_queues__normal_latency_static_queue_vi;
>  		break;
> -	case KFD_QUEUE_TYPE_DIQ:
> -		packet->bitfields2.queue_type =
> -			queue_type__mes_map_queues__debug_interface_queue_vi;
> -		break;
>  	case KFD_QUEUE_TYPE_SDMA:
>  	case KFD_QUEUE_TYPE_SDMA_XGMI:
>  		if (q->properties.sdma_engine_id < 2 &&
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c
> index a1de5d7e173a..60086e7cc258 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c
> @@ -166,10 +166,6 @@ static int pm_map_queues_vi(struct packet_manager *pm, uint32_t *buffer,
>  			packet->bitfields2.queue_type =
>  		queue_type__mes_map_queues__normal_latency_static_queue_vi;
>  		break;
> -	case KFD_QUEUE_TYPE_DIQ:
> -		packet->bitfields2.queue_type =
> -			queue_type__mes_map_queues__debug_interface_queue_vi;
> -		break;
>  	case KFD_QUEUE_TYPE_SDMA:
>  	case KFD_QUEUE_TYPE_SDMA_XGMI:
>  		packet->bitfields2.engine_sel = q->properties.sdma_engine_id +
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> index c643e0ccec52..e36950e7e14f 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> @@ -345,7 +345,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
>  	 * If we are just about to create DIQ, the is_debug flag is not set yet
>  	 * Hence we also check the type as well
>  	 */
> -	if ((pdd->qpd.is_debug) || (type == KFD_QUEUE_TYPE_DIQ))
> +	if ((pdd->qpd.is_debug))
>  		max_queues = dev->kfd->device_info.max_no_of_hqd/2;
>  
>  	if (pdd->qpd.queue_count >= max_queues)
> @@ -426,22 +426,6 @@ int pqm_create_queue(struct process_queue_manager *pqm,
>  						    restore_mqd, restore_ctl_stack);
>  		print_queue(q);
>  		break;
> -	case KFD_QUEUE_TYPE_DIQ:
> -		kq = kernel_queue_init(dev, KFD_QUEUE_TYPE_DIQ);
> -		if (!kq) {
> -			retval = -ENOMEM;
> -			goto err_create_queue;
> -		}
> -		kq->queue->properties.queue_id = *qid;
> -		pqn->kq = kq;
> -		pqn->q = NULL;
> -		retval = kfd_process_drain_interrupts(pdd);
> -		if (retval)
> -			break;
> -
> -		retval = dev->dqm->ops.create_kernel_queue(dev->dqm,
> -							kq, &pdd->qpd);
> -		break;
>  	default:
>  		WARN(1, "Invalid queue type %d", type);
>  		retval = -EINVAL;
> @@ -1121,32 +1105,13 @@ int pqm_debugfs_mqds(struct seq_file *m, void *data)
>  				break;
>  			default:
>  				seq_printf(m,
> -				"  Bad user queue type %d on device %x\n",
> +				"  Qeueu node with bad user queue type %d on device %x\n",
>  					   q->properties.type, q->device->id);
>  				continue;
>  			}
>  			mqd_mgr = q->device->dqm->mqd_mgrs[mqd_type];
>  			size = mqd_mgr->mqd_stride(mqd_mgr,
>  							&q->properties);
> -		} else if (pqn->kq) {
> -			q = pqn->kq->queue;
> -			mqd_mgr = pqn->kq->mqd_mgr;
> -			switch (q->properties.type) {
> -			case KFD_QUEUE_TYPE_DIQ:
> -				seq_printf(m, "  DIQ on device %x\n",
> -					   pqn->kq->dev->id);
> -				break;
> -			default:
> -				seq_printf(m,
> -				"  Bad kernel queue type %d on device %x\n",
> -					   q->properties.type,
> -					   pqn->kq->dev->id);
> -				continue;
> -			}
> -		} else {
> -			seq_printf(m,
> -		"  Weird: Queue node with neither kernel nor user queue\n");
> -			continue;
>  		}
>  
>  		for (xcc = 0; xcc < num_xccs; xcc++) {


More information about the amd-gfx mailing list