[Intel-gfx] [PATCH igt] lib: Avoid actually throttling from igt_require_gem()
Michał Winiarski
michal.winiarski at intel.com
Fri Aug 18 12:52:15 UTC 2017
On Fri, Aug 18, 2017 at 11:53:22AM +0100, Chris Wilson wrote:
> Quoting Chris Wilson (2017-08-18 11:46:19)
> > igt_require_gem() checks whether we can use the i915 fd for submitting
> > requests by detecting a wedged driver. It was intended to be used just
> > after opening DRIVER_INTEL for a gem test to provide an early skip if
> > the device was unusable. However, it is also used at the start of
> > library functions like igt_spin_batch_new() which may be called after
> > the test has setup some state, and importantly submitted some batches.
> > igt_require_gem() has the risk of then waiting on those batches, unless
> > we tell it to use a clean fd.
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> > ---
> > lib/drmtest.c | 37 +++++++++++++++++++++++++++++++++++++
> > lib/ioctl_wrappers.c | 8 ++++++++
> > 2 files changed, 45 insertions(+)
> >
> > diff --git a/lib/drmtest.c b/lib/drmtest.c
> > index 158af682..0f8bd604 100644
> > --- a/lib/drmtest.c
> > +++ b/lib/drmtest.c
> > @@ -318,6 +318,43 @@ static int __drm_open_driver_render(int chipset)
> > return fd;
> > }
> >
> > +int __drm_reopen_driver(int fd)
> > +{
> > + struct stat target;
> > + const char *base;
> > + int offset;
> > +
> > + if (fstat(fd, &target))
> > + return -errno;
> > +
> > + if (target.st_rdev & 0x80) { /* render node */
> > + base = "/dev/dri/renderD%d";
> > + offset = 0x80;
> > + } else {
> > + base = "/dev/dri/card%d";
> > + offset = 0;
> > + }
> > +
> > + for (int i = 0; i < 16; i++) {
> > + struct stat st;
> > + char buf[256];
> > +
> > + snprintf(buf, sizeof(buf), base, i + offset);
> > + fd = open(buf, O_RDWR);
> > + if (fd < 0)
> > + continue;
> > +
> > + if (fstat(fd, &st) == 0 &&
> > + st.st_mode == target.st_mode &&
> > + st.st_rdev == target.st_rdev)
> > + return fd;
>
> Or should we try a readlink of /proc/self/fd/$fd?
> -Chris
Seems simpler - we won't need to "duplicate" drm_open_driver.
-Michał
More information about the Intel-gfx
mailing list