qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 02/11] vmstate: register all VMStateDescriptions


From: Alon Levy
Subject: Re: [Qemu-devel] [PATCH 02/11] vmstate: register all VMStateDescriptions
Date: Wed, 23 Mar 2011 11:00:38 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

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 <address@hidden>
> ---
>  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
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]