linux - 在 Linux 内核中调用给定函数的上下文

标签 linux linux-kernel linux-device-driver

是否有一种直接的机制来识别给定函数是在中断上下文中调用还是从进程上下文中调用。这是问题的第一部分。第二部分是:如何同步 2 个进程,一个在中断上下文中,另一个在进程上下文中。如果我的理解是正确的,我们不能在中断上下文中为进程使用互斥锁,因为它不允许休眠。另一方面,如果我使用自旋锁,其他进程将使用 CPU 周期。同步这两个进程的最佳方法是什么。如果我的理解完全错误,请纠正我。

最佳答案

您可以使用 in_irq() 判断函数是否作为 IRQ 处理程序运行功能。但我认为使用它不是一个好习惯。您应该只从代码中看到您的函数在哪个上下文中运行。否则我会说你的代码设计不好。

至于同步机制——你是对的,你必须使用自旋锁,因为你需要在原子上下文中进行同步(例如中断)——在这里你没有太多选择。等待自旋锁时会浪费大量 CPU 周期也是正确的,因此您应该尽量减少处于锁定状态的代码量。

关于linux - 在 Linux 内核中调用给定函数的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615556/

相关文章:

c - 如何将 kmalloc() 地址转换为物理地址

linux - 最后字节验证不适用于 bash 中的 IP

linux - 如何使用 `ls` 在 linux shell 中列出文件,因为它们在相应的文件夹中列出

linux - 发生一般保护异常后获取通知 - Linux 内核

linux-kernel - 如何唯一地识别尝试 open() 内核模块的用户?

hardware - 用户空间 PCI BAR 访问在每个偏移处返回 0xFF

linux - 检测内核模块中 GPIO 的中断

linux -/bin/sh : Syntax Error: end of file unexpected

c - 同时使用 Direct-IO 写入和页面缓存读取是否安全?

linux - 我已经在linux源中启用了Uart并创建了一个图像如何测试uart工作