*参照元 [#je153adc]
#backlinks

*説明 [#g466dcc3]
-パス: [[linux-2.6.33/mm/mlock.c]]

-FIXME: これは何?
--説明


**引数 [#rddb8e50]
-unsigned long start
--
-size_t len
--
-int on
--


**返り値 [#jf4bd499]
-int
--


**参考 [#h8d66186]


*実装 [#n603eed1]
 static int do_mlock(unsigned long start, size_t len, int on)
 {
 	unsigned long nstart, end, tmp;
 	struct vm_area_struct * vma, * prev;
 	int error;
 
-
--[[linux-2.6.33/vm_area_struct]]

 	len = PAGE_ALIGN(len);
 	end = start + len;
 	if (end < start)
 		return -EINVAL;
 	if (end == start)
 		return 0;
-
--[[linux-2.6.33/PAGE_ALIGN()]]

 	vma = find_vma_prev(current->mm, start, &prev);
 	if (!vma || vma->vm_start > start)
 		return -ENOMEM;
 
 	if (start > vma->vm_start)
 		prev = vma;
 
-
--[[linux-2.6.33/find_vma_prev()]]
-
--[[linux-2.6.33/current(global)]]

 	for (nstart = start ; ; ) {
 		unsigned int newflags;
 
 		/* Here we know that  vma->vm_start <= nstart < vma->vm_end. */
 
 		newflags = vma->vm_flags | VM_LOCKED;
 		if (!on)
 			newflags &= ~VM_LOCKED;
 
-
--[[linux-2.6.33/VM_LOCKED]]

 		tmp = vma->vm_end;
 		if (tmp > end)
 			tmp = end;
 		error = mlock_fixup(vma, &prev, nstart, tmp, newflags);
 		if (error)
 			break;
-
--[[linux-2.6.33/mlock_fixup()]]

 		nstart = tmp;
 		if (nstart < prev->vm_end)
 			nstart = prev->vm_end;
 		if (nstart >= end)
 			break;
 
 		vma = prev->vm_next;
 		if (!vma || vma->vm_start != nstart) {
 			error = -ENOMEM;
 			break;
 		}
 	}
 	return error;
 }


*コメント [#iee2d81b]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS