[Intel-gfx] [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Apr 27 15:12:35 UTC 2016


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

This will enable the following patch to generate less dmesg spam.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
 lib/igt_kms.c       | 33 +++++++++++++++++++++++----------
 lib/igt_kms.h       |  3 ++-
 tests/kms_3d.c      |  2 +-
 tests/kms_flip.c    |  7 ++++---
 tests/kms_render.c  |  5 +++--
 tests/testdisplay.c |  2 +-
 6 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 7557bdc20fa4..07f523e2c39b 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -749,6 +749,7 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
 /**
  * _kmstest_connector_config:
  * @drm_fd: DRM fd
+ * @resources: pointer to drmModeRes or NULL
  * @connector_id: DRM connector id
  * @crtc_idx_mask: mask of allowed DRM CRTC indices
  * @config: structure filled with the possible configuration
@@ -757,17 +758,24 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
  * This tries to find a suitable configuration for the given connector and CRTC
  * constraint and fills it into @config.
  */
-static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
+static bool _kmstest_connector_config(int drm_fd, drmModeRes *resources,
+				      uint32_t connector_id,
 				      unsigned long crtc_idx_mask,
 				      struct kmstest_connector_config *config,
 				      bool probe)
 {
-	drmModeRes *resources;
 	drmModeConnector *connector;
 	drmModeEncoder *encoder;
+	bool free_resources;
 	int i, j;
 
-	resources = drmModeGetResources(drm_fd);
+	if (resources == NULL) {
+		resources = drmModeGetResources(drm_fd);
+		free_resources = true;
+	} else {
+		free_resources = false;
+	}
+
 	if (!resources) {
 		igt_warn("drmModeGetResources failed");
 		goto err1;
@@ -840,7 +848,8 @@ found:
 	config->pipe = kmstest_get_pipe_from_crtc_id(drm_fd,
 						     config->crtc->crtc_id);
 
-	drmModeFreeResources(resources);
+	if (free_resources)
+		drmModeFreeResources(resources);
 
 	return true;
 err4:
@@ -848,7 +857,8 @@ err4:
 err3:
 	drmModeFreeConnector(connector);
 err2:
-	drmModeFreeResources(resources);
+	if (free_resources)
+		drmModeFreeResources(resources);
 err1:
 	return false;
 }
@@ -856,6 +866,7 @@ err1:
 /**
  * kmstest_get_connector_config:
  * @drm_fd: DRM fd
+ * @resources: pointer to drmModeRes or NULL
  * @connector_id: DRM connector id
  * @crtc_idx_mask: mask of allowed DRM CRTC indices
  * @config: structure filled with the possible configuration
@@ -863,12 +874,13 @@ err1:
  * This tries to find a suitable configuration for the given connector and CRTC
  * constraint and fills it into @config.
  */
-bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
+bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
+				  uint32_t connector_id,
 				  unsigned long crtc_idx_mask,
 				  struct kmstest_connector_config *config)
 {
-	return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
-					 config, 0);
+	return _kmstest_connector_config(drm_fd, resources, connector_id,
+					 crtc_idx_mask, config, 0);
 }
 
 /**
@@ -886,8 +898,8 @@ bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
 				    unsigned long crtc_idx_mask,
 				    struct kmstest_connector_config *config)
 {
-	return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
-					 config, 1);
+	return _kmstest_connector_config(drm_fd, NULL, connector_id,
+					 crtc_idx_mask, config, 1);
 }
 
 /**
@@ -1160,6 +1172,7 @@ static void igt_output_refresh(igt_output_t *output)
 		kmstest_free_connector_config(&output->config);
 
 	ret = kmstest_get_connector_config(display->drm_fd,
+					   NULL,
 					   output->id,
 					   crtc_idx_mask,
 					   &output->config);
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 5c8340171ab6..8cbba1673d28 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -158,7 +158,8 @@ void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
 
 bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
 					drmModeModeInfo *mode);
-bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
+bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
+				  uint32_t connector_id,
 				  unsigned long crtc_idx_mask,
 				  struct kmstest_connector_config *config);
 bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
diff --git a/tests/kms_3d.c b/tests/kms_3d.c
index bfc981ee279d..e8bc4a42d8aa 100644
--- a/tests/kms_3d.c
+++ b/tests/kms_3d.c
@@ -86,7 +86,7 @@ igt_simple_main
 			continue;
 
 		/* create a configuration */
-		ret = kmstest_get_connector_config(drm_fd, connector_id,
+		ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
 						   crtc_mask, &config);
 		if (ret != true) {
 			igt_info("Error creating configuration for:\n  ");
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index eda2fcc9212d..fec69254e4da 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -1042,7 +1042,8 @@ static void connector_find_preferred_mode(uint32_t connector_id, int crtc_idx,
 {
 	struct kmstest_connector_config config;
 
-	if (!kmstest_get_connector_config(drm_fd, connector_id, 1 << crtc_idx,
+	if (!kmstest_get_connector_config(drm_fd, NULL,
+					  connector_id, 1 << crtc_idx,
 					  &config)) {
 		o->mode_valid = 0;
 		return;
@@ -1086,11 +1087,11 @@ static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
 	drmModeModeInfo *mode[2];
 	int n, m;
 
-	if (!kmstest_get_connector_config(drm_fd, o->_connector[0],
+	if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[0],
 					  1 << crtc_idx0, &config[0]))
 		return;
 
-	if (!kmstest_get_connector_config(drm_fd, o->_connector[1],
+	if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[1],
 					  1 << crtc_idx1, &config[1])) {
 		kmstest_free_connector_config(&config[0]);
 		return;
diff --git a/tests/kms_render.c b/tests/kms_render.c
index 72da87f19af3..735a1e117349 100644
--- a/tests/kms_render.c
+++ b/tests/kms_render.c
@@ -210,8 +210,9 @@ static int run_test(const char *test_name, enum test_flags flags)
 		for (j = 0; j < resources->count_crtcs; j++) {
 			struct kmstest_connector_config cconf;
 
-			if (!kmstest_get_connector_config(drm_fd, connector_id,
-							   1 << j, &cconf))
+			if (!kmstest_get_connector_config(drm_fd, NULL,
+							  connector_id,
+							  1 << j, &cconf))
 				continue;
 
 			test_connector(test_name, &cconf, flags);
diff --git a/tests/testdisplay.c b/tests/testdisplay.c
index 00b47bd06280..9d84d8cd4000 100644
--- a/tests/testdisplay.c
+++ b/tests/testdisplay.c
@@ -201,7 +201,7 @@ static void connector_find_preferred_mode(uint32_t connector_id,
 		ret = kmstest_probe_connector_config(drm_fd, connector_id,
 						     crtc_idx_mask, &config);
 	else
-		ret = kmstest_get_connector_config(drm_fd, connector_id,
+		ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
 						   crtc_idx_mask, &config);
 	if (!ret) {
 		c->mode_valid = 0;
-- 
1.9.1



More information about the Intel-gfx mailing list