[Intel-gfx] [PATCH igt] lib: Avoid actually throttling from igt_require_gem()
Chris Wilson
chris at chris-wilson.co.uk
Fri Aug 18 10:53:22 UTC 2017
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
More information about the Intel-gfx
mailing list