[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v9 00/22] legacy virtio support for cross-endian tar
From: |
Greg Kurz |
Subject: |
[Qemu-devel] [PATCH v9 00/22] legacy virtio support for cross-endian targets |
Date: |
Tue, 24 Jun 2014 19:06:58 +0200 |
User-agent: |
StGit/0.17-dirty |
The current legacy virtio devices have a fundamental flaw: they all share
data between host and guest with guest endianness ordering. This is ok for
nearly all architectures that have fixed endianness. Unfortunately, it breaks
for recent PPC64 and ARM targets that can change endianness at runtime.
The virtio-1.0 specification fixes the issue by enforcing little-endian
ordering. It may take some time though until the code for 1.0 gets available
and supported, and all the users can migrate. There have been discussions
for some monthes about supporting such oddity: now we have little-endian
PPC64 distros available, it is worth to propose something.
This patch set brings legacy virtio support for cross-endian targets. The
rationale is that we add a new device_endianness property to VirtIODevice.
This property is used as a runtime indicator to decide wether we should
do little-endian or big-endian conversion, as opposed to the compile time
choice we have now with TARGTE_WORDS_BIGENDIAN. The choice was made to
sample the device endianness out of the endianness mode of the guest
CPU that does the reset. It is an evil but logical consequence of the
initial flaw in the virtio specification, and it was agreed that the concept
would be a good common base for ARM and PPC64 enablement at least. Please
note also that this new property is state and must be preserved across
migrations.
There are several parts in the serie:
- patches 1 and 2 are simple fixes
- patches 3 to 9 introduce VMState based subsections in the virtio
migration code. This is needed because we introduce a new property
in VirtIODevice that we want to migrate without ruining compatibility
efforts
- patches 10 to 13 bring virtio device endianness and memory accessors
to be used by the virtio code
- patches 14 to 20 wire the new memory accessors everywhere accross the
virtio code
- patch 21 is the PPC64 enablement
- patch 22 is a follow-up workaround to disable vhost-net acceleration
in the case the host and guest have different endianness, because
it is not supported for the moment
Changes since v8 are provided in each patch.
Cheers.
---
Alexander Graf (1):
virtio-serial: don't migrate the config space
Cédric Le Goater (1):
virtio-net: byteswap virtio-net header
Greg Kurz (14):
virtio: introduce device specific migration calls
virtio-net: implement per-device migration calls
virtio-blk: implement per-device migration calls
virtio-serial: implement per-device migration calls
virtio-balloon: implement per-device migration calls
virtio-rng: implement per-device migration calls
virtio: add subsections to the migration stream
exec: introduce target_words_bigendian() helper
cpu: introduce CPUClass::virtio_is_big_endian()
virtio: add endian-ambivalent support to VirtIODevice
virtio: memory accessors for endian-ambivalent targets
virtio-9p: use virtio wrappers to access headers
target-ppc: enable virtio endian ambivalent support
vhost-net: disable when cross-endian
Rusty Russell (6):
virtio: allow byte swapping for vring
virtio-net: use virtio wrappers to access headers
virtio-balloon: use virtio wrappers to access page frame numbers
virtio-blk: use virtio wrappers to access headers
virtio-scsi: use virtio wrappers to access headers
virtio-serial-bus: use virtio wrappers to access headers
exec.c | 8 -
hw/9pfs/virtio-9p-device.c | 3 -
hw/block/virtio-blk.c | 62 ++++++-----
hw/char/virtio-serial-bus.c | 94 ++++++++++------
hw/net/vhost_net.c | 19 +++
hw/net/virtio-net.c | 56 +++++++---
hw/scsi/virtio-scsi.c | 40 ++++---
hw/virtio/virtio-balloon.c | 33 +++---
hw/virtio/virtio-pci.c | 11 +-
hw/virtio/virtio-rng.c | 12 +-
hw/virtio/virtio.c | 216 ++++++++++++++++++++++++++++---------
include/hw/virtio/virtio-access.h | 170 +++++++++++++++++++++++++++++
include/hw/virtio/virtio.h | 17 +++
include/qom/cpu.h | 1
qom/cpu.c | 6 +
target-ppc/cpu.h | 2
target-ppc/translate_init.c | 15 +++
17 files changed, 583 insertions(+), 182 deletions(-)
create mode 100644 include/hw/virtio/virtio-access.h
--
Greg
- [Qemu-devel] [PATCH v9 00/22] legacy virtio support for cross-endian targets,
Greg Kurz <=
- [Qemu-devel] [PATCH v9 01/22] virtio-net: byteswap virtio-net header, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 02/22] virtio-serial: don't migrate the config space, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 03/22] virtio: introduce device specific migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 04/22] virtio-net: implement per-device migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 05/22] virtio-blk: implement per-device migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 06/22] virtio-serial: implement per-device migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 07/22] virtio-balloon: implement per-device migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 08/22] virtio-rng: implement per-device migration calls, Greg Kurz, 2014/06/24
- [Qemu-devel] [PATCH v9 09/22] virtio: add subsections to the migration stream, Greg Kurz, 2014/06/24