[igt-dev] [PATCH i-g-t] igt/kms_addfb_basic: Skip if the KMS interface is not supported

Chris Wilson chris at chris-wilson.co.uk
Thu Sep 13 19:09:42 UTC 2018


Some drivers and some hardware do not support KMS and so the addfb
ioctls are expected to fail. However, since they are expected to fail
with a specific errno (ENOTSUPP) in the case KMS is not supported on the
fd, we can check for that and skip the tests where they are not
appropriate.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 tests/kms_addfb_basic.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/tests/kms_addfb_basic.c b/tests/kms_addfb_basic.c
index ce48d24fa..400241a92 100644
--- a/tests/kms_addfb_basic.c
+++ b/tests/kms_addfb_basic.c
@@ -667,12 +667,37 @@ static void prop_tests(int fd)
 
 }
 
+static bool has_addfb2_iface(int fd)
+{
+	struct local_drm_mode_fb_cmd2 f = {};
+	int err;
+
+	err = 0;
+	if (drmIoctl(fd, DRM_IOCTL_MODE_ADDFB2, &f))
+		err = -errno;
+	switch (err) {
+	case -ENOTTY: /* ioctl unrecognised (kernel too old) */
+	case -ENOTSUP: /* driver doesn't support KMS */
+		return false;
+
+		/*
+		 * The only other valid response is -EINVAL, but we leave
+		 * that for the actual tests themselves to discover for
+		 * more accurate reporting.
+		 */
+	default:
+		return true;
+	}
+}
+
 int fd;
 
 igt_main
 {
-	igt_fixture
+	igt_fixture {
 		fd = drm_open_driver_master(DRIVER_ANY);
+		igt_require(has_addfb2_iface(fd));
+	}
 
 	invalid_tests(fd);
 
-- 
2.19.0



More information about the igt-dev mailing list