Linux kernel 为长原因重新启动禁用内核中断?

Linux kernel 为长原因重新启动禁用内核中断?,linux-kernel,interrupt,watchdog,Linux Kernel,Interrupt,Watchdog,在linux内核中,我有一段代码需要在禁用内核中断的情况下执行 代码附在 自旋锁irqsave(); 自旋解锁irqsave() 代码的执行时间是几秒钟。这不好吗?禁用内核中断几秒钟可以吗?当我运行代码时,操作系统会重新启动,错误也会消失 未检测到错误 启动信息: 上次开机原因:看门狗 这是什么意思 谢谢禁用中断几秒钟是个非常糟糕的主意 必须使用可延迟函数等重新创建代码。您可以为此使用微线程或工作队列。仅在您真正需要中断的地方禁用中断 如您所见,如果禁用中断时间过长,看门狗将重新启动系统。看门狗

在linux内核中,我有一段代码需要在禁用内核中断的情况下执行

代码附在

自旋锁irqsave(); 自旋解锁irqsave()

代码的执行时间是几秒钟。这不好吗?禁用内核中断几秒钟可以吗?当我运行代码时,操作系统会重新启动,错误也会消失

未检测到错误 启动信息: 上次开机原因:看门狗

这是什么意思


谢谢

禁用中断几秒钟是个非常糟糕的主意

必须使用可延迟函数等重新创建代码。您可以为此使用微线程或工作队列。仅在您真正需要中断的地方禁用中断


如您所见,如果禁用中断时间过长,看门狗将重新启动系统。看门狗重新启动您的系统,因为它“认为”系统已冻结,因为您禁用了中断。

是的,这是非常糟糕的。它可能会导致“硬锁定”(但取决于内核配置)。 如果有可能创建“下半部分”(好方法),并在这些上下文中使用“硬”操作,那么它可能是先发制人的。 也不要在原子上下文中使用调度程序例程(上下,中断处理程序),这会导致内核死机。
您可以在第10章:中断处理()中找到更多信息。

从技术上讲,您可以通过查找重置看门狗计时器的代码(可能是计时器中断定期运行的代码)来防止看门狗重新启动并确保您在代码中至少经常执行相同的操作,以确保看门狗永远不会因疏忽而过期并重新启动系统。但是您很可能会发现其他问题是由于中断被禁用那么长时间造成的。