All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Greg Kurz" <groug@kaod.org>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Cédric Le Goater" <clg@kaod.org>
Subject: Re: [Qemu-devel] [PATCH] qtest: add read/write accessors with a specific endianness
Date: Fri, 7 Oct 2016 10:43:02 +1100	[thread overview]
Message-ID: <20161006234302.GE18490@umbus.fritz.box> (raw)
In-Reply-To: <d50535d1-896d-4a47-f58f-ab5c80dd1539@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1915 bytes --]

On Thu, Oct 06, 2016 at 05:36:32PM +0200, Paolo Bonzini wrote:
> 
> 
> On 06/10/2016 16:11, Greg Kurz wrote:
> > FWIW, Cedric had another proposal which apparently went unnoticed:
> > 
> > <fc24ad74-da26-a713-9312-a2c2d07fb6a7@kaod.org>
> > 
> > The idea is to add an optional endianness argument to the read*/write*
> > commands in the qtest protocol:
> > - libqtest then provides explicit _le and _be APIs
> > - no extra byteswap is performed on the test program side: qtest
> >   actually handles that and does exactly 1 or 0 byteswap.
> > - it does not use memread/memwrite
> > - the current 'guest native' API where qtest tswaps is preserved
> > 
> 
> No, this is a worse idea, because the right place to do the swap is in
> the "program" (libqtest) not in the "CPU" (QEMU).

Hrm.. I guess that makes sense from an x86 perspective when
load/stores always operate in LE.  Not so much for something like
Power where the CPU can perform both LE and BE load/stores trivially.
You can select with CPU mode combined with which instruction form you
use.  e.g. the always-LE writel() on a BE Power kernel is a single
byte-reversed store instruction[0].  there's no "swap" as such, and the
swapped value never appears in a register.  I'm not certain if gcc is
smart enough to translate foo->bar = cpu_to_le32(val) into a
byte-reversed store, but it might be.

The value passed across the pipe to readw etc. is text, so it has no
endianness, just as a value in a cpu register has no endianness.  To
me it makes perfect sense to tell the qtest "cpu" which endianness of
load/store you want it to do with that.

[0] Well, ok, there's a memory barrier too, so it's not quite 1
instruction.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2016-10-07  0:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-04 12:17 [Qemu-devel] [PATCH] qtest: add read/write accessors with a specific endianness Cédric Le Goater
2016-10-04 12:36 ` Peter Maydell
2016-10-04 14:04   ` Laurent Vivier
2016-10-04 14:07   ` Cédric Le Goater
2016-10-04 17:15   ` Paolo Bonzini
2016-10-04 23:43   ` David Gibson
2016-10-05  5:59     ` Cédric Le Goater
2016-10-05 12:31     ` Peter Maydell
2016-10-05 13:49       ` Cédric Le Goater
2016-10-05 13:53         ` Peter Maydell
2016-10-05 14:00           ` Cédric Le Goater
2016-10-05 14:20             ` Peter Maydell
2016-10-05 17:17               ` Cédric Le Goater
2016-10-05 17:32                 ` Peter Maydell
2016-10-06  3:45               ` David Gibson
2016-10-06  7:23                 ` Paolo Bonzini
2016-10-06  8:37                   ` David Gibson
2016-10-06  9:40                     ` Paolo Bonzini
2016-10-06 10:44                       ` Cédric Le Goater
2016-10-06 10:47                 ` Peter Maydell
2016-10-06 23:09                   ` David Gibson
2016-10-06  3:40         ` David Gibson
2016-10-06  3:38       ` David Gibson
2016-10-06  6:10         ` David Gibson
2016-10-06 11:03         ` Peter Maydell
2016-10-06 14:11           ` Greg Kurz
2016-10-06 15:36             ` Paolo Bonzini
2016-10-06 15:41               ` Peter Maydell
2016-10-06 15:59                 ` Laurent Vivier
2016-10-06 23:34                   ` David Gibson
2016-10-07  7:44                     ` Laurent Vivier
2016-10-06 15:44               ` Cédric Le Goater
2016-10-06 15:45                 ` Paolo Bonzini
2016-10-06 23:43               ` David Gibson [this message]
2016-10-06 23:31             ` David Gibson
2016-10-06 23:31           ` David Gibson
2016-10-07  9:52             ` Peter Maydell
2016-10-04 23:26 ` David Gibson
2016-10-05  5:36   ` Cédric Le Goater

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=20161006234302.GE18490@umbus.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=clg@kaod.org \
    --cc=groug@kaod.org \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.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.