tu: Clamp priority in DRM submitqueue creation
authorMark Collins <mark@igalia.com>
Fri, 2 Sep 2022 10:09:11 +0000 (10:09 +0000)
committerMarge Bot <emma+marge@anholt.net>
Thu, 8 Sep 2022 08:04:10 +0000 (08:04 +0000)
The kernel driver has a range of valid priority values that can
be supplied to it, submitting any priority value outside these
bounds will result in `-EINVAL`. To avoid this, the priority
value is now clamped to the range that the kernel supports.

Fixes: 0c6fbfca0c91ef012e8ab767a317c07f1f6dc5e6
Signed-off-by: Mark Collins <mark@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18389>

src/freedreno/vulkan/tu_drm.c

index 894cb2f..903b6e5 100644 (file)
@@ -164,9 +164,12 @@ tu_drm_submitqueue_new(const struct tu_device *dev,
                        int priority,
                        uint32_t *queue_id)
 {
+   uint64_t nr_rings = 1;
+   tu_drm_get_param(dev->physical_device, MSM_PARAM_NR_RINGS, &nr_rings);
+
    struct drm_msm_submitqueue req = {
       .flags = 0,
-      .prio = priority,
+      .prio = MIN2(priority, MAX2(nr_rings, 1) - 1),
    };
 
    int ret = drmCommandWriteRead(dev->fd,