Lines Matching refs:abba
192 struct test_abba *abba = container_of(work, typeof(*abba), work); in test_abba_work() local
196 ww_acquire_init_noinject(&ctx, abba->class); in test_abba_work()
197 if (!abba->trylock) in test_abba_work()
198 ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
200 WARN_ON(!ww_mutex_trylock(&abba->b_mutex, &ctx)); in test_abba_work()
202 WARN_ON(READ_ONCE(abba->b_mutex.ctx) != &ctx); in test_abba_work()
204 complete(&abba->b_ready); in test_abba_work()
205 wait_for_completion(&abba->a_ready); in test_abba_work()
207 err = ww_mutex_lock(&abba->a_mutex, &ctx); in test_abba_work()
208 if (abba->resolve && err == -EDEADLK) { in test_abba_work()
209 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
210 ww_mutex_lock_slow(&abba->a_mutex, &ctx); in test_abba_work()
211 err = ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
215 ww_mutex_unlock(&abba->a_mutex); in test_abba_work()
216 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
219 abba->result = err; in test_abba_work()
224 struct test_abba abba; in test_abba() local
228 ww_mutex_init(&abba.a_mutex, class); in test_abba()
229 ww_mutex_init(&abba.b_mutex, class); in test_abba()
230 INIT_WORK_ONSTACK(&abba.work, test_abba_work); in test_abba()
231 init_completion(&abba.a_ready); in test_abba()
232 init_completion(&abba.b_ready); in test_abba()
233 abba.class = class; in test_abba()
234 abba.trylock = trylock; in test_abba()
235 abba.resolve = resolve; in test_abba()
237 queue_work(wq, &abba.work); in test_abba()
241 ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
243 WARN_ON(!ww_mutex_trylock(&abba.a_mutex, &ctx)); in test_abba()
245 WARN_ON(READ_ONCE(abba.a_mutex.ctx) != &ctx); in test_abba()
247 complete(&abba.a_ready); in test_abba()
248 wait_for_completion(&abba.b_ready); in test_abba()
250 err = ww_mutex_lock(&abba.b_mutex, &ctx); in test_abba()
252 ww_mutex_unlock(&abba.a_mutex); in test_abba()
253 ww_mutex_lock_slow(&abba.b_mutex, &ctx); in test_abba()
254 err = ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
258 ww_mutex_unlock(&abba.b_mutex); in test_abba()
259 ww_mutex_unlock(&abba.a_mutex); in test_abba()
262 flush_work(&abba.work); in test_abba()
263 destroy_work_on_stack(&abba.work); in test_abba()
267 if (err || abba.result) { in test_abba()
269 __func__, err, abba.result); in test_abba()
273 if (err != -EDEADLK && abba.result != -EDEADLK) { in test_abba()
275 __func__, err, abba.result); in test_abba()