linux-kernel – in_irq()可靠吗?
Unreliable Guide To Hacking The Linux Kernel表示
是不是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 inpreempt_count ,它是thread_info结构中的一个int,值为0意味着它没有被抢占,因此它不在irq中.
local_irq_disable()本身不影响该计数,但是 编辑:只是为了涵盖所有基础,检查以确保启用内核抢占. (编辑:大庆站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 限制bash循环
- C/C++裸机编译和特定操作系统(Linux)编译之间有什么区别?
- linux – 使用什么语言的cPanel / WHM面板服务器?
- embedded-linux – 从用户空间获取U-boot的版本
- c – 来自Windows的交叉编译GNU ARM(BeagleBoneBlack). * .
- 将进程或用户绑定到特定IP(Linux)
- linux – Emacs要读大文件14GB [已关闭]
- linux – SMBfs挂载OK,列出OK,读取KO,smbclient OK
- linux – 使用ZeroMQ的反向PUB / SUB问题
- LINUX实操:shell中while循环的陷阱