Linux на arm64: устройство сопоставления регистрируется в пользовательском пространстве без использования pgprot_noncached

Мы работаем с процессором на базе ARM64 и пытаемся сопоставить адрес устройства с пользовательским пространством в функции mmap драйвера.

В настоящее время мы используем pgprot_noncached и remap_pfn_range для сопоставления регистров устройств с пользовательским пространством, но это дает:

unhandled alignment fault (7) at 0xffffb420f080

Я ссылался на Linux на arm64: необработанные ошибки выравнивания , что указывает на то, что pgprot_noncached навязывает строгий порядок, что является причиной проблемы.

Я не могу использовать решение, упомянутое в Linux на arm64: необработанные ошибки выравнивания, так как dma_mmap_coherent ожидает динамического выделения памяти от dma_zalloc_coherent. Есть ли другой способ сопоставить память устройства с пользовательским пространством без использования DMA API?


person abhijit naik    schedule 03.07.2018    source источник