diff --git a/x86/irq.c b/x86/irq.c index 1d8ae2b..dc07f28 100644 --- a/x86/irq.c +++ b/x86/irq.c @@ -179,17 +179,25 @@ int irq__exit(struct kvm *kvm) free(irq_routing); - for (ent = rb_first(&pci_tree); ent; ent = rb_next(ent)) { + ent = rb_first(&pci_tree); + for (;;) { struct pci_dev *dev; + struct rb_node *next; struct irq_line *line; struct list_head *node, *tmp; + if (!ent) + break; + + next = rb_next(ent); + dev = rb_entry(ent, struct pci_dev, node); list_for_each_safe(node, tmp, &dev->lines) { line = list_entry(node, struct irq_line, node); free(line); } free(dev); + ent = next; } return 0;