On 09/12/2010 05:29 PM, Anthony Liguori wrote:
On 09/12/2010 08:26 AM, Avi Kivity wrote:
 On 09/12/2010 03:08 PM, Anthony Liguori wrote:
This can cause a disk read, no?  Shouldn't it be made asynchronous?


Yes, it should. I'm not sure there's an easy way to make it asynchronous though not because of the block layer but because of how these functions are called.

Sorry to harp on the subject, but that's the standard problem with state machines. Every time you want to do a blocking operation in a function, you have to put all its locals in some structure, split the function into two, do some scheduling, etc.

We can't block the VCPU thread for arbitrarily long periods of time. If we get a PIO operation requesting information about geometry, we can't wait for a disk read in order to satisfy that request.

We need to kick off the I/O operations in the background such that the data is available before the PIO operation happens. This isn't SM vs. threads at all, this is simply about the fact that we can't do block I/O during a PIO operation.

Isn't this an identify command, where the guest can only read the data after the interface indicates it is ready (or posts an interrupt)? I thought the guest interface was already async.

The code appears to support this:

        switch(val) {
        case WIN_IDENTIFY:
            if (s->bs && s->drive_kind != IDE_CD) {
                if (s->drive_kind != IDE_CFATA)
                    ide_identify(s);
                else
                    ide_cfata_identify(s);
                s->status = READY_STAT | SEEK_STAT;
ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
            } else {
                if (s->drive_kind == IDE_CD) {
                    ide_set_signature(s);
                }
                ide_abort_command(s);
            }
            ide_set_irq(s->bus);
            break;

but I may be misinterpreting it. If I'm right, all we need to do is push this whole block to a thread.

--
error compiling committee.c: too many arguments to function


Reply via email to