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.
