据我所知,我们可以通过在linux内核中涉及in_interrupt()来validation我们是否处于中断上下文中。 当进入或退出hardirq或softirq时, in_interrupt()函数的执行由thread_info->preempt_count计数。 所以,当in_interrupt()返回非零时,表示我们正在处理hardirq或softirq。
但是,我的问题是当我们涉及local_bh_disable()函数,它增加了thread_info->preempt_count ,所以in_interrupt()函数返回非零。 因此,我们现在怎么能确定我们是否处于中断环境。 在我看来,primefaces上下文是本地中断被禁用
这里是我现在处于内核模式的情况,我想访问用户态地址空间,但是我不知道在中断上下文中访问userland地址空间是否无效,是在进程上下文还是中断上下文中运行,所以我想通过涉及in_interrupt()函数来确定是否在进程上下文中。 然后,我得到的返回值大于零,因此,我认为我现在处于中断环境,不会访问用户级。 然而,也许有一些函数暗示涉及local_bh_disable来增加thread_info->preempt_count来禁用sortirq,但事实上,我们正在进程上下文中,只是禁用了softirq,因此,我们可以安全地访问用户地址空间但我们犯了一个错误。
简单的中断处理程序:request_irq返回错误代码-22
内核vs系统中的Windows进程
何时使用HANDLE_EINTR或HANDLE_EAGAIN?
多核处理器中基于轮询和中断的数据包处理方法
为什么中断处理程序有睡眠function?
在没有用户inputinput的情况下中断cin while循环
在linux中设置串口中断
在IRQ合并之前,NAPI有哪些优势?
禁用SATA AHCI中的命令完成合并(CCC)
如何在linux中知道特定引脚的中断/ GPIO编号
在preempt_mask.h中有几个有趣的函数:
in_irq():硬件中断
in_softirq():我们在softirq上下文吗?
in_interrupt():中断上下文?
in_nmi():我们在NMI环境中吗?
in_atomic():我们在原子上下文中运行吗? 警告:这个宏不能总是检测原子上下文
请注意,在正常情况下,驱动程序不应该使用任何这些功能。
我认为in_interrupt()是一个坏的设计!
如果代码在进程上下文中失效,则不需要调用in_interrupt()。
in_serving_softirq()表示您处于真正的softirq上下文do_softirq()而不是local_bh_disable()。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。