1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-28 11:21:44 +03:00

Reimplement qemuDomainPCIAddressReserveSlot(): reserve all functions in the slot

We will support multi function PCI device. So we should reserve all functions in
the slot if we want to reserve a slot.
This commit is contained in:
Wen Congyang 2011-05-24 13:23:39 +08:00
parent d8f24f75a8
commit 38912f3107
2 changed files with 38 additions and 3 deletions

View File

@ -667,6 +667,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virBitmapPtr qemuCaps)
#define QEMU_PCI_ADDRESS_LAST_SLOT 31 #define QEMU_PCI_ADDRESS_LAST_SLOT 31
#define QEMU_PCI_ADDRESS_LAST_FUNCTION 8
struct _qemuDomainPCIAddressSet { struct _qemuDomainPCIAddressSet {
virHashTablePtr used; virHashTablePtr used;
int nextslot; int nextslot;
@ -810,19 +811,37 @@ int qemuDomainPCIAddressReserveAddr(qemuDomainPCIAddressSetPtr addrs,
return 0; return 0;
} }
int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs, int qemuDomainPCIAddressReserveFunction(qemuDomainPCIAddressSetPtr addrs,
int slot) int slot, int function)
{ {
virDomainDeviceInfo dev; virDomainDeviceInfo dev;
dev.addr.pci.domain = 0; dev.addr.pci.domain = 0;
dev.addr.pci.bus = 0; dev.addr.pci.bus = 0;
dev.addr.pci.slot = slot; dev.addr.pci.slot = slot;
dev.addr.pci.function = 0; dev.addr.pci.function = function;
return qemuDomainPCIAddressReserveAddr(addrs, &dev); return qemuDomainPCIAddressReserveAddr(addrs, &dev);
} }
int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs,
int slot)
{
int function;
for (function = 0; function <= QEMU_PCI_ADDRESS_LAST_FUNCTION; function++) {
if (qemuDomainPCIAddressReserveFunction(addrs, slot, function) < 0)
goto cleanup;
}
return 0;
cleanup:
for (function--; function >= 0; function--) {
qemuDomainPCIAddressReleaseFunction(addrs, slot, function);
}
return -1;
}
int qemuDomainPCIAddressEnsureAddr(qemuDomainPCIAddressSetPtr addrs, int qemuDomainPCIAddressEnsureAddr(qemuDomainPCIAddressSetPtr addrs,
virDomainDeviceInfoPtr dev) virDomainDeviceInfoPtr dev)
@ -853,6 +872,18 @@ int qemuDomainPCIAddressReleaseAddr(qemuDomainPCIAddressSetPtr addrs,
return ret; return ret;
} }
int qemuDomainPCIAddressReleaseFunction(qemuDomainPCIAddressSetPtr addrs,
int slot, int function)
{
virDomainDeviceInfo dev;
dev.addr.pci.domain = 0;
dev.addr.pci.bus = 0;
dev.addr.pci.slot = slot;
dev.addr.pci.function = function;
return qemuDomainPCIAddressReleaseAddr(addrs, &dev);
}
void qemuDomainPCIAddressSetFree(qemuDomainPCIAddressSetPtr addrs) void qemuDomainPCIAddressSetFree(qemuDomainPCIAddressSetPtr addrs)
{ {

View File

@ -146,6 +146,8 @@ virDomainDefPtr qemuParseCommandLineString(virCapsPtr caps,
int qemuDomainAssignPCIAddresses(virDomainDefPtr def); int qemuDomainAssignPCIAddresses(virDomainDefPtr def);
qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def); qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def);
int qemuDomainPCIAddressReserveFunction(qemuDomainPCIAddressSetPtr addrs,
int slot, int function);
int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs, int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs,
int slot); int slot);
int qemuDomainPCIAddressReserveAddr(qemuDomainPCIAddressSetPtr addrs, int qemuDomainPCIAddressReserveAddr(qemuDomainPCIAddressSetPtr addrs,
@ -156,6 +158,8 @@ int qemuDomainPCIAddressEnsureAddr(qemuDomainPCIAddressSetPtr addrs,
virDomainDeviceInfoPtr dev); virDomainDeviceInfoPtr dev);
int qemuDomainPCIAddressReleaseAddr(qemuDomainPCIAddressSetPtr addrs, int qemuDomainPCIAddressReleaseAddr(qemuDomainPCIAddressSetPtr addrs,
virDomainDeviceInfoPtr dev); virDomainDeviceInfoPtr dev);
int qemuDomainPCIAddressReleaseFunction(qemuDomainPCIAddressSetPtr addrs,
int slot, int function);
void qemuDomainPCIAddressSetFree(qemuDomainPCIAddressSetPtr addrs); void qemuDomainPCIAddressSetFree(qemuDomainPCIAddressSetPtr addrs);
int qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs); int qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr addrs);