mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +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;
|
pciDeviceListCount;
|
||||||
pciDeviceListDel;
|
pciDeviceListDel;
|
||||||
pciDeviceListFind;
|
pciDeviceListFind;
|
||||||
|
pciDeviceListFindIndex;
|
||||||
pciDeviceListFree;
|
pciDeviceListFree;
|
||||||
pciDeviceListGet;
|
pciDeviceListGet;
|
||||||
pciDeviceListNew;
|
pciDeviceListNew;
|
||||||
pciDeviceListSteal;
|
pciDeviceListSteal;
|
||||||
|
pciDeviceListStealIndex;
|
||||||
pciDeviceNetName;
|
pciDeviceNetName;
|
||||||
pciDeviceReAttachInit;
|
pciDeviceReAttachInit;
|
||||||
pciDeviceSetManaged;
|
pciDeviceSetManaged;
|
||||||
|
@ -1553,34 +1553,35 @@ pciDeviceListCount(pciDeviceList *list)
|
|||||||
return list->count;
|
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 *
|
pciDevice *
|
||||||
pciDeviceListSteal(pciDeviceList *list,
|
pciDeviceListSteal(pciDeviceList *list,
|
||||||
pciDevice *dev)
|
pciDevice *dev)
|
||||||
{
|
{
|
||||||
pciDevice *ret = NULL;
|
return pciDeviceListStealIndex(list, pciDeviceListFindIndex(list, dev));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1592,8 +1593,8 @@ pciDeviceListDel(pciDeviceList *list,
|
|||||||
pciFreeDevice(ret);
|
pciFreeDevice(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
pciDevice *
|
int
|
||||||
pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
|
pciDeviceListFindIndex(pciDeviceList *list, pciDevice *dev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1602,8 +1603,19 @@ pciDeviceListFind(pciDeviceList *list, pciDevice *dev)
|
|||||||
list->devs[i]->bus == dev->bus &&
|
list->devs[i]->bus == dev->bus &&
|
||||||
list->devs[i]->slot == dev->slot &&
|
list->devs[i]->slot == dev->slot &&
|
||||||
list->devs[i]->function == dev->function)
|
list->devs[i]->function == dev->function)
|
||||||
return list->devs[i];
|
return i;
|
||||||
return NULL;
|
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);
|
int pciDeviceListCount (pciDeviceList *list);
|
||||||
pciDevice * pciDeviceListSteal (pciDeviceList *list,
|
pciDevice * pciDeviceListSteal (pciDeviceList *list,
|
||||||
pciDevice *dev);
|
pciDevice *dev);
|
||||||
|
pciDevice * pciDeviceListStealIndex(pciDeviceList *list,
|
||||||
|
int idx);
|
||||||
void pciDeviceListDel (pciDeviceList *list,
|
void pciDeviceListDel (pciDeviceList *list,
|
||||||
pciDevice *dev);
|
pciDevice *dev);
|
||||||
pciDevice * pciDeviceListFind (pciDeviceList *list,
|
pciDevice * pciDeviceListFind (pciDeviceList *list,
|
||||||
pciDevice *dev);
|
pciDevice *dev);
|
||||||
|
int pciDeviceListFindIndex(pciDeviceList *list,
|
||||||
|
pciDevice *dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Callback that will be invoked once for each file
|
* Callback that will be invoked once for each file
|
||||||
|
Loading…
Reference in New Issue
Block a user