[Mesa-dev] [PATCH v2] intel/tools: new intel_sanitize_gpu tool

Jason Ekstrand jason at jlekstrand.net
Thu Feb 8 16:43:50 UTC 2018


On Thu, Feb 8, 2018 at 12:27 AM, Chris Wilson <chris at chris-wilson.co.uk>
wrote:

> Quoting Scott D Phillips (2018-02-08 00:19:04)
> > From: Kevin Rogovin <kevin.rogovin at intel.com>
> >
> > Adds a new debug tool to pad each GEM BO allocated with (weak)
> > pseudo-random noise values which are then checked after each
> > batchbuffer dispatch to the kernel. This can be quite valuable to
> > find diffucult to track down heisenberg style bugs.
> >
> > [scott.d.phillips at intel.com: split to separate tool]
> >
> > v2: (by Scott D Phillips)
> >     - track gem handles per fd (Kevin)
> >     - remove handles on GEM_CLOSE (Kevin)
> >     - ignore prime handles
> >     - meson & shell script
> > ---
> > +__attribute__ ((visibility ("default"))) int
> > +open(const char *path, int flags, ...)
> > +{
> > +   va_list args;
> > +   mode_t mode;
> > +
> > +   va_start(args, flags);
> > +   mode = va_arg(args, int);
> > +   va_end(args);
> > +
> > +   int fd = libc_open(path, flags, mode);
> > +
> > +   if (fd >= 0 && strcmp(path, "/dev/dri/renderD128") == 0)
> > +      add_drm_fd(fd);
> > +
> > +   return fd;
> > +}
>
> > +__attribute__ ((visibility ("default"))) int
> > +ioctl(int fd, unsigned long request, ...)
> > +{
> > +   va_list args;
> > +   void *argp;
> > +   struct stat buf;
> > +
> > +   va_start(args, request);
> > +   argp = va_arg(args, void *);
> > +   va_end(args);
> > +
> > +   if (_IOC_TYPE(request) == DRM_IOCTL_BASE &&
> > +       !is_drm_fd(fd) && fstat(fd, &buf) == 0 &&
> > +       (buf.st_mode & S_IFMT) == S_IFCHR && major(buf.st_rdev) ==
> DRM_MAJOR) {
>
> So you know how to recognise drm from fstat, why not use that for open
> (so you don't hardcode the assumption that i915 is card0)?
>
> What you are missing is recognising i915 devices, for which you want to
> query drm_version:
>
> static int __get_drm_device_name(int fd, char *name, int len)
> {
>         drm_version_t version = {
>                 .name = name,
>                 .name_len = len
>         };
>         int err = 0;
>
>         if (ioctl(fd, DRM_IOCTL_VERSION, &version))
>                 err = -errno;
>
>         return err;
> }
>
> static bool __is_device(int fd, const char *expect)
> {
>         char name[5] = "";
>
>         if (__get_drm_device_name(fd, name, sizeof(name) - 1))
>                 return false;
>
>         return strcmp(expect, name) == 0;
> }
>
> static bool is_i915_device(int fd)
> {
>         return __is_device(fd, "i915");
> }
>

 Here's a thought.  Given the number of random little tools we have these
days that hook i915, perhaps we'd like to make a little static library (or
just a shared C file) which does all this boiler-plate once so we get it
right everywhere.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180208/e13b690d/attachment-0001.html>


More information about the mesa-dev mailing list