LINUX.ORG.RU

mmap scatter-gather


0

0

как сделать (наиболее правильно) чтобы нормально отмаппить массив буферов???

Когда один буфер - всё зашибись.

Делаю несколько (не подряд идущих буферов) - задаю из userspace область - в драйвере делаю remap_pfn_range каждого буфера. В принципе конечно тоже зашибись но когда делается прогой unmap всё вылетает с ошибкой - negative page count...

Я так понимаю remap_pfn_range работает тока с последовательно идущими страницами? Как тогда быть - скока буферов стока и раз делать прогой mmap??

Пытал vm_insert_page - что-то мутно - у меня не хочет делать говорит page count = 0...

Подскажите или киньте ссылку как идеологически правильно всё это сделать.

anonymous

Попробуй pci_alloc_consistent/pci_free_consistent (dma_alloc_xxx если 2.6). А вообще да, для каждого блока нужно дежать mmap. И не забудь SetPageReserved() для всего блока. Я делал для железяки на PLX-е scatter-gather list этими вот функциями.

karak
()
Ответ на: комментарий от karak

Те каждый элемент scatter-gather list'а выделялся этими ф-циями и затем для каждого элемента из userspace делался mmap? А как тогда определить какой элемент мэппить?

(Про reserved я в курсе).

anonymous
()
Ответ на: комментарий от anonymous

> Те каждый элемент scatter-gather list'а выделялся этими ф-циями и > затем для каждого элемента из userspace делался mmap? Да.

> А как тогда определить какой элемент мэппить?

необходимо передать физический адрес блока памяти (типа dma_addr_t) - который вернет pci_alloc_xxx() в userspace для каждого нового блока и затем подсунуть его в mmap() в параметр offset.

karak
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.