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.

Reply via email to