]> rtime.felk.cvut.cz Git - jailhouse.git/blobdiff - hypervisor/arch/arm/irqchip.c
arm: Rework interrupt affinity management on cell creation
[jailhouse.git] / hypervisor / arch / arm / irqchip.c
index ef017913e96bfd066e080ead0fc5b12ced8e8a4b..a6fce0104af48adc287a360d570e26545a683cf3 100644 (file)
@@ -176,7 +176,7 @@ int irqchip_cell_init(struct cell *cell)
        if (err)
                return err;
 
-       if (cell != &root_cell)
+       if (cell != &root_cell) {
                for_each_irqchip(chip, cell->config, n) {
                        if (chip->address != (unsigned long)gicd_base)
                                continue;
@@ -185,6 +185,14 @@ int irqchip_cell_init(struct cell *cell)
                                        ~chip->pin_bitmap[pos];
                }
 
+               for (n = 32; n < sizeof(cell->arch.irq_bitmap) * 8; n++) {
+                       if (irqchip_irq_in_cell(cell, n))
+                               irqchip.adjust_irq_target(cell, n);
+                       if (irqchip_irq_in_cell(&root_cell, n))
+                               irqchip.adjust_irq_target(&root_cell, n);
+               }
+       }
+
        return 0;
 }