Размер страницы - 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 лезут сообщения ошибки,
модуль не выгружается и т.д.
Короче я явно что-то не так делаю. Научите плз. как правильно выделять и освобождать память...