[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT RFC PATCH 2/2] plat/common: Add a trap function to handle Arm64 irq trap
From: Wei Chen <wei.chen@xxxxxxx> Change-Id: I3652599f8385fc67a29ab2d9e67861590c0f9f6c Signed-off-by: Wei Chen <wei.chen@xxxxxxx> --- plat/common/arm/traps.c | 27 +++++++++++++++++++++++++++ plat/kvm/arm/exceptions.S | 10 +++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/plat/common/arm/traps.c b/plat/common/arm/traps.c index 43235be..257106b 100644 --- a/plat/common/arm/traps.c +++ b/plat/common/arm/traps.c @@ -23,6 +23,7 @@ #include <string.h> #include <uk/print.h> #include <uk/assert.h> +#include <arm/gic-v2.h> static const char *exception_modes[]= { "Synchronous Abort", @@ -68,3 +69,29 @@ void trap_el1_sync(struct __regs *regs, uint64_t far) dump_registers(regs, far); ukplat_crash(); } + +void trap_el1_irq(struct __regs *regs, uint64_t far) +{ + uint32_t stat, irq; + + do { + stat = gic_ack_irq(); + irq = stat & GICC_IAR_INTID_MASK; + + uk_printd(DLVL_CRIT, "Unikraft: EL1 IRQ#%d trap caught\n", irq); + + /* + * TODO: Hanle IPI&SGI interrupts here + */ + if (irq < GIC_MAX_IRQ) { + gic_eoi_irq(stat); + isb(); + _ukplat_irq_handle((unsigned long)irq); + continue; + } + + break; + } while (1); + + ukplat_crash(); +} diff --git a/plat/kvm/arm/exceptions.S b/plat/kvm/arm/exceptions.S index af039d8..194cd03 100644 --- a/plat/kvm/arm/exceptions.S +++ b/plat/kvm/arm/exceptions.S @@ -119,6 +119,14 @@ el1_sync: bl trap_el1_sync LEAVE_TRAP 1 +.align 6 +el1_irq: + ENTER_TRAP 1 + msr daifclr, #4 + mov x0, sp + bl trap_el1_irq + LEAVE_TRAP 1 + /* Bad Abort numbers */ #define BAD_SYNC 0 #define BAD_IRQ 1 @@ -169,7 +177,7 @@ ENTRY(vector_table) /* Current Exception level with SP_EL1 */ vector_entry el1_sync /* Synchronous EL1h */ - vector_entry el1_irq_invalid /* IRQ EL1h */ + vector_entry el1_irq /* IRQ EL1h */ vector_entry el1_fiq_invalid /* FIQ EL1h */ vector_entry el1_error_invalid /* Error EL1h */ -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |