With the proto-context stuff added later in this series, we end up
having to duplicate set_priority.  This lets us avoid duplicating the
validation logic.

Signed-off-by: Jason Ekstrand <ja...@jlekstrand.net>
Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>
---
 drivers/gpu/drm/i915/gem/i915_gem_context.c | 42 +++++++++++++--------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c 
b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index c073d5939482b..4835991898ac9 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -169,6 +169,28 @@ lookup_user_engine(struct i915_gem_context *ctx,
        return i915_gem_context_get_engine(ctx, idx);
 }
 
+static int validate_priority(struct drm_i915_private *i915,
+                            const struct drm_i915_gem_context_param *args)
+{
+       s64 priority = args->value;
+
+       if (args->size)
+               return -EINVAL;
+
+       if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PRIORITY))
+               return -ENODEV;
+
+       if (priority > I915_CONTEXT_MAX_USER_PRIORITY ||
+           priority < I915_CONTEXT_MIN_USER_PRIORITY)
+               return -EINVAL;
+
+       if (priority > I915_CONTEXT_DEFAULT_PRIORITY &&
+           !capable(CAP_SYS_NICE))
+               return -EPERM;
+
+       return 0;
+}
+
 static struct i915_address_space *
 context_get_vm_rcu(struct i915_gem_context *ctx)
 {
@@ -1745,23 +1767,13 @@ static void __apply_priority(struct intel_context *ce, 
void *arg)
 static int set_priority(struct i915_gem_context *ctx,
                        const struct drm_i915_gem_context_param *args)
 {
-       s64 priority = args->value;
-
-       if (args->size)
-               return -EINVAL;
-
-       if (!(ctx->i915->caps.scheduler & I915_SCHEDULER_CAP_PRIORITY))
-               return -ENODEV;
-
-       if (priority > I915_CONTEXT_MAX_USER_PRIORITY ||
-           priority < I915_CONTEXT_MIN_USER_PRIORITY)
-               return -EINVAL;
+       int err;
 
-       if (priority > I915_CONTEXT_DEFAULT_PRIORITY &&
-           !capable(CAP_SYS_NICE))
-               return -EPERM;
+       err = validate_priority(ctx->i915, args);
+       if (err)
+               return err;
 
-       ctx->sched.priority = priority;
+       ctx->sched.priority = args->value;
        context_apply_all(ctx, __apply_priority, ctx);
 
        return 0;
-- 
2.31.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to