From: Jan Kiszka <[email protected]>

It's called right before irqchip_cpu_init, so we can also do that in
irqchip_cpu_init directly.

Signed-off-by: Jan Kiszka <[email protected]>
---
 hypervisor/arch/arm-common/include/asm/irqchip.h |  1 -
 hypervisor/arch/arm-common/irqchip.c             | 62 +++++++++++-------------
 hypervisor/arch/arm-common/setup.c               |  6 ---
 3 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/hypervisor/arch/arm-common/include/asm/irqchip.h 
b/hypervisor/arch/arm-common/include/asm/irqchip.h
index 4a9e78e8a..efe23e3e4 100644
--- a/hypervisor/arch/arm-common/include/asm/irqchip.h
+++ b/hypervisor/arch/arm-common/include/asm/irqchip.h
@@ -79,7 +79,6 @@ struct pending_irqs {
 
 unsigned int irqchip_mmio_count_regions(struct cell *cell);
 
-int irqchip_init(void);
 int irqchip_cpu_init(struct per_cpu *cpu_data);
 int irqchip_get_cpu_target(unsigned int cpu_id);
 u64 irqchip_get_cluster_target(unsigned int cpu_id);
diff --git a/hypervisor/arch/arm-common/irqchip.c 
b/hypervisor/arch/arm-common/irqchip.c
index e25689ba4..bceab1be9 100644
--- a/hypervisor/arch/arm-common/irqchip.c
+++ b/hypervisor/arch/arm-common/irqchip.c
@@ -309,6 +309,34 @@ int irqchip_send_sgi(struct sgi *sgi)
 
 int irqchip_cpu_init(struct per_cpu *cpu_data)
 {
+       int err;
+
+       /* Only execute once, on master CPU */
+       if (!irqchip_is_init) {
+               switch (system_config->platform_info.arm.gic_version) {
+               case 2:
+                       irqchip = gicv2_irqchip;
+                       break;
+               case 3:
+                       irqchip = gicv3_irqchip;
+                       break;
+               default:
+                       return trace_error(-EINVAL);
+               }
+
+               gicd_base = paging_map_device(
+                               system_config->platform_info.arm.gicd_base,
+                               irqchip.gicd_size);
+               if (!gicd_base)
+                       return -ENOMEM;
+
+               err = irqchip.init();
+               if (err)
+                       return err;
+
+               irqchip_is_init = true;
+       }
+
        return irqchip.cpu_init(cpu_data);
 }
 
@@ -472,40 +500,6 @@ void irqchip_config_commit(struct cell *cell_added_removed)
        }
 }
 
-int irqchip_init(void)
-{
-       int err;
-
-       /* Only executed on master CPU */
-       if (irqchip_is_init)
-               return 0;
-
-       switch (system_config->platform_info.arm.gic_version) {
-       case 2:
-               irqchip = gicv2_irqchip;
-               break;
-       case 3:
-               irqchip = gicv3_irqchip;
-               break;
-       default:
-               return trace_error(-EINVAL);
-       }
-
-       gicd_base =
-               paging_map_device(system_config->platform_info.arm.gicd_base,
-                                 irqchip.gicd_size);
-       if (!gicd_base)
-               return -ENOMEM;
-
-       err = irqchip.init();
-       if (err)
-               return err;
-
-       irqchip_is_init = true;
-
-       return 0;
-}
-
 unsigned int irqchip_mmio_count_regions(struct cell *cell)
 {
        unsigned int regions = 1; /* GICD */
diff --git a/hypervisor/arch/arm-common/setup.c 
b/hypervisor/arch/arm-common/setup.c
index 44d9680bd..94b93007c 100644
--- a/hypervisor/arch/arm-common/setup.c
+++ b/hypervisor/arch/arm-common/setup.c
@@ -44,16 +44,10 @@ int arm_init_early(void)
 
 int arm_cpu_init(struct per_cpu *cpu_data)
 {
-       int err;
-
        cpu_data->mpidr = phys_processor_id();
 
        arm_paging_vcpu_init(&root_cell.arch.mm);
 
-       err = irqchip_init();
-       if (err)
-               return err;
-
        return irqchip_cpu_init(cpu_data);
 }
 
-- 
2.13.6

-- 
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