Re: [libvirt] [PATCH 08/17] conf: give each hostdevdef a parent pointer

2012-03-02 Thread Eric Blake
On 02/28/2012 01:14 PM, Laine Stump wrote:
 The parent can be any type of device. It defaults to type=none, and a
 NULL pointer. The intent is that if a hostdevdef is contained in the
 def for a higher level device (e.g. virDomainNetDef), hostdev-parent
 will point to the higher level device, and type will be set to that
 type of device. This way, during attach and detach of the device,
 parent can be checked, and appropriate callouts made to do higher
 level device initialization (e.g. setting MAC address).
 
 Also, although these hostdevs with parents will be added to a domain's
 hostdevs list, they will be treated slightly differently when
 traversing the list, e.g. virDomainHostdefDefFree for a hostdev that
 has a parent doesn't need to be called (and will be a NOP); it will
 simply be removed from the list (since the parent device object is in
 its own type-specific list, and will be freed from there).
 ---
 V2: unchanged from V1
 
  src/conf/domain_conf.c |   12 ++--
  src/conf/domain_conf.h |1 +
  2 files changed, 11 insertions(+), 2 deletions(-)

ACK.

-- 
Eric Blake   ebl...@redhat.com+1-919-301-3266
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH 08/17] conf: give each hostdevdef a parent pointer

2012-02-28 Thread Laine Stump
The parent can be any type of device. It defaults to type=none, and a
NULL pointer. The intent is that if a hostdevdef is contained in the
def for a higher level device (e.g. virDomainNetDef), hostdev-parent
will point to the higher level device, and type will be set to that
type of device. This way, during attach and detach of the device,
parent can be checked, and appropriate callouts made to do higher
level device initialization (e.g. setting MAC address).

Also, although these hostdevs with parents will be added to a domain's
hostdevs list, they will be treated slightly differently when
traversing the list, e.g. virDomainHostdefDefFree for a hostdev that
has a parent doesn't need to be called (and will be a NOP); it will
simply be removed from the list (since the parent device object is in
its own type-specific list, and will be freed from there).
---
V2: unchanged from V1

 src/conf/domain_conf.c |   12 ++--
 src/conf/domain_conf.h |1 +
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6d7c148..93fd8d7 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1328,7 +1328,11 @@ void virDomainHostdevDefClear(virDomainHostdevDefPtr def)
  * such resource is the virDomainDeviceInfo.
  */
 
-virDomainDeviceInfoFree(def-info);
+/* If there is a parent device object, it will handle freeing
+ * def-info.
+ */
+if (def-parent.type == VIR_DOMAIN_DEVICE_NONE)
+virDomainDeviceInfoFree(def-info);
 }
 
 void virDomainHostdevDefFree(virDomainHostdevDefPtr def)
@@ -1339,7 +1343,11 @@ void virDomainHostdevDefFree(virDomainHostdevDefPtr def)
 /* free all subordinate objects */
 virDomainHostdevDefClear(def);
 
-VIR_FREE(def);
+/* If there is a parent device object, it will handle freeing
+ * the memory.
+ */
+if (def-parent.type == VIR_DOMAIN_DEVICE_NONE)
+VIR_FREE(def);
 }
 
 void virDomainHubDefFree(virDomainHubDefPtr def)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7815ee7..efb86bc 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -356,6 +356,7 @@ enum virDomainHostdevSubsysType {
 
 /* basic device for direct passthrough */
 struct _virDomainHostdevDef {
+virDomainDeviceDef parent; /* higher level Def containing this */
 int mode; /* enum virDomainHostdevMode */
 unsigned int managed : 1;
 union {
-- 
1.7.7.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list