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 Liustatic 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 Liustatic 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 Liuvoid 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