Распечатка 10.3 Реализация mmap в uClinux

Предыдущая  Содержание  Следующая V*D*V

Распечатка 10.3

 

do_mmap_pgoff() {

 

    …

    …

 

  if (file) {

    error = file->f_op->mmap(file, &vma);

    if (!error)

      return vma.vm_start;

    …

  }

 

    …

 

  tblock = (struct mm_tblock_struct *)

  kmalloc(sizeof(struct mm_tblock_struct),GFP_KERNEL);

    …

    …

  tblock->rblock = (struct mm_rblock_struct *)

  kmalloc(sizeof(struct mm_rblock_struct), GFP_KERNEL);

 

    …

    …

  result = kmalloc(len, GFP_KERNEL);

    …

    …

 

  /* Подсчёт ссылок */

  tblock->rblock->refcount = 1;

  tblock->rblock->kblock = result;

  tblock->rblock->size = len;

    …

    …

  /* Подключаем блок к списку блоков структуры задачи */

  tblock->next = current->mm->context.tblock.next;

  current->mm->context.tblock.next = tblock;

  current->mm->total_vm += len >> PAGE_SHIFT;

 

  return (unsigned long)result;

}

Предыдущая  Содержание  Следующая