From patchwork Thu Oct 22 14:02:30 2015
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Pavel Fedin
X-Patchwork-Id: 534439
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])
(using TLSv1 with cipher AES256-SHA (256/256 bits))
(No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 5A78A141324
for ;
Fri, 23 Oct 2015 01:05:05 +1100 (AEDT)
Received: from localhost ([::1]:60173 helo=lists.gnu.org)
by lists.gnu.org with esmtp (Exim 4.71) (envelope-from
)
id 1ZpGUJ-0004DR-CJ
for incoming@patchwork.ozlabs.org; Thu, 22 Oct 2015 10:05:03 -0400
Received: from eggs.gnu.org ([2001:4830:134:3::10]:35062)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1ZpGSA-0000QJ-Q8
for qemu-devel@nongnu.org; Thu, 22 Oct 2015 10:02:54 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1ZpGS5-0008H8-Um
for qemu-devel@nongnu.org; Thu, 22 Oct 2015 10:02:50 -0400
Received: from mailout3.w1.samsung.com ([210.118.77.13]:49494)
by eggs.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1ZpGS5-0008Gu-MY
for qemu-devel@nongnu.org; Thu, 22 Oct 2015 10:02:45 -0400
Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244])
by mailout3.w1.samsung.com
(Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5
2014)) with ESMTP id <0NWM0011OKCIGM40@mailout3.w1.samsung.com> for
qemu-devel@nongnu.org; Thu, 22 Oct 2015 15:02:42 +0100 (BST)
X-AuditID: cbfec7f4-f79c56d0000012ee-c4-5628ec82068b
Received: from eusync4.samsung.com ( [203.254.199.214])
by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id 82.07.04846.28CE8265;
Thu, 22 Oct 2015 15:02:42 +0100 (BST)
Received: from fedinw7x64.rnd.samsung.ru ([106.109.131.169])
by eusync4.samsung.com
(Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5
2014)) with ESMTPA id <0NWM009DOKC6J250@eusync4.samsung.com>; Thu,
22 Oct 2015 15:02:42 +0100 (BST)
From: Pavel Fedin
To: qemu-devel@nongnu.org
Date: Thu, 22 Oct 2015 17:02:30 +0300
Message-id:
<223a28932b6a98058be07249e7ab9e512439dc39.1445522263.git.p.fedin@samsung.com>
X-Mailer: git-send-email 2.4.4
In-reply-to:
References:
In-reply-to:
References:
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrBLMWRmVeSWpSXmKPExsVy+t/xa7pNbzTCDNafY7bY9Pkci8WcMw9Y
LI737mCxaPv8nd3i7uvPLBafTkxkcWDz+He4n8lj56y77B4tR96yety5tofN48m1zUwBrFFc
NimpOZllqUX6dglcGR+fTGAqWKVc0XM0p4GxQ6qLkZNDQsBEYv2xDjYIW0ziwr31QDYXh5DA
UkaJdwv3QzltTBKdS5+wgFSxCahLnP76AcwWEZCU+N11mhmkiFngEaPE7MUrGEESwgK+Envn
vAOzWQRUJea8bQGzeQWiJX6vb2eFWCcnceX6dLDVnALmEvObX4PZQgJmEh3L97HjEp/AyL+A
kWEVo2hqaXJBcVJ6rqFecWJucWleul5yfu4mRkj4fdnBuPiY1SFGAQ5GJR5ejf/qYUKsiWXF
lbmHGCU4mJVEePufaoQJ8aYkVlalFuXHF5XmpBYfYpTmYFES5527632IkEB6YklqdmpqQWoR
TJaJg1OqgbFNau3MR21m/V8KblVMyzh2cZ1z2tmzR46+nct/5PvL/9GtekzMa/hSlfdviYzN
MKky93z41U92081N6Udms872vxW3aOa0qbbud4/0Gjouv2SyU7nGWI+tfFKAa4th08++uw+n
FF+tWHzkVQbLreuWQTvW7H4Us+NZirp6gew8M9cJXB8XJ7QosRRnJBpqMRcVJwIARBO0yTsC AAA=
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
recognized.
X-Received-From: 210.118.77.13
Cc: Diana Craciun ,
Peter Maydell ,
Shlomo Pongratz ,
Vijay Kilari ,
Shlomo Pongratz
Subject: [Qemu-devel] [RFC PATCH v3 4/4] hw/intc/arm_gicv3_common: Add
vmstate descriptors
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.14
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org
Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org
Add state structure descriptors and actually enable live migration.
In order to describe fixed-size bitmaps, VMSTATE_BITMAP_STATIC() macro is
introduced.
Signed-off-by: Pavel Fedin
---
hw/intc/arm_gicv3_common.c | 58 ++++++++++++++++++++++++++++++++++++++++++++-
include/migration/vmstate.h | 9 +++++++
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index 2082d05..12d9de1 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -45,11 +45,67 @@ static int gicv3_post_load(void *opaque, int version_id)
return 0;
}
+static const VMStateDescription vmstate_gicv3_sgi = {
+ .name = "arm_gicv3_sgi",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_BITMAP(pending, GICv3SGISource, 0, size),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static const VMStateDescription vmstate_gicv3_cpu = {
+ .name = "arm_gicv3_cpu",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_BOOL(cpu_enabled, GICv3CPUState),
+ VMSTATE_UINT32(redist_ctlr, GICv3CPUState),
+ VMSTATE_UINT32(group, GICv3CPUState),
+ VMSTATE_UINT32(enabled, GICv3CPUState),
+ VMSTATE_UINT32(pending, GICv3CPUState),
+ VMSTATE_UINT32(active, GICv3CPUState),
+ VMSTATE_UINT32(edge_trigger, GICv3CPUState),
+ VMSTATE_UINT8_ARRAY(priority, GICv3CPUState, GIC_INTERNAL),
+ VMSTATE_UINT64(propbaser, GICv3CPUState),
+ VMSTATE_UINT64(pendbaser, GICv3CPUState),
+ VMSTATE_UINT32_ARRAY(ctlr, GICv3CPUState, 2),
+ VMSTATE_UINT32(priority_mask, GICv3CPUState),
+ VMSTATE_UINT32_ARRAY(bpr, GICv3CPUState, 2),
+ VMSTATE_UINT32_2DARRAY(apr, GICv3CPUState, 4, 2),
+ VMSTATE_UINT32(legacy_ctlr, GICv3CPUState),
+ VMSTATE_STRUCT_ARRAY(sgi, GICv3CPUState, GIC_NR_SGIS, 1,
+ vmstate_gicv3_sgi, GICv3SGISource),
+ VMSTATE_UINT16(current_pending, GICv3CPUState),
+ VMSTATE_UINT16(running_irq, GICv3CPUState),
+ VMSTATE_UINT16(running_priority, GICv3CPUState),
+ VMSTATE_UINT16_ARRAY(last_active, GICv3CPUState, GICV3_MAXIRQ),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static const VMStateDescription vmstate_gicv3 = {
.name = "arm_gicv3",
- .unmigratable = 1,
+ .version_id = 1,
+ .minimum_version_id = 1,
.pre_save = gicv3_pre_save,
.post_load = gicv3_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32(ctlr, GICv3State),
+ VMSTATE_BITMAP_STATIC(group, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_BITMAP_STATIC(enabled, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_BITMAP_STATIC(pending, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_BITMAP_STATIC(active, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_BITMAP_STATIC(level, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_BITMAP_STATIC(edge_trigger, GICv3State , 0, GICV3_MAXSPI),
+ VMSTATE_UINT8_ARRAY(priority, GICv3State, GICV3_MAXSPI),
+ VMSTATE_UINT8_ARRAY(irq_target, GICv3State, GICV3_MAXSPI),
+ VMSTATE_UINT64_ARRAY(irq_route, GICv3State, GICV3_MAXSPI),
+ VMSTATE_STRUCT_VARRAY_POINTER_UINT32(cpu, GICv3State, num_cpu,
+ vmstate_gicv3_cpu, GICv3CPUState),
+ VMSTATE_END_OF_LIST()
+ }
};
void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_handler handler,
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 9a65522..7d060e9 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -537,6 +537,15 @@ extern const VMStateInfo vmstate_info_bitmap;
.offset = offsetof(_state, _field), \
}
+#define VMSTATE_BITMAP_STATIC(_field, _state, _version, _size) { \
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .size = (_size), \
+ .info = &vmstate_info_bitmap, \
+ .flags = VMS_BUFFER, \
+ .offset = offsetof(_state, _field), \
+}
+
/* _f : field name
_f_n : num of elements field_name
_n : num of elements