On 5/1/26 15:30, Alex Deucher wrote:
> On Thu, Apr 30, 2026 at 12:29 PM Jesse Zhang <[email protected]> wrote:
>>
>> From: "Jesse.zhang" <[email protected]>
>>
>> Pair the userspace aggregated-doorbell ring (added by the
>> AMDGPU_INFO_DOORBELL / AMDGPU_GEM_GLOBAL_AGGREGATED_DOORBELL ABI in
>> the previous patches) with a kernel-side
>> MES_MISC_OP_NOTIFY_WORK_ON_UNMAPPED_QUEUE in amdgpu_userq_signal_ioctl
>> for SDMA UMQs.
>>
>> Signed-off-by: Jesse Zhang <[email protected]>
> 
> How will this work if the user doesn't use this IOCTL?  protected
> fences are optional.  An application can create a user queue and never
> use a protected fence.  Why don't KFD SDMA queues need this special
> treatment?

Yeah agree that whole approach doesn't work.

What we could do is similar to the MM queues that userspace need to signal both 
a per queue doorbell and an aggregated one for the queue type.

Regards,
Christian.

> 
> Alex
> 
>> ---
>>  .../gpu/drm/amd/amdgpu/amdgpu_userq_fence.c   | 29 +++++++++++++++++++
>>  1 file changed, 29 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
>> index a58342c2ac44..50e275b51c9e 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
>> @@ -598,6 +598,35 @@ int amdgpu_userq_signal_ioctl(struct drm_device *dev, 
>> void *data,
>>         /* drop the reference acquired in fence creation function */
>>         dma_fence_put(fence);
>>
>> +       /*
>> +        * SDMA UMQ wake: SDMA has no CP_UNMAPPED_DOORBELL HW intercept, so
>> +        * once MES gangs the queue out (after the first IB's PROTECTED_FENCE
>> +        * idles the queue), per-queue doorbell rings hit a mapped-out HW
>> +        * slot and are silently dropped — FENCE IRQ never fires.
>> +        *
>> +        * Userspace rings the priority's MES aggregated doorbell directly
>> +        * via the agdb_bo mmap (see AMDGPU_INFO_DOORBELL +
>> +        * AMDGPU_GEM_GLOBAL_AGGREGATED_DOORBELL).  That alone, however, is
>> +        * not enough on current MES12 firmware — MES will not scan the
>> +        * priority's queue list unless its hasReadyQueues flag is set.
>> +        * NOTIFY_WORK_ON_UNMAPPED_QUEUE flips that flag, so MES then
>> +        * processes the doorbell ring and re-MAP_QUEUEs the SDMA UMQ.
>> +        *
>> +        * This is a kernel-side companion to the userspace agg doorbell
>> +        * ring; remove once firmware learns to wake on bare aggregated
>> +        * doorbell.
>> +        */
>> +       if (queue && queue->queue_type == AMDGPU_HW_IP_DMA &&
>> +           adev->enable_mes && adev->mes.funcs->misc_op) {
>> +               struct mes_misc_op_input op = { 0 };
>> +
>> +               op.op = MES_MISC_OP_NOTIFY_WORK_ON_UNMAPPED_QUEUE;
>> +               op.notify_work.priority_level = 
>> AMDGPU_MES_PRIORITY_LEVEL_NORMAL;
>> +               amdgpu_mes_lock(&adev->mes);
>> +               (void)adev->mes.funcs->misc_op(&adev->mes, &op);
>> +               amdgpu_mes_unlock(&adev->mes);
>> +       }
>> +
>>  exec_fini:
>>         drm_exec_fini(&exec);
>>  put_gobj_write:
>> --
>> 2.49.0
>>

Reply via email to