[PATCH i-g-t v9 2/7] lib/drmtest: Introduced drm_open_driver_another

Janusz Krzysztofik janusz.krzysztofik at linux.intel.com
Tue Feb 20 09:32:58 UTC 2024


Hi Kamil,

On Monday, 19 February 2024 18:42:32 CET Kamil Konieczny wrote:
> Hi Janusz,
> On 2024-02-16 at 11:23:58 +0100, Janusz Krzysztofik wrote:
> > Hi Kamil, Dominik,
> > 
> > On Thursday, 15 February 2024 17:10:09 CET Kamil Konieczny wrote:
> > > From: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>
> > > 
> > > For user convenience, introduce drm_open_driver_another as
> > > a wrapper for __drm_open_driver_another with successful open
> > > assert.
> > 
> > Out of several existing variants of *drm_open_driver* functions, those which 
> > names start with "drm_", wrapped around their counterparts which names start 
> > with double underscores, used to set up an exit handler that performs 
> > necessary cleanups before exit, freeing users from taking care of that.  Don't 
> > we want to keep that convention also for drm_open_driver_another() and set up 
> > the exit handler from inside that wrapper on success?
> > 
> > Thanks,
> > Janusz
> > 
> 
> How and what should we unwind here? There is only fd, I do not see
> any other var or state to unwind? Am I missing something?

Have you had a look at drm_open()?

        /* For i915, at least, we ensure that the driver is idle before
         * starting a test and we install an exit handler to wait until
         * idle before quitting.
         */
        if (is_i915_device(fd)) {
                if (__sync_fetch_and_add(&open_count, 1) == 0) {
                        __cancel_work_at_exit(fd);
                        at_exit_drm_fd = drm_reopen_driver(fd);
                        igt_install_exit_handler(cancel_work_at_exit);
                }
        }

From that point of view, how does multi-gpu testing differ from single-gpu?

And yes, that can be not trivial to extend the existing exit handlers solution 
over multiple device file descriptor handling.

Also ...

> 
> Regards,
> Kamil
> 
> > > 
> > > v2: rebased (Kamil)
> > > v6: reword description (Janusz)
> > > 
> > > Cc: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
> > > Signed-off-by: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>
> > > Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> > > Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> > > ---
> > >  lib/drmtest.c | 19 +++++++++++++++++++
> > >  lib/drmtest.h |  1 +
> > >  2 files changed, 20 insertions(+)
> > > 
> > > diff --git a/lib/drmtest.c b/lib/drmtest.c
> > > index 52b5a2020..73d9159af 100644
> > > --- a/lib/drmtest.c
> > > +++ b/lib/drmtest.c
> > > @@ -563,6 +563,25 @@ int __drm_open_driver_another(int idx, int chipset)
> > >  	return fd;
> > >  }
> > >  
> > > +/*
> > > + * drm_open_driver_another
> > > + * @idx: index of the device you are opening
> > > + * @chipset: OR'd flags for each chipset to search, eg. #DRIVER_INTEL
> > > + *
> > > + * A wrapper for __drm_open_driver with successful open assert.
> > > + *
> > > + * Returns:
> > > + * An open DRM fd
> > > + */
> > > +int drm_open_driver_another(int idx, int chipset)
> > > +{
> > > +	int fd = __drm_open_driver_another(idx, chipset);
> > > +
> > > +	igt_assert_fd(fd);

drm_open_driver() skips in that case.  Shouldn't drm_open_driver_another() 
also skip for consistency?

Thanks,
Janusz

> > > +
> > > +	return fd;
> > > +}
> > > +
> > >  /**
> > >   * __drm_open_driver:
> > >   * @chipset: OR'd flags for each chipset to search, eg. #DRIVER_INTEL
> > > diff --git a/lib/drmtest.h b/lib/drmtest.h
> > > index 6bc819734..856208c48 100644
> > > --- a/lib/drmtest.h
> > > +++ b/lib/drmtest.h
> > > @@ -101,6 +101,7 @@ void __set_forced_driver(const char *name);
> > >  
> > >  int __drm_open_device(const char *name, unsigned int chipset);
> > >  void drm_load_module(unsigned int chipset);
> > > +int drm_open_driver_another(int idx, int chipset);
> > >  int drm_open_driver(int chipset);
> > >  int drm_open_driver_master(int chipset);
> > >  int drm_open_driver_render(int chipset);
> > > 
> > 
> > 
> > 
> > 
> 






More information about the igt-dev mailing list