1
0
mirror of https://gitlab.com/qemu-project/qemu synced 2024-07-08 20:17:27 +00:00

hw/acpi/viot: sort VIOT ACPI table entries by PCI host bridge min_bus

This ensures that the VIOT ACPI table output is always stable for a given PCI
topology by ensuring that entries are ordered according to min_bus.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Ani Sinha <ani@anisinha.ca>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20220525173232.31429-6-mark.cave-ayland@ilande.co.uk>
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Mark Cave-Ayland 2022-05-25 18:32:31 +01:00 committed by Michael S. Tsirkin
parent 4c8f2ffff1
commit 68f14a8729

View File

@ -64,6 +64,20 @@ static int enumerate_pci_host_bridges(Object *obj, void *opaque)
return 0;
}
static gint pci_host_range_compare(gconstpointer a, gconstpointer b)
{
struct viot_pci_host_range *range_a = (struct viot_pci_host_range *)a;
struct viot_pci_host_range *range_b = (struct viot_pci_host_range *)b;
if (range_a->min_bus < range_b->min_bus) {
return -1;
} else if (range_a->min_bus > range_b->min_bus) {
return 1;
} else {
return 0;
}
}
/*
* Generate a VIOT table with one PCI-based virtio-iommu that manages PCI
* endpoints.
@ -87,6 +101,9 @@ void build_viot(MachineState *ms, GArray *table_data, BIOSLinker *linker,
object_child_foreach_recursive(OBJECT(ms), enumerate_pci_host_bridges,
pci_host_ranges);
/* Sort the pci host ranges by min_bus */
g_array_sort(pci_host_ranges, pci_host_range_compare);
/* ACPI table header */
acpi_table_begin(&table, table_data);
/* Node count */