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


Reply via email to