Re: [PATCH v2] KVM: Specify byte order for KVM_EXIT_MMIO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 24 January 2014 15:51, Scott Wood <scottwood@xxxxxxxxxxxxx> wrote:
> On Fri, 2014-01-24 at 15:39 -0800, Christoffer Dall wrote:
>> The KVM API documentation is not clear about the semantics of the data
>> field on the mmio struct on the kvm_run struct.
>>
>> This has become problematic when supporting ARM guests on big-endian
>> host systems with guests of both endianness types, because it is unclear
>> how the data should be exported to user space.
>>
>> This should not break with existing implementations as all supported
>> existing implementations of known user space applications (QEMU and
>> kvmtools for virtio) only support default endianness of the
>> architectures on the host side.
>>
>> Cc: Marc Zyngier <marc.zyngier@xxxxxxx>
>> Cc: Peter Maydell <peter.maydell@xxxxxxxxxx>
>> Cc: Alexander Graf <agraf@xxxxxxx>
>> Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx>
>> ---
>> Changes [v1 - v2]:
>>  - s/host kernel should/host user space should/
>>
>>  Documentation/virtual/kvm/api.txt | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
>> index 366bf4b..6dbd68c 100644
>> --- a/Documentation/virtual/kvm/api.txt
>> +++ b/Documentation/virtual/kvm/api.txt
>> @@ -2565,6 +2565,11 @@ executed a memory-mapped I/O instruction which could not be satisfied
>>  by kvm.  The 'data' member contains the written data if 'is_write' is
>>  true, and should be filled by application code otherwise.
>>
>> +The 'data' member byte order is host kernel native endianness, regardless of
>> +the endianness of the guest, and represents the the value as it would go on the
>> +bus in real hardware.  The host user space should always be able to do:
>> +<type> val = *((<type> *)mmio.data).
>
> Host userspace should be able to do that with what results?  It would
> only produce a directly usable value if host endianness is the same as
> the emulated device's endianness.
>
> I'm not sure that "host kernel native endianness" is an accurate way of
> describing what currently happens.  Regardless of host or guest
> endianness, the guest should be swapping the value as necessary to
> ensure that the value that goes on the (real or emulated) bus is the
> same.
>
> Plus, if it were really "as it would go on the bus" the value wouldn't
> necessarily be left justified within data[], depending on how the bus
> works.
>
> How about a wording like this:
>
>   The 'data' member contains, in its first 'len' bytes, the value as it
>   would appear if the guest had accessed memory rather than I/O.

Scott, Yes! Thank you so much! Completely agree.
You managed elegantly to express in two lines,
what I failed to communicate with hundreds lines
of my emails in last few days on this and other
email thread.

- Victor

> -Scott
>
>
> _______________________________________________
> kvmarm mailing list
> kvmarm@xxxxxxxxxxxxxxxxxxxxx
> https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux