This logic is shared between GICv2 and GICv3.

Signed-off-by: Jan Kiszka <[email protected]>
---
 hypervisor/arch/arm-common/gic-v2.c  | 22 +++++++---------------
 hypervisor/arch/arm-common/irqchip.c |  3 +++
 hypervisor/arch/arm/gic-v3.c         |  2 --
 3 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/hypervisor/arch/arm-common/gic-v2.c 
b/hypervisor/arch/arm-common/gic-v2.c
index f18d9ac..c67b412 100644
--- a/hypervisor/arch/arm-common/gic-v2.c
+++ b/hypervisor/arch/arm-common/gic-v2.c
@@ -165,8 +165,6 @@ static void gic_eoi_irq(u32 irq_id, bool deactivate)
 
 static int gic_cell_init(struct cell *cell)
 {
-       int err;
-
        /*
         * Let the guest access the virtual CPU interface instead of the
         * physical one.
@@ -176,19 +174,13 @@ static int gic_cell_init(struct cell *cell)
         * here.
         * As for now, none of them seem to have virtualization extensions.
         */
-       err = paging_create(&cell->arch.mm,
-                           system_config->platform_info.arm.gicv_base,
-                           GICC_SIZE,
-                           system_config->platform_info.arm.gicc_base,
-                           (PTE_FLAG_VALID | PTE_ACCESS_FLAG |
-                            S2_PTE_ACCESS_RW | S2_PTE_FLAG_DEVICE),
-                           PAGING_COHERENT);
-       if (err)
-               return err;
-
-       mmio_region_register(cell, system_config->platform_info.arm.gicd_base,
-                            GICD_SIZE, gic_handle_dist_access, NULL);
-       return 0;
+       return paging_create(&cell->arch.mm,
+                            system_config->platform_info.arm.gicv_base,
+                            GICC_SIZE,
+                            system_config->platform_info.arm.gicc_base,
+                            (PTE_FLAG_VALID | PTE_ACCESS_FLAG |
+                             S2_PTE_ACCESS_RW | S2_PTE_FLAG_DEVICE),
+                            PAGING_COHERENT);
 }
 
 static void gic_cell_exit(struct cell *cell)
diff --git a/hypervisor/arch/arm-common/irqchip.c 
b/hypervisor/arch/arm-common/irqchip.c
index a2cab3a..28e453e 100644
--- a/hypervisor/arch/arm-common/irqchip.c
+++ b/hypervisor/arch/arm-common/irqchip.c
@@ -182,6 +182,9 @@ int irqchip_cell_init(struct cell *cell)
        if (err)
                return err;
 
+       mmio_region_register(cell, system_config->platform_info.arm.gicd_base,
+                            GICD_SIZE, gic_handle_dist_access, NULL);
+
        if (cell == &root_cell)
                return 0;
 
diff --git a/hypervisor/arch/arm/gic-v3.c b/hypervisor/arch/arm/gic-v3.c
index bf16ac3..3b10d0d 100644
--- a/hypervisor/arch/arm/gic-v3.c
+++ b/hypervisor/arch/arm/gic-v3.c
@@ -260,8 +260,6 @@ static enum mmio_result gic_handle_redist_access(void *arg,
 
 static int gic_cell_init(struct cell *cell)
 {
-       mmio_region_register(cell, system_config->platform_info.arm.gicd_base,
-                            GICD_SIZE, gic_handle_dist_access, NULL);
        mmio_region_register(cell, system_config->platform_info.arm.gicr_base,
                             GICR_SIZE, gic_handle_redist_access, NULL);
 
-- 
2.1.4

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to