[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT RFC PATCH 4/5] 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 d80be6c..ec6944f 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", @@ -69,3 +70,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 IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |