[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