Lines Matching refs:abba
172 struct test_abba *abba = container_of(work, typeof(*abba), work); in test_abba_work() local
177 ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
179 complete(&abba->b_ready); in test_abba_work()
180 wait_for_completion(&abba->a_ready); in test_abba_work()
182 err = ww_mutex_lock(&abba->a_mutex, &ctx); in test_abba_work()
183 if (abba->resolve && err == -EDEADLK) { in test_abba_work()
184 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
185 ww_mutex_lock_slow(&abba->a_mutex, &ctx); in test_abba_work()
186 err = ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
190 ww_mutex_unlock(&abba->a_mutex); in test_abba_work()
191 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
194 abba->result = err; in test_abba_work()
199 struct test_abba abba; in test_abba() local
203 ww_mutex_init(&abba.a_mutex, &ww_class); in test_abba()
204 ww_mutex_init(&abba.b_mutex, &ww_class); in test_abba()
205 INIT_WORK_ONSTACK(&abba.work, test_abba_work); in test_abba()
206 init_completion(&abba.a_ready); in test_abba()
207 init_completion(&abba.b_ready); in test_abba()
208 abba.resolve = resolve; in test_abba()
210 schedule_work(&abba.work); in test_abba()
213 ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
215 complete(&abba.a_ready); in test_abba()
216 wait_for_completion(&abba.b_ready); in test_abba()
218 err = ww_mutex_lock(&abba.b_mutex, &ctx); in test_abba()
220 ww_mutex_unlock(&abba.a_mutex); in test_abba()
221 ww_mutex_lock_slow(&abba.b_mutex, &ctx); in test_abba()
222 err = ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
226 ww_mutex_unlock(&abba.b_mutex); in test_abba()
227 ww_mutex_unlock(&abba.a_mutex); in test_abba()
230 flush_work(&abba.work); in test_abba()
231 destroy_work_on_stack(&abba.work); in test_abba()
235 if (err || abba.result) { in test_abba()
237 __func__, err, abba.result); in test_abba()
241 if (err != -EDEADLK && abba.result != -EDEADLK) { in test_abba()
243 __func__, err, abba.result); in test_abba()