[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 5/6] hw/acpi/viot: sort VIOT ACPI table entries by PCI host br
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v2 5/6] hw/acpi/viot: sort VIOT ACPI table entries by PCI host bridge min_bus |
Date: |
Sun, 22 May 2022 16:50:07 +0100 |
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>
---
hw/acpi/viot.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/hw/acpi/viot.c b/hw/acpi/viot.c
index 6ca041d18e..ff46703d87 100644
--- a/hw/acpi/viot.c
+++ b/hw/acpi/viot.c
@@ -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 */
--
2.20.1
- [PATCH v2 0/6] hw/acpi/viot: generate stable VIOT ACPI tables, Mark Cave-Ayland, 2022/05/22
- [PATCH v2 1/6] hw/acpi/viot: rename build_pci_range_node() to enumerate_pci_host_bridges(), Mark Cave-Ayland, 2022/05/22
- [PATCH v2 2/6] hw/acpi/viot: move the individual PCI host bridge entry generation to a new function, Mark Cave-Ayland, 2022/05/22
- [PATCH v2 3/6] hw/acpi/viot: build array of PCI host bridges before generating VIOT ACPI table, Mark Cave-Ayland, 2022/05/22
- [PATCH v2 5/6] hw/acpi/viot: sort VIOT ACPI table entries by PCI host bridge min_bus,
Mark Cave-Ayland <=
- [PATCH v2 4/6] tests/acpi: virt: allow VIOT acpi table changes, Mark Cave-Ayland, 2022/05/22
- [PATCH v2 6/6] tests/acpi: virt: update golden masters for VIOT, Mark Cave-Ayland, 2022/05/22