Hello Stefan/all,

I was reading your blog post on the QEMU overall architecture (link - "
http://blog.vmsplice.net/2011/03/qemu-internals-overall-architecture-and.html";)
and I have a few questions with regards to executing I/O operations (block
I/O) in the middle of guest code execution.

I am running QEMU version 5.0.1 and my target and host architecture is
x86-64. I am using the virtio-blk block driver frontend with a qcow2 image
file as a backing file storage.

I want to do something like below (in TCG) -

static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock
*itb)
{
           log_cpu_state(cpu, flags);
           qemu_log_unlock(logfile);
    }
           #endif /* DEBUG_DISAS */
           if (cond is true) {
               virtio_blk_data_plane_handle_output(vdev, vq);  <- calling
block I/O function here
           }
           ret = tcg_qemu_tb_exec(env, tb_ptr);
           cpu->can_do_io = 1;
           last_tb = (TranslationBlock *)(ret & ~TB_EXIT_MASK);
           .......
}

I have a few questions regarding this.

- Is it possible to call block I/O functions like this? Or do I have to
"call" it from the event loop (main_loop_wait) ?

- Making a change like this requires me to actually finish the block
operation first before I start executing the next TCG block. I see that
"virtio_blk_data_plane_handle_output" makes a lot of aio thread usages and
coroutines. How do I make this call synchronous and essentially run it in
the same thread?

Thank you very much.

Best Regards,
Arnabjyoti Kalita

Reply via email to