2016-03-08 2 views
-1

Я пишу драйвер ядра, который предоставляет пользователю пространство для моего устройства ввода/вывода. Используя mmap, приложение получает виртуальный адрес для записи в устройство. Поскольку я хочу, чтобы приложение записывало использование большой транзакции PCIe, драйвер отображает эту память для объединения записи. В соответствии с типом памяти (с записью или без кэширования) приложение применяет оптимальный способ работы с устройством.проверить, поддерживает ли сопоставленная память комбинация записи

Но некоторые архитектуры не поддерживают объединение с записью или могут поддерживать, но только для части пространства памяти. Следовательно, важно, чтобы драйвер ядра сообщил приложению, если ему удалось сопоставить память для объединения записи или нет.

Мне нужен общий способ проверить драйвер ядра, если память, которую он отображает (или собирается на карте), объединяется с записью или нет. Как я могу это сделать?

здесь является частью моего кода:

vma-> vm_page_prot = pgprot_writecombine (vma-> vm_page_prot); io_remap_pfn_range (vma, vma-> vm_start, pfn, PAGE_SIZE, vma-> vm_page_prot);

ответ

0

Прежде всего, вы можете узнать, поддерживает ли архитектура объединение записи во время компиляции с макросом ARCH_HAS_IOREMAP_WC. См., Например, here.

Во время выполнения вы можете проверить возвращаемые значения от ioremap_wc или set_memory_wc и друзей для успеха или нет.

+0

Спасибо, Майкл. – Guy

+0

, но я пытаюсь отобразить пространство пользователя на моем устройстве. поэтому я использую mmap, который обрабатывает vm_area_struct и AFAIU ioremap_wc. также, когда ARCH_HAS_IOREMAP_WC не определен, необязательно означает, что арка не поддерживает память WC – Guy

Смежные вопросы