ARMv8 异常处理之el1_irq

11 篇文章 2 订阅 ¥29.90 ¥99.00

在正式进入handle_arch_irq之前,汇编层已经将处理器中的通用寄存器,SP,PSTATE等保存进了regs中。然后C代码中的el1_interrupt还会做一些中断前的简单处理。最新的代码已经将EL0和EL1中的FIQ和IRQ中断处理移动到了C代码中。

1.el1_irq

el1_irq调用到了el1_interrupt_handler handle_arch_irq

SYM_CODE_START_LOCAL_NOALIGN(el1_irq)
	kernel_entry 1
	el1_interrupt_handler handle_arch_irq
	kernel_exit 1

2.el1_interrupt_handler

.macro el1_interrupt_handler, handler:req
	enable_da_f

	mov	x0, sp //将当前的栈指针保存在寄存器 x0 中
	bl	enter_el1_irq_or_nmi

	irq_handler	\handler

#ifdef CONFIG_PREEMPTION
	ldr	x24, [tsk, #TSK_TI_PREEMPT]	// get preempt count
alternative_if ARM64_HAS_IRQ_PRIO_MASKING
	/*
	 * DA_F were cleared at start of handling. If anything is set in DAIF,
	 * we come back from an NMI, so skip preemption
	 */
	mrs	x0, daif
	orr	x24, x24, x0
alternative_else_nop_endif
	cbnz	x24, 1f				// preempt count !&
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值