From: Jan Kiszka <[email protected]> This registers the irqchip as unit with the core. While saving already some lines of code, it will even enable further consolidations.
Signed-off-by: Jan Kiszka <[email protected]> --- hypervisor/arch/arm-common/include/asm/irqchip.h | 4 ---- hypervisor/arch/arm-common/irqchip.c | 16 +++++++++++++--- hypervisor/arch/arm-common/setup.c | 3 +-- hypervisor/arch/arm/Kbuild | 2 +- hypervisor/arch/arm/control.c | 16 +--------------- hypervisor/arch/arm/mmio.c | 3 +-- hypervisor/arch/arm64/Kbuild | 3 +++ hypervisor/arch/arm64/control.c | 14 +------------- hypervisor/arch/arm64/mmio.c | 3 +-- 9 files changed, 22 insertions(+), 42 deletions(-) diff --git a/hypervisor/arch/arm-common/include/asm/irqchip.h b/hypervisor/arch/arm-common/include/asm/irqchip.h index efe23e3e4..676ec87b9 100644 --- a/hypervisor/arch/arm-common/include/asm/irqchip.h +++ b/hypervisor/arch/arm-common/include/asm/irqchip.h @@ -77,17 +77,13 @@ struct pending_irqs { volatile unsigned int tail; }; -unsigned int irqchip_mmio_count_regions(struct cell *cell); - 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); void irqchip_cpu_reset(struct per_cpu *cpu_data); void irqchip_cpu_shutdown(struct per_cpu *cpu_data); -int irqchip_cell_init(struct cell *cell); void irqchip_cell_reset(struct cell *cell); -void irqchip_cell_exit(struct cell *cell); void irqchip_config_commit(struct cell *cell_added_removed); diff --git a/hypervisor/arch/arm-common/irqchip.c b/hypervisor/arch/arm-common/irqchip.c index bceab1be9..e8939ffc2 100644 --- a/hypervisor/arch/arm-common/irqchip.c +++ b/hypervisor/arch/arm-common/irqchip.c @@ -18,6 +18,7 @@ #include <jailhouse/paging.h> #include <jailhouse/printk.h> #include <jailhouse/string.h> +#include <jailhouse/unit.h> #include <asm/control.h> #include <asm/gic.h> #include <asm/irqchip.h> @@ -392,7 +393,7 @@ void irqchip_cpu_shutdown(struct per_cpu *cpu_data) } } -int irqchip_cell_init(struct cell *cell) +static int irqchip_cell_init(struct cell *cell) { unsigned int mnt_irq = system_config->platform_info.arm.maintenance_irq; const struct jailhouse_irqchip *chip; @@ -450,7 +451,7 @@ void irqchip_cell_reset(struct cell *cell) } } -void irqchip_cell_exit(struct cell *cell) +static void irqchip_cell_exit(struct cell *cell) { const struct jailhouse_irqchip *chip; unsigned int n, pos; @@ -500,7 +501,7 @@ void irqchip_config_commit(struct cell *cell_added_removed) } } -unsigned int irqchip_mmio_count_regions(struct cell *cell) +static unsigned int irqchip_mmio_count_regions(struct cell *cell) { unsigned int regions = 1; /* GICD */ @@ -510,3 +511,12 @@ unsigned int irqchip_mmio_count_regions(struct cell *cell) return regions; } + +static int irqchip_init(void) +{ + /* Setup the SPI bitmap */ + return irqchip_cell_init(&root_cell); +} + +DEFINE_UNIT_SHUTDOWN_STUB(irqchip); +DEFINE_UNIT(irqchip, "irqchip"); diff --git a/hypervisor/arch/arm-common/setup.c b/hypervisor/arch/arm-common/setup.c index 94b93007c..4d5fc2120 100644 --- a/hypervisor/arch/arm-common/setup.c +++ b/hypervisor/arch/arm-common/setup.c @@ -53,6 +53,5 @@ int arm_cpu_init(struct per_cpu *cpu_data) int arm_init_late(void) { - /* Setup the SPI bitmap */ - return irqchip_cell_init(&root_cell); + return 0; } diff --git a/hypervisor/arch/arm/Kbuild b/hypervisor/arch/arm/Kbuild index eec346902..ed29417ad 100644 --- a/hypervisor/arch/arm/Kbuild +++ b/hypervisor/arch/arm/Kbuild @@ -17,7 +17,7 @@ KBUILD_AFLAGS := $(subst -include asm/unified.h,,$(KBUILD_AFLAGS)) always := built-in.o # units initialization order as defined by linking order: -# [vexpress], <generic units> +# irqchip (COMMON_OBJECTS), [vexpress], <generic units> obj-y := $(COMMON_OBJECTS) obj-y += entry.o setup.o control.o traps.o mmio.o lib.o diff --git a/hypervisor/arch/arm/control.c b/hypervisor/arch/arm/control.c index 8693aab7a..056ea420a 100644 --- a/hypervisor/arch/arm/control.c +++ b/hypervisor/arch/arm/control.c @@ -172,19 +172,7 @@ struct registers* arch_handle_exit(struct per_cpu *cpu_data, int arch_cell_create(struct cell *cell) { - int err; - - err = arm_paging_cell_init(cell); - if (err) - return err; - - err = irqchip_cell_init(cell); - if (err) { - arm_paging_cell_destroy(cell); - return err; - } - - return 0; + return arm_paging_cell_init(cell); } void arch_cell_destroy(struct cell *cell) @@ -196,7 +184,5 @@ void arch_cell_destroy(struct cell *cell) for_each_cpu(cpu, cell->cpu_set) per_cpu(cpu)->cpu_on_entry = PSCI_INVALID_ADDRESS; - irqchip_cell_exit(cell); - arm_paging_cell_destroy(cell); } diff --git a/hypervisor/arch/arm/mmio.c b/hypervisor/arch/arm/mmio.c index 44f9e0832..c03573ba8 100644 --- a/hypervisor/arch/arm/mmio.c +++ b/hypervisor/arch/arm/mmio.c @@ -14,14 +14,13 @@ #include <jailhouse/pci.h> #include <jailhouse/printk.h> #include <asm/bitops.h> -#include <asm/irqchip.h> #include <asm/percpu.h> #include <asm/processor.h> #include <asm/traps.h> unsigned int arch_mmio_count_regions(struct cell *cell) { - return irqchip_mmio_count_regions(cell); + return 0; } /* Taken from the ARM ARM pseudocode for taking a data abort */ diff --git a/hypervisor/arch/arm64/Kbuild b/hypervisor/arch/arm64/Kbuild index 26b9ff364..54cf6f015 100644 --- a/hypervisor/arch/arm64/Kbuild +++ b/hypervisor/arch/arm64/Kbuild @@ -16,5 +16,8 @@ include $(src)/../arm-common/Kbuild always := built-in.o +# units initialization order as defined by linking order: +# irqchip (COMMON_OBJECTS), <generic units> + obj-y := $(COMMON_OBJECTS) obj-y += entry.o setup.o control.o mmio.o caches.o traps.o diff --git a/hypervisor/arch/arm64/control.c b/hypervisor/arch/arm64/control.c index 788ebc630..2f8926a77 100644 --- a/hypervisor/arch/arm64/control.c +++ b/hypervisor/arch/arm64/control.c @@ -90,17 +90,7 @@ void arch_panic_park(void) int arch_cell_create(struct cell *cell) { - int err; - - err = arm_paging_cell_init(cell); - if (err) - return err; - - err = irqchip_cell_init(cell); - if (err) - arm_paging_cell_destroy(cell); - - return err; + return arm_paging_cell_init(cell); } void arch_cell_destroy(struct cell *cell) @@ -113,7 +103,5 @@ void arch_cell_destroy(struct cell *cell) for_each_cpu(cpu, cell->cpu_set) per_cpu(cpu)->cpu_on_entry = PSCI_INVALID_ADDRESS; - irqchip_cell_exit(cell); - arm_paging_cell_destroy(cell); } diff --git a/hypervisor/arch/arm64/mmio.c b/hypervisor/arch/arm64/mmio.c index f5a094b76..4750fdb91 100644 --- a/hypervisor/arch/arm64/mmio.c +++ b/hypervisor/arch/arm64/mmio.c @@ -18,7 +18,6 @@ #include <jailhouse/mmio.h> #include <jailhouse/printk.h> #include <asm/bitops.h> -#include <asm/irqchip.h> #include <asm/percpu.h> #include <asm/sysregs.h> #include <asm/traps.h> @@ -27,7 +26,7 @@ unsigned int arch_mmio_count_regions(struct cell *cell) { - return irqchip_mmio_count_regions(cell); + return 0; } static void arch_inject_dabt(struct trap_context *ctx, unsigned long addr) -- 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.
