diff mbox

drmtest: don't discard return value in do_ioctl()

Message ID 1462460762-19028-1-git-send-email-robert@sixbynine.org (mailing list archive)
State New, archived
Headers show

Commit Message

Robert Bragg May 5, 2016, 3:06 p.m. UTC
Fixed a rebase mistake where I dropped the use of the igt_ioctl wrapper in
do_ioctl().

I'm not entirely sure a.t.m whether the assertion change from ret == 0 to
ret >= 0 will break anything, though comparing run-tests.sh -s -t basic 
before/after didn't seem to highlight a problem for me.

--- >8 ---

In preparation for testing DRM_IOCTL_I915_PERF_OPEN which returns a file
descriptor this allows us to get the return value of ioctl called by the
do_ioctl() utility.

Signed-off-by: Robert Bragg <robert@sixbynine.org>
---
 lib/drmtest.h | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Chris Wilson May 5, 2016, 3:59 p.m. UTC | #1
On Thu, May 05, 2016 at 04:06:02PM +0100, Robert Bragg wrote:
> Fixed a rebase mistake where I dropped the use of the igt_ioctl wrapper in
> do_ioctl().
> 
> I'm not entirely sure a.t.m whether the assertion change from ret == 0 to
> ret >= 0 will break anything, though comparing run-tests.sh -s -t basic 
> before/after didn't seem to highlight a problem for me.
> 
> --- >8 ---
> 
> In preparation for testing DRM_IOCTL_I915_PERF_OPEN which returns a file
> descriptor this allows us to get the return value of ioctl called by the
> do_ioctl() utility.
> 
> Signed-off-by: Robert Bragg <robert@sixbynine.org>
> ---
>  lib/drmtest.h | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/drmtest.h b/lib/drmtest.h
> index c391464..b917ecb 100644
> --- a/lib/drmtest.h
> +++ b/lib/drmtest.h
> @@ -104,11 +104,16 @@ bool is_i915_device(int fd);
>   *
>   * This macro wraps drmIoctl() and uses igt_assert to check that it has been
>   * successfully executed.
> + *
> + * It's implemented using a gcc statement expression to still be able to
> + * assign the ioctl's return value after the assertion too.
>   */
> -#define do_ioctl(fd, ioc, ioc_data) do { \
> -	igt_assert_eq(igt_ioctl((fd), (ioc), (ioc_data)), 0); \
> +#define do_ioctl(fd, ioc, ioc_data) ({ \
> +        int _ret = igt_ioctl((fd), (ioc), (ioc_data)); \
> +        igt_assert(_ret >= 0); \

And now we have the unhelpful error message !(_ret >= 0)

For the single user, just don't use do_ioctl.
-Chris
Robert Bragg May 5, 2016, 4:14 p.m. UTC | #2
On Thu, May 5, 2016 at 4:59 PM, Chris Wilson <chris@chris-wilson.co.uk>
wrote:

> On Thu, May 05, 2016 at 04:06:02PM +0100, Robert Bragg wrote:
> > Fixed a rebase mistake where I dropped the use of the igt_ioctl wrapper
> in
> > do_ioctl().
> >
> > I'm not entirely sure a.t.m whether the assertion change from ret == 0 to
> > ret >= 0 will break anything, though comparing run-tests.sh -s -t basic
> > before/after didn't seem to highlight a problem for me.
> >
> > --- >8 ---
> >
> > In preparation for testing DRM_IOCTL_I915_PERF_OPEN which returns a file
> > descriptor this allows us to get the return value of ioctl called by the
> > do_ioctl() utility.
> >
> > Signed-off-by: Robert Bragg <robert@sixbynine.org>
> > ---
> >  lib/drmtest.h | 11 ++++++++---
> >  1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/lib/drmtest.h b/lib/drmtest.h
> > index c391464..b917ecb 100644
> > --- a/lib/drmtest.h
> > +++ b/lib/drmtest.h
> > @@ -104,11 +104,16 @@ bool is_i915_device(int fd);
> >   *
> >   * This macro wraps drmIoctl() and uses igt_assert to check that it has
> been
> >   * successfully executed.
> > + *
> > + * It's implemented using a gcc statement expression to still be able to
> > + * assign the ioctl's return value after the assertion too.
> >   */
> > -#define do_ioctl(fd, ioc, ioc_data) do { \
> > -     igt_assert_eq(igt_ioctl((fd), (ioc), (ioc_data)), 0); \
> > +#define do_ioctl(fd, ioc, ioc_data) ({ \
> > +        int _ret = igt_ioctl((fd), (ioc), (ioc_data)); \
> > +        igt_assert(_ret >= 0); \
>
> And now we have the unhelpful error message !(_ret >= 0)
>
> For the single user, just don't use do_ioctl.
>

Ah, right, not great.

I suppose having something like igt_assert((_ret = igt_ioctl((fd), (ioc),
(ioc_data))) >= 0); might be a bit better, but adds noise to the simpler
cases. Sounds ok to just have a special case ioctl wrapper in tests/perf.c.

- Robert


> -Chris
>
> --
> Chris Wilson, Intel Open Source Technology Centre
>
diff mbox

Patch

diff --git a/lib/drmtest.h b/lib/drmtest.h
index c391464..b917ecb 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -104,11 +104,16 @@  bool is_i915_device(int fd);
  *
  * This macro wraps drmIoctl() and uses igt_assert to check that it has been
  * successfully executed.
+ *
+ * It's implemented using a gcc statement expression to still be able to
+ * assign the ioctl's return value after the assertion too.
  */
-#define do_ioctl(fd, ioc, ioc_data) do { \
-	igt_assert_eq(igt_ioctl((fd), (ioc), (ioc_data)), 0); \
+#define do_ioctl(fd, ioc, ioc_data) ({ \
+        int _ret = igt_ioctl((fd), (ioc), (ioc_data)); \
+        igt_assert(_ret >= 0); \
 	errno = 0; \
-} while (0)
+        _ret; \
+})
 
 /**
  * do_ioctl_err: