Как предотвратить кэширование значений MMAP?

Я написал драйвер для Linux, который ioremaps экспортирует PCI BAR0 для конкретного устройства в двоичный атрибут sysfs, позволяя пользовательскому пространству напрямую управлять им.

Проблема возникает, когда я пытаюсь использовать MMAP поверх атрибута для прямого доступа к этому биту памяти (из пользовательской программы). Чтение проходит успешно и возвращает ожидаемые значения, хотя когда я записываю в эту память, она кэшируется где-то между ядром и памятью и не доставляется в корневой комплекс GMCH (и, следовательно, на устройство ). Что я хотел бы сделать, так это иметь неявный барьер записи памяти после каждого доступа.

  • Есть ли способ запретить ядру кэшировать записи в бит памяти с mmap-ed?

Последующие действия:

  • Является ли вызов msync()после каждого доступа «принятым» способом сделать это?

15
задан George Skoptsov 27 March 2012 в 13:58
поделиться