qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCHv3 0/2] Fix virtio-serial migration on bi-endian targets
@ 2014-12-19  3:57 David Gibson
  2014-12-19  3:57 ` [Qemu-devel] [PATCHv3 1/2] virtio_serial: Don't use vser->config.max_nr_ports internally David Gibson
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: David Gibson @ 2014-12-19  3:57 UTC (permalink / raw)
  To: mst, amit.shah, rusty; +Cc: aik, agraf, mdroth, qemu-devel

On a bi-endian target, with a guest in the non-default endian mode,
attempting to migrate twice in a row with a virtio-serial device wil
cause a qemu SEGV on the second outgoing migration.

The problem is that virtio_serial_save_device() (and other places) expect
VirtIOSerial->config to be in current guest endianness.  On a fresh boot,
virtio_serial_device_realize() will initialize VirtIOSerial->config in
default endianness.  It's assumed the guest OS will make its true
endianness known before the device is reset and initialized, then
vser_reset adjusts VirtIOSerial->config into the new endianness.

But on an incoming migration, the device isn't reset (after all the guest
has a running driver as far as it's concerned), which means that
VirtIOSerial->config retains its default endianness value from
virtio_serial_device_realize().

On a subsequent outgoing migration, virtio_serial_save_device() attempts
to interpret VirtIOSerial->config.max_nr_ports in current endianness when
its actually in default endianness and then runs off the end of the
ports_map array in the loop immediately afterwards.

We could fix this by adjusting VirtIOSerial->config into the correct
current endianness after an incoming migration.  But in fact we
already have a host endian copy of the max number of ports readily
available, so it's simpler to just use that instead.  Patch 1/2 does
that.

Once that's done, it becomes clear that there's really no reason to
keep the guest-endian copy of the config space around persistently
(config accesses aren't a fast path, so it can be constructed when
necessary).  Patch 2/2 makes that cleanup.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-01-05  7:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-19  3:57 [Qemu-devel] [PATCHv3 0/2] Fix virtio-serial migration on bi-endian targets David Gibson
2014-12-19  3:57 ` [Qemu-devel] [PATCHv3 1/2] virtio_serial: Don't use vser->config.max_nr_ports internally David Gibson
2014-12-19  3:57 ` [Qemu-devel] [PATCHv3 2/2] virtio-serial: Don't keep a persistent copy of config space David Gibson
2014-12-19 10:01 ` [Qemu-devel] [PATCHv3 0/2] Fix virtio-serial migration on bi-endian targets Alexander Graf
2014-12-19 10:03 ` Alexander Graf
2015-01-05  7:30 ` Amit Shah

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).