From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=45922 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q2JwS-0001Ml-1e for qemu-devel@nongnu.org; Wed, 23 Mar 2011 05:01:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q2JwM-0004gq-G6 for qemu-devel@nongnu.org; Wed, 23 Mar 2011 05:01:23 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53221) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q2JwL-0004gR-MV for qemu-devel@nongnu.org; Wed, 23 Mar 2011 05:01:18 -0400 Date: Wed, 23 Mar 2011 11:00:38 +0200 From: Alon Levy Subject: Re: [Qemu-devel] [PATCH 02/11] vmstate: register all VMStateDescriptions Message-ID: <20110323090038.GA30280@playa.redhat.com> References: <1300839376-22520-1-git-send-email-aliguori@us.ibm.com> <1300839376-22520-3-git-send-email-aliguori@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1300839376-22520-3-git-send-email-aliguori@us.ibm.com> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Jan Kiszka , qemu-devel@nongnu.org, Juan Quintela On Tue, Mar 22, 2011 at 07:16:07PM -0500, Anthony Liguori wrote: > This is a purely mechanical change. It was generated with a simple python > script and a little bit of hand tuning. Without this, we can only see > VMStateDescriptions that are part of an active device which means that we have > to test migration with a VM configured with every possible device. > Is it possible to make the names meaningful instead of numeric? you get a simpler script if you do that because you don't have to track the number, and it's guranteed unique because you start from unique function names. i.e. instead of +static void init_vmstate_description_0(void) +{ + register_vmstate_description(&vmstate_ac97); +} + +vmstate_init(init_vmstate_description_0); + Have +static void init_vmstate_description_ac97(void) +{ + register_vmstate_description(&vmstate_ac97); +} + +vmstate_init(init_vmstate_description_ac97); + Alon > Signed-off-by: Anthony Liguori > --- > hw/ac97.c | 8 ++++++ > hw/acpi_piix4.c | 8 ++++++ > hw/apb_pci.c | 8 ++++++ > hw/apic.c | 8 ++++++ > hw/arm_sysctl.c | 8 ++++++ > hw/bonito.c | 8 ++++++ > hw/cirrus_vga.c | 8 ++++++ > hw/cs4231.c | 8 ++++++ > hw/cs4231a.c | 8 ++++++ > hw/dec_pci.c | 8 ++++++ > hw/e1000.c | 8 ++++++ > hw/eccmemctl.c | 8 ++++++ > hw/eeprom93xx.c | 8 ++++++ > hw/es1370.c | 8 ++++++ > hw/escc.c | 8 ++++++ > hw/esp.c | 8 ++++++ > hw/fdc.c | 16 ++++++++++++ > hw/fw_cfg.c | 8 ++++++ > hw/gus.c | 8 ++++++ > hw/hda-audio.c | 8 ++++++ > hw/hpet.c | 8 ++++++ > hw/hw.h | 3 ++ > hw/i2c.c | 8 ++++++ > hw/i8254.c | 8 ++++++ > hw/i8259.c | 8 ++++++ > hw/intel-hda.c | 8 ++++++ > hw/ioapic.c | 8 ++++++ > hw/ioh3420.c | 8 ++++++ > hw/kvmclock.c | 8 ++++++ > hw/lance.c | 8 ++++++ > hw/lm32_juart.c | 8 ++++++ > hw/lm32_pic.c | 8 ++++++ > hw/lm32_sys.c | 8 ++++++ > hw/lm32_timer.c | 8 ++++++ > hw/lm32_uart.c | 8 ++++++ > hw/lm832x.c | 8 ++++++ > hw/lsi53c895a.c | 8 ++++++ > hw/marvell_88w8618_audio.c | 8 ++++++ > hw/max7310.c | 8 ++++++ > hw/mc146818rtc.c | 8 ++++++ > hw/mst_fpga.c | 8 ++++++ > hw/musicpal.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ > hw/ne2000.c | 8 ++++++ > hw/pc.c | 8 ++++++ > hw/pci.c | 8 ++++++ > hw/pckbd.c | 16 ++++++++++++ > hw/pcnet-pci.c | 8 ++++++ > hw/piix_pci.c | 8 ++++++ > hw/pl031.c | 8 ++++++ > hw/pl050.c | 16 ++++++++++++ > hw/pl080.c | 16 ++++++++++++ > hw/pl110.c | 16 ++++++++++++ > hw/pl190.c | 8 ++++++ > hw/ps2.c | 16 ++++++++++++ > hw/pxa2xx.c | 16 ++++++++++++ > hw/pxa2xx_dma.c | 8 ++++++ > hw/pxa2xx_pic.c | 8 ++++++ > hw/pxa2xx_timer.c | 16 ++++++++++++ > hw/qxl.c | 16 ++++++++++++ > hw/rtl8139.c | 16 ++++++++++++ > hw/sb16.c | 8 ++++++ > hw/sbi.c | 8 ++++++ > hw/serial.c | 10 ++++++- > hw/slavio_intctl.c | 8 ++++++ > hw/slavio_misc.c | 8 ++++++ > hw/slavio_timer.c | 8 ++++++ > hw/smc91c111.c | 8 ++++++ > hw/sparc32_dma.c | 8 ++++++ > hw/spitz.c | 32 +++++++++++++++++++++++++ > hw/ssd0303.c | 8 ++++++ > hw/sun4c_intctl.c | 8 ++++++ > hw/sun4m_iommu.c | 8 ++++++ > hw/tcx.c | 8 ++++++ > hw/tmp105.c | 8 ++++++ > hw/twl92230.c | 8 ++++++ > hw/usb-hid.c | 8 ++++++ > hw/usb-hub.c | 8 ++++++ > hw/usb-uhci.c | 8 ++++++ > hw/versatilepb.c | 8 ++++++ > hw/vga-isa.c | 8 ++++++ > hw/vga-pci.c | 8 ++++++ > hw/vmmouse.c | 8 ++++++ > hw/vmware_vga.c | 8 ++++++ > hw/vt82c686.c | 16 ++++++++++++ > hw/wdt_i6300esb.c | 8 ++++++ > hw/wdt_ib700.c | 8 ++++++ > hw/wm8750.c | 8 ++++++ > hw/xio3130_downstream.c | 8 ++++++ > hw/xio3130_upstream.c | 8 ++++++ > hw/zaurus.c | 8 ++++++ > module.h | 2 + > savevm.c | 4 +++ > target-i386/machine.c | 8 ++++++ > 93 files changed, 889 insertions(+), 2 deletions(-) > > diff --git a/hw/ac97.c b/hw/ac97.c > index d71072d..bf818b8 100644 > --- a/hw/ac97.c > +++ b/hw/ac97.c > @@ -1343,6 +1343,14 @@ static PCIDeviceInfo ac97_info = { > .init = ac97_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ac97); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void ac97_register (void) > { > pci_qdev_register (&ac97_info); > diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c > index 0b2bc97..aaa009b 100644 > --- a/hw/acpi_piix4.c > +++ b/hw/acpi_piix4.c > @@ -460,6 +460,14 @@ static PCIDeviceInfo piix4_pm_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_acpi); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void piix4_pm_register(void) > { > pci_qdev_register(&piix4_pm_info); > diff --git a/hw/apb_pci.c b/hw/apb_pci.c > index 84e9af7..e5d7954 100644 > --- a/hw/apb_pci.c > +++ b/hw/apb_pci.c > @@ -472,6 +472,14 @@ static PCIDeviceInfo pbm_pci_bridge_info = { > .is_bridge = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pci_device); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pbm_register_devices(void) > { > sysbus_register_withprop(&pbm_host_info); > diff --git a/hw/apic.c b/hw/apic.c > index 9febf40..cdf64dc 100644 > --- a/hw/apic.c > +++ b/hw/apic.c > @@ -1025,6 +1025,14 @@ static SysBusDeviceInfo apic_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_apic); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void apic_register_devices(void) > { > sysbus_register_withprop(&apic_info); > diff --git a/hw/arm_sysctl.c b/hw/arm_sysctl.c > index 9225b58..e11b1ee 100644 > --- a/hw/arm_sysctl.c > +++ b/hw/arm_sysctl.c > @@ -363,6 +363,14 @@ static SysBusDeviceInfo arm_sysctl_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_arm_sysctl); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void arm_sysctl_register_devices(void) > { > sysbus_register_withprop(&arm_sysctl_info); > diff --git a/hw/bonito.c b/hw/bonito.c > index 65a4a63..6ec0777 100644 > --- a/hw/bonito.c > +++ b/hw/bonito.c > @@ -798,6 +798,14 @@ static PCIDeviceInfo bonito_info = { > .init = bonito_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_bonito); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo bonito_pcihost_info = { > .init = bonito_pcihost_initfn, > .qdev.name = "Bonito-pcihost", > diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c > index 2724f7b..97a1c4c 100644 > --- a/hw/cirrus_vga.c > +++ b/hw/cirrus_vga.c > @@ -3145,6 +3145,14 @@ static PCIDeviceInfo cirrus_vga_info = { > .config_write = pci_cirrus_write_config, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pci_cirrus_vga); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void cirrus_vga_register(void) > { > pci_qdev_register(&cirrus_vga_info); > diff --git a/hw/cs4231.c b/hw/cs4231.c > index a65b697..d9601d0 100644 > --- a/hw/cs4231.c > +++ b/hw/cs4231.c > @@ -167,6 +167,14 @@ static SysBusDeviceInfo cs4231_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_cs4231); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void cs4231_register_devices(void) > { > sysbus_register_withprop(&cs4231_info); > diff --git a/hw/cs4231a.c b/hw/cs4231a.c > index 598f032..e036faf 100644 > --- a/hw/cs4231a.c > +++ b/hw/cs4231a.c > @@ -679,6 +679,14 @@ static ISADeviceInfo cs4231a_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_cs4231a); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void cs4231a_register (void) > { > isa_qdev_register (&cs4231a_info); > diff --git a/hw/dec_pci.c b/hw/dec_pci.c > index bf88f2a..4924a43 100644 > --- a/hw/dec_pci.c > +++ b/hw/dec_pci.c > @@ -76,6 +76,14 @@ static PCIDeviceInfo dec_21154_pci_bridge_info = { > .is_bridge = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pci_device); > +} > + > +vmstate_init(init_vmstate_description_0); > + > PCIBus *pci_dec_21154_init(PCIBus *parent_bus, int devfn) > { > PCIDevice *dev; > diff --git a/hw/e1000.c b/hw/e1000.c > index 2a4d5c7..e906c65 100644 > --- a/hw/e1000.c > +++ b/hw/e1000.c > @@ -1212,6 +1212,14 @@ static PCIDeviceInfo e1000_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_e1000); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void e1000_register_devices(void) > { > pci_qdev_register(&e1000_info); > diff --git a/hw/eccmemctl.c b/hw/eccmemctl.c > index 2bda87b..770b6aa 100644 > --- a/hw/eccmemctl.c > +++ b/hw/eccmemctl.c > @@ -323,6 +323,14 @@ static SysBusDeviceInfo ecc_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ecc); > +} > + > +vmstate_init(init_vmstate_description_0); > + > > static void ecc_register_devices(void) > { > diff --git a/hw/eeprom93xx.c b/hw/eeprom93xx.c > index 660b28f..cfa695d 100644 > --- a/hw/eeprom93xx.c > +++ b/hw/eeprom93xx.c > @@ -320,6 +320,14 @@ eeprom_t *eeprom93xx_new(DeviceState *dev, uint16_t nwords) > return eeprom; > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_eeprom); > +} > + > +vmstate_init(init_vmstate_description); > + > void eeprom93xx_free(DeviceState *dev, eeprom_t *eeprom) > { > /* Destroy EEPROM. */ > diff --git a/hw/es1370.c b/hw/es1370.c > index 40cb48c..d2f3671 100644 > --- a/hw/es1370.c > +++ b/hw/es1370.c > @@ -1045,6 +1045,14 @@ static PCIDeviceInfo es1370_info = { > .init = es1370_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_es1370); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void es1370_register (void) > { > pci_qdev_register (&es1370_info); > diff --git a/hw/escc.c b/hw/escc.c > index f6fd919..08062e7 100644 > --- a/hw/escc.c > +++ b/hw/escc.c > @@ -953,6 +953,14 @@ static SysBusDeviceInfo escc_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_escc); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void escc_register_devices(void) > { > sysbus_register_withprop(&escc_info); > diff --git a/hw/esp.c b/hw/esp.c > index fa9d2a2..977890e 100644 > --- a/hw/esp.c > +++ b/hw/esp.c > @@ -743,6 +743,14 @@ static SysBusDeviceInfo esp_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_esp); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void esp_register_devices(void) > { > sysbus_register_withprop(&esp_info); > diff --git a/hw/fdc.c b/hw/fdc.c > index 9fdbc75..4b02dce 100644 > --- a/hw/fdc.c > +++ b/hw/fdc.c > @@ -1938,6 +1938,14 @@ static ISADeviceInfo isa_fdc_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_isa_fdc); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static const VMStateDescription vmstate_sysbus_fdc ={ > .name = "fdc", > .version_id = 2, > @@ -1961,6 +1969,14 @@ static SysBusDeviceInfo sysbus_fdc_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_sysbus_fdc); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static SysBusDeviceInfo sun4m_fdc_info = { > .init = sun4m_fdc_init1, > .qdev.name = "SUNW,fdtwo", > diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c > index 85c8c3c..67603a9 100644 > --- a/hw/fw_cfg.c > +++ b/hw/fw_cfg.c > @@ -399,6 +399,14 @@ static SysBusDeviceInfo fw_cfg_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_fw_cfg); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void fw_cfg_register_devices(void) > { > sysbus_register_withprop(&fw_cfg_info); > diff --git a/hw/gus.c b/hw/gus.c > index ff9e7c7..8e35ffb 100644 > --- a/hw/gus.c > +++ b/hw/gus.c > @@ -315,6 +315,14 @@ static ISADeviceInfo gus_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_gus); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void gus_register (void) > { > isa_qdev_register (&gus_info); > diff --git a/hw/hda-audio.c b/hw/hda-audio.c > index c699d6f..f384de6 100644 > --- a/hw/hda-audio.c > +++ b/hw/hda-audio.c > @@ -906,6 +906,14 @@ static HDACodecDeviceInfo hda_audio_info_output = { > .stream = hda_audio_stream, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_hda_audio); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static HDACodecDeviceInfo hda_audio_info_duplex = { > .qdev.name = "hda-duplex", > .qdev.desc = "HDA Audio Codec, duplex", > diff --git a/hw/hpet.c b/hw/hpet.c > index ef9a2a0..9010f45 100644 > --- a/hw/hpet.c > +++ b/hw/hpet.c > @@ -737,6 +737,14 @@ static SysBusDeviceInfo hpet_device_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_hpet); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void hpet_register_device(void) > { > sysbus_register_withprop(&hpet_device_info); > diff --git a/hw/hw.h b/hw/hw.h > index 1b09039..81bbd7a 100644 > --- a/hw/hw.h > +++ b/hw/hw.h > @@ -914,4 +914,7 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, > int required_for_version); > void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, > void *opaque); > + > +void register_vmstate_description(const VMStateDescription *desc); > + > #endif > diff --git a/hw/i2c.c b/hw/i2c.c > index f80d12d..85ae1f9 100644 > --- a/hw/i2c.c > +++ b/hw/i2c.c > @@ -66,6 +66,14 @@ i2c_bus *i2c_init_bus(DeviceState *parent, const char *name) > return bus; > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_i2c_bus); > +} > + > +vmstate_init(init_vmstate_description); > + > void i2c_set_slave_address(i2c_slave *dev, uint8_t address) > { > dev->address = address; > diff --git a/hw/i8254.c b/hw/i8254.c > index a9ca9f6..261f860 100644 > --- a/hw/i8254.c > +++ b/hw/i8254.c > @@ -539,6 +539,14 @@ static ISADeviceInfo pit_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pit); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pit_register(void) > { > isa_qdev_register(&pit_info); > diff --git a/hw/i8259.c b/hw/i8259.c > index 84d330d..388e145 100644 > --- a/hw/i8259.c > +++ b/hw/i8259.c > @@ -487,6 +487,14 @@ static void pic_init1(int io_addr, int elcr_addr, PicState *s) > qemu_register_reset(pic_reset, s); > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_pic); > +} > + > +vmstate_init(init_vmstate_description); > + > void pic_info(Monitor *mon) > { > int i; > diff --git a/hw/intel-hda.c b/hw/intel-hda.c > index b0b1d12..a32d28d 100644 > --- a/hw/intel-hda.c > +++ b/hw/intel-hda.c > @@ -1283,6 +1283,14 @@ static PCIDeviceInfo intel_hda_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_intel_hda); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void intel_hda_register(void) > { > pci_qdev_register(&intel_hda_info); > diff --git a/hw/ioapic.c b/hw/ioapic.c > index 569327d..8ac6d34 100644 > --- a/hw/ioapic.c > +++ b/hw/ioapic.c > @@ -350,6 +350,14 @@ static SysBusDeviceInfo ioapic_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ioapic); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void ioapic_register_devices(void) > { > sysbus_register_withprop(&ioapic_info); > diff --git a/hw/ioh3420.c b/hw/ioh3420.c > index 95adf09..7b0b801 100644 > --- a/hw/ioh3420.c > +++ b/hw/ioh3420.c > @@ -229,6 +229,14 @@ static PCIDeviceInfo ioh3420_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ioh3420); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void ioh3420_register(void) > { > pci_qdev_register(&ioh3420_info); > diff --git a/hw/kvmclock.c b/hw/kvmclock.c > index b6ceddf..f9c05cd 100644 > --- a/hw/kvmclock.c > +++ b/hw/kvmclock.c > @@ -99,6 +99,14 @@ static SysBusDeviceInfo kvmclock_info = { > .init = kvmclock_init, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&kvmclock_vmsd); > +} > + > +vmstate_init(init_vmstate_description_0); > + > /* Note: Must be called after VCPU initialization. */ > void kvmclock_create(void) > { > diff --git a/hw/lance.c b/hw/lance.c > index ddb1cbb..32d81ca 100644 > --- a/hw/lance.c > +++ b/hw/lance.c > @@ -153,6 +153,14 @@ static SysBusDeviceInfo lance_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lance); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lance_register_devices(void) > { > sysbus_register_withprop(&lance_info); > diff --git a/hw/lm32_juart.c b/hw/lm32_juart.c > index fddcf7e..a49308c 100644 > --- a/hw/lm32_juart.c > +++ b/hw/lm32_juart.c > @@ -142,6 +142,14 @@ static SysBusDeviceInfo lm32_juart_info = { > .qdev.reset = juart_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm32_juart); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm32_juart_register(void) > { > sysbus_register_withprop(&lm32_juart_info); > diff --git a/hw/lm32_pic.c b/hw/lm32_pic.c > index 02941a7..de4f310 100644 > --- a/hw/lm32_pic.c > +++ b/hw/lm32_pic.c > @@ -182,6 +182,14 @@ static SysBusDeviceInfo lm32_pic_info = { > .qdev.reset = pic_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm32_pic); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm32_pic_register(void) > { > sysbus_register_withprop(&lm32_pic_info); > diff --git a/hw/lm32_sys.c b/hw/lm32_sys.c > index 427b05f..4c718b7 100644 > --- a/hw/lm32_sys.c > +++ b/hw/lm32_sys.c > @@ -153,6 +153,14 @@ static SysBusDeviceInfo lm32_sys_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm32_sys); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm32_sys_register(void) > { > sysbus_register_withprop(&lm32_sys_info); > diff --git a/hw/lm32_timer.c b/hw/lm32_timer.c > index ed28984..445cfde 100644 > --- a/hw/lm32_timer.c > +++ b/hw/lm32_timer.c > @@ -214,6 +214,14 @@ static SysBusDeviceInfo lm32_timer_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm32_timer); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm32_timer_register(void) > { > sysbus_register_withprop(&lm32_timer_info); > diff --git a/hw/lm32_uart.c b/hw/lm32_uart.c > index e225087..32c6ffd 100644 > --- a/hw/lm32_uart.c > +++ b/hw/lm32_uart.c > @@ -280,6 +280,14 @@ static SysBusDeviceInfo lm32_uart_info = { > .qdev.reset = uart_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm32_uart); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm32_uart_register(void) > { > sysbus_register_withprop(&lm32_uart_info); > diff --git a/hw/lm832x.c b/hw/lm832x.c > index 590a4cc..ac097bd 100644 > --- a/hw/lm832x.c > +++ b/hw/lm832x.c > @@ -504,6 +504,14 @@ static I2CSlaveInfo lm8323_info = { > .send = lm_i2c_tx > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lm_kbd); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lm832x_register_devices(void) > { > i2c_register_slave(&lm8323_info); > diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c > index 84a4992..699261b 100644 > --- a/hw/lsi53c895a.c > +++ b/hw/lsi53c895a.c > @@ -2211,6 +2211,14 @@ static PCIDeviceInfo lsi_info = { > .exit = lsi_scsi_uninit, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_lsi_scsi); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void lsi53c895a_register_devices(void) > { > pci_qdev_register(&lsi_info); > diff --git a/hw/marvell_88w8618_audio.c b/hw/marvell_88w8618_audio.c > index 3eff925..25437ea 100644 > --- a/hw/marvell_88w8618_audio.c > +++ b/hw/marvell_88w8618_audio.c > @@ -291,6 +291,14 @@ static SysBusDeviceInfo mv88w8618_audio_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&mv88w8618_audio_vmsd); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void mv88w8618_register_devices(void) > { > sysbus_register_withprop(&mv88w8618_audio_info); > diff --git a/hw/max7310.c b/hw/max7310.c > index c1bdb2e..12b8769 100644 > --- a/hw/max7310.c > +++ b/hw/max7310.c > @@ -196,6 +196,14 @@ static I2CSlaveInfo max7310_info = { > .send = max7310_tx > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_max7310); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void max7310_register_devices(void) > { > i2c_register_slave(&max7310_info); > diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c > index 1c9a706..7b80c18 100644 > --- a/hw/mc146818rtc.c > +++ b/hw/mc146818rtc.c > @@ -650,6 +650,14 @@ static ISADeviceInfo mc146818rtc_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_rtc); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void mc146818rtc_register(void) > { > isa_qdev_register(&mc146818rtc_info); > diff --git a/hw/mst_fpga.c b/hw/mst_fpga.c > index a04355c..c5111b9 100644 > --- a/hw/mst_fpga.c > +++ b/hw/mst_fpga.c > @@ -248,6 +248,14 @@ static SysBusDeviceInfo mst_fpga_info = { > .qdev.vmsd = &vmstate_mst_fpga_regs, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_mst_fpga_regs); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void mst_fpga_register(void) > { > sysbus_register_withprop(&mst_fpga_info); > diff --git a/hw/musicpal.c b/hw/musicpal.c > index d98aa8d..773b93c 100644 > --- a/hw/musicpal.c > +++ b/hw/musicpal.c > @@ -423,6 +423,14 @@ static SysBusDeviceInfo mv88w8618_eth_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&mv88w8618_eth_vmsd); > +} > + > +vmstate_init(init_vmstate_description_0); > + > /* LCD register offsets */ > #define MP_LCD_IRQCTRL 0x180 > #define MP_LCD_IRQSTAT 0x184 > @@ -637,6 +645,14 @@ static SysBusDeviceInfo musicpal_lcd_info = { > .qdev.vmsd = &musicpal_lcd_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&musicpal_lcd_vmsd); > +} > + > +vmstate_init(init_vmstate_description_1); > + > /* PIC register offsets */ > #define MP_PIC_STATUS 0x00 > #define MP_PIC_ENABLE_SET 0x08 > @@ -753,6 +769,14 @@ static SysBusDeviceInfo mv88w8618_pic_info = { > .qdev.vmsd = &mv88w8618_pic_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_2(void) > +{ > + register_vmstate_description(&mv88w8618_pic_vmsd); > +} > + > +vmstate_init(init_vmstate_description_2); > + > /* PIT register offsets */ > #define MP_PIT_TIMER1_LENGTH 0x00 > /* ... */ > @@ -927,6 +951,14 @@ static SysBusDeviceInfo mv88w8618_pit_info = { > .qdev.vmsd = &mv88w8618_pit_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_3(void) > +{ > + register_vmstate_description(&mv88w8618_pit_vmsd); > +} > + > +vmstate_init(init_vmstate_description_3); > + > /* Flash config register offsets */ > #define MP_FLASHCFG_CFGR0 0x04 > > @@ -1004,6 +1036,14 @@ static SysBusDeviceInfo mv88w8618_flashcfg_info = { > .qdev.vmsd = &mv88w8618_flashcfg_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_4(void) > +{ > + register_vmstate_description(&mv88w8618_flashcfg_vmsd); > +} > + > +vmstate_init(init_vmstate_description_4); > + > /* Misc register offsets */ > #define MP_MISC_BOARD_REVISION 0x18 > > @@ -1335,6 +1375,14 @@ static SysBusDeviceInfo musicpal_gpio_info = { > .qdev.vmsd = &musicpal_gpio_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_5(void) > +{ > + register_vmstate_description(&musicpal_gpio_vmsd); > +} > + > +vmstate_init(init_vmstate_description_5); > + > /* Keyboard codes & masks */ > #define KEY_RELEASED 0x80 > #define KEY_CODE 0x7f > @@ -1478,6 +1526,14 @@ static SysBusDeviceInfo musicpal_key_info = { > .qdev.vmsd = &musicpal_key_vmsd, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_6(void) > +{ > + register_vmstate_description(&musicpal_key_vmsd); > +} > + > +vmstate_init(init_vmstate_description_6); > + > static struct arm_boot_info musicpal_binfo = { > .loader_start = 0x0, > .board_id = 0x20e, > diff --git a/hw/ne2000.c b/hw/ne2000.c > index 5966359..270578b 100644 > --- a/hw/ne2000.c > +++ b/hw/ne2000.c > @@ -773,6 +773,14 @@ static PCIDeviceInfo ne2000_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pci_ne2000); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void ne2000_register_devices(void) > { > pci_qdev_register(&ne2000_info); > diff --git a/hw/pc.c b/hw/pc.c > index 6939c04..5211b29 100644 > --- a/hw/pc.c > +++ b/hw/pc.c > @@ -497,6 +497,14 @@ static ISADeviceInfo port92_info = { > .init = port92_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_port92_isa); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void port92_register(void) > { > isa_qdev_register(&port92_info); > diff --git a/hw/pci.c b/hw/pci.c > index 8b76cea..50b9a14 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -269,6 +269,14 @@ void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, > vmstate_register(NULL, -1, &vmstate_pcibus, bus); > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_pcibus); > +} > + > +vmstate_init(init_vmstate_description); > + > PCIBus *pci_bus_new(DeviceState *parent, const char *name, int devfn_min) > { > PCIBus *bus; > diff --git a/hw/pckbd.c b/hw/pckbd.c > index ae65c04..027f69e 100644 > --- a/hw/pckbd.c > +++ b/hw/pckbd.c > @@ -433,6 +433,14 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, > qemu_register_reset(kbd_reset, s); > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_kbd); > +} > + > +vmstate_init(init_vmstate_description); > + > typedef struct ISAKBDState { > ISADevice dev; > KBDState kbd; > @@ -492,6 +500,14 @@ static ISADeviceInfo i8042_info = { > .init = i8042_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_kbd_isa); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void i8042_register(void) > { > isa_qdev_register(&i8042_info); > diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c > index 339a401..d3c2738 100644 > --- a/hw/pcnet-pci.c > +++ b/hw/pcnet-pci.c > @@ -338,6 +338,14 @@ static PCIDeviceInfo pcnet_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pci_pcnet); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pci_pcnet_register_devices(void) > { > pci_qdev_register(&pcnet_info); > diff --git a/hw/piix_pci.c b/hw/piix_pci.c > index 358da58..1e5f379 100644 > --- a/hw/piix_pci.c > +++ b/hw/piix_pci.c > @@ -364,6 +364,14 @@ static PCIDeviceInfo i440fx_info[] = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_piix3); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo i440fx_pcihost_info = { > .init = i440fx_pcihost_initfn, > .qdev.name = "i440FX-pcihost", > diff --git a/hw/pl031.c b/hw/pl031.c > index 8c2f9d0..5372e21 100644 > --- a/hw/pl031.c > +++ b/hw/pl031.c > @@ -229,6 +229,14 @@ static SysBusDeviceInfo pl031_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pl031); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pl031_register_devices(void) > { > sysbus_register_withprop(&pl031_info); > diff --git a/hw/pl050.c b/hw/pl050.c > index b155cc0..4c2b279 100644 > --- a/hw/pl050.c > +++ b/hw/pl050.c > @@ -171,6 +171,14 @@ static SysBusDeviceInfo pl050_kbd_info = { > .qdev.vmsd = &vmstate_pl050, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pl050); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo pl050_mouse_info = { > .init = pl050_init_mouse, > .qdev.name = "pl050_mouse", > @@ -178,6 +186,14 @@ static SysBusDeviceInfo pl050_mouse_info = { > .qdev.vmsd = &vmstate_pl050, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_pl050); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void pl050_register_devices(void) > { > sysbus_register_withprop(&pl050_kbd_info); > diff --git a/hw/pl080.c b/hw/pl080.c > index 901f04a..1c6198b 100644 > --- a/hw/pl080.c > +++ b/hw/pl080.c > @@ -388,6 +388,14 @@ static SysBusDeviceInfo pl080_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pl080); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo pl081_info = { > .init = pl081_init, > .qdev.name = "pl081", > @@ -396,6 +404,14 @@ static SysBusDeviceInfo pl081_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_pl080); > +} > + > +vmstate_init(init_vmstate_description_1); > + > /* The PL080 and PL081 are the same except for the number of channels > they implement (8 and 2 respectively). */ > static void pl080_register_devices(void) > diff --git a/hw/pl110.c b/hw/pl110.c > index 06d2dfa..9073a40 100644 > --- a/hw/pl110.c > +++ b/hw/pl110.c > @@ -405,6 +405,14 @@ static SysBusDeviceInfo pl110_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pl110); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo pl110_versatile_info = { > .init = pl110_versatile_init, > .qdev.name = "pl110_versatile", > @@ -413,6 +421,14 @@ static SysBusDeviceInfo pl110_versatile_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_pl110); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void pl110_register_devices(void) > { > sysbus_register_withprop(&pl110_info); > diff --git a/hw/pl190.c b/hw/pl190.c > index 75f2ba1..a03db5c 100644 > --- a/hw/pl190.c > +++ b/hw/pl190.c > @@ -270,6 +270,14 @@ static SysBusDeviceInfo pl190_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pl190); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pl190_register_devices(void) > { > sysbus_register_withprop(&pl190_info); > diff --git a/hw/ps2.c b/hw/ps2.c > index 91b73e0..c77d5fc 100644 > --- a/hw/ps2.c > +++ b/hw/ps2.c > @@ -615,6 +615,14 @@ void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) > return s; > } > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ps2_keyboard); > +} > + > +vmstate_init(init_vmstate_description_0); > + > void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) > { > PS2MouseState *s = (PS2MouseState *)qemu_mallocz(sizeof(PS2MouseState)); > @@ -626,3 +634,11 @@ void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) > qemu_register_reset(ps2_mouse_reset, s); > return s; > } > + > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_ps2_mouse); > +} > + > +vmstate_init(init_vmstate_description_1); > diff --git a/hw/pxa2xx.c b/hw/pxa2xx.c > index 9b95e2c..d8f2943 100644 > --- a/hw/pxa2xx.c > +++ b/hw/pxa2xx.c > @@ -1293,6 +1293,14 @@ static SysBusDeviceInfo pxa2xx_rtc_sysbus_info = { > .qdev.vmsd = &vmstate_pxa2xx_rtc_regs, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_rtc_regs); > +} > + > +vmstate_init(init_vmstate_description_0); > + > /* I2C Interface */ > typedef struct { > i2c_slave i2c; > @@ -1595,6 +1603,14 @@ static SysBusDeviceInfo pxa2xx_i2c_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_i2c); > +} > + > +vmstate_init(init_vmstate_description_1); > + > /* PXA Inter-IC Sound Controller */ > static void pxa2xx_i2s_reset(PXA2xxI2SState *i2s) > { > diff --git a/hw/pxa2xx_dma.c b/hw/pxa2xx_dma.c > index a67498b..6d5fb56 100644 > --- a/hw/pxa2xx_dma.c > +++ b/hw/pxa2xx_dma.c > @@ -561,6 +561,14 @@ static SysBusDeviceInfo pxa2xx_dma_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_dma); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pxa2xx_dma_register(void) > { > sysbus_register_withprop(&pxa2xx_dma_info); > diff --git a/hw/pxa2xx_pic.c b/hw/pxa2xx_pic.c > index e9a5361..fa6abba 100644 > --- a/hw/pxa2xx_pic.c > +++ b/hw/pxa2xx_pic.c > @@ -309,6 +309,14 @@ static SysBusDeviceInfo pxa2xx_pic_info = { > .qdev.vmsd = &vmstate_pxa2xx_pic_regs, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_pic_regs); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void pxa2xx_pic_register(void) > { > sysbus_register_withprop(&pxa2xx_pic_info); > diff --git a/hw/pxa2xx_timer.c b/hw/pxa2xx_timer.c > index f777a21..db0603e 100644 > --- a/hw/pxa2xx_timer.c > +++ b/hw/pxa2xx_timer.c > @@ -496,6 +496,14 @@ static SysBusDeviceInfo pxa25x_timer_dev_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_timer_regs); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo pxa27x_timer_dev_info = { > .init = pxa2xx_timer_init, > .qdev.name = "pxa27x-timer", > @@ -510,6 +518,14 @@ static SysBusDeviceInfo pxa27x_timer_dev_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_pxa2xx_timer_regs); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void pxa2xx_timer_register(void) > { > sysbus_register_withprop(&pxa25x_timer_dev_info); > diff --git a/hw/qxl.c b/hw/qxl.c > index fe4212b..2a0d090 100644 > --- a/hw/qxl.c > +++ b/hw/qxl.c > @@ -1504,6 +1504,14 @@ static PCIDeviceInfo qxl_info_primary = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&qxl_vmstate); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static PCIDeviceInfo qxl_info_secondary = { > .qdev.name = "qxl", > .qdev.desc = "Spice QXL GPU (secondary)", > @@ -1522,6 +1530,14 @@ static PCIDeviceInfo qxl_info_secondary = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&qxl_vmstate); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void qxl_register(void) > { > pci_qdev_register(&qxl_info_primary); > diff --git a/hw/rtl8139.c b/hw/rtl8139.c > index 0ba51fc..3b2f61e 100644 > --- a/hw/rtl8139.c > +++ b/hw/rtl8139.c > @@ -3269,6 +3269,14 @@ static const VMStateDescription vmstate_rtl8139 = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_rtl8139_hotplug_ready); > +} > + > +vmstate_init(init_vmstate_description_0); > + > /***********************************************************/ > /* PCI RTL8139 definitions */ > > @@ -3422,6 +3430,14 @@ static PCIDeviceInfo rtl8139_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_rtl8139); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void rtl8139_register_devices(void) > { > pci_qdev_register(&rtl8139_info); > diff --git a/hw/sb16.c b/hw/sb16.c > index a76df1b..c98546a 100644 > --- a/hw/sb16.c > +++ b/hw/sb16.c > @@ -1413,6 +1413,14 @@ static ISADeviceInfo sb16_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_sb16); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void sb16_register (void) > { > isa_qdev_register (&sb16_info); > diff --git a/hw/sbi.c b/hw/sbi.c > index 53f66f2..53a236c 100644 > --- a/hw/sbi.c > +++ b/hw/sbi.c > @@ -140,6 +140,14 @@ static SysBusDeviceInfo sbi_info = { > .qdev.reset = sbi_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_sbi); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void sbi_register_devices(void) > { > sysbus_register_withprop(&sbi_info); > diff --git a/hw/serial.c b/hw/serial.c > index 0ee61dd..c7ba97c 100644 > --- a/hw/serial.c > +++ b/hw/serial.c > @@ -804,8 +804,6 @@ SerialState *serial_init(int base, qemu_irq irq, int baudbase, > s->chr = chr; > serial_init_core(s); > > - vmstate_register(NULL, base, &vmstate_serial, s); > - > register_ioport_write(base, 8, 1, serial_ioport_write, s); > register_ioport_read(base, 8, 1, serial_ioport_read, s); > return s; > @@ -971,6 +969,14 @@ static ISADeviceInfo serial_isa_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_isa_serial); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void serial_register_devices(void) > { > isa_qdev_register(&serial_isa_info); > diff --git a/hw/slavio_intctl.c b/hw/slavio_intctl.c > index a83e5b8..8b3bdb5 100644 > --- a/hw/slavio_intctl.c > +++ b/hw/slavio_intctl.c > @@ -455,6 +455,14 @@ static SysBusDeviceInfo slavio_intctl_info = { > .qdev.reset = slavio_intctl_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_intctl); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void slavio_intctl_register_devices(void) > { > sysbus_register_withprop(&slavio_intctl_info); > diff --git a/hw/slavio_misc.c b/hw/slavio_misc.c > index 198360d..0b415b9 100644 > --- a/hw/slavio_misc.c > +++ b/hw/slavio_misc.c > @@ -484,6 +484,14 @@ static SysBusDeviceInfo slavio_misc_info = { > .qdev.reset = slavio_misc_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_misc); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static SysBusDeviceInfo apc_info = { > .init = apc_init1, > .qdev.name = "apc", > diff --git a/hw/slavio_timer.c b/hw/slavio_timer.c > index 5511313..0f95113 100644 > --- a/hw/slavio_timer.c > +++ b/hw/slavio_timer.c > @@ -416,6 +416,14 @@ static SysBusDeviceInfo slavio_timer_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_slavio_timer); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void slavio_timer_register_devices(void) > { > sysbus_register_withprop(&slavio_timer_info); > diff --git a/hw/smc91c111.c b/hw/smc91c111.c > index dafea5c..63b4507 100644 > --- a/hw/smc91c111.c > +++ b/hw/smc91c111.c > @@ -774,6 +774,14 @@ static SysBusDeviceInfo smc91c111_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_smc91c111); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void smc91c111_register_devices(void) > { > sysbus_register_withprop(&smc91c111_info); > diff --git a/hw/sparc32_dma.c b/hw/sparc32_dma.c > index e75694b..d8be398 100644 > --- a/hw/sparc32_dma.c > +++ b/hw/sparc32_dma.c > @@ -297,6 +297,14 @@ static SysBusDeviceInfo sparc32_dma_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_dma); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void sparc32_dma_register_devices(void) > { > sysbus_register_withprop(&sparc32_dma_info); > diff --git a/hw/spitz.c b/hw/spitz.c > index 006f7a9..1078486 100644 > --- a/hw/spitz.c > +++ b/hw/spitz.c > @@ -1043,6 +1043,14 @@ static SysBusDeviceInfo sl_nand_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_sl_nand_info); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static VMStateDescription vmstate_spitz_kbd = { > .name = "spitz-keyboard", > .version_id = 1, > @@ -1067,6 +1075,14 @@ static SysBusDeviceInfo spitz_keyboard_info = { > }, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_spitz_kbd); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static const VMStateDescription vmstate_corgi_ssp_regs = { > .name = "corgi-ssp", > .version_id = 1, > @@ -1086,6 +1102,14 @@ static SSISlaveInfo corgi_ssp_info = { > .transfer = corgi_ssp_transfer > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_2(void) > +{ > + register_vmstate_description(&vmstate_corgi_ssp_regs); > +} > + > +vmstate_init(init_vmstate_description_2); > + > static const VMStateDescription vmstate_spitz_lcdtg_regs = { > .name = "spitz-lcdtg", > .version_id = 1, > @@ -1106,6 +1130,14 @@ static SSISlaveInfo spitz_lcdtg_info = { > .transfer = spitz_lcdtg_transfer > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_3(void) > +{ > + register_vmstate_description(&vmstate_spitz_lcdtg_regs); > +} > + > +vmstate_init(init_vmstate_description_3); > + > static void spitz_register_devices(void) > { > ssi_register_slave(&corgi_ssp_info); > diff --git a/hw/ssd0303.c b/hw/ssd0303.c > index 108c068..dc3012d 100644 > --- a/hw/ssd0303.c > +++ b/hw/ssd0303.c > @@ -304,6 +304,14 @@ static I2CSlaveInfo ssd0303_info = { > .send = ssd0303_send > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ssd0303); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void ssd0303_register_devices(void) > { > i2c_register_slave(&ssd0303_info); > diff --git a/hw/sun4c_intctl.c b/hw/sun4c_intctl.c > index 5c7fdef..025ea92 100644 > --- a/hw/sun4c_intctl.c > +++ b/hw/sun4c_intctl.c > @@ -216,6 +216,14 @@ static SysBusDeviceInfo sun4c_intctl_info = { > .qdev.reset = sun4c_intctl_reset, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_sun4c_intctl); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void sun4c_intctl_register_devices(void) > { > sysbus_register_withprop(&sun4c_intctl_info); > diff --git a/hw/sun4m_iommu.c b/hw/sun4m_iommu.c > index bba69ee..bb24412 100644 > --- a/hw/sun4m_iommu.c > +++ b/hw/sun4m_iommu.c > @@ -370,6 +370,14 @@ static SysBusDeviceInfo iommu_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_iommu); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void iommu_register_devices(void) > { > sysbus_register_withprop(&iommu_info); > diff --git a/hw/tcx.c b/hw/tcx.c > index 0e32830..40a771b 100644 > --- a/hw/tcx.c > +++ b/hw/tcx.c > @@ -643,6 +643,14 @@ static SysBusDeviceInfo tcx_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_tcx); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void tcx_register_devices(void) > { > sysbus_register_withprop(&tcx_info); > diff --git a/hw/tmp105.c b/hw/tmp105.c > index f7e6f2b..9d3325c 100644 > --- a/hw/tmp105.c > +++ b/hw/tmp105.c > @@ -236,6 +236,14 @@ static I2CSlaveInfo tmp105_info = { > .send = tmp105_tx > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_tmp105); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void tmp105_register_devices(void) > { > i2c_register_slave(&tmp105_info); > diff --git a/hw/twl92230.c b/hw/twl92230.c > index 8e74acc..2b570a6 100644 > --- a/hw/twl92230.c > +++ b/hw/twl92230.c > @@ -868,6 +868,14 @@ static I2CSlaveInfo twl92230_info = { > .send = menelaus_tx > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_menelaus); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void twl92230_register_devices(void) > { > i2c_register_slave(&twl92230_info); > diff --git a/hw/usb-hid.c b/hw/usb-hid.c > index c25362c..e8fff11 100644 > --- a/hw/usb-hid.c > +++ b/hw/usb-hid.c > @@ -999,6 +999,14 @@ static struct USBDeviceInfo hid_info[] = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_usb_kbd); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void usb_hid_register_devices(void) > { > usb_qdev_register_many(hid_info); > diff --git a/hw/usb-hub.c b/hw/usb-hub.c > index 3dd31ba..dfac0ed 100644 > --- a/hw/usb-hub.c > +++ b/hw/usb-hub.c > @@ -583,6 +583,14 @@ static struct USBDeviceInfo hub_info = { > .handle_destroy = usb_hub_handle_destroy, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_usb_hub); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void usb_hub_register_devices(void) > { > usb_qdev_register(&hub_info); > diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c > index 346db3e..bc8fc5b 100644 > --- a/hw/usb-uhci.c > +++ b/hw/usb-uhci.c > @@ -1207,6 +1207,14 @@ static PCIDeviceInfo uhci_info[] = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_uhci); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void uhci_register(void) > { > pci_qdev_register_many(uhci_info); > diff --git a/hw/versatilepb.c b/hw/versatilepb.c > index 9f1bfcf..659359c 100644 > --- a/hw/versatilepb.c > +++ b/hw/versatilepb.c > @@ -354,6 +354,14 @@ static SysBusDeviceInfo vpb_sic_info = { > .qdev.no_user = 1, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_vpb_sic); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void versatilepb_register_devices(void) > { > sysbus_register_withprop(&vpb_sic_info); > diff --git a/hw/vga-isa.c b/hw/vga-isa.c > index fde0d56..5f1ef76 100644 > --- a/hw/vga-isa.c > +++ b/hw/vga-isa.c > @@ -81,6 +81,14 @@ static ISADeviceInfo vga_info = { > .init = vga_initfn, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_vga_common); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void vga_register(void) > { > isa_qdev_register(&vga_info); > diff --git a/hw/vga-pci.c b/hw/vga-pci.c > index ce9ec45..c91739f 100644 > --- a/hw/vga-pci.c > +++ b/hw/vga-pci.c > @@ -116,6 +116,14 @@ static PCIDeviceInfo vga_info = { > .romfile = "vgabios-stdvga.bin", > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_vga_pci); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void vga_register(void) > { > pci_qdev_register(&vga_info); > diff --git a/hw/vmmouse.c b/hw/vmmouse.c > index 1113f33..f2de7d8 100644 > --- a/hw/vmmouse.c > +++ b/hw/vmmouse.c > @@ -282,6 +282,14 @@ static ISADeviceInfo vmmouse_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_vmmouse); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void vmmouse_dev_register(void) > { > isa_qdev_register(&vmmouse_info); > diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c > index 4656767..106c9b4 100644 > --- a/hw/vmware_vga.c > +++ b/hw/vmware_vga.c > @@ -1318,6 +1318,14 @@ static PCIDeviceInfo vmsvga_info = { > .romfile = "vgabios-vmware.bin", > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_vmware_vga); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void vmsvga_register(void) > { > pci_qdev_register(&vmsvga_info); > diff --git a/hw/vt82c686.c b/hw/vt82c686.c > index 818460d..62b8c63 100644 > --- a/hw/vt82c686.c > +++ b/hw/vt82c686.c > @@ -522,6 +522,14 @@ static PCIDeviceInfo via_pm_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_acpi); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void vt82c686b_pm_register(void) > { > pci_qdev_register(&via_pm_info); > @@ -587,6 +595,14 @@ static PCIDeviceInfo via_info = { > .config_write = vt82c686b_write_config, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_1(void) > +{ > + register_vmstate_description(&vmstate_via); > +} > + > +vmstate_init(init_vmstate_description_1); > + > static void vt82c686b_register(void) > { > pci_qdev_register(&via_info); > diff --git a/hw/wdt_i6300esb.c b/hw/wdt_i6300esb.c > index 4a7fba7..99f3c9b 100644 > --- a/hw/wdt_i6300esb.c > +++ b/hw/wdt_i6300esb.c > @@ -439,6 +439,14 @@ static PCIDeviceInfo i6300esb_info = { > .init = i6300esb_init, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_i6300esb); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void i6300esb_register_devices(void) > { > watchdog_add_model(&model); > diff --git a/hw/wdt_ib700.c b/hw/wdt_ib700.c > index 81f22d0..4cd24b9 100644 > --- a/hw/wdt_ib700.c > +++ b/hw/wdt_ib700.c > @@ -128,6 +128,14 @@ static ISADeviceInfo wdt_ib700_info = { > .init = wdt_ib700_init, > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_ib700); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void wdt_ib700_register_devices(void) > { > watchdog_add_model(&model); > diff --git a/hw/wm8750.c b/hw/wm8750.c > index c9c6744..dc46577 100644 > --- a/hw/wm8750.c > +++ b/hw/wm8750.c > @@ -699,6 +699,14 @@ static I2CSlaveInfo wm8750_info = { > .send = wm8750_tx > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_wm8750); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void wm8750_register_devices(void) > { > i2c_register_slave(&wm8750_info); > diff --git a/hw/xio3130_downstream.c b/hw/xio3130_downstream.c > index 5aa6a6b..f6fd902 100644 > --- a/hw/xio3130_downstream.c > +++ b/hw/xio3130_downstream.c > @@ -194,6 +194,14 @@ static PCIDeviceInfo xio3130_downstream_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_xio3130_downstream); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void xio3130_downstream_register(void) > { > pci_qdev_register(&xio3130_downstream_info); > diff --git a/hw/xio3130_upstream.c b/hw/xio3130_upstream.c > index a7640f5..0b503ee 100644 > --- a/hw/xio3130_upstream.c > +++ b/hw/xio3130_upstream.c > @@ -168,6 +168,14 @@ static PCIDeviceInfo xio3130_upstream_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_xio3130_upstream); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void xio3130_upstream_register(void) > { > pci_qdev_register(&xio3130_upstream_info); > diff --git a/hw/zaurus.c b/hw/zaurus.c > index c24aeb5..6ce61af 100644 > --- a/hw/zaurus.c > +++ b/hw/zaurus.c > @@ -236,6 +236,14 @@ static SysBusDeviceInfo scoop_sysbus_info = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description_0(void) > +{ > + register_vmstate_description(&vmstate_scoop_regs); > +} > + > +vmstate_init(init_vmstate_description_0); > + > static void scoop_register(void) > { > sysbus_register_withprop(&scoop_sysbus_info); > diff --git a/module.h b/module.h > index 9263f1c..70c33a5 100644 > --- a/module.h > +++ b/module.h > @@ -24,12 +24,14 @@ typedef enum { > MODULE_INIT_BLOCK, > MODULE_INIT_DEVICE, > MODULE_INIT_MACHINE, > + MODULE_INIT_VMSTATE, > MODULE_INIT_MAX > } module_init_type; > > #define block_init(function) module_init(function, MODULE_INIT_BLOCK) > #define device_init(function) module_init(function, MODULE_INIT_DEVICE) > #define machine_init(function) module_init(function, MODULE_INIT_MACHINE) > +#define vmstate_init(function) module_init(function, MODULE_INIT_MACHINE) > > void register_module_init(void (*fn)(void), module_init_type type); > > diff --git a/savevm.c b/savevm.c > index 03fce62..4a37917 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -1285,6 +1285,10 @@ void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, > } > } > > +void register_vmstate_description(const VMStateDescription *desc) > +{ > +} > + > static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, > void *opaque); > static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd, > diff --git a/target-i386/machine.c b/target-i386/machine.c > index d78eceb..3a40520 100644 > --- a/target-i386/machine.c > +++ b/target-i386/machine.c > @@ -504,6 +504,14 @@ static const VMStateDescription vmstate_cpu = { > } > }; > > +/* Register the VMState Description to support VMState introspection */ > +static void init_vmstate_description(void) > +{ > + register_vmstate_description(&vmstate_cpu); > +} > + > +vmstate_init(init_vmstate_description); > + > void cpu_save(QEMUFile *f, void *opaque) > { > vmstate_save_state(f, &vmstate_cpu, opaque); > -- > 1.7.0.4 > >