From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58458) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XuHdy-000685-Az for qemu-devel@nongnu.org; Fri, 28 Nov 2014 04:15:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XuHds-0000LY-2k for qemu-devel@nongnu.org; Fri, 28 Nov 2014 04:15:14 -0500 Received: from mail-lb0-f180.google.com ([209.85.217.180]:36844) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XuHdr-0000Kb-SU for qemu-devel@nongnu.org; Fri, 28 Nov 2014 04:15:08 -0500 Received: by mail-lb0-f180.google.com with SMTP id l4so5316096lbv.11 for ; Fri, 28 Nov 2014 01:15:07 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <87y4qxj8o5.fsf@blackfin.pond.sub.org> References: <1417067290-20715-1-git-send-email-david@gibson.dropbear.id.au> <87y4qxj8o5.fsf@blackfin.pond.sub.org> From: Peter Maydell Date: Fri, 28 Nov 2014 09:14:46 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH] Fix for crash after migration in virtio-rng on bi-endian targets List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Juan Quintela , Rusty Russell , QEMU Developers , Alexander Graf , "Michael S. Tsirkin" , Paolo Bonzini , David Gibson On 27 November 2014 at 09:26, Markus Armbruster wrote: > David Gibson writes: > >> VirtIO devices now remember which endianness they're operating in in order >> to support targets which may have guests of either endianness, such as >> powerpc. This endianness state is transferred in a subsection of the >> virtio device's information. >> >> With virtio-rng this can lead to an abort after a loadvm hitting the >> assert() in virtio_is_big_endian(). This can be reproduced by doing a >> migrate and load from file on a bi-endian target with a virtio-rng device. >> The actual guest state isn't particularly important to triggering this. >> >> The cause is that virtio_rng_load_device() calls virtio_rng_process() which >> accesses the ring and thus needs the endianness. However, >> virtio_rng_process() is called via virtio_load() before it loads the >> subsections. Essentially the ->load callback in VirtioDeviceClass should >> only be used for actually reading the device state from the stream, not for >> post-load re-initialization. >> >> This patch fixes the bug by moving the virtio_rng_process() after the call >> to virtio_load(). Better yet would be to convert virtio to use vmsd and >> have the virtio_rng_process() as a post_load callback, but that's a bigger >> project for another day. >> >> This is bugfix, and should be considered for the 2.2 branch. > > "[PATCH for-2.2]" would have been a good idea then. Next time :) So do you want this patch in 2.2? I was planning to put in the virtio-vs-xen fixes today and tag rc4, so it's not too late if you're confident this patch is good. Let me know if you think it should go in, and I can apply it to master directly. -- PMM