Lines Matching refs:abba
190 struct test_abba *abba = container_of(work, typeof(*abba), work); in test_abba_work() local
195 if (!abba->trylock) in test_abba_work()
196 ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
198 WARN_ON(!ww_mutex_trylock(&abba->b_mutex, &ctx)); in test_abba_work()
200 WARN_ON(READ_ONCE(abba->b_mutex.ctx) != &ctx); in test_abba_work()
202 complete(&abba->b_ready); in test_abba_work()
203 wait_for_completion(&abba->a_ready); in test_abba_work()
205 err = ww_mutex_lock(&abba->a_mutex, &ctx); in test_abba_work()
206 if (abba->resolve && err == -EDEADLK) { in test_abba_work()
207 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
208 ww_mutex_lock_slow(&abba->a_mutex, &ctx); in test_abba_work()
209 err = ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
213 ww_mutex_unlock(&abba->a_mutex); in test_abba_work()
214 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
217 abba->result = err; in test_abba_work()
222 struct test_abba abba; in test_abba() local
226 ww_mutex_init(&abba.a_mutex, &ww_class); in test_abba()
227 ww_mutex_init(&abba.b_mutex, &ww_class); in test_abba()
228 INIT_WORK_ONSTACK(&abba.work, test_abba_work); in test_abba()
229 init_completion(&abba.a_ready); in test_abba()
230 init_completion(&abba.b_ready); in test_abba()
231 abba.trylock = trylock; in test_abba()
232 abba.resolve = resolve; in test_abba()
234 schedule_work(&abba.work); in test_abba()
238 ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
240 WARN_ON(!ww_mutex_trylock(&abba.a_mutex, &ctx)); in test_abba()
242 WARN_ON(READ_ONCE(abba.a_mutex.ctx) != &ctx); in test_abba()
244 complete(&abba.a_ready); in test_abba()
245 wait_for_completion(&abba.b_ready); in test_abba()
247 err = ww_mutex_lock(&abba.b_mutex, &ctx); in test_abba()
249 ww_mutex_unlock(&abba.a_mutex); in test_abba()
250 ww_mutex_lock_slow(&abba.b_mutex, &ctx); in test_abba()
251 err = ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
255 ww_mutex_unlock(&abba.b_mutex); in test_abba()
256 ww_mutex_unlock(&abba.a_mutex); in test_abba()
259 flush_work(&abba.work); in test_abba()
260 destroy_work_on_stack(&abba.work); in test_abba()
264 if (err || abba.result) { in test_abba()
266 __func__, err, abba.result); in test_abba()
270 if (err != -EDEADLK && abba.result != -EDEADLK) { in test_abba()
272 __func__, err, abba.result); in test_abba()