> ... для портирования драйвера ядра 2.6 на 2.4 Нахуа? :)
> В драйверах для ядра 2.6 встречаю два варианта варианта работы с виртуальной
> памятью:
> 1. vmalloc_32(), vmalloc_to_page(), vm_insert_page() - например UVC
> 2. vmalloc_32(), vmalloc_to_page() - например SPCA5xx
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) kva = (unsigned long) page_address(vmalloc_to_page((void *) adr));
kva |= adr & (PAGE_SIZE - 1);
#else
va = VMALLOC_VMADDR(adr);
kva = uvirt_to_kva(pgd_offset_k(va), va);
http://mxhaard.free.fr/spca50x/Download/oldrelease/spca5xx-2...
> Отсюда собственно вопросы:
> 1. какую задачу решает vm_insert_page(), почему spca спокойно обходится без него ?
This allows drivers to insert individual pages they've allocated into a user vma.
The page has to be a nice clean _individual_ kernel allocation. If you allocate
a compound page, you need to have marked it as such (__GFP_COMP), or manually
just split the page up yourself (see split_page).
The page does not need to be reserved.
> 2. есть ли аналог vm_insert_page() для ядра 2.4 ?
remap_page_range()