linux-kernel – in_irq()可靠吗?

linux-kernel – in_irq()可靠吗?,第1张

概述Unreliable Guide To Hacking The Linux Kernel表示 You can tell you are in a hardware interrupt, because in_irq() returns true. Caution. Beware that this will return a false positive if interrupts are dis Unreliable Guide To Hacking The Linux Kernel表示

You can tell you are in a harDWare interrupt,because in_irq() returns true.
Caution. Beware that this will return a false positive if interrupts are Disabled (see below).

是不是in_irq()可能在linux内核2.6.32中的hardirq上下文中返回非零而在x86上更新?

在我使用内核2.6.32(Debian 6)和3.4(OpenSUSE 12.1)的实验中,in_irq()在从进程上下文调用时总是返回0,即使它是在local_irq_disable()和local_irq_enable()之间调用的.当我使用禁用中断而不是local_irq *的自旋锁功能时,结果是一样的.

从内核的源代码,我目前无法看到in_irq()如何返回误报.任何人都可以澄清一下吗?

编辑:我也尝试了* _irqsave()和* _irq()自旋锁API以及local_irq_save()/ local_irq_restore(),结果是相同的,即in_irq()在禁用中断时返回0.通过x86上的cli机器指令显式禁用中断也不会强制in_irq()返回非零值.

解决方法 in_irq()是一个包装器,它是 looks at some bits in preempt_count,它是thread_info结构中的一个int,值为0意味着它没有被抢占,因此它不在irq中.

local_irq_disable()本身不影响该计数,但是spin_lock_irqsave() does,因此可能导致误报.你说你使用了自旋锁功能,你使用过这个吗?如果是这样,请查看preempt_count的值是否正在更改.

编辑:只是为了涵盖所有基础,检查以确保启用内核抢占.

总结

以上是内存溢出为你收集整理的linux-kernel – in_irq()可靠吗?全部内容,希望文章能够帮你解决linux-kernel – in_irq()可靠吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存