qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel <qemu-devel@nongnu.org>,
	Alexander Graf <agraf@suse.de>,
	Richard Henderson <rth@twiddle.net>,
	Cornelia Huck <cohuck@redhat.com>, Thomas Huth <thuth@redhat.com>,
	Halil Pasic <pasic@linux.vnet.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Subject: [Qemu-devel] [PULL 14/40] s390x/css: add missing css state conditionally
Date: Fri, 14 Jul 2017 12:40:41 +0200	[thread overview]
Message-ID: <1500028867-134709-15-git-send-email-borntraeger@de.ibm.com> (raw)
In-Reply-To: <1500028867-134709-1-git-send-email-borntraeger@de.ibm.com>

From: Halil Pasic <pasic@linux.vnet.ibm.com>

Although we have recently vmstatified the migration of some css
infrastructure,  for some css entities there is still state to be
migrated left, because the focus was keeping migration stream
compatibility (that is basically everything as-is).

Let us add vmstate helpers and extend existing vmstate descriptions so
that we have everything we need. Let us guard the added state via
css_migration_enabled, so we keep the compatible behavior if css
migration is disabled.

Let's also annotate the bits which do not need to be migrated for better
readability.

Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <20170711145441.33925-4-pasic@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/intc/s390_flic.c | 20 +++++++++++++++
 hw/s390x/css.c      | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 94 insertions(+)

diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index efcb1dd..ff6e4ec 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -200,6 +200,22 @@ static void qemu_s390_flic_register_types(void)
 
 type_init(qemu_s390_flic_register_types)
 
+static bool adapter_info_so_needed(void *opaque)
+{
+    return css_migration_enabled();
+}
+
+const VMStateDescription vmstate_adapter_info_so = {
+    .name = "s390_adapter_info/summary_offset",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = adapter_info_so_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT32(summary_offset, AdapterInfo),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 const VMStateDescription vmstate_adapter_info = {
     .name = "s390_adapter_info",
     .version_id = 1,
@@ -213,6 +229,10 @@ const VMStateDescription vmstate_adapter_info = {
          */
         VMSTATE_END_OF_LIST()
     },
+    .subsections = (const VMStateDescription * []) {
+        &vmstate_adapter_info_so,
+        NULL
+    }
 };
 
 const VMStateDescription vmstate_adapter_routes = {
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 1aed89f..e9a0613 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -29,12 +29,45 @@ typedef struct CrwContainer {
     QTAILQ_ENTRY(CrwContainer) sibling;
 } CrwContainer;
 
+static const VMStateDescription vmstate_crw = {
+    .name = "s390_crw",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT16(flags, CRW),
+        VMSTATE_UINT16(rsid, CRW),
+        VMSTATE_END_OF_LIST()
+    },
+};
+
+static const VMStateDescription vmstate_crw_container = {
+    .name = "s390_crw_container",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(crw, CrwContainer, 0, vmstate_crw, CRW),
+        VMSTATE_END_OF_LIST()
+    },
+};
+
 typedef struct ChpInfo {
     uint8_t in_use;
     uint8_t type;
     uint8_t is_virtual;
 } ChpInfo;
 
+static const VMStateDescription vmstate_chp_info = {
+    .name = "s390_chp_info",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT8(in_use, ChpInfo),
+        VMSTATE_UINT8(type, ChpInfo),
+        VMSTATE_UINT8(is_virtual, ChpInfo),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 typedef struct SubchSet {
     SubchDev *sch[MAX_SCHID + 1];
     unsigned long schids_used[BITS_TO_LONGS(MAX_SCHID + 1)];
@@ -221,6 +254,19 @@ typedef struct CssImage {
     ChpInfo chpids[MAX_CHPID + 1];
 } CssImage;
 
+static const VMStateDescription vmstate_css_img = {
+    .name = "s390_css_img",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        /* Subchannel sets have no relevant state. */
+        VMSTATE_STRUCT_ARRAY(chpids, CssImage, MAX_CHPID + 1, 0,
+                             vmstate_chp_info, ChpInfo),
+        VMSTATE_END_OF_LIST()
+    }
+
+};
+
 typedef struct IoAdapter {
     uint32_t id;
     uint8_t type;
@@ -239,10 +285,34 @@ typedef struct ChannelSubSys {
     uint64_t chnmon_area;
     CssImage *css[MAX_CSSID + 1];
     uint8_t default_cssid;
+    /* don't migrate, see css_register_io_adapters */
     IoAdapter *io_adapters[CSS_IO_ADAPTER_TYPE_NUMS][MAX_ISC + 1];
+    /* don't migrate, see get_indicator and IndAddrPtrTmp */
     QTAILQ_HEAD(, IndAddr) indicator_addresses;
 } ChannelSubSys;
 
+static const VMStateDescription vmstate_css = {
+    .name = "s390_css",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_QTAILQ_V(pending_crws, ChannelSubSys, 1, vmstate_crw_container,
+                         CrwContainer, sibling),
+        VMSTATE_BOOL(sei_pending, ChannelSubSys),
+        VMSTATE_BOOL(do_crw_mchk, ChannelSubSys),
+        VMSTATE_BOOL(crws_lost, ChannelSubSys),
+        /* These were kind of migrated by virtio */
+        VMSTATE_UINT8(max_cssid, ChannelSubSys),
+        VMSTATE_UINT8(max_ssid, ChannelSubSys),
+        VMSTATE_BOOL(chnmon_active, ChannelSubSys),
+        VMSTATE_UINT64(chnmon_area, ChannelSubSys),
+        VMSTATE_ARRAY_OF_POINTER_TO_STRUCT(css, ChannelSubSys, MAX_CSSID + 1,
+                0, vmstate_css_img, CssImage),
+        VMSTATE_UINT8(default_cssid, ChannelSubSys),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static ChannelSubSys channel_subsys = {
     .pending_crws = QTAILQ_HEAD_INITIALIZER(channel_subsys.pending_crws),
     .do_crw_mchk = true,
@@ -282,6 +352,10 @@ static int subch_dev_post_load(void *opaque, int version_id)
         css_subch_assign(s->cssid, s->ssid, s->schid, s->devno, s);
     }
 
+    if (css_migration_enabled()) {
+        /* No compat voodoo to do ;) */
+        return 0;
+    }
     /*
      * Hack alert. If we don't migrate the channel subsystem status
      * we still need to find out if the guest enabled mss/mcss-e.
-- 
2.7.4

  parent reply	other threads:[~2017-07-14 11:04 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-14 10:40 [Qemu-devel] [PULL 00/40] s390x: fixes, enhancements for 2.10 softfreeze Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 01/40] s390x/kvm: Rework cmma management Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 02/40] linux-headers: update to 4.13-rc0 Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 03/40] s390x/migration: Storage attributes device Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 04/40] s390x/migration: Monitor commands for storage attributes Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 05/40] s390x/cpumodel: clean up spacing and comments Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 06/40] s390x/cpumodel: provide compat handling for new cpu features Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 07/40] s390x: add flags field for registering I/O adapter Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 08/40] s390x/flic: introduce modify_ais_mode callback Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 09/40] s390x/flic: introduce inject_airq callback Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 10/40] s390x/sic: realize SIC handling Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 11/40] s390x/css: update css_adapter_interrupt Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 12/40] s390x: add helper get_machine_class Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 13/40] s390x: add css_migration_enabled to machine class Christian Borntraeger
2017-07-14 10:40 ` Christian Borntraeger [this message]
2017-07-14 10:40 ` [Qemu-devel] [PULL 15/40] s390x/css: add ORB to SubchDev Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 16/40] s390x/css: activate ChannelSubSys migration Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 17/40] s390x/css: use SubchDev.orb Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 18/40] pc-bios/s390-ccw: Move libc functions to separate header Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 19/40] pc-bios/s390-ccw: Move ebc2asc to sclp.c Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 20/40] pc-bios/s390-ccw: Move virtio-block related functions into a separate file Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 21/40] pc-bios/s390-ccw: Add a write() function for stdio Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 22/40] pc-bios/s390-ccw: Move byteswap functions to a separate header Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 23/40] pc-bios/s390-ccw: Remove unused structs from virtio.h Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 24/40] pc-bios/s390-ccw: Add code for virtio feature negotiation Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 25/40] roms/SLOF: Update submodule to latest status Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 26/40] pc-bios/s390-ccw: Add core files for the network bootloading program Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 27/40] pc-bios/s390-ccw: Add virtio-net driver code Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 28/40] pc-bios/s390-ccw: Link libnet into the netboot image and do the TFTP load Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 29/40] pc-bios/s390: add s390-netboot.img Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 30/40] pc-bios/s390: rebuild s390-ccw.img Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 31/40] s390x: initialize cpu firstly Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 32/40] s390x/cpumodel: add zpci, aen and ais facilities Christian Borntraeger
2017-07-17 17:23   ` David Hildenbrand
2017-07-17 18:12     ` Christian Borntraeger
2017-07-18 14:49       ` David Hildenbrand
2017-07-14 10:41 ` [Qemu-devel] [PULL 33/40] s390x/flic: migrate ais states Christian Borntraeger
2017-09-20 12:39   ` Christian Borntraeger
2017-09-20 12:53     ` [Qemu-devel] block ais migration for machines <= 2.9 Christian Borntraeger
2017-09-20 12:59       ` Cornelia Huck
2017-09-20 14:04         ` Christian Borntraeger
2017-09-20 16:04       ` Dr. David Alan Gilbert
2017-09-21  3:40         ` Yi Min Zhao
2017-09-21  7:41         ` Christian Borntraeger
2017-09-20 16:20       ` no-reply
2017-07-14 10:41 ` [Qemu-devel] [PULL 34/40] s390x/cpumodel: wire up new hardware features Christian Borntraeger
2017-07-17 17:30   ` David Hildenbrand
2017-07-17 18:14     ` Christian Borntraeger
2017-07-18 14:52       ` David Hildenbrand
2017-07-14 10:41 ` [Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture mode Christian Borntraeger
2017-07-17 17:33   ` David Hildenbrand
2017-07-17 17:36     ` David Hildenbrand
2017-07-14 10:41 ` [Qemu-devel] [PULL 36/40] s390x/cpumodel: add esop/esop2 to z12 model Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 37/40] s390x/kvm: Enable KSS facility for nested virtualization Christian Borntraeger
2017-07-17 17:35   ` David Hildenbrand
2017-07-17 18:12     ` Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 38/40] s390x/kvm: enable guarded storage Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 39/40] s390x/arch_dump: also dump guarded storage control block Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 40/40] s390x/gdb: add gs registers Christian Borntraeger
2017-07-14 14:32 ` [Qemu-devel] [PULL 00/40] s390x: fixes, enhancements for 2.10 softfreeze Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1500028867-134709-15-git-send-email-borntraeger@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=cohuck@redhat.com \
    --cc=pasic@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).