Return error when I915_EXEC_BSD_RING2 flag is set but BSD2 ring is not available in the HW. Signed-off-by: Gabriel Feceoru <gabriel.feceoru@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 8fd00d2..47305ec 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -1394,19 +1394,22 @@ eb_select_ring(struct drm_i915_private *dev_priv, return -EINVAL; } - if (user_ring_id == I915_EXEC_BSD && HAS_BSD2(dev_priv)) { + if (user_ring_id == I915_EXEC_BSD) { unsigned int bsd_idx = args->flags & I915_EXEC_BSD_MASK; + if ((!HAS_BSD2(dev_priv) && (bsd_idx != I915_EXEC_BSD_DEFAULT)) || + (bsd_idx == (I915_EXEC_BSD_RING1 | I915_EXEC_BSD_RING2))) { + + DRM_DEBUG("execbuf with wrong bsd ring: %u\n", + bsd_idx); + return -EINVAL; + } + if (bsd_idx == I915_EXEC_BSD_DEFAULT) { bsd_idx = gen8_dispatch_bsd_ring(dev_priv, file); - } else if (bsd_idx >= I915_EXEC_BSD_RING1 && - bsd_idx <= I915_EXEC_BSD_RING2) { + } else { bsd_idx >>= I915_EXEC_BSD_SHIFT; bsd_idx--; - } else { - DRM_DEBUG("execbuf with unknown bsd ring: %u\n", - bsd_idx); - return -EINVAL; } *ring = &dev_priv->ring[_VCS(bsd_idx)]; -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx