qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 00/23] New VMState table based load/save infrastruct


From: Juan Quintela
Subject: [Qemu-devel] [PATCH 00/23] New VMState table based load/save infrastructure
Date: Thu, 20 Aug 2009 19:42:18 +0200

This this is 3rd version of the series, I changed:

v3:
* Patches are again on top of my loadvm changes, as they use the new
  loadvm functionality.
* Add size paramente to VMState field, it is needed for buffers
* Redo all the STRUCT and ARRAY support. It makes easier to have combinations of
  things.
* Once there created:
  * POINTER: field is a pointer to the real thing
  * VARRAY: This is one array whose size is another field
  * BUFFER: A traditional array. So far it is only for static sized buffers.
            No need for variable sized buffers yet.
* PCIBUS ported to new API
* PCIDevice ported to new API. Here is an example of how to create your own
  function in the config array.  Basically PCI wants to read the array
  and sanitize it before doing anything else with it.
* Add run_after_load() callback.
* Port PS2 devices
* Port ACPI (uses PCIDevice)
* Put const left, right, and center. 

ToDo:
- still not optional test function.  Notice that this can be done
  with a local VMStateInfo struct.  I still think that this is not
  needed.
- Start/end functions: We have run_after_load(), problaby will ned some more
  uhci_save() calls uhci_async_cancel_all() before saving its state.
- Better/Different design for containers?  Just now we can have things like:
  an array of structs pointed from a pointer of dynamic size.
  This means having to create a new a new VMSTATE_FOO() construct.
  Any idea about how to improve this?  I would like something that is 
componable:
  ARRAY(POINTER(INT32(field, struct), extra), extra2) or somesuch.
  Haven't found a good way to abuse cpp to get this.
- I tested that it loads qemu/master images. It can save/load new ones.
- Next try will be to convert the virtio-* drivers. Basically everything else
  should work with current abstractions.  virtion_load() is a mess, but I think
  that I can get it working with before/after loading functions.
- If you know of any device that does strange things with state, please, let me
  know, to start for there.
- i440fx_load()
  Can we put pci_irq_levels[] array in any struct?  This is the only driver
  that I have found that uses a global variable.  Gerd, can you take a look?
  It is not possible to have the PCIDevice struct inside a PIIXDevice or 
similar?

Comments, suggestions?

v2:
* Add _V() constructors.  We almost never need the version field.
* Add const to VMStateDescription uses (BlueWirl suggestion)
* Add const to VMStateInfo uses
* Remove VMStateInfo parameter from get/put callbacks. Not needed.
* Load of old versions is done with old foo_load function (Kraxel suggestion)
* Add struct support
* Move i8254 to new infrastructure, to test struct support
* I removed the autostart patches, updated version sent to list

i8254 note:
There is only one timer in the 1st channel, in the other two channels,
the timer is not created ever, this is the reason why I sent the irq_timer
not in the irq channels.

Juan Quintela (23):
  move useful type definitons to osdep.h
  split do_loadvm() into do_loadvm() and load_vmstate()
  move do_loadvm() to monitor.c
  make load_vmstate() return errors
  Use return value from load_state() call back
  Add vmstate_load() and vmstate_save() functions
  New VMstate save/load infrastructure
  Add VMState support for pointers
  Add VMState support for arrays
  Port apic to new VMState design
  Add VMState support for structs
  Add VMState support for arrays of structs
  Port i8254 to new VMState design
  Add VMState support for int32_t check value
  Add VMState support for variable sized arrays
  Port PCI Bus to VMState design
  Add VMState support for static sized buffers (uint_8)
  Port PS2 devices to VMState design
  Add VMState support for int32_t check value
  Add version_id to PCIDevice.
  Port PCIDevice state to VMState
  Add VMState support to run a function after load
  Port ACPI to VMState

 hw/acpi.c  |   55 +++-----
 hw/apic.c  |   67 +++++-----
 hw/hw.h    |  234 ++++++++++++++++++++++++++++++++
 hw/i8254.c |   66 +++++----
 hw/pci.c   |  107 ++++++++-------
 hw/pci.h   |    2 +
 hw/ps2.c   |  119 +++++++---------
 hw/qdev.h  |    3 -
 monitor.c  |   10 ++
 osdep.h    |    3 +
 savevm.c   |  434 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 sysemu.h   |    2 +-
 vl.c       |    7 +-
 13 files changed, 869 insertions(+), 240 deletions(-)





reply via email to

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