Lines Matching refs:finfo
112 struct futex_info *finfo = (struct futex_info *)info; in check_xstate() local
125 finfo->valid = true; in check_xstate()
127 for (i = 0; i < finfo->iterations; i++) { in check_xstate()
128 pthread_mutex_lock(&finfo->mutex); in check_xstate()
135 if (finfo->valid) { in check_xstate()
136 finfo->valid = validate_xregs_same(xbuf); in check_xstate()
148 pthread_mutex_unlock(&finfo->next->mutex); in check_xstate()
152 return finfo; in check_xstate()
155 static void create_threads(uint32_t num_threads, uint32_t iterations, struct futex_info *finfo) in create_threads() argument
162 finfo[i].nr = i; in create_threads()
163 finfo[i].iterations = iterations; in create_threads()
169 pthread_mutex_init(&finfo[i].mutex, NULL); in create_threads()
170 pthread_mutex_lock(&finfo[i].mutex); in create_threads()
173 finfo[i].next = &finfo[next_nr]; in create_threads()
175 if (pthread_create(&finfo[i].thread, NULL, check_xstate, &finfo[i])) in create_threads()
180 static bool checkout_threads(uint32_t num_threads, struct futex_info *finfo) in checkout_threads() argument
187 err = pthread_join(finfo[i].thread, &thread_retval); in checkout_threads()
191 if (thread_retval != &finfo[i]) { in checkout_threads()
196 valid &= finfo[i].valid; in checkout_threads()
215 struct futex_info *finfo; in test_context_switch() local
223 finfo = malloc(sizeof(*finfo) * num_threads); in test_context_switch()
224 if (!finfo) in test_context_switch()
227 create_threads(num_threads, iterations, finfo); in test_context_switch()
239 pthread_mutex_unlock(&finfo[0].mutex); in test_context_switch()
242 if (checkout_threads(num_threads, finfo)) in test_context_switch()
247 free(finfo); in test_context_switch()