(從文章LWN)如何防止RCU閱讀器部分被搶佔?
1 rcu_read_lock();
2 list_for_each_entry_rcu(p, head, list) {
3 do_something_with(p->a, p->b, p->c);
4 }
5 rcu_read_unlock();
的RCU更新操作,以維護每個CPU做synchronize_rcu()切換的背景下,因此各RCU-讀者已經完成了它的任務。但RCU必須依靠讀者不被搶佔。事實上,LWN說未來:
雖然這個簡單的方法也適用於在搶佔 跨越RCU讀側臨界區禁止,換句話說,對於 非CONFIG_PREEMPT和CONFIG_PREEMPT內核內核,它不爲 工作CONFIG_PREEMPT_RT實時(-rt)內核。
我明白搶佔非CONFIG_PREEMPT內核被禁用,但爲什麼是OK的CONFIG_PREEMPT內核呢?
爲什麼引用說「這種簡單的方法適用於在RCU讀取端臨界區禁用搶佔的內核,換句話說,對於非CONFIG_PREEMPT和CONFIG_PREEMPT內核」。當內核是CONFIG_PREEMPT時,這種方法會工作嗎?爲什麼此報價表示禁止CONFIG_PREEMPT內核的搶佔? – 4pie0