]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
arm: Remove SPI target reset on cell destruction
authorJan Kiszka <jan.kiszka@siemens.com>
Sun, 26 Jun 2016 10:10:25 +0000 (12:10 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Mon, 27 Jun 2016 09:51:18 +0000 (11:51 +0200)
There is no point in updating the SPI routing on cell destruction: all
CPUs the cell owned will be given back to the root cell. So any
previously written valid target configuration remain valid.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/arm/gic-v2.c
hypervisor/arch/arm/gic-v3.c
hypervisor/arch/arm/irqchip.c

index c53e58a18483edf6c43789260dbae06560be7bfb..9d1d311ef49e2aa7169680da8e4015a316efafac 100644 (file)
@@ -216,8 +216,6 @@ static void gic_cell_exit(struct cell *cell)
 {
        paging_destroy(&cell->arch.mm, (unsigned long)gicc_base, gicc_size,
                       PAGING_NON_COHERENT);
-       /* Reset interrupt routing of the cell's spis */
-       gic_target_spis(cell, &root_cell);
 }
 
 static int gic_send_sgi(struct sgi *sgi)
index a231571a970eaf0b1f08c8c617e0240260d897b3..ca989d0628b1668dc93a5aac54b97c748f459ecc 100644 (file)
@@ -283,12 +283,6 @@ static int gic_cell_init(struct cell *cell)
        return 0;
 }
 
-static void gic_cell_exit(struct cell *cell)
-{
-       /* Reset interrupt routing of the cell's spis*/
-       gic_route_spis(cell, &root_cell);
-}
-
 static int gic_send_sgi(struct sgi *sgi)
 {
        u64 val;
@@ -454,7 +448,6 @@ struct irqchip_ops irqchip = {
        .cpu_init = gic_cpu_init,
        .cpu_reset = gic_cpu_reset,
        .cell_init = gic_cell_init,
-       .cell_exit = gic_cell_exit,
        .send_sgi = gic_send_sgi,
        .handle_irq = gic_handle_irq,
        .inject_irq = gic_inject_irq,
index e3c813f89e7e796d2115535f3427003f5f38ea06..47673dd34f125845c7d458c5c3a8c2976f69edf6 100644 (file)
@@ -202,7 +202,8 @@ void irqchip_cell_exit(struct cell *cell)
                                chip->pin_bitmap[pos];
        }
 
-       irqchip.cell_exit(cell);
+       if (irqchip.cell_exit)
+               irqchip.cell_exit(cell);
 }
 
 void irqchip_root_cell_shrink(struct cell *cell)