2.3.4 trace_hardirqs_off与trace_hardirqs_on

Interrupt Pipeline系列文章大纲-CSDN博客

        2.3 el0_irq

                2.3.1 el0_irq代码框架
                2.3.2 kernel_entry 0 与kernel_exit 0
                2.3.3 el0_irq_naked与enable_da_f
                2.3.4 trace_hardirqs_off与trace_hardirqs_on
                2.3.5 irq_handler
                2.3.6 返回用户空间

2.3.4 trace_hardirqs_off与trace_hardirqs_on

        如果打开内核配置项CONFIG_TRACE_IRQFLAGS,那么在硬件中断关闭和打开的过程中,通过调用trace_hardirqs_off/trace_hardirqs_on函数可以记录硬件中断关闭和打开的事件。两个函数调用的tracer_hardirqs_off/tracer_hardirqs_off,服务于ftrace的众多tracer之一irqsoff(CONFIG_IRQSOFF_TRACER)。

       引入了I-pipe之后,这个机制只作用于root域,而且记录的是虚拟中断的关闭和打开事件。

        在el0_irq中,硬件中断由HEAD域接管,所以,直接跳过对trace_hardirqs_off的调用。

#if defined(CONFIG_TRACE_IRQFLAGS) && !defined(CONFIG_I-pipe)

       bl    trace_hardirqs_off

#endif

        在其它调用trace_hardirqs_off/ trace_hardirqs_on的位置,在函数中加上对root域的检查。这两个函数定义在kernel/trace/trace_preemptirq.c:

void trace_hardirqs_on(void)

{

       if (!ipipe_root_p)    //如果是非root域,直接return

              return;

       if (this_cpu_read(tracing_irq_cpu)) {

              if (!in_nmi())

                     trace_irq_enable_rcuidle(CALLER_ADDR0, CALLER_ADDR1);

              tracer_hardirqs_on(CALLER_ADDR0, CALLER_ADDR1);

              this_cpu_write(tracing_irq_cpu, 0);

       }

       lockdep_hardirqs_on(CALLER_ADDR0);

}

EXPORT_SYMBOL(trace_hardirqs_on);

void trace_hardirqs_off(void)

{

       if (!ipipe_root_p)    //如果是非root域,直接return

              return;

       if (!this_cpu_read(tracing_irq_cpu)) {

              this_cpu_write(tracing_irq_cpu, 1);

              tracer_hardirqs_off(CALLER_ADDR0, CALLER_ADDR1);

              if (!in_nmi())

                     trace_irq_disable_rcuidle(CALLER_ADDR0, CALLER_ADDR1);

       }

       lockdep_hardirqs_off(CALLER_ADDR0);

}

EXPORT_SYMBOL(trace_hardirqs_off);

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值