[libvirt] [PATCH] docs: Make hvsupport.pl pick up the host device drivers
Matthias Bolte
matthias.bolte at googlemail.com
Mon Jun 6 10:00:33 UTC 2011
2011/6/6 Daniel P. Berrange <berrange at redhat.com>:
> 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
Thanks, pushed.
Matthias
More information about the libvir-list
mailing list