Am 05.06.2013 um 15:28 hat Corey Bryant geschrieben: > >>+ > >>+ if (rwr->rc == 0) { > >>+ rwr->rc = rwr->num_sectors; > >>+ *rwr->blob_r = g_malloc(rwr->size); > >>+ memcpy(*rwr->blob_r, buf, rwr->size); > > > >Use bdrv_pread()/bdrv_pwrite() for byte-granularity I/O instead of > >duplicating the buffering yourself. > > > > Aren't bdrv_pread()/bdrv_pwrite() synchronous? Wouldn't using them > block the main QEMU thread? That is why I switched to using the > coroutine versions.
You need to call them from coroutine context to avoid that they invoke their on coroutine on which they wait in this this while (!done) { qemu_aio_wait(); } loop that blocks everything. Called from coroutine context, they do the Right Thing, though. Kevin