Quoting Antonio Argenziano (2017-12-15 19:01:11) > Since commit: drm/i915/scheduler: Support user-defined priorities, the > driver support an extra context param to set context's priority. Add > tests for that interface and update invalid tests. > > Signed-off-by: Antonio Argenziano <antonio.argenziano@xxxxxxxxx> > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Michal Winiarski <michal.winiarski@xxxxxxxxx> > --- > tests/gem_ctx_param.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 76 insertions(+), 1 deletion(-) > > diff --git a/tests/gem_ctx_param.c b/tests/gem_ctx_param.c > index c20ae1ee..9a222e60 100644 > --- a/tests/gem_ctx_param.c > +++ b/tests/gem_ctx_param.c > @@ -25,6 +25,7 @@ > */ > > #include "igt.h" > +#include <limits.h> > > IGT_TEST_DESCRIPTION("Basic test for context set/get param input validation."); > > @@ -136,11 +137,85 @@ igt_main > gem_context_set_param(fd, &arg); > } > > +#define MAX_PRIO 1023 > +#define MIN_PRIO -MAX_PRIO > +#define DEF_PRIO 0 Take these from the uapi header. > + > + arg.param = I915_CONTEXT_PARAM_PRIORITY; > + > + igt_subtest("root-set-priority") { > + arg.ctx_id = ctx; > + arg.size = 0; > + Bonus points for CAP_SYS_NICE checking. arg.size validation checking. arg.value > u32 (checking for overflows) gem_context_get_param() of a new context should return DEF_PRIO set_param on older machines returns -ENODEV And that's not even trying to fuzz bad values beyond the sanity checks of I915_CONTEXT_PARAM_PRIORITY. > + for (int i = MIN_PRIO; i <= MAX_PRIO; i += 1023) { It's a couple of ioctls, do all 1024. Do them in a random order, trust no one. > + arg.value = i; > + gem_context_set_param(fd, &arg); > + > + gem_context_get_param(fd, &arg); > + igt_assert(arg.value == i); /* Verify prio was set */ igt_assert_eq(arg.value, i); But doesn't verify the priority does anything. Just the RTT in the API, which is a nice verification nevertheless. > + } > + } > + > + igt_subtest("root-set-priority-invalid-value") { > + int prio_levels[] = {INT_MIN, MIN_PRIO - 1, MAX_PRIO + 1, INT_MAX}; > + int old_value; > + arg.ctx_id = ctx; > + > + gem_context_get_param(fd, &arg); > + old_value = arg.value; > + > + for (int i = 0; i < (sizeof(prio_levels) / sizeof(int)); i++) { ARRAY_SIZE(prio_levels); > + arg.value = prio_levels[i]; > + igt_assert_eq(__gem_context_set_param(fd, &arg), -EINVAL); > + > + gem_context_get_param(fd, &arg); > + igt_assert(arg.value == old_value); /* Verify prio was not set */ > + } > + } > + > + igt_subtest("user-set-priority") { > + arg.size = 0; > + > + igt_fork(child, 1) { > + igt_drop_root(); > + for (int i = MIN_PRIO; i <= DEF_PRIO; i += 1023) { > + arg.value = i; > + gem_context_set_param(fd, &arg); > + > + gem_context_get_param(fd, &arg); > + igt_assert(arg.value == i); /* Verify prio was set */ I wonder if the CAP_SYS_NICE limit might be adjusted in the future. Certainly preemption rules are flexible, as we haven't told anyone about them yet. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx