Quoting Mika Kuoppala (2020-06-02 10:18:34) > Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > > > An important property for multi-client systems is that each client gets > > a 'fair' allotment of system time. (Where fairness is at the whim of the > > context properties, such as priorities.) This test forks N independent > > clients (albeit they happen to share a single vm), and does an equal > > amount of work in client and asserts that they take an equal amount of > > time. > > > > Though we have never claimed to have a completely fair scheduler, that > > is what is expected. > > > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Cc: Ramalingam C <ramalingam.c@xxxxxxxxx> > > --- > > tests/i915/gem_exec_schedule.c | 418 +++++++++++++++++++++++++++++++++ > > 1 file changed, 418 insertions(+) > > > > diff --git a/tests/i915/gem_exec_schedule.c b/tests/i915/gem_exec_schedule.c > > index 56c638833..d1121ecd2 100644 > > --- a/tests/i915/gem_exec_schedule.c > > +++ b/tests/i915/gem_exec_schedule.c > > @@ -2495,6 +2495,417 @@ static void measure_semaphore_power(int i915) > > rapl_close(&pkg); > > } > > > > +static int read_timestamp_frequency(int i915) > > +{ > > + int value = 0; > > + drm_i915_getparam_t gp = { > > + .value = &value, > > + .param = I915_PARAM_CS_TIMESTAMP_FREQUENCY, > > + }; > > + ioctl(i915, DRM_IOCTL_I915_GETPARAM, &gp); > > + return value; > > +} > > + > > +static uint64_t div64_u64_round_up(uint64_t x, uint64_t y) > > +{ > > + return (x + y - 1) / y; > > +} > > + > > +static uint64_t ns_to_ticks(int i915, uint64_t ns) > > +{ > > + return div64_u64_round_up(ns * read_timestamp_frequency(i915), > > + NSEC_PER_SEC); > > +} > > + > > +static uint64_t ticks_to_ns(int i915, uint64_t ticks) > > +{ > > + return div64_u64_round_up(ticks * NSEC_PER_SEC, > > + read_timestamp_frequency(i915)); > > +} > > + > > +#define MI_INSTR(opcode, flags) (((opcode) << 23) | (flags)) > > + > > +#define MI_MATH(x) MI_INSTR(0x1a, (x) - 1) > > +#define MI_MATH_INSTR(opcode, op1, op2) ((opcode) << 20 | (op1) << 10 | (op2)) > > +/* Opcodes for MI_MATH_INSTR */ > > +#define MI_MATH_NOOP MI_MATH_INSTR(0x000, 0x0, 0x0) > > +#define MI_MATH_LOAD(op1, op2) MI_MATH_INSTR(0x080, op1, op2) > > +#define MI_MATH_LOADINV(op1, op2) MI_MATH_INSTR(0x480, op1, op2) > > +#define MI_MATH_LOAD0(op1) MI_MATH_INSTR(0x081, op1) > > +#define MI_MATH_LOAD1(op1) MI_MATH_INSTR(0x481, op1) > > +#define MI_MATH_ADD MI_MATH_INSTR(0x100, 0x0, 0x0) > > +#define MI_MATH_SUB MI_MATH_INSTR(0x101, 0x0, 0x0) > > +#define MI_MATH_AND MI_MATH_INSTR(0x102, 0x0, 0x0) > > +#define MI_MATH_OR MI_MATH_INSTR(0x103, 0x0, 0x0) > > +#define MI_MATH_XOR MI_MATH_INSTR(0x104, 0x0, 0x0) > > +#define MI_MATH_STORE(op1, op2) MI_MATH_INSTR(0x180, op1, op2) > > +#define MI_MATH_STOREINV(op1, op2) MI_MATH_INSTR(0x580, op1, op2) > > +/* Registers used as operands in MI_MATH_INSTR */ > > +#define MI_MATH_REG(x) (x) > > +#define MI_MATH_REG_SRCA 0x20 > > +#define MI_MATH_REG_SRCB 0x21 > > +#define MI_MATH_REG_ACCU 0x31 > > +#define MI_MATH_REG_ZF 0x32 > > +#define MI_MATH_REG_CF 0x33 > > Are you thinking that we should just pull in the driver gpu_commands.h > as is into lib? Yes. We should at least share the header for mi commands between the kernel and igt. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx