On Thu, Feb 07, 2013 at 12:56:45PM -0500, Stefan Berger wrote:
On 02/07/2013 10:12 AM, Daniel P. Berrange wrote:
>On Mon, Feb 04, 2013 at 07:12:37PM -0500, Stefan Berger wrote:
>>Create field in virDomainDeviceInfo structure to hold
>>file descriptor set the device is associated with. Have
>>the number written into the Device Info XML and parsed
>>from the XML.
>>
>>Remember the next-toy use file descriptor set in the QEMU
>>private domain structure.
>>Upon libvirt restart determine the maximum file descriptor
>>set used in the Device Info XML and remember the
>>next-to-use file descriptor set in the QEMU private domain
>>structure.
>>
>>Upon termination of a domain, reset the next-to-use file
>>descriptor set to its initial value '1'.
>>
>>Stefan Berger <stefanb(a)linux.vnet.ibm.com>
>>
>>---
>> src/conf/capabilities.h | 5 ++++-
>> src/conf/domain_conf.c | 20 +++++++++++++++++---
>> src/conf/domain_conf.h | 1 +
>> src/lxc/lxc_domain.c | 3 ++-
>> src/qemu/qemu_domain.c | 23 ++++++++++++++++++++++-
>> src/qemu/qemu_domain.h | 2 ++
>> src/qemu/qemu_process.c | 2 ++
>> 7 files changed, 50 insertions(+), 6 deletions(-)
>I really don't like the fact that we're modifying the virDomainDef
>structs, which are intended to hold static config description, to
>also hold QEMU specific dynamic state. We did this in the past
>before we had the per-driver 'privateData' associated with
>virDomainObjPtr instances.
In these patches we are storing the fdset that's in use by a
particular device in the virDomainDeviceInfo structure and are
persisting that fdset number next to the device's alias into XML
written into /var/run/libvirt/qemu to be able to restore it upon
libvirt restart. Now we would either need a similar per-device
structure in parallel to those virDomainDeviceInfo structures or
connect a QEMU private data structure to that virDomainDeviceInfo
structure for storing the dynamic data and to keep reference back to
the device. Not sure what's the best path ...
Just have a hashtable mapping device alias names -> fd set numbers
in the qemuDomainObjPrivatePtr, and write that out in the QEMU
private XML. There's no need to directly mirror the structs.
This is how the per-device XML in /var/run/libvirt/qemu/xyz.xml looks now:
<serial type='pipe'>
<source path='/tmp/testpipe'/>
<target port='1'/>
<alias name='serial1' fdset='3'/>
</serial>
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|