]> xenbits.xensource.com Git - libvirt.git/commitdiff
nodedev: Introduce virNodeDeviceObjNumOfDevices
authorJohn Ferlan <jferlan@redhat.com>
Sun, 19 Mar 2017 11:49:38 +0000 (07:49 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 10 Apr 2017 11:33:43 +0000 (07:33 -0400)
Unify the NumOfDevices API into virnodedeviceobj.c from node_device_driver
and test_driver.  The only real difference between the two is that the test
driver doesn't call the aclfilter API.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/conf/virnodedeviceobj.c
src/conf/virnodedeviceobj.h
src/libvirt_private.syms
src/node_device/node_device_driver.c
src/test/test_driver.c

index 3fe3ae5fe87bf2489e8f36a7bf216b367d575549..f0c20c28b185238cd25ce20a836a6fb056a55d6a 100644 (file)
@@ -474,6 +474,28 @@ virNodeDeviceCapMatch(virNodeDeviceObjPtr devobj,
 }
 
 
+int
+virNodeDeviceObjNumOfDevices(virNodeDeviceObjListPtr devs,
+                             virConnectPtr conn,
+                             const char *cap,
+                             virNodeDeviceObjListFilter aclfilter)
+{
+    size_t i;
+    int ndevs = 0;
+
+    for (i = 0; i < devs->count; i++) {
+        virNodeDeviceObjPtr obj = devs->objs[i];
+        virNodeDeviceObjLock(obj);
+        if (aclfilter && aclfilter(conn, obj->def) &&
+            (!cap || virNodeDeviceObjHasCap(obj, cap)))
+            ++ndevs;
+        virNodeDeviceObjUnlock(obj);
+    }
+
+    return ndevs;
+}
+
+
 #define MATCH(FLAG) ((flags & (VIR_CONNECT_LIST_NODE_DEVICES_CAP_ ## FLAG)) && \
                      virNodeDeviceCapMatch(devobj, VIR_NODE_DEV_CAP_ ## FLAG))
 static bool
index e32bbf8fb5fe8ff316ffed9e30d9c5555e3b049d..7d303a060ae4316523dd3e04a8e6b325f44135b8 100644 (file)
@@ -82,6 +82,12 @@ typedef bool
 (*virNodeDeviceObjListFilter)(virConnectPtr conn,
                               virNodeDeviceDefPtr def);
 
+int
+virNodeDeviceObjNumOfDevices(virNodeDeviceObjListPtr devs,
+                             virConnectPtr conn,
+                             const char *cap,
+                             virNodeDeviceObjListFilter aclfilter);
+
 int
 virNodeDeviceObjListExport(virConnectPtr conn,
                            virNodeDeviceObjList devobjs,
index 4b3b790bdf292e943dd8d0ac65e9e582870dbef5..bd5a0c3b7817fcd18e7593e683950b9d124e6706 100644 (file)
@@ -953,6 +953,7 @@ virNodeDeviceObjHasCap;
 virNodeDeviceObjListExport;
 virNodeDeviceObjListFree;
 virNodeDeviceObjLock;
+virNodeDeviceObjNumOfDevices;
 virNodeDeviceObjRemove;
 virNodeDeviceObjUnlock;
 
index 99f7bc5476c665ea60dfa59085cd567d3df31f8d..f90b168749de3ab648c2a192e947da8b501fa950 100644 (file)
@@ -160,7 +160,6 @@ nodeNumOfDevices(virConnectPtr conn,
                  unsigned int flags)
 {
     int ndevs = 0;
-    size_t i;
 
     if (virNodeNumOfDevicesEnsureACL(conn) < 0)
         return -1;
@@ -168,15 +167,8 @@ nodeNumOfDevices(virConnectPtr conn,
     virCheckFlags(0, -1);
 
     nodeDeviceLock();
-    for (i = 0; i < driver->devs.count; i++) {
-        virNodeDeviceObjPtr obj = driver->devs.objs[i];
-        virNodeDeviceObjLock(obj);
-        if (virNodeNumOfDevicesCheckACL(conn, obj->def) &&
-            ((cap == NULL) ||
-             virNodeDeviceObjHasCap(obj, cap)))
-            ++ndevs;
-        virNodeDeviceObjUnlock(obj);
-    }
+    ndevs = virNodeDeviceObjNumOfDevices(&driver->devs, conn, cap,
+                                         virNodeNumOfDevicesCheckACL);
     nodeDeviceUnlock();
 
     return ndevs;
index 2bfcf1911db3ab63971084863422617a54e48abf..cf6ccd98a4ce2b8b671ca2a61b90cc99c1e8dd55 100644 (file)
@@ -5372,15 +5372,11 @@ testNodeNumOfDevices(virConnectPtr conn,
 {
     testDriverPtr driver = conn->privateData;
     int ndevs = 0;
-    size_t i;
 
     virCheckFlags(0, -1);
 
     testDriverLock(driver);
-    for (i = 0; i < driver->devs.count; i++)
-        if ((cap == NULL) ||
-            virNodeDeviceObjHasCap(driver->devs.objs[i], cap))
-            ++ndevs;
+    ndevs = virNodeDeviceObjNumOfDevices(&driver->devs, conn, cap, NULL);
     testDriverUnlock(driver);
 
     return ndevs;