The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Linux: Выделение памяти"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Linux: Выделение памяти"
Сообщение от karak emailИскать по авторуВ закладки(ok) on 08-Июл-04, 23:44  (MSK)
Подскажите пожалуйста!!! Как в модуле ядра выделить много (~128M и более) физической памяти, сегментами по 4K - 64K (желательно 64K), чтобы эти сегменты можно было спроецировать в пространство пользователя вызовом mmap для каждого сегмента. Спасибо...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Linux: Выделение памяти"
Сообщение от Murr Искать по авторуВ закладки(??) on 09-Июл-04, 00:15  (MSK)
>Подскажите пожалуйста!!! Как в модуле ядра выделить много (~128M и более) физической
>памяти, сегментами по 4K - 64K (желательно 64K), чтобы эти сегменты
>можно было спроецировать в пространство пользователя вызовом mmap для каждого сегмента.
>Спасибо...

Либо тупо написать свои aops, либо аккуратно все выделенные kmalloc страницы пометить reserved и вызвать remap_page_range (так делает ряд драйверов).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Linux: Выделение памяти"
Сообщение от karak emailИскать по авторуВ закладки(ok) on 13-Июл-04, 19:13  (MSK)
>>Подскажите пожалуйста!!! Как в модуле ядра выделить много (~128M и более) физической
>>памяти, сегментами по 4K - 64K (желательно 64K), чтобы эти сегменты
>>можно было спроецировать в пространство пользователя вызовом mmap для каждого сегмента.
>>Спасибо...
>
>Либо тупо написать свои aops, либо аккуратно все выделенные kmalloc страницы пометить
>reserved и вызвать remap_page_range (так делает ряд драйверов).

Спасибо. А можно спроецировать пмять выделенную pci_alloc_consistent? У меня не получилось.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Linux: Выделение памяти"
Сообщение от karak emailИскать по авторуВ закладки(??) on 13-Июл-04, 23:23  (MSK)
>>>Подскажите пожалуйста!!! Как в модуле ядра выделить много (~128M и более) физической
>>>памяти, сегментами по 4K - 64K (желательно 64K), чтобы эти сегменты
>>>можно было спроецировать в пространство пользователя вызовом mmap для каждого сегмента.
>>>Спасибо...
>>
>>Либо тупо написать свои aops, либо аккуратно все выделенные kmalloc страницы пометить
>>reserved и вызвать remap_page_range (так делает ряд драйверов).
>
>Спасибо. А можно спроецировать пмять выделенную pci_alloc_consistent? У меня не получилось.

Попробовал таким способом не получается. Может что-то не так? Мой вызов mmap выглядит таким образом:
int xxx_mmap(struct file *filp, struct vm_area_struct *vma )
{

  int x = 0;
        unsigned long offset = VMA_OFFSET(vma);

        vma->vm_flags |= VM_RESERVED;

        if (offset >= __pa(high_memory) || (filp->f_flags & O_SYNC))
                vma->vm_flags |= VM_IO;
// 2.4
#ifdef LINUX_24
        x = remap_page_range(vma, vma->vm_start, offset,
                             vma->vm_end-vma->vm_start,
                             vma->vm_page_prot);
#else
        x = remap_page_range(vma->vm_start, offset,
                             vma->vm_end-vma->vm_start,
                             vma->vm_page_prot);
#endif

if( x < 0) {
    printk("<0>remap_page_range error.\n" );
          return -EAGAIN;
}

return 0;
}

#ifdef LINUX_24
#define VMA_OFFSET(vma)  ((vma)->vm_pgoff << PAGE_SHIFT)
#else
#define VMA_OFFSET(vma)  ((vma)->vm_offset)
#endif

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру