[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/25] s390x/ipl: fix reboots for migration from diff
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PULL 04/25] s390x/ipl: fix reboots for migration from different bios |
Date: |
Mon, 11 Jul 2016 10:08:51 +0200 |
From: David Hildenbrand <address@hidden>
When migrating from a different QEMU version, the start_address and
bios_start_address may differ. During migration these values are migrated
and overwrite the values that were detected by QEMU itself.
On a reboot, QEMU will reload its own BIOS, but use the migrated start
addresses, which does not work if the values differ.
Fix this by not relying on the migrated values anymore, but still
provide them during migration, so existing QEMUs continue to work.
Signed-off-by: David Hildenbrand <address@hidden>
Cc: address@hidden
Signed-off-by: Cornelia Huck <address@hidden>
---
hw/s390x/ipl.c | 11 +++++++++--
hw/s390x/ipl.h | 2 ++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 78998cd..a54284c 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -69,8 +69,8 @@ static const VMStateDescription vmstate_ipl = {
.version_id = 0,
.minimum_version_id = 0,
.fields = (VMStateField[]) {
- VMSTATE_UINT64(start_addr, S390IPLState),
- VMSTATE_UINT64(bios_start_addr, S390IPLState),
+ VMSTATE_UINT64(compat_start_addr, S390IPLState),
+ VMSTATE_UINT64(compat_bios_start_addr, S390IPLState),
VMSTATE_STRUCT(iplb, S390IPLState, 0, vmstate_iplb, IplParameterBlock),
VMSTATE_BOOL(iplb_valid, S390IPLState),
VMSTATE_UINT8(cssid, S390IPLState),
@@ -192,6 +192,13 @@ static void s390_ipl_realize(DeviceState *dev, Error
**errp)
stq_p(rom_ptr(INITRD_PARM_SIZE), initrd_size);
}
}
+ /*
+ * Don't ever use the migrated values, they could come from a different
+ * BIOS and therefore don't work. But still migrate the values, so
+ * QEMUs relying on it don't break.
+ */
+ ipl->compat_start_addr = ipl->start_addr;
+ ipl->compat_bios_start_addr = ipl->bios_start_addr;
qemu_register_reset(qdev_reset_all_fn, dev);
error:
error_propagate(errp, err);
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index ed3f2c8..c891095 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -93,7 +93,9 @@ struct S390IPLState {
/*< private >*/
DeviceState parent_obj;
uint64_t start_addr;
+ uint64_t compat_start_addr;
uint64_t bios_start_addr;
+ uint64_t compat_bios_start_addr;
bool enforce_bios;
IplParameterBlock iplb;
bool iplb_valid;
--
2.9.0
- [Qemu-devel] [PULL 00/25] s390x patches for 2.7, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 01/25] pc-bios/s390-ccw: Pass selected SCSI device to IPL, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 06/25] s390x/css: use define for "virtual-css-bridge" literal, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 09/25] s390x/pci: fix failures of dma map/unmap, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 04/25] s390x/ipl: fix reboots for migration from different bios,
Cornelia Huck <=
- [Qemu-devel] [PULL 05/25] s390x/css: factor out some generic code from virtio_ccw_device_realize(), Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 14/25] s390x/pci: enforce zPCI state checking, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 08/25] s390x/css: Unplug handler of virtual css bridge, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 12/25] s390x/pci: unify FH_ macros, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 19/25] s390x/pci: enable zpci hot-plug/hot-unplug, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 17/25] s390x/pci: introduce S390PCIBusDevice qdev, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 03/25] s390x/ipl: Support IPL from selected SCSI device, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 02/25] pc-bios/s390-ccw.img: rebuild image, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 15/25] s390x/pci: introduce S390PCIBus, Cornelia Huck, 2016/07/11
- [Qemu-devel] [PULL 23/25] s390x/pci: fix stpcifc_service_call, Cornelia Huck, 2016/07/11