[Intel-gfx] [PATCH igt] lib: Assert that the internal gem_create interface matches the ioctl
Chris Wilson
chris at chris-wilson.co.uk
Tue Oct 3 14:29:03 UTC 2017
Quoting Mika Kuoppala (2017-10-03 15:19:24)
> Chris Wilson <chris at chris-wilson.co.uk> writes:
>
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> > lib/igt_core.h | 14 ++++++++++++++
> > lib/ioctl_wrappers.c | 4 ++++
> > 2 files changed, 18 insertions(+)
> >
> > diff --git a/lib/igt_core.h b/lib/igt_core.h
> > index f8543d65..f5f65984 100644
> > --- a/lib/igt_core.h
> > +++ b/lib/igt_core.h
> > @@ -932,4 +932,18 @@ int igt_system_quiet(const char *command);
> > free(buf); \
> > } while (0)
> >
> > +/**
> > + * igt_typecheck:
> > + * @type: The intended type we expect the variable to be
> > + * @x: The variable we wish to check
> > + *
> > + * Performs a *compile-time* check that a variable is of a particular type.
> > + */
> > +#define igt_typecheck(type, x) ({ \
> > + type __dummy; \
> > + typeof(x) __dummy2; \
> > + (void)(&__dummy == &__dummy2); \
> > + 1; \
> > +})
> > +
> > #endif /* IGT_CORE_H */
> > diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
> > index 87511fc6..0b523fac 100644
> > --- a/lib/ioctl_wrappers.c
> > +++ b/lib/ioctl_wrappers.c
> > @@ -558,6 +558,10 @@ int __gem_create(int fd, uint64_t size, uint32_t *handle)
> > };
> > int err = 0;
> >
> > + /* Ensure that our internal interface matches the kernel's */
> > + igt_typecheck(typeof(create.size), size);
> > + igt_typecheck(typeof(create.handle), *handle);
>
> Seems to do what it is missing from the tin :)
>
> Fill the commit message and sprinkle more on the ioctl_wrappers.c?
Testing the waters. Looks sane but gcc doesn't like
igt_typecheck(unsigned long long, size);
and the kernel is using typedef unsigned long long __u64 not uint64_t.
A little bit of a conundrum.
-Chris
More information about the Intel-gfx
mailing list