xref: /openbmc/qemu/hw/9pfs/coth.c (revision aef04fc7)
1fe52840cSWei Liu /*
2fe52840cSWei Liu  * 9p backend
3fe52840cSWei Liu  *
4fe52840cSWei Liu  * Copyright IBM, Corp. 2010
5fe52840cSWei Liu  *
6fe52840cSWei Liu  * Authors:
7fe52840cSWei Liu  *  Harsh Prateek Bora <harsh@linux.vnet.ibm.com>
8fe52840cSWei Liu  *  Venkateswararao Jujjuri(JV) <jvrao@linux.vnet.ibm.com>
9fe52840cSWei Liu  *
10fe52840cSWei Liu  * This work is licensed under the terms of the GNU GPL, version 2.  See
11fe52840cSWei Liu  * the COPYING file in the top-level directory.
12fe52840cSWei Liu  *
13fe52840cSWei Liu  */
14fe52840cSWei Liu 
156f569084SChristian Schoenebeck /*
166f569084SChristian Schoenebeck  * Not so fast! You might want to read the 9p developer docs first:
176f569084SChristian Schoenebeck  * https://wiki.qemu.org/Documentation/9p
186f569084SChristian Schoenebeck  */
196f569084SChristian Schoenebeck 
20fbc04127SPeter Maydell #include "qemu/osdep.h"
21fe52840cSWei Liu #include "block/thread-pool.h"
22fe52840cSWei Liu #include "qemu/coroutine.h"
23db725815SMarkus Armbruster #include "qemu/main-loop.h"
24fe52840cSWei Liu #include "coth.h"
25fe52840cSWei Liu 
26fe52840cSWei Liu /* Called from QEMU I/O thread.  */
coroutine_enter_cb(void * opaque,int ret)27fe52840cSWei Liu static void coroutine_enter_cb(void *opaque, int ret)
28fe52840cSWei Liu {
29fe52840cSWei Liu     Coroutine *co = opaque;
300b8b8753SPaolo Bonzini     qemu_coroutine_enter(co);
31fe52840cSWei Liu }
32fe52840cSWei Liu 
33fe52840cSWei Liu /* Called from worker thread.  */
coroutine_enter_func(void * arg)34fe52840cSWei Liu static int coroutine_enter_func(void *arg)
35fe52840cSWei Liu {
36fe52840cSWei Liu     Coroutine *co = arg;
370b8b8753SPaolo Bonzini     qemu_coroutine_enter(co);
38fe52840cSWei Liu     return 0;
39fe52840cSWei Liu }
40fe52840cSWei Liu 
co_run_in_worker_bh(void * opaque)41fe52840cSWei Liu void co_run_in_worker_bh(void *opaque)
42fe52840cSWei Liu {
43fe52840cSWei Liu     Coroutine *co = opaque;
44*aef04fc7SEmanuele Giuseppe Esposito     thread_pool_submit_aio(coroutine_enter_func, co, coroutine_enter_cb, co);
45fe52840cSWei Liu }
46