![](/img/trans.png)
[英]Why is wait_event_interruptible() in Linux kernel never used in a while loop?
[英]Why is there no wait_event_…_irqsave() function or macro in the Linux kernel?
在Linux內核中,函數wait_event_lock_irq(wq_head, condition, lock)
在include/linux/wait.h
中提供,它期望lock
被保持並使用spin_lock_irq()
和spin_unlock_irq()
解鎖/鎖定它。 是否有特殊原因導致使用spin_lock_irqsave()
/ spin_lock_irqrestore()
的wait_event_lock_irqsave()
行沒有提供?
spin_lock_irqsave()
和spin_unlock_irqrestore()
保存並恢復CPU的“中斷啟用”狀態標志。 如果您知道您沒有在啟用中斷的中斷上下文中運行,但需要與中斷上下文中的鎖同步,則可以使用spin_lock_irq()
和spin_unlock_irq()
來禁用和重新啟用中斷,而不保留“啟用中斷” “狀態標志。
wait_event_...()
宏永遠不應該從中斷上下文中調用(因為它們可能會休眠),因此它們可以安全地假設它們不是從中斷上下文中調用的,因此不需要保留CPU的“中斷已啟用”狀態標志。 正常(非IRQ) wait_event_...()
宏也應該永遠禁用中斷調用(再次,因為他們可能睡覺),因此它是安全的,他們認為中斷未被禁用。 當然,在禁用中斷的情況下調用wait_event_..._lock_irq()
宏,但是它們假定在前一次調用spin_lock_irq()
之前啟用了中斷,並且可以安全地重新啟用中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.