All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Victor Kamensky <victor.kamensky@linaro.org>,
	Thomas Falcon <tlfalcon@linux.vnet.ibm.com>,
	kvm-devel <kvm@vger.kernel.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	"qemu-ppc@nongnu.org" <qemu-ppc@nongnu.org>,
	"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>
Subject: Re: [Qemu-ppc] KVM and variable-endianness guest CPUs
Date: Tue, 28 Jan 2014 15:47:32 +1100	[thread overview]
Message-ID: <1390884452.3872.84.camel@pasglop> (raw)
In-Reply-To: <20140128004443.GB9687@cbox>

On Mon, 2014-01-27 at 16:44 -0800, Christoffer Dall wrote:

> I'm loosing track of this discussion, Ben, can you explain a bit?  You
> wrote:
> 
>   Having a byte array coming in that represents what the CPU does in its
>   current byte order means you do *NOT* need to query the endianness of
>   the guest CPU from userspace.
> 
> What does "a byte array that represents what the CPU does in its current
> byte order" mean in this context.  Do you mean the VCPU or the physical
> CPU when you say CPU.

It doesn't matter once it's a byte array in address order. Again this is
the *right* abstraction for the kernel ABI, because you do not care
about the endianness of either side, guest or host.

It makes no sense to treat a modern CPU data bus as having an MSB and an
LSB (even if they have it sometimes on the block diagram). Only when
*interpreting a value* on that bus, such as an *address* does the
endianness become of use.

Treat the bus instead as an ordered sequence of bytes in ascending
address order and most of the complexity goes away.

>From there, for a given device, it all depends which bytes *that device*
choses to consider as being the MSB vs. LSB. It's not even a bus thing,
though of course some busses suggest an endianness, and some like PCI
mandates it for configuration space. 

But it remains a device-side choice.

> I read your text as saying "just do a store of the register into the
> data pointer and don't worry about endianness", but somebody, somewhere,
> has to check the VCPU endianness setting.
> 
> I'm probably wrong, and you are probably the right person to clear this
> up, but can you formulate exactly what you think the KVM ABI is and how
> you would put it in Documentation/virtual/kvm/api.txt?
> 
> My point of view is that it is KVM that needs to do this, and it should
> "emulate the CPU" by performing a byteswap in the case where the CPU
> E-bit is set on ARM, but this is an ARM-centric way of looking at
> things.

The ABI going to qemu should be (and inside qemu from TCG to the
emulation) that the CPU did an access of N bytes wide at address A
whose value is the byte array data[] in ascending address order.

Ben.



WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Thomas Falcon <tlfalcon@linux.vnet.ibm.com>,
	kvm-devel <kvm@vger.kernel.org>,
	Victor Kamensky <victor.kamensky@linaro.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	"qemu-ppc@nongnu.org" <qemu-ppc@nongnu.org>,
	"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>
Subject: Re: [Qemu-devel] [Qemu-ppc] KVM and variable-endianness guest CPUs
Date: Tue, 28 Jan 2014 15:47:32 +1100	[thread overview]
Message-ID: <1390884452.3872.84.camel@pasglop> (raw)
In-Reply-To: <20140128004443.GB9687@cbox>

On Mon, 2014-01-27 at 16:44 -0800, Christoffer Dall wrote:

> I'm loosing track of this discussion, Ben, can you explain a bit?  You
> wrote:
> 
>   Having a byte array coming in that represents what the CPU does in its
>   current byte order means you do *NOT* need to query the endianness of
>   the guest CPU from userspace.
> 
> What does "a byte array that represents what the CPU does in its current
> byte order" mean in this context.  Do you mean the VCPU or the physical
> CPU when you say CPU.

It doesn't matter once it's a byte array in address order. Again this is
the *right* abstraction for the kernel ABI, because you do not care
about the endianness of either side, guest or host.

It makes no sense to treat a modern CPU data bus as having an MSB and an
LSB (even if they have it sometimes on the block diagram). Only when
*interpreting a value* on that bus, such as an *address* does the
endianness become of use.

Treat the bus instead as an ordered sequence of bytes in ascending
address order and most of the complexity goes away.

>From there, for a given device, it all depends which bytes *that device*
choses to consider as being the MSB vs. LSB. It's not even a bus thing,
though of course some busses suggest an endianness, and some like PCI
mandates it for configuration space. 

But it remains a device-side choice.

> I read your text as saying "just do a store of the register into the
> data pointer and don't worry about endianness", but somebody, somewhere,
> has to check the VCPU endianness setting.
> 
> I'm probably wrong, and you are probably the right person to clear this
> up, but can you formulate exactly what you think the KVM ABI is and how
> you would put it in Documentation/virtual/kvm/api.txt?
> 
> My point of view is that it is KVM that needs to do this, and it should
> "emulate the CPU" by performing a byteswap in the case where the CPU
> E-bit is set on ARM, but this is an ARM-centric way of looking at
> things.

The ABI going to qemu should be (and inside qemu from TCG to the
emulation) that the CPU did an access of N bytes wide at address A
whose value is the byte array data[] in ascending address order.

Ben.

  reply	other threads:[~2014-01-28  4:47 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-17 17:53 KVM and variable-endianness guest CPUs Peter Maydell
2014-01-17 17:53 ` [Qemu-devel] " Peter Maydell
2014-01-17 18:52 ` Peter Maydell
2014-01-17 18:52   ` [Qemu-devel] " Peter Maydell
2014-01-18  4:24   ` Christoffer Dall
2014-01-18  4:24     ` [Qemu-devel] " Christoffer Dall
2014-01-18  7:32     ` Alexander Graf
2014-01-18  7:32       ` [Qemu-devel] " Alexander Graf
2014-01-18 10:15       ` Peter Maydell
2014-01-18 10:15         ` [Qemu-devel] " Peter Maydell
2014-01-20 14:20         ` Alexander Graf
2014-01-20 14:20           ` [Qemu-devel] " Alexander Graf
2014-01-20 14:31           ` Peter Maydell
2014-01-20 14:31             ` [Qemu-devel] " Peter Maydell
2014-01-20 14:22   ` Alexander Graf
2014-01-20 14:22     ` [Qemu-devel] " Alexander Graf
2014-01-20 19:19     ` Christoffer Dall
2014-01-20 19:19       ` [Qemu-devel] " Christoffer Dall
2014-01-22  5:39       ` Victor Kamensky
2014-01-22  5:39         ` [Qemu-devel] " Victor Kamensky
2014-01-22  6:31         ` Anup Patel
2014-01-22  6:31           ` [Qemu-devel] " Anup Patel
2014-01-22  6:41           ` [Qemu-ppc] " Alexander Graf
2014-01-22  6:41             ` [Qemu-devel] " Alexander Graf
2014-01-22  7:26             ` Victor Kamensky
2014-01-22  7:26               ` [Qemu-devel] " Victor Kamensky
2014-01-22 10:52               ` Alexander Graf
2014-01-22 10:52                 ` [Qemu-devel] " Alexander Graf
2014-01-23  4:25                 ` Victor Kamensky
2014-01-23  4:25                   ` [Qemu-devel] " Victor Kamensky
2014-01-23 10:32                   ` Alexander Graf
2014-01-23 10:32                     ` [Qemu-devel] " Alexander Graf
2014-01-23 10:56                   ` Greg Kurz
2014-01-23 10:56                     ` [Qemu-devel] " Greg Kurz
2014-01-22  8:57             ` Anup Patel
2014-01-22  8:57               ` [Qemu-devel] " Anup Patel
2014-01-23 23:28               ` Christoffer Dall
2014-01-23 23:28                 ` [Qemu-devel] " Christoffer Dall
2014-01-22 10:22         ` Peter Maydell
2014-01-22 10:22           ` [Qemu-devel] " Peter Maydell
2014-01-22 17:19           ` Victor Kamensky
2014-01-22 17:19             ` [Qemu-devel] " Victor Kamensky
2014-01-22 17:29             ` Peter Maydell
2014-01-22 17:29               ` [Qemu-devel] " Peter Maydell
2014-01-22 19:29               ` Victor Kamensky
2014-01-22 19:29                 ` [Qemu-devel] " Victor Kamensky
2014-01-22 20:02                 ` Peter Maydell
2014-01-22 20:02                   ` [Qemu-devel] " Peter Maydell
2014-01-22 22:47                   ` Victor Kamensky
2014-01-22 22:47                     ` [Qemu-devel] " Victor Kamensky
2014-01-22 23:18                     ` Peter Maydell
2014-01-22 23:18                       ` [Qemu-devel] " Peter Maydell
2014-01-23  0:22                       ` Victor Kamensky
2014-01-23  0:22                         ` [Qemu-devel] " Victor Kamensky
2014-01-23 10:23                         ` Peter Maydell
2014-01-23 10:23                           ` [Qemu-devel] " Peter Maydell
2014-01-23 15:06                           ` Victor Kamensky
2014-01-23 15:06                             ` [Qemu-devel] " Victor Kamensky
2014-01-23 15:33                             ` Peter Maydell
2014-01-23 15:33                               ` [Qemu-devel] " Peter Maydell
2014-01-23 16:25                               ` Victor Kamensky
2014-01-23 16:25                                 ` [Qemu-devel] " Victor Kamensky
2014-01-23 20:45                                 ` Christoffer Dall
2014-01-23 20:45                                   ` [Qemu-devel] " Christoffer Dall
2014-01-24  0:50                                   ` Victor Kamensky
2014-01-24  0:50                                     ` [Qemu-devel] " Victor Kamensky
2014-01-24  2:14                                     ` Christoffer Dall
2014-01-24  2:14                                       ` [Qemu-devel] " Christoffer Dall
2014-01-24  4:11                                       ` Victor Kamensky
2014-01-24  4:11                                         ` [Qemu-devel] " Victor Kamensky
2014-01-28  0:32                                         ` [Qemu-ppc] " Benjamin Herrenschmidt
2014-01-28  0:32                                           ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-28  0:40                                           ` Christoffer Dall
2014-01-28  0:40                                             ` [Qemu-devel] " Christoffer Dall
2014-01-28  0:15                                   ` Benjamin Herrenschmidt
2014-01-28  0:15                                     ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-24  0:09                                 ` Victor Kamensky
2014-01-24  0:09                                   ` [Qemu-devel] " Victor Kamensky
2014-01-28  0:07                               ` [Qemu-ppc] " Benjamin Herrenschmidt
2014-01-28  0:07                                 ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-28  0:07                                 ` Benjamin Herrenschmidt
2014-01-28  0:07                                   ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-27 23:34                   ` Benjamin Herrenschmidt
2014-01-27 23:34                     ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-27 23:49                     ` Peter Maydell
2014-01-27 23:49                       ` [Qemu-devel] " Peter Maydell
2014-01-28  0:36                       ` Benjamin Herrenschmidt
2014-01-28  0:36                         ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-28  0:44                         ` Christoffer Dall
2014-01-28  0:44                           ` [Qemu-devel] " Christoffer Dall
2014-01-28  4:47                           ` Benjamin Herrenschmidt [this message]
2014-01-28  4:47                             ` Benjamin Herrenschmidt
2014-01-28 16:31                             ` Christoffer Dall
2014-01-28 16:31                               ` [Qemu-devel] " Christoffer Dall
2014-01-27 23:31                 ` Benjamin Herrenschmidt
2014-01-27 23:31                   ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-27 23:27               ` Benjamin Herrenschmidt
2014-01-27 23:27                 ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-28  9:16                 ` Avi Kivity
2014-01-28  9:16                   ` [Qemu-devel] " Avi Kivity
2014-01-28  9:04           ` Avi Kivity
2014-01-28  9:04             ` [Qemu-devel] " Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1390884452.3872.84.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=christoffer.dall@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=tlfalcon@linux.vnet.ibm.com \
    --cc=victor.kamensky@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.