[Intel-gfx] [PATCH i-g-t] kms_cursor_crc: Move igt_pipe_crc_{new, free} to init

Matt Roper matthew.d.roper at intel.com
Thu May 22 18:47:39 CEST 2014


If a subtest fails, cleanup_crtc() never gets called.  Currently that
also causes igt_pipe_crc_free() to never be called, leading all
subsequent subtests to also fail with -EBUSY at igt_pipe_crc_new().
Move the calls to igt_pipe_crc_{new,free} into igt_main so that
we don't need to worry about closing and reopening the CRC
filedescriptor for each subtest.

Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
---
 tests/kms_cursor_crc.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
index 06625ee..1b90baa 100644
--- a/tests/kms_cursor_crc.c
+++ b/tests/kms_cursor_crc.c
@@ -39,11 +39,14 @@
 #define DRM_CAP_CURSOR_HEIGHT 0x9
 #endif
 
+#define MAX_PIPES 3
+
 typedef struct {
 	int drm_fd;
 	igt_display_t display;
 	struct igt_fb primary_fb;
 	struct igt_fb fb;
+	igt_pipe_crc_t *pipe_crcs[MAX_PIPES];
 } data_t;
 
 typedef struct {
@@ -251,12 +254,6 @@ static bool prepare_crtc(test_data_t *test_data, igt_output_t *output,
 
 	igt_display_commit(display);
 
-	/* create the pipe_crc object for this pipe */
-	if (test_data->pipe_crc)
-		igt_pipe_crc_free(test_data->pipe_crc);
-
-	test_data->pipe_crc = igt_pipe_crc_new(test_data->pipe,
-					       INTEL_PIPE_CRC_SOURCE_AUTO);
 	if (!test_data->pipe_crc) {
 		igt_info("auto crc not supported on this connector with pipe %i\n",
 			 test_data->pipe);
@@ -289,7 +286,6 @@ static void cleanup_crtc(test_data_t *test_data, igt_output_t *output)
 	igt_display_t *display = &data->display;
 	igt_plane_t *primary;
 
-	igt_pipe_crc_free(test_data->pipe_crc);
 	test_data->pipe_crc = NULL;
 
 	igt_remove_fb(data->drm_fd, &data->primary_fb);
@@ -315,6 +311,7 @@ static void run_test(data_t *data, void (*testfunc)(test_data_t *), int cursor_w
 		test_data.output = output;
 		for (p = 0; p < igt_display_get_n_pipes(display); p++) {
 			test_data.pipe = p;
+			test_data.pipe_crc = data->pipe_crcs[p];
 
 			if (!prepare_crtc(&test_data, output, cursor_w, cursor_h))
 				continue;
@@ -385,6 +382,7 @@ igt_main
 	uint64_t cursor_width = 64, cursor_height = 64;
 	data_t data = {};
 	int ret;
+	int p;
 
 	igt_skip_on_simulation();
 
@@ -405,11 +403,20 @@ igt_main
 		igt_require_pipe_crc();
 
 		igt_display_init(&data.display, data.drm_fd);
+
+		for (p = 0; p < igt_display_get_n_pipes(&data.display); p++)
+			data.pipe_crcs[p] = igt_pipe_crc_new(p,
+							     INTEL_PIPE_CRC_SOURCE_AUTO);
 	}
 
 	run_test_generic(&data, cursor_width);
 
 	igt_fixture {
+		for (p = 0; p < igt_display_get_n_pipes(&data.display); p++) {
+			if (data.pipe_crcs[p])
+				igt_pipe_crc_free(data.pipe_crcs[p]);
+		}
+
 		igt_display_fini(&data.display);
 	}
 }
-- 
1.8.5.1




More information about the Intel-gfx mailing list