If KMS is not supported, drmGetResources() will return NULL so be careful not to dereference it. However, we still insist that runtime pm works, so keep on testing. Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> --- tests/pm_rpm.c | 71 +++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/tests/pm_rpm.c b/tests/pm_rpm.c index 2d6c5b49c..7488efd74 100644 --- a/tests/pm_rpm.c +++ b/tests/pm_rpm.c @@ -220,9 +220,10 @@ static bool wait_for_active(void) static void disable_all_screens_dpms(struct mode_set_data *data) { - int i; + if (!data->res) + return; - for (i = 0; i < data->res->count_connectors; i++) { + for (int i = 0; i < data->res->count_connectors; i++) { drmModeConnectorPtr c = data->connectors[i]; kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_OFF); @@ -231,7 +232,8 @@ static void disable_all_screens_dpms(struct mode_set_data *data) static void disable_all_screens(struct mode_set_data *data) { - kmstest_unset_all_crtcs(drm_fd, data->res); + if (data->res) + kmstest_unset_all_crtcs(drm_fd, data->res); } #define disable_all_screens_and_wait(data) do { \ @@ -256,11 +258,13 @@ static bool init_modeset_params_for_type(struct mode_set_data *data, struct modeset_params *params, enum screen_type type) { - int i; drmModeConnectorPtr connector = NULL; drmModeModeInfoPtr mode = NULL; - for (i = 0; i < data->res->count_connectors; i++) { + if (!data->res) + return false; + + for (int i = 0; i < data->res->count_connectors; i++) { drmModeConnectorPtr c = data->connectors[i]; if (type == SCREEN_TYPE_LPSP && @@ -386,34 +390,31 @@ static drmModePropertyBlobPtr get_connector_edid(drmModeConnectorPtr connector, static void init_mode_set_data(struct mode_set_data *data) { - int i; - data->res = drmModeGetResources(drm_fd); - igt_assert(data->res); - igt_assert(data->res->count_connectors <= MAX_CONNECTORS); + if (data->res) { + igt_assert(data->res->count_connectors <= MAX_CONNECTORS); + for (int i = 0; i < data->res->count_connectors; i++) { + data->connectors[i] = drmModeGetConnectorCurrent(drm_fd, + data->res->connectors[i]); + data->edids[i] = get_connector_edid(data->connectors[i], i); + } - for (i = 0; i < data->res->count_connectors; i++) { - data->connectors[i] = drmModeGetConnectorCurrent(drm_fd, - data->res->connectors[i]); - data->edids[i] = get_connector_edid(data->connectors[i], i); + kmstest_set_vt_graphics_mode(); } data->devid = intel_get_drm_devid(drm_fd); - - kmstest_set_vt_graphics_mode(); - init_modeset_cached_params(&ms_data); } static void fini_mode_set_data(struct mode_set_data *data) { - int i; - - for (i = 0; i < data->res->count_connectors; i++) { - drmModeFreeConnector(data->connectors[i]); - drmModeFreePropertyBlob(data->edids[i]); + if (data->res) { + for (int i = 0; i < data->res->count_connectors; i++) { + drmModeFreeConnector(data->connectors[i]); + drmModeFreePropertyBlob(data->edids[i]); + } + drmModeFreeResources(data->res); } - drmModeFreeResources(data->res); } static void get_drm_info(struct compare_data *data) @@ -421,7 +422,8 @@ static void get_drm_info(struct compare_data *data) int i; data->res = drmModeGetResources(drm_fd); - igt_assert(data->res); + if (!data->res) + return; igt_assert(data->res->count_connectors <= MAX_CONNECTORS); igt_assert(data->res->count_encoders <= MAX_ENCODERS); @@ -445,6 +447,9 @@ static void free_drm_info(struct compare_data *data) { int i; + if (!data->res) + return; + for (i = 0; i < data->res->count_connectors; i++) { drmModeFreeConnector(data->connectors[i]); drmModeFreePropertyBlob(data->edids[i]); @@ -545,6 +550,12 @@ static void assert_drm_infos_equal(struct compare_data *d1, { int i; + if (d1->res == d2->res) + return; + + igt_assert(d1->res); + igt_assert(d2->res); + assert_drm_resources_equal(d1, d2); for (i = 0; i < d1->res->count_connectors; i++) { @@ -572,9 +583,12 @@ static bool edid_is_valid(const unsigned char *edid) static int count_drm_valid_edids(struct mode_set_data *data) { - int i, ret = 0; + int ret = 0; - for (i = 0; i < data->res->count_connectors; i++) + if (!data->res) + return 0; + + for (int i = 0; i < data->res->count_connectors; i++) if (data->edids[i] && edid_is_valid(data->edids[i]->data)) ret++; return ret; @@ -635,9 +649,12 @@ static int count_i2c_valid_edids(void) static int count_vga_outputs(struct mode_set_data *data) { - int i, count = 0; + int count = 0; + + if (!data->res) + return 0; - for (i = 0; i < data->res->count_connectors; i++) + for (int i = 0; i < data->res->count_connectors; i++) if (data->connectors[i]->connector_type == DRM_MODE_CONNECTOR_VGA) count++; -- 2.19.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx