Lines Matching refs:abba

159 	struct test_abba *abba = container_of(work, typeof(*abba), work);  in test_abba_work()  local
164 ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
166 complete(&abba->b_ready); in test_abba_work()
167 wait_for_completion(&abba->a_ready); in test_abba_work()
169 err = ww_mutex_lock(&abba->a_mutex, &ctx); in test_abba_work()
170 if (abba->resolve && err == -EDEADLK) { in test_abba_work()
171 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
172 ww_mutex_lock_slow(&abba->a_mutex, &ctx); in test_abba_work()
173 err = ww_mutex_lock(&abba->b_mutex, &ctx); in test_abba_work()
177 ww_mutex_unlock(&abba->a_mutex); in test_abba_work()
178 ww_mutex_unlock(&abba->b_mutex); in test_abba_work()
181 abba->result = err; in test_abba_work()
186 struct test_abba abba; in test_abba() local
190 ww_mutex_init(&abba.a_mutex, &ww_class); in test_abba()
191 ww_mutex_init(&abba.b_mutex, &ww_class); in test_abba()
192 INIT_WORK_ONSTACK(&abba.work, test_abba_work); in test_abba()
193 init_completion(&abba.a_ready); in test_abba()
194 init_completion(&abba.b_ready); in test_abba()
195 abba.resolve = resolve; in test_abba()
197 schedule_work(&abba.work); in test_abba()
200 ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
202 complete(&abba.a_ready); in test_abba()
203 wait_for_completion(&abba.b_ready); in test_abba()
205 err = ww_mutex_lock(&abba.b_mutex, &ctx); in test_abba()
207 ww_mutex_unlock(&abba.a_mutex); in test_abba()
208 ww_mutex_lock_slow(&abba.b_mutex, &ctx); in test_abba()
209 err = ww_mutex_lock(&abba.a_mutex, &ctx); in test_abba()
213 ww_mutex_unlock(&abba.b_mutex); in test_abba()
214 ww_mutex_unlock(&abba.a_mutex); in test_abba()
217 flush_work(&abba.work); in test_abba()
218 destroy_work_on_stack(&abba.work); in test_abba()
222 if (err || abba.result) { in test_abba()
224 __func__, err, abba.result); in test_abba()
228 if (err != -EDEADLK && abba.result != -EDEADLK) { in test_abba()
230 __func__, err, abba.result); in test_abba()