[igt-dev] [PATCH i-g-t 68/77] igt/dummyload: Require an intel_ctx_t for POLL_RUN and !ALL_ENGINES
Dixit, Ashutosh
ashutosh.dixit at intel.com
Wed Jun 16 02:49:14 UTC 2021
On Tue, 15 Jun 2021 19:25:01 -0700, Dixit, Ashutosh wrote:
>
> On Mon, 14 Jun 2021 09:38:53 -0700, Jason Ekstrand wrote:
> >
> > diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c
> > index b0a7b361c..25e49de47 100644
> > --- a/lib/igt_dummyload.c
> > +++ b/lib/igt_dummyload.c
> > @@ -421,22 +421,12 @@ igt_spin_factory(int fd, const struct igt_spin_factory *opts)
> > {
> > igt_spin_t *spin;
> >
> > - if (opts->engine != ALL_ENGINES) {
> > - struct intel_execution_engine2 e;
> > - int class;
> > -
> > - if (opts->ctx) {
> > - class = opts->ctx->cfg.engines[opts->engine].engine_class;
> > - } else if (!gem_context_lookup_engine(fd, opts->engine,
> > - opts->ctx_id, &e)) {
> > - class = e.class;
> > - } else {
> > - gem_require_ring(fd, opts->engine);
> > - class = gem_execbuf_flags_to_engine_class(opts->engine);
> > - }
> > + if ((opts->flags & IGT_SPIN_POLL_RUN) && opts->engine != ALL_ENGINES) {
> > + unsigned int class;
> >
> > - if (opts->flags & IGT_SPIN_POLL_RUN)
> > - igt_require(gem_class_can_store_dword(fd, class));
> > + igt_assert(opts->ctx);
> > + class = intel_ctx_engine_class(opts->ctx, opts->engine);
> > + igt_require(gem_class_can_store_dword(fd, class));
> > }
>
> I am not sure if this is correct. If I straightforwardly enforce opts->ctx
> and tranform the original logic I get this:
>
> if (opts->engine != ALL_ENGINES) {
> int class;
>
> igt_assert(opts->ctx);
> class = intel_ctx_engine_class(opts->ctx, opts->engine);
> if (opts->flags & IGT_SPIN_POLL_RUN)
> igt_require(gem_class_can_store_dword(fd, class));
> }
>
> or even
>
> if (opts->engine != ALL_ENGINES) {
> igt_assert(opts->ctx);
> if (opts->flags & IGT_SPIN_POLL_RUN) {
> int class = intel_ctx_engine_class(opts->ctx, opts->engine);
> igt_require(gem_class_can_store_dword(fd, class));
> }
> }
>
> Importantly, "igt_assert(opts->ctx)" is invoked independent of opts->flags,
> unlike the code in the patch.
I have another related question/observation. If what I am saying above is
indeed true, is the "ctx_id" field in "struct igt_spin_factory" ever
really used? If not we should delete it from the struct and we can get rid
of these asserts.
This is because I am saying above that we have an igt_assert(opts->ctx)
above in igt_spin_factory() when "opts->engine != ALL_ENGINES" and then we
have another igt_assert(opts->ctx) in emit_recursive_batch() when
"opts->engine == ALL_ENGINES". So it appears we must always have
intel_ctx_t and can never use the "ctx_id" field in "struct
igt_spin_factory" so it should be removed.
So appears the spinner interface will always need a intel_ctx_t (meaning
more code changes).
More information about the igt-dev
mailing list