[PATCH] drm/amdkfd: Make queue mapping interfaces more consistent
Felix Kuehling
felix.kuehling at amd.com
Thu Oct 19 20:08:04 UTC 2017
On 2017-10-19 03:00 AM, Oded Gabbay wrote:
> On Wed, Oct 18, 2017 at 4:47 PM, Kuehling, Felix <Felix.Kuehling at amd.com> wrote:
>>> Thanks Felix.
>>> I'll add it to the next tree instead of the one from the patch-set.
>>>
>>> Oded
>> I based this patch on your current amdkfd-next. Do you have another "next tree"?
> No, that's fine.
> I simply squashed this patch with the original patch because its kind
> of redundant to have two patches in the same time that change the
> function's API to two different formats.
I see, that makes sense.
Thanks,
Felix
>
> Oded
>
>> Regards,
>> Felix
>>
>> -----Original Message-----
>> From: Oded Gabbay [mailto:oded.gabbay at gmail.com]
>> Sent: Wednesday, October 18, 2017 12:36 AM
>> To: Kuehling, Felix
>> Cc: amd-gfx list
>> Subject: Re: [PATCH] drm/amdkfd: Make queue mapping interfaces more consistent
>>
>> On Wed, Oct 18, 2017 at 5:55 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote:
>>> Pass unmap filter parameters directly to execute_queues_cpsch, same as
>>> unmap_queues_cpsch.
>>>
>>> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
>>> ---
>>> .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 32
>>> +++++++++++-----------
>>> 1 file changed, 16 insertions(+), 16 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 933adb5..da3b743 100644
>>> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
>>> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
>>> @@ -45,7 +45,8 @@ static int create_compute_queue_nocpsch(struct device_queue_manager *dqm,
>>> struct qcm_process_device
>>> *qpd);
>>>
>>> static int execute_queues_cpsch(struct device_queue_manager *dqm,
>>> - bool static_queues_included);
>>> + enum kfd_unmap_queues_filter filter,
>>> + uint32_t filter_param);
>>> static int unmap_queues_cpsch(struct device_queue_manager *dqm,
>>> enum kfd_unmap_queues_filter filter,
>>> uint32_t filter_param); @@ -741,7
>>> +742,7 @@ static int start_cpsch(struct device_queue_manager *dqm)
>>> init_interrupts(dqm);
>>>
>>> mutex_lock(&dqm->lock);
>>> - execute_queues_cpsch(dqm, false);
>>> + execute_queues_cpsch(dqm,
>>> + KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
>>> mutex_unlock(&dqm->lock);
>>>
>>> return 0;
>>> @@ -787,7 +788,7 @@ static int create_kernel_queue_cpsch(struct device_queue_manager *dqm,
>>> list_add(&kq->list, &qpd->priv_queue_list);
>>> dqm->queue_count++;
>>> qpd->is_debug = true;
>>> - execute_queues_cpsch(dqm, false);
>>> + execute_queues_cpsch(dqm,
>>> + KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
>>> mutex_unlock(&dqm->lock);
>>>
>>> return 0;
>>> @@ -801,7 +802,7 @@ static void destroy_kernel_queue_cpsch(struct device_queue_manager *dqm,
>>> list_del(&kq->list);
>>> dqm->queue_count--;
>>> qpd->is_debug = false;
>>> - execute_queues_cpsch(dqm, true);
>>> + execute_queues_cpsch(dqm, KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES,
>>> + 0);
>>> /*
>>> * Unconditionally decrement this counter, regardless of the queue's
>>> * type.
>>> @@ -859,7 +860,8 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
>>> qpd->queue_count++;
>>> if (q->properties.is_active) {
>>> dqm->queue_count++;
>>> - retval = execute_queues_cpsch(dqm, false);
>>> + retval = execute_queues_cpsch(dqm,
>>> +
>>> + KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
>>> }
>>>
>>> if (q->properties.type == KFD_QUEUE_TYPE_SDMA) @@ -964,16
>>> +966,12 @@ static int unmap_queues_cpsch(struct device_queue_manager
>>> *dqm,
>>>
>>> /* dqm->lock mutex has to be locked before calling this function */
>>> static int execute_queues_cpsch(struct device_queue_manager *dqm,
>>> - bool static_queues_included)
>>> + enum kfd_unmap_queues_filter filter,
>>> + uint32_t filter_param)
>>> {
>>> int retval;
>>> - enum kfd_unmap_queues_filter filter;
>>> -
>>> - filter = static_queues_included ?
>>> - KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES :
>>> - KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES;
>>>
>>> - retval = unmap_queues_cpsch(dqm, filter, 0);
>>> + retval = unmap_queues_cpsch(dqm, filter, filter_param);
>>> if (retval) {
>>> pr_err("The cp might be in an unrecoverable state due to an unsuccessful queues preemption\n");
>>> return retval;
>>> @@ -1024,7 +1022,8 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm,
>>> if (q->properties.is_active)
>>> dqm->queue_count--;
>>>
>>> - retval = execute_queues_cpsch(dqm, false);
>>> + retval = execute_queues_cpsch(dqm,
>>> +
>>> + KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
>>> if (retval == -ETIME)
>>> qpd->reset_wavefronts = true;
>>>
>>> @@ -1157,7 +1156,8 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
>>> struct kernel_queue *kq, *kq_next;
>>> struct mqd_manager *mqd;
>>> struct device_process_node *cur, *next_dpn;
>>> - bool unmap_static_queues = false;
>>> + enum kfd_unmap_queues_filter filter =
>>> + KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES;
>>>
>>> retval = 0;
>>>
>>> @@ -1169,7 +1169,7 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
>>> dqm->queue_count--;
>>> qpd->is_debug = false;
>>> dqm->total_queue_count--;
>>> - unmap_static_queues = true;
>>> + filter = KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES;
>>> }
>>>
>>> /* Clear all user mode queues */ @@ -1193,7 +1193,7 @@ static
>>> int process_termination_cpsch(struct device_queue_manager *dqm,
>>> }
>>> }
>>>
>>> - retval = execute_queues_cpsch(dqm, unmap_static_queues);
>>> + retval = execute_queues_cpsch(dqm, filter, 0);
>>> if (retval || qpd->reset_wavefronts) {
>>> pr_warn("Resetting wave fronts (cpsch) on dev %p\n", dqm->dev);
>>> dbgdev_wave_reset_wavefronts(dqm->dev,
>>> qpd->pqm->process);
>>> --
>>> 2.7.4
>>>
>> Thanks Felix.
>> I'll add it to the next tree instead of the one from the patch-set.
>>
>> Oded
More information about the amd-gfx
mailing list