Я написал драйвер linux, который ioremaps экспортирует PCI BAR0 для конкретного устройства в двоичный атрибут sysfs, позволяющий пользователю напрямую управлять им.
Проблема возникает, когда я пытаюсь использовать MMAP поверх атрибута для прямого доступа к этому биту памяти (из программы пользовательской программы). Чтение выполняется просто отлично и возвращает ожидаемые значения, хотя, когда я пишу в эту память, он, похоже, кэшируется где-то между ядром и памятью и не доставляется в корневой комплекс GMCH (и, следовательно, устройство). То, что я хотел бы сделать, это иметь неявный барьер памяти записи после каждого доступа.
- Есть ли способ предотвратить загрузку ядра из кэширования в бит памяти mmap-ed?
Последующие действия:
- Вызывается msync() после каждого доступа к "принятому" способу сделать это?