我使用下面的API來殺死一個tasklet:殺死一個tasklet同時holdiing spin_lock_irqsave
tasklet_kill();
雖然殺微進程,我一直在使用spin_lock_irqsave
禁用本地中斷。爲什麼內核引發以下消息(警告):
Attempt to kill taskletlet from interrupt
這難道不是最好使用tasklet_kill()
一邊拿着用spin_lock?
我使用下面的API來殺死一個tasklet:殺死一個tasklet同時holdiing spin_lock_irqsave
tasklet_kill();
雖然殺微進程,我一直在使用spin_lock_irqsave
禁用本地中斷。爲什麼內核引發以下消息(警告):
Attempt to kill taskletlet from interrupt
這難道不是最好使用tasklet_kill()
一邊拿着用spin_lock?
如果你看看func本身,你會發現它有一個調用yield,它可以放棄cpu。但禁止中斷和/或保持旋轉鎖定。
我不知道郵件的實際原因(它實際上是[notice](http://elixir.free-electrons.com/linux/v4.13.3/source/kernel/softirq.c#L585) ,不是一個警告)。但是,如果tasklet運行(在其他CPU上),該函數的目的是**等待**直到完成。鑑於等待實際上是一個*忙等待*,這是允許中斷禁用。但是你確定你想**一個任務,你已經特別移動到tasklet中,並且中斷被禁用了嗎? – Tsyvarev
是的,我想要任何掛起的小程序(已安排)完成。我也希望沒有新的tasklets能夠調度,因此需要禁用中斷以確保沒有新的tasklet從中斷處理程序中調度。 –