From 80c3666a88b945536e087b819bb0d8a2eb66c8d8 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Fri, 2 Nov 2018 21:53:48 +0100 Subject: tests/kms_lease: improve lease_get subtest Again it failed to fill in the pad field. It also had the wrong assumptions about planes being included. Plus again add a bunch more paranoid checks. And make sure the primary plane is included, too. Reviewed-by: Dave Airlie Signed-off-by: Daniel Vetter --- tests/kms_lease.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'tests/kms_lease.c') diff --git a/tests/kms_lease.c b/tests/kms_lease.c index 5d2f554d..f5b66d86 100644 --- a/tests/kms_lease.c +++ b/tests/kms_lease.c @@ -121,6 +121,7 @@ typedef struct { enum pipe pipe; uint32_t crtc_id; uint32_t connector_id; + uint32_t plane_id; } data_t; static uint32_t pipe_to_crtc_id(igt_display_t *display, enum pipe pipe) @@ -247,9 +248,7 @@ static int make_lease(data_t *data, lease_t *lease) object_ids[mcl.object_count++] = data->connector_id; object_ids[mcl.object_count++] = data->crtc_id; /* We use universal planes, must add the primary plane */ - object_ids[mcl.object_count++] = - igt_pipe_get_plane_type(&data->master.display.pipes[data->pipe], - DRM_PLANE_TYPE_PRIMARY)->drm_plane->plane_id; + object_ids[mcl.object_count++] = data->plane_id; ret = create_lease(data->master.fd, &mcl); @@ -366,9 +365,12 @@ static void lease_get(data_t *data) { lease_t lease; struct local_drm_mode_get_lease mgl; - uint32_t objects[2]; + int num_leased_obj = 3; + uint32_t objects[num_leased_obj]; int o; + mgl.pad = 0; + /* Create a valid lease */ igt_assert_eq(make_lease(data, &lease), 0); @@ -378,7 +380,7 @@ static void lease_get(data_t *data) igt_assert_eq(get_lease(lease.fd, &mgl), 0); /* Make sure it's 2 */ - igt_assert_eq(mgl.count_objects, 2); + igt_assert_eq(mgl.count_objects, num_leased_obj); /* Get the objects */ mgl.objects_ptr = (uint64_t) (uintptr_t) objects; @@ -386,20 +388,35 @@ static void lease_get(data_t *data) igt_assert_eq(get_lease(lease.fd, &mgl), 0); /* Make sure it's 2 */ - igt_assert_eq(mgl.count_objects, 2); + igt_assert_eq(mgl.count_objects, num_leased_obj); - /* Make sure we got both the connector and crtc back */ - for (o = 0; o < 2; o++) + /* Make sure we got the connector, crtc and plane back */ + for (o = 0; o < num_leased_obj; o++) if (objects[o] == data->connector_id) break; - igt_assert_neq(o, 2); + igt_assert_neq(o, num_leased_obj); - for (o = 0; o < 2; o++) + for (o = 0; o < num_leased_obj; o++) if (objects[o] == data->crtc_id) break; - igt_assert_neq(o, 2); + igt_assert_neq(o, num_leased_obj); + + for (o = 0; o < num_leased_obj; o++) + if (objects[o] == data->plane_id) + break; + + igt_assert_neq(o, num_leased_obj); + + /* invalid pad */ + mgl.pad = -1; + igt_assert_eq(get_lease(lease.fd, &mgl), -EINVAL); + mgl.pad = 0; + + /* invalid pointer */ + mgl.objects_ptr = 0; + igt_assert_eq(get_lease(lease.fd, &mgl), -EFAULT); terminate_lease(&lease); } @@ -566,6 +583,9 @@ static void run_test(data_t *data, void (*testfunc)(data_t *)) data->pipe = p; data->crtc_id = pipe_to_crtc_id(display, p); data->connector_id = output->id; + data->plane_id = + igt_pipe_get_plane_type(&data->master.display.pipes[data->pipe], + DRM_PLANE_TYPE_PRIMARY)->drm_plane->plane_id; testfunc(data); -- cgit v1.2.3