nodedev: Introduce virNodeDeviceObjNumOfDevices

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>
This commit is contained in:
John Ferlan 2017-03-19 07:49:38 -04:00
parent 4fba40159f
commit be3c2dfd1a
5 changed files with 32 additions and 15 deletions

View 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)) && \ #define MATCH(FLAG) ((flags & (VIR_CONNECT_LIST_NODE_DEVICES_CAP_ ## FLAG)) && \
virNodeDeviceCapMatch(devobj, VIR_NODE_DEV_CAP_ ## FLAG)) virNodeDeviceCapMatch(devobj, VIR_NODE_DEV_CAP_ ## FLAG))
static bool static bool

View File

@ -82,6 +82,12 @@ typedef bool
(*virNodeDeviceObjListFilter)(virConnectPtr conn, (*virNodeDeviceObjListFilter)(virConnectPtr conn,
virNodeDeviceDefPtr def); virNodeDeviceDefPtr def);
int
virNodeDeviceObjNumOfDevices(virNodeDeviceObjListPtr devs,
virConnectPtr conn,
const char *cap,
virNodeDeviceObjListFilter aclfilter);
int int
virNodeDeviceObjListExport(virConnectPtr conn, virNodeDeviceObjListExport(virConnectPtr conn,
virNodeDeviceObjList devobjs, virNodeDeviceObjList devobjs,

View File

@ -953,6 +953,7 @@ virNodeDeviceObjHasCap;
virNodeDeviceObjListExport; virNodeDeviceObjListExport;
virNodeDeviceObjListFree; virNodeDeviceObjListFree;
virNodeDeviceObjLock; virNodeDeviceObjLock;
virNodeDeviceObjNumOfDevices;
virNodeDeviceObjRemove; virNodeDeviceObjRemove;
virNodeDeviceObjUnlock; virNodeDeviceObjUnlock;

View File

@ -160,7 +160,6 @@ nodeNumOfDevices(virConnectPtr conn,
unsigned int flags) unsigned int flags)
{ {
int ndevs = 0; int ndevs = 0;
size_t i;
if (virNodeNumOfDevicesEnsureACL(conn) < 0) if (virNodeNumOfDevicesEnsureACL(conn) < 0)
return -1; return -1;
@ -168,15 +167,8 @@ nodeNumOfDevices(virConnectPtr conn,
virCheckFlags(0, -1); virCheckFlags(0, -1);
nodeDeviceLock(); nodeDeviceLock();
for (i = 0; i < driver->devs.count; i++) { ndevs = virNodeDeviceObjNumOfDevices(&driver->devs, conn, cap,
virNodeDeviceObjPtr obj = driver->devs.objs[i]; virNodeNumOfDevicesCheckACL);
virNodeDeviceObjLock(obj);
if (virNodeNumOfDevicesCheckACL(conn, obj->def) &&
((cap == NULL) ||
virNodeDeviceObjHasCap(obj, cap)))
++ndevs;
virNodeDeviceObjUnlock(obj);
}
nodeDeviceUnlock(); nodeDeviceUnlock();
return ndevs; return ndevs;

View File

@ -5372,15 +5372,11 @@ testNodeNumOfDevices(virConnectPtr conn,
{ {
testDriverPtr driver = conn->privateData; testDriverPtr driver = conn->privateData;
int ndevs = 0; int ndevs = 0;
size_t i;
virCheckFlags(0, -1); virCheckFlags(0, -1);
testDriverLock(driver); testDriverLock(driver);
for (i = 0; i < driver->devs.count; i++) ndevs = virNodeDeviceObjNumOfDevices(&driver->devs, conn, cap, NULL);
if ((cap == NULL) ||
virNodeDeviceObjHasCap(driver->devs.objs[i], cap))
++ndevs;
testDriverUnlock(driver); testDriverUnlock(driver);
return ndevs; return ndevs;