GIC/ITS代码分析(8)中断应用实例之SGI中断

        SGI中断也称IPI中断,即处理器间中断,一个处理器可以向其他处理器发送中断,以达到目标处理器执行某种事情。

        如上所示,cpu0通过写GICD寄存器让cpu2上产生SGI中断。

        在ARM64系统中,硬中断号0~7为SGI中断号,它为CPU私有中断。

        对于SGI中断,分配和中断处理函数过程如下:

  1. 通过__irq_domain_alloc_irqs()分配SGI虚拟中断号并映射;
  2. 设置ipi_handler中断处理函数
  3. 通过ipi_setup()使能IPI中断

        常见的使用SGI中断的函数如下:

(1)smp_send_reschedule(int cpu)

在指定的处理器cpu上进行重新调度

(2)tick_broadcast(const struct cpumask *mask)

在指定的处理器范围上mask作时钟广播

(3)smp_send_stop(void)

在online的处理器上执行CPU停止操作

(4)arch_irq_work_raise(void)

[待定]

(5)arch_send_wakeup_ipi_mask(const struct cpumask *mask)

唤醒mask指定的CPU

(6)smp_call_function_many(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait)

在mask指定的处理器上执行func函数

(7)crash_smp_send_stop(void)

在KEXEC执行时将CPU停止

        虽然这些函数用途各异,但最终都是调用smp_cross_call(),只是事件不同。

        可以看出,最终是通过写SYS_ICC_SGI1R_EL1寄存器让GIC产生IPI中断。

        它们对应的处理函数为:

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
armv8和armv9是英国ARM公司推出的两个处理器架构,用于移动设备、嵌入式设备和服务器等领域。在这两个架构中,异常中断GIC (Generic Interrupt Controller) 是非常重要的主题。 异常中断是指当系统发生某种事件时,处理器暂停当前任务,转而处理优先级较高的任务。异常中断包括两种类型:同步异常和中断异常。同步异常是由指令执行时产生的,如除零异常、非法指令异常等。中断异常是由外部事件触发的,如定时器中断、外设中断等。 在armv8和armv9架构中,异常的处理是通过异常向量表实现的。异常向量表是一个固定大小的表格,其中包含不同类型异常的处理函数的地址。当发生异常时,处理器会根据异常类型在异常向量表中查找相应的处理函数,并跳转到该函数执行异常处理。 GIC是一个用于处理中断的控制器,它负责管理和分发中断信号给相应的处理器核心。在多核处理器中,GIC可以实现中断的负载均衡和处理器间的中断共享。GIC具有多个中断输入通道,每个通道对应一个中断引脚。当外部设备发生中断时,通过相应的中断引脚将中断信号发送给GIC,然后GIC中断信号分发给对应的处理器核心。 armv8和armv9架构中的GIC支持多种中断处理模式,包括中断屏蔽、中断优先级配置和中断传递方式等。GIC还可以实现中断的共享和抢占,以提高中断的处理效率和可靠性。 总而言之,armv8和armv9架构中的异常中断GIC是处理器架构中非常重要的专题。通过学习异常中断的处理和GIC的功能,可以更好地理解和掌握armv8和armv9架构的中断处理机制,提高系统的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值