diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2021-10-12 03:12:17 +0300 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2021-10-18 16:28:16 +0300 |
commit | 4a0d5d5c7b0ce18d44f259db8c5ecf27919e85c7 (patch) | |
tree | 186b1b2d00f1995e9c2c1a650e26eb4c2c6f6655 /tests/kms_concurrent.c | |
parent | 9db2886c2111eae9591fbff62ac12e13cbaf9941 (diff) |
lib/kms: Have igt_std_1024_mode_get() return a copy of the mode
We want to provide override modes with different refresh rates.
Start by making igt_std_1024_mode_get() return a copy rather
than a pointer to the static const mode directly. And sprinkle
the necessary free() calls, and some igt_memdups() into parallel
codepaths, so we are consistnetly allocating and freeing everything.
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'tests/kms_concurrent.c')
-rw-r--r-- | tests/kms_concurrent.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c index dece615a..82ef0adc 100644 --- a/tests/kms_concurrent.c +++ b/tests/kms_concurrent.c @@ -223,44 +223,38 @@ test_plane_position_with_output(data_t *data, enum pipe pipe, int max_planes, } } -static const drmModeModeInfo * +static drmModeModeInfo * get_lowres_mode(data_t *data, const drmModeModeInfo *mode_default, igt_output_t *output) { - const drmModeModeInfo *mode = igt_std_1024_mode_get(); drmModeConnector *connector = output->config.connector; int limit = mode_default->vdisplay - SIZE_PLANE; - bool found; if (!connector) - return mode; + return igt_std_1024_mode_get(); - found = false; for (int i = 0; i < connector->count_modes; i++) { - mode = &connector->modes[i]; + const drmModeModeInfo *mode = &connector->modes[i]; - if (mode->vdisplay < limit) { - found = true; - break; - } + if (mode->vdisplay < limit) + return igt_memdup(mode, sizeof(*mode)); } - if (!found) - mode = igt_std_1024_mode_get(); - - return mode; + return igt_std_1024_mode_get(); } static void test_resolution_with_output(data_t *data, enum pipe pipe, int max_planes, igt_output_t *output) { - const drmModeModeInfo *mode_hi, *mode_lo; int iterations = opt.iterations < 1 ? max_planes : opt.iterations; bool loop_forever = opt.iterations == LOOP_FOREVER ? true : false; int i; i = 0; while (i < iterations || loop_forever) { + const drmModeModeInfo *mode_hi; + drmModeModeInfo *mode_lo; + igt_output_set_pipe(output, pipe); mode_hi = igt_output_get_mode(output); @@ -268,6 +262,7 @@ test_resolution_with_output(data_t *data, enum pipe pipe, int max_planes, igt_ou /* switch to lower resolution */ igt_output_override_mode(output, mode_lo); + free(mode_lo); if (is_amdgpu_device(data->drm_fd)) igt_output_set_pipe(output, PIPE_NONE); igt_display_commit2(&data->display, COMMIT_ATOMIC); |