That if the dbs' owner is an iothread, dma should be resumed on the right thread. In this case it is the AioContext of the block device.
Signed-off-by: Fam Zheng <f...@redhat.com> --- dma-helpers.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dma-helpers.c b/dma-helpers.c index 6918572..84f61a7 100644 --- a/dma-helpers.c +++ b/dma-helpers.c @@ -95,8 +95,10 @@ static void reschedule_dma(void *opaque) static void continue_after_map_failure(void *opaque) { DMAAIOCB *dbs = (DMAAIOCB *)opaque; + AioContext *ctx; - dbs->bh = qemu_bh_new(reschedule_dma, dbs); + ctx = blk_get_aio_context(dbs->blk); + dbs->bh = aio_bh_new(ctx, reschedule_dma, dbs); qemu_bh_schedule(dbs->bh); } -- 1.9.3