URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9470
[ Назад ]

Исходное сообщение
"vmalloc (ядра 2.4 и 2.6)"

Отправлено igor__ , 30-Май-12 11:20 
Добрый день.
Нужен совет по направлению "раскопок" для портирования драйвера ядра 2.6 на 2.4
В драйверах для ядра 2.6 встречаю два варианта варианта работы с виртуальной памятью:
1. vmalloc_32(), vmalloc_to_page(), vm_insert_page() - например UVC
2. vmalloc_32(), vmalloc_to_page() - например SPCA5xx

Отсюда собственно вопросы:
1. какую задачу решает vm_insert_page(), почему spca спокойно обходится без него ?
2. есть ли аналог vm_insert_page() для ядра 2.4 ?

В LDD2 и LDD3 этот метод не рассмартривается.
Заранее спасибо.



Содержание

Сообщения в этом обсуждении
"vmalloc (ядра 2.4 и 2.6)"
Отправлено pavlinux , 30-Май-12 18:08 
> ... для портирования драйвера ядра 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()