Linux kernel 自旋锁无法保护多核系统上的关键部分

Linux kernel 自旋锁无法保护多核系统上的关键部分,linux-kernel,linux-device-driver,multicore,interrupt,spinlock,Linux Kernel,Linux Device Driver,Multicore,Interrupt,Spinlock,我有一个字符设备驱动程序,它导致多核系统上的系统死锁。写调用有一个受自旋锁(spin_lock_irqsave)保护的关键部分。ISR必须获得该锁才能完成其任务。如果在一个内核上调用ISR,而写操作正在另一个内核上执行关键部分,则由于看门狗定时器检测到ISR内核上的硬锁定,会发生死机。写入进程永远不会返回以完成执行。写入进程是否应该继续在其内核上执行,释放锁以允许ISR中的另一个内核运行 关键部分需要大约5us才能完成。5秒后发生硬锁 我想我做错了什么,但不知道是什么 谢谢你的帮助 结果是关键部

我有一个字符设备驱动程序,它导致多核系统上的系统死锁。写调用有一个受自旋锁(spin_lock_irqsave)保护的关键部分。ISR必须获得该锁才能完成其任务。如果在一个内核上调用ISR,而写操作正在另一个内核上执行关键部分,则由于看门狗定时器检测到ISR内核上的硬锁定,会发生死机。写入进程永远不会返回以完成执行。写入进程是否应该继续在其内核上执行,释放锁以允许ISR中的另一个内核运行

关键部分需要大约5us才能完成。5秒后发生硬锁

我想我做错了什么,但不知道是什么


谢谢你的帮助

结果是关键部分调用了wait\u for\u completion\u timeout。即使超时为零,如果中断发生在阻塞部分,它仍然处于休眠状态,并且没有醒来以释放自旋锁。在本例中,使用try_wait_for_completion解决了问题


我可能会发布源代码,但它跨越了许多模块,并具有操作系统之间可移植性的架构抽象。会很混乱。

听起来好像你没有解锁自旋锁-也许你有一个错误路径没有解锁?无论如何,你需要发布代码。