@@ -156,24 +156,29 @@ static int set_up_atomic_state(struct kunit *test,
156156
157157 if (connector ) {
158158 conn_state = drm_atomic_get_connector_state (state , connector );
159- KUNIT_ASSERT_NOT_ERR_OR_NULL (test , conn_state );
159+ if (IS_ERR (conn_state ))
160+ return PTR_ERR (conn_state );
160161
161162 ret = drm_atomic_set_crtc_for_connector (conn_state , crtc );
162- KUNIT_EXPECT_EQ (test , ret , 0 );
163+ if (ret )
164+ return ret ;
163165 }
164166
165167 crtc_state = drm_atomic_get_crtc_state (state , crtc );
166- KUNIT_ASSERT_NOT_ERR_OR_NULL (test , crtc_state );
168+ if (IS_ERR (crtc_state ))
169+ return PTR_ERR (crtc_state );
167170
168171 ret = drm_atomic_set_mode_for_crtc (crtc_state , & drm_atomic_test_mode );
169- KUNIT_EXPECT_EQ (test , ret , 0 );
172+ if (ret )
173+ return ret ;
170174
171175 crtc_state -> enable = true;
172176 crtc_state -> active = true;
173177
174178 if (connector ) {
175179 ret = drm_atomic_commit (state );
176- KUNIT_ASSERT_EQ (test , ret , 0 );
180+ if (ret )
181+ return ret ;
177182 } else {
178183 // dummy connector mask
179184 crtc_state -> connector_mask = DRM_TEST_CONN_0 ;
@@ -206,7 +211,13 @@ static void drm_test_check_connector_changed_modeset(struct kunit *test)
206211 drm_modeset_acquire_init (& ctx , 0 );
207212
208213 // first modeset to enable
214+ retry_set_up :
209215 ret = set_up_atomic_state (test , priv , old_conn , & ctx );
216+ if (ret == - EDEADLK ) {
217+ ret = drm_modeset_backoff (& ctx );
218+ if (!ret )
219+ goto retry_set_up ;
220+ }
210221 KUNIT_ASSERT_EQ (test , ret , 0 );
211222
212223 state = drm_kunit_helper_atomic_state_alloc (test , drm , & ctx );
@@ -277,13 +288,26 @@ static void drm_test_check_valid_clones(struct kunit *test)
277288
278289 drm_modeset_acquire_init (& ctx , 0 );
279290
291+ retry_set_up :
280292 ret = set_up_atomic_state (test , priv , NULL , & ctx );
293+ if (ret == - EDEADLK ) {
294+ ret = drm_modeset_backoff (& ctx );
295+ if (!ret )
296+ goto retry_set_up ;
297+ }
281298 KUNIT_ASSERT_EQ (test , ret , 0 );
282299
283300 state = drm_kunit_helper_atomic_state_alloc (test , drm , & ctx );
284301 KUNIT_ASSERT_NOT_ERR_OR_NULL (test , state );
285302
303+ retry :
286304 crtc_state = drm_atomic_get_crtc_state (state , priv -> crtc );
305+ if (PTR_ERR (crtc_state ) == - EDEADLK ) {
306+ drm_atomic_state_clear (state );
307+ ret = drm_modeset_backoff (& ctx );
308+ if (!ret )
309+ goto retry ;
310+ }
287311 KUNIT_ASSERT_NOT_ERR_OR_NULL (test , crtc_state );
288312
289313 crtc_state -> encoder_mask = param -> encoder_mask ;
@@ -292,6 +316,12 @@ static void drm_test_check_valid_clones(struct kunit *test)
292316 crtc_state -> mode_changed = true;
293317
294318 ret = drm_atomic_helper_check_modeset (drm , state );
319+ if (ret == - EDEADLK ) {
320+ drm_atomic_state_clear (state );
321+ ret = drm_modeset_backoff (& ctx );
322+ if (!ret )
323+ goto retry ;
324+ }
295325 KUNIT_ASSERT_EQ (test , ret , param -> expected_result );
296326
297327 drm_modeset_drop_locks (& ctx );
0 commit comments