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