| /* | 
 |  * 9p backend | 
 |  * | 
 |  * Copyright IBM, Corp. 2010 | 
 |  * | 
 |  * Authors: | 
 |  *  Harsh Prateek Bora <harsh@linux.vnet.ibm.com> | 
 |  *  Venkateswararao Jujjuri(JV) <jvrao@linux.vnet.ibm.com> | 
 |  * | 
 |  * This work is licensed under the terms of the GNU GPL, version 2.  See | 
 |  * the COPYING file in the top-level directory. | 
 |  * | 
 |  */ | 
 |  | 
 | /* | 
 |  * Not so fast! You might want to read the 9p developer docs first: | 
 |  * https://wiki.qemu.org/Documentation/9p | 
 |  */ | 
 |  | 
 | #include "qemu/osdep.h" | 
 | #include "block/thread-pool.h" | 
 | #include "qemu/coroutine.h" | 
 | #include "qemu/main-loop.h" | 
 | #include "coth.h" | 
 |  | 
 | /* Called from QEMU I/O thread.  */ | 
 | static void coroutine_enter_cb(void *opaque, int ret) | 
 | { | 
 |     Coroutine *co = opaque; | 
 |     qemu_coroutine_enter(co); | 
 | } | 
 |  | 
 | /* Called from worker thread.  */ | 
 | static int coroutine_enter_func(void *arg) | 
 | { | 
 |     Coroutine *co = arg; | 
 |     qemu_coroutine_enter(co); | 
 |     return 0; | 
 | } | 
 |  | 
 | void co_run_in_worker_bh(void *opaque) | 
 | { | 
 |     Coroutine *co = opaque; | 
 |     thread_pool_submit_aio(coroutine_enter_func, co, coroutine_enter_cb, co); | 
 | } |