Otherwise the 64bit bars are not mapped in largest first order, thereby messing up the alignment.
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- src/fw/pciinit.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c index 34279a4..84bb65b 100644 --- a/src/fw/pciinit.c +++ b/src/fw/pciinit.c @@ -574,14 +574,19 @@ static u64 pci_region_sum(struct pci_region *r) static void pci_region_migrate_64bit_entries(struct pci_region *from, struct pci_region *to) { - struct hlist_node *n, **last = &to->list.first; + struct hlist_node *n, *last = NULL; struct pci_region_entry *entry; hlist_for_each_entry_safe(entry, n, &from->list, node) { if (!entry->is64) continue; // Move from source list to destination list. hlist_del(&entry->node); - hlist_add(&entry->node, last); + if (hlist_empty(&to->list)) { + hlist_add_head(&entry->node, &to->list); + } else { + hlist_add_after(&entry->node, last); + } + last = &entry->node; } }