fixup! arm64: Generate HYP timer interrupt specifiers
diff --git a/arm64/arm-cpu.c b/arm64/arm-cpu.c
index 4d48c9f..02c64e8 100644
--- a/arm64/arm-cpu.c
+++ b/arm64/arm-cpu.c
@@ -12,14 +12,8 @@
static void generate_fdt_nodes(void *fdt, struct kvm *kvm)
{
- int timer_interrupts[5] = {13, 14, 11, 10, 12};
- int nr = ARRAY_SIZE(timer_interrupts);
-
- if (!kvm->cfg.arch.nested_virt)
- nr--;
-
gic__generate_fdt_nodes(fdt, kvm->cfg.arch.irqchip);
- timer__generate_fdt_nodes(fdt, kvm, timer_interrupts, nr);
+ timer__generate_fdt_nodes(fdt, kvm);
pmu__generate_fdt_nodes(fdt, kvm);
}
diff --git a/arm64/include/kvm/timer.h b/arm64/include/kvm/timer.h
index f24082c..81e093e 100644
--- a/arm64/include/kvm/timer.h
+++ b/arm64/include/kvm/timer.h
@@ -1,6 +1,6 @@
#ifndef ARM_COMMON__TIMER_H
#define ARM_COMMON__TIMER_H
-void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm, int *irqs, int nr);
+void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm);
#endif /* ARM_COMMON__TIMER_H */
diff --git a/arm64/timer.c b/arm64/timer.c
index 3f8644b..2ac6144 100644
--- a/arm64/timer.c
+++ b/arm64/timer.c
@@ -5,15 +5,18 @@
#include "kvm/timer.h"
#include "kvm/util.h"
-void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm, int *irqs, int nr)
+void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm)
{
const char compatible[] = "arm,armv8-timer\0arm,armv7-timer";
u32 cpu_mask = gic__get_fdt_irq_cpumask(kvm);
- u32 *irq_prop = calloc(nr * 3, sizeof(*irq_prop));
- int sz = nr * 3;
- int i;
+ int irqs[5] = {13, 14, 11, 10, 12};
+ int nr = ARRAY_SIZE(irqs);
+ u32 irq_prop[nr * 3];
- for (i = 0; i < nr; i++) {
+ if (!kvm->cfg.arch.nested_virt)
+ nr--;
+
+ for (int i = 0; i < nr; i++) {
irq_prop[i * 3 + 0] = cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI);
irq_prop[i * 3 + 1] = cpu_to_fdt32(irqs[i]);
irq_prop[i * 3 + 2] = cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW);
@@ -21,11 +24,10 @@
_FDT(fdt_begin_node(fdt, "timer"));
_FDT(fdt_property(fdt, "compatible", compatible, sizeof(compatible)));
- _FDT(fdt_property(fdt, "interrupts", irq_prop, sz * sizeof(*irq_prop)));
+ _FDT(fdt_property(fdt, "interrupts", irq_prop, nr * 3 * sizeof(irq_prop[0])));
_FDT(fdt_property(fdt, "always-on", NULL, 0));
if (kvm->cfg.arch.force_cntfrq > 0)
_FDT(fdt_property_cell(fdt, "clock-frequency", kvm->cfg.arch.force_cntfrq));
_FDT(fdt_end_node(fdt));
- free(irq_prop);
}