Размер страницы - 4КБайта.
Например, надо принять по DMA - 40КБайт, т.е. 10 страниц.
Выделяю память:
dma_addr = (unsigned int*)pci_alloc_consistent(dev[LID], 40000,(dma_addr_t*) &dma_buff_phys);
Резервирую страницы:
start_page_addr = virt_to_page(dma_addr);
for(i=0;i<10;i++) {
SetPageReserved(start_page_addr+i);
}
Принимаю. Все вроде нормально.
Сейчас освобождаю память:
ClearPageReserved(start_page_addr);
pci_free_consistent((struct pci_dev *)dev, 40000, dma_addr, dma_buff_phys);
Вот тут начинаются чудеса всякие: в /var/log'e лезут сообщения ошибки,
модуль не выгружается и т.д.
Короче я явно что-то не так делаю. Научите плз. как правильно выделять и освобождать память...
Похожие темы
- Форум Kernel BUG (2005)
- Форум выделение памяти в модуле ядра (2005)
- Форум никак с minicom не разберусь... (2005)
- Форум никак с винтом не разберусь (2005)
- Форум никак не разберусь с фильтрами в syslog-ng (2008)
- Форум Давайте разберёмся (2014)
- Форум тыжпрограммист, разберись (2015)
- Форум Давайте разберёмся :) (2005)
- Форум разберитесь с К48(+) (2005)
- Форум разберите детский сад (2005)