[igt-dev] [PATCH i-g-t 1/5] igt/kms_getfb: Check the iface exists before use

Antonio Argenziano antonio.argenziano at intel.com
Mon Oct 1 18:36:24 UTC 2018



On 28/09/18 03:19, Chris Wilson wrote:
> If the driver doesn't support the getfb iface (e.g. because KMS has been
> disabled), the ioctls will fail with ENOTSUP. This is expected, so skip
> the test as nothing useful can be learnt.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   tests/kms_getfb.c | 40 ++++++++++++++++++++++++++++++++++++++--
>   1 file changed, 38 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/kms_getfb.c b/tests/kms_getfb.c
> index 81d796a42..71d65488f 100644
> --- a/tests/kms_getfb.c
> +++ b/tests/kms_getfb.c
> @@ -40,6 +40,40 @@
>   #include "drm.h"
>   #include "drm_fourcc.h"
>   
> +static bool has_getfb_iface(int fd)
> +{
> +	struct drm_mode_fb_cmd arg = { };
> +	int err;
> +
> +	err = 0;
> +	if (drmIoctl(fd, DRM_IOCTL_MODE_GETFB, &arg))
> +		err = -errno;
> +	switch (err) {
> +	case -ENOTTY: /* ioctl unrecognised (kernel too old) */
> +	case -ENOTSUP: /* driver doesn't support KMS */
> +		return false;
> +	default:
> +		return true;
> +	}
> +}
> +
> +static bool has_addfb2_iface(int fd)
> +{
> +	struct drm_mode_fb_cmd2 arg = { };
> +	int err;
> +
> +	err = 0;
> +	if (drmIoctl(fd, DRM_IOCTL_MODE_ADDFB2, &arg) == 0)
> +		err = -errno;

Shouldn't this^ be != 0?

> +	switch (err) {
> +	case -ENOTTY: /* ioctl unrecognised (kernel too old) */
> +	case -ENOTSUP: /* driver doesn't support KMS */
> +		return false;
> +	default:
> +		return true;

Shouldn't we fail on every errno?

Thanks,
Antonio

> +	}
> +}
> +
>   static void get_ccs_fb(int fd, struct drm_mode_fb_cmd2 *ret)
>   {
>   	struct drm_mode_fb_cmd2 add = {
> @@ -54,6 +88,7 @@ static void get_ccs_fb(int fd, struct drm_mode_fb_cmd2 *ret)
>   	};
>   	int size;
>   
> +	igt_require(has_addfb2_iface(fd));
>   	igt_require_intel(fd);
>   
>   	/* An explanation of the magic numbers can be found in kms_ccs.c. */
> @@ -191,15 +226,16 @@ static void test_duplicate_handles(int fd)
>   		do_ioctl(fd, DRM_IOCTL_MODE_RMFB, &add.fb_id);
>   		gem_close(fd, add.handles[0]);
>   	}
> -
>   }
>   
>   igt_main
>   {
>   	int fd;
>   
> -	igt_fixture
> +	igt_fixture {
>   		fd = drm_open_driver_master(DRIVER_ANY);
> +		igt_require(has_getfb_iface(fd));
> +	}
>   
>   	igt_subtest_group
>   		test_handle_input(fd);
> 


More information about the igt-dev mailing list