簡體   English   中英

是否有必要在softirq上下文中調用rcu_read_lock

[英]Is it necessary invoke rcu_read_lock in softirq context

rcu_read_lock的實現是禁用搶占和屏障。 並且softirq上下文將不會被搶占。 因此有必要在softirq上下文中調用rcu_read_lock。 障礙重要嗎?

是的,即使在softirq上下文中,也有必要使用rcu_read_lock來訪問受rcu保護的指針。

如您所指出的, rcu_read_lock和softirqs的某些實現(例如:TINY_RCU)使它成為可能,即使您不使用rcu_read_lock分隔rcu讀取側關鍵部分,也沒有損壞的風險。 但是,這不是rcu api的保證,由於特定的實現,僅是“ hack”。 這種破解可能會因使用rcu的其他實現而中斷(例如:PREEMPT_RCU)。

如果希望將softirqs視為顯式的rcu讀取側關鍵部分,則必須使用RCU調度的 api: Documentation / RCU / whatisRCU.txt

RCU主要作者寫的文章的以下部分直接解決了您的問題: RCU的要求第1部分:基礎-禁用搶占不會阻止寬限期

如果CONFIG_PROVE_RCU = y,我將添加在rcu_read_lock之外執行rcu_dereference代碼將觸發lockdep警告。

rcu_read_lock用於保護某些內核資源被同時修改而導致競爭條件錯誤。

資源必須防止的是:被兩個軟件任務/上下文同時使用和修改。

在Linux中,同時修改可能發生在以下任一情況中:

  1. 從一個任務到另一個任務,
  2. 從任務到IRQ上下文的上下文
  3. 從不同VCPU內核中的任務進行並發訪問

在單核CPU環境中,事件1)和2)仍然可能發生。 在修改關鍵資源的任務上,將產生一個軟件IRQ,進入軟件IRQ上下文,運行IRQ處理程序並同時修改同一資源。

出於文檔目的,在softirq上下文中調用rcu_read_lock是一個好主意,因此您和其他開發人員都知道此處使用了RCU保護的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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