Lines Matching refs:iothread

41     IOThread *iothread = opaque;  in iothread_run()  local
48 g_main_context_push_thread_default(iothread->worker_context); in iothread_run()
49 qemu_set_current_aio_context(iothread->ctx); in iothread_run()
50 iothread->thread_id = qemu_get_thread_id(); in iothread_run()
51 qemu_sem_post(&iothread->init_done_sem); in iothread_run()
53 while (iothread->running) { in iothread_run()
63 aio_poll(iothread->ctx, true); in iothread_run()
69 if (iothread->running && qatomic_read(&iothread->run_gcontext)) { in iothread_run()
70 g_main_loop_run(iothread->main_loop); in iothread_run()
74 g_main_context_pop_thread_default(iothread->worker_context); in iothread_run()
82 IOThread *iothread = opaque; in iothread_stop_bh() local
84 iothread->running = false; /* stop iothread_run() */ in iothread_stop_bh()
86 if (iothread->main_loop) { in iothread_stop_bh()
87 g_main_loop_quit(iothread->main_loop); in iothread_stop_bh()
91 void iothread_stop(IOThread *iothread) in iothread_stop() argument
93 if (!iothread->ctx || iothread->stopping) { in iothread_stop()
96 iothread->stopping = true; in iothread_stop()
97 aio_bh_schedule_oneshot(iothread->ctx, iothread_stop_bh, iothread); in iothread_stop()
98 qemu_thread_join(&iothread->thread); in iothread_stop()
103 IOThread *iothread = IOTHREAD(obj); in iothread_instance_init() local
105 iothread->poll_max_ns = IOTHREAD_POLL_MAX_NS_DEFAULT; in iothread_instance_init()
106 iothread->thread_id = -1; in iothread_instance_init()
107 qemu_sem_init(&iothread->init_done_sem, 0); in iothread_instance_init()
109 qatomic_set(&iothread->run_gcontext, 0); in iothread_instance_init()
114 IOThread *iothread = IOTHREAD(obj); in iothread_instance_finalize() local
116 iothread_stop(iothread); in iothread_instance_finalize()
128 if (iothread->ctx) { in iothread_instance_finalize()
129 aio_context_unref(iothread->ctx); in iothread_instance_finalize()
130 iothread->ctx = NULL; in iothread_instance_finalize()
132 if (iothread->worker_context) { in iothread_instance_finalize()
133 g_main_context_unref(iothread->worker_context); in iothread_instance_finalize()
134 iothread->worker_context = NULL; in iothread_instance_finalize()
135 g_main_loop_unref(iothread->main_loop); in iothread_instance_finalize()
136 iothread->main_loop = NULL; in iothread_instance_finalize()
138 qemu_sem_destroy(&iothread->init_done_sem); in iothread_instance_finalize()
141 static void iothread_init_gcontext(IOThread *iothread, const char *thread_name) in iothread_init_gcontext() argument
146 iothread->worker_context = g_main_context_new(); in iothread_init_gcontext()
147 source = aio_get_g_source(iothread_get_aio_context(iothread)); in iothread_init_gcontext()
149 g_source_attach(source, iothread->worker_context); in iothread_init_gcontext()
151 iothread->main_loop = g_main_loop_new(iothread->worker_context, TRUE); in iothread_init_gcontext()
157 IOThread *iothread = IOTHREAD(base); in iothread_set_aio_context_params() local
159 if (!iothread->ctx) { in iothread_set_aio_context_params()
163 aio_context_set_poll_params(iothread->ctx, in iothread_set_aio_context_params()
164 iothread->poll_max_ns, in iothread_set_aio_context_params()
165 iothread->poll_grow, in iothread_set_aio_context_params()
166 iothread->poll_shrink, in iothread_set_aio_context_params()
172 aio_context_set_aio_params(iothread->ctx, in iothread_set_aio_context_params()
173 iothread->parent_obj.aio_max_batch); in iothread_set_aio_context_params()
175 aio_context_set_thread_pool_params(iothread->ctx, base->thread_pool_min, in iothread_set_aio_context_params()
183 IOThread *iothread = IOTHREAD(base); in iothread_init() local
186 iothread->stopping = false; in iothread_init()
187 iothread->running = true; in iothread_init()
188 iothread->ctx = aio_context_new(errp); in iothread_init()
189 if (!iothread->ctx) { in iothread_init()
200 iothread_init_gcontext(iothread, thread_name); in iothread_init()
205 aio_context_unref(iothread->ctx); in iothread_init()
206 iothread->ctx = NULL; in iothread_init()
213 qemu_thread_create(&iothread->thread, thread_name, iothread_run, in iothread_init()
214 iothread, QEMU_THREAD_JOINABLE); in iothread_init()
217 while (iothread->thread_id == -1) { in iothread_init()
218 qemu_sem_wait(&iothread->init_done_sem); in iothread_init()
240 IOThread *iothread = IOTHREAD(obj); in iothread_get_param() local
241 int64_t *field = (void *)iothread + info->offset; in iothread_get_param()
249 IOThread *iothread = IOTHREAD(obj); in iothread_set_param() local
250 int64_t *field = (void *)iothread + info->offset; in iothread_set_param()
279 IOThread *iothread = IOTHREAD(obj); in iothread_set_poll_param() local
286 if (iothread->ctx) { in iothread_set_poll_param()
287 aio_context_set_poll_params(iothread->ctx, in iothread_set_poll_param()
288 iothread->poll_max_ns, in iothread_set_poll_param()
289 iothread->poll_grow, in iothread_set_poll_param()
290 iothread->poll_shrink, in iothread_set_poll_param()
332 char *iothread_get_id(IOThread *iothread) in type_init()
334 return g_strdup(object_get_canonical_path_component(OBJECT(iothread))); in type_init()
337 AioContext *iothread_get_aio_context(IOThread *iothread) in iothread_get_aio_context() argument
339 return iothread->ctx; in iothread_get_aio_context()
346 IOThread *iothread; in query_one_iothread() local
348 iothread = (IOThread *)object_dynamic_cast(object, TYPE_IOTHREAD); in query_one_iothread()
349 if (!iothread) { in query_one_iothread()
354 info->id = iothread_get_id(iothread); in query_one_iothread()
355 info->thread_id = iothread->thread_id; in query_one_iothread()
356 info->poll_max_ns = iothread->poll_max_ns; in query_one_iothread()
357 info->poll_grow = iothread->poll_grow; in query_one_iothread()
358 info->poll_shrink = iothread->poll_shrink; in query_one_iothread()
359 info->aio_max_batch = iothread->parent_obj.aio_max_batch; in query_one_iothread()
375 GMainContext *iothread_get_g_main_context(IOThread *iothread) in iothread_get_g_main_context() argument
377 qatomic_set(&iothread->run_gcontext, 1); in iothread_get_g_main_context()
378 aio_notify(iothread->ctx); in iothread_get_g_main_context()
379 return iothread->worker_context; in iothread_get_g_main_context()
393 void iothread_destroy(IOThread *iothread) in iothread_destroy() argument
395 object_unparent(OBJECT(iothread)); in iothread_destroy()