Re: [PATCH] docs: Make hvsupport.pl pick up the host device drivers

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

 



2011/6/6 Daniel P. Berrange <berrange@xxxxxxxxxx>:
> 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

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



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]