我寫了一個linux驅動程序,ioremaps將特定設備的PCI BAR0導出到允許用戶空間直接控制它的sysfs二進制屬性。如何防止MMAP緩存值?
當我試圖在屬性頂部的MMAP直接訪問該位內存(來自用戶級程序)時,問題就隨之增加。讀取成功就好,並返回期望的值,但是當我寫入該內存時,它似乎被緩存在內核和內存之間的某處,而不會傳遞到GMCH根聯合體(因此也就是設備)。我想要做的是每次訪問後都有一個隱式寫入內存屏障。
- 有什麼辦法可以防止內核緩存寫入內存的mmap-ed位?
遵守了UPS:
- 呼喚後,每msync()訪問 「接受」 的方式來做到這一點?
要回答後續......你根本不需要'msync()',因爲沒有文件支持mmap。你可能需要的是一些體系結構特定的指令,例如爲了確保powerpc上硬件訪問的正確順序,你可能需要[eieio](https://www-01.ibm.com/support/knowledgecenter /ssw_aix_61/com.ibm.aix.alangref/idalangref_eieio_instrs.htm)指令(某人有幽默感:-) ...做出同樣的評論[這裏](https://unix.stackexchange.com/questions/237783/訪問存儲器映射-IO-是慢)。 – 2015-11-04 12:42:44