mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
lib: Format PCI address differently
Currently, the way we format PCI address is using printf-s precision, e.g. "%.4x". This works if we don't want to print any value outside of bounds (which is usually the case). However, turns out, PCI domain can be 0x10000 which doesn't work well with our format strings. However, if we change the format string to "%04x" then we still pad small values with zeroes but also we are able to print values that are larger than four digits. In fact, this format string used by kernel to print a PCI address: "%04x:%02x:%02x.%d" The other three format strings (for bus, device and function) are changed too, so that we use the same format string as kernel. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
f0c50bc1ce
commit
9b332820f3
@ -293,8 +293,8 @@ virPCIDeviceAddressFormat(virBufferPtr buf,
|
||||
virPCIDeviceAddress addr,
|
||||
bool includeTypeInAddr)
|
||||
{
|
||||
virBufferAsprintf(buf, "<address %sdomain='0x%.4x' bus='0x%.2x' "
|
||||
"slot='0x%.2x' function='0x%.1x'/>\n",
|
||||
virBufferAsprintf(buf, "<address %sdomain='0x%04x' bus='0x%02x' "
|
||||
"slot='0x%02x' function='0x%d'/>\n",
|
||||
includeTypeInAddr ? "type='pci' " : "",
|
||||
addr.domain,
|
||||
addr.bus,
|
||||
|
@ -868,7 +868,7 @@ virDomainPCIAddressReserveAddrInternal(virDomainPCIAddressSetPtr addrs,
|
||||
/* The first device decides the isolation group for the
|
||||
* entire bus */
|
||||
bus->isolationGroup = isolationGroup;
|
||||
VIR_DEBUG("PCI bus %.4x:%.2x assigned isolation group %u because of "
|
||||
VIR_DEBUG("PCI bus %04x:%02x assigned isolation group %u because of "
|
||||
"first device %s",
|
||||
addr->domain, addr->bus, isolationGroup, addrStr);
|
||||
} else if (bus->isolationGroup != isolationGroup && fromConfig) {
|
||||
@ -879,7 +879,7 @@ virDomainPCIAddressReserveAddrInternal(virDomainPCIAddressSetPtr addrs,
|
||||
* back to the default (because at that point isolation can't
|
||||
* be guaranteed anymore) */
|
||||
bus->isolationGroup = 0;
|
||||
VIR_DEBUG("PCI bus %.4x:%.2x assigned isolation group %u because of "
|
||||
VIR_DEBUG("PCI bus %04x:%02x assigned isolation group %u because of "
|
||||
"user assigned address %s",
|
||||
addr->domain, addr->bus, isolationGroup, addrStr);
|
||||
}
|
||||
@ -1114,7 +1114,7 @@ virDomainPCIAddressFindUnusedFunctionOnBus(virDomainPCIAddressBusPtr bus,
|
||||
|
||||
if (!virDomainPCIAddressFlagsCompatible(searchAddr, addrStr, bus->flags,
|
||||
flags, false, false)) {
|
||||
VIR_DEBUG("PCI bus %.4x:%.2x is not compatible with the device",
|
||||
VIR_DEBUG("PCI bus %04x:%02x is not compatible with the device",
|
||||
searchAddr->domain, searchAddr->bus);
|
||||
} else {
|
||||
while (searchAddr->slot <= bus->maxSlot) {
|
||||
@ -1150,7 +1150,7 @@ virDomainPCIAddressFindUnusedFunctionOnBus(virDomainPCIAddressBusPtr bus,
|
||||
}
|
||||
}
|
||||
|
||||
VIR_DEBUG("PCI slot %.4x:%.2x:%.2x already in use",
|
||||
VIR_DEBUG("PCI slot %04x:%02x:%02x already in use",
|
||||
searchAddr->domain, searchAddr->bus, searchAddr->slot);
|
||||
searchAddr->slot++;
|
||||
}
|
||||
@ -1248,7 +1248,7 @@ virDomainPCIAddressGetNextAddr(virDomainPCIAddressSetPtr addrs,
|
||||
return -1;
|
||||
|
||||
success:
|
||||
VIR_DEBUG("Found free PCI slot %.4x:%.2x:%.2x",
|
||||
VIR_DEBUG("Found free PCI slot %04x:%02x:%02x",
|
||||
a.domain, a.bus, a.slot);
|
||||
*next_addr = a;
|
||||
return 0;
|
||||
|
@ -7091,8 +7091,8 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
|
||||
switch ((virDomainDeviceAddressType) info->type) {
|
||||
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
|
||||
if (!virPCIDeviceAddressIsEmpty(&info->addr.pci)) {
|
||||
virBufferAsprintf(&attrBuf, " domain='0x%.4x' bus='0x%.2x' "
|
||||
"slot='0x%.2x' function='0x%.1x'",
|
||||
virBufferAsprintf(&attrBuf, " domain='0x%04x' bus='0x%02x' "
|
||||
"slot='0x%02x' function='0x%d'",
|
||||
info->addr.pci.domain,
|
||||
info->addr.pci.bus,
|
||||
info->addr.pci.slot,
|
||||
|
@ -239,8 +239,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, "<capability type='phys_function'>\n");
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
virBufferAsprintf(buf,
|
||||
"<address domain='0x%.4x' bus='0x%.2x' "
|
||||
"slot='0x%.2x' function='0x%.1x'/>\n",
|
||||
"<address domain='0x%04x' bus='0x%02x' "
|
||||
"slot='0x%02x' function='0x%d'/>\n",
|
||||
data->pci_dev.physical_function->domain,
|
||||
data->pci_dev.physical_function->bus,
|
||||
data->pci_dev.physical_function->slot,
|
||||
@ -260,8 +260,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf,
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
for (i = 0; i < data->pci_dev.num_virtual_functions; i++) {
|
||||
virBufferAsprintf(buf,
|
||||
"<address domain='0x%.4x' bus='0x%.2x' "
|
||||
"slot='0x%.2x' function='0x%.1x'/>\n",
|
||||
"<address domain='0x%04x' bus='0x%02x' "
|
||||
"slot='0x%02x' function='0x%d'/>\n",
|
||||
data->pci_dev.virtual_functions[i]->domain,
|
||||
data->pci_dev.virtual_functions[i]->bus,
|
||||
data->pci_dev.virtual_functions[i]->slot,
|
||||
@ -302,8 +302,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf,
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
for (i = 0; i < data->pci_dev.nIommuGroupDevices; i++) {
|
||||
virBufferAsprintf(buf,
|
||||
"<address domain='0x%.4x' bus='0x%.2x' "
|
||||
"slot='0x%.2x' function='0x%.1x'/>\n",
|
||||
"<address domain='0x%04x' bus='0x%02x' "
|
||||
"slot='0x%02x' function='0x%d'/>\n",
|
||||
data->pci_dev.iommuGroupDevices[i]->domain,
|
||||
data->pci_dev.iommuGroupDevices[i]->bus,
|
||||
data->pci_dev.iommuGroupDevices[i]->slot,
|
||||
|
@ -44,7 +44,7 @@ struct _virZPCIDeviceAddress {
|
||||
unsigned int fid;
|
||||
};
|
||||
|
||||
#define VIR_PCI_DEVICE_ADDRESS_FMT "%.4x:%.2x:%.2x.%.1x"
|
||||
#define VIR_PCI_DEVICE_ADDRESS_FMT "%04x:%02x:%02x.%d"
|
||||
|
||||
struct _virPCIDeviceAddress {
|
||||
unsigned int domain;
|
||||
|
@ -1006,8 +1006,8 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
|
||||
|
||||
virBufferAddLit(&buf, "<source>\n");
|
||||
virBufferAdjustIndent(&buf, 2);
|
||||
virBufferAsprintf(&buf, "<address type='pci' domain='0x%.4x'"
|
||||
" bus='0x%.2x' slot='0x%.2x' function='0x%.1x'/>\n",
|
||||
virBufferAsprintf(&buf, "<address type='pci' domain='0x%04x'"
|
||||
" bus='0x%02x' slot='0x%02x' function='0x%d'/>\n",
|
||||
pciAddr.domain, pciAddr.bus,
|
||||
pciAddr.slot, pciAddr.function);
|
||||
virBufferAdjustIndent(&buf, -2);
|
||||
|
Loading…
x
Reference in New Issue
Block a user