On Sun, Jun 05, 2011 at 10:10:08AM +0200, Matthias Bolte wrote: > Annotate the ESX device driver dummy. > > Refactor the udev and hal device driver strcuts to match the > common annotation pattern. > --- > > This is post-0.9.2. > > docs/hvsupport.pl | 22 +++++++++++++---- > src/esx/esx_device_monitor.c | 15 ++--------- > src/node_device/node_device_driver.c | 45 +++++++++++++--------------------- > src/node_device/node_device_driver.h | 14 +++++++++- > src/node_device/node_device_hal.c | 22 +++++++++++----- > src/node_device/node_device_udev.c | 22 +++++++++++----- > 6 files changed, 79 insertions(+), 61 deletions(-) > > diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl > index 8a0fa7a..b0d1f0f 100755 > --- a/docs/hvsupport.pl > +++ b/docs/hvsupport.pl > @@ -27,7 +27,7 @@ my %groupheaders = ( > my @srcs; > find({ > wanted => sub { > - if (m!$srcdir/.*/\w+_(driver|tmpl)\.c$!) { > + if (m!$srcdir/.*/\w+_(driver|tmpl|monitor|hal|udev)\.c$!) { > push @srcs, $_ if $_ !~ /vbox_driver\.c/; > } > }, no_chdir => 1}, $srcdir); > @@ -142,7 +142,7 @@ open FILE, "<$drivertable" > my %groups; > my $ingrp; > while (defined($line = <FILE>)) { > - if ($line =~ /struct _(vir\w*Driver)/) { > + if ($line =~ /struct _(vir\w*(?:Driver|Monitor))/) { > my $grp = $1; > if ($grp ne "virStateDriver" && > $grp ne "virStreamDriver") { > @@ -150,7 +150,7 @@ while (defined($line = <FILE>)) { > $groups{$ingrp} = { apis => {}, drivers => {} }; > } > } elsif ($ingrp) { > - if ($line =~ /^\s*virDrv(\w+)\s+(\w+);\s*$/) { > + if ($line =~ /^\s*vir(?:Drv|DevMon)(\w+)\s+(\w+);\s*$/) { > my $field = $2; > my $name = $1; > > @@ -159,6 +159,8 @@ while (defined($line = <FILE>)) { > $api = "vir$name"; > } elsif (exists $apis{"virConnect$name"}) { > $api = "virConnect$name"; > + } elsif (exists $apis{"virNode$name"}) { > + $api = "virNode$name"; > } else { > die "driver $name does not have a public API"; > } > @@ -188,7 +190,17 @@ foreach my $src (@srcs) { > $line =~ /^\s*(?:static\s+)?$grp\s+NAME\(\w+\)\s*=\s*{/) { > $ingrp = $grp; > $impl = $src; > - $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; > + > + if ($impl =~ m,.*/node_device_(\w+)\.c,) { > + $impl = $1; > + } else { > + $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; > + } > + > + if ($groups{$ingrp}->{drivers}->{$impl}) { > + die "Group $ingrp already contains $impl"; > + } > + > $groups{$ingrp}->{drivers}->{$impl} = {}; > } > } > @@ -206,7 +218,7 @@ foreach my $src (@srcs) { > die "Driver method for $api is NULL in $src" if $meth eq "NULL"; > > if (!exists($groups{$ingrp}->{apis}->{$api})) { > - die "Found unexpected driver $api in $ingrp\n"; > + die "Found unexpected method $api in $ingrp\n"; > } > > $groups{$ingrp}->{drivers}->{$impl}->{$api} = $vers; > diff --git a/src/esx/esx_device_monitor.c b/src/esx/esx_device_monitor.c > index 3fa63d5..4bc8e7f 100644 > --- a/src/esx/esx_device_monitor.c > +++ b/src/esx/esx_device_monitor.c > @@ -66,18 +66,9 @@ esxDeviceClose(virConnectPtr conn) > > > static virDeviceMonitor esxDeviceMonitor = { > - "ESX", /* name */ > - esxDeviceOpen, /* open */ > - esxDeviceClose, /* close */ > - NULL, /* numOfDevices */ > - NULL, /* listDevices */ > - NULL, /* deviceLookupByName */ > - NULL, /* deviceGetXMLDesc */ > - NULL, /* deviceGetParent */ > - NULL, /* deviceNumOfCaps */ > - NULL, /* deviceListCaps */ > - NULL, /* deviceCreateXML */ > - NULL, /* deviceDestroy */ > + .name = "ESX", > + .open = esxDeviceOpen, /* 0.7.6 */ > + .close = esxDeviceClose, /* 0.7.6 */ > }; > > > diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c > index 8ec3e44..842f903 100644 > --- a/src/node_device/node_device_driver.c > +++ b/src/node_device/node_device_driver.c > @@ -122,9 +122,10 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver) > virMutexUnlock(&driver->lock); > } > > -static int nodeNumOfDevices(virConnectPtr conn, > - const char *cap, > - unsigned int flags ATTRIBUTE_UNUSED) > +int > +nodeNumOfDevices(virConnectPtr conn, > + const char *cap, > + unsigned int flags ATTRIBUTE_UNUSED) > { > virDeviceMonitorStatePtr driver = conn->devMonPrivateData; > int ndevs = 0; > @@ -143,7 +144,7 @@ static int nodeNumOfDevices(virConnectPtr conn, > return ndevs; > } > > -static int > +int > nodeListDevices(virConnectPtr conn, > const char *cap, > char **const names, int maxnames, > @@ -179,8 +180,8 @@ nodeListDevices(virConnectPtr conn, > } > > > -static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, > - const char *name) > +virNodeDevicePtr > +nodeDeviceLookupByName(virConnectPtr conn, const char *name) > { > virDeviceMonitorStatePtr driver = conn->devMonPrivateData; > virNodeDeviceObjPtr obj; > @@ -251,8 +252,9 @@ out: > } > > > -static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, > - unsigned int flags ATTRIBUTE_UNUSED) > +char * > +nodeDeviceGetXMLDesc(virNodeDevicePtr dev, > + unsigned int flags ATTRIBUTE_UNUSED) > { > virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; > virNodeDeviceObjPtr obj; > @@ -281,7 +283,8 @@ cleanup: > } > > > -static char *nodeDeviceGetParent(virNodeDevicePtr dev) > +char * > +nodeDeviceGetParent(virNodeDevicePtr dev) > { > virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; > virNodeDeviceObjPtr obj; > @@ -314,7 +317,8 @@ cleanup: > } > > > -static int nodeDeviceNumOfCaps(virNodeDevicePtr dev) > +int > +nodeDeviceNumOfCaps(virNodeDevicePtr dev) > { > virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; > virNodeDeviceObjPtr obj; > @@ -344,7 +348,7 @@ cleanup: > } > > > -static int > +int > nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames) > { > virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; > @@ -538,7 +542,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn) > return dev; > } > > -static virNodeDevicePtr > +virNodeDevicePtr > nodeDeviceCreateXML(virConnectPtr conn, > const char *xmlDesc, > unsigned int flags ATTRIBUTE_UNUSED) > @@ -591,7 +595,7 @@ cleanup: > } > > > -static int > +int > nodeDeviceDestroy(virNodeDevicePtr dev) > { > int ret = -1; > @@ -651,21 +655,6 @@ out: > return ret; > } > > - > -void registerCommonNodeFuncs(virDeviceMonitorPtr driver) > -{ > - driver->numOfDevices = nodeNumOfDevices; > - driver->listDevices = nodeListDevices; > - driver->deviceLookupByName = nodeDeviceLookupByName; > - driver->deviceGetXMLDesc = nodeDeviceGetXMLDesc; > - driver->deviceGetParent = nodeDeviceGetParent; > - driver->deviceNumOfCaps = nodeDeviceNumOfCaps; > - driver->deviceListCaps = nodeDeviceListCaps; > - driver->deviceCreateXML = nodeDeviceCreateXML; > - driver->deviceDestroy = nodeDeviceDestroy; > -} > - > - > int nodedevRegister(void) { > #if defined(HAVE_HAL) && defined(HAVE_UDEV) > /* Register only one of these two - they conflict */ > diff --git a/src/node_device/node_device_driver.h b/src/node_device/node_device_driver.h > index e583c2b..08779b1 100644 > --- a/src/node_device/node_device_driver.h > +++ b/src/node_device/node_device_driver.h > @@ -53,8 +53,6 @@ int udevNodeRegister(void); > void nodeDeviceLock(virDeviceMonitorStatePtr driver); > void nodeDeviceUnlock(virDeviceMonitorStatePtr driver); > > -void registerCommonNodeFuncs(virDeviceMonitorPtr mon); > - > int nodedevRegister(void); > > # ifdef __linux__ > @@ -86,4 +84,16 @@ int read_wwn_linux(int host, const char *file, char **wwn); > > # endif /* __linux__ */ > > +int nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags); > +int nodeListDevices(virConnectPtr conn, const char *cap, char **const names, > + int maxnames, unsigned int flags); > +virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, const char *name); > +char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags); > +char *nodeDeviceGetParent(virNodeDevicePtr dev); > +int nodeDeviceNumOfCaps(virNodeDevicePtr dev); > +int nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames); > +virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, > + const char *xmlDesc, unsigned int flags); > +int nodeDeviceDestroy(virNodeDevicePtr dev); > + > #endif /* __VIR_NODE_DEVICE_H__ */ > diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c > index 8df2875..a90e777 100644 > --- a/src/node_device/node_device_hal.c > +++ b/src/node_device/node_device_hal.c > @@ -881,22 +881,30 @@ static int halNodeDrvClose(virConnectPtr conn ATTRIBUTE_UNUSED) > > static virDeviceMonitor halDeviceMonitor = { > .name = "halDeviceMonitor", > - .open = halNodeDrvOpen, > - .close = halNodeDrvClose, > + .open = halNodeDrvOpen, /* 0.5.0 */ > + .close = halNodeDrvClose, /* 0.5.0 */ > + .numOfDevices = nodeNumOfDevices, /* 0.5.0 */ > + .listDevices = nodeListDevices, /* 0.5.0 */ > + .deviceLookupByName = nodeDeviceLookupByName, /* 0.5.0 */ > + .deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.5.0 */ > + .deviceGetParent = nodeDeviceGetParent, /* 0.5.0 */ > + .deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.5.0 */ > + .deviceListCaps = nodeDeviceListCaps, /* 0.5.0 */ > + .deviceCreateXML = nodeDeviceCreateXML, /* 0.6.5 */ > + .deviceDestroy = nodeDeviceDestroy, /* 0.6.5 */ > }; > > > static virStateDriver halStateDriver = { > .name = "HAL", > - .initialize = halDeviceMonitorStartup, > - .cleanup = halDeviceMonitorShutdown, > - .reload = halDeviceMonitorReload, > - .active = halDeviceMonitorActive, > + .initialize = halDeviceMonitorStartup, /* 0.5.0 */ > + .cleanup = halDeviceMonitorShutdown, /* 0.5.0 */ > + .reload = halDeviceMonitorReload, /* 0.5.0 */ > + .active = halDeviceMonitorActive, /* 0.5.0 */ > }; > > int halNodeRegister(void) > { > - registerCommonNodeFuncs(&halDeviceMonitor); > if (virRegisterDeviceMonitor(&halDeviceMonitor) < 0) > return -1; > return virRegisterStateDriver(&halStateDriver); > diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c > index 29e4bac..8b9694e 100644 > --- a/src/node_device/node_device_udev.c > +++ b/src/node_device/node_device_udev.c > @@ -1741,23 +1741,31 @@ static int udevNodeDrvClose(virConnectPtr conn) > > static virDeviceMonitor udevDeviceMonitor = { > .name = "udevDeviceMonitor", > - .open = udevNodeDrvOpen, > - .close = udevNodeDrvClose, > + .open = udevNodeDrvOpen, /* 0.7.3 */ > + .close = udevNodeDrvClose, /* 0.7.3 */ > + .numOfDevices = nodeNumOfDevices, /* 0.7.3 */ > + .listDevices = nodeListDevices, /* 0.7.3 */ > + .deviceLookupByName = nodeDeviceLookupByName, /* 0.7.3 */ > + .deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.7.3 */ > + .deviceGetParent = nodeDeviceGetParent, /* 0.7.3 */ > + .deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.7.3 */ > + .deviceListCaps = nodeDeviceListCaps, /* 0.7.3 */ > + .deviceCreateXML = nodeDeviceCreateXML, /* 0.7.3 */ > + .deviceDestroy = nodeDeviceDestroy, /* 0.7.3 */ > }; > > static virStateDriver udevStateDriver = { > .name = "udev", > - .initialize = udevDeviceMonitorStartup, > - .cleanup = udevDeviceMonitorShutdown, > - .reload = udevDeviceMonitorReload, > - .active = udevDeviceMonitorActive, > + .initialize = udevDeviceMonitorStartup, /* 0.7.3 */ > + .cleanup = udevDeviceMonitorShutdown, /* 0.7.3 */ > + .reload = udevDeviceMonitorReload, /* 0.7.3 */ > + .active = udevDeviceMonitorActive, /* 0.7.3 */ > }; > > int udevNodeRegister(void) > { > VIR_DEBUG("Registering udev node device backend"); > > - registerCommonNodeFuncs(&udevDeviceMonitor); > if (virRegisterDeviceMonitor(&udevDeviceMonitor) < 0) { > return -1; > } ACK, I completely missed the node device APIs when doing the conversion because of this wierd driver structure. 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list