2012-03-21 12 views
3

我需要在給定系統的所有內核上啓用cr4位8(PCE)。我目前有一個工作模塊,它在模塊加載時在運行的內核上設置此位。我被困在這裏,並沒有找到很多關於如何並行運行在所有內核上的文檔:在所有內核上設置控制寄存器

1)看來卸載並不總是發生在負載發生的核心上,所以我可以' t清理正確

2)我想不出任何方式來強制模塊初始化在特定的核心執行 - 如果我可以,我可以簡單地有一個模塊可以分別調用每個核心到設置所有內核。似乎沒有可用於模塊的sched_seffffinity等效項。

有沒有辦法強制這個模塊在所有內核上運行,無論是通過並行還是遍歷所有內核?我不能修改內核本身,也不能在啓動時加載模塊,所以我不能只改變寄存器最初設置的內容。

感謝任何提示,我在這裏試圖找出這個瘋狂!

回答

4

找出來 - smp_call_function()在系統的所有內核上調用一個函數。搜索結果只是非常棘手(很少/沒有文檔): -/

這很好,你可以通過在被調用函數中打印smp_processor_id()來驗證每個內核運行代碼。

編輯:此功能只調用其他核心,所以你仍然需要單獨調用一次函數來獲取模塊當前運行的核心!

+0

還有一些版本的smp_call_function可以讓你傳遞一個內核掩碼來運行,或者一個核心ID在一個特定的核心上運行。 – ChrisAshton84 2012-03-22 17:45:45