LINUX.ORG.RU

выделение памяти для PCI


0

0

Контроллер PCI - PLX 9054. Хочу запустить Scatter/Gather mode. Для
этого в регистр нужно подсунуть _физический_ адресс начала описания
некоторых параметров. Я создаю структуру с необходимыми полями
sglist, например, и хочу получить нужный адресс так - __pa(&sglist).
Но что-то не хочет работать. Может как-то по другому адресс получать
надо ? 
anonymous

Переменные в пользовательских процессах находятся в mmapped-виртуальном пространстве, поэтому макрос __pa не подходит однозначно, т.к. преобразование не линейное. Хотя если ты в kernel-mode... попробуй kmalloc или без макроса, распечатай адрес переменной

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

Ессно я в kernel-mode. Но kmalloc тож вирт. адрес выдаст, т.е. тож __pa надо делать. Да и какие отличия от просто объявления структуры в kernel от kmalloc под неё ?

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

>Да и какие отличия от просто объявления структуры в kernel от kmalloc под неё ?

kmalloc возвращает физический адрес и помечает эту область как занятую для других процессов, а ты скорее всего возвращаешь адрес со стека kernel-процесса... вообщем, пробуй всё

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

короче: распечатай значения и сравни их с диапазоном доступной ram из dmesg

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

> kmalloc возвращает физический адрес

kmalloc возвращает вирт. адрес, но (в отличие от vmalloc) один в один отображает физ. память.

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