[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