From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58687) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VrD3P-0005NI-3F for qemu-devel@nongnu.org; Thu, 12 Dec 2013 15:40:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VrD3N-0002r8-Ta for qemu-devel@nongnu.org; Thu, 12 Dec 2013 15:40:15 -0500 Received: from mnementh.archaic.org.uk ([2001:8b0:1d0::1]:43455) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VrD3N-0002qd-Jn for qemu-devel@nongnu.org; Thu, 12 Dec 2013 15:40:13 -0500 From: Peter Maydell Date: Thu, 12 Dec 2013 20:40:08 +0000 Message-Id: <1386880808-5678-1-git-send-email-peter.maydell@linaro.org> Subject: [Qemu-devel] [PATCH] vmstate: Add support for an array of ptimer_state * List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Crosthwaite , Juan Quintela , patches@linaro.org, Stefan Hajnoczi , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Li Guang Add support for defining a vmstate field which is an array of pointers to structures, and use this to define a VMSTATE_PTIMER_ARRAY() which allows an array of ptimer_state* to be used by devices. Signed-off-by: Peter Maydell --- This is an odd lacuna in the VMSTATE macros, given that the underlying savevm machinery entirely supports the combination of VMS_ flags. This will be used in the Allwinner A10 timer. include/hw/ptimer.h | 4 ++++ include/migration/vmstate.h | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/hw/ptimer.h b/include/hw/ptimer.h index 28fcaf1..a33edf4 100644 --- a/include/hw/ptimer.h +++ b/include/hw/ptimer.h @@ -36,4 +36,8 @@ extern const VMStateDescription vmstate_ptimer; .offset = vmstate_offset_pointer(_state, _field, ptimer_state), \ } +#define VMSTATE_PTIMER_ARRAY(_f, _s, _n) \ + VMSTATE_ARRAY_OF_POINTER_TO_STRUCT(_f, _s, _n, 0, \ + vmstate_ptimer, ptimer_state) + #endif diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 9d09e60..be193ba 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -339,6 +339,16 @@ extern const VMStateInfo vmstate_info_bitmap; .offset = vmstate_offset_array(_state, _field, _type, _num), \ } +#define VMSTATE_ARRAY_OF_POINTER_TO_STRUCT(_f, _s, _n, _v, _vmsd, _type) { \ + .name = (stringify(_f)), \ + .version_id = (_v), \ + .num = (_n), \ + .vmsd = &(_vmsd), \ + .size = sizeof(_type *), \ + .flags = VMS_ARRAY|VMS_STRUCT|VMS_ARRAY_OF_POINTER, \ + .offset = vmstate_offset_array(_s, _f, _type*, _n), \ +} + #define VMSTATE_STRUCT_ARRAY_TEST(_field, _state, _num, _test, _version, _vmsd, _type) { \ .name = (stringify(_field)), \ .num = (_num), \ -- 1.8.5