blob: 9778f24b000f9aa77ef57fab69b7cbabcdb215a6 [file] [log] [blame]
Venkateswararao Jujjuri (JV)39c05642011-04-23 18:40:22 -07001/*
Wei Liufe528402015-11-18 17:57:30 +00002 * 9p backend
Venkateswararao Jujjuri (JV)39c05642011-04-23 18:40:22 -07003 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Harsh Prateek Bora <harsh@linux.vnet.ibm.com>
8 * Venkateswararao Jujjuri(JV) <jvrao@linux.vnet.ibm.com>
9 *
10 * This work is licensed under the terms of the GNU GPL, version 2. See
11 * the COPYING file in the top-level directory.
12 *
13 */
14
Peter Maydellfbc04122016-01-26 18:17:10 +000015#include "qemu/osdep.h"
Paolo Bonziniebac1202015-11-27 12:43:06 +010016#include "block/thread-pool.h"
Daniel P. Berrange10817bf2015-09-01 14:48:02 +010017#include "qemu/coroutine.h"
Markus Armbrusterdb725812019-08-12 07:23:50 +020018#include "qemu/main-loop.h"
Wei Liufe528402015-11-18 17:57:30 +000019#include "coth.h"
Venkateswararao Jujjuri (JV)39c05642011-04-23 18:40:22 -070020
Paolo Bonziniebac1202015-11-27 12:43:06 +010021/* Called from QEMU I/O thread. */
22static void coroutine_enter_cb(void *opaque, int ret)
23{
24 Coroutine *co = opaque;
Paolo Bonzini0b8b8752016-07-04 19:10:01 +020025 qemu_coroutine_enter(co);
Paolo Bonziniebac1202015-11-27 12:43:06 +010026}
27
28/* Called from worker thread. */
29static int coroutine_enter_func(void *arg)
30{
31 Coroutine *co = arg;
Paolo Bonzini0b8b8752016-07-04 19:10:01 +020032 qemu_coroutine_enter(co);
Paolo Bonziniebac1202015-11-27 12:43:06 +010033 return 0;
34}
Venkateswararao Jujjuri (JV)39c05642011-04-23 18:40:22 -070035
36void co_run_in_worker_bh(void *opaque)
37{
38 Coroutine *co = opaque;
Greg Kurz4b3a4f22015-12-23 10:56:58 +010039 thread_pool_submit_aio(aio_get_thread_pool(qemu_get_aio_context()),
Paolo Bonziniebac1202015-11-27 12:43:06 +010040 coroutine_enter_func, co, coroutine_enter_cb, co);
Venkateswararao Jujjuri (JV)39c05642011-04-23 18:40:22 -070041}