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.