[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 8/8] s390x: Disable storage key migration on old
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PATCH v3 8/8] s390x: Disable storage key migration on old machine type |
Date: |
Mon, 31 Aug 2015 13:00:34 +0200 |
From: "Jason J. Herne" <address@hidden>
This code disables storage key migration when an older machine type is
specified.
Reviewed-by: David Hildenbrand <address@hidden>
Signed-off-by: Jason J. Herne <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
hw/s390x/s390-skeys.c | 33 ++++++++++++++++++++++++++++++---
hw/s390x/s390-virtio-ccw.c | 12 ++++++++++++
include/hw/s390x/storage-keys.h | 1 +
3 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c
index 72df19d..ba18834 100644
--- a/hw/s390x/s390-skeys.c
+++ b/hw/s390x/s390-skeys.c
@@ -352,12 +352,39 @@ static int s390_storage_keys_load(QEMUFile *f, void
*opaque, int version_id)
return ret;
}
-static void s390_skeys_instance_init(Object *obj)
+static inline bool s390_skeys_get_migration_enabled(Object *obj, Error **errp)
+{
+ S390SKeysState *ss = S390_SKEYS(obj);
+
+ return ss->migration_enabled;
+}
+
+static inline void s390_skeys_set_migration_enabled(Object *obj, bool value,
+ Error **errp)
{
S390SKeysState *ss = S390_SKEYS(obj);
- register_savevm(NULL, TYPE_S390_SKEYS, 0, 1, s390_storage_keys_save,
- s390_storage_keys_load, ss);
+ /* Prevent double registration of savevm handler */
+ if (ss->migration_enabled == value) {
+ return;
+ }
+
+ ss->migration_enabled = value;
+
+ if (ss->migration_enabled) {
+ register_savevm(NULL, TYPE_S390_SKEYS, 0, 1, s390_storage_keys_save,
+ s390_storage_keys_load, ss);
+ } else {
+ unregister_savevm(DEVICE(ss), TYPE_S390_SKEYS, ss);
+ }
+}
+
+static void s390_skeys_instance_init(Object *obj)
+{
+ object_property_add_bool(obj, "migration-enabled",
+ s390_skeys_get_migration_enabled,
+ s390_skeys_set_migration_enabled, NULL);
+ object_property_set_bool(obj, true, "migration-enabled", NULL);
}
static void s390_skeys_class_init(ObjectClass *oc, void *data)
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 0a057ae..e2a26e9 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -282,12 +282,24 @@ static const TypeInfo ccw_machine_info = {
},
};
+#define CCW_COMPAT_2_4 \
+ {\
+ .driver = TYPE_S390_SKEYS,\
+ .property = "migration-enabled",\
+ .value = "off",\
+ },
+
static void ccw_machine_2_4_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ static GlobalProperty compat_props[] = {
+ CCW_COMPAT_2_4
+ { /* end of list */ }
+ };
mc->name = "s390-ccw-virtio-2.4";
mc->desc = "VirtIO-ccw based S390 machine v2.4";
+ mc->compat_props = compat_props;
}
static const TypeInfo ccw_machine_2_4_info = {
diff --git a/include/hw/s390x/storage-keys.h b/include/hw/s390x/storage-keys.h
index 18e08d2..72b850c 100644
--- a/include/hw/s390x/storage-keys.h
+++ b/include/hw/s390x/storage-keys.h
@@ -21,6 +21,7 @@
typedef struct S390SKeysState {
DeviceState parent_obj;
+ bool migration_enabled;
} S390SKeysState;
--
2.5.1
- [Qemu-devel] [PATCH v3 0/8] s390x: storage key migration, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 6/8] s390x: Info skeys sub-command, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 4/8] s390x: Dump storage keys qmp command, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 5/8] s390x: Dump-skeys hmp support, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 8/8] s390x: Disable storage key migration on old machine type,
Cornelia Huck <=
- [Qemu-devel] [PATCH v3 2/8] s390x: Create QOM device for s390 storage keys, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 7/8] s390x: Migrate guest storage keys (initial memory only), Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 1/8] s390x: add 2.5 compat s390-ccw-virtio machine, Cornelia Huck, 2015/08/31
- [Qemu-devel] [PATCH v3 3/8] s390x: Enable new s390-storage-keys device, Cornelia Huck, 2015/08/31