mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
util: Slightly refactor PCI list functions
In order to be able to steal PCI device by its index in the list.
This commit is contained in:
parent
ea1a9b5fdd
commit
5eb8a7ac4d
@ -1000,10 +1000,12 @@ pciDeviceListAdd;
|
||||
pciDeviceListCount;
|
||||
pciDeviceListDel;
|
||||
pciDeviceListFind;
|
||||
pciDeviceListFindIndex;
|
||||
pciDeviceListFree;
|
||||
pciDeviceListGet;
|
||||
pciDeviceListNew;
|
||||
pciDeviceListSteal;
|
||||
pciDeviceListStealIndex;
|
||||
pciDeviceNetName;
|
||||
pciDeviceReAttachInit;
|
||||
pciDeviceSetManaged;
|
||||
|
@ -1553,34 +1553,35 @@ pciDeviceListCount(pciDeviceList *list)
|
||||
return list->count;
|
||||
}
|
||||
|
||||
pciDevice *
|
||||
pciDeviceListStealIndex(pciDeviceList *list,
|
||||
int idx)
|
||||
{
|
||||
pciDevice *ret;
|
||||
|
||||
if (idx < 0 || idx >= list->count)
|
||||
return NULL;
|
||||
|
||||
ret = list->devs[idx];
|
||||
|
||||
if (idx != --list->count) {
|
||||
memmove(&list->devs[idx],
|
||||
&list->devs[idx + 1],
|
||||
sizeof(*list->devs) * (list->count - idx));
|
||||
}
|
||||
|
||||
if (VIR_REALLOC_N(list->devs, list->count) < 0) {
|
||||
; /* not fatal */
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
pciDevice *
|
||||
pciDeviceListSteal(pciDeviceList *list,
|
||||
pciDevice *dev)
|
||||
{
|
||||
pciDevice *ret = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < list->count; i++) {
|
||||
if (list->devs[i]->domain != dev->domain ||
|
||||
list->devs[i]->bus != dev->bus ||
|
||||
list->devs[i]->slot != dev->slot ||
|
||||
list->devs[i]->function != dev->function)
|
||||
continue;
|
||||
|
||||
ret = list->devs[i];
|
||||
|
||||
if (i != --list->count)
|
||||
memmove(&list->devs[i],
|
||||
&list->devs[i+1],
|
||||
sizeof(*list->devs) * (list->count-i));
|
||||
|
||||
if (VIR_REALLOC_N(list->devs, list->count) < 0) {
|
||||
; /* not fatal */
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
return pciDeviceListStealIndex(list, pciDeviceListFindIndex(list, dev));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1592,8 +1593,8 @@ pciDeviceListDel(pciDeviceList *list,
|
||||
pciFreeDevice(ret);
|
||||
}
|
||||
|
||||
pciDevice *
|
||||
pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
|
||||
int
|
||||
pciDeviceListFindIndex(pciDeviceList *list, pciDevice *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1602,8 +1603,19 @@ pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
|
||||
list->devs[i]->bus == dev->bus &&
|
||||
list->devs[i]->slot == dev->slot &&
|
||||
list->devs[i]->function == dev->function)
|
||||
return list->devs[i];
|
||||
return NULL;
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
pciDevice *
|
||||
pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ((i = pciDeviceListFindIndex(list, dev)) >= 0)
|
||||
return list->devs[i];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -75,10 +75,14 @@ pciDevice * pciDeviceListGet (pciDeviceList *list,
|
||||
int pciDeviceListCount (pciDeviceList *list);
|
||||
pciDevice * pciDeviceListSteal (pciDeviceList *list,
|
||||
pciDevice *dev);
|
||||
pciDevice * pciDeviceListStealIndex(pciDeviceList *list,
|
||||
int idx);
|
||||
void pciDeviceListDel (pciDeviceList *list,
|
||||
pciDevice *dev);
|
||||
pciDevice * pciDeviceListFind (pciDeviceList *list,
|
||||
pciDevice *dev);
|
||||
int pciDeviceListFindIndex(pciDeviceList *list,
|
||||
pciDevice *dev);
|
||||
|
||||
/*
|
||||
* Callback that will be invoked once for each file
|
||||
|
Loading…
Reference in New Issue
Block a user