http://lkml.indiana.edu/hypermail/linux/kernel/0709.0/1329.html

я такой вопрос: как я могу определить, когда безопасно отключить отслеживание кэша, когда я правильно использую[pci_]dma_sync_single_for_{cpu,device} в моем драйвере устройства?

Я работаю над драйвером устройства для устройства, которое записывает напрямую в ОЗУ через PCI Express (DMA), и беспокоюсь об управлении когерентностью кэша. Есть контрольный бит, который я могу установить при запуске DMA, чтобы включить или отключить отслеживание кэша во время прямого доступа к памяти, очевидно, для производительности я бы хотел оставить отслеживание кэша отключенным, если это вообще возможно.

В режиме прерывания я звонюpci_dma_sync_single_for_cpu() а также..._for_device() при необходимости, при переключении буферов DMA, но в 32-битном Linux 2.6.18 (RHEL 5) получается, что эти команды являются макросами, которые расширяются до нуля ... что объясняет, почему мое устройство возвращает мусор, когда отслеживание кэша отключено на этом ядро!

Я просмотрел историю исходников ядра, и кажется, что до 2.6.25 только 64-битный x86 имел хуки для синхронизации DMA. В версии 2.6.26, похоже, существует общий унифицированный механизм косвенного обращения для синхронизации DMA (в настоящее времяinclude/asm-generic/dma-mapping-common.hчерез поляsync_single_for_{cpu,device} изdma_map_ops, но до сих пор мне не удалось найти какие-либо определения этих операций.

Ответы на вопрос(2)

Ваш ответ на вопрос