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