I am investigating how PIO is emulated in KVM and QEMU. when a PIO is
encountered, it seems to me that its pio data is copied to
vcpu->arch.pio_data and a fixed offset is assigned to
vcpu->run->io.data_offset.

static int emulator_pio_out_emulated(int size, unsigned short port,
{        ...
        memcpy(vcpu->arch.pio_data, val, size * count);
        ...

       vcpu->run->io.data_offset = KVM_PIO_PAGE_OFFSET * PAGE_SIZE;
}

later in QEMU,  it retrieves data from  (uint8_t *)run +
run->io.data_offset, how can we be sure than the memory the pio data
is copied to "vcpu->arch.pio_data" is where the  (uint8_t *)run +
run->io.data_offset is pointing to ?


Also, it seems that there is something called fast pio in which kvm
does not return to qemu. in what case does it happen ?

Thanks


Xin
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to