【发布时间】:2017-09-26 13:45:52
【问题描述】:
我正在使用以下 API 来杀死一个 tasklet:
tasklet_kill();
在终止 tasklet 时,我使用 spin_lock_irqsave 禁用了本地中断。为什么内核会抛出以下消息(警告?):
Attempt to kill tasklet from interrupt
在持有 spin_lock 的同时使用tasklet_kill() 是否不可取?
【问题讨论】:
-
我不知道消息的实际原因(实际上是notice,不是警告)。但是如果 tasklet 正在运行(在其他 CPU 上),则该函数打算等待直到它完成。给定的等待实际上是一个忙等待,也就是说,在禁用中断的情况下允许它。但是您确定要等待一个您专门移入 tasklet 并禁用中断的任务吗?
-
是的。我希望任何待处理的小任务(已经安排好)都能完成。另外我希望没有新的小任务被安排,因此需要禁用中断以确保没有从中断处理程序中安排新的小任务