x86: Upgrade backtrace
[akaros.git] / kern / arch / x86 / ioapic.c
index 215c2c9..128aa78 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * This file is part of the UCB release of Plan 9. It is subject to the license
  * terms in the LICENSE file found in the top-level directory of this
  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
@@ -216,14 +216,20 @@ static int acpi_irq2ioapic(int irq)
  *             use MSI instead). */
 static int acpi_make_rdt(int tbdf, int irq, int busno, int devno)
 {
-       struct Apicst *st;
+       struct Atable *at;
+       struct Apicst *st, *lst;
        uint32_t lo;
        int pol, edge_level, ioapic_nr, gsi_irq;
 
-       for (st = apics->st; st != NULL; st = st->next) {
-               if (st->type == ASintovr) {
-                       if (st->intovr.irq == irq)
+       at = apics;
+       st = NULL;
+       for (int i = 0; i < at->nchildren; i++) {
+               lst = at->children[i]->tbl;
+               if (lst->type == ASintovr) {
+                       if (lst->intovr.irq == irq) {
+                               st = lst;
                                break;
+                       }
                }
        }
        if (st) {
@@ -521,7 +527,8 @@ static void ioapic_unmask_irq(struct irq_handler *unused, int apic_vector)
  * appropriately.
  *
  * Callers init irq_h->dev_irq and ->tbdf.  tbdf encodes the bus type and the
- * classic PCI bus:dev:func.
+ * classic PCI bus:dev:func.  dev_irq may be ignored based on the bus type (e.g.
+ * PCI, esp MSI).
  *
  * In plan9, this was ioapicintrenable(), which also unmasked.  We don't have a
  * deinit/disable method that would tear down the route yet.  All the plan9 one