All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoffer Dall <christoffer.dall@linaro.org>
To: Benjamin Herrenschmidt <benh@kernel.crashing.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 08:31:04 -0800	[thread overview]
Message-ID: <20140128163104.GE9687@cbox> (raw)
In-Reply-To: <1390884452.3872.84.camel@pasglop>

On Tue, Jan 28, 2014 at 03:47:32PM +1100, Benjamin Herrenschmidt wrote:
> 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.
> 
OK, I've sent a v3 of the ABI clarification patch following the wording
from you and Scott.  I think we all agree what the format should look
like at this point and hopefully we can quickly agree about a text to
describe that.

Thanks,
-Christoffer

WARNING: multiple messages have this Message-ID (diff)
From: Christoffer Dall <christoffer.dall@linaro.org>
To: Benjamin Herrenschmidt <benh@kernel.crashing.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 08:31:04 -0800	[thread overview]
Message-ID: <20140128163104.GE9687@cbox> (raw)
In-Reply-To: <1390884452.3872.84.camel@pasglop>

On Tue, Jan 28, 2014 at 03:47:32PM +1100, Benjamin Herrenschmidt wrote:
> 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.
> 
OK, I've sent a v3 of the ABI clarification patch following the wording
from you and Scott.  I think we all agree what the format should look
like at this point and hopefully we can quickly agree about a text to
describe that.

Thanks,
-Christoffer

  reply	other threads:[~2014-01-28 16:31 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
2014-01-28  4:47                             ` [Qemu-devel] " Benjamin Herrenschmidt
2014-01-28 16:31                             ` Christoffer Dall [this message]
2014-01-28 16:31                               ` 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=20140128163104.GE9687@cbox \
    --to=christoffer.dall@linaro.org \
    --cc=benh@kernel.crashing.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.