[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/19] Fix pflash migration
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 11/19] Fix pflash migration |
Date: |
Fri, 15 Apr 2016 19:02:14 +0200 |
From: "Dr. David Alan Gilbert" <address@hidden>
Pflash migration (e.g. q35 + EFI variable storage) fails
with the assert:
bdrv_co_do_pwritev: Assertion `!(bs->open_flags & 0x0800)' failed.
This avoids the problem by delaying the pflash update until after
the device loads complete.
Tested by:
Migrating Q35/EFI vm.
Changing efi variable content (with efiboot in the guest)
md5sum'ing the variable file before migration and after.
This is a fix that Paolo posted in the message
address@hidden
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
Acked-by: Laszlo Ersek <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
hw/block/pflash_cfi01.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index c475c2a..106a775 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -46,6 +46,7 @@
#include "exec/address-spaces.h"
#include "qemu/host-utils.h"
#include "hw/sysbus.h"
+#include "sysemu/sysemu.h"
#define PFLASH_BUG(fmt, ...) \
do { \
@@ -97,6 +98,7 @@ struct pflash_t {
MemoryRegion mem;
char *name;
void *storage;
+ VMChangeStateEntry *vmstate;
};
static int pflash_post_load(void *opaque, int version_id);
@@ -944,13 +946,25 @@ MemoryRegion *pflash_cfi01_get_memory(pflash_t *fl)
return &fl->mem;
}
+static void postload_update_cb(void *opaque, int running, RunState state)
+{
+ pflash_t *pfl = opaque;
+
+ /* This is called after bdrv_invalidate_cache_all. */
+ qemu_del_vm_change_state_handler(pfl->vmstate);
+ pfl->vmstate = NULL;
+
+ DPRINTF("%s: updating bdrv for %s\n", __func__, pfl->name);
+ pflash_update(pfl, 0, pfl->sector_len * pfl->nb_blocs);
+}
+
static int pflash_post_load(void *opaque, int version_id)
{
pflash_t *pfl = opaque;
if (!pfl->ro) {
- DPRINTF("%s: updating bdrv for %s\n", __func__, pfl->name);
- pflash_update(pfl, 0, pfl->sector_len * pfl->nb_blocs);
+ pfl->vmstate = qemu_add_vm_change_state_handler(postload_update_cb,
+ pfl);
}
return 0;
}
--
1.8.3.1
- [Qemu-devel] [PULL 00/19] Block layer patches for 2.6.0-rc3, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 02/19] block: Fix blk_aio_write_zeroes(), Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 03/19] block/vpc: set errp in vpc_create, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 06/19] block/vpc: Use the correct max sector count for VHD images, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 07/19] block/vpc: make checks on max table size a bit more lax, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 04/19] vpc: use current_size field for XenServer VHD images, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 01/19] qemu-io: Support 'aio_write -z', Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 08/19] block/vpc: set errp in vpc_open, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 05/19] block/vpc: use current_size field for XenConverter VHD images, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 10/19] block: Don't ignore flags in blk_{, co, aio}_write_zeroes(), Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 11/19] Fix pflash migration,
Kevin Wolf <=
- [Qemu-devel] [PULL 12/19] qemu-iotests: drop unused _within_tolerance() filter, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 13/19] qemu-iotests: common.rc: drop unused _do(), Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 09/19] block/vpc: update comments to be compliant w/coding guidelines, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 19/19] nbd: Don't kill server on client that doesn't request TLS, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 16/19] qemu-iotests: 041: More robust assertion on quorum node, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 14/19] qemu-iotests: tests: do not set unused tmp variable, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 15/19] qemu-iotests: place valgrind log file in scratch dir, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 17/19] nbd: Don't fail handshake on NBD_OPT_LIST descriptions, Kevin Wolf, 2016/04/15
- [Qemu-devel] [PULL 18/19] nbd: fix assert() on qemu-nbd stop, Kevin Wolf, 2016/04/15
- Re: [Qemu-devel] [PULL 00/19] Block layer patches for 2.6.0-rc3, Peter Maydell, 2016/04/18