On Tue, Apr 14, 2026 at 9:59 AM Khatri, Sunil <[email protected]> wrote:
>
>
> On 14-04-2026 07:12 pm, Michel Dänzer wrote:
>
> On 4/13/26 11:24, Khatri, Sunil wrote:
>
> On 13-04-2026 02:32 pm, Christian König wrote:
>
> On 4/13/26 10:49, Sunil Khatri wrote:
>
> In function amdgpu_userq_priority_permit allow till
> maximum priority i.e 3 which is seen for gnome shell.
>
> This is needed to fix the issue of unable to create queue
> for gnome shell.
>
> logs:
> [drm] *ERROR* comm: gnome-shell pid: 2802 client-id:10 client: Unset ... SK: 
> Priority 3
>
> Clear NAK, as far as I can see the existing code is correct.
>
> AMDGPU_USERQ_CREATE_FLAGS_QUEUE_PRIORITY_HIGH is only allowed when you have 
> CAP_SYS_NICE, e.g. you are root.
>
> That is also documented in the UAPI. Question is why is gnome shell trying to 
> use that?
>
> I see, let me add Yogesh for his inputs, @yogesh, why gnome shell is asking 
> for priority AMDGPU_USERQ_CREATE_FLAGS_QUEUE_PRIORITY_HIGH. Based on the code 
> seems mesa is getting a flag set flags & PIPE_CONTEXT_HIGH_PRIORITY -> this 
> sets AMDGPU_USERQ_CREATE_FLAGS_QUEUE_PRIORITY_HIGH for graphics queue.
>
> For some background, mutter uses EGL_CONTEXT_PRIORITY_HIGH_IMG when 
> EGL_IMG_context_priority is supported, to try and prevent its GPU work from 
> getting starved by clients.
>
> This works (or at least doesn't fail similarly) with kernel queues, 
> presumably via DRM master status. I'd argue that should suffice with user 
> queues as well.
>
> Below is the check that we have for userqueues during queue creation, and for 
> gnome it did not hit any of the condition and eventually return with -EACCES 
> that is wrong. It has to be maste or CAP_SYS_NICE capable.
> if (priority < AMDGPU_USERQ_CREATE_FLAGS_QUEUE_PRIORITY_HIGH)
>                 return 0;
>         if (capable(CAP_SYS_NICE))
>                 return 0;
>         if (drm_is_current_master(filp))
>                 return 0;
>         return -EACCES;

This is the same logic as kernel queues:

        /* NORMAL and below are accessible by everyone */
        if (priority <= AMDGPU_CTX_PRIORITY_NORMAL)
                return 0;

        if (capable(CAP_SYS_NICE))
                return 0;

        if (drm_is_current_master(filp))
                return 0;

        return -EACCES;

Maybe there is a timing difference?

Alex

Reply via email to