From: Rusty Russell <rusty@rustcorp.com.au>
To: "Andreas Färber" <afaerber@suse.de>,
"Anthony Liguori" <anthony@codemonkey.ws>
Cc: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/7] virtio: allow byte swapping for vring and config access
Date: Fri, 09 Aug 2013 17:05:49 +0930 [thread overview]
Message-ID: <87eha3nwoa.fsf@rustcorp.com.au> (raw)
In-Reply-To: <5203C62C.2040303@suse.de>
Andreas Färber <afaerber@suse.de> writes:
> Am 08.08.2013 17:40, schrieb Anthony Liguori:
>> Andreas Färber <afaerber@suse.de> writes:
>>> Am 08.08.2013 15:31, schrieb Anthony Liguori:
>>>> We have a mechanism to do weak functions via stubs/. I think it would
>>>> be better to do cpu_get_byteswap() as a stub function and then overload
>>>> it in the ppc64 code.
>>>
>>> If this as your name indicates is a per-CPU function then it should go
>>> into CPUClass. Interesting question is, what is virtio supposed to do if
>>> we have two ppc CPUs, one is Big Endian, the other is Little Endian.
>>
>> PPC64 is big endian. AFAIK, there is no such thing as a little endian
>> PPC64 processor.
>>
>> This is just a processor mode where loads/stores are byte lane swapped.
>> Hence the name 'cpu_get_byteswap'. It's just asking whether the
>> load/stores are being swapped or not.
>
> Exactly, just read it as "is in ... Endian mode". On the CPUs I am more
> familiar with (e.g., 970), this used to be controlled via an MSR bit,
> which as CPUPPCState::msr exists per CPUState. I did not check on real
> hardware, but from the QEMU code this would allow for the mixed-endian
> scenario described above.
>
>> At least for PPC64, it's not possible to enable/disable byte lane
>> swapping for individual CPUs. It's done through a system-wide hcall.
>
> What is offending me is only the following: If we name it
> cpu_get_byteswap() as proposed by you, then its first argument should be
> a CPUState *cpu. Its value would be read from the derived type's state,
> such as the MSR bit in the code path that you wanted duplicated. The
> function implementing that register-reading would be a hook in CPUClass,
> with a default implementation in qom/cpu.c rather than a fallback in
> stubs/. To access CPUClass, CPUState cannot be NULL, as brought up by
> Stefano for cpu_do_unassigned_access(); not following that pattern
> prevents mixing CPU architectures, which my large refactorings have
> partially been about. Cf. my guest-memory-dump refactoring.
>
> If it is just some random global value, then please don't call it
> cpu_*(). Since sPAPR is not a target of its own, I don't see how/where
> you want to implement that hcall query as per-target function either,
> that might rather call for a QEMUMachine hook?
>
> I don't care or argue about byte lanes here, I am just trying to keep
> API design consistent and not regressing on the way to heterogeneous
> emulation.
That's a lot of replumbing and indirect function calls for a fairly
obscure case. We certainly don't have a nice CPUState lying around in
virtio at the moment, for example.
I can try to plumb this in if there's consensus, but I suspect it's
making the job 10x harder.
(The next logical step would be for st* and ld* to take the cpu to query
its endianness, Anthony's weird ideas notwithstanding).
Cheers,
Rusty.
next prev parent reply other threads:[~2013-08-09 7:36 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-08 5:15 [Qemu-devel] [PATCH 0/7] Virtio support for endian-curious guests Rusty Russell
2013-08-08 5:15 ` [Qemu-devel] [PATCH 1/7] virtio: allow byte swapping for vring and config access Rusty Russell
2013-08-08 13:31 ` Anthony Liguori
2013-08-08 14:28 ` Andreas Färber
2013-08-08 15:40 ` Anthony Liguori
2013-08-08 15:45 ` Daniel P. Berrange
2013-08-08 16:07 ` Anthony Liguori
2013-08-08 16:14 ` Peter Maydell
2013-08-08 16:25 ` Anthony Liguori
2013-08-08 16:30 ` Peter Maydell
2013-08-09 2:58 ` Rusty Russell
2013-08-09 4:39 ` Anton Blanchard
2013-08-09 8:05 ` Peter Maydell
2013-08-09 14:16 ` Anthony Liguori
2013-08-08 15:48 ` Peter Maydell
2013-08-08 16:11 ` Anthony Liguori
2013-08-08 16:24 ` Andreas Färber
2013-08-09 7:35 ` Rusty Russell [this message]
2013-08-09 7:42 ` Peter Maydell
2013-08-12 7:49 ` Rusty Russell
2013-08-09 7:49 ` Benjamin Herrenschmidt
2013-08-12 0:28 ` Rusty Russell
2013-08-12 0:49 ` Benjamin Herrenschmidt
2013-08-09 15:15 ` Andreas Färber
2013-08-09 0:08 ` Rusty Russell
2013-08-09 7:00 ` Rusty Russell
2013-08-09 14:24 ` Andreas Färber
2013-08-09 6:40 ` Rusty Russell
2013-08-09 14:10 ` Anthony Liguori
2013-08-11 23:46 ` Rusty Russell
2013-08-08 5:15 ` [Qemu-devel] [PATCH 2/7] target-ppc: ppc64 targets can be either endian Rusty Russell
2013-08-08 5:15 ` [Qemu-devel] [PATCH 3/7] hw/net/virtio-net: use virtio wrappers to access headers Rusty Russell
2013-08-08 13:32 ` Anthony Liguori
2013-08-08 5:15 ` [Qemu-devel] [PATCH 4/7] hw/net/virtio-balloon: use virtio wrappers to access page frame numbers Rusty Russell
2013-08-08 13:32 ` Anthony Liguori
2013-08-08 5:15 ` [Qemu-devel] [PATCH 5/7] hw/block/virtio-blk: use virtio wrappers to access headers Rusty Russell
2013-08-08 9:57 ` Peter Maydell
2013-08-08 13:32 ` Anthony Liguori
2013-08-08 5:15 ` [Qemu-devel] [PATCH 6/7] hw/scsi/virtio-scsi: " Rusty Russell
2013-08-08 13:33 ` Anthony Liguori
2013-08-08 5:15 ` [Qemu-devel] [PATCH 7/7] hw/char/virtio-serial-bus: " Rusty Russell
2013-08-08 13:34 ` Anthony Liguori
2013-08-08 5:15 ` [Qemu-devel] [PATCH 7/7] patch virtio-serial-biendian.patch Rusty Russell
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=87eha3nwoa.fsf@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=afaerber@suse.de \
--cc=anthony@codemonkey.ws \
--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.