簡體   English   中英

為什么Linux內核中沒有wait_event_ ... _irqsave()函數或宏?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM