Move the whole file from src/node_device into src/conf and rename the
API's to have the "virNodeDevice" prefix.
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
src/Makefile.am | 8 ++++----
.../node_device_linux_sysfs.c | 24 ++++++++++------------
.../node_device_linux_sysfs.h | 9 +++++---
src/libvirt_private.syms | 5 +++++
src/node_device/node_device_driver.c | 8 ++++----
src/node_device/node_device_hal.c | 4 ++--
src/node_device/node_device_udev.c | 4 ++--
7 files changed, 34 insertions(+), 28 deletions(-)
rename src/{node_device => conf}/node_device_linux_sysfs.c (89%)
rename src/{node_device => conf}/node_device_linux_sysfs.h (82%)
diff --git a/src/Makefile.am b/src/Makefile.am
index f95f30e..23c35eb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -462,7 +462,9 @@ SECRET_CONF_SOURCES = \
# Network driver generic impl APIs
NODE_DEVICE_CONF_SOURCES = \
conf/node_device_conf.c conf/node_device_conf.h \
- conf/virnodedeviceobj.c conf/virnodedeviceobj.h
+ conf/virnodedeviceobj.c conf/virnodedeviceobj.h \
+ conf/node_device_linux_sysfs.c \
+ conf/node_device_linux_sysfs.h
CPU_CONF_SOURCES = \
conf/cpu_conf.c conf/cpu_conf.h
@@ -1162,9 +1164,7 @@ ACCESS_DRIVER_POLKIT_POLICY = \
NODE_DEVICE_DRIVER_SOURCES = \
node_device/node_device_driver.c \
- node_device/node_device_driver.h \
- node_device/node_device_linux_sysfs.c \
- node_device/node_device_linux_sysfs.h
+ node_device/node_device_driver.h
NODE_DEVICE_DRIVER_HAL_SOURCES = \
node_device/node_device_hal.c \
diff --git a/src/node_device/node_device_linux_sysfs.c b/src/conf/node_device_linux_sysfs.c
similarity index 89%
rename from src/node_device/node_device_linux_sysfs.c
rename to src/conf/node_device_linux_sysfs.c
index 1b7aa94..a905cd9 100644
--- a/src/node_device/node_device_linux_sysfs.c
+++ b/src/conf/node_device_linux_sysfs.c
@@ -26,8 +26,6 @@
#include <sys/stat.h>
#include <stdlib.h>
-#include "node_device_driver.h"
-#include "node_device_hal.h"
#include "node_device_linux_sysfs.h"
#include "virerror.h"
#include "viralloc.h"
@@ -44,7 +42,7 @@
VIR_LOG_INIT("node_device.node_device_linux_sysfs");
int
-nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host)
+virNodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host)
{
char *tmp = NULL;
int ret = -1;
@@ -125,8 +123,8 @@ nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host)
static int
-nodeDeviceSysfsGetPCISRIOVCaps(const char *sysfsPath,
- virNodeDevCapPCIDevPtr pci_dev)
+virNodeDeviceSysfsGetPCISRIOVCaps(const char *sysfsPath,
+ virNodeDevCapPCIDevPtr pci_dev)
{
size_t i;
int ret;
@@ -164,7 +162,7 @@ nodeDeviceSysfsGetPCISRIOVCaps(const char *sysfsPath,
static int
-nodeDeviceSysfsGetPCIIOMMUGroupCaps(virNodeDevCapPCIDevPtr pci_dev)
+virNodeDeviceSysfsGetPCIIOMMUGroupCaps(virNodeDevCapPCIDevPtr pci_dev)
{
size_t i;
int tmpGroup, ret = -1;
@@ -204,19 +202,19 @@ nodeDeviceSysfsGetPCIIOMMUGroupCaps(virNodeDevCapPCIDevPtr pci_dev)
}
-/* nodeDeviceSysfsGetPCIRelatedCaps() get info that is stored in sysfs
+/* virNodeDeviceSysfsGetPCIRelatedCaps() get info that is stored in sysfs
* about devices related to this device, i.e. things that can change
* without this device itself changing. These must be refreshed
* anytime full XML of the device is requested, because they can
* change with no corresponding notification from the kernel/udev.
*/
int
-nodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath,
- virNodeDevCapPCIDevPtr pci_dev)
+virNodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath,
+ virNodeDevCapPCIDevPtr pci_dev)
{
- if (nodeDeviceSysfsGetPCISRIOVCaps(sysfsPath, pci_dev) < 0)
+ if (virNodeDeviceSysfsGetPCISRIOVCaps(sysfsPath, pci_dev) < 0)
return -1;
- if (nodeDeviceSysfsGetPCIIOMMUGroupCaps(pci_dev) < 0)
+ if (virNodeDeviceSysfsGetPCIIOMMUGroupCaps(pci_dev) < 0)
return -1;
return 0;
}
@@ -225,13 +223,13 @@ nodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath,
#else
int
-nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host ATTRIBUTE_UNUSED)
+virNodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host ATTRIBUTE_UNUSED)
{
return -1;
}
int
-nodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath ATTRIBUTE_UNUSED,
+virNodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath ATTRIBUTE_UNUSED,
virNodeDevCapPCIDevPtr pci_dev ATTRIBUTE_UNUSED)
{
return -1;
diff --git a/src/node_device/node_device_linux_sysfs.h b/src/conf/node_device_linux_sysfs.h
similarity index 82%
rename from src/node_device/node_device_linux_sysfs.h
rename to src/conf/node_device_linux_sysfs.h
index 8deea66..4e0bf65 100644
--- a/src/node_device/node_device_linux_sysfs.h
+++ b/src/conf/node_device_linux_sysfs.h
@@ -25,8 +25,11 @@
# include "node_device_conf.h"
-int nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host);
-int nodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath,
- virNodeDevCapPCIDevPtr pci_dev);
+int
+virNodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host);
+
+int
+virNodeDeviceSysfsGetPCIRelatedDevCaps(const char *sysfsPath,
+ virNodeDevCapPCIDevPtr pci_dev);
#endif /* __VIR_NODE_DEVICE_LINUX_SYSFS_H__ */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index d361454..d8602e6 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -689,6 +689,11 @@ virNodeDeviceEventStateRegisterID;
virNodeDeviceEventUpdateNew;
+# conf/node_device_linux_sysfs.h
+virNodeDeviceSysfsGetPCIRelatedDevCaps;
+virNodeDeviceSysfsGetSCSIHostCaps;
+
+
# conf/numa_conf.h
virDomainNumaCheckABIStability;
virDomainNumaEquals;
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
index ba3da62..b4c0020 100644
--- a/src/node_device/node_device_driver.c
+++ b/src/node_device/node_device_driver.c
@@ -54,7 +54,7 @@ static int update_caps(virNodeDeviceObjPtr dev)
while (cap) {
switch (cap->data.type) {
case VIR_NODE_DEV_CAP_SCSI_HOST:
- nodeDeviceSysfsGetSCSIHostCaps(&dev->def->caps->data.scsi_host);
+ virNodeDeviceSysfsGetSCSIHostCaps(&dev->def->caps->data.scsi_host);
break;
case VIR_NODE_DEV_CAP_NET:
if (virNetDevGetLinkInfo(cap->data.net.ifname, &cap->data.net.lnk) < 0)
@@ -64,8 +64,8 @@ static int update_caps(virNodeDeviceObjPtr dev)
return -1;
break;
case VIR_NODE_DEV_CAP_PCI_DEV:
- if (nodeDeviceSysfsGetPCIRelatedDevCaps(dev->def->sysfs_path,
- &dev->def->caps->data.pci_dev) < 0)
+ if (virNodeDeviceSysfsGetPCIRelatedDevCaps(dev->def->sysfs_path,
+ &dev->def->caps->data.pci_dev) < 0)
return -1;
break;
@@ -275,7 +275,7 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn,
while (cap) {
if (cap->data.type == VIR_NODE_DEV_CAP_SCSI_HOST) {
- nodeDeviceSysfsGetSCSIHostCaps(&cap->data.scsi_host);
+ virNodeDeviceSysfsGetSCSIHostCaps(&cap->data.scsi_host);
if (cap->data.scsi_host.flags &
VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST) {
if (STREQ(cap->data.scsi_host.wwnn, wwnn) &&
diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c
index 81e5ecc..e76201b 100644
--- a/src/node_device/node_device_hal.c
+++ b/src/node_device/node_device_hal.c
@@ -153,7 +153,7 @@ gather_pci_cap(LibHalContext *ctx, const char *udi,
ignore_value(virStrToLong_ui(p+1, &p, 16, &d->pci_dev.function));
}
- if (nodeDeviceSysfsGetPCIRelatedDevCaps(sysfs_path, &d->pci_dev) < 0) {
+ if (virNodeDeviceSysfsGetPCIRelatedDevCaps(sysfs_path, &d->pci_dev) < 0) {
VIR_FREE(sysfs_path);
return -1;
}
@@ -239,7 +239,7 @@ gather_scsi_host_cap(LibHalContext *ctx, const char *udi,
(void)get_int_prop(ctx, udi, "scsi_host.host", (int *)&d->scsi_host.host);
- retval = nodeDeviceSysfsGetSCSIHostCaps(&d->scsi_host);
+ retval = virNodeDeviceSysfsGetSCSIHostCaps(&d->scsi_host);
if (retval == -1)
goto out;
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 4ecb0b1..c88a234 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -474,7 +474,7 @@ static int udevProcessPCI(struct udev_device *device,
&pci_dev->numa_node, 10) < 0)
goto cleanup;
- if (nodeDeviceSysfsGetPCIRelatedDevCaps(def->sysfs_path, pci_dev) < 0)
+ if (virNodeDeviceSysfsGetPCIRelatedDevCaps(def->sysfs_path, pci_dev) < 0)
goto cleanup;
if (!(pciDev = virPCIDeviceNew(pci_dev->domain,
@@ -688,7 +688,7 @@ static int udevProcessSCSIHost(struct udev_device *device ATTRIBUTE_UNUSED,
return -1;
}
- nodeDeviceSysfsGetSCSIHostCaps(&def->caps->data.scsi_host);
+ virNodeDeviceSysfsGetSCSIHostCaps(&def->caps->data.scsi_host);
if (udevGenerateDeviceName(device, def, NULL) != 0)
return -1;
--
2.9.3
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
John Ferlan <jferlan@redhat.com> [2017-05-19, 09:08AM -0400]:
>Move the whole file from src/node_device into src/conf and rename the
>API's to have the "virNodeDevice" prefix.
>
>Signed-off-by: John Ferlan <jferlan@redhat.com>
>---
> src/Makefile.am | 8 ++++----
> .../node_device_linux_sysfs.c | 24 ++++++++++------------
> .../node_device_linux_sysfs.h | 9 +++++---
> src/libvirt_private.syms | 5 +++++
> src/node_device/node_device_driver.c | 8 ++++----
> src/node_device/node_device_hal.c | 4 ++--
> src/node_device/node_device_udev.c | 4 ++--
> 7 files changed, 34 insertions(+), 28 deletions(-)
> rename src/{node_device => conf}/node_device_linux_sysfs.c (89%)
> rename src/{node_device => conf}/node_device_linux_sysfs.h (82%)
>
What's the reasoning for this move? It somehow doesn't feel right and it
will make backports harder.
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 05/23/2017 04:13 AM, Bjoern Walk wrote:
> John Ferlan <jferlan@redhat.com> [2017-05-19, 09:08AM -0400]:
>> Move the whole file from src/node_device into src/conf and rename the
>> API's to have the "virNodeDevice" prefix.
>>
>> Signed-off-by: John Ferlan <jferlan@redhat.com>
>> ---
>> src/Makefile.am | 8 ++++----
>> .../node_device_linux_sysfs.c | 24
>> ++++++++++------------
>> .../node_device_linux_sysfs.h | 9 +++++---
>> src/libvirt_private.syms | 5 +++++
>> src/node_device/node_device_driver.c | 8 ++++----
>> src/node_device/node_device_hal.c | 4 ++--
>> src/node_device/node_device_udev.c | 4 ++--
>> 7 files changed, 34 insertions(+), 28 deletions(-)
>> rename src/{node_device => conf}/node_device_linux_sysfs.c (89%)
>> rename src/{node_device => conf}/node_device_linux_sysfs.h (82%)
>>
>
> What's the reasoning for this move? It somehow doesn't feel right and it
> will make backports harder.
"Eventually" code that is currently in node_device_driver to peruse the
node device object list is going to move to virnodedevobj.c and there
was some "boundary" thing about calling back into the driver that I
don't quite recall the exact compile/link error which caused me to move
the code. Although the commit date is relatively recent - it's more or
less a copy of work done in Dec 2016.
One could also make the argument that there's nothing "driver specific"
in the code, so why should it have ever been put in the src/node_device
directory? My other option would be to essentially move the guts of the
code into virnodedevobj and call it from src/node_device/... IDC which
way this happens, but I just found this easier. Using gitk I've never
had issues in the past following history of the code when a module moves
from one directory to another.
FWIW: My first instinct was move the code to src/util like other code
that has linux (or arch specific) pieces, but I couldn't do that because
node_device_linux_sysfs.h references "node_device_conf.h". Inclusion of
conf/*.h has been disallowed from src/util.
So to answer the other point... I do not believe that making backports
harder should be a reason to limit changes, but I also understand that's
a touchy subject to many. Still when I first started working on libvirt
there was quite a bit of code refactoring and movement - it was at times
difficult to follow, but it subsided fairly quickly and I learned how to
use gitk to follow changes. As an aside, for any of this common object
model work if I have come across something that I consider a "bug" I've
tried to "front load" that to the beginning of the patch series so that
it is easier to cherry-pick to some backport. In the long run any of
these changes is only painful when it affects the code you care most
about. I would submit that that nodedev code has long been "overlooked"
for optimizations and change to bring it more in line with how libvirt
is currently structured. I've even wondered if HAL is even relevant any
more, but I don't want to go down that path!
Couple of other "datapoints" to consider.
1. The impetus for all the changes I've posted in various drivers and
conf/vir*obj.c module is to use a common object model to handle the
functions that every driver has essentially cut-n-paste'd (create, add,
remove, FindBySomeKey, NumOf, return ListOfSomeKey, and return
ListOfExternalReference). Over time each has varied slightly or fixed
bugs. Late last year there was a new driver proposed from Virtuozzo
which essentially copied everything from the storage pool into it's own
model. That got me to looking at the code and thinking there's no way
the model should be to essentially copy everything and just change the
names. In the long run all the drivers have their own XML/data
definition, but there's no way they shouldn't be able to share object
handling. It's taking a while to get there, but I think when it's done
it'll be easier to maintain.
2. The current object handling model is scattered. Some of the drivers
are more active (domain, network, storage) and each could have some fix
applied to one that isn't applied to another that is probably a bug in
the other. If you have common code handling the objects for each driver,
then fixing one fixes all. Reading the code and trying to compare how
some other driver did things to fit into another driver to fix a similar
issue seen can be painful. Been there while working through making the
secret driver use hash tables (my model varied slightly between domain
and network depending on which I thought did something better).
3. Most of the drivers use forward linked lists to manage their objects
(nodedev, interface, nwfilter, storagepool, storagevol), while others
use hash tables (domain, domainsnapshot, network, secret). Those forward
linked list drivers roll their own code w/r/t object mutexes which have
long been provided by virObjectLockable. These should have been
converted ages ago, but no one's taken the time to do so.
3a. In particular, nodedev uses a forward linked list. Ironically,
for nodedev "performance" this usually means the bulk of object lookups
have to traverse potentially long lists to find what's being searched
most frequently. Compare that to a hash table lookup. On my work laptop
there are 140 nodedev objs. Of those I usually want to reference the
ones added last - e.g iSCSI luns for "pseudo" block devices. Those
block_*, scsi_host*, and scsi_generic* are always going to be at the end
just by the nature of the udev discovery algorithm. I would assume this
is much more so true for those "larger" environments as well, but I
don't have empirical evidence.
If you consider that a volume for a storage pool could use some
nodedev list in order to essentially "find" the storage it wants. In
order to find the pool, follow a linked list of pools to find your
specific pool. Then follow a linked list to find the specific volume
within the pool. Then for some volumes this also means following the
nodedev list in order to find system representation for it. If you
start with a pool w/ 0 volumes, then as you add 10, 20, 100, 200, 1000,
etc. volumes I would hope you could see the scaling problem that a
forward linked list for each of these drivers would present. Now change
all those to use a hash table lookup and consider your performance.
I don't disagree this is painful, but it could also be short lived pain
depending on reviews. For a reference to the object and even more
history see:
https://www.redhat.com/archives/libvir-list/2017-April/msg00321.html
In my branches the order and quantity of those patches has changed. I
plan to post an update shortly, but wanted to get through the bulk of
the changes I originally posted in February before reposting (plus I
needed to add a few more comments).
John
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Wed, May 24, 2017 at 09:45:09AM -0400, John Ferlan wrote:
>
>
> On 05/23/2017 04:13 AM, Bjoern Walk wrote:
> > John Ferlan <jferlan@redhat.com> [2017-05-19, 09:08AM -0400]:
> >> Move the whole file from src/node_device into src/conf and rename the
> >> API's to have the "virNodeDevice" prefix.
> >>
> >> Signed-off-by: John Ferlan <jferlan@redhat.com>
> >> ---
> >> src/Makefile.am | 8 ++++----
> >> .../node_device_linux_sysfs.c | 24
> >> ++++++++++------------
> >> .../node_device_linux_sysfs.h | 9 +++++---
> >> src/libvirt_private.syms | 5 +++++
> >> src/node_device/node_device_driver.c | 8 ++++----
> >> src/node_device/node_device_hal.c | 4 ++--
> >> src/node_device/node_device_udev.c | 4 ++--
> >> 7 files changed, 34 insertions(+), 28 deletions(-)
> >> rename src/{node_device => conf}/node_device_linux_sysfs.c (89%)
> >> rename src/{node_device => conf}/node_device_linux_sysfs.h (82%)
> >>
> >
> > What's the reasoning for this move? It somehow doesn't feel right and it
> > will make backports harder.
>
> "Eventually" code that is currently in node_device_driver to peruse the
> node device object list is going to move to virnodedevobj.c and there
> was some "boundary" thing about calling back into the driver that I
> don't quite recall the exact compile/link error which caused me to move
> the code. Although the commit date is relatively recent - it's more or
> less a copy of work done in Dec 2016.
This still doesn't make sense really. The src/conf directory should
only contain code that's related to the XML parsing/formatting, and
generic object management. It should never contain any functional
driver code, and certainly none that pokes in sysfs.
> One could also make the argument that there's nothing "driver specific"
> in the code, so why should it have ever been put in the src/node_device
> directory? My other option would be to essentially move the guts of the
> code into virnodedevobj and call it from src/node_device/... IDC which
> way this happens, but I just found this easier. Using gitk I've never
> had issues in the past following history of the code when a module moves
> from one directory to another.
>
> FWIW: My first instinct was move the code to src/util like other code
> that has linux (or arch specific) pieces, but I couldn't do that because
> node_device_linux_sysfs.h references "node_device_conf.h". Inclusion of
> conf/*.h has been disallowed from src/util.
To get around that simply change the APIs so that instead of taking
the virNodeDevXXX structs as a single parameter, you just pass in
an exploded list of parameters, populated from the individual struct
fields that are needed for the methods in question.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 05/24/2017 10:35 AM, Daniel P. Berrange wrote:
> On Wed, May 24, 2017 at 09:45:09AM -0400, John Ferlan wrote:
>>
>>
>> On 05/23/2017 04:13 AM, Bjoern Walk wrote:
>>> John Ferlan <jferlan@redhat.com> [2017-05-19, 09:08AM -0400]:
>>>> Move the whole file from src/node_device into src/conf and rename the
>>>> API's to have the "virNodeDevice" prefix.
>>>>
>>>> Signed-off-by: John Ferlan <jferlan@redhat.com>
>>>> ---
>>>> src/Makefile.am | 8 ++++----
>>>> .../node_device_linux_sysfs.c | 24
>>>> ++++++++++------------
>>>> .../node_device_linux_sysfs.h | 9 +++++---
>>>> src/libvirt_private.syms | 5 +++++
>>>> src/node_device/node_device_driver.c | 8 ++++----
>>>> src/node_device/node_device_hal.c | 4 ++--
>>>> src/node_device/node_device_udev.c | 4 ++--
>>>> 7 files changed, 34 insertions(+), 28 deletions(-)
>>>> rename src/{node_device => conf}/node_device_linux_sysfs.c (89%)
>>>> rename src/{node_device => conf}/node_device_linux_sysfs.h (82%)
>>>>
>>>
>>> What's the reasoning for this move? It somehow doesn't feel right and it
>>> will make backports harder.
>>
>> "Eventually" code that is currently in node_device_driver to peruse the
>> node device object list is going to move to virnodedevobj.c and there
>> was some "boundary" thing about calling back into the driver that I
>> don't quite recall the exact compile/link error which caused me to move
>> the code. Although the commit date is relatively recent - it's more or
>> less a copy of work done in Dec 2016.
>
> This still doesn't make sense really. The src/conf directory should
> only contain code that's related to the XML parsing/formatting, and
> generic object management. It should never contain any functional
> driver code, and certainly none that pokes in sysfs.
>
Other than the module function names having Sysfs in their names,
there's no sysfs poking in the code. There are calls to src/util
functions which do the sysfs poking. So I could change the function
names or just move the guts of the code into node_device_conf.c and then
call those APIs from the unmoved node_device_linux_sysfs.c. It was just
simpler to take this approach.
I can drop this and rework things. It was created "backwards" from a
future need...
>
>> One could also make the argument that there's nothing "driver specific"
>> in the code, so why should it have ever been put in the src/node_device
>> directory? My other option would be to essentially move the guts of the
>> code into virnodedevobj and call it from src/node_device/... IDC which
>> way this happens, but I just found this easier. Using gitk I've never
>> had issues in the past following history of the code when a module moves
>> from one directory to another.
>>
>> FWIW: My first instinct was move the code to src/util like other code
>> that has linux (or arch specific) pieces, but I couldn't do that because
>> node_device_linux_sysfs.h references "node_device_conf.h". Inclusion of
>> conf/*.h has been disallowed from src/util.
>
> To get around that simply change the APIs so that instead of taking
> the virNodeDevXXX structs as a single parameter, you just pass in
> an exploded list of parameters, populated from the individual struct
> fields that are needed for the methods in question.
>
IMO that's worse especially since _virNodeDevCapSCSIHost and
_virNodeDevCapPCIDev fields are getting filled in.
John
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.